Author: Andy Kaylor Date: 2025-11-19T11:53:19-08:00 New Revision: 56112685f7a25078868b8f09c72feaf4ceae50f9
URL: https://github.com/llvm/llvm-project/commit/56112685f7a25078868b8f09c72feaf4ceae50f9 DIFF: https://github.com/llvm/llvm-project/commit/56112685f7a25078868b8f09c72feaf4ceae50f9.diff LOG: [CIR] Handle default arguments in ctors (#168649) This adds the scalar expression visitor needed to handle default arguments being passed to constructors. Added: Modified: clang/lib/CIR/CodeGen/CIRGenExprScalar.cpp clang/test/CIR/CodeGen/defaultarg.cpp Removed: ################################################################################ diff --git a/clang/lib/CIR/CodeGen/CIRGenExprScalar.cpp b/clang/lib/CIR/CodeGen/CIRGenExprScalar.cpp index fc5a501e6a700..90d661782b929 100644 --- a/clang/lib/CIR/CodeGen/CIRGenExprScalar.cpp +++ b/clang/lib/CIR/CodeGen/CIRGenExprScalar.cpp @@ -711,6 +711,10 @@ class ScalarExprEmitter : public StmtVisitor<ScalarExprEmitter, mlir::Value> { return Visit(e->getSubExpr()); } + mlir::Value VisitCXXDefaultArgExpr(CXXDefaultArgExpr *dae) { + CIRGenFunction::CXXDefaultArgExprScope scope(cgf, dae); + return Visit(dae->getExpr()); + } mlir::Value VisitCXXDefaultInitExpr(CXXDefaultInitExpr *die) { CIRGenFunction::CXXDefaultInitExprScope scope(cgf, die); return Visit(die->getExpr()); diff --git a/clang/test/CIR/CodeGen/defaultarg.cpp b/clang/test/CIR/CodeGen/defaultarg.cpp index 807230bd003f5..29c929ccd7838 100644 --- a/clang/test/CIR/CodeGen/defaultarg.cpp +++ b/clang/test/CIR/CodeGen/defaultarg.cpp @@ -30,3 +30,25 @@ void foo() { // OGCG: %[[TMP0:.*]] = alloca i32 // OGCG: store i32 42, ptr %[[TMP0]] // OGCG: call void @_Z3barRKi(ptr {{.*}} %[[TMP0]]) + +struct S +{ + S(int n = 2); +}; + +void test_ctor_defaultarg() { + S s; +} + +// CIR: cir.func {{.*}} @_Z20test_ctor_defaultargv() +// CIR: %[[S:.*]] = cir.alloca !rec_S, !cir.ptr<!rec_S>, ["s", init] +// CIR: %[[TWO:.*]] = cir.const #cir.int<2> : !s32i +// CIR: cir.call @_ZN1SC1Ei(%[[S]], %[[TWO]]) : (!cir.ptr<!rec_S>, !s32i) -> () + +// LLVM: define{{.*}} @_Z20test_ctor_defaultargv() +// LLVM: %[[S:.*]] = alloca %struct.S +// LLVM: call void @_ZN1SC1Ei(ptr %[[S]], i32 2) + +// OGCG: define{{.*}} @_Z20test_ctor_defaultargv() +// OGCG: %[[S:.*]] = alloca %struct.S +// OGCG: call void @_ZN1SC1Ei(ptr{{.*}} %[[S]], i32 {{.*}} 2) _______________________________________________ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
