[clang] [clang] Fix clang++ crash on assertions when compiling source (PR #70594)
Rajveer Singh Bharadwaj via cfe-commits
cfe-commits at lists.llvm.org
Sun Oct 29 06:14:22 PDT 2023
https://github.com/Rajveer100 created https://github.com/llvm/llvm-project/pull/70594
Resolves Issue #35603
This change makes the `assertion` less strict in `debug` builds by stripping qualifiers from the base class and ignoring them. I hope `weakened` assertions don't affect other cases where such `errors` are intended to be `caught` by the compiler.
>From 6c5fda81d4d9c5cda677cb84fffaa8bf5c2bb6ac Mon Sep 17 00:00:00 2001
From: Rajveer <rajveer.developer at icloud.com>
Date: Sun, 29 Oct 2023 18:37:17 +0530
Subject: [PATCH] [clang] Fix clang++ crash on assertions when compiling source
Resolves Issue #35603
---
clang/lib/AST/ExprConstant.cpp | 2 +-
clang/test/Sema/assertion-crash.cpp | 19 +++++++++++++++++++
2 files changed, 20 insertions(+), 1 deletion(-)
create mode 100644 clang/test/Sema/assertion-crash.cpp
diff --git a/clang/lib/AST/ExprConstant.cpp b/clang/lib/AST/ExprConstant.cpp
index 5947805f9576ff8..07f0a12385b46e9 100644
--- a/clang/lib/AST/ExprConstant.cpp
+++ b/clang/lib/AST/ExprConstant.cpp
@@ -6431,7 +6431,7 @@ static bool HandleConstructorCall(const Expr *E, const LValue &This,
// Non-virtual base classes are initialized in the order in the class
// definition. We have already checked for virtual base classes.
assert(!BaseIt->isVirtual() && "virtual base for literal type");
- assert(Info.Ctx.hasSameType(BaseIt->getType(), BaseType) &&
+ assert(Info.Ctx.hasSameUnqualifiedType(BaseIt->getType(), BaseType) &&
"base class initializers not in expected order");
++BaseIt;
#endif
diff --git a/clang/test/Sema/assertion-crash.cpp b/clang/test/Sema/assertion-crash.cpp
new file mode 100644
index 000000000000000..853552108ec2b67
--- /dev/null
+++ b/clang/test/Sema/assertion-crash.cpp
@@ -0,0 +1,19 @@
+// RUN: %clang_cc1 -fsyntax-only -std=c++11 %s -verify
+// RUN: %clang_cc1 -fsyntax-only -std=c++23 %s -verify
+
+// expected-no-diagnostics
+
+struct A {};
+using CA = const A;
+
+struct S1 : CA {
+ constexpr S1() : CA() {}
+};
+
+struct S2 : A {
+ constexpr S2() : CA() {}
+};
+
+struct S3 : CA {
+ constexpr S3() : A() {}
+};
More information about the cfe-commits
mailing list