sanitizers: compile with -O1 under debug

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
This commit is contained in:
Dmitry Vyukov 2021-08-12 15:43:09 +02:00
parent 09507b5325
commit 7142eb17fb
2 changed files with 2 additions and 4 deletions

View File

@ -378,7 +378,7 @@ if (NOT MSVC)
# Build with optimization, unless we're in debug mode.
if(COMPILER_RT_DEBUG)
list(APPEND SANITIZER_COMMON_CFLAGS -O0)
list(APPEND SANITIZER_COMMON_CFLAGS -O1)
else()
list(APPEND SANITIZER_COMMON_CFLAGS -O3)
endif()

View File

@ -3,9 +3,7 @@
// its objdump.
// RUN: %clang_tsan -O1 %s -o %t
// RUN: llvm-objdump -d %t | FileCheck %s
// REQUIRES: compiler-rt-optimized
// RUN: llvm-objdump -d -l %t | FileCheck %s
int main() {
return 0;