mirror of
https://github.com/Kitware/CMake.git
synced 2026-05-06 22:30:07 -05:00
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.
This commit is contained in:
@@ -19,8 +19,8 @@
|
||||
class cmWhileFunctionBlocker : public cmFunctionBlocker
|
||||
{
|
||||
public:
|
||||
cmWhileFunctionBlocker() {this->Depth=0;}
|
||||
virtual ~cmWhileFunctionBlocker() {}
|
||||
cmWhileFunctionBlocker(cmMakefile* mf);
|
||||
~cmWhileFunctionBlocker();
|
||||
virtual bool IsFunctionBlocked(const cmListFileFunction& lff,
|
||||
cmMakefile &mf,
|
||||
cmExecutionStatus &);
|
||||
@@ -29,6 +29,7 @@ public:
|
||||
std::vector<cmListFileArgument> Args;
|
||||
std::vector<cmListFileFunction> Functions;
|
||||
private:
|
||||
cmMakefile* Makefile;
|
||||
int Depth;
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user