forked from OSchip/llvm-project
tsan: support allocator_may_return_null flag
Fixes https://code.google.com/p/thread-sanitizer/issues/detail?id=29 llvm-svn: 191482
This commit is contained in:
parent
4467f33e3c
commit
439a904515
|
@ -1,5 +1,3 @@
|
||||||
// XFAIL: *
|
|
||||||
// FIXME: https://code.google.com/p/thread-sanitizer/issues/detail?id=29
|
|
||||||
// RUN: %clangxx_tsan -O1 %s -o %t
|
// RUN: %clangxx_tsan -O1 %s -o %t
|
||||||
// RUN: TSAN_OPTIONS=allocator_may_return_null=1 %t 2>&1 | FileCheck %s
|
// RUN: TSAN_OPTIONS=allocator_may_return_null=1 %t 2>&1 | FileCheck %s
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
|
|
@ -64,6 +64,7 @@ void InitializeFlags(Flags *f, const char *env) {
|
||||||
f->external_symbolizer_path = "";
|
f->external_symbolizer_path = "";
|
||||||
f->history_size = kGoMode ? 1 : 2; // There are a lot of goroutines in Go.
|
f->history_size = kGoMode ? 1 : 2; // There are a lot of goroutines in Go.
|
||||||
f->io_sync = 1;
|
f->io_sync = 1;
|
||||||
|
f->allocator_may_return_null = false;
|
||||||
|
|
||||||
// Let a frontend override.
|
// Let a frontend override.
|
||||||
OverrideFlags(f);
|
OverrideFlags(f);
|
||||||
|
@ -95,6 +96,7 @@ void InitializeFlags(Flags *f, const char *env) {
|
||||||
ParseFlag(env, &f->external_symbolizer_path, "external_symbolizer_path");
|
ParseFlag(env, &f->external_symbolizer_path, "external_symbolizer_path");
|
||||||
ParseFlag(env, &f->history_size, "history_size");
|
ParseFlag(env, &f->history_size, "history_size");
|
||||||
ParseFlag(env, &f->io_sync, "io_sync");
|
ParseFlag(env, &f->io_sync, "io_sync");
|
||||||
|
ParseFlag(env, &f->allocator_may_return_null, "allocator_may_return_null");
|
||||||
|
|
||||||
if (!f->report_bugs) {
|
if (!f->report_bugs) {
|
||||||
f->report_thread_leaks = false;
|
f->report_thread_leaks = false;
|
||||||
|
@ -113,6 +115,8 @@ void InitializeFlags(Flags *f, const char *env) {
|
||||||
" (must be [0..2])\n");
|
" (must be [0..2])\n");
|
||||||
Die();
|
Die();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
common_flags()->allocator_may_return_null = f->allocator_may_return_null;
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace __tsan
|
} // namespace __tsan
|
||||||
|
|
|
@ -92,6 +92,8 @@ struct Flags {
|
||||||
// 1 - reasonable level of synchronization (write->read)
|
// 1 - reasonable level of synchronization (write->read)
|
||||||
// 2 - global synchronization of all IO operations
|
// 2 - global synchronization of all IO operations
|
||||||
int io_sync;
|
int io_sync;
|
||||||
|
// If false, the allocator will crash instead of returning 0 on out-of-memory.
|
||||||
|
bool allocator_may_return_null;
|
||||||
};
|
};
|
||||||
|
|
||||||
Flags *flags();
|
Flags *flags();
|
||||||
|
|
Loading…
Reference in New Issue