diff options
Diffstat (limited to 'compiler-rt/lib/tsan/rtl')
| -rw-r--r-- | compiler-rt/lib/tsan/rtl/tsan_flags.cc | 4 | ||||
| -rw-r--r-- | compiler-rt/lib/tsan/rtl/tsan_flags.h | 2 | 
2 files changed, 6 insertions, 0 deletions
diff --git a/compiler-rt/lib/tsan/rtl/tsan_flags.cc b/compiler-rt/lib/tsan/rtl/tsan_flags.cc index 86e45f6457f..a1f82004074 100644 --- a/compiler-rt/lib/tsan/rtl/tsan_flags.cc +++ b/compiler-rt/lib/tsan/rtl/tsan_flags.cc @@ -64,6 +64,7 @@ void InitializeFlags(Flags *f, const char *env) {    f->external_symbolizer_path = "";    f->history_size = kGoMode ? 1 : 2;  // There are a lot of goroutines in Go.    f->io_sync = 1; +  f->allocator_may_return_null = false;    // Let a frontend override.    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->history_size, "history_size");    ParseFlag(env, &f->io_sync, "io_sync"); +  ParseFlag(env, &f->allocator_may_return_null, "allocator_may_return_null");    if (!f->report_bugs) {      f->report_thread_leaks = false; @@ -113,6 +115,8 @@ void InitializeFlags(Flags *f, const char *env) {             " (must be [0..2])\n");      Die();    } + +  common_flags()->allocator_may_return_null = f->allocator_may_return_null;  }  }  // namespace __tsan diff --git a/compiler-rt/lib/tsan/rtl/tsan_flags.h b/compiler-rt/lib/tsan/rtl/tsan_flags.h index b517ccc3ffa..238982bf2a3 100644 --- a/compiler-rt/lib/tsan/rtl/tsan_flags.h +++ b/compiler-rt/lib/tsan/rtl/tsan_flags.h @@ -92,6 +92,8 @@ struct Flags {    // 1 - reasonable level of synchronization (write->read)    // 2 - global synchronization of all IO operations    int io_sync; +  // If false, the allocator will crash instead of returning 0 on out-of-memory. +  bool allocator_may_return_null;  };  Flags *flags();  | 

