From: Rainer Orth Date: Wed, 5 Oct 2022 07:53:26 +0000 (+0200) Subject: [compiler-rt][test] Heed COMPILER_RT_DEBUG when compiling unittests X-Git-Tag: upstream/17.0.6~31566 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=93b1256e38f63a81561288b9a90c5d52af63cb6e;p=platform%2Fupstream%2Fllvm.git [compiler-rt][test] Heed COMPILER_RT_DEBUG when compiling unittests When trying to debug some `compiler-rt` unittests, I initially had a hard time because - even in a `Debug` build one needs to set `COMPILER_RT_DEBUG` to get debugging info for some of the code and - even so the unittests used a hardcoded `-O2` which often makes debugging impossible. This patch addresses this by instead using `-O0` if `COMPILER_RT_DEBUG`. Two tests in `sanitizer_type_traits_test.cpp` need to be disabled since they have undefined references to `__sanitizer::integral_constant::value`. Tested on `sparcv9-sun-solaris2.11`, `amd64-pc-solaris2.11`, and `x86_64-pc-linux-gnu`. Differential Revision: https://reviews.llvm.org/D91620 --- diff --git a/compiler-rt/CMakeLists.txt b/compiler-rt/CMakeLists.txt index 689ce1a..ed49631 100644 --- a/compiler-rt/CMakeLists.txt +++ b/compiler-rt/CMakeLists.txt @@ -406,9 +406,11 @@ if (NOT MSVC) # Build with optimization, unless we're in debug mode. if(COMPILER_RT_DEBUG) - list(APPEND SANITIZER_COMMON_CFLAGS -O1) + list(APPEND SANITIZER_COMMON_CFLAGS -O0) + list(APPEND COMPILER_RT_TEST_COMPILER_CFLAGS -O0) else() list(APPEND SANITIZER_COMMON_CFLAGS -O3) + list(APPEND COMPILER_RT_TEST_COMPILER_CFLAGS -O3) endif() endif() @@ -443,6 +445,7 @@ if(MSVC) string(REGEX REPLACE "(^| )/Z[i7I]($| )" " /Z7 " "${var_to_update}" "${${var_to_update}}") endforeach() + list(APPEND COMPILER_RT_UNITTEST_CFLAGS -gcodeview) elseif(APPLE) # On Apple platforms use full debug info (i.e. not `-gline-tables-only`) # for all build types so that the runtime can be debugged. @@ -452,8 +455,13 @@ elseif(APPLE) list(APPEND SANITIZER_COMMON_CFLAGS -g) elseif(COMPILER_RT_HAS_GLINE_TABLES_ONLY_FLAG AND NOT COMPILER_RT_DEBUG) list(APPEND SANITIZER_COMMON_CFLAGS -gline-tables-only) + # -gline-tables-only must be enough for these tests, so use it if possible. + list(APPEND COMPILER_RT_TEST_COMPILER_CFLAGS -gline-tables-only) + list(APPEND COMPILER_RT_UNITTEST_CFLAGS -gline-tables-only) elseif(COMPILER_RT_HAS_G_FLAG) list(APPEND SANITIZER_COMMON_CFLAGS -g) + list(APPEND COMPILER_RT_TEST_COMPILER_CFLAGS -g) + list(APPEND COMPILER_RT_UNITTEST_CFLAGS -g) endif() if(LLVM_ENABLE_MODULES) diff --git a/compiler-rt/lib/asan/tests/CMakeLists.txt b/compiler-rt/lib/asan/tests/CMakeLists.txt index a0c6d29..22e99df 100644 --- a/compiler-rt/lib/asan/tests/CMakeLists.txt +++ b/compiler-rt/lib/asan/tests/CMakeLists.txt @@ -29,7 +29,6 @@ set(ASAN_UNITTEST_COMMON_CFLAGS -I${COMPILER_RT_SOURCE_DIR}/lib/asan -I${COMPILER_RT_SOURCE_DIR}/lib/sanitizer_common/tests -fno-rtti - -O2 -Wno-format -Werror=sign-compare) append_list_if(COMPILER_RT_HAS_WVARIADIC_MACROS_FLAG -Wno-variadic-macros ASAN_UNITTEST_COMMON_CFLAGS) @@ -40,16 +39,6 @@ set(ASAN_UNITTEST_COMMON_LINK_FLAGS ${COMPILER_RT_UNITTEST_LINK_FLAGS} ${COMPILER_RT_UNWINDER_LINK_LIBS} ${SANITIZER_TEST_CXX_LIBRARIES}) - -# -gline-tables-only must be enough for ASan, so use it if possible. -if(COMPILER_RT_TEST_COMPILER_ID MATCHES "Clang") - list(APPEND ASAN_UNITTEST_COMMON_CFLAGS -gline-tables-only) -else() - list(APPEND ASAN_UNITTEST_COMMON_CFLAGS -g) -endif() -if(MSVC) - list(APPEND ASAN_UNITTEST_COMMON_CFLAGS -gcodeview) -endif() list(APPEND ASAN_UNITTEST_COMMON_LINK_FLAGS -g) # Use -D instead of definitions to please custom compile command. diff --git a/compiler-rt/lib/fuzzer/tests/CMakeLists.txt b/compiler-rt/lib/fuzzer/tests/CMakeLists.txt index 10fcfba..3c70730 100644 --- a/compiler-rt/lib/fuzzer/tests/CMakeLists.txt +++ b/compiler-rt/lib/fuzzer/tests/CMakeLists.txt @@ -4,8 +4,7 @@ set(LIBFUZZER_UNITTEST_CFLAGS ${COMPILER_RT_UNITTEST_CFLAGS} ${COMPILER_RT_GTEST_CFLAGS} -I${COMPILER_RT_SOURCE_DIR}/lib/fuzzer - -fno-rtti - -O2) + -fno-rtti) if (APPLE) set(FUZZER_SUPPORTED_OS osx) diff --git a/compiler-rt/lib/gwp_asan/tests/CMakeLists.txt b/compiler-rt/lib/gwp_asan/tests/CMakeLists.txt index ef7ea28..7a5dcc4 100644 --- a/compiler-rt/lib/gwp_asan/tests/CMakeLists.txt +++ b/compiler-rt/lib/gwp_asan/tests/CMakeLists.txt @@ -6,7 +6,6 @@ set(GWP_ASAN_UNITTEST_CFLAGS ${SANITIZER_TEST_CXX_CFLAGS} -std=c++17 -I${COMPILER_RT_SOURCE_DIR}/lib/ - -O2 -g -fno-omit-frame-pointer) diff --git a/compiler-rt/lib/interception/tests/CMakeLists.txt b/compiler-rt/lib/interception/tests/CMakeLists.txt index 37bf99e..5b41e4c 100644 --- a/compiler-rt/lib/interception/tests/CMakeLists.txt +++ b/compiler-rt/lib/interception/tests/CMakeLists.txt @@ -18,7 +18,6 @@ set(INTERCEPTION_TEST_CFLAGS_COMMON -I${COMPILER_RT_SOURCE_DIR}/lib -I${COMPILER_RT_SOURCE_DIR}/lib/interception -fno-rtti - -O2 -Werror=sign-compare) set(INTERCEPTION_TEST_LINK_FLAGS_COMMON @@ -26,14 +25,7 @@ set(INTERCEPTION_TEST_LINK_FLAGS_COMMON ${COMPILER_RT_UNWINDER_LINK_LIBS} ${SANITIZER_TEST_CXX_LIBRARIES}) -# -gline-tables-only must be enough for these tests, so use it if possible. -if(COMPILER_RT_TEST_COMPILER_ID MATCHES "Clang") - list(APPEND INTERCEPTION_TEST_CFLAGS_COMMON -gline-tables-only) -else() - list(APPEND INTERCEPTION_TEST_CFLAGS_COMMON -g) -endif() if(MSVC) - list(APPEND INTERCEPTION_TEST_CFLAGS_COMMON -gcodeview) list(APPEND INTERCEPTION_TEST_LINK_FLAGS_COMMON -Wl,-largeaddressaware -Wl,-nodefaultlib:libcmt,-defaultlib:msvcrt,-defaultlib:oldnames diff --git a/compiler-rt/lib/msan/tests/CMakeLists.txt b/compiler-rt/lib/msan/tests/CMakeLists.txt index 6c0520d..ba78ec5 100644 --- a/compiler-rt/lib/msan/tests/CMakeLists.txt +++ b/compiler-rt/lib/msan/tests/CMakeLists.txt @@ -33,7 +33,6 @@ set(MSAN_UNITTEST_COMMON_CFLAGS -I${COMPILER_RT_SOURCE_DIR}/lib -I${COMPILER_RT_SOURCE_DIR}/lib/msan -g - -O2 -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer -Wno-deprecated-declarations diff --git a/compiler-rt/lib/sanitizer_common/tests/CMakeLists.txt b/compiler-rt/lib/sanitizer_common/tests/CMakeLists.txt index 41b89aa..f6b49e8 100644 --- a/compiler-rt/lib/sanitizer_common/tests/CMakeLists.txt +++ b/compiler-rt/lib/sanitizer_common/tests/CMakeLists.txt @@ -67,7 +67,6 @@ set(SANITIZER_TEST_CFLAGS_COMMON -I${COMPILER_RT_SOURCE_DIR}/lib -I${COMPILER_RT_SOURCE_DIR}/lib/sanitizer_common -fno-rtti - -O2 -Werror=sign-compare -Wno-gnu-zero-variadic-macro-arguments ) @@ -76,16 +75,6 @@ set(SANITIZER_TEST_LINK_FLAGS_COMMON ${COMPILER_RT_UNITTEST_LINK_FLAGS} ${COMPILER_RT_UNWINDER_LINK_LIBS} ${SANITIZER_TEST_CXX_LIBRARIES}) - -# -gline-tables-only must be enough for these tests, so use it if possible. -if(COMPILER_RT_TEST_COMPILER_ID MATCHES "Clang") - list(APPEND SANITIZER_TEST_CFLAGS_COMMON -gline-tables-only) -else() - list(APPEND SANITIZER_TEST_CFLAGS_COMMON -g) -endif() -if(MSVC) - list(APPEND SANITIZER_TEST_CFLAGS_COMMON -gcodeview) -endif() list(APPEND SANITIZER_TEST_LINK_FLAGS_COMMON -g) if(NOT MSVC) diff --git a/compiler-rt/lib/sanitizer_common/tests/sanitizer_type_traits_test.cpp b/compiler-rt/lib/sanitizer_common/tests/sanitizer_type_traits_test.cpp index d6c3ad4..c28ce7a 100644 --- a/compiler-rt/lib/sanitizer_common/tests/sanitizer_type_traits_test.cpp +++ b/compiler-rt/lib/sanitizer_common/tests/sanitizer_type_traits_test.cpp @@ -69,15 +69,21 @@ struct TestStruct { }; TEST(SanitizerCommon, IsTriviallyDestructible) { + // Causes undefined references to __sanitizer::integral_constant::value. +#if !SANITIZER_DEBUG ASSERT_TRUE((is_trivially_destructible::value)); ASSERT_TRUE((is_trivially_destructible::value)); +#endif ASSERT_FALSE((is_trivially_destructible>::value)); } TEST(SanitizerCommon, IsTriviallyCopyable) { +#if !SANITIZER_DEBUG ASSERT_TRUE((is_trivially_copyable::value)); ASSERT_TRUE((is_trivially_copyable::value)); +#endif ASSERT_FALSE((is_trivially_copyable>::value)); } -} // namespace __sanitizer \ No newline at end of file +} // namespace __sanitizer