Tsan's check_memcpy.c test was disabled under debug because it failed.
But it points to real issues and does not help to just disable it.
I tried to enable it and see what fail and the first hit was default ctor for:
struct ChainedOriginDepotDesc {
u32 here_id;
u32 prev_id;
};
initializing these fields to 0's help partially,
but compiler still emits memset before calling ctor.
I did not try to see what's the next failure, because if it fails
on such small structs, it won't be realistic to fix everything
and keep working.
Compile runtimes with -O1 under debug instead.
It seems to fix all current failures. At least I run check-tsan
under clang/gcc x debug/non-debug and all combinations passed.
-O1 does not usually use too aggressive optimizations
and sometimes even makes debugging easier because machine code
is not exceedingly verbose.
Reviewed By: vitalybuka
Differential Revision: https://reviews.llvm.org/D107962
16 lines
391 B
C
16 lines
391 B
C
// Test that verifies TSan runtime doesn't contain compiler-emitted
|
|
// memcpy/memmove calls. It builds the binary with TSan and check's
|
|
// its objdump.
|
|
|
|
// RUN: %clang_tsan -O1 %s -o %t
|
|
// RUN: llvm-objdump -d -l %t | FileCheck %s
|
|
|
|
int main() {
|
|
return 0;
|
|
}
|
|
|
|
// CHECK-NOT: callq {{.*<(__interceptor_)?mem(cpy|set)>}}
|
|
// tail calls:
|
|
// CHECK-NOT: jmpq {{.*<(__interceptor_)?mem(cpy|set)>}}
|
|
|