# compiler: move unions into InternPool · gitcafe/zig

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

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

Visibility: public

Requested revision: ada0010471163a3accca8976185fbb6bb59c914f

Requested commit: ada0010471163a3accca8976185fbb6bb59c914f

Commit: ada0010471163a3accca8976185fbb6bb59c914f

Tree: d5035071ea3cb73677e381c0052e137fded064ac

Author: Andrew Kelley

Committer: Andrew Kelley

## Message

```
compiler: move unions into InternPool

There are a couple concepts here worth understanding:

Key.UnionType - This type is available *before* resolving the union's
fields. The enum tag type, number of fields, and field names, field
types, and field alignments are not available with this.

InternPool.UnionType - This one can be obtained from the above type with
`InternPool.loadUnionType` which asserts that the union's enum tag type
has been resolved. This one has all the information available.

Additionally:

* ZIR: Turn an unused bit into `any_aligned_fields` flag to help
  semantic analysis know whether a union has explicit alignment on any
  fields (usually not).
* Sema: delete `resolveTypeRequiresComptime` which had the same type
  signature and near-duplicate logic to `typeRequiresComptime`.
  - Make opaque types not report comptime-only (this was inconsistent
    between the two implementations of this function).
* Implement accepted proposal #12556 which is a breaking change.

```

## Parents

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

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