# Sema: remove redundant comptime-known initializer tracking · gitcafe/zig

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

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

Visibility: public

Requested revision: a8888afcc07479bf779105f977597b29aea3c28f

Requested commit: a8888afcc07479bf779105f977597b29aea3c28f

Commit: a8888afcc07479bf779105f977597b29aea3c28f

Tree: ad34e4c4b6fd0864ef6bd1cee22c2abb156f9414

Author: mlugg

Committer: mlugg

## Message

```
Sema: remove redundant comptime-known initializer tracking

This logic predates certain Sema enhancements whose behavior it
essentially tries to emulate in one specific case in a problematic way.
In particular, this logic handled initializing comptime-known `const`s
through RLS, which was reworked a few years back in 644041b to not rely
on this logic, and catching runtime fields in comptime-only
initializers, which has since been *correctly* fixed with better checks
in `Sema.storePtr2`. That made the highly complex logic in
`validateStructInit`, `validateUnionInit`, and `zirValidatePtrArrayInit`
entirely redundant. Worse, it was also causing some tracked bugs, as
well as a bug which I have identified and fixed in this PR (a
corresponding behavior test is added).

This commit simplifies union initialization by bringing the runtime
logic more in line with the comptime logic: the tag is now always
populated by `Sema.unionFieldPtr` based on `initializing`, where this
previously happened only in the comptime case (with `validateUnionInit`
instead handling it in the runtime case). Notably, this means that
backends are now able to consider getting a pointer to an inactive union
field as Illegal Behavior, because the `set_union_tag` instruction now
appears *before* the `struct_field_ptr` instruction as you would
probably expect it to.

Resolves: #24520
Resolves: #24595

```

## Parents

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

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