mirror of
https://github.com/rust-lang/rust.git
synced 2024-11-25 16:24:46 +00:00
Rollup merge of #106201 - estebank:verbose-transparent, r=compiler-errors
Emit fewer errors on invalid `#[repr(transparent)]` on `enum` Fix #68420.
This commit is contained in:
commit
f837da736f
@ -1060,10 +1060,8 @@ pub(super) fn check_transparent<'tcx>(tcx: TyCtxt<'tcx>, adt: ty::AdtDef<'tcx>)
|
||||
|
||||
if adt.variants().len() != 1 {
|
||||
bad_variant_count(tcx, adt, tcx.def_span(adt.did()), adt.did());
|
||||
if adt.variants().is_empty() {
|
||||
// Don't bother checking the fields. No variants (and thus no fields) exist.
|
||||
return;
|
||||
}
|
||||
// Don't bother checking the fields.
|
||||
return;
|
||||
}
|
||||
|
||||
// For each field, figure out if it's known to be a ZST and align(1), with "known"
|
||||
|
10
src/test/ui/repr/transparent-enum-too-many-variants.rs
Normal file
10
src/test/ui/repr/transparent-enum-too-many-variants.rs
Normal file
@ -0,0 +1,10 @@
|
||||
use std::mem::size_of;
|
||||
|
||||
#[repr(transparent)]
|
||||
enum Foo { //~ ERROR E0731
|
||||
A(u8), B(u8),
|
||||
}
|
||||
|
||||
fn main() {
|
||||
println!("Foo: {}", size_of::<Foo>());
|
||||
}
|
11
src/test/ui/repr/transparent-enum-too-many-variants.stderr
Normal file
11
src/test/ui/repr/transparent-enum-too-many-variants.stderr
Normal file
@ -0,0 +1,11 @@
|
||||
error[E0731]: transparent enum needs exactly one variant, but has 2
|
||||
--> $DIR/transparent-enum-too-many-variants.rs:4:1
|
||||
|
|
||||
LL | enum Foo {
|
||||
| ^^^^^^^^ needs exactly one variant, but has 2
|
||||
LL | A(u8), B(u8),
|
||||
| - - too many variants in `Foo`
|
||||
|
||||
error: aborting due to previous error
|
||||
|
||||
For more information about this error, try `rustc --explain E0731`.
|
Loading…
Reference in New Issue
Block a user