From cd75b2d83de708f26f7b36266eaf12e9ce00846b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Marjam=C3=A4ki?= Date: Mon, 25 Aug 2014 19:10:16 +0200 Subject: [PATCH] AST: fix hang for code 'MACRO({.x=1,.y=2})' --- lib/tokenlist.cpp | 2 ++ test/testtokenize.cpp | 3 +++ 2 files changed, 5 insertions(+) diff --git a/lib/tokenlist.cpp b/lib/tokenlist.cpp index 279a4f3c8..2d09550b6 100644 --- a/lib/tokenlist.cpp +++ b/lib/tokenlist.cpp @@ -895,6 +895,8 @@ static Token * createAstAtToken(Token *tok, bool cpp) continue; if (tok->next() == endToken) break; + if (Token::simpleMatch(tok, "( { .")) + break; const Token * const endToken2 = tok->linkAt(1); for (; tok && tok != endToken && tok != endToken2; tok = tok ? tok->next() : NULL) tok = createAstAtToken(tok, cpp); diff --git a/test/testtokenize.cpp b/test/testtokenize.cpp index e18dee297..e266792c8 100644 --- a/test/testtokenize.cpp +++ b/test/testtokenize.cpp @@ -10755,6 +10755,9 @@ private: ASSERT_EQUALS("QT_WA{{,( QT_WA{{,( x1=", testAst("QT_WA({},{x=0;});" // don't hang "QT_WA({x=1;},{x=2;});")); + ASSERT_EQUALS("xMACROtypeT=value1=,{({=", + testAst("x = { MACRO( { .type=T, .value=1 } ) }")); // dont hang: MACRO({..}) + // function pointer TODO_ASSERT_EQUALS("todo", "va_argapvoid((,(*0=", testAst("*va_arg(ap, void(**) ()) = 0;"));