From 003956e42e02d1843aea0590d4a07fbf76ec0cdc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Marjam=C3=A4ki?= Date: Tue, 9 Aug 2011 17:03:22 +0200 Subject: [PATCH] Fixed #2982 (false positive: using char type as array index (using string as key)) --- lib/checkother.cpp | 11 +++++++---- test/testcharvar.cpp | 6 ++++++ 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/lib/checkother.cpp b/lib/checkother.cpp index 02a77540f..bd118c63f 100644 --- a/lib/checkother.cpp +++ b/lib/checkother.cpp @@ -2916,11 +2916,14 @@ void CheckOther::checkCharVariable() break; } - std::string temp = "%var% [ " + tok->str() + " ]"; - if ((tok2->str() != ".") && Token::Match(tok2->next(), temp.c_str())) + if (!isPointer) { - charArrayIndexError(tok2->next()); - break; + std::string temp = "%var% [ " + tok->str() + " ]"; + if ((tok2->str() != ".") && Token::Match(tok2->next(), temp.c_str())) + { + charArrayIndexError(tok2->next()); + break; + } } if (Token::Match(tok2, "[;{}] %var% = %any% [&|] %any% ;")) diff --git a/test/testcharvar.cpp b/test/testcharvar.cpp index 5f0886c43..7b7a8b206 100644 --- a/test/testcharvar.cpp +++ b/test/testcharvar.cpp @@ -91,6 +91,12 @@ private: " buf[ch] = 0;\n" "}\n"); ASSERT_EQUALS("[test.cpp:3]: (warning) Using char type as array index\n", errout.str()); + + check("void foo(const char str[])\n" + "{\n" + " map[str] = 0;\n" + "}\n"); + ASSERT_EQUALS("", errout.str()); }