forked from qt-creator/qt-creator
C++: Fix preprocessor blocked macro bug.
By lexing the first token after a macro call (meaning: the token after the closing parenthesis (which was passed to handleFunctionLikeMacro which in turn pushed it back into the token buffer)), a token buffer might be popped, which unblocks the macro that generated the actual param pack. The effect was that if this happens in the expansion of a recursive macro (with parameters!), the preprocessor ended up in an infinite loop. Task-number: QTCREATORBUG-9015 Task-number: QTCREATORBUG-9447 Change-Id: I0d83c59188ec15c4a948970e9fa944a17d765475 Reviewed-by: Nikolai Kosjar <nikolai.kosjar@digia.com>
This commit is contained in:
committed by
Erik Verbruggen
parent
d0afdfcc2b
commit
271c3f45a4
@@ -205,8 +205,7 @@ private:
|
||||
void lex(PPToken *tk);
|
||||
void skipPreprocesorDirective(PPToken *tk);
|
||||
bool handleIdentifier(PPToken *tk);
|
||||
bool handleFunctionLikeMacro(PPToken *tk,
|
||||
const Macro *macro,
|
||||
bool handleFunctionLikeMacro(const Macro *macro,
|
||||
QVector<PPToken> &body,
|
||||
const QVector<QVector<PPToken> > &actuals,
|
||||
unsigned lineRef);
|
||||
|
||||
Reference in New Issue
Block a user