mirror of
https://github.com/capstone-engine/llvm-capstone.git
synced 2024-11-26 23:21:11 +00:00
"Reapply "[Sema] Fix crash on invalid code with parenthesized aggrega… (#76833)
…te initialization" (#76272)"" With updates the libc++ tests. This reverts commit2205d23
and relands86dc6e1
and7ab16fb
. Original commit was reverted because of failing libc++ tests, see #76232 for the discussion. The errors in the tests are spurious in the first place (coming from initialization of invalid classes), so update the tests to match new behavior that does not show those errors. The original patch was written by @ilya-biryukov To fix the CI two libc++ tests are temporary disabled for clang-18.
This commit is contained in:
parent
848d7af956
commit
02a33b72fd
@ -5512,6 +5512,14 @@ 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()) {
|
||||
|
28
clang/test/SemaCXX/crash-GH76228.cpp
Normal file
28
clang/test/SemaCXX/crash-GH76228.cpp
Normal file
@ -0,0 +1,28 @@
|
||||
// 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@-0 3 {{forward declaration of 'incomplete'}}
|
||||
struct foo {
|
||||
int a;
|
||||
incomplete b;
|
||||
// expected-error@-1 {{incomplete type}}
|
||||
};
|
||||
foo a1(0);
|
||||
|
||||
struct one_int {
|
||||
int a;
|
||||
};
|
||||
struct bar : one_int, incomplete {};
|
||||
// expected-error@-1 {{incomplete type}}
|
||||
bar a2(0);
|
||||
|
||||
incomplete a3[3](1,2,3);
|
||||
// expected-error@-1 {{incomplete type}}
|
||||
|
||||
struct qux : foo {
|
||||
};
|
||||
qux a4(0);
|
||||
|
||||
struct fred {
|
||||
foo a[3];
|
||||
};
|
||||
fred a5(0);
|
@ -289,7 +289,7 @@ int test() {
|
||||
// used to crash
|
||||
S a(0, 1);
|
||||
S b(0);
|
||||
S c(0, 0, 1); // beforecxx20-warning {{aggregate initialization of type 'S' from a parenthesized list of values is a C++20 extension}}
|
||||
S c(0, 0, 1);
|
||||
|
||||
S d {0, 1};
|
||||
S e {0};
|
||||
|
@ -6,6 +6,15 @@
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
// https://github.com/llvm/llvm-project/pull/76232 breaks this libc++ test.
|
||||
// The fix would be to update this file. The issue is that the CI uses 2
|
||||
// versions of Clang-18
|
||||
// - An older nightly build as the main compiler
|
||||
// - A freshly bootstrap build
|
||||
// This means the test can't be used until the nightly build is updated.
|
||||
// TODO(mordante) Reenable clang-18.
|
||||
// UNSUPPORTED: clang-18
|
||||
|
||||
// UNSUPPORTED: c++03, c++11, c++14, c++17, c++20
|
||||
|
||||
// Test the mandates
|
||||
|
@ -6,6 +6,15 @@
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
// https://github.com/llvm/llvm-project/pull/76232 breaks this libc++ test.
|
||||
// The fix would be to update this file. The issue is that the CI uses 2
|
||||
// versions of Clang-18
|
||||
// - An older nightly build as the main compiler
|
||||
// - A freshly bootstrap build
|
||||
// This means the test can't be used until the nightly build is updated.
|
||||
// TODO(mordante) Reenable clang-18.
|
||||
// UNSUPPORTED: clang-18
|
||||
|
||||
// UNSUPPORTED: c++03, c++11, c++14, c++17, c++20
|
||||
|
||||
// Test the mandates
|
||||
|
Loading…
Reference in New Issue
Block a user