authorgravatar for jacobly@ziglang.orgJacob Young <jacobly@ziglang.org> 2023-04-30 21:13:29-04:00
committergravatar for jacobly@ziglang.orgJacob Young <jacobly@ziglang.org> 2023-05-01 19:22:52-04:00
log0489a63a432b31ce0fd9d6ec6c8e2fb72a920573
treebd0436c79234fa936eb1b2f60edfa8f26433bd90
parent19bd7d12b0186f0e45c77c564251d6355966b2ef

Sema: use trap for backends that don't support panic_fn

Debuggers also catch trap, but the code is not allowed to continue.

1 files changed, 3 insertions(+), 6 deletions(-)

src/Sema.zig+3-6
...@@ -23287,8 +23287,7 @@ fn panicWithMsg(...@@ -23287,8 +23287,7 @@ fn panicWithMsg(
23287 const arena = sema.arena;23287 const arena = sema.arena;
2328823288
23289 if (!mod.backendSupportsFeature(.panic_fn)) {23289 if (!mod.backendSupportsFeature(.panic_fn)) {
23290 _ = try block.addNoOp(.breakpoint);23290 _ = try block.addNoOp(.trap);
23291 _ = try block.addNoOp(.unreach);
23292 return;23291 return;
23293 }23292 }
23294 const panic_fn = try sema.getBuiltin("panic");23293 const panic_fn = try sema.getBuiltin("panic");
...@@ -23336,8 +23335,7 @@ fn panicUnwrapError(...@@ -23336,8 +23335,7 @@ fn panicUnwrapError(
2333623335
23337 {23336 {
23338 if (!sema.mod.backendSupportsFeature(.panic_unwrap_error)) {23337 if (!sema.mod.backendSupportsFeature(.panic_unwrap_error)) {
23339 _ = try fail_block.addNoOp(.breakpoint);23338 _ = try fail_block.addNoOp(.trap);
23340 _ = try fail_block.addNoOp(.unreach);
23341 } else {23339 } else {
23342 const panic_fn = try sema.getBuiltin("panicUnwrapError");23340 const panic_fn = try sema.getBuiltin("panicUnwrapError");
23343 const err = try fail_block.addTyOp(unwrap_err_tag, Type.anyerror, operand);23341 const err = try fail_block.addTyOp(unwrap_err_tag, Type.anyerror, operand);
...@@ -23462,8 +23460,7 @@ fn safetyCheckFormatted(...@@ -23462,8 +23460,7 @@ fn safetyCheckFormatted(
23462 defer fail_block.instructions.deinit(gpa);23460 defer fail_block.instructions.deinit(gpa);
2346323461
23464 if (!sema.mod.backendSupportsFeature(.safety_check_formatted)) {23462 if (!sema.mod.backendSupportsFeature(.safety_check_formatted)) {
23465 _ = try fail_block.addNoOp(.breakpoint);23463 _ = try fail_block.addNoOp(.trap);
23466 _ = try fail_block.addNoOp(.unreach);
23467 } else {23464 } else {
23468 const panic_fn = try sema.getBuiltin(func);23465 const panic_fn = try sema.getBuiltin(func);
23469 _ = try sema.analyzeCall(&fail_block, panic_fn, sema.src, sema.src, .auto, false, args, null);23466 _ = try sema.analyzeCall(&fail_block, panic_fn, sema.src, sema.src, .auto, false, args, null);