From b8c9d5ae98e7a8ff9b8fbaa53f5800281a61c048 Mon Sep 17 00:00:00 2001 From: Jacob Young Date: Sat, 5 Aug 2023 00:54:06 -0400 Subject: [PATCH] cbe: don't emit traps in naked functions Closes #16680 --- src/codegen/c.zig | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/codegen/c.zig b/src/codegen/c.zig index a11cd92827..39b4165635 100644 --- a/src/codegen/c.zig +++ b/src/codegen/c.zig @@ -2835,7 +2835,7 @@ fn genBodyInner(f: *Function, body: []const Air.Inst.Index) error{ AnalysisFail, .arg => try airArg(f, inst), - .trap => try airTrap(f.object.writer()), + .trap => try airTrap(f, f.object.writer()), .breakpoint => try airBreakpoint(f.object.writer()), .ret_addr => try airRetAddr(f, inst), .frame_addr => try airFrameAddress(f, inst), @@ -4591,7 +4591,11 @@ fn bitcast(f: *Function, dest_ty: Type, operand: CValue, operand_ty: Type) !Loca }; } -fn airTrap(writer: anytype) !CValue { +fn airTrap(f: *Function, writer: anytype) !CValue { + const mod = f.object.dg.module; + // Not even allowed to call trap in a naked function. + if (f.object.dg.decl) |decl| if (decl.ty.fnCallingConvention(mod) == .Naked) return .none; + try writer.writeAll("zig_trap();\n"); return .none; }