[compiler-rt] r191482 - tsan: support allocator_may_return_null flag

Dmitry Vyukov dvyukov at google.com
Thu Sep 26 19:31:23 PDT 2013


Author: dvyukov
Date: Thu Sep 26 21:31:23 2013
New Revision: 191482

URL: http://llvm.org/viewvc/llvm-project?rev=191482&view=rev
Log:
tsan: support allocator_may_return_null flag
Fixes https://code.google.com/p/thread-sanitizer/issues/detail?id=29


Modified:
    compiler-rt/trunk/lib/tsan/lit_tests/malloc_overflow.cc
    compiler-rt/trunk/lib/tsan/rtl/tsan_flags.cc
    compiler-rt/trunk/lib/tsan/rtl/tsan_flags.h

Modified: compiler-rt/trunk/lib/tsan/lit_tests/malloc_overflow.cc
URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/tsan/lit_tests/malloc_overflow.cc?rev=191482&r1=191481&r2=191482&view=diff
==============================================================================
--- compiler-rt/trunk/lib/tsan/lit_tests/malloc_overflow.cc (original)
+++ compiler-rt/trunk/lib/tsan/lit_tests/malloc_overflow.cc Thu Sep 26 21:31:23 2013
@@ -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: TSAN_OPTIONS=allocator_may_return_null=1 %t 2>&1 | FileCheck %s
 #include <stdio.h>

Modified: compiler-rt/trunk/lib/tsan/rtl/tsan_flags.cc
URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/tsan/rtl/tsan_flags.cc?rev=191482&r1=191481&r2=191482&view=diff
==============================================================================
--- compiler-rt/trunk/lib/tsan/rtl/tsan_flags.cc (original)
+++ compiler-rt/trunk/lib/tsan/rtl/tsan_flags.cc Thu Sep 26 21:31:23 2013
@@ -64,6 +64,7 @@ void InitializeFlags(Flags *f, const cha
   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 cha
   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 cha
            " (must be [0..2])\n");
     Die();
   }
+
+  common_flags()->allocator_may_return_null = f->allocator_may_return_null;
 }
 
 }  // namespace __tsan

Modified: compiler-rt/trunk/lib/tsan/rtl/tsan_flags.h
URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/tsan/rtl/tsan_flags.h?rev=191482&r1=191481&r2=191482&view=diff
==============================================================================
--- compiler-rt/trunk/lib/tsan/rtl/tsan_flags.h (original)
+++ compiler-rt/trunk/lib/tsan/rtl/tsan_flags.h Thu Sep 26 21:31:23 2013
@@ -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();





More information about the llvm-commits mailing list