From d5d6da0dd4321a1a689823055f21e6c655a60e46 Mon Sep 17 00:00:00 2001 From: chrchr-github <78114321+chrchr-github@users.noreply.github.com> Date: Fri, 27 May 2022 17:17:50 +0200 Subject: [PATCH] Fix #11094 FP unreadVariable with unique_ptr and unknown type (#4140) --- lib/checkunusedvar.cpp | 2 +- test/testunusedvar.cpp | 8 ++++++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/lib/checkunusedvar.cpp b/lib/checkunusedvar.cpp index 36455a0ad..ca5646d64 100644 --- a/lib/checkunusedvar.cpp +++ b/lib/checkunusedvar.cpp @@ -61,7 +61,7 @@ static bool isRaiiClass(const ValueType *valueType, bool cpp, bool defaultReturn if (!valueType) return defaultReturn; - if (valueType->smartPointerType && isRaiiClassScope(valueType->smartPointerType->classScope)) + if ((valueType->smartPointerType && isRaiiClassScope(valueType->smartPointerType->classScope)) || (!valueType->smartPointerType && valueType->type == ValueType::Type::SMART_POINTER)) return true; switch (valueType->type) { diff --git a/test/testunusedvar.cpp b/test/testunusedvar.cpp index 5ab4193dc..66a52bb48 100644 --- a/test/testunusedvar.cpp +++ b/test/testunusedvar.cpp @@ -5910,6 +5910,14 @@ private: "}\n"); ASSERT_EQUALS("[test.cpp:7]: (style) Variable 'a' is assigned a value that is never used.\n" "[test.cpp:8]: (style) Variable 'a2' is assigned a value that is never used.\n", errout.str()); + + functionVariableUsage("void g();\n" // #11094 + "void f() {\n" + " auto p = std::make_unique();\n" + " p = nullptr;\n" + " g();\n" + "}\n"); + ASSERT_EQUALS("", errout.str()); } // ticket #3104 - false positive when variable is read with "if (NOT var)"