[Cmake-commits] CMake branch, next, updated. v3.8.0-rc2-529-g21f774b

Kitware Robot kwrobot at kitware.com
Tue Mar 21 08:05:06 EDT 2017


This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "CMake".

The branch, next has been updated
       via  21f774b9aab08c4756c4d6918414489fc297459f (commit)
       via  93e18d8e1342f6533891c9e40ffac5542d61d2f8 (commit)
      from  a51e7a14130a99eb1d759ac2da846f55a0102336 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
https://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=21f774b9aab08c4756c4d6918414489fc297459f
commit 21f774b9aab08c4756c4d6918414489fc297459f
Merge: a51e7a1 93e18d8
Author:     Gregor Jasny <gjasny at googlemail.com>
AuthorDate: Tue Mar 21 11:59:09 2017 +0000
Commit:     Kitware Robot <kwrobot at kitware.com>
CommitDate: Tue Mar 21 07:59:21 2017 -0400

    Stage topic '14335-duplicate-else'
    
    Topic-id: 23133
    Topic-url: https://gitlab.kitware.com/cmake/cmake/merge_requests/594


https://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=93e18d8e1342f6533891c9e40ffac5542d61d2f8
commit 93e18d8e1342f6533891c9e40ffac5542d61d2f8
Author:     Gregor Jasny <gjasny at googlemail.com>
AuthorDate: Mon Mar 20 21:49:59 2017 +0100
Commit:     Gregor Jasny <gjasny at googlemail.com>
CommitDate: Mon Mar 20 22:57:25 2017 +0100

    cmIfCommand: Reject duplicate else() and misplaced elseif()
    
    Closes: #14335

diff --git a/Source/cmIfCommand.cxx b/Source/cmIfCommand.cxx
index a8fa4f9..49755fa 100644
--- a/Source/cmIfCommand.cxx
+++ b/Source/cmIfCommand.cxx
@@ -57,8 +57,19 @@ bool cmIfFunctionBlocker::IsFunctionBlocked(const cmListFileFunction& lff,
         // watch for our state change
         if (scopeDepth == 0 &&
             !cmSystemTools::Strucmp(this->Functions[c].Name.c_str(), "else")) {
+
+          if (this->ElseSeen) {
+            cmListFileBacktrace bt = mf.GetBacktrace(this->Functions[c]);
+            mf.GetCMakeInstance()->IssueMessage(
+              cmake::FATAL_ERROR,
+              "A duplicate ELSE command was found inside an IF block.", bt);
+            cmSystemTools::SetFatalErrorOccured();
+            return true;
+          }
+
           this->IsBlocking = this->HasRun;
           this->HasRun = true;
+          this->ElseSeen = true;
 
           // if trace is enabled, print a (trivially) evaluated "else"
           // statement
@@ -68,7 +79,14 @@ bool cmIfFunctionBlocker::IsFunctionBlocked(const cmListFileFunction& lff,
         } else if (scopeDepth == 0 &&
                    !cmSystemTools::Strucmp(this->Functions[c].Name.c_str(),
                                            "elseif")) {
-          if (this->HasRun) {
+          if (this->ElseSeen) {
+            cmListFileBacktrace bt = mf.GetBacktrace(this->Functions[c]);
+            mf.GetCMakeInstance()->IssueMessage(
+              cmake::FATAL_ERROR,
+              "An ELSEIF command was found after an ELSE command.", bt);
+            cmSystemTools::SetFatalErrorOccured();
+            return true;
+          } else if (this->HasRun) {
             this->IsBlocking = true;
           } else {
             // if trace is enabled, print the evaluated "elseif" statement
diff --git a/Source/cmIfCommand.h b/Source/cmIfCommand.h
index 56eef30..f81db67 100644
--- a/Source/cmIfCommand.h
+++ b/Source/cmIfCommand.h
@@ -21,6 +21,7 @@ public:
   cmIfFunctionBlocker()
   {
     this->HasRun = false;
+    this->ElseSeen = false;
     this->ScopeDepth = 0;
   }
   ~cmIfFunctionBlocker() CM_OVERRIDE {}
@@ -32,6 +33,7 @@ public:
   std::vector<cmListFileFunction> Functions;
   bool IsBlocking;
   bool HasRun;
+  bool ElseSeen;
   unsigned int ScopeDepth;
 };
 
diff --git a/Tests/RunCMake/if/RunCMakeTest.cmake b/Tests/RunCMake/if/RunCMakeTest.cmake
index 077d00a..f54edf7 100644
--- a/Tests/RunCMake/if/RunCMakeTest.cmake
+++ b/Tests/RunCMake/if/RunCMakeTest.cmake
@@ -3,7 +3,11 @@ include(RunCMake)
 run_cmake(InvalidArgument1)
 run_cmake(IsDirectory)
 run_cmake(IsDirectoryLong)
+run_cmake(duplicate-deep-else)
+run_cmake(duplicate-else)
+run_cmake(duplicate-else-after-elseif)
 run_cmake(elseif-message)
+run_cmake(misplaced-elseif)
 
 run_cmake(MatchesSelf)
 
diff --git a/Tests/RunCMake/if/duplicate-deep-else-result.txt b/Tests/RunCMake/if/duplicate-deep-else-result.txt
new file mode 100644
index 0000000..d00491f
--- /dev/null
+++ b/Tests/RunCMake/if/duplicate-deep-else-result.txt
@@ -0,0 +1 @@
+1
diff --git a/Tests/RunCMake/if/duplicate-deep-else-stderr.txt b/Tests/RunCMake/if/duplicate-deep-else-stderr.txt
new file mode 100644
index 0000000..ac2335c
--- /dev/null
+++ b/Tests/RunCMake/if/duplicate-deep-else-stderr.txt
@@ -0,0 +1,4 @@
+CMake Error at duplicate-deep-else.cmake:[0-9]+ \(else\):
+  A duplicate ELSE command was found inside an IF block.
+Call Stack \(most recent call first\):
+  CMakeLists.txt:3 \(include\)
diff --git a/Tests/RunCMake/if/duplicate-deep-else.cmake b/Tests/RunCMake/if/duplicate-deep-else.cmake
new file mode 100644
index 0000000..94f06de
--- /dev/null
+++ b/Tests/RunCMake/if/duplicate-deep-else.cmake
@@ -0,0 +1,7 @@
+if(0)
+else()
+  if(0)
+  else()
+  else()
+  endif()
+endif()
diff --git a/Tests/RunCMake/if/duplicate-else-after-elseif-result.txt b/Tests/RunCMake/if/duplicate-else-after-elseif-result.txt
new file mode 100644
index 0000000..d00491f
--- /dev/null
+++ b/Tests/RunCMake/if/duplicate-else-after-elseif-result.txt
@@ -0,0 +1 @@
+1
diff --git a/Tests/RunCMake/if/duplicate-else-after-elseif-stderr.txt b/Tests/RunCMake/if/duplicate-else-after-elseif-stderr.txt
new file mode 100644
index 0000000..ba6765c
--- /dev/null
+++ b/Tests/RunCMake/if/duplicate-else-after-elseif-stderr.txt
@@ -0,0 +1,4 @@
+CMake Error at duplicate-else-after-elseif.cmake:[0-9]+ \(else\):
+  A duplicate ELSE command was found inside an IF block.
+Call Stack \(most recent call first\):
+  CMakeLists.txt:3 \(include\)
diff --git a/Tests/RunCMake/if/duplicate-else-after-elseif.cmake b/Tests/RunCMake/if/duplicate-else-after-elseif.cmake
new file mode 100644
index 0000000..d1d4ac1
--- /dev/null
+++ b/Tests/RunCMake/if/duplicate-else-after-elseif.cmake
@@ -0,0 +1,5 @@
+if(0)
+elseif(0)
+else()
+else()
+endif()
diff --git a/Tests/RunCMake/if/duplicate-else-result.txt b/Tests/RunCMake/if/duplicate-else-result.txt
new file mode 100644
index 0000000..d00491f
--- /dev/null
+++ b/Tests/RunCMake/if/duplicate-else-result.txt
@@ -0,0 +1 @@
+1
diff --git a/Tests/RunCMake/if/duplicate-else-stderr.txt b/Tests/RunCMake/if/duplicate-else-stderr.txt
new file mode 100644
index 0000000..e0dd01f
--- /dev/null
+++ b/Tests/RunCMake/if/duplicate-else-stderr.txt
@@ -0,0 +1,4 @@
+CMake Error at duplicate-else.cmake:[0-9]+ \(else\):
+  A duplicate ELSE command was found inside an IF block.
+Call Stack \(most recent call first\):
+  CMakeLists.txt:3 \(include\)
diff --git a/Tests/RunCMake/if/duplicate-else.cmake b/Tests/RunCMake/if/duplicate-else.cmake
new file mode 100644
index 0000000..14a03ac
--- /dev/null
+++ b/Tests/RunCMake/if/duplicate-else.cmake
@@ -0,0 +1,4 @@
+if(0)
+else()
+else()
+endif()
diff --git a/Tests/RunCMake/if/misplaced-elseif-result.txt b/Tests/RunCMake/if/misplaced-elseif-result.txt
new file mode 100644
index 0000000..d00491f
--- /dev/null
+++ b/Tests/RunCMake/if/misplaced-elseif-result.txt
@@ -0,0 +1 @@
+1
diff --git a/Tests/RunCMake/if/misplaced-elseif-stderr.txt b/Tests/RunCMake/if/misplaced-elseif-stderr.txt
new file mode 100644
index 0000000..c4b0266
--- /dev/null
+++ b/Tests/RunCMake/if/misplaced-elseif-stderr.txt
@@ -0,0 +1,4 @@
+CMake Error at misplaced-elseif.cmake:[0-9]+ \(elseif\):
+  An ELSEIF command was found after an ELSE command.
+Call Stack \(most recent call first\):
+  CMakeLists.txt:3 \(include\)
diff --git a/Tests/RunCMake/if/misplaced-elseif.cmake b/Tests/RunCMake/if/misplaced-elseif.cmake
new file mode 100644
index 0000000..d27f24e
--- /dev/null
+++ b/Tests/RunCMake/if/misplaced-elseif.cmake
@@ -0,0 +1,4 @@
+if(0)
+else()
+elseif(1)
+endif()

-----------------------------------------------------------------------

Summary of changes:
 Source/cmIfCommand.cxx                             |   20 +++++++++++++++++++-
 Source/cmIfCommand.h                               |    2 ++
 Tests/RunCMake/if/RunCMakeTest.cmake               |    4 ++++
 .../duplicate-deep-else-result.txt}                |    0
 Tests/RunCMake/if/duplicate-deep-else-stderr.txt   |    4 ++++
 Tests/RunCMake/if/duplicate-deep-else.cmake        |    7 +++++++
 .../duplicate-else-after-elseif-result.txt}        |    0
 .../if/duplicate-else-after-elseif-stderr.txt      |    4 ++++
 .../RunCMake/if/duplicate-else-after-elseif.cmake  |    5 +++++
 .../duplicate-else-result.txt}                     |    0
 Tests/RunCMake/if/duplicate-else-stderr.txt        |    4 ++++
 Tests/RunCMake/if/duplicate-else.cmake             |    4 ++++
 .../misplaced-elseif-result.txt}                   |    0
 Tests/RunCMake/if/misplaced-elseif-stderr.txt      |    4 ++++
 Tests/RunCMake/if/misplaced-elseif.cmake           |    4 ++++
 15 files changed, 61 insertions(+), 1 deletion(-)
 copy Tests/RunCMake/{Android/BadSYSROOT-result.txt => if/duplicate-deep-else-result.txt} (100%)
 create mode 100644 Tests/RunCMake/if/duplicate-deep-else-stderr.txt
 create mode 100644 Tests/RunCMake/if/duplicate-deep-else.cmake
 copy Tests/RunCMake/{Android/BadSYSROOT-result.txt => if/duplicate-else-after-elseif-result.txt} (100%)
 create mode 100644 Tests/RunCMake/if/duplicate-else-after-elseif-stderr.txt
 create mode 100644 Tests/RunCMake/if/duplicate-else-after-elseif.cmake
 copy Tests/RunCMake/{Android/BadSYSROOT-result.txt => if/duplicate-else-result.txt} (100%)
 create mode 100644 Tests/RunCMake/if/duplicate-else-stderr.txt
 create mode 100644 Tests/RunCMake/if/duplicate-else.cmake
 copy Tests/RunCMake/{Android/BadSYSROOT-result.txt => if/misplaced-elseif-result.txt} (100%)
 create mode 100644 Tests/RunCMake/if/misplaced-elseif-stderr.txt
 create mode 100644 Tests/RunCMake/if/misplaced-elseif.cmake


hooks/post-receive
-- 
CMake


More information about the Cmake-commits mailing list