From 890aaff658791a8dd12ae57e2e89f0cb79835666 Mon Sep 17 00:00:00 2001 From: firewave Date: Tue, 7 Jan 2025 20:01:33 +0100 Subject: [PATCH 1/2] vf_settokenvalue.cpp: reduced scope of some variables in `setTokenValue()` --- lib/vf_settokenvalue.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/lib/vf_settokenvalue.cpp b/lib/vf_settokenvalue.cpp index 1fcf7d28a3a..7e09bb6b9f5 100644 --- a/lib/vf_settokenvalue.cpp +++ b/lib/vf_settokenvalue.cpp @@ -486,17 +486,14 @@ namespace ValueFlow continue; result.valueType = Value::ValueType::FLOAT; } - const double floatValue1 = value1.isFloatValue() ? value1.floatValue : static_cast(value1.intvalue); - const double floatValue2 = value2.isFloatValue() ? value2.floatValue : static_cast(value2.intvalue); - const bool isFloat = value1.isFloatValue() || value2.isFloatValue(); + if ((value1.isFloatValue() || value2.isFloatValue()) && Token::Match(parent, "&|^|%|<<|>>|==|!=|%or%")) + continue; const auto intValue1 = [&]() -> MathLib::bigint { return value1.isFloatValue() ? static_cast(value1.floatValue) : value1.intvalue; }; const auto intValue2 = [&]() -> MathLib::bigint { return value2.isFloatValue() ? static_cast(value2.floatValue) : value2.intvalue; }; - if ((value1.isFloatValue() || value2.isFloatValue()) && Token::Match(parent, "&|^|%|<<|>>|==|!=|%or%")) - continue; if (Token::Match(parent, "==|!=")) { if ((value1.isIntValue() && value2.isTokValue()) || (value1.isTokValue() && value2.isIntValue())) { if (parent->str() == "==") @@ -542,6 +539,7 @@ namespace ValueFlow } setTokenValue(parent, std::move(result), settings); } else if (Token::Match(parent, "%op%")) { + const bool isFloat = value1.isFloatValue() || value2.isFloatValue(); if (Token::Match(parent, "%comp%")) { if (!isFloat && !value1.isIntValue() && !value2.isIntValue()) continue; @@ -551,6 +549,8 @@ namespace ValueFlow } bool error = false; if (isFloat) { + const double floatValue1 = value1.isFloatValue() ? value1.floatValue : static_cast(value1.intvalue); + const double floatValue2 = value2.isFloatValue() ? value2.floatValue : static_cast(value2.intvalue); auto val = calculate(parent->str(), floatValue1, floatValue2, &error); if (result.isFloatValue()) { result.floatValue = val; From 720cda70fe3ec6644f4a151eb7192364f68ef31f Mon Sep 17 00:00:00 2001 From: firewave Date: Wed, 20 Aug 2025 11:29:00 +0200 Subject: [PATCH 2/2] vf_settokenvalue.cpp: moved back `isFloat` and used it in another case in `setTokenValue()` --- lib/vf_settokenvalue.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/vf_settokenvalue.cpp b/lib/vf_settokenvalue.cpp index 7e09bb6b9f5..4ba82b15e24 100644 --- a/lib/vf_settokenvalue.cpp +++ b/lib/vf_settokenvalue.cpp @@ -486,7 +486,8 @@ namespace ValueFlow continue; result.valueType = Value::ValueType::FLOAT; } - if ((value1.isFloatValue() || value2.isFloatValue()) && Token::Match(parent, "&|^|%|<<|>>|==|!=|%or%")) + const bool isFloat = value1.isFloatValue() || value2.isFloatValue(); + if (isFloat && Token::Match(parent, "&|^|%|<<|>>|==|!=|%or%")) continue; const auto intValue1 = [&]() -> MathLib::bigint { return value1.isFloatValue() ? static_cast(value1.floatValue) : value1.intvalue; @@ -539,7 +540,6 @@ namespace ValueFlow } setTokenValue(parent, std::move(result), settings); } else if (Token::Match(parent, "%op%")) { - const bool isFloat = value1.isFloatValue() || value2.isFloatValue(); if (Token::Match(parent, "%comp%")) { if (!isFloat && !value1.isIntValue() && !value2.isIntValue()) continue;