# backport copy elision changes · gitcafe/zig

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

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

Visibility: public

Requested revision: 581edd643fb18a66c472f77e2f8cd3f4cea524a2

Requested commit: 581edd643fb18a66c472f77e2f8cd3f4cea524a2

Commit: 581edd643fb18a66c472f77e2f8cd3f4cea524a2

Tree: a03f6a3ade952729456b94584f21d4beb51a4802

Author: Andrew Kelley

Committer: Andrew Kelley

## Message

```
backport copy elision changes

This commit contains everything from the copy-elision-2
branch that does not have to do with copy elision directly,
but is generally useful for master branch.

 * All const values know their parents, when applicable, not
   just structs and unions.
 * Null pointers in const values are represented explicitly,
   rather than as a HardCodedAddr value of 0.
 * Rename "maybe" to "optional" in various code locations.
 * Separate DeclVarSrc and DeclVarGen
 * Separate PtrCastSrc and PtrCastGen
 * Separate CmpxchgSrc and CmpxchgGen
 * Represent optional error set as an integer, using the 0 value.
   In a const value, it uses nullptr.
 * Introduce type_has_one_possible_value and use it where applicable.
 * Fix debug builds not setting memory to 0xaa when storing
   undefined.
 * Separate the type of a variable from the const value of a variable.
 * Use copy_const_val where appropriate.
 * Rearrange structs to pack data more efficiently.
 * Move test/cases/* to test/behavior/*
 * Use `std.debug.assertOrPanic` in behavior tests instead of
   `std.debug.assert`.
 * Fix outdated slice syntax in docs.

```

## Parents

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

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