From 4aaa97700377a811dbcaf88a81ec068a5b517a4d Mon Sep 17 00:00:00 2001 From: Zequan Wu Date: Mon, 10 Aug 2020 18:51:09 -0700 Subject: [PATCH] [Sema] Fix missing warning on initializer lists on field initializers with overloaded operators Differential Revision: https://reviews.llvm.org/D85574 --- clang/lib/Sema/SemaDeclCXX.cpp | 4 +++- clang/test/SemaCXX/uninitialized.cpp | 14 ++++++++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/clang/lib/Sema/SemaDeclCXX.cpp b/clang/lib/Sema/SemaDeclCXX.cpp index 057062a7372f..ea3f6786d151 100644 --- a/clang/lib/Sema/SemaDeclCXX.cpp +++ b/clang/lib/Sema/SemaDeclCXX.cpp @@ -3577,8 +3577,10 @@ namespace { Base = SubME->getBase(); } - if (!isa(Base->IgnoreParenImpCasts())) + if (!isa(Base->IgnoreParenImpCasts())) { + Visit(Base); return; + } if (AddressOf && AllPODFields) return; diff --git a/clang/test/SemaCXX/uninitialized.cpp b/clang/test/SemaCXX/uninitialized.cpp index cdfcb2a9cbed..0c7b13a56ee8 100644 --- a/clang/test/SemaCXX/uninitialized.cpp +++ b/clang/test/SemaCXX/uninitialized.cpp @@ -1303,6 +1303,20 @@ namespace init_list { d3{ d3.b, num } // expected-warning{{uninitialized}} {} }; + + struct E { + E(); + E foo(); + E* operator->(); + }; + + struct F { F(E); }; + + struct EFComposed { + F f; + E e; + EFComposed() : f{ e->foo() }, e() {} // expected-warning{{uninitialized}} + }; } namespace template_class {