[clang] Revert "[Sema] Fix crash on invalid code with parenthesized aggregate initialization" (PR #76272)
Vitaly Buka via cfe-commits
cfe-commits at lists.llvm.org
Fri Dec 22 15:17:55 PST 2023
https://github.com/vitalybuka updated https://github.com/llvm/llvm-project/pull/76272
>From 543b621aae66c572776cf57ba338f2e4daae3382 Mon Sep 17 00:00:00 2001
From: Vitaly Buka <vitalybuka at gmail.com>
Date: Fri, 22 Dec 2023 14:23:46 -0800
Subject: [PATCH] Revert "[Sema] Fix crash on invalid code with parenthesized
aggregate initialization (#76232)"
This reverts commit 86dc6e15f22610bbb53eb4efda0a178ecefc933a and 7ab16fb5207fe187ab999f882069bd632d2e68e5.
---
clang/lib/Sema/SemaInit.cpp | 8 -------
clang/test/SemaCXX/crash-GH76228.cpp | 28 ----------------------
clang/test/SemaCXX/paren-list-agg-init.cpp | 2 +-
3 files changed, 1 insertion(+), 37 deletions(-)
delete mode 100644 clang/test/SemaCXX/crash-GH76228.cpp
diff --git a/clang/lib/Sema/SemaInit.cpp b/clang/lib/Sema/SemaInit.cpp
index cc9db5ded1149a..61d244f3bb9798 100644
--- a/clang/lib/Sema/SemaInit.cpp
+++ b/clang/lib/Sema/SemaInit.cpp
@@ -5512,14 +5512,6 @@ static void TryOrBuildParenListInitialization(
} else if (auto *RT = Entity.getType()->getAs<RecordType>()) {
bool IsUnion = RT->isUnionType();
const CXXRecordDecl *RD = cast<CXXRecordDecl>(RT->getDecl());
- if (RD->isInvalidDecl()) {
- // Exit early to avoid confusion when processing members.
- // We do the same for braced list initialization in
- // `CheckStructUnionTypes`.
- Sequence.SetFailed(
- clang::InitializationSequence::FK_ParenthesizedListInitFailed);
- return;
- }
if (!IsUnion) {
for (const CXXBaseSpecifier &Base : RD->bases()) {
diff --git a/clang/test/SemaCXX/crash-GH76228.cpp b/clang/test/SemaCXX/crash-GH76228.cpp
deleted file mode 100644
index 33a9395823127e..00000000000000
--- a/clang/test/SemaCXX/crash-GH76228.cpp
+++ /dev/null
@@ -1,28 +0,0 @@
-// RUN: %clang_cc1 -std=c++20 -verify %s
-// Check we don't crash on incomplete members and bases when handling parenthesized initialization.
-class incomplete; // expected-note at -0 3 {{forward declaration of 'incomplete'}}
-struct foo {
- int a;
- incomplete b;
- // expected-error at -1 {{incomplete type}}
-};
-foo a1(0);
-
-struct one_int {
- int a;
-};
-struct bar : one_int, incomplete {};
-// expected-error at -1 {{incomplete type}}
-bar a2(0);
-
-incomplete a3[3](1,2,3);
-// expected-error at -1 {{incomplete type}}
-
-struct qux : foo {
-};
-qux a4(0);
-
-struct fred {
- foo a[3];
-};
-fred a5(0);
diff --git a/clang/test/SemaCXX/paren-list-agg-init.cpp b/clang/test/SemaCXX/paren-list-agg-init.cpp
index c1964a5a9eb005..f60b20e0d46568 100644
--- a/clang/test/SemaCXX/paren-list-agg-init.cpp
+++ b/clang/test/SemaCXX/paren-list-agg-init.cpp
@@ -289,7 +289,7 @@ int test() {
// used to crash
S a(0, 1);
S b(0);
- S c(0, 0, 1);
+ S c(0, 0, 1); // beforecxx20-warning {{aggregate initialization of type 'S' from a parenthesized list of values is a C++20 extension}}
S d {0, 1};
S e {0};
More information about the cfe-commits
mailing list