Validate asserts in the AST to fix crash in 10442 (#3428)
This commit is contained in:
parent
786700efd6
commit
49df3d811a
|
@ -1663,8 +1663,8 @@ void TokenList::validateAst() const
|
||||||
throw InternalError(tok, "Syntax Error: AST broken, binary operator '" + tok->str() + "' doesn't have two operands.", InternalError::AST);
|
throw InternalError(tok, "Syntax Error: AST broken, binary operator '" + tok->str() + "' doesn't have two operands.", InternalError::AST);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Check control blocks
|
// Check control blocks and asserts
|
||||||
if (Token::Match(tok->previous(), "if|while|for|switch (")) {
|
if (Token::Match(tok->previous(), "if|while|for|switch|assert|ASSERT (")) {
|
||||||
if (!tok->astOperand1() || !tok->astOperand2())
|
if (!tok->astOperand1() || !tok->astOperand2())
|
||||||
throw InternalError(tok,
|
throw InternalError(tok,
|
||||||
"Syntax Error: AST broken, '" + tok->previous()->str() +
|
"Syntax Error: AST broken, '" + tok->previous()->str() +
|
||||||
|
|
|
@ -136,7 +136,7 @@ private:
|
||||||
" void Foo();\n"
|
" void Foo();\n"
|
||||||
"};\n"
|
"};\n"
|
||||||
"void foo(SquarePack s) {\n"
|
"void foo(SquarePack s) {\n"
|
||||||
" assert( s.Foo(); );\n"
|
" assert( s.Foo() );\n"
|
||||||
"}");
|
"}");
|
||||||
ASSERT_EQUALS("[test.cpp:5]: (warning) Assert statement calls a function which may have desired side effects: 'Foo'.\n", errout.str());
|
ASSERT_EQUALS("[test.cpp:5]: (warning) Assert statement calls a function which may have desired side effects: 'Foo'.\n", errout.str());
|
||||||
|
|
||||||
|
@ -144,7 +144,7 @@ private:
|
||||||
" void Foo() const;\n"
|
" void Foo() const;\n"
|
||||||
"};\n"
|
"};\n"
|
||||||
"void foo(SquarePack* s) {\n"
|
"void foo(SquarePack* s) {\n"
|
||||||
" assert( s->Foo(); );\n"
|
" assert( s->Foo() );\n"
|
||||||
"}");
|
"}");
|
||||||
ASSERT_EQUALS("", errout.str());
|
ASSERT_EQUALS("", errout.str());
|
||||||
|
|
||||||
|
@ -152,14 +152,14 @@ private:
|
||||||
" static void Foo();\n"
|
" static void Foo();\n"
|
||||||
"};\n"
|
"};\n"
|
||||||
"void foo(SquarePack* s) {\n"
|
"void foo(SquarePack* s) {\n"
|
||||||
" assert( s->Foo(); );\n"
|
" assert( s->Foo() );\n"
|
||||||
"}");
|
"}");
|
||||||
ASSERT_EQUALS("", errout.str());
|
ASSERT_EQUALS("", errout.str());
|
||||||
|
|
||||||
check("struct SquarePack {\n"
|
check("struct SquarePack {\n"
|
||||||
"};\n"
|
"};\n"
|
||||||
"void foo(SquarePack* s) {\n"
|
"void foo(SquarePack* s) {\n"
|
||||||
" assert( s->Foo(); );\n"
|
" assert( s->Foo() );\n"
|
||||||
"}");
|
"}");
|
||||||
ASSERT_EQUALS("", errout.str());
|
ASSERT_EQUALS("", errout.str());
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue