diff --git a/lib/symboldatabase.cpp b/lib/symboldatabase.cpp index 042cad03e..ca2cfd5cf 100644 --- a/lib/symboldatabase.cpp +++ b/lib/symboldatabase.cpp @@ -4578,7 +4578,7 @@ void SymbolDatabase::setValueType(Token *tok, const ValueType &valuetype) return; } - if (parent->str() == "[" && (!cpp || parent->astOperand1() == tok) && valuetype.pointer > 0U) { + if (parent->str() == "[" && (!cpp || parent->astOperand1() == tok) && valuetype.pointer > 0U && !Token::Match(parent->previous(), "[{,]")) { const Token *op1 = parent->astOperand1(); while (op1 && op1->str() == "[") op1 = op1->astOperand1(); diff --git a/test/testsymboldatabase.cpp b/test/testsymboldatabase.cpp index 935aee9a2..82564c0c2 100644 --- a/test/testsymboldatabase.cpp +++ b/test/testsymboldatabase.cpp @@ -4429,6 +4429,7 @@ private: // Variable declaration ASSERT_EQUALS("char *", typeOf("; char abc[] = \"abc\";", "[")); + ASSERT_EQUALS("", typeOf("; int x[10] = { [3]=1 };", "[ 3 ]")); } void variadic1() { // #7453