diff options
author | Brad King <brad.king@kitware.com> | 2015-06-22 11:31:04 -0400 |
---|---|---|
committer | Brad King <brad.king@kitware.com> | 2015-06-22 11:41:51 -0400 |
commit | 5d85fb4f407cd661fb904f68e2c9cc27ddcc0331 (patch) | |
tree | c9955ec515ddd96a35def323fd3a16a15a6dccec /Source/cmForEachCommand.h | |
parent | 3a65606591818281ba75bac4751e07c69751451f (diff) | |
download | cmake-5d85fb4f407cd661fb904f68e2c9cc27ddcc0331.tar.gz |
Fix assertion failure on unmatched function or macro
The fix in commit v3.2.3~3^2 (Fix assertion failure on unmatched foreach
in function, 2015-05-18) broke handling of unmatched non-loop blocks
because it assumed all function blockers removed during error unwinding
were for loops, essentially switching the set of mishandled cases.
The purpose of the loop block push/pop operations is to define a scope
matching the lifetime of the loop function blockers. Since our function
blockers already have the proper lifetime, simply move the push/pop
operations to their constructor/destructor.
Extend the RunCMake.Syntax test with a case covering this.
Diffstat (limited to 'Source/cmForEachCommand.h')
-rw-r--r-- | Source/cmForEachCommand.h | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/Source/cmForEachCommand.h b/Source/cmForEachCommand.h index 9b7c85a4df..36e88088f3 100644 --- a/Source/cmForEachCommand.h +++ b/Source/cmForEachCommand.h @@ -19,8 +19,8 @@ class cmForEachFunctionBlocker : public cmFunctionBlocker { public: - cmForEachFunctionBlocker() {this->Depth = 0;} - virtual ~cmForEachFunctionBlocker() {} + cmForEachFunctionBlocker(cmMakefile* mf); + ~cmForEachFunctionBlocker(); virtual bool IsFunctionBlocked(const cmListFileFunction& lff, cmMakefile &mf, cmExecutionStatus &); @@ -29,6 +29,7 @@ public: std::vector<std::string> Args; std::vector<cmListFileFunction> Functions; private: + cmMakefile* Makefile; int Depth; }; |