https://github.com/cor3ntin created https://github.com/llvm/llvm-project/pull/141342
We did not handle the case where a variable could be initialized by a CXXParenListInitExpr. >From 987c1f567e005e8384d41e75e5f73669bee32c5d Mon Sep 17 00:00:00 2001 From: Corentin Jabot <corentinja...@gmail.com> Date: Sat, 24 May 2025 12:37:02 +0200 Subject: [PATCH] [Clang] Fix a regression introduced by #138518 We did not handle the case where a variable could be initialized by a CXXParenListInitExpr. --- clang/lib/Sema/SemaDecl.cpp | 8 +++++--- clang/test/SemaCXX/paren-list-agg-init.cpp | 22 ++++++++++++++++++++++ 2 files changed, 27 insertions(+), 3 deletions(-) diff --git a/clang/lib/Sema/SemaDecl.cpp b/clang/lib/Sema/SemaDecl.cpp index 90525f386468a..41eb7c797b37d 100644 --- a/clang/lib/Sema/SemaDecl.cpp +++ b/clang/lib/Sema/SemaDecl.cpp @@ -13783,9 +13783,11 @@ void Sema::AddInitializerToDecl(Decl *RealDecl, Expr *Init, bool DirectInit) { VDecl->getLocation(), DirectInit, Init); MultiExprArg Args = Init; - if (CXXDirectInit) - Args = MultiExprArg(CXXDirectInit->getExprs(), - CXXDirectInit->getNumExprs()); + if (auto *CXXDirectInit = dyn_cast<ParenListExpr>(Init)) + Args = MultiExprArg(CXXDirectInit->getExprs(), + CXXDirectInit->getNumExprs()); + else if (auto *CXXDirectInit = dyn_cast<CXXParenListInitExpr>(Init)) + Args = CXXDirectInit->getInitExprs(); // Try to correct any TypoExprs in the initialization arguments. for (size_t Idx = 0; Idx < Args.size(); ++Idx) { diff --git a/clang/test/SemaCXX/paren-list-agg-init.cpp b/clang/test/SemaCXX/paren-list-agg-init.cpp index ba7dffdc1af9f..680fdcdbe7b1c 100644 --- a/clang/test/SemaCXX/paren-list-agg-init.cpp +++ b/clang/test/SemaCXX/paren-list-agg-init.cpp @@ -403,3 +403,25 @@ void test() { S<int>{}.f(); // beforecxx20-note {{requested here}} } } + +namespace GH72880_regression { +struct E { + int i = 42; +}; +struct G { + E e; +}; +template <typename> +struct Test { + void f() { + constexpr E e; + //FIXME: We should only warn one + constexpr G g(e); // beforecxx20-warning 2{{C++20 extension}} + static_assert(g.e.i == 42); + } +}; +void test() { + Test<int>{}.f(); // beforecxx20-note {{requested here}} +} + +} _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits