# stage2: fixes for error union semantics · gitcafe/zig

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

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

Visibility: public

Requested revision: 3264abe3d8f658e1b7275d2be80e43eddfc098dc

Requested commit: 3264abe3d8f658e1b7275d2be80e43eddfc098dc

Commit: 3264abe3d8f658e1b7275d2be80e43eddfc098dc

Tree: c4cb6d837e163fb19da5591e4cea90684b52e316

Author: Andrew Kelley

Committer: Andrew Kelley

## Message

```
stage2: fixes for error union semantics

 * Sema: avoid unnecessary safety checks when an error set is empty.
 * Sema: make zirErrorToInt handle comptime errors that are represented
   as integers.
 * Sema: make empty error sets properly integrate with
   typeHasOnePossibleValue.
 * Type: correct the ABI alignment and size of error unions which have
   both zero-bit error set and zero-bit payload. The previous code did
   not account for the fact that we still need to store a bit for
   whether there is an error.
 * LLVM: lower error unions possibly with the payload first or with the
   error code first, depending on alignment. Previously it always put
   the error code first and used a padding array.
 * LLVM: lower functions which have an empty error set as the return
   type the same as anyerror, so that they can be used where
   fn()anyerror function pointers are expected. In such functions, Zig
   will lower ret to returning zero instead of void.

As a result, one more behavior test is passing.

```

## Parents

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

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