mirror of
https://github.com/rust-lang/rust.git
synced 2024-11-25 16:24:46 +00:00
Assign E0784 to union expression error
This commit is contained in:
parent
76d247c00a
commit
c364a4e30f
@ -478,6 +478,7 @@ E0780: include_str!("./error_codes/E0780.md"),
|
||||
E0781: include_str!("./error_codes/E0781.md"),
|
||||
E0782: include_str!("./error_codes/E0782.md"),
|
||||
E0783: include_str!("./error_codes/E0783.md"),
|
||||
E0784: include_str!("./error_codes/E0784.md"),
|
||||
;
|
||||
// E0006, // merged with E0005
|
||||
// E0008, // cannot bind by-move into a pattern guard
|
||||
|
32
compiler/rustc_error_codes/src/error_codes/E0784.md
Normal file
32
compiler/rustc_error_codes/src/error_codes/E0784.md
Normal 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
|
@ -1304,7 +1304,13 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
|
||||
// Make sure the programmer specified correct number of fields.
|
||||
if kind_name == "union" {
|
||||
if ast_fields.len() != 1 {
|
||||
tcx.sess.span_err(span, "union expressions should have exactly one field");
|
||||
struct_span_err!(
|
||||
tcx.sess,
|
||||
span,
|
||||
E0784,
|
||||
"union expressions should have exactly one field",
|
||||
)
|
||||
.emit();
|
||||
}
|
||||
} else if check_completeness && !error_happened && !remaining_fields.is_empty() {
|
||||
let no_accessible_remaining_fields = remaining_fields
|
||||
|
Loading…
Reference in New Issue
Block a user