diff options
| author | Samuel Tardieu <sam@rfc1149.net> | 2025-08-23 22:22:22 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-08-23 22:22:22 +0200 |
| commit | 4d38062da118ec2e832f6d4b0700b4b62d65efda (patch) | |
| tree | b389ff03dedc16f6c171adb56249bdef36a9ef7a /tests | |
| parent | a1cdd14062908617689d75851c187029e340d865 (diff) | |
| parent | 323e23005a6a2025508e6064a0f88dae09cfa127 (diff) | |
| download | rust-4d38062da118ec2e832f6d4b0700b4b62d65efda.tar.gz rust-4d38062da118ec2e832f6d4b0700b4b62d65efda.zip | |
Rollup merge of #145791 - samueltardieu:fix-zst-to-enum-mir-validation, r=compiler-errors
Fix ICE when validating transmuting ZST to inhabited enum MIR validation attempts to determine the number of bytes needed to represent the size of the source type to compute the discriminant for the inhabited target enum. For a ZST source, there is no source data to use as a discriminant so no proper runtime check can be generated. Since that should never be possible, insert a delayed bug to ensure the problem has been properly reported to the user by the type checker. Fixes rust-lang/rust#145786
Diffstat (limited to 'tests')
| -rw-r--r-- | tests/ui/mir/validate/ice-zst-as-discr-145786.rs | 14 | ||||
| -rw-r--r-- | tests/ui/mir/validate/ice-zst-as-discr-145786.stderr | 12 |
2 files changed, 26 insertions, 0 deletions
diff --git a/tests/ui/mir/validate/ice-zst-as-discr-145786.rs b/tests/ui/mir/validate/ice-zst-as-discr-145786.rs new file mode 100644 index 00000000000..616736bcf12 --- /dev/null +++ b/tests/ui/mir/validate/ice-zst-as-discr-145786.rs @@ -0,0 +1,14 @@ +// Do not attempt to take the discriminant as the source +// converted to a `u128`, that won't work for ZST. +// +//@ compile-flags: -Zvalidate-mir + +enum A { + B, + C, +} + +fn main() { + let _: A = unsafe { std::mem::transmute(()) }; + //~^ ERROR cannot transmute between types of different sizes, or dependently-sized types +} diff --git a/tests/ui/mir/validate/ice-zst-as-discr-145786.stderr b/tests/ui/mir/validate/ice-zst-as-discr-145786.stderr new file mode 100644 index 00000000000..b0bca1eb39c --- /dev/null +++ b/tests/ui/mir/validate/ice-zst-as-discr-145786.stderr @@ -0,0 +1,12 @@ +error[E0512]: cannot transmute between types of different sizes, or dependently-sized types + --> $DIR/ice-zst-as-discr-145786.rs:12:25 + | +LL | let _: A = unsafe { std::mem::transmute(()) }; + | ^^^^^^^^^^^^^^^^^^^ + | + = note: source type: `()` (0 bits) + = note: target type: `A` (8 bits) + +error: aborting due to 1 previous error + +For more information about this error, try `rustc --explain E0512`. |
