@@ -1592,18 +1592,21 @@ RValue CIRGenFunction::emitBuiltinExpr(const GlobalDecl GD, unsigned BuiltinID,
15921592 llvm_unreachable (" BI__builtin_wmemcmp NYI" );
15931593 case Builtin::BI__builtin_dwarf_cfa:
15941594 llvm_unreachable (" BI__builtin_dwarf_cfa NYI" );
1595- case Builtin::BI__builtin_return_address: {
1595+ case Builtin::BI__builtin_return_address:
1596+ case Builtin::BI__builtin_frame_address: {
15961597 mlir::Location loc = getLoc (E->getExprLoc ());
15971598 mlir::Attribute levelAttr = ConstantEmitter (*this ).emitAbstract (
15981599 E->getArg (0 ), E->getArg (0 )->getType ());
15991600 int64_t level = mlir::cast<cir::IntAttr>(levelAttr).getSInt ();
16001601 return RValue::get (builder.create <cir::FuncAddrBuiltinOp>(
1601- loc, cir::FuncAddrKind::return_address, builder.getUInt32 (level, loc)));
1602+ loc,
1603+ BuiltinID == Builtin::BI__builtin_return_address
1604+ ? cir::FuncAddrKind::return_address
1605+ : cir::FuncAddrKind::frame_address,
1606+ builder.getUInt32 (level, loc)));
16021607 }
16031608 case Builtin::BI_ReturnAddress:
16041609 llvm_unreachable (" BI_ReturnAddress NYI" );
1605- case Builtin::BI__builtin_frame_address:
1606- llvm_unreachable (" BI__builtin_frame_address NYI" );
16071610 case Builtin::BI__builtin_extract_return_addr:
16081611 llvm_unreachable (" BI__builtin_extract_return_addr NYI" );
16091612 case Builtin::BI__builtin_frob_return_addr:
0 commit comments