From e0830693c3eada11e392ca92d5d48aa57c368c16 Mon Sep 17 00:00:00 2001 From: chrchr-github <78114321+chrchr-github@users.noreply.github.com> Date: Wed, 23 Mar 2022 07:35:41 +0100 Subject: [PATCH] Fix FP uninitMemberVarPrivate with anonymous union (#3927) --- lib/checkclass.cpp | 2 +- test/testconstructors.cpp | 10 ++++++++-- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/lib/checkclass.cpp b/lib/checkclass.cpp index 3696c6d8a..6d5a6e635 100644 --- a/lib/checkclass.cpp +++ b/lib/checkclass.cpp @@ -170,7 +170,7 @@ void CheckClass::constructors() if (var.isPrivate() && !var.isStatic() && (!var.isClass() || (var.type() && var.type()->needInitialization == Type::NeedInitialization::True))) { ++needInit; - if (!var.isInit() && !var.hasDefault()) + if (!var.isInit() && !var.hasDefault() && var.nameToken()->scope() == scope) // don't warn for anonymous union members uninitVars.emplace_back(&var); else ++haveInit; diff --git a/test/testconstructors.cpp b/test/testconstructors.cpp index 92a5f308b..99d66e873 100644 --- a/test/testconstructors.cpp +++ b/test/testconstructors.cpp @@ -3187,8 +3187,8 @@ private: ASSERT_EQUALS("", errout.str()); } - void uninitVarUnion1() { // ticket #3196 - check("class Fred\n" + void uninitVarUnion1() { + check("class Fred\n" // ticket #3196 "{\n" "private:\n" " union { int a; int b; };\n" @@ -3197,6 +3197,12 @@ private: " { a = 0; }\n" "};"); ASSERT_EQUALS("", errout.str()); + + check("class Fred {\n" + "private:\n" + " union { int a{}; int b; };\n" + "};"); + ASSERT_EQUALS("", errout.str()); } void uninitVarUnion2() {