about summary refs log tree commit diff
path: root/tests
diff options
context:
space:
mode:
Diffstat (limited to 'tests')
-rw-r--r--tests/ui/layout/base-layout-is-sized-ice-123078.rs17
-rw-r--r--tests/ui/layout/base-layout-is-sized-ice-123078.stderr31
2 files changed, 48 insertions, 0 deletions
diff --git a/tests/ui/layout/base-layout-is-sized-ice-123078.rs b/tests/ui/layout/base-layout-is-sized-ice-123078.rs
new file mode 100644
index 00000000000..b1c33e15075
--- /dev/null
+++ b/tests/ui/layout/base-layout-is-sized-ice-123078.rs
@@ -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() {}
diff --git a/tests/ui/layout/base-layout-is-sized-ice-123078.stderr b/tests/ui/layout/base-layout-is-sized-ice-123078.stderr
new file mode 100644
index 00000000000..7e0a41a4367
--- /dev/null
+++ b/tests/ui/layout/base-layout-is-sized-ice-123078.stderr
@@ -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`.