From 6c1012a8d6d8daacfcb3cc2883f6391f22e998d8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Marjam=C3=A4ki?= Date: Sun, 7 Feb 2016 13:51:03 +0100 Subject: [PATCH] Fixed #4625 (wrong enum simplification in shadowed enum declaration) --- lib/tokenize.cpp | 2 +- test/testsimplifytokens.cpp | 7 +++++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/lib/tokenize.cpp b/lib/tokenize.cpp index dea89aab2..8d3692c40 100644 --- a/lib/tokenize.cpp +++ b/lib/tokenize.cpp @@ -7754,7 +7754,7 @@ void Tokenizer::simplifyEnum() } else if (inScope && !exitThisScope && (tok2->str() == enumType->str() || (tok2->str() == "enum" && tok2->next() && tok2->next()->str() == enumType->str()))) { if (!Token::Match(tok2->previous(), "%op%|::|:") && !Token::simpleMatch(tok2->tokAt(-2), ") ,") && - Token::Match(tok2->next(), "%name%|(")) { + Token::Match(tok2->next(), "%name%|( !!{")) { simplify = true; hasClass = false; } else if (tok2->previous()->str() == "(" && tok2->next()->str() == ")") { diff --git a/test/testsimplifytokens.cpp b/test/testsimplifytokens.cpp index fd7b35c06..80f83cf59 100644 --- a/test/testsimplifytokens.cpp +++ b/test/testsimplifytokens.cpp @@ -201,6 +201,7 @@ private: TEST_CASE(enum43); // lhs in assignment TEST_CASE(enum44); TEST_CASE(enum45); // ticket #6806 (enum in init list) + TEST_CASE(enum46); // ticket #4625 (shadow declaration) TEST_CASE(enumscope1); // ticket #3949 TEST_CASE(enumOriginalName) TEST_CASE(duplicateDefinition); // ticket #3565 @@ -3304,6 +3305,12 @@ private: ASSERT_EQUALS("c :: c ( ) : a ( 0 ) , a ( 0 ) { }", checkSimplifyEnum(code)); } + void enum46() { // #4625 - wrong simplification in shadow declaration + const char code[] = "enum e {foo,bar};\n" + "class c { enum e {foo=0,bar}; };"; + ASSERT_EQUALS("class c { } ;", checkSimplifyEnum(code)); + } + void enumscope1() { // #3949 - don't simplify enum from one function in another function const char code[] = "void foo() { enum { A = 0, B = 1 }; }\n" "void bar() { int a = A; }";