forked from OSchip/llvm-project
9e2cd1c125
Add a new flag, __tsan_mutex_not_static, which has the opposite sense of __tsan_mutex_linker_init. When the new __tsan_mutex_not_static flag is passed to __tsan_mutex_destroy, tsan ignores the destruction unless the mutex was also created with the __tsan_mutex_not_static flag. This is useful for constructors that otherwise woud set __tsan_mutex_linker_init but cannot, because they are declared constexpr. Google has a custom mutex with two constructors, a "linker initialized" constructor that relies on zero-initialization and sets __tsan_mutex_linker_init, and a normal one which sets no tsan flags. The "linker initialized" constructor is morally constexpr, but we can't declare it constexpr because of the need to call into tsan as a side effect. With this new flag, the normal c'tor can set __tsan_mutex_not_static, the "linker initialized" constructor can rely on tsan's lazy initialization, and __tsan_mutex_destroy can still handle both cases correctly. Author: Greg Falcon (gfalcon) Reviewed in: https://reviews.llvm.org/D39095 llvm-svn: 316209 |
||
---|---|---|
.. | ||
benchmarks | ||
dd | ||
go | ||
rtl | ||
tests | ||
.clang-format | ||
CMakeLists.txt | ||
analyze_libtsan.sh | ||
check_analyze.sh | ||
check_cmake.sh |