Ticket #5168: Don't crash when simplifying bit-fields for invalid code.

This commit is contained in:
Simon Martin 2013-11-23 20:33:03 +01:00
parent 8cca41774d
commit 9817da00ec
2 changed files with 6 additions and 1 deletions

View File

@ -9580,7 +9580,7 @@ void Tokenizer::simplifyBitfields()
tok->next()->str() != "default") {
const bool offset = (tok->next()->str() == "const");
if (!Token::Match(tok->tokAt(3 + (offset ? 1 : 0)), "[{};]")) {
if (!Token::Match(tok->tokAt(3 + (offset ? 1 : 0)), "[{};()]")) {
tok->deleteNext(4 + (offset ? 1 : 0));
goback = true;
}

View File

@ -74,6 +74,7 @@ private:
TEST_CASE(garbageCode2); // #4300
TEST_CASE(garbageCode3); // #4869
TEST_CASE(garbageCode4); // #4887
TEST_CASE(garbageCode5); // #5168
TEST_CASE(simplifyFileAndLineMacro); // tokenize "return - __LINE__;"
@ -976,6 +977,10 @@ private:
tokenizeAndStringify("void f ( ) { = a ; if ( 1 ) if = ( 0 ) ; }");
}
void garbageCode5() { // #5168
tokenizeAndStringify("( asm : ; void : );");
}
void simplifyFileAndLineMacro() { // tokenize 'return - __LINE__' correctly
ASSERT_EQUALS("\"test.cpp\"", tokenizeAndStringify("__FILE__"));
ASSERT_EQUALS("return -1 ;", tokenizeAndStringify("return - __LINE__;"));