Fixed #6547 (Regression - unknown macro causes analysis error)

This commit is contained in:
Daniel Marjamäki 2015-02-28 11:09:39 +01:00
parent 3add466035
commit 449b88aa0c
3 changed files with 20 additions and 5 deletions

View File

@ -37,7 +37,7 @@
//--------------------------------------------------------------------------- //---------------------------------------------------------------------------
/** /**
* is token pointing at function head? * is token pointing at function head?
* @param tok A '(' or ')' token in a possible function head * @param tok A '(' or ')' token in a possible function head
* @param endsWith string after function head * @param endsWith string after function head
* @return true if syntax seems to be a function head * @return true if syntax seems to be a function head
@ -57,7 +57,9 @@ static bool isFunctionHead(const Token *tok, const std::string &endsWith)
while (tok->isName()) while (tok->isName())
tok = tok->next(); tok = tok->next();
tok = tok->link()->next(); tok = tok->link()->next();
return endsWith.find(tok->str()) != std::string::npos; while (tok && tok->isName())
tok = tok->next();
return tok && endsWith.find(tok->str()) != std::string::npos;
} }
return false; return false;
} }
@ -4077,8 +4079,14 @@ void Tokenizer::removeMacrosInGlobalScope()
} }
} }
if (tok->str() == "{") // Skip executable scopes
tok = tok->link(); if (tok->str() == "{") {
const Token *prev = tok->previous();
while (prev && prev->isName())
prev = prev->previous();
if (prev && prev->str() == ")")
tok = tok->link();
}
} }
} }

View File

@ -5826,7 +5826,7 @@ private:
static const char expected14[] = "class C {\n" static const char expected14[] = "class C {\n"
"void search ( ) { }\n" "void search ( ) { }\n"
"void search ( ) const { }\n" "void search ( ) const { }\n"
"void search ( ) THROW_MACRO { }\n" "void search ( ) { }\n"
"} ;"; "} ;";
ASSERT_EQUALS(expected14, tokenizeAndStringify(code14, false)); ASSERT_EQUALS(expected14, tokenizeAndStringify(code14, false));
} }

View File

@ -985,6 +985,13 @@ private:
"void fred ( int x@1 ) const throw ( EXCEPT ) { } " "void fred ( int x@1 ) const throw ( EXCEPT ) { } "
"void wilma ( ) { x ++ ; }\n"; "void wilma ( ) { x ++ ; }\n";
ASSERT_EQUALS(expected2, tokenize(code2, false, "test.cpp")); ASSERT_EQUALS(expected2, tokenize(code2, false, "test.cpp"));
const char code3[] = "void fred(int x) throw() ABCD {}"
"void wilma() { x++; }";
const char expected3[] = "\n\n##file 0\n1: "
"void fred ( int x@1 ) throw ( ) { } "
"void wilma ( ) { x ++ ; }\n";
ASSERT_EQUALS(expected3, tokenize(code3, false, "test.cpp"));
} }
void varid_cpp_keywords_in_c_code() { void varid_cpp_keywords_in_c_code() {