From a7f27a83a791d9bb8c4a61d69bf26a006f5dc886 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Marjam=C3=A4ki?= Date: Mon, 31 Oct 2011 18:33:15 +0100 Subject: [PATCH] Fixed #3271 (Regression: something related to symbol database / varid) --- lib/tokenize.cpp | 3 +++ test/testtokenize.cpp | 11 +++++++++++ 2 files changed, 14 insertions(+) diff --git a/lib/tokenize.cpp b/lib/tokenize.cpp index 27a082884..82ca14f10 100644 --- a/lib/tokenize.cpp +++ b/lib/tokenize.cpp @@ -3389,6 +3389,9 @@ void Tokenizer::setVarId() if (tok && tok->str() == "friend") continue; + if (Token::Match(tok, "class|struct %type% ;")) + continue; + // skip global namespace prefix if (Token::simpleMatch(tok, "::")) tok = tok->next(); diff --git a/test/testtokenize.cpp b/test/testtokenize.cpp index 91ea1314a..61a755b25 100644 --- a/test/testtokenize.cpp +++ b/test/testtokenize.cpp @@ -195,6 +195,7 @@ private: TEST_CASE(varid_in_class1); TEST_CASE(varid_in_class2); TEST_CASE(varid_in_class3); // #3092 - shadow variable in member function + TEST_CASE(varid_in_class4); // #3271 - public: class C; TEST_CASE(varid_operator); TEST_CASE(varid_throw); TEST_CASE(varid_unknown_macro); // #2638 - unknown macro is not type @@ -3224,6 +3225,16 @@ private: "6: } ;\n", tokenizeDebugListing(code)); } + void varid_in_class4() { + const std::string code = "class Foo {\n" + "public: class C;\n" + "};"; + ASSERT_EQUALS("\n\n##file 0\n" + "1: class Foo {\n" + "2: public: class C ;\n" + "3: } ;\n", + tokenizeDebugListing(code)); + } void varid_operator() { {