mirror of
https://github.com/rust-lang/rust.git
synced 2024-11-01 06:51:58 +00:00
add test for ICE: !base.layout().is_sized() #123078
Fixes https://github.com/rust-lang/rust/issues/123078
This commit is contained in:
parent
aa1c45908d
commit
5dc7fe473b
17
tests/ui/layout/base-layout-is-sized-ice-123078.rs
Normal file
17
tests/ui/layout/base-layout-is-sized-ice-123078.rs
Normal file
@ -0,0 +1,17 @@
|
||||
// ICE !base.layout().is_sized()
|
||||
// issue: rust-lang/rust#123078
|
||||
|
||||
struct S {
|
||||
a: [u8],
|
||||
//~^ ERROR the size for values of type `[u8]` cannot be known at compilation time
|
||||
b: (),
|
||||
}
|
||||
|
||||
const C: S = unsafe { std::mem::transmute(()) };
|
||||
//~^ ERROR cannot transmute between types of different sizes, or dependently-sized types
|
||||
const _: [(); {
|
||||
C;
|
||||
0
|
||||
}] = [];
|
||||
|
||||
pub fn main() {}
|
31
tests/ui/layout/base-layout-is-sized-ice-123078.stderr
Normal file
31
tests/ui/layout/base-layout-is-sized-ice-123078.stderr
Normal file
@ -0,0 +1,31 @@
|
||||
error[E0277]: the size for values of type `[u8]` cannot be known at compilation time
|
||||
--> $DIR/base-layout-is-sized-ice-123078.rs:5:8
|
||||
|
|
||||
LL | a: [u8],
|
||||
| ^^^^ doesn't have a size known at compile-time
|
||||
|
|
||||
= help: the trait `Sized` is not implemented for `[u8]`
|
||||
= note: only the last field of a struct may have a dynamically sized type
|
||||
= help: change the field's type to have a statically known size
|
||||
help: borrowed types always have a statically known size
|
||||
|
|
||||
LL | a: &[u8],
|
||||
| +
|
||||
help: the `Box` type always has a statically known size and allocates its contents in the heap
|
||||
|
|
||||
LL | a: Box<[u8]>,
|
||||
| ++++ +
|
||||
|
||||
error[E0512]: cannot transmute between types of different sizes, or dependently-sized types
|
||||
--> $DIR/base-layout-is-sized-ice-123078.rs:10:23
|
||||
|
|
||||
LL | const C: S = unsafe { std::mem::transmute(()) };
|
||||
| ^^^^^^^^^^^^^^^^^^^
|
||||
|
|
||||
= note: source type: `()` (0 bits)
|
||||
= note: target type: `S` (this type does not have a fixed size)
|
||||
|
||||
error: aborting due to 2 previous errors
|
||||
|
||||
Some errors have detailed explanations: E0277, E0512.
|
||||
For more information about an error, try `rustc --explain E0277`.
|
Loading…
Reference in New Issue
Block a user