diff --git a/lib/symboldatabase.cpp b/lib/symboldatabase.cpp index 771cb6559..28d00ece5 100644 --- a/lib/symboldatabase.cpp +++ b/lib/symboldatabase.cpp @@ -2695,6 +2695,9 @@ bool Scope::isVariableDeclaration(const Token* tok, const Token*& vartok, const const Token* localVarTok = nullptr; if (Token::Match(localTypeTok, "%type% <")) { + if (Token::Match(tok, "const_cast|dynamic_cast|reinterpret_cast|static_cast <")) + return false; + const Token* closeTok = localTypeTok->next()->link(); if (closeTok) { localVarTok = skipPointers(closeTok->next()); diff --git a/test/testsymboldatabase.cpp b/test/testsymboldatabase.cpp index 822b305cb..48f4c2af4 100644 --- a/test/testsymboldatabase.cpp +++ b/test/testsymboldatabase.cpp @@ -128,6 +128,7 @@ private: TEST_CASE(isVariableDeclarationIdentifiesNestedTemplateVariable); TEST_CASE(isVariableDeclarationIdentifiesReference); TEST_CASE(isVariableDeclarationDoesNotIdentifyTemplateClass); + TEST_CASE(isVariableDeclarationDoesNotIdentifyCppCast); TEST_CASE(isVariableDeclarationPointerConst); TEST_CASE(isVariableDeclarationRValueRef); TEST_CASE(isVariableStlType); @@ -603,6 +604,13 @@ private: ASSERT_EQUALS(false, result); } + void isVariableDeclarationDoesNotIdentifyCppCast() { + reset(); + givenACodeSampleToTokenize var("reinterpret_cast (code)[0] = 0;"); + bool result = si.isVariableDeclaration(var.tokens(), vartok, typetok); + ASSERT_EQUALS(false, result); + } + void isVariableDeclarationPointerConst() { reset(); givenACodeSampleToTokenize var("std::string const* s;");