mirror of
https://github.com/ziglang/zig.git
synced 2025-12-06 06:13:07 +00:00
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
13 lines
182 B
Zig
13 lines
182 B
Zig
fn entry(x: []i32) i32 {
|
|
return x.*;
|
|
}
|
|
comptime {
|
|
_ = &entry;
|
|
}
|
|
|
|
// error
|
|
// backend=stage2
|
|
// target=native
|
|
//
|
|
// :2:13: error: index syntax required for slice type '[]i32'
|