about summary refs log tree commit diff
diff options
context:
space:
mode:
authorJubilee Young <workingjubilee@gmail.com>2020-04-30 06:28:23 -0700
committerJubilee Young <workingjubilee@gmail.com>2020-04-30 16:02:37 -0700
commitcd4c30940fdbc6755d5e10f2b6f74f6959f1d867 (patch)
tree34b3db51599c74cba31e847f9b6cca8369fe638c
parentbf459752d41a93eb6df0e9513de4ef807883a80c (diff)
downloadrust-cd4c30940fdbc6755d5e10f2b6f74f6959f1d867.tar.gz
rust-cd4c30940fdbc6755d5e10f2b6f74f6959f1d867.zip
Test for zero-sized function items not ICEing
-rw-r--r--src/test/ui/unsized-locals/issue-30276-feature-flagged.rs7
-rw-r--r--src/test/ui/unsized-locals/issue-30276-feature-flagged.stderr14
-rw-r--r--src/test/ui/unsized-locals/issue-30276.rs5
-rw-r--r--src/test/ui/unsized-locals/issue-30276.stderr14
4 files changed, 40 insertions, 0 deletions
diff --git a/src/test/ui/unsized-locals/issue-30276-feature-flagged.rs b/src/test/ui/unsized-locals/issue-30276-feature-flagged.rs
new file mode 100644
index 00000000000..4193210b8bd
--- /dev/null
+++ b/src/test/ui/unsized-locals/issue-30276-feature-flagged.rs
@@ -0,0 +1,7 @@
+#![feature(unsized_locals)]
+
+struct Test([i32]);
+
+fn main() {
+    let _x: fn(_) -> Test = Test;
+} //~^the size for values of type `[i32]` cannot be known at compilation time
diff --git a/src/test/ui/unsized-locals/issue-30276-feature-flagged.stderr b/src/test/ui/unsized-locals/issue-30276-feature-flagged.stderr
new file mode 100644
index 00000000000..35f63a91b2b
--- /dev/null
+++ b/src/test/ui/unsized-locals/issue-30276-feature-flagged.stderr
@@ -0,0 +1,14 @@
+error[E0277]: the size for values of type `[i32]` cannot be known at compilation time
+  --> $DIR/issue-30276-feature-flagged.rs:6:29
+   |
+LL |     let _x: fn(_) -> Test = Test;
+   |                             ^^^^ doesn't have a size known at compile-time
+   |
+   = help: within `Test`, the trait `std::marker::Sized` is not implemented for `[i32]`
+   = note: to learn more, visit <https://doc.rust-lang.org/book/ch19-04-advanced-types.html#dynamically-sized-types-and-the-sized-trait>
+   = note: required because it appears within the type `Test`
+   = note: the return type of a function must have a statically known size
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0277`.
diff --git a/src/test/ui/unsized-locals/issue-30276.rs b/src/test/ui/unsized-locals/issue-30276.rs
new file mode 100644
index 00000000000..9c4bf062a40
--- /dev/null
+++ b/src/test/ui/unsized-locals/issue-30276.rs
@@ -0,0 +1,5 @@
+struct Test([i32]);
+
+fn main() {
+    let _x: fn(_) -> Test = Test;
+} //~^the size for values of type `[i32]` cannot be known at compilation time
diff --git a/src/test/ui/unsized-locals/issue-30276.stderr b/src/test/ui/unsized-locals/issue-30276.stderr
new file mode 100644
index 00000000000..d42fddb3a4a
--- /dev/null
+++ b/src/test/ui/unsized-locals/issue-30276.stderr
@@ -0,0 +1,14 @@
+error[E0277]: the size for values of type `[i32]` cannot be known at compilation time
+  --> $DIR/issue-30276.rs:4:29
+   |
+LL |     let _x: fn(_) -> Test = Test;
+   |                             ^^^^ doesn't have a size known at compile-time
+   |
+   = help: the trait `std::marker::Sized` is not implemented for `[i32]`
+   = note: to learn more, visit <https://doc.rust-lang.org/book/ch19-04-advanced-types.html#dynamically-sized-types-and-the-sized-trait>
+   = note: all function arguments must have a statically known size
+   = help: unsized locals are gated as an unstable feature
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0277`.