|
|
@@ -376,6 +376,9 @@ void cmCTestMemCheckHandler::GenerateDartOutput(std::ostream& os)
|
|
|
case cmCTestMemCheckHandler::THREAD_SANITIZER:
|
|
|
os << "ThreadSanitizer";
|
|
|
break;
|
|
|
+ case cmCTestMemCheckHandler::MEMORY_SANITIZER:
|
|
|
+ os << "MemorySanitizer";
|
|
|
+ break;
|
|
|
case cmCTestMemCheckHandler::UB_SANITIZER:
|
|
|
os << "UndefinedBehaviorSanitizer";
|
|
|
break;
|
|
|
@@ -555,6 +558,14 @@ bool cmCTestMemCheckHandler::InitializeMemoryChecking()
|
|
|
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").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")
|
|
|
== "UndefinedBehaviorSanitizer")
|
|
|
{
|
|
|
@@ -688,6 +699,7 @@ bool cmCTestMemCheckHandler::InitializeMemoryChecking()
|
|
|
// these are almost the same but the env var used is different
|
|
|
case cmCTestMemCheckHandler::ADDRESS_SANITIZER:
|
|
|
case cmCTestMemCheckHandler::THREAD_SANITIZER:
|
|
|
+ case cmCTestMemCheckHandler::MEMORY_SANITIZER:
|
|
|
case cmCTestMemCheckHandler::UB_SANITIZER:
|
|
|
{
|
|
|
// To pass arguments to ThreadSanitizer the environment variable
|
|
|
@@ -710,6 +722,11 @@ bool cmCTestMemCheckHandler::InitializeMemoryChecking()
|
|
|
{
|
|
|
envVar = "TSAN_OPTIONS";
|
|
|
}
|
|
|
+ else if(this->MemoryTesterStyle ==
|
|
|
+ cmCTestMemCheckHandler::MEMORY_SANITIZER)
|
|
|
+ {
|
|
|
+ envVar = "MSAN_OPTIONS";
|
|
|
+ }
|
|
|
else if(this->MemoryTesterStyle == cmCTestMemCheckHandler::UB_SANITIZER)
|
|
|
{
|
|
|
envVar = "UBSAN_OPTIONS";
|
|
|
@@ -753,6 +770,8 @@ ProcessMemCheckOutput(const std::string& str,
|
|
|
this->MemoryTesterStyle ==
|
|
|
cmCTestMemCheckHandler::THREAD_SANITIZER ||
|
|
|
this->MemoryTesterStyle ==
|
|
|
+ cmCTestMemCheckHandler::MEMORY_SANITIZER ||
|
|
|
+ this->MemoryTesterStyle ==
|
|
|
cmCTestMemCheckHandler::UB_SANITIZER)
|
|
|
{
|
|
|
return this->ProcessMemCheckSanitizerOutput(str, log, results);
|
|
|
@@ -801,6 +820,9 @@ bool cmCTestMemCheckHandler::ProcessMemCheckSanitizerOutput(
|
|
|
case cmCTestMemCheckHandler::THREAD_SANITIZER:
|
|
|
regex = "WARNING: ThreadSanitizer: (.*) \\(pid=.*\\)";
|
|
|
break;
|
|
|
+ case cmCTestMemCheckHandler::MEMORY_SANITIZER:
|
|
|
+ regex = "WARNING: MemorySanitizer: (.*)";
|
|
|
+ break;
|
|
|
case cmCTestMemCheckHandler::UB_SANITIZER:
|
|
|
regex = "runtime error: (.*)";
|
|
|
break;
|