32 lines
725 B
C++
32 lines
725 B
C++
// Sanitizer should not crash if pthread_create fails.
|
|
// RUN: %clangxx -pthread %s -o %t && %run %t
|
|
|
|
// pthread_create with lsan i386 does not fail here.
|
|
// UNSUPPORTED: i386-linux && lsan
|
|
|
|
#include <cassert>
|
|
#include <pthread.h>
|
|
#include <stdlib.h>
|
|
|
|
void *null_func(void *args) {
|
|
return NULL;
|
|
}
|
|
|
|
int main(void) {
|
|
pthread_t thread;
|
|
pthread_attr_t attrs;
|
|
pthread_attr_init(&attrs);
|
|
// Set size huge enough to fail pthread_create.
|
|
size_t sz = ~0;
|
|
// Align the size just in case.
|
|
sz >>= 16;
|
|
sz <<= 16;
|
|
int res = pthread_attr_setstacksize(&attrs, sz);
|
|
assert(res == 0);
|
|
for (size_t i = 0; i < 10; ++i) {
|
|
res = pthread_create(&thread, &attrs, null_func, NULL);
|
|
assert(res != 0);
|
|
}
|
|
return 0;
|
|
}
|