[clang] [CIR] Add implicit return zero handling (PR #194490)
Erich Keane via cfe-commits
cfe-commits at lists.llvm.org
Mon Apr 27 16:47:27 PDT 2026
================
@@ -514,6 +514,21 @@ void CIRGenFunction::startFunction(GlobalDecl gd, QualType returnType,
}
emitAndUpdateRetAlloca(returnType, getLoc(bodyEndLoc),
getContext().getTypeAlignInChars(returnType));
+
+ // If this is an implicit-return-zero function, initialize the return
+ // value. This mirrors the implicit-return-zero handling in classic
+ // codegen's EmitFunctionProlog (CGCall.cpp). It is done here, after
+ // emitAndUpdateRetAlloca, because in CIR the return slot is created
+ // after the prolog (the opposite of classic codegen, where ReturnValue
+ // is set up before EmitFunctionProlog runs).
+ // TODO(cir): Align prolog handling with classic codegen.
+ if (fd && fd->hasImplicitReturnZero()) {
+ mlir::Type cirRetTy = convertType(returnType.getUnqualifiedType());
+ mlir::Location bodyBeginMLIRLoc = getLoc(bodyBeginLoc);
----------------
erichkeane wrote:
Silly question: should this be the END of the body? In case it has actual stuff in it?
https://github.com/llvm/llvm-project/pull/194490
More information about the cfe-commits
mailing list