diff --git a/lib/tokenlist.cpp b/lib/tokenlist.cpp index ae9585171..0c3d73ea4 100644 --- a/lib/tokenlist.cpp +++ b/lib/tokenlist.cpp @@ -936,7 +936,7 @@ static Token * createAstAtToken(Token *tok, bool cpp) if (Token::Match(tok, "%type% <") && Token::Match(tok->linkAt(1), "> !!(")) return tok->linkAt(1); - if (tok->str() == "return" || !tok->previous() || Token::Match(tok, "%name% %op%|(|[|.|::|<") || Token::Match(tok->previous(), "[;{}] %cop%|++|--|( !!{")) { + if (tok->str() == "return" || !tok->previous() || Token::Match(tok, "%name% %op%|(|[|.|::|<|?") || Token::Match(tok->previous(), "[;{}] %cop%|++|--|( !!{")) { Token * const tok1 = tok; AST_state state(cpp); compileExpression(tok, state); diff --git a/test/testbufferoverrun.cpp b/test/testbufferoverrun.cpp index 6644a4e55..aacea9c0a 100644 --- a/test/testbufferoverrun.cpp +++ b/test/testbufferoverrun.cpp @@ -2004,7 +2004,7 @@ private: " some_condition ? 0 : a[i-1];\n" " }\n" "}"); - ASSERT_EQUALS("[test.cpp:4]: (error) Array index -1 is out of bounds.\n", errout.str()); + TODO_ASSERT_EQUALS("[test.cpp:4]: (error) Array index -1 is out of bounds.\n", "", errout.str()); check("void f() {\n" " int a[10];\n" diff --git a/test/testtokenize.cpp b/test/testtokenize.cpp index 31ac40cda..82e323bf7 100644 --- a/test/testtokenize.cpp +++ b/test/testtokenize.cpp @@ -8449,6 +8449,7 @@ private: ASSERT_EQUALS("a0>bc/d:?", testAst("(a>0) ? (b/(c)) : d;")); ASSERT_EQUALS("abc/+d+", testAst("a + (b/(c)) + d;")); + ASSERT_EQUALS("f( x1024x/0:?", testAst("void f() { x ? 1024 / x : 0; }")); ASSERT_EQUALS("absizeofd(ef.+(=", testAst("a = b(sizeof(c d) + e.f)"));