From 1f01845efbd12e45f7095fe4af8b70d2ca2dd0df Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Marjam=C3=A4ki?= Date: Sun, 24 Oct 2021 21:22:06 +0200 Subject: [PATCH] Fixed #10531 (FP unreadVariable with reference and *=) --- lib/astutils.cpp | 2 ++ test/testunusedvar.cpp | 11 +++++++++++ 2 files changed, 13 insertions(+) diff --git a/lib/astutils.cpp b/lib/astutils.cpp index a2a15ce25..83161c87f 100644 --- a/lib/astutils.cpp +++ b/lib/astutils.cpp @@ -2977,6 +2977,8 @@ struct FwdAnalysis::Result FwdAnalysis::checkRecursive(const Token *expr, const } else if (Token::Match(parent->astParent(), "%assign%") && !parent->astParent()->astParent() && parent == parent->astParent()->astOperand1()) { if (mWhat == What::Reassign) return Result(Result::Type::BAILOUT, parent->astParent()); + if (mWhat == What::UnusedValue && (!parent->valueType() || parent->valueType()->reference != Reference::None)) + return Result(Result::Type::BAILOUT, parent->astParent()); continue; } else if (mWhat == What::UnusedValue && parent->isUnaryOp("&") && Token::Match(parent->astParent(), "[,(]")) { // Pass variable to function the writes it diff --git a/test/testunusedvar.cpp b/test/testunusedvar.cpp index 4247af5cb..03479a7ef 100644 --- a/test/testunusedvar.cpp +++ b/test/testunusedvar.cpp @@ -119,6 +119,7 @@ private: TEST_CASE(localvar57); // #8974 - increment TEST_CASE(localvar58); // #9901 - increment false positive TEST_CASE(localvar59); // #9737 + TEST_CASE(localvar60); TEST_CASE(localvarloops); // loops TEST_CASE(localvaralias1); TEST_CASE(localvaralias2); // ticket #1637 @@ -3191,6 +3192,16 @@ private: ASSERT_EQUALS("", errout.str()); } + void localvar60() { // #10531 + functionVariableUsage("void Scale(double scale) {\n" + " for (int i = 0; i < m_points.size(); ++i) {\n" + " auto& p = m_points[i];\n" + " p += scale;\n" + " }\n" + "}"); + ASSERT_EQUALS("", errout.str()); + } + void localvarloops() { // loops functionVariableUsage("void fun(int c) {\n"