mirror of
https://github.com/reactos/CMake.git
synced 2024-11-27 05:20:34 +00:00
Merge topic 'ctest-memcheck-sanitizers'
e03d3c08f0
CTest: Fix '-T MemCheck' command-line support for sanitizers82b6091776
Tests: Fix RunCMake.ctest_memcheck test script syntax errors Acked-by: Kitware Robot <kwrobot@kitware.com> Merge-request: !4618
This commit is contained in:
commit
348a2a9734
@ -298,9 +298,6 @@ void cmCTestMemCheckHandler::PopulateCustomVectors(cmMakefile* mf)
|
||||
|
||||
this->CTest->PopulateCustomVector(mf, "CTEST_CUSTOM_MEMCHECK_IGNORE",
|
||||
this->CustomTestsIgnore);
|
||||
std::string cmake = cmSystemTools::GetCMakeCommand();
|
||||
this->CTest->SetCTestConfiguration("CMakeCommand", cmake.c_str(),
|
||||
this->Quiet);
|
||||
}
|
||||
|
||||
int cmCTestMemCheckHandler::GetDefectCount()
|
||||
@ -491,31 +488,31 @@ bool cmCTestMemCheckHandler::InitializeMemoryChecking()
|
||||
}
|
||||
if (this->CTest->GetCTestConfiguration("MemoryCheckType") ==
|
||||
"AddressSanitizer") {
|
||||
this->MemoryTester = this->CTest->GetCTestConfiguration("CMakeCommand");
|
||||
this->MemoryTester = cmSystemTools::GetCMakeCommand();
|
||||
this->MemoryTesterStyle = cmCTestMemCheckHandler::ADDRESS_SANITIZER;
|
||||
this->LogWithPID = true; // even if we give the log file the pid is added
|
||||
}
|
||||
if (this->CTest->GetCTestConfiguration("MemoryCheckType") ==
|
||||
"LeakSanitizer") {
|
||||
this->MemoryTester = this->CTest->GetCTestConfiguration("CMakeCommand");
|
||||
this->MemoryTester = cmSystemTools::GetCMakeCommand();
|
||||
this->MemoryTesterStyle = cmCTestMemCheckHandler::LEAK_SANITIZER;
|
||||
this->LogWithPID = true; // even if we give the log file the pid is added
|
||||
}
|
||||
if (this->CTest->GetCTestConfiguration("MemoryCheckType") ==
|
||||
"ThreadSanitizer") {
|
||||
this->MemoryTester = this->CTest->GetCTestConfiguration("CMakeCommand");
|
||||
this->MemoryTester = cmSystemTools::GetCMakeCommand();
|
||||
this->MemoryTesterStyle = cmCTestMemCheckHandler::THREAD_SANITIZER;
|
||||
this->LogWithPID = true; // even if we give the log file the pid is added
|
||||
}
|
||||
if (this->CTest->GetCTestConfiguration("MemoryCheckType") ==
|
||||
"MemorySanitizer") {
|
||||
this->MemoryTester = this->CTest->GetCTestConfiguration("CMakeCommand");
|
||||
this->MemoryTester = cmSystemTools::GetCMakeCommand();
|
||||
this->MemoryTesterStyle = cmCTestMemCheckHandler::MEMORY_SANITIZER;
|
||||
this->LogWithPID = true; // even if we give the log file the pid is added
|
||||
}
|
||||
if (this->CTest->GetCTestConfiguration("MemoryCheckType") ==
|
||||
"UndefinedBehaviorSanitizer") {
|
||||
this->MemoryTester = this->CTest->GetCTestConfiguration("CMakeCommand");
|
||||
this->MemoryTester = cmSystemTools::GetCMakeCommand();
|
||||
this->MemoryTesterStyle = cmCTestMemCheckHandler::UB_SANITIZER;
|
||||
this->LogWithPID = true; // even if we give the log file the pid is added
|
||||
}
|
||||
|
7
Tests/RunCMake/CTestCommandLine/MemCheckSan.cmake
Normal file
7
Tests/RunCMake/CTestCommandLine/MemCheckSan.cmake
Normal file
@ -0,0 +1,7 @@
|
||||
set(MEMORYCHECK_COMMAND "")
|
||||
include(CTest)
|
||||
add_test(
|
||||
NAME TestSan
|
||||
COMMAND ${CMAKE_COMMAND}
|
||||
-P ${CMAKE_CURRENT_LIST_DIR}/../ctest_memcheck/test${MEMORYCHECK_TYPE}.cmake
|
||||
)
|
@ -345,3 +345,24 @@ run_NoTests()
|
||||
|
||||
# Check the configuration type variable is passed
|
||||
run_ctest(check-configuration-type)
|
||||
|
||||
function(run_MemCheckSan case opts)
|
||||
# Use a single build tree for a few tests without cleaning.
|
||||
set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/MemCheckSan${case}-build)
|
||||
set(RunCMake_TEST_OPTIONS
|
||||
"-DMEMORYCHECK_TYPE=${case}Sanitizer"
|
||||
"-DMEMORYCHECK_SANITIZER_OPTIONS=${opts}"
|
||||
)
|
||||
run_cmake(MemCheckSan)
|
||||
unset(RunCMake_TEST_OPTIONS)
|
||||
set(RunCMake_TEST_NO_CLEAN 1)
|
||||
set(RunCMake-stdout-file "../ctest_memcheck/Dummy${case}Sanitizer-stdout.txt")
|
||||
run_cmake_command(MemCheckSan${case}-ctest
|
||||
${CMAKE_CTEST_COMMAND} -C Debug -M Experimental -T MemCheck -V
|
||||
)
|
||||
endfunction()
|
||||
run_MemCheckSan(Address "simulate_sanitizer=1:report_bugs=1:history_size=5:exitcode=55")
|
||||
run_MemCheckSan(Leak "simulate_sanitizer=1:report_bugs=1:history_size=5:exitcode=55")
|
||||
run_MemCheckSan(Memory "simulate_sanitizer=1:report_bugs=1:history_size=5:exitcode=55")
|
||||
run_MemCheckSan(Thread "report_bugs=1:history_size=5:exitcode=55")
|
||||
run_MemCheckSan(UndefinedBehavior "simulate_sanitizer=1")
|
||||
|
@ -2,7 +2,7 @@
|
||||
# options
|
||||
|
||||
message("ASAN_OPTIONS = [$ENV{ASAN_OPTIONS}]")
|
||||
string(REGEX REPLACE ".*log_path=\'([^\']*)\'.*" "\\1" LOG_FILE "$ENV{ASAN_OPTIONS}")
|
||||
string(REGEX REPLACE ".*log_path='([^']*)'.*" "\\1" LOG_FILE "$ENV{ASAN_OPTIONS}")
|
||||
message("LOG_FILE=[${LOG_FILE}]")
|
||||
|
||||
# if we are not asked to simulate AddressSanitizer don't do it
|
||||
|
@ -2,7 +2,7 @@
|
||||
# options
|
||||
|
||||
message("ASAN_OPTIONS = [$ENV{ASAN_OPTIONS}]")
|
||||
string(REGEX REPLACE ".*log_path=\'([^\']*)\'.*" "\\1" LOG_FILE "$ENV{ASAN_OPTIONS}")
|
||||
string(REGEX REPLACE ".*log_path='([^']*)'.*" "\\1" LOG_FILE "$ENV{ASAN_OPTIONS}")
|
||||
message("LOG_FILE=[${LOG_FILE}]")
|
||||
|
||||
# if we are not asked to simulate address sanitizer don't do it
|
||||
|
@ -2,7 +2,7 @@
|
||||
# options
|
||||
|
||||
message("LSAN_OPTIONS = [$ENV{LSAN_OPTIONS}]")
|
||||
string(REGEX REPLACE ".*log_path=\'([^\']*)\'.*" "\\1" LOG_FILE "$ENV{LSAN_OPTIONS}")
|
||||
string(REGEX REPLACE ".*log_path='([^']*)'.*" "\\1" LOG_FILE "$ENV{LSAN_OPTIONS}")
|
||||
message("LOG_FILE=[${LOG_FILE}]")
|
||||
|
||||
# if we are not asked to simulate LeakSanitizer don't do it
|
||||
|
@ -2,7 +2,7 @@
|
||||
# options
|
||||
|
||||
message("MSAN_OPTIONS = [$ENV{MSAN_OPTIONS}]")
|
||||
string(REGEX REPLACE ".*log_path=\'([^\']*)\'.*" "\\1" LOG_FILE "$ENV{MSAN_OPTIONS}")
|
||||
string(REGEX REPLACE ".*log_path='([^']*)'.*" "\\1" LOG_FILE "$ENV{MSAN_OPTIONS}")
|
||||
message("LOG_FILE=[${LOG_FILE}]")
|
||||
|
||||
# if we are not asked to simulate address sanitizer don't do it
|
||||
|
@ -2,7 +2,7 @@
|
||||
# options
|
||||
|
||||
message("TSAN_OPTIONS = [$ENV{TSAN_OPTIONS}]")
|
||||
string(REGEX REPLACE ".*log_path=\'([^\']*)\'.*" "\\1" LOG_FILE "$ENV{TSAN_OPTIONS}")
|
||||
string(REGEX REPLACE ".*log_path='([^']*)'.*" "\\1" LOG_FILE "$ENV{TSAN_OPTIONS}")
|
||||
message("LOG_FILE=[${LOG_FILE}]")
|
||||
|
||||
set(error_types
|
||||
|
@ -2,7 +2,7 @@
|
||||
# UndefinedBehaviorSanitizer options
|
||||
|
||||
message("UBSAN_OPTIONS = [$ENV{UBSAN_OPTIONS}]")
|
||||
string(REGEX REPLACE ".*log_path=\'([^\']*)\'.*" "\\1" LOG_FILE "$ENV{UBSAN_OPTIONS}")
|
||||
string(REGEX REPLACE ".*log_path='([^']*)'.*" "\\1" LOG_FILE "$ENV{UBSAN_OPTIONS}")
|
||||
message("LOG_FILE=[${LOG_FILE}]")
|
||||
|
||||
# if we are not asked to simulate address sanitizer don't do it
|
||||
|
Loading…
Reference in New Issue
Block a user