# Prevent analysis of functions only referenced at comptime · gitcafe/zig

[View on GitCafe](https://git.cafe/gitcafe/zig/commit/4976b58ab16069f8d3267b69ed030f29685c1abe)

Repository: [gitcafe/zig](https://git.cafe/gitcafe/zig)

Visibility: public

Requested revision: 4976b58ab16069f8d3267b69ed030f29685c1abe

Requested commit: 4976b58ab16069f8d3267b69ed030f29685c1abe

Commit: 4976b58ab16069f8d3267b69ed030f29685c1abe

Tree: 400f632d11eec4f3c330bee15d59f8fd6219c20f

Author: mlugg

Committer: mlugg

## Message

```
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

```

## Parents

- [b5fad3a40a86eb379903d6a803bdbe66dcaa5487](https://git.cafe/gitcafe/zig/commit/b5fad3a40a86eb379903d6a803bdbe66dcaa5487?format=markdown)

[Source at this commit](https://git.cafe/gitcafe/zig/tree/4976b58ab16069f8d3267b69ed030f29685c1abe?format=markdown)
