ctest_memcheck: Add support for MemorySanitizer msan
This commit is contained in:
parent
9ba8bf123c
commit
0c6330da38
|
@ -4,4 +4,4 @@ CTEST_MEMORYCHECK_TYPE
|
||||||
Specify the CTest ``MemoryCheckType`` setting
|
Specify the CTest ``MemoryCheckType`` setting
|
||||||
in a :manual:`ctest(1)` dashboard client script.
|
in a :manual:`ctest(1)` dashboard client script.
|
||||||
Valid values are Valgrind, Purify, BoundsChecker, and ThreadSanitizer,
|
Valid values are Valgrind, Purify, BoundsChecker, and ThreadSanitizer,
|
||||||
AddressSanitizer, and UndefinedBehaviorSanitizer.
|
AddressSanitizer, MemorySanitizer, and UndefinedBehaviorSanitizer.
|
||||||
|
|
|
@ -376,6 +376,9 @@ void cmCTestMemCheckHandler::GenerateDartOutput(std::ostream& os)
|
||||||
case cmCTestMemCheckHandler::THREAD_SANITIZER:
|
case cmCTestMemCheckHandler::THREAD_SANITIZER:
|
||||||
os << "ThreadSanitizer";
|
os << "ThreadSanitizer";
|
||||||
break;
|
break;
|
||||||
|
case cmCTestMemCheckHandler::MEMORY_SANITIZER:
|
||||||
|
os << "MemorySanitizer";
|
||||||
|
break;
|
||||||
case cmCTestMemCheckHandler::UB_SANITIZER:
|
case cmCTestMemCheckHandler::UB_SANITIZER:
|
||||||
os << "UndefinedBehaviorSanitizer";
|
os << "UndefinedBehaviorSanitizer";
|
||||||
break;
|
break;
|
||||||
|
@ -555,6 +558,14 @@ bool cmCTestMemCheckHandler::InitializeMemoryChecking()
|
||||||
this->MemoryTesterStyle = cmCTestMemCheckHandler::THREAD_SANITIZER;
|
this->MemoryTesterStyle = cmCTestMemCheckHandler::THREAD_SANITIZER;
|
||||||
this->LogWithPID = true; // even if we give the log file the pid is added
|
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").c_str();
|
||||||
|
this->MemoryTesterStyle = cmCTestMemCheckHandler::MEMORY_SANITIZER;
|
||||||
|
this->LogWithPID = true; // even if we give the log file the pid is added
|
||||||
|
}
|
||||||
if ( this->CTest->GetCTestConfiguration("MemoryCheckType")
|
if ( this->CTest->GetCTestConfiguration("MemoryCheckType")
|
||||||
== "UndefinedBehaviorSanitizer")
|
== "UndefinedBehaviorSanitizer")
|
||||||
{
|
{
|
||||||
|
@ -688,6 +699,7 @@ bool cmCTestMemCheckHandler::InitializeMemoryChecking()
|
||||||
// these are almost the same but the env var used is different
|
// these are almost the same but the env var used is different
|
||||||
case cmCTestMemCheckHandler::ADDRESS_SANITIZER:
|
case cmCTestMemCheckHandler::ADDRESS_SANITIZER:
|
||||||
case cmCTestMemCheckHandler::THREAD_SANITIZER:
|
case cmCTestMemCheckHandler::THREAD_SANITIZER:
|
||||||
|
case cmCTestMemCheckHandler::MEMORY_SANITIZER:
|
||||||
case cmCTestMemCheckHandler::UB_SANITIZER:
|
case cmCTestMemCheckHandler::UB_SANITIZER:
|
||||||
{
|
{
|
||||||
// To pass arguments to ThreadSanitizer the environment variable
|
// To pass arguments to ThreadSanitizer the environment variable
|
||||||
|
@ -710,6 +722,11 @@ bool cmCTestMemCheckHandler::InitializeMemoryChecking()
|
||||||
{
|
{
|
||||||
envVar = "TSAN_OPTIONS";
|
envVar = "TSAN_OPTIONS";
|
||||||
}
|
}
|
||||||
|
else if(this->MemoryTesterStyle ==
|
||||||
|
cmCTestMemCheckHandler::MEMORY_SANITIZER)
|
||||||
|
{
|
||||||
|
envVar = "MSAN_OPTIONS";
|
||||||
|
}
|
||||||
else if(this->MemoryTesterStyle == cmCTestMemCheckHandler::UB_SANITIZER)
|
else if(this->MemoryTesterStyle == cmCTestMemCheckHandler::UB_SANITIZER)
|
||||||
{
|
{
|
||||||
envVar = "UBSAN_OPTIONS";
|
envVar = "UBSAN_OPTIONS";
|
||||||
|
@ -753,6 +770,8 @@ ProcessMemCheckOutput(const std::string& str,
|
||||||
this->MemoryTesterStyle ==
|
this->MemoryTesterStyle ==
|
||||||
cmCTestMemCheckHandler::THREAD_SANITIZER ||
|
cmCTestMemCheckHandler::THREAD_SANITIZER ||
|
||||||
this->MemoryTesterStyle ==
|
this->MemoryTesterStyle ==
|
||||||
|
cmCTestMemCheckHandler::MEMORY_SANITIZER ||
|
||||||
|
this->MemoryTesterStyle ==
|
||||||
cmCTestMemCheckHandler::UB_SANITIZER)
|
cmCTestMemCheckHandler::UB_SANITIZER)
|
||||||
{
|
{
|
||||||
return this->ProcessMemCheckSanitizerOutput(str, log, results);
|
return this->ProcessMemCheckSanitizerOutput(str, log, results);
|
||||||
|
@ -801,6 +820,9 @@ bool cmCTestMemCheckHandler::ProcessMemCheckSanitizerOutput(
|
||||||
case cmCTestMemCheckHandler::THREAD_SANITIZER:
|
case cmCTestMemCheckHandler::THREAD_SANITIZER:
|
||||||
regex = "WARNING: ThreadSanitizer: (.*) \\(pid=.*\\)";
|
regex = "WARNING: ThreadSanitizer: (.*) \\(pid=.*\\)";
|
||||||
break;
|
break;
|
||||||
|
case cmCTestMemCheckHandler::MEMORY_SANITIZER:
|
||||||
|
regex = "WARNING: MemorySanitizer: (.*)";
|
||||||
|
break;
|
||||||
case cmCTestMemCheckHandler::UB_SANITIZER:
|
case cmCTestMemCheckHandler::UB_SANITIZER:
|
||||||
regex = "runtime error: (.*)";
|
regex = "runtime error: (.*)";
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -52,6 +52,7 @@ private:
|
||||||
// checkers after here do not use the standard error list
|
// checkers after here do not use the standard error list
|
||||||
ADDRESS_SANITIZER,
|
ADDRESS_SANITIZER,
|
||||||
THREAD_SANITIZER,
|
THREAD_SANITIZER,
|
||||||
|
MEMORY_SANITIZER,
|
||||||
UB_SANITIZER
|
UB_SANITIZER
|
||||||
};
|
};
|
||||||
public:
|
public:
|
||||||
|
|
Loading…
Reference in New Issue