From 83da177dba86eece8b19d55857ad842f92ced30e Mon Sep 17 00:00:00 2001 From: Andy Kaylor Date: Thu, 4 Sep 2025 14:00:31 -0700 Subject: [CIR] Add support for delegating constructor initialization (#156757) This adds support for zero-initialization during delegating constructor processing. Note, this also adds code to skip emitting constructors that are trivial and default to match the classic codegen behavior. The incubator does not skip these constructors, but I have found a case where this results in a call to a default constructor that is never defined. --- clang/lib/CIR/Lowering/DirectToLLVM/LowerToLLVM.cpp | 9 +++++++++ 1 file changed, 9 insertions(+) (limited to 'clang/lib/CIR/Lowering/DirectToLLVM/LowerToLLVM.cpp') diff --git a/clang/lib/CIR/Lowering/DirectToLLVM/LowerToLLVM.cpp b/clang/lib/CIR/Lowering/DirectToLLVM/LowerToLLVM.cpp index 3b76c0981fe8..ee9f58c829ca 100644 --- a/clang/lib/CIR/Lowering/DirectToLLVM/LowerToLLVM.cpp +++ b/clang/lib/CIR/Lowering/DirectToLLVM/LowerToLLVM.cpp @@ -1368,6 +1368,15 @@ mlir::LogicalResult CIRToLLVMConstantOpLowering::matchAndRewrite( rewriter.replaceOp(op, lowerCirAttrAsValue(op, op.getValue(), rewriter, getTypeConverter())); return mlir::success(); + } else if (auto recTy = mlir::dyn_cast(op.getType())) { + if (mlir::isa(attr)) { + mlir::Value initVal = + lowerCirAttrAsValue(op, attr, rewriter, typeConverter); + rewriter.replaceOp(op, initVal); + return mlir::success(); + } + return op.emitError() << "unsupported lowering for record constant type " + << op.getType(); } else if (auto complexTy = mlir::dyn_cast(op.getType())) { mlir::Type complexElemTy = complexTy.getElementType(); mlir::Type complexElemLLVMTy = typeConverter->convertType(complexElemTy); -- cgit v1.2.3