diff options
author | Dmitry Vyukov <dvyukov@google.com> | 2013-12-24 12:55:56 +0000 |
---|---|---|
committer | Dmitry Vyukov <dvyukov@google.com> | 2013-12-24 12:55:56 +0000 |
commit | ce3721057d4edf48b73de9f002b2ab5bea3d2518 (patch) | |
tree | 8b1ec48df14209666343213f9b28bc9f4af2c5e3 /compiler-rt/lib/tsan/rtl/tsan_vector.h | |
parent | 27aea0b0b78ba51f344a3c9188ddf053b1e3b14e (diff) | |
download | bcm5719-llvm-ce3721057d4edf48b73de9f002b2ab5bea3d2518.tar.gz bcm5719-llvm-ce3721057d4edf48b73de9f002b2ab5bea3d2518.zip |
tsan: remove in_rtl counter
This is intended to address the following problem.
Episodically we see CHECK-failures when recursive interceptors call back into user code. Effectively we are not "in_rtl" at this point, but it's very complicated and fragile to properly maintain in_rtl property. Instead get rid of it. It was used mostly for sanity CHECKs, which basically never uncover real problems.
Instead introduce ignore_interceptors flag, which is used in very few narrow places to disable recursive interceptors (e.g. during runtime initialization).
llvm-svn: 197979
Diffstat (limited to 'compiler-rt/lib/tsan/rtl/tsan_vector.h')
-rw-r--r-- | compiler-rt/lib/tsan/rtl/tsan_vector.h | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/compiler-rt/lib/tsan/rtl/tsan_vector.h b/compiler-rt/lib/tsan/rtl/tsan_vector.h index fa236b1f1e4..bd2363ff74a 100644 --- a/compiler-rt/lib/tsan/rtl/tsan_vector.h +++ b/compiler-rt/lib/tsan/rtl/tsan_vector.h @@ -58,10 +58,18 @@ class Vector { return begin_[i]; } - T *PushBack(T v = T()) { + T *PushBack() { EnsureSize(Size() + 1); - end_[-1] = v; - return &end_[-1]; + T *p = &end_[-1]; + internal_memset(p, 0, sizeof(*p)); + return p; + } + + T *PushBack(const T& v) { + EnsureSize(Size() + 1); + T *p = &end_[-1]; + internal_memcpy(p, &v, sizeof(*p)); + return p; } void PopBack() { |