https://github.com/higher-performance created https://github.com/llvm/llvm-project/pull/126553
Fixes #126490 >From 9200ea6649f449b3ecc71d3ee3cd942313d3b86b Mon Sep 17 00:00:00 2001 From: higher-performance <higher.performance.git...@gmail.com> Date: Mon, 10 Feb 2025 12:31:26 -0500 Subject: [PATCH] Fix false positive of [[clang::require_explicit_initialization]] on copy/move constructors Fixes #126490 --- clang/lib/Sema/SemaInit.cpp | 4 +++- clang/test/SemaCXX/uninitialized.cpp | 16 +++++++++++++++- 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/clang/lib/Sema/SemaInit.cpp b/clang/lib/Sema/SemaInit.cpp index 308222a79d920c7..18090eb1c9e9ac9 100644 --- a/clang/lib/Sema/SemaInit.cpp +++ b/clang/lib/Sema/SemaInit.cpp @@ -4576,7 +4576,9 @@ static void TryConstructorInitialization(Sema &S, if (!IsListInit && (Kind.getKind() == InitializationKind::IK_Default || Kind.getKind() == InitializationKind::IK_Direct) && - DestRecordDecl != nullptr && DestRecordDecl->isAggregate() && + DestRecordDecl != nullptr && + !(CtorDecl->isCopyOrMoveConstructor() && CtorDecl->isImplicit()) && + DestRecordDecl->isAggregate() && DestRecordDecl->hasUninitializedExplicitInitFields()) { S.Diag(Kind.getLocation(), diag::warn_field_requires_explicit_init) << /* Var-in-Record */ 1 << DestRecordDecl; diff --git a/clang/test/SemaCXX/uninitialized.cpp b/clang/test/SemaCXX/uninitialized.cpp index 7578b288d7b3fe7..6565bf31e05d72b 100644 --- a/clang/test/SemaCXX/uninitialized.cpp +++ b/clang/test/SemaCXX/uninitialized.cpp @@ -1582,7 +1582,21 @@ void aggregate() { F("___"), F("____") }; - (void)ctors; + + struct Copy { + Embed e; + EmbedDerived ed; + F f; + Copy(const Copy &c) : e(c.e), ed(c.ed), f(c.f) {} // no-error + }; + F copy1(ctors[0]); // no-error + (void)copy1; + F copy2{ctors[0]}; // no-error + (void)copy2; + F copy3 = ctors[0]; // no-error + (void)copy3; + F copy4 = {ctors[0]}; // no-error + (void)copy4; S::foo(S{1, 2, 3, 4}); S::foo(S{.s1 = 100, .s4 = 100}); _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits