diff options
| author | Alex Rønne Petersen <alex@alexrp.com> | 2025-02-24 08:25:23 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-02-24 08:25:23 +0100 |
| commit | ecc76348e6858f00b920d8dc9e44a6e703d8e497 (patch) | |
| tree | 018e151e85958c8e1b12328865e8b18398956b5e /src/Sema.zig | |
| parent | 76558f8c6b8361ab520ea77e4b4cd2bfc8f688ad (diff) | |
| parent | e11ac026623f8d0f4895cddd6a9bf3c03a866c6d (diff) | |
| download | zig-ecc76348e6858f00b920d8dc9e44a6e703d8e497.tar.gz zig-ecc76348e6858f00b920d8dc9e44a6e703d8e497.zip | |
Merge pull request #22154 from alexrp/disable-intrinsics
compiler: Implement `@disableIntrinsics()` builtin function.
Diffstat (limited to 'src/Sema.zig')
| -rw-r--r-- | src/Sema.zig | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/src/Sema.zig b/src/Sema.zig index 80eb798593..9e729a17ea 100644 --- a/src/Sema.zig +++ b/src/Sema.zig @@ -1409,6 +1409,11 @@ fn analyzeBodyInner( i += 1; continue; }, + .disable_intrinsics => { + try sema.zirDisableIntrinsics(); + i += 1; + continue; + }, .restore_err_ret_index => { try sema.zirRestoreErrRetIndex(block, extended); i += 1; @@ -6642,6 +6647,23 @@ fn zirDisableInstrumentation(sema: *Sema) CompileError!void { sema.allow_memoize = false; } +fn zirDisableIntrinsics(sema: *Sema) CompileError!void { + const pt = sema.pt; + const zcu = pt.zcu; + const ip = &zcu.intern_pool; + const func = switch (sema.owner.unwrap()) { + .func => |func| func, + .@"comptime", + .nav_val, + .nav_ty, + .type, + .memoized_state, + => return, // does nothing outside a function + }; + ip.funcSetDisableIntrinsics(func); + sema.allow_memoize = false; +} + fn zirSetFloatMode(sema: *Sema, block: *Block, extended: Zir.Inst.Extended.InstData) CompileError!void { const extra = sema.code.extraData(Zir.Inst.UnNode, extended.operand).data; const src = block.builtinCallArgSrc(extra.node, 0); |
