parent
6f56a9563e
commit
9339802be3
|
@ -4085,6 +4085,7 @@ void VariableMap::addVariable(const std::string& varname, bool globalNamespace)
|
||||||
|
|
||||||
static bool setVarIdParseDeclaration(Token** tok, const VariableMap& variableMap, bool executableScope, bool cpp, bool c)
|
static bool setVarIdParseDeclaration(Token** tok, const VariableMap& variableMap, bool executableScope, bool cpp, bool c)
|
||||||
{
|
{
|
||||||
|
const Token* const tok1 = *tok;
|
||||||
Token* tok2 = *tok;
|
Token* tok2 = *tok;
|
||||||
if (!tok2->isName())
|
if (!tok2->isName())
|
||||||
return false;
|
return false;
|
||||||
|
@ -4209,13 +4210,15 @@ static bool setVarIdParseDeclaration(Token** tok, const VariableMap& variableMap
|
||||||
|
|
||||||
// Check if array declaration is valid (#2638)
|
// Check if array declaration is valid (#2638)
|
||||||
// invalid declaration: AAA a[4] = 0;
|
// invalid declaration: AAA a[4] = 0;
|
||||||
if (typeCount >= 2 && executableScope && tok2 && tok2->str() == "[") {
|
if (typeCount >= 2 && executableScope && Token::Match(tok2, ")| [")) {
|
||||||
const Token *tok3 = tok2->link()->next();
|
const Token *tok3 = tok2->str() == ")" ? tok2->next() : tok2;
|
||||||
while (tok3 && tok3->str() == "[") {
|
while (tok3 && tok3->str() == "[") {
|
||||||
tok3 = tok3->link()->next();
|
tok3 = tok3->link()->next();
|
||||||
}
|
}
|
||||||
if (Token::Match(tok3, "= %num%"))
|
if (Token::Match(tok3, "= %num%"))
|
||||||
return false;
|
return false;
|
||||||
|
if (bracket && Token::Match(tok1->previous(), "[(,]") && Token::Match(tok3, "[,)]"))
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
return (typeCount >= 2 && tok2 && Token::Match(tok2->tokAt(-2), "!!:: %type%"));
|
return (typeCount >= 2 && tok2 && Token::Match(tok2->tokAt(-2), "!!:: %type%"));
|
||||||
|
|
|
@ -99,6 +99,7 @@ private:
|
||||||
TEST_CASE(varid65); // #10936
|
TEST_CASE(varid65); // #10936
|
||||||
TEST_CASE(varid66);
|
TEST_CASE(varid66);
|
||||||
TEST_CASE(varid67); // #11711 - NOT function pointer
|
TEST_CASE(varid67); // #11711 - NOT function pointer
|
||||||
|
TEST_CASE(varid68); // #11740 - switch (str_chars(&strOut)[0])
|
||||||
TEST_CASE(varid_for_1);
|
TEST_CASE(varid_for_1);
|
||||||
TEST_CASE(varid_for_2);
|
TEST_CASE(varid_for_2);
|
||||||
TEST_CASE(varid_cpp_keywords_in_c_code);
|
TEST_CASE(varid_cpp_keywords_in_c_code);
|
||||||
|
@ -1225,6 +1226,21 @@ private:
|
||||||
ASSERT_EQUALS(expected1, tokenize(code1, "test.c"));
|
ASSERT_EQUALS(expected1, tokenize(code1, "test.c"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void varid68() { // #11740
|
||||||
|
const char code1[] = "struct S {};\n"
|
||||||
|
"char* str_chars(struct S* s);\n"
|
||||||
|
"void f(struct S strOut) {\n"
|
||||||
|
" switch (str_chars(&strOut)[0]) {}\n"
|
||||||
|
"}";
|
||||||
|
const char expected1[] = "1: struct S { } ;\n"
|
||||||
|
"2: char * str_chars ( struct S * s@1 ) ;\n"
|
||||||
|
"3: void f ( struct S strOut@2 ) {\n"
|
||||||
|
"4: switch ( str_chars ( & strOut@2 ) [ 0 ] ) { }\n"
|
||||||
|
"5: }\n";
|
||||||
|
ASSERT_EQUALS(expected1, tokenize(code1, "test.c"));
|
||||||
|
ASSERT_EQUALS(expected1, tokenize(code1, "test.cpp"));
|
||||||
|
}
|
||||||
|
|
||||||
void varid_for_1() {
|
void varid_for_1() {
|
||||||
const char code[] = "void foo(int a, int b) {\n"
|
const char code[] = "void foo(int a, int b) {\n"
|
||||||
" for (int a=1,b=2;;) {}\n"
|
" for (int a=1,b=2;;) {}\n"
|
||||||
|
|
Loading…
Reference in New Issue