aboutsummaryrefslogtreecommitdiff
path: root/test/cases/compile_errors/noalias_on_non_pointer_param.zig
diff options
context:
space:
mode:
authormlugg <mlugg@mlugg.co.uk>2023-05-29 05:07:17 +0100
committermlugg <mlugg@mlugg.co.uk>2023-05-29 23:06:08 +0100
commit4976b58ab16069f8d3267b69ed030f29685c1abe (patch)
tree400f632d11eec4f3c330bee15d59f8fd6219c20f /test/cases/compile_errors/noalias_on_non_pointer_param.zig
parentb5fad3a40a86eb379903d6a803bdbe66dcaa5487 (diff)
downloadzig-4976b58ab16069f8d3267b69ed030f29685c1abe.tar.gz
zig-4976b58ab16069f8d3267b69ed030f29685c1abe.zip
Prevent analysis of functions only referenced at comptime
The idea here is that there are two ways we can reference a function at runtime: * Through a direct call, i.e. where the function is comptime-known * Through a function pointer This means we can easily perform a form of rudimentary escape analysis on functions. If we ever see a `decl_ref` or `ref` of a function, we have a function pointer, which could "leak" into runtime code, so we emit the function; but for a plain `decl_val`, there's no need to. This change means that `comptime { _ = f; }` no longer forces a function to be emitted, which was used for some things (mainly tests). These use sites have been replaced with `_ = &f;`, which still triggers analysis of the function body, since you're taking a pointer to the function. Resolves: #6256 Resolves: #15353
Diffstat (limited to 'test/cases/compile_errors/noalias_on_non_pointer_param.zig')
-rw-r--r--test/cases/compile_errors/noalias_on_non_pointer_param.zig4
1 files changed, 2 insertions, 2 deletions
diff --git a/test/cases/compile_errors/noalias_on_non_pointer_param.zig b/test/cases/compile_errors/noalias_on_non_pointer_param.zig
index 806808820f..65e6e141ce 100644
--- a/test/cases/compile_errors/noalias_on_non_pointer_param.zig
+++ b/test/cases/compile_errors/noalias_on_non_pointer_param.zig
@@ -2,10 +2,10 @@ fn f(noalias x: i32) void { _ = x; }
export fn entry() void { f(1234); }
fn generic(comptime T: type, noalias _: [*]T, noalias _: [*]const T, _: usize) void {}
-comptime { _ = generic; }
+comptime { _ = &generic; }
fn slice(noalias _: []u8) void {}
-comptime { _ = slice; }
+comptime { _ = &slice; }
// error
// backend=stage2