Fixed #3123 ([False Positive] Shadowed enum)
This commit is contained in:
parent
84cd0bd585
commit
3d8fa2f76e
|
@ -7912,14 +7912,16 @@ void Tokenizer::simplifyEnum()
|
||||||
simplify = true;
|
simplify = true;
|
||||||
hasClass = true;
|
hasClass = true;
|
||||||
} else if (inScope && !exitThisScope && tok2->str() == enumName->str()) {
|
} else if (inScope && !exitThisScope && tok2->str() == enumName->str()) {
|
||||||
|
if (!duplicateDefinition(&tok2, enumName)) {
|
||||||
if (Token::simpleMatch(tok2->previous(), "::") ||
|
if (Token::simpleMatch(tok2->previous(), "::") ||
|
||||||
Token::Match(tok2->next(), "::|[")) {
|
Token::Match(tok2->next(), "::|[")) {
|
||||||
// Don't replace this enum if:
|
// Don't replace this enum if:
|
||||||
// * it's preceded or followed by "::"
|
// * it's preceded or followed by "::"
|
||||||
// * it's followed by "["
|
// * it's followed by "["
|
||||||
} else if (!duplicateDefinition(&tok2, enumName)) {
|
} else {
|
||||||
simplify = true;
|
simplify = true;
|
||||||
hasClass = false;
|
hasClass = false;
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
// something with the same name.
|
// something with the same name.
|
||||||
exitScope = level;
|
exitScope = level;
|
||||||
|
|
|
@ -339,6 +339,7 @@ private:
|
||||||
TEST_CASE(enum25); // ticket #2966
|
TEST_CASE(enum25); // ticket #2966
|
||||||
TEST_CASE(enum26); // ticket #2975 (segmentation fault)
|
TEST_CASE(enum26); // ticket #2975 (segmentation fault)
|
||||||
TEST_CASE(enum27); // ticket #3005 (segmentation fault)
|
TEST_CASE(enum27); // ticket #3005 (segmentation fault)
|
||||||
|
TEST_CASE(enum28);
|
||||||
|
|
||||||
// remove "std::" on some standard functions
|
// remove "std::" on some standard functions
|
||||||
TEST_CASE(removestd);
|
TEST_CASE(removestd);
|
||||||
|
@ -6863,6 +6864,14 @@ private:
|
||||||
ASSERT_EQUALS("[test.cpp:1]: (error) syntax error\n", errout.str());
|
ASSERT_EQUALS("[test.cpp:1]: (error) syntax error\n", errout.str());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void enum28() {
|
||||||
|
const char code[] = "enum { x=0 };\n"
|
||||||
|
"void f() { char x[4]; memset(x, 0, 4); \n"
|
||||||
|
"{ x } };\n"
|
||||||
|
"void g() { x; }";
|
||||||
|
ASSERT_EQUALS("; void f ( ) { char x [ 4 ] ; memset ( x , 0 , 4 ) ; { x } } ; void g ( ) { 0 ; }", tok(code, true));
|
||||||
|
}
|
||||||
|
|
||||||
void removestd() {
|
void removestd() {
|
||||||
ASSERT_EQUALS("; strcpy ( a , b ) ;", tok("; std::strcpy(a,b);"));
|
ASSERT_EQUALS("; strcpy ( a , b ) ;", tok("; std::strcpy(a,b);"));
|
||||||
ASSERT_EQUALS("; strcat ( a , b ) ;", tok("; std::strcat(a,b);"));
|
ASSERT_EQUALS("; strcat ( a , b ) ;", tok("; std::strcat(a,b);"));
|
||||||
|
|
Loading…
Reference in New Issue