Forráskód Böngészése

Merge topic 'fix-crash-trace-exp-uninit-vars'

aad360eb3d Fix crash with --trace-expand --warn-uninitialized together

Acked-by: Kitware Robot <[email protected]>
Merge-request: !1944
Brad King 7 éve
szülő
commit
5c10e8f608

+ 5 - 4
Source/cmCommandArgumentParserHelper.cxx

@@ -101,10 +101,11 @@ const char* cmCommandArgumentParserHelper::ExpandVariable(const char* var)
     // not been "cleared"/initialized with a set(foo ) call
     if (this->WarnUninitialized && !this->Makefile->VariableInitialized(var)) {
       if (this->CheckSystemVars ||
-          cmSystemTools::IsSubDirectory(this->FileName,
-                                        this->Makefile->GetHomeDirectory()) ||
-          cmSystemTools::IsSubDirectory(
-            this->FileName, this->Makefile->GetHomeOutputDirectory())) {
+          (this->FileName &&
+           (cmSystemTools::IsSubDirectory(
+              this->FileName, this->Makefile->GetHomeDirectory()) ||
+            cmSystemTools::IsSubDirectory(
+              this->FileName, this->Makefile->GetHomeOutputDirectory())))) {
         std::ostringstream msg;
         msg << "uninitialized variable \'" << var << "\'";
         this->Makefile->IssueMessage(cmake::AUTHOR_WARNING, msg.str());

+ 5 - 4
Source/cmMakefile.cxx

@@ -2703,10 +2703,11 @@ cmake::MessageType cmMakefile::ExpandVariablesInStringNew(
             if (this->GetCMakeInstance()->GetWarnUninitialized() &&
                 !this->VariableInitialized(lookup)) {
               if (this->CheckSystemVars ||
-                  cmSystemTools::IsSubDirectory(filename,
-                                                this->GetHomeDirectory()) ||
-                  cmSystemTools::IsSubDirectory(
-                    filename, this->GetHomeOutputDirectory())) {
+                  (filename &&
+                   (cmSystemTools::IsSubDirectory(filename,
+                                                  this->GetHomeDirectory()) ||
+                    cmSystemTools::IsSubDirectory(
+                      filename, this->GetHomeOutputDirectory())))) {
                 std::ostringstream msg;
                 msg << "uninitialized variable \'" << lookup << "\'";
                 this->IssueMessage(cmake::AUTHOR_WARNING, msg.str());

+ 4 - 0
Tests/RunCMake/CommandLine/RunCMakeTest.cmake

@@ -287,6 +287,10 @@ set(RunCMake_TEST_OPTIONS --trace-expand)
 run_cmake(trace-expand)
 unset(RunCMake_TEST_OPTIONS)
 
+set(RunCMake_TEST_OPTIONS --trace-expand --warn-uninitialized)
+run_cmake(trace-expand-warn-uninitialized)
+unset(RunCMake_TEST_OPTIONS)
+
 set(RunCMake_TEST_OPTIONS --trace-source=trace-only-this-file.cmake)
 run_cmake(trace-source)
 unset(RunCMake_TEST_OPTIONS)

+ 2 - 0
Tests/RunCMake/CommandLine/trace-expand-warn-uninitialized-stderr.txt

@@ -0,0 +1,2 @@
+^.*/Tests/RunCMake/CommandLine/CMakeLists.txt\(1\):  cmake_minimum_required\(VERSION 3.0 \)
+.*/Tests/RunCMake/CommandLine/CMakeLists.txt\(2\):  project\(trace-expand-warn-uninitialized NONE \)

+ 4 - 0
Tests/RunCMake/CommandLine/trace-expand-warn-uninitialized.cmake

@@ -0,0 +1,4 @@
+cmake_policy(SET CMP0053 OLD)
+message(STATUS "'${uninitialized_variable}'")
+cmake_policy(SET CMP0053 NEW)
+message(STATUS "'${uninitialized_variable}'")