Merge pull request #855 from simartin/ticket_7850
Ticket #7850: Properly handle C functions called "class".
This commit is contained in:
commit
3a742fdeb1
|
@ -3056,7 +3056,7 @@ Scope::Scope(const SymbolDatabase *check_, const Token *classDef_, const Scope *
|
|||
const Token *nameTok = classDef;
|
||||
if (!classDef) {
|
||||
type = Scope::eGlobal;
|
||||
} else if (classDef->str() == "class") {
|
||||
} else if (classDef->str() == "class" && check && check->isCPP()) {
|
||||
type = Scope::eClass;
|
||||
nameTok = nameTok->next();
|
||||
} else if (classDef->str() == "struct") {
|
||||
|
|
|
@ -273,6 +273,7 @@ private:
|
|||
TEST_CASE(vardecl24); // #4187 - variable declaration within lambda function
|
||||
TEST_CASE(vardecl25); // #4799 - segmentation fault
|
||||
TEST_CASE(vardecl26); // #5907 - incorrect handling of extern declarations
|
||||
TEST_CASE(vardecl27); // #7850 - crash on valid C code
|
||||
TEST_CASE(vardecl_stl_1);
|
||||
TEST_CASE(vardecl_stl_2);
|
||||
TEST_CASE(vardecl_template_1);
|
||||
|
@ -3938,6 +3939,16 @@ private:
|
|||
ASSERT_EQUALS(expected, tokenizeAndStringify(code));
|
||||
}
|
||||
|
||||
void vardecl27() { // #7850
|
||||
const char code[] = "extern int foo(char);\n"
|
||||
"void* class(char c) {\n"
|
||||
" if (foo(c))\n"
|
||||
" return 0;\n"
|
||||
" return 0;\n"
|
||||
"}";
|
||||
tokenizeAndStringify(code, /*simplify=*/false, /*expand=*/true, Settings::Native, "test.c");
|
||||
}
|
||||
|
||||
void volatile_variables() {
|
||||
const char code[] = "volatile int a=0;\n"
|
||||
"volatile int b=0;\n"
|
||||
|
|
Loading…
Reference in New Issue