From e5ae575acec7d59cfe7ca33e7f8ccf6bb30c15f5 Mon Sep 17 00:00:00 2001 From: Robert Reif Date: Mon, 2 Jun 2014 06:18:32 +0200 Subject: [PATCH] Fixed #5867 (invalid debug warnung: Scope::checkVariable : varid0) --- lib/symboldatabase.cpp | 2 +- test/testsymboldatabase.cpp | 13 +++++++++++++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/lib/symboldatabase.cpp b/lib/symboldatabase.cpp index dd628e6e1..ebdc04655 100644 --- a/lib/symboldatabase.cpp +++ b/lib/symboldatabase.cpp @@ -2612,7 +2612,7 @@ bool Scope::isVariableDeclaration(const Token* tok, const Token*& vartok, const typetok = localTypeTok; } else if ((isLocal() || type == Scope::eFunction) && Token::Match(localVarTok, "%var% (") && - Token::simpleMatch(localVarTok->next()->link(), ") ;")) { + Token::simpleMatch(localVarTok->next()->link(), ") ;") && localVarTok->varId()) { vartok = localVarTok; typetok = localTypeTok; } else if (type == eCatch && diff --git a/test/testsymboldatabase.cpp b/test/testsymboldatabase.cpp index a6f9f1c91..e76075b6c 100644 --- a/test/testsymboldatabase.cpp +++ b/test/testsymboldatabase.cpp @@ -245,6 +245,8 @@ private: TEST_CASE(varTypesIntegral); // known integral TEST_CASE(varTypesFloating); // known floating TEST_CASE(varTypesOther); // (un)known + + TEST_CASE(functionPrototype); // ticket #5867 } void array() const { @@ -2402,6 +2404,17 @@ private: ASSERT_EQUALS(false, b->isFloatingType()); } } + + void functionPrototype() { + check("int foo(int x) {\n" + " extern int func1();\n" + " extern int func2(int);\n" + " int func3();\n" + " int func4(int);\n" + " return func4(x);\n" + "}\n", true); + ASSERT_EQUALS("", errout.str()); + } }; REGISTER_TEST(TestSymbolDatabase)