[clang] f70808c - [CIR] Implement CXXDefaultInitExpr for Constants (#164509)
via cfe-commits
cfe-commits at lists.llvm.org
Tue Oct 21 23:43:48 PDT 2025
Author: Amr Hesham
Date: 2025-10-22T08:43:44+02:00
New Revision: f70808c8bfdd7a6048347b2533ccddc34bbb4678
URL: https://github.com/llvm/llvm-project/commit/f70808c8bfdd7a6048347b2533ccddc34bbb4678
DIFF: https://github.com/llvm/llvm-project/commit/f70808c8bfdd7a6048347b2533ccddc34bbb4678.diff
LOG: [CIR] Implement CXXDefaultInitExpr for Constants (#164509)
Implement the CXXDefaultInitExpr for Constants
Added:
Modified:
clang/lib/CIR/CodeGen/CIRGenExprConstant.cpp
clang/test/CIR/CodeGen/struct-init.cpp
Removed:
################################################################################
diff --git a/clang/lib/CIR/CodeGen/CIRGenExprConstant.cpp b/clang/lib/CIR/CodeGen/CIRGenExprConstant.cpp
index 65e6a3915f241..800262aac8fa4 100644
--- a/clang/lib/CIR/CodeGen/CIRGenExprConstant.cpp
+++ b/clang/lib/CIR/CodeGen/CIRGenExprConstant.cpp
@@ -1011,9 +1011,9 @@ class ConstExprEmitter
}
mlir::Attribute VisitCXXDefaultInitExpr(CXXDefaultInitExpr *die, QualType t) {
- cgm.errorNYI(die->getBeginLoc(),
- "ConstExprEmitter::VisitCXXDefaultInitExpr");
- return {};
+ // No need for a DefaultInitExprScope: we don't handle 'this' in a
+ // constant expression.
+ return Visit(die->getExpr(), t);
}
mlir::Attribute VisitExprWithCleanups(ExprWithCleanups *e, QualType t) {
diff --git a/clang/test/CIR/CodeGen/struct-init.cpp b/clang/test/CIR/CodeGen/struct-init.cpp
index 2887e6f404ffc..cb509994d1cbf 100644
--- a/clang/test/CIR/CodeGen/struct-init.cpp
+++ b/clang/test/CIR/CodeGen/struct-init.cpp
@@ -15,6 +15,16 @@ S partial_init = { 1 };
// LLVM: @partial_init = global %struct.S { i32 1, i32 0, i32 0 }
// OGCG: @partial_init = global %struct.S { i32 1, i32 0, i32 0 }
+struct StructWithDefaultInit {
+ int a = 2;
+};
+
+StructWithDefaultInit swdi = {};
+
+// CIR: cir.global external @swdi = #cir.const_record<{#cir.int<2> : !s32i}> : !rec_StructWithDefaultInit
+// LLVM: @swdi = global %struct.StructWithDefaultInit { i32 2 }, align 4
+// OGCG: @swdi = global %struct.StructWithDefaultInit { i32 2 }, align 4
+
void init() {
S s1 = {1, 2, 3};
S s2 = {4, 5};
More information about the cfe-commits
mailing list