Просмотр исходного кода

Merge topic 'fix-function-missing-endforeach'

3a656065 Fix assertion failure on unmatched foreach in function (#15572)
Brad King 10 лет назад
Родитель
Сommit
aa68f2e4c9

+ 1 - 1
Source/cmFunctionCommand.cxx

@@ -94,8 +94,8 @@ bool cmFunctionHelperCommand::InvokeInitialPass
     }
 
   // we push a scope on the makefile
-  cmMakefile::LexicalPushPop lexScope(this->Makefile);
   cmMakefile::ScopePushPop varScope(this->Makefile);
+  cmMakefile::LexicalPushPop lexScope(this->Makefile);
   static_cast<void>(varScope);
 
   // Push a weak policy scope which restores the policies recorded at

+ 1 - 0
Source/cmMakefile.cxx

@@ -3276,6 +3276,7 @@ void cmMakefile::PopFunctionBlockerBarrier(bool reportError)
     this->FunctionBlockerBarriers.back();
   while(this->FunctionBlockers.size() > barrier)
     {
+    cmMakefile::LoopBlockPop loopBlockPop(this);
     cmsys::auto_ptr<cmFunctionBlocker> fb(this->FunctionBlockers.back());
     this->FunctionBlockers.pop_back();
     if(reportError)

+ 1 - 0
Tests/RunCMake/Syntax/FunctionUnmatchedForeach-result.txt

@@ -0,0 +1 @@
+1

+ 8 - 0
Tests/RunCMake/Syntax/FunctionUnmatchedForeach-stderr.txt

@@ -0,0 +1,8 @@
+^CMake Error at FunctionUnmatchedForeach.cmake:[0-9]+ \(f\):
+  A logical block opening on the line
+
+    .*/Tests/RunCMake/Syntax/FunctionUnmatchedForeach.cmake:[0-9]+ \(foreach\)
+
+  is not closed.
+Call Stack \(most recent call first\):
+  CMakeLists.txt:[0-9]+ \(include\)$

+ 5 - 0
Tests/RunCMake/Syntax/FunctionUnmatchedForeach.cmake

@@ -0,0 +1,5 @@
+function(f)
+  foreach(i 1)
+  #endforeach() # missing
+endfunction()
+f()

+ 1 - 0
Tests/RunCMake/Syntax/MacroUnmatchedForeach-result.txt

@@ -0,0 +1 @@
+1

+ 8 - 0
Tests/RunCMake/Syntax/MacroUnmatchedForeach-stderr.txt

@@ -0,0 +1,8 @@
+^CMake Error at MacroUnmatchedForeach.cmake:[0-9]+ \(m\):
+  A logical block opening on the line
+
+    .*/Tests/RunCMake/Syntax/MacroUnmatchedForeach.cmake:[0-9]+ \(foreach\)
+
+  is not closed.
+Call Stack \(most recent call first\):
+  CMakeLists.txt:[0-9]+ \(include\)$

+ 5 - 0
Tests/RunCMake/Syntax/MacroUnmatchedForeach.cmake

@@ -0,0 +1,5 @@
+macro(m)
+  foreach(i 1)
+  #endforeach() # missing
+endmacro()
+m()

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

@@ -108,3 +108,7 @@ run_cmake(CMP0053-NameWithNewlineQuoted)
 run_cmake(CMP0053-NameWithCarriageReturnQuoted)
 run_cmake(CMP0053-NameWithEscapedSpacesQuoted)
 run_cmake(CMP0053-NameWithEscapedTabsQuoted)
+
+# Function and macro tests.
+run_cmake(FunctionUnmatchedForeach)
+run_cmake(MacroUnmatchedForeach)