@@ -1042,6 +1042,16 @@ static void setTokenValue(Token* tok,
10421042 }
10431043 }
10441044
1045+ // C++ init
1046+ else if (parent->str () == " {" && Token::simpleMatch (parent->previous (), " = {" ) && Token::simpleMatch (parent->link (), " } ;" )) {
1047+ const Token* lhs = parent->previous ()->astOperand1 ();
1048+ if (lhs && lhs->valueType ()) {
1049+ if (lhs->valueType ()->isIntegral () || lhs->valueType ()->isFloat () || (lhs->valueType ()->pointer > 0 && value.isIntValue ())) {
1050+ setTokenValue (parent, value, settings);
1051+ }
1052+ }
1053+ }
1054+
10451055 else if (Token::Match (parent, " :: %name%" ) && parent->astOperand2 () == tok) {
10461056 setTokenValue (parent, value, settings);
10471057 }
@@ -1335,16 +1345,12 @@ static Token * valueFlowSetConstantValue(Token *tok, const Settings *settings, b
13351345 if (!tok->isTemplateArg ())
13361346 value.setKnown ();
13371347 setTokenValue (tok->next (), std::move (value), settings);
1338- } else if (Token::Match (tok, " %name% = {" ) && tok-> variable () &&
1339- ( tok->variable ()-> isPointer () || (tok-> variable ()-> valueType () && tok-> variable ()-> valueType ()-> isIntegral ()))) {
1340- if (Token::simpleMatch (tok-> tokAt ( 3 ), " } " )) {
1348+ } else if (Token::simpleMatch (tok, " = { } ; " )) {
1349+ const Token* lhs = tok->astOperand1 ();
1350+ if (lhs && lhs-> valueType () && (lhs-> valueType ()-> isIntegral () || lhs-> valueType ()-> pointer > 0 )) {
13411351 ValueFlow::Value value (0 );
13421352 value.setKnown ();
1343- setTokenValue (tok->tokAt (2 ), std::move (value), settings);
1344- } else if (tok->tokAt (2 )->astOperand1 () && tok->tokAt (2 )->astOperand1 ()->hasKnownIntValue ()) {
1345- ValueFlow::Value value (tok->tokAt (2 )->astOperand1 ()->getKnownIntValue ());
1346- value.setKnown ();
1347- setTokenValue (tok->tokAt (2 ), std::move (value), settings);
1353+ setTokenValue (tok->next (), std::move (value), settings);
13481354 }
13491355 }
13501356 return tok->next ();
@@ -9448,7 +9454,6 @@ void ValueFlow::setValues(TokenList& tokenlist,
94489454 VFA (valueFlowUnknownFunctionReturn (tokenlist, settings)),
94499455 VFA (valueFlowGlobalConstVar (tokenlist, settings)),
94509456 VFA (valueFlowEnumValue (symboldatabase, settings)),
9451- VFA (valueFlowNumber (tokenlist, settings)),
94529457 VFA (valueFlowGlobalStaticVar (tokenlist, settings)),
94539458 VFA (valueFlowPointerAlias (tokenlist, settings)),
94549459 VFA (valueFlowLifetime (tokenlist, errorLogger, settings)),
0 commit comments