From a4872268dab81d0c2be458f3cb79f1192cfd9872 Mon Sep 17 00:00:00 2001 From: firewave Date: Tue, 26 Aug 2025 10:03:50 +0200 Subject: [PATCH] ProgramMemory: avoid unnecessary insertion in `setValue()` `subexpr` might have been the same as `expr` and thus overwrote the previously added value. --- lib/programmemory.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lib/programmemory.cpp b/lib/programmemory.cpp index df4b5fcc0c7..9bbd46aea5b 100644 --- a/lib/programmemory.cpp +++ b/lib/programmemory.cpp @@ -61,7 +61,6 @@ std::size_t ExprIdToken::Hash::operator()(ExprIdToken etok) const void ProgramMemory::setValue(const Token* expr, const ValueFlow::Value& value) { copyOnWrite(); - (*mValues)[expr] = value; ValueFlow::Value subvalue = value; const Token* subexpr = solveExprValue( expr, @@ -74,6 +73,8 @@ void ProgramMemory::setValue(const Token* expr, const ValueFlow::Value& value) { return {}; }, subvalue); + if (expr != subexpr) + (*mValues)[expr] = value; if (subexpr) (*mValues)[subexpr] = std::move(subvalue); }