@@ -126,32 +126,31 @@ namespace ValueFlow
126126 return value.isIntValue () || value.isFloatValue ();
127127 }
128128
129- static void setTokenValueCast (Token *parent, const ValueType &valueType, const Value & value, const Settings &settings)
129+ static void setTokenValueCast (Token *parent, const ValueType &valueType, Value value, const Settings &settings)
130130 {
131131 if (valueType.pointer || value.isImpossible ())
132- setTokenValue (parent,value,settings);
132+ setTokenValue (parent,std::move ( value) ,settings);
133133 else if (valueType.type == ValueType::Type::CHAR)
134- setTokenValue (parent, castValue (value, valueType.sign , settings.platform .char_bit ), settings);
134+ setTokenValue (parent, castValue (std::move ( value) , valueType.sign , settings.platform .char_bit ), settings);
135135 else if (valueType.type == ValueType::Type::SHORT)
136- setTokenValue (parent, castValue (value, valueType.sign , settings.platform .short_bit ), settings);
136+ setTokenValue (parent, castValue (std::move ( value) , valueType.sign , settings.platform .short_bit ), settings);
137137 else if (valueType.type == ValueType::Type::INT)
138- setTokenValue (parent, castValue (value, valueType.sign , settings.platform .int_bit ), settings);
138+ setTokenValue (parent, castValue (std::move ( value) , valueType.sign , settings.platform .int_bit ), settings);
139139 else if (valueType.type == ValueType::Type::LONG)
140- setTokenValue (parent, castValue (value, valueType.sign , settings.platform .long_bit ), settings);
140+ setTokenValue (parent, castValue (std::move ( value) , valueType.sign , settings.platform .long_bit ), settings);
141141 else if (valueType.type == ValueType::Type::LONGLONG)
142- setTokenValue (parent, castValue (value, valueType.sign , settings.platform .long_long_bit ), settings);
142+ setTokenValue (parent, castValue (std::move ( value) , valueType.sign , settings.platform .long_long_bit ), settings);
143143 else if (valueType.isFloat () && isNumeric (value)) {
144- Value floatValue = value;
145- floatValue.valueType = Value::ValueType::FLOAT;
146144 if (value.isIntValue ())
147- floatValue.floatValue = static_cast <double >(value.intvalue );
148- setTokenValue (parent, std::move (floatValue), settings);
145+ value.floatValue = static_cast <double >(value.intvalue );
146+ value.valueType = Value::ValueType::FLOAT;
147+ setTokenValue (parent, std::move (value), settings);
149148 } else if (value.isIntValue ()) {
150149 const long long charMax = settings.platform .signedCharMax ();
151150 const long long charMin = settings.platform .signedCharMin ();
152151 if (charMin <= value.intvalue && value.intvalue <= charMax) {
153152 // unknown type, but value is small so there should be no truncation etc
154- setTokenValue (parent,value,settings);
153+ setTokenValue (parent,std::move ( value) ,settings);
155154 }
156155 }
157156 }
@@ -382,7 +381,7 @@ namespace ValueFlow
382381 && tok->valueType ()->getSizeOf (settings, ValueType::Accuracy::ExactOrZero, ValueType::SizeOf::Pointer)
383382 >= valueType.getSizeOf (settings, ValueType::Accuracy::ExactOrZero, ValueType::SizeOf::Pointer))
384383 return ;
385- setTokenValueCast (parent, valueType, value, settings);
384+ setTokenValueCast (parent, valueType, std::move ( value) , settings);
386385 }
387386
388387 else if (parent->str () == " :" ) {
0 commit comments