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 017e5a49c0b5014fe1652f9f509a96acd0557f18 (commit) via 797ab8a07f04ace93957097bfab082d0d9030e4e (commit) from ea86f387bd68596159f38b18863072769cf3df58 (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=017e5a49c0b5014fe1652f9f509a96acd0557f18 commit 017e5a49c0b5014fe1652f9f509a96acd0557f18 Merge: ea86f38 797ab8a Author: Brad King <brad.k...@kitware.com> AuthorDate: Tue Sep 6 15:31:08 2016 -0400 Commit: CMake Topic Stage <kwro...@kitware.com> CommitDate: Tue Sep 6 15:31:08 2016 -0400 Merge topic 'fix-continue-after-error' into next 797ab8a0 cmMakefile: Restore nested error logic use of cmExecutionStatus https://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=797ab8a07f04ace93957097bfab082d0d9030e4e commit 797ab8a07f04ace93957097bfab082d0d9030e4e Author: Brad King <brad.k...@kitware.com> AuthorDate: Tue Sep 6 15:25:26 2016 -0400 Commit: Brad King <brad.k...@kitware.com> CommitDate: Tue Sep 6 15:29:16 2016 -0400 cmMakefile: Restore nested error logic use of cmExecutionStatus Since commit 14a8d61f (cmMakefile: Port nested error logic away from cmExecutionStatus) we fail to continue processing function and macro bodies after non-fatal errors. A non-fatal error should not stop foreach loops, macro bodies, nested bodies, or the outer script. Add a test covering these cases, and revert the change to fix them. diff --git a/Source/cmExecutionStatus.h b/Source/cmExecutionStatus.h index 14e1454..7302837 100644 --- a/Source/cmExecutionStatus.h +++ b/Source/cmExecutionStatus.h @@ -40,12 +40,16 @@ public: this->ReturnInvoked = false; this->BreakInvoked = false; this->ContinueInvoked = false; + this->NestedError = false; } + void SetNestedError(bool val) { this->NestedError = val; } + bool GetNestedError() { return this->NestedError; } private: bool ReturnInvoked; bool BreakInvoked; bool ContinueInvoked; + bool NestedError; }; #endif diff --git a/Source/cmFunctionCommand.cxx b/Source/cmFunctionCommand.cxx index f0e4854..40c54db 100644 --- a/Source/cmFunctionCommand.cxx +++ b/Source/cmFunctionCommand.cxx @@ -76,7 +76,7 @@ public: }; bool cmFunctionHelperCommand::InvokeInitialPass( - const std::vector<cmListFileArgument>& args, cmExecutionStatus&) + const std::vector<cmListFileArgument>& args, cmExecutionStatus& inStatus) { // Expand the argument list to the function. std::vector<std::string> expandedArgs; @@ -129,11 +129,11 @@ bool cmFunctionHelperCommand::InvokeInitialPass( for (unsigned int c = 0; c < this->Functions.size(); ++c) { cmExecutionStatus status; if (!this->Makefile->ExecuteCommand(this->Functions[c], status) || - (cmSystemTools::GetErrorOccuredFlag() && - !cmSystemTools::GetFatalErrorOccured())) { + status.GetNestedError()) { // The error message should have already included the call stack // so we do not need to report an error here. functionScope.Quiet(); + inStatus.SetNestedError(true); return false; } if (status.GetReturnInvoked()) { diff --git a/Source/cmMacroCommand.cxx b/Source/cmMacroCommand.cxx index 9d312ee..ee9dc8a 100644 --- a/Source/cmMacroCommand.cxx +++ b/Source/cmMacroCommand.cxx @@ -159,11 +159,11 @@ bool cmMacroHelperCommand::InvokeInitialPass( } cmExecutionStatus status; if (!this->Makefile->ExecuteCommand(newLFF, status) || - (cmSystemTools::GetErrorOccuredFlag() && - !cmSystemTools::GetFatalErrorOccured())) { + status.GetNestedError()) { // The error message should have already included the call stack // so we do not need to report an error here. macroScope.Quiet(); + inStatus.SetNestedError(true); return false; } if (status.GetReturnInvoked()) { diff --git a/Source/cmMakefile.cxx b/Source/cmMakefile.cxx index 11ccca1..a759993 100644 --- a/Source/cmMakefile.cxx +++ b/Source/cmMakefile.cxx @@ -117,6 +117,10 @@ cmMakefile::~cmMakefile() void cmMakefile::IssueMessage(cmake::MessageType t, std::string const& text) const { + assert(!this->ExecutionStatusStack.empty()); + if ((t == cmake::FATAL_ERROR) || (t == cmake::INTERNAL_ERROR)) { + this->ExecutionStatusStack.back()->SetNestedError(true); + } this->GetCMakeInstance()->IssueMessage(t, text, this->GetBacktrace()); } @@ -277,19 +281,11 @@ bool cmMakefile::ExecuteCommand(const cmListFileFunction& lff, if (this->GetCMakeInstance()->GetTrace()) { this->PrintCommandTrace(lff); } - - bool hadPreviousNonFatalError = cmSystemTools::GetErrorOccuredFlag() && - !cmSystemTools::GetFatalErrorOccured(); - cmSystemTools::ResetErrorOccuredFlag(); - + // Try invoking the command. bool invokeSucceeded = pcmd->InvokeInitialPass(lff.Arguments, status); - bool hadNestedError = cmSystemTools::GetErrorOccuredFlag() && - !cmSystemTools::GetFatalErrorOccured(); - if (hadPreviousNonFatalError) { - cmSystemTools::SetErrorOccured(); - } + bool hadNestedError = status.GetNestedError(); if (!invokeSucceeded || hadNestedError) { - if (!hadNestedError && !cmSystemTools::GetFatalErrorOccured()) { + if (!hadNestedError) { // The command invocation requested that we report an error. this->IssueMessage(cmake::FATAL_ERROR, pcmd->GetError()); } diff --git a/Tests/RunCMake/Configure/ContinueAfterError-result.txt b/Tests/RunCMake/Configure/ContinueAfterError-result.txt new file mode 100644 index 0000000..d00491f --- /dev/null +++ b/Tests/RunCMake/Configure/ContinueAfterError-result.txt @@ -0,0 +1 @@ +1 diff --git a/Tests/RunCMake/Configure/ContinueAfterError-stderr.txt b/Tests/RunCMake/Configure/ContinueAfterError-stderr.txt new file mode 100644 index 0000000..f40a3ef --- /dev/null +++ b/Tests/RunCMake/Configure/ContinueAfterError-stderr.txt @@ -0,0 +1,13 @@ +^CMake Error at ContinueAfterError.cmake:[0-9]+ \(message\): + error in loop body +Call Stack \(most recent call first\): + ContinueAfterError.cmake:[0-9]+ \(m\) + ContinueAfterError.cmake:[0-9]+ \(f\) + CMakeLists.txt:[0-9]+ \(include\) ++ +CMake Error at ContinueAfterError.cmake:[0-9]+ \(message\): + error in loop body +Call Stack \(most recent call first\): + ContinueAfterError.cmake:[0-9]+ \(m\) + ContinueAfterError.cmake:[0-9]+ \(f\) + CMakeLists.txt:[0-9]+ \(include\)$ diff --git a/Tests/RunCMake/Configure/ContinueAfterError-stdout.txt b/Tests/RunCMake/Configure/ContinueAfterError-stdout.txt new file mode 100644 index 0000000..f03aa07 --- /dev/null +++ b/Tests/RunCMake/Configure/ContinueAfterError-stdout.txt @@ -0,0 +1,11 @@ +-- before f +-- start f +-- start m +-- start loop body +-- end loop body +-- start loop body +-- end loop body +-- end m +-- end f +-- after f +-- Configuring incomplete, errors occurred! diff --git a/Tests/RunCMake/Configure/ContinueAfterError.cmake b/Tests/RunCMake/Configure/ContinueAfterError.cmake new file mode 100644 index 0000000..d094390 --- /dev/null +++ b/Tests/RunCMake/Configure/ContinueAfterError.cmake @@ -0,0 +1,19 @@ +macro(m) + message(STATUS " start m") + foreach(i 1 2) + message(STATUS " start loop body") + message(SEND_ERROR "error in loop body") + message(STATUS " end loop body") + endforeach() + message(STATUS " end m") +endmacro() + +function(f) + message(STATUS " start f") + m() + message(STATUS " end f") +endfunction() + +message(STATUS "before f") +f() +message(STATUS "after f") diff --git a/Tests/RunCMake/Configure/RunCMakeTest.cmake b/Tests/RunCMake/Configure/RunCMakeTest.cmake index 58e1a2a..91adb4e 100644 --- a/Tests/RunCMake/Configure/RunCMakeTest.cmake +++ b/Tests/RunCMake/Configure/RunCMakeTest.cmake @@ -1,5 +1,6 @@ include(RunCMake) +run_cmake(ContinueAfterError) run_cmake(CustomTargetAfterError) run_cmake(ErrorLogs) run_cmake(FailCopyFileABI) ----------------------------------------------------------------------- Summary of changes: Source/cmExecutionStatus.h | 4 ++++ Source/cmFunctionCommand.cxx | 6 +++--- Source/cmMacroCommand.cxx | 4 ++-- Source/cmMakefile.cxx | 18 +++++++----------- .../ContinueAfterError-result.txt} | 0 .../Configure/ContinueAfterError-stderr.txt | 13 +++++++++++++ .../Configure/ContinueAfterError-stdout.txt | 11 +++++++++++ Tests/RunCMake/Configure/ContinueAfterError.cmake | 19 +++++++++++++++++++ Tests/RunCMake/Configure/RunCMakeTest.cmake | 1 + 9 files changed, 60 insertions(+), 16 deletions(-) copy Tests/RunCMake/{Android/BadSYSROOT-result.txt => Configure/ContinueAfterError-result.txt} (100%) create mode 100644 Tests/RunCMake/Configure/ContinueAfterError-stderr.txt create mode 100644 Tests/RunCMake/Configure/ContinueAfterError-stdout.txt create mode 100644 Tests/RunCMake/Configure/ContinueAfterError.cmake hooks/post-receive -- CMake _______________________________________________ Cmake-commits mailing list Cmake-commits@cmake.org http://public.kitware.com/mailman/listinfo/cmake-commits