[clang] [Clang] Fix crash on `void{}` (PR #147514)
via cfe-commits
cfe-commits at lists.llvm.org
Tue Jul 8 05:43:23 PDT 2025
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-clang
Author: Corentin Jabot (cor3ntin)
<details>
<summary>Changes</summary>
Caused by an incorrect assertion.
Fixes #<!-- -->116440
---
Full diff: https://github.com/llvm/llvm-project/pull/147514.diff
2 Files Affected:
- (modified) clang/lib/CodeGen/CGExprScalar.cpp (+3-1)
- (modified) clang/test/CodeGenCXX/cxx0x-initializer-scalars.cpp (+9)
``````````diff
diff --git a/clang/lib/CodeGen/CGExprScalar.cpp b/clang/lib/CodeGen/CGExprScalar.cpp
index fc441dd92d1ee..44931d0481e26 100644
--- a/clang/lib/CodeGen/CGExprScalar.cpp
+++ b/clang/lib/CodeGen/CGExprScalar.cpp
@@ -2114,8 +2114,10 @@ static int getAsInt32(llvm::ConstantInt *C, llvm::Type *I32Ty) {
Value *ScalarExprEmitter::VisitInitListExpr(InitListExpr *E) {
bool Ignore = TestAndClearIgnoreResultAssign();
(void)Ignore;
- assert (Ignore == false && "init list ignored");
unsigned NumInitElements = E->getNumInits();
+ assert(Ignore == false ||
+ (NumInitElements == 0 && E->getType()->isVoidType()) &&
+ "init list ignored");
// HLSL initialization lists in the AST are an expansion which can contain
// side-effecting expressions wrapped in opaque value expressions. To properly
diff --git a/clang/test/CodeGenCXX/cxx0x-initializer-scalars.cpp b/clang/test/CodeGenCXX/cxx0x-initializer-scalars.cpp
index 2f6a6820a7589..478ad40359727 100644
--- a/clang/test/CodeGenCXX/cxx0x-initializer-scalars.cpp
+++ b/clang/test/CodeGenCXX/cxx0x-initializer-scalars.cpp
@@ -5,3 +5,12 @@ void f()
// CHECK: store i32 0
int i{};
}
+
+
+namespace GH116440 {
+void f() {
+ void{};
+ void();
+}
+
+}
``````````
</details>
https://github.com/llvm/llvm-project/pull/147514
More information about the cfe-commits
mailing list