zequanwu created this revision. zequanwu added a reviewer: rtrieu. Herald added a project: clang. Herald added a subscriber: cfe-commits. zequanwu requested review of this revision.
Repository: rG LLVM Github Monorepo https://reviews.llvm.org/D85574 Files: clang/lib/Sema/SemaDeclCXX.cpp clang/test/SemaCXX/uninitialized.cpp Index: clang/test/SemaCXX/uninitialized.cpp =================================================================== --- clang/test/SemaCXX/uninitialized.cpp +++ clang/test/SemaCXX/uninitialized.cpp @@ -1303,6 +1303,20 @@ 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 { Index: clang/lib/Sema/SemaDeclCXX.cpp =================================================================== --- clang/lib/Sema/SemaDeclCXX.cpp +++ clang/lib/Sema/SemaDeclCXX.cpp @@ -3575,6 +3575,10 @@ AllPODFields = false; Base = SubME->getBase(); + + if (CXXOperatorCallExpr *COCE = dyn_cast<CXXOperatorCallExpr>(Base)) + if (COCE->getNumArgs() > 0) + Base = COCE->getArg(0); } if (!isa<CXXThisExpr>(Base->IgnoreParenImpCasts()))
Index: clang/test/SemaCXX/uninitialized.cpp =================================================================== --- clang/test/SemaCXX/uninitialized.cpp +++ clang/test/SemaCXX/uninitialized.cpp @@ -1303,6 +1303,20 @@ 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 { Index: clang/lib/Sema/SemaDeclCXX.cpp =================================================================== --- clang/lib/Sema/SemaDeclCXX.cpp +++ clang/lib/Sema/SemaDeclCXX.cpp @@ -3575,6 +3575,10 @@ AllPODFields = false; Base = SubME->getBase(); + + if (CXXOperatorCallExpr *COCE = dyn_cast<CXXOperatorCallExpr>(Base)) + if (COCE->getNumArgs() > 0) + Base = COCE->getArg(0); } if (!isa<CXXThisExpr>(Base->IgnoreParenImpCasts()))
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits