Skip to content

Commit d184f77

Browse files
committed
vf_settokenvalue.cpp: avoid unnecessary copies with setTokenValueCast()
1 parent fd66b27 commit d184f77

1 file changed

Lines changed: 12 additions & 13 deletions

File tree

lib/vf_settokenvalue.cpp

Lines changed: 12 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)