From ed55e3f621a5791cfc0d583ae19e35fafb86f529 Mon Sep 17 00:00:00 2001 From: chrchr Date: Fri, 3 Mar 2023 14:44:01 +0100 Subject: [PATCH] Fix #11597 FP uninitvar with nested enum --- lib/checkuninitvar.cpp | 2 +- test/testuninitvar.cpp | 10 ++++++++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/lib/checkuninitvar.cpp b/lib/checkuninitvar.cpp index 98785605e38..31c3f9c5844 100644 --- a/lib/checkuninitvar.cpp +++ b/lib/checkuninitvar.cpp @@ -1620,7 +1620,7 @@ void CheckUninitVar::valueFlowUninit() continue; uninitderef = deref && v->indirect == 0; const bool isleaf = isLeafDot(tok) || uninitderef; - if (Token::Match(tok->astParent(), ". %var%") && !isleaf) + if (!isleaf && Token::Match(tok->astParent(), ". %name%") && (tok->astParent()->next()->varId() || tok->astParent()->next()->isEnumerator())) continue; } const ExprUsage usage = getExprUsage(tok, v->indirect, mSettings); diff --git a/test/testuninitvar.cpp b/test/testuninitvar.cpp index f450c6fae78..47ef7ab81e8 100644 --- a/test/testuninitvar.cpp +++ b/test/testuninitvar.cpp @@ -6272,6 +6272,16 @@ class TestUninitVar : public TestFixture { " h.e();\n" "}\n"); ASSERT_EQUALS("", errout.str()); + + // #11597 + valueFlowUninit("void f(size_t f) {\n" + " struct {\n" + " int i;\n" + " enum { offset = 1062 };\n" + " } s;\n" + " if (f < s.offset + sizeof(s)) {}\n" + "}\n"); + ASSERT_EQUALS("", errout.str()); } void uninitvar_memberfunction() {