aboutsummaryrefslogtreecommitdiff
path: root/src/Sema.zig
diff options
context:
space:
mode:
authorAlex Rønne Petersen <alex@alexrp.com>2025-02-24 08:25:23 +0100
committerGitHub <noreply@github.com>2025-02-24 08:25:23 +0100
commitecc76348e6858f00b920d8dc9e44a6e703d8e497 (patch)
tree018e151e85958c8e1b12328865e8b18398956b5e /src/Sema.zig
parent76558f8c6b8361ab520ea77e4b4cd2bfc8f688ad (diff)
parente11ac026623f8d0f4895cddd6a9bf3c03a866c6d (diff)
downloadzig-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.zig22
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);