Auto merge of #87697 - GuillaumeGomez:add-e0784, r=nagisa

Assign E0784 error code for union expression errors
This commit is contained in:
bors
2021-08-08 16:40:14 +00:00
5 changed files with 51 additions and 12 deletions

View File

@@ -0,0 +1,32 @@
A union expression does not have exactly one field.
Erroneous code example:
```compile_fail,E0784
union Bird {
pigeon: u8,
turtledove: u16,
}
let bird = Bird {}; // error
let bird = Bird { pigeon: 0, turtledove: 1 }; // error
```
The key property of unions is that all fields of a union share common storage.
As a result, writes to one field of a union can overwrite its other fields, and
size of a union is determined by the size of its largest field.
You can find more information about the union types in the [Rust reference].
Working example:
```
union Bird {
pigeon: u8,
turtledove: u16,
}
let bird = Bird { pigeon: 0 }; // OK
```
[Rust reference]: https://doc.rust-lang.org/reference/items/unions.html