about summary refs log tree commit diff
path: root/tests/ui/unsized-locals
diff options
context:
space:
mode:
authorJules Bertholet <julesbertholet@quoi.xyz>2023-05-23 03:01:28 -0400
committerJules Bertholet <julesbertholet@quoi.xyz>2023-05-23 12:46:25 -0400
commit5cd02eaece8cf537054960d0d6db67096e78865d (patch)
treec82eee0279aa5e2c7b2fbe61e8cc6955d01fcd80 /tests/ui/unsized-locals
parent8b4b20836b832e91aa605a2faf5e2a55190202c8 (diff)
downloadrust-5cd02eaece8cf537054960d0d6db67096e78865d.tar.gz
rust-5cd02eaece8cf537054960d0d6db67096e78865d.zip
Always require closure parameters to be `Sized`
The `rust-call` ABI isn't compatible with
`#![feature(unsized_fn_params)]`, so trying to use that feature with
closures leads to an ICE (#67981). This turns that ICE into a
type-check error.
Diffstat (limited to 'tests/ui/unsized-locals')
-rw-r--r--tests/ui/unsized-locals/issue-67981.rs9
-rw-r--r--tests/ui/unsized-locals/issue-67981.stderr15
2 files changed, 24 insertions, 0 deletions
diff --git a/tests/ui/unsized-locals/issue-67981.rs b/tests/ui/unsized-locals/issue-67981.rs
new file mode 100644
index 00000000000..3eb6498e9dc
--- /dev/null
+++ b/tests/ui/unsized-locals/issue-67981.rs
@@ -0,0 +1,9 @@
+#![feature(unsized_fn_params)]
+
+fn main() {
+    let f: fn([u8]) = |_| {};
+    //~^ERROR the size for values of type `[u8]` cannot be known at compilation time
+    let slice: Box<[u8]> = Box::new([1; 8]);
+
+    f(*slice);
+}
diff --git a/tests/ui/unsized-locals/issue-67981.stderr b/tests/ui/unsized-locals/issue-67981.stderr
new file mode 100644
index 00000000000..a4b179ae2fd
--- /dev/null
+++ b/tests/ui/unsized-locals/issue-67981.stderr
@@ -0,0 +1,15 @@
+error[E0277]: the size for values of type `[u8]` cannot be known at compilation time
+  --> $DIR/issue-67981.rs:4:24
+   |
+LL |     let f: fn([u8]) = |_| {};
+   |                        ^ doesn't have a size known at compile-time
+   |
+   = help: the trait `Sized` is not implemented for `[u8]`
+help: function arguments must have a statically known size, borrowed types always have a known size
+   |
+LL |     let f: fn([u8]) = |&_| {};
+   |                        +
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0277`.