diff options
| author | r00ster91 <r00ster91@proton.me> | 2023-03-03 18:35:03 +0100 |
|---|---|---|
| committer | r00ster91 <r00ster91@proton.me> | 2023-03-04 12:08:19 +0100 |
| commit | 65368683ad92b858d0a391cb29d37c0476784b40 (patch) | |
| tree | 741bea50bb76c77683a4c48d02f8ee63bd35c1e0 /src/arch/wasm/CodeGen.zig | |
| parent | d6bd00e85500fa1a7909695ae5943be438f7521d (diff) | |
| download | zig-65368683ad92b858d0a391cb29d37c0476784b40.tar.gz zig-65368683ad92b858d0a391cb29d37c0476784b40.zip | |
add @trap builtin
This introduces a new builtin function that compiles down to something that results in an illegal instruction exception/interrupt.
It can be used to exit a program abnormally.
This implements the builtin for all backends.
Diffstat (limited to 'src/arch/wasm/CodeGen.zig')
| -rw-r--r-- | src/arch/wasm/CodeGen.zig | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/src/arch/wasm/CodeGen.zig b/src/arch/wasm/CodeGen.zig index 2f191fd834..d388bc8fab 100644 --- a/src/arch/wasm/CodeGen.zig +++ b/src/arch/wasm/CodeGen.zig @@ -1829,6 +1829,7 @@ fn genInst(func: *CodeGen, inst: Air.Inst.Index) InnerError!void { .arg => func.airArg(inst), .bitcast => func.airBitcast(inst), .block => func.airBlock(inst), + .trap => func.airTrap(inst), .breakpoint => func.airBreakpoint(inst), .br => func.airBr(inst), .bool_to_int => func.airBoolToInt(inst), @@ -3289,6 +3290,11 @@ fn airNot(func: *CodeGen, inst: Air.Inst.Index) InnerError!void { func.finishAir(inst, result, &.{ty_op.operand}); } +fn airTrap(func: *CodeGen, inst: Air.Inst.Index) InnerError!void { + try func.addTag(.@"unreachable"); + func.finishAir(inst, .none, &.{}); +} + fn airBreakpoint(func: *CodeGen, inst: Air.Inst.Index) InnerError!void { // unsupported by wasm itfunc. Can be implemented once we support DWARF // for wasm |
