From 36cf2df64a1d60a5230a2fc118d81be755ce4eea Mon Sep 17 00:00:00 2001 From: chrchr-github <78114321+chrchr-github@users.noreply.github.com> Date: Wed, 5 Aug 2026 10:20:17 +0200 Subject: [PATCH 1/3] Update vf_analyzers.cpp --- lib/vf_analyzers.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/vf_analyzers.cpp b/lib/vf_analyzers.cpp index cfba7d5f970..5e73245257c 100644 --- a/lib/vf_analyzers.cpp +++ b/lib/vf_analyzers.cpp @@ -892,7 +892,7 @@ static bool isAliasOf(const Variable * var, const Token *tok, nonneg int varid, return false; if (val.isLifetimeValue() && !val.isLocalLifetimeValue()) return false; - if (val.isLifetimeValue() && val.lifetimeKind != ValueFlow::Value::LifetimeKind::Address) + if (val.isLifetimeValue() && val.lifetimeKind != ValueFlow::Value::LifetimeKind::Address && val.lifetimeKind != ValueFlow::Value::LifetimeKind::SubObject) return false; if (!Token::Match(val.tokvalue, ".|&|*|%var%")) return false; @@ -1167,7 +1167,7 @@ struct SingleValueFlowAnalyzer : ValueFlowAnalyzer { } bool isAlias(const Token* tok, bool& inconclusive) const override { - if (value.isLifetimeValue()) + if (value.isLifetimeValue() && value.lifetimeKind != ValueFlow::Value::LifetimeKind::SubObject) return false; for (const auto& m: { std::ref(getVars()), std::ref(getAliasedVars()) From aa4f8671f0e8e34d5de0c82e8f6b3f6b0ced52c1 Mon Sep 17 00:00:00 2001 From: chrchr-github <78114321+chrchr-github@users.noreply.github.com> Date: Wed, 5 Aug 2026 10:21:24 +0200 Subject: [PATCH 2/3] Update testautovariables.cpp --- test/testautovariables.cpp | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/test/testautovariables.cpp b/test/testautovariables.cpp index 7774d7fa733..0a16e0adaf6 100644 --- a/test/testautovariables.cpp +++ b/test/testautovariables.cpp @@ -3240,6 +3240,15 @@ class TestAutoVariables : public TestFixture { " return s[0].p.get();\n" "}\n"); ASSERT_EQUALS("", errout_str()); + + check("std::unique_ptr g_p;\n" // #14568 + "int* f() {\n" + " std::unique_ptr tmp = std::make_unique();\n" + " int* p = tmp.get();\n" + " g_p = std::move(tmp);\n" + " return p;\n" + "}\n"); + ASSERT_EQUALS("", errout_str()); } void danglingLifetime() { check("auto f() {\n" From 07cb8ab645e7cfd0b206c040f06b6ce7c317a53d Mon Sep 17 00:00:00 2001 From: chrchr-github <78114321+chrchr-github@users.noreply.github.com> Date: Wed, 5 Aug 2026 10:23:05 +0200 Subject: [PATCH 3/3] Update testautovariables.cpp --- test/testautovariables.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/testautovariables.cpp b/test/testautovariables.cpp index 0a16e0adaf6..d2189de26ca 100644 --- a/test/testautovariables.cpp +++ b/test/testautovariables.cpp @@ -3241,7 +3241,7 @@ class TestAutoVariables : public TestFixture { "}\n"); ASSERT_EQUALS("", errout_str()); - check("std::unique_ptr g_p;\n" // #14568 + check("std::unique_ptr g_p;\n" // #14958 "int* f() {\n" " std::unique_ptr tmp = std::make_unique();\n" " int* p = tmp.get();\n"