diff --git a/CMakeLists.txt b/CMakeLists.txt index 2c6cce46bea15948526990a9c171882f7a1720b1..98e40b7d12454d98a6e232b32cc50a2ee7d5529b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -92,6 +92,9 @@ if(NOT ${NEBULA_GPERF_BIN_DIR} STREQUAL "") endif() +option(sanitize "Whether to turn AddressSanitizer ON or OFF" OFF) + + message(STATUS "CMAKE_INCLUDE_PATH: " ${CMAKE_INCLUDE_PATH}) message(STATUS "CMAKE_LIBRARY_PATH: " ${CMAKE_LIBRARY_PATH}) message(STATUS "CMAKE_PROGRAM_PATH: " ${CMAKE_PROGRAM_PATH}) @@ -99,19 +102,29 @@ message(STATUS "CMAKE_PROGRAM_PATH: " ${CMAKE_PROGRAM_PATH}) find_package(Boost REQUIRED) find_package(OpenSSL REQUIRED) find_package(Krb5 REQUIRED gssapi) -find_package(PCHSupport) find_package(GPERF 2.8 REQUIRED) find_package(Libunwind REQUIRED) find_package(BISON REQUIRED) find_package(FLEX REQUIRED) find_package(Readline REQUIRED) +if(NOT sanitize) + find_package(PCHSupport) + add_compile_options(-Winvalid-pch) +endif() + -add_compile_options(-Winvalid-pch) add_compile_options(-Wall) add_compile_options(-Werror) add_compile_options(-Wunused-parameter) add_compile_options(-Wshadow) +if(sanitize) + add_compile_options(-fsanitize=address) + add_compile_options(-g) + add_compile_options(-fno-omit-frame-pointer) + set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fsanitize=address") +endif() + include_directories(SYSTEM ${NEBULA_HOME}/third-party/bzip2/_install/include) include_directories(SYSTEM ${NEBULA_HOME}/third-party/double-conversion/_install/include) include_directories(SYSTEM ${NEBULA_HOME}/third-party/fatal/_install/include) diff --git a/src/parser/test/ScannerTest.cpp b/src/parser/test/ScannerTest.cpp index 9ff9fa0b53ba76cd0b46350f6c06c6b1564615d5..a487278e7fb14b9e1581e1b095252e19146f6da4 100644 --- a/src/parser/test/ScannerTest.cpp +++ b/src/parser/test/ScannerTest.cpp @@ -19,7 +19,8 @@ namespace nebula { using semantic_type = nebula::GraphParser::semantic_type; static auto checkSemanticValue(const char *expected, semantic_type *sv) { - auto &actual = *sv->strval; + auto actual = *sv->strval; + delete sv->strval; if (expected != actual) { return AssertionFailure() << "Semantic value not match, " << "expected: " << expected