diff --git a/lib/tokenize.cpp b/lib/tokenize.cpp index 5333192c5..63316d81f 100644 --- a/lib/tokenize.cpp +++ b/lib/tokenize.cpp @@ -7648,10 +7648,10 @@ void Tokenizer::simplifyEnum() ev = &(enumValues.find(tok2->str())->second); if (!duplicateDefinition(&tok2, ev->name)) { if (tok2->strAt(-1) == "::" || - Token::Match(tok2->next(), "::|[")) { + Token::Match(tok2->next(), "::|[|=")) { // Don't replace this enum if: // * it's preceded or followed by "::" - // * it's followed by "[" + // * it's followed by "[" or "=" } else { simplify = true; ev = &(enumValues.find(tok2->str())->second); diff --git a/test/testsimplifytokens.cpp b/test/testsimplifytokens.cpp index 83608e2d7..1c6507bf6 100644 --- a/test/testsimplifytokens.cpp +++ b/test/testsimplifytokens.cpp @@ -373,6 +373,7 @@ private: TEST_CASE(enum40); TEST_CASE(enum41); // ticket #5212 (valgrind errors during enum simplification) TEST_CASE(enum42); // ticket #5182 (template function call in enum value) + TEST_CASE(enum43); // lhs in assignment TEST_CASE(enumscope1); // ticket #3949 TEST_CASE(duplicateDefinition); // ticket #3565 TEST_CASE(invalid_enum); // #5600 @@ -7161,6 +7162,12 @@ private: ASSERT_EQUALS("a = f < int , 2 > ( ) ;", checkSimplifyEnum(code)); } + void enum43() { // lhs in assignment + const char code[] = "enum { A, B };\n" + "A = 1;"; + ASSERT_EQUALS("A = 1 ;", 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; }";