From 6635ed46301d892eafa2111066d48c40ee0a8c3c Mon Sep 17 00:00:00 2001 From: Robert Reif Date: Wed, 8 Jun 2011 20:14:52 -0400 Subject: [PATCH] fix #2828 (false positive: Function parameter 'STYLE' hides enumerator with same name) --- lib/tokenize.cpp | 6 +++++- test/testsimplifytokens.cpp | 12 ++++++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/lib/tokenize.cpp b/lib/tokenize.cpp index f9208a15d..1ce99884a 100644 --- a/lib/tokenize.cpp +++ b/lib/tokenize.cpp @@ -7873,7 +7873,7 @@ bool Tokenizer::duplicateDefinition(Token ** tokPtr, const Token * name) } else if (end->str() == ")") { - // check of function argument + // check for function argument if (tok->previous()->str() == ",") return false; } @@ -7882,6 +7882,10 @@ bool Tokenizer::duplicateDefinition(Token ** tokPtr, const Token * name) { if (Token::simpleMatch(end, ") {")) // function parameter ? { + // make sure it's not a conditional + if (Token::Match(end->link()->previous(), "if|for|while")) + return false; + // look backwards if (tok->previous()->str() == "enum" || (Token::Match(tok->previous(), "%type%") && diff --git a/test/testsimplifytokens.cpp b/test/testsimplifytokens.cpp index 69bb3f002..3b2542c72 100644 --- a/test/testsimplifytokens.cpp +++ b/test/testsimplifytokens.cpp @@ -308,6 +308,7 @@ private: TEST_CASE(enum21); // ticket #2720 TEST_CASE(enum22); // ticket #2745 TEST_CASE(enum23); // ticket #2804 + TEST_CASE(enum24); // ticket #2828 // remove "std::" on some standard functions TEST_CASE(removestd); @@ -6619,6 +6620,17 @@ private: ASSERT_EQUALS("", errout.str()); } + void enum24() // ticket #2828 + { + const char code[] = "enum EnumName { STYLE = 0x0001 };\n" + "void f(long style) {\n" + " if (style & STYLE) { }\n" + "}\n"; + const char expected[] = "; void f ( long style ) { if ( style & 1 ) { } }"; + ASSERT_EQUALS(expected, tok(code, false)); + ASSERT_EQUALS("", errout.str()); + } + void removestd() { ASSERT_EQUALS("; strcpy ( a , b ) ;", tok("; std::strcpy(a,b);"));