Index: llvm/trunk/lib/Fuzzer/CMakeLists.txt =================================================================== --- llvm/trunk/lib/Fuzzer/CMakeLists.txt +++ llvm/trunk/lib/Fuzzer/CMakeLists.txt @@ -1,6 +1,6 @@ -set(LIBFUZZER_FLAGS_BASE "${CMAKE_CXX_FLAGS_RELEASE}") +set(LIBFUZZER_FLAGS_BASE "${CMAKE_CXX_FLAGS}") # Disable the coverage and sanitizer instrumentation for the fuzzer itself. -set(CMAKE_CXX_FLAGS_RELEASE "${LIBFUZZER_FLAGS_BASE} -O2 -fno-sanitize=all -fno-sanitize-coverage=edge,trace-cmp,indirect-calls,8bit-counters -Werror") +set(CMAKE_CXX_FLAGS "${LIBFUZZER_FLAGS_BASE} -fno-sanitize=all -fno-sanitize-coverage=edge,trace-cmp,indirect-calls,8bit-counters -Werror") if( LLVM_USE_SANITIZE_COVERAGE ) add_library(LLVMFuzzerNoMainObjects OBJECT FuzzerCrossOver.cpp Index: llvm/trunk/lib/Fuzzer/test/CMakeLists.txt =================================================================== --- llvm/trunk/lib/Fuzzer/test/CMakeLists.txt +++ llvm/trunk/lib/Fuzzer/test/CMakeLists.txt @@ -1,8 +1,31 @@ # Build all these tests with -O0, otherwise optimizations may merge some # basic blocks and we'll fail to discover the targets. -# Also enable the coverage instrumentation back (it is disabled -# for the Fuzzer lib) -set(CMAKE_CXX_FLAGS_RELEASE "${LIBFUZZER_FLAGS_BASE} -O0 -fsanitize-coverage=edge,indirect-calls") +# We change the flags for every build type because we might be doing +# a multi-configuration build (e.g. Xcode) where CMAKE_BUILD_TYPE doesn't +# mean anything. +set(variables_to_filter + CMAKE_CXX_FLAGS_RELEASE + CMAKE_CXX_FLAGS_DEBUG + CMAKE_CXX_FLAGS_RELWITHDEBINFO + CMAKE_CXX_FLAGS_MINSIZEREL + LIBFUZZER_FLAGS_BASE + ) +foreach (VARNAME ${variables_to_filter}) + string(REPLACE " " ";" BUILD_FLAGS_AS_LIST "${${VARNAME}}") + set(new_flags "") + foreach (flag ${BUILD_FLAGS_AS_LIST}) + # NOTE: Use of XX here is to avoid a CMake warning due to CMP0054 + if (NOT ("XX${flag}" MATCHES "XX-O[0123s]")) + set(new_flags "${new_flags} ${flag}") + else() + set(new_flags "${new_flags} -O0") + endif() + endforeach() + set(${VARNAME} "${new_flags}") +endforeach() + +# Enable the coverage instrumentation (it is disabled for the Fuzzer lib). +set(CMAKE_CXX_FLAGS "${LIBFUZZER_FLAGS_BASE} -fsanitize-coverage=edge,indirect-calls") set(DFSanTests MemcmpTest Index: llvm/trunk/lib/Fuzzer/test/dfsan/CMakeLists.txt =================================================================== --- llvm/trunk/lib/Fuzzer/test/dfsan/CMakeLists.txt +++ llvm/trunk/lib/Fuzzer/test/dfsan/CMakeLists.txt @@ -1,7 +1,7 @@ # These tests depend on both coverage and dfsan instrumentation. -set(CMAKE_CXX_FLAGS_RELEASE - "${LIBFUZZER_FLAGS_BASE} -O0 -fno-sanitize=all -fsanitize=dataflow") +set(CMAKE_CXX_FLAGS + "${LIBFUZZER_FLAGS_BASE} -fno-sanitize=all -fsanitize=dataflow") foreach(Test ${DFSanTests}) add_executable(LLVMFuzzer-${Test}-DFSan Index: llvm/trunk/lib/Fuzzer/test/trace-bb/CMakeLists.txt =================================================================== --- llvm/trunk/lib/Fuzzer/test/trace-bb/CMakeLists.txt +++ llvm/trunk/lib/Fuzzer/test/trace-bb/CMakeLists.txt @@ -1,6 +1,6 @@ # These tests are not instrumented with coverage. -set(CMAKE_CXX_FLAGS_RELEASE +set(CMAKE_CXX_FLAGS "${LIBFUZZER_FLAGS_BASE} -fsanitize-coverage=edge,trace-bb") foreach(Test ${TraceBBTests}) Index: llvm/trunk/lib/Fuzzer/test/trace-pc/CMakeLists.txt =================================================================== --- llvm/trunk/lib/Fuzzer/test/trace-pc/CMakeLists.txt +++ llvm/trunk/lib/Fuzzer/test/trace-pc/CMakeLists.txt @@ -1,7 +1,7 @@ # These tests are not instrumented with coverage. -set(CMAKE_CXX_FLAGS_RELEASE - "${LIBFUZZER_FLAGS_BASE} -O0 -fno-sanitize-coverage=8bit-counters -fsanitize-coverage=trace-pc") +set(CMAKE_CXX_FLAGS + "${LIBFUZZER_FLAGS_BASE} -fno-sanitize-coverage=8bit-counters -fsanitize-coverage=trace-pc") foreach(Test ${TracePCTests}) add_executable(LLVMFuzzer-${Test}-TracePC Index: llvm/trunk/lib/Fuzzer/test/ubsan/CMakeLists.txt =================================================================== --- llvm/trunk/lib/Fuzzer/test/ubsan/CMakeLists.txt +++ llvm/trunk/lib/Fuzzer/test/ubsan/CMakeLists.txt @@ -1,7 +1,7 @@ # These tests are instrumented with ubsan in non-recovery mode. -set(CMAKE_CXX_FLAGS_RELEASE - "${LIBFUZZER_FLAGS_BASE} -O0 -fsanitize=undefined -fno-sanitize-recover=all") +set(CMAKE_CXX_FLAGS + "${LIBFUZZER_FLAGS_BASE} -fsanitize=undefined -fno-sanitize-recover=all") foreach(Test ${UbsanTests}) add_executable(LLVMFuzzer-${Test}-Ubsan Index: llvm/trunk/lib/Fuzzer/test/uninstrumented/CMakeLists.txt =================================================================== --- llvm/trunk/lib/Fuzzer/test/uninstrumented/CMakeLists.txt +++ llvm/trunk/lib/Fuzzer/test/uninstrumented/CMakeLists.txt @@ -1,7 +1,7 @@ # These tests are not instrumented with coverage. -set(CMAKE_CXX_FLAGS_RELEASE - "${LIBFUZZER_FLAGS_BASE} -O0 -fno-sanitize=all -fno-sanitize-coverage=edge,trace-cmp,indirect-calls,8bit-counters") +set(CMAKE_CXX_FLAGS + "${LIBFUZZER_FLAGS_BASE} -fno-sanitize=all -fno-sanitize-coverage=edge,trace-cmp,indirect-calls,8bit-counters") foreach(Test ${UninstrumentedTests}) add_executable(LLVMFuzzer-${Test}-Uninstrumented