diff --git a/.sanitize-blacklist b/.sanitize-blacklist new file mode 100644 index 00000000..03edea35 --- /dev/null +++ b/.sanitize-blacklist @@ -0,0 +1 @@ +fun:*SmallVector* diff --git a/CMakeLists.txt b/CMakeLists.txt index f9da7ca7..4bb17ec8 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -70,6 +70,23 @@ if(CODE_COVERAGE) set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -lgcov --coverage") endif(CODE_COVERAGE) +# +# Setup Address Sanitizer +# +option(ADDRESS_SANITIZER "" OFF) +if(ADDRESS_SANITIZER) + set(CMAKE_CXX_FLAGS + "${CMAKE_CXX_FLAGS} \ + -fno-omit-frame-pointer \ + -fsanitize=address \ + -fsanitize-blacklist=${CMAKE_CURRENT_SOURCE_DIR}/.sanitize-blacklist") + set(CMAKE_EXE_LINKER_FLAGS + "${CMAKE_EXE_LINKER_FLAGS} \ + -fno-omit-frame-pointer \ + -fsanitize=address \ + -fsanitize-blacklist=${CMAKE_CURRENT_SOURCE_DIR}/.sanitize-blacklist") +endif(ADDRESS_SANITIZER) + # # Setup LLVM # diff --git a/Makefile b/Makefile index 871630f0..77a36e43 100644 --- a/Makefile +++ b/Makefile @@ -38,6 +38,7 @@ CMAKE_CXX_FLAGS ?= CMAKE_EXE_LINKER_FLAGS ?= CMAKE_GENERATOR ?= Unix Makefiles CODE_COVERAGE ?= OFF +ADDRESS_SANITIZER ?= OFF ENABLE_CXX_MODULES_TEST_CASES ?= OFF ENABLE_CUDA_TEST_CASES ?= OFF @@ -69,6 +70,7 @@ debug/CMakeLists.txt: -DENABLE_CUDA_TEST_CASES=$(ENABLE_CUDA_TEST_CASES) \ -DENABLE_CXX_MODULES_TEST_CASES=$(ENABLE_CXX_MODULES_TEST_CASES) \ -DCODE_COVERAGE=$(CODE_COVERAGE) \ + -DADDRESS_SANITIZER=$(ADDRESS_SANITIZER) \ -DCLANG_UML_ENABLE_BACKTRACE=$(CLANG_UML_ENABLE_BACKTRACE) release/CMakeLists.txt: @@ -84,6 +86,7 @@ release/CMakeLists.txt: -DLLVM_CONFIG_PATH=${LLVM_CONFIG_PATH} \ -DLINK_LLVM_SHARED=${LLVM_SHARED} \ -DCMAKE_PREFIX=${CMAKE_PREFIX} \ + -DADDRESS_SANITIZER=$(ADDRESS_SANITIZER) \ -DENABLE_CUDA_TEST_CASES=$(ENABLE_CUDA_TEST_CASES) \ -DENABLE_CXX_MODULES_TEST_CASES=$(ENABLE_CXX_MODULES_TEST_CASES) \ -DCLANG_UML_ENABLE_BACKTRACE=$(CLANG_UML_ENABLE_BACKTRACE)