about summary refs log tree commit diff
path: root/tests/ui/layout
diff options
context:
space:
mode:
authorFedericoBruzzone <federico.bruzzone.i@gmail.com>2025-01-06 11:39:07 +0100
committerFedericoBruzzone <federico.bruzzone.i@gmail.com>2025-01-27 00:37:34 +0100
commitcef97bce7b2a0e6ef2208aaa1ec267b800d646af (patch)
tree3bc712129173e067edf350690dac3b3ade8f2f63 /tests/ui/layout
parent15c6f7e1a3a0e51c9b18ce5b9a391e0c324b751c (diff)
downloadrust-cef97bce7b2a0e6ef2208aaa1ec267b800d646af.tar.gz
rust-cef97bce7b2a0e6ef2208aaa1ec267b800d646af.zip
Add `TooGeneric` variant to `LayoutError` and emit `Unknown` one
- `check-pass` test for a MRE of #135020
- fail test for #135138
- switch to `TooGeneric` for checking CMSE fn signatures
- switch to `TooGeneric` for compute `SizeSkeleton` (for transmute)
- fix broken tests
Diffstat (limited to 'tests/ui/layout')
-rw-r--r--tests/ui/layout/base-layout-is-sized-ice-123078.rs1
-rw-r--r--tests/ui/layout/base-layout-is-sized-ice-123078.stderr14
-rw-r--r--tests/ui/layout/invalid-unsized-const-eval.rs1
-rw-r--r--tests/ui/layout/invalid-unsized-const-eval.stderr11
-rw-r--r--tests/ui/layout/invalid-unsized-in-always-sized-tail.stderr18
-rw-r--r--tests/ui/layout/issue-unsized-tail-restatic-ice-122488.rs1
-rw-r--r--tests/ui/layout/issue-unsized-tail-restatic-ice-122488.stderr11
-rw-r--r--tests/ui/layout/uncomputable-due-to-trivial-bounds-ice-135138.rs11
-rw-r--r--tests/ui/layout/uncomputable-due-to-trivial-bounds-ice-135138.stderr9
-rw-r--r--tests/ui/layout/unexpected-unsized-field-issue-135020.rs7
-rw-r--r--tests/ui/layout/unknown-when-no-type-parameter.rs14
-rw-r--r--tests/ui/layout/unknown-when-no-type-parameter.stderr16
-rw-r--r--tests/ui/layout/unknown-when-ptr-metadata-is-DST.rs12
-rw-r--r--tests/ui/layout/unknown-when-ptr-metadata-is-DST.stderr9
14 files changed, 127 insertions, 8 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
index 15f11145f84..b1c33e15075 100644
--- a/tests/ui/layout/base-layout-is-sized-ice-123078.rs
+++ b/tests/ui/layout/base-layout-is-sized-ice-123078.rs
@@ -8,6 +8,7 @@ struct S {
 }
 
 const C: S = unsafe { std::mem::transmute(()) };
+//~^ ERROR cannot transmute between types of different sizes, or dependently-sized types
 const _: [(); {
     C;
     0
diff --git a/tests/ui/layout/base-layout-is-sized-ice-123078.stderr b/tests/ui/layout/base-layout-is-sized-ice-123078.stderr
index 9181368533a..d8743d4e6d6 100644
--- a/tests/ui/layout/base-layout-is-sized-ice-123078.stderr
+++ b/tests/ui/layout/base-layout-is-sized-ice-123078.stderr
@@ -16,6 +16,16 @@ help: the `Box` type always has a statically known size and allocates its conten
 LL |     a: Box<[u8]>,
    |        ++++    +
 
-error: aborting due to 1 previous error
+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` (the type `S` has an unknown layout)
+
+error: aborting due to 2 previous errors
 
-For more information about this error, try `rustc --explain E0277`.
+Some errors have detailed explanations: E0277, E0512.
+For more information about an error, try `rustc --explain E0277`.
diff --git a/tests/ui/layout/invalid-unsized-const-eval.rs b/tests/ui/layout/invalid-unsized-const-eval.rs
index 2dec0b0faac..1f664d30055 100644
--- a/tests/ui/layout/invalid-unsized-const-eval.rs
+++ b/tests/ui/layout/invalid-unsized-const-eval.rs
@@ -10,5 +10,6 @@ struct LazyLock {
 }
 
 static EMPTY_SET: LazyLock = todo!();
+//~^ ERROR could not evaluate static initializer
 
 fn main() {}
diff --git a/tests/ui/layout/invalid-unsized-const-eval.stderr b/tests/ui/layout/invalid-unsized-const-eval.stderr
index bf65782b7a8..a434ca9b2c7 100644
--- a/tests/ui/layout/invalid-unsized-const-eval.stderr
+++ b/tests/ui/layout/invalid-unsized-const-eval.stderr
@@ -7,6 +7,13 @@ LL |     data: (dyn Sync, ()),
    = help: the trait `Sized` is not implemented for `(dyn Sync + 'static)`
    = note: only the last element of a tuple may have a dynamically sized type
 
-error: aborting due to 1 previous error
+error[E0080]: could not evaluate static initializer
+  --> $DIR/invalid-unsized-const-eval.rs:12:1
+   |
+LL | static EMPTY_SET: LazyLock = todo!();
+   | ^^^^^^^^^^^^^^^^^^^^^^^^^^ the type `(dyn Sync, ())` has an unknown layout
+
+error: aborting due to 2 previous errors
 
-For more information about this error, try `rustc --explain E0277`.
+Some errors have detailed explanations: E0080, E0277.
+For more information about an error, try `rustc --explain E0080`.
diff --git a/tests/ui/layout/invalid-unsized-in-always-sized-tail.stderr b/tests/ui/layout/invalid-unsized-in-always-sized-tail.stderr
index 3f565d6ee5b..f54e97e2a5c 100644
--- a/tests/ui/layout/invalid-unsized-in-always-sized-tail.stderr
+++ b/tests/ui/layout/invalid-unsized-in-always-sized-tail.stderr
@@ -18,6 +18,20 @@ LL | struct MySlice<T>(T);
    |                |
    |                this could be changed to `T: ?Sized`...
 
-error: aborting due to 1 previous error
+error[E0080]: could not evaluate static initializer
+  --> $SRC_DIR/core/src/mem/mod.rs:LL:COL
+   |
+   = note: the type `MySlice<[bool]>` has an unknown layout
+   |
+note: inside `align_of::<P2>`
+  --> $SRC_DIR/core/src/mem/mod.rs:LL:COL
+note: inside `CHECK`
+  --> $DIR/invalid-unsized-in-always-sized-tail.rs:15:28
+   |
+LL | static CHECK: () = assert!(align_of::<P2>() == 1);
+   |                            ^^^^^^^^^^^^^^^^
+
+error: aborting due to 2 previous errors
 
-For more information about this error, try `rustc --explain E0277`.
+Some errors have detailed explanations: E0080, E0277.
+For more information about an error, try `rustc --explain E0080`.
diff --git a/tests/ui/layout/issue-unsized-tail-restatic-ice-122488.rs b/tests/ui/layout/issue-unsized-tail-restatic-ice-122488.rs
index 96c993035ef..f84c10d8e5c 100644
--- a/tests/ui/layout/issue-unsized-tail-restatic-ice-122488.rs
+++ b/tests/ui/layout/issue-unsized-tail-restatic-ice-122488.rs
@@ -6,5 +6,6 @@ struct ArenaSet<U: Deref, V: ?Sized = <U as Deref>::Target>(V, U);
 //~^ ERROR the size for values of type `V` cannot be known at compilation time
 
 const DATA: *const ArenaSet<Vec<u8>> = std::ptr::null_mut();
+//~^ ERROR evaluation of constant value failed
 
 pub fn main() {}
diff --git a/tests/ui/layout/issue-unsized-tail-restatic-ice-122488.stderr b/tests/ui/layout/issue-unsized-tail-restatic-ice-122488.stderr
index f39cb29868a..220951fab86 100644
--- a/tests/ui/layout/issue-unsized-tail-restatic-ice-122488.stderr
+++ b/tests/ui/layout/issue-unsized-tail-restatic-ice-122488.stderr
@@ -22,6 +22,13 @@ help: the `Box` type always has a statically known size and allocates its conten
 LL | struct ArenaSet<U: Deref, V: ?Sized = <U as Deref>::Target>(Box<V>, U);
    |                                                             ++++ +
 
-error: aborting due to 1 previous error
+error[E0080]: evaluation of constant value failed
+  --> $DIR/issue-unsized-tail-restatic-ice-122488.rs:8:1
+   |
+LL | const DATA: *const ArenaSet<Vec<u8>> = std::ptr::null_mut();
+   | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the type `ArenaSet<Vec<u8>, [u8]>` has an unknown layout
+
+error: aborting due to 2 previous errors
 
-For more information about this error, try `rustc --explain E0277`.
+Some errors have detailed explanations: E0080, E0277.
+For more information about an error, try `rustc --explain E0080`.
diff --git a/tests/ui/layout/uncomputable-due-to-trivial-bounds-ice-135138.rs b/tests/ui/layout/uncomputable-due-to-trivial-bounds-ice-135138.rs
new file mode 100644
index 00000000000..91280e49dcd
--- /dev/null
+++ b/tests/ui/layout/uncomputable-due-to-trivial-bounds-ice-135138.rs
@@ -0,0 +1,11 @@
+#![feature(trivial_bounds)]
+
+fn return_str()
+where
+    str: Sized,
+{
+    [(); { let _a: Option<str> = None; 0 }];
+    //~^ ERROR evaluation of constant value failed
+}
+
+fn main() {}
diff --git a/tests/ui/layout/uncomputable-due-to-trivial-bounds-ice-135138.stderr b/tests/ui/layout/uncomputable-due-to-trivial-bounds-ice-135138.stderr
new file mode 100644
index 00000000000..6c7c51db8df
--- /dev/null
+++ b/tests/ui/layout/uncomputable-due-to-trivial-bounds-ice-135138.stderr
@@ -0,0 +1,9 @@
+error[E0080]: evaluation of constant value failed
+  --> $DIR/uncomputable-due-to-trivial-bounds-ice-135138.rs:7:16
+   |
+LL |     [(); { let _a: Option<str> = None; 0 }];
+   |                ^^ the type `Option<str>` has an unknown layout
+
+error: aborting due to 1 previous error
+
+For more information about this error, try `rustc --explain E0080`.
diff --git a/tests/ui/layout/unexpected-unsized-field-issue-135020.rs b/tests/ui/layout/unexpected-unsized-field-issue-135020.rs
new file mode 100644
index 00000000000..c81d037e510
--- /dev/null
+++ b/tests/ui/layout/unexpected-unsized-field-issue-135020.rs
@@ -0,0 +1,7 @@
+//@ check-pass
+
+fn problem_thingy(items: &mut impl Iterator<Item = str>) {
+    items.peekable();
+}
+
+fn main() {}
diff --git a/tests/ui/layout/unknown-when-no-type-parameter.rs b/tests/ui/layout/unknown-when-no-type-parameter.rs
new file mode 100644
index 00000000000..94c32cf262f
--- /dev/null
+++ b/tests/ui/layout/unknown-when-no-type-parameter.rs
@@ -0,0 +1,14 @@
+#![feature(trivial_bounds)]
+
+//@ error-pattern: error[E0080]: evaluation of constant value failed
+//@ error-pattern: the type `<() as Project>::Assoc` has an unknown layout
+
+trait Project {
+    type Assoc;
+}
+
+fn foo() where (): Project {
+    [(); size_of::<<() as Project>::Assoc>()];
+}
+
+fn main() {}
diff --git a/tests/ui/layout/unknown-when-no-type-parameter.stderr b/tests/ui/layout/unknown-when-no-type-parameter.stderr
new file mode 100644
index 00000000000..d0456e2b329
--- /dev/null
+++ b/tests/ui/layout/unknown-when-no-type-parameter.stderr
@@ -0,0 +1,16 @@
+error[E0080]: evaluation of constant value failed
+  --> $SRC_DIR/core/src/mem/mod.rs:LL:COL
+   |
+   = note: the type `<() as Project>::Assoc` has an unknown layout
+   |
+note: inside `std::mem::size_of::<<() as Project>::Assoc>`
+  --> $SRC_DIR/core/src/mem/mod.rs:LL:COL
+note: inside `foo::{constant#0}`
+  --> $DIR/unknown-when-no-type-parameter.rs:11:10
+   |
+LL |     [(); size_of::<<() as Project>::Assoc>()];
+   |          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+error: aborting due to 1 previous error
+
+For more information about this error, try `rustc --explain E0080`.
diff --git a/tests/ui/layout/unknown-when-ptr-metadata-is-DST.rs b/tests/ui/layout/unknown-when-ptr-metadata-is-DST.rs
new file mode 100644
index 00000000000..973235fe65a
--- /dev/null
+++ b/tests/ui/layout/unknown-when-ptr-metadata-is-DST.rs
@@ -0,0 +1,12 @@
+#![feature(ptr_metadata)]
+#![feature(trivial_bounds)]
+
+fn return_str()
+where
+    str: std::ptr::Pointee<Metadata = str>,
+{
+    [(); { let _a: Option<&str> = None; 0 }];
+    //~^ ERROR evaluation of constant value failed
+}
+
+fn main() {}
diff --git a/tests/ui/layout/unknown-when-ptr-metadata-is-DST.stderr b/tests/ui/layout/unknown-when-ptr-metadata-is-DST.stderr
new file mode 100644
index 00000000000..68bba2e9678
--- /dev/null
+++ b/tests/ui/layout/unknown-when-ptr-metadata-is-DST.stderr
@@ -0,0 +1,9 @@
+error[E0080]: evaluation of constant value failed
+  --> $DIR/unknown-when-ptr-metadata-is-DST.rs:8:16
+   |
+LL |     [(); { let _a: Option<&str> = None; 0 }];
+   |                ^^ the type `str` has an unknown layout
+
+error: aborting due to 1 previous error
+
+For more information about this error, try `rustc --explain E0080`.