Fixed #7253 (AST wrong on nested reinterpret_cast)

This commit is contained in:
Daniel Marjamäki 2016-01-03 09:37:38 +01:00
parent 4ff7fa3f3b
commit ed12b4dc44
2 changed files with 5 additions and 0 deletions

View File

@ -446,6 +446,9 @@ static bool iscast(const Token *tok)
if (tok->previous() && tok->previous()->isName() && tok->previous()->str() != "return")
return false;
if (Token::simpleMatch(tok->previous(), ">") && tok->previous()->link())
return false;
if (Token::Match(tok, "( (| typeof (") && Token::Match(tok->link(), ") %num%"))
return true;

View File

@ -8242,6 +8242,8 @@ private:
ASSERT_EQUALS("a(3==", testAst("a<int>()==3"));
ASSERT_EQUALS("ab(== f(", testAst("a == b<c>(); f();"));
ASSERT_EQUALS("static_casta(i[", testAst("; static_cast<char*>(a)[i];")); // #6203
ASSERT_EQUALS("reinterpret_castreinterpret_castptr(123&(",
testAst(";reinterpret_cast<void*>(reinterpret_cast<unsigned>(ptr) & 123);")); // #7253
// This two unit tests were added to avoid a crash. The actual correct AST result for non-executable code has not been determined so far.
ASSERT_EQUALS("Cpublica::b:::", testAst("class C : public ::a::b<bool> { };"));