about summary refs log tree commit diff
path: root/src/test/ui/const-generics
diff options
context:
space:
mode:
authorlcnr <rust@lcnr.de>2021-12-23 10:01:51 +0100
committerlcnr <rust@lcnr.de>2021-12-23 10:09:35 +0100
commite3f5cc6c38434a7e32e2f52456b8da6eebf013de (patch)
tree3916973e95bca57176243c04d0ff0a29ab83c4cc /src/test/ui/const-generics
parent5aa0239b169e9f45a9b5af1e989821b9b69bc9a2 (diff)
downloadrust-e3f5cc6c38434a7e32e2f52456b8da6eebf013de.tar.gz
rust-e3f5cc6c38434a7e32e2f52456b8da6eebf013de.zip
implement `generic_arg_infer` for array lengths
Diffstat (limited to 'src/test/ui/const-generics')
-rw-r--r--src/test/ui/const-generics/generic_arg_infer/array-in-sig.rs12
-rw-r--r--src/test/ui/const-generics/generic_arg_infer/array-in-sig.stderr9
-rw-r--r--src/test/ui/const-generics/generic_arg_infer/array-repeat-expr.rs13
-rw-r--r--src/test/ui/const-generics/generic_arg_infer/infer-arg-test.rs22
-rw-r--r--src/test/ui/const-generics/generic_arg_infer/infer-arg-test.stderr24
5 files changed, 80 insertions, 0 deletions
diff --git a/src/test/ui/const-generics/generic_arg_infer/array-in-sig.rs b/src/test/ui/const-generics/generic_arg_infer/array-in-sig.rs
new file mode 100644
index 00000000000..56b88a426a1
--- /dev/null
+++ b/src/test/ui/const-generics/generic_arg_infer/array-in-sig.rs
@@ -0,0 +1,12 @@
+// To avoid having to `or` gate `_` as an expr.
+#![feature(generic_arg_infer)]
+
+fn foo() -> [u8; _] {
+    //~^ ERROR the const placeholder `_` is not allowed within types on item signatures for generics
+    // FIXME(generic_arg_infer): this error message should say in the return type or sth like that.
+    [0; 3]
+}
+
+fn main() {
+    foo();
+}
diff --git a/src/test/ui/const-generics/generic_arg_infer/array-in-sig.stderr b/src/test/ui/const-generics/generic_arg_infer/array-in-sig.stderr
new file mode 100644
index 00000000000..eaa12b4192d
--- /dev/null
+++ b/src/test/ui/const-generics/generic_arg_infer/array-in-sig.stderr
@@ -0,0 +1,9 @@
+error[E0121]: the const placeholder `_` is not allowed within types on item signatures for generics
+  --> $DIR/array-in-sig.rs:4:18
+   |
+LL | fn foo() -> [u8; _] {
+   |                  ^ not allowed in type signatures
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0121`.
diff --git a/src/test/ui/const-generics/generic_arg_infer/array-repeat-expr.rs b/src/test/ui/const-generics/generic_arg_infer/array-repeat-expr.rs
new file mode 100644
index 00000000000..d3e53d7a892
--- /dev/null
+++ b/src/test/ui/const-generics/generic_arg_infer/array-repeat-expr.rs
@@ -0,0 +1,13 @@
+// run-pass
+
+// To avoid having to `or` gate `_` as an expr.
+#![feature(generic_arg_infer)]
+
+fn foo() -> [u8; 3] {
+    let x: [u8; _] = [0; _];
+    x
+}
+
+fn main() {
+    assert_eq!([0; _], foo());
+}
diff --git a/src/test/ui/const-generics/generic_arg_infer/infer-arg-test.rs b/src/test/ui/const-generics/generic_arg_infer/infer-arg-test.rs
new file mode 100644
index 00000000000..29aa0f59d74
--- /dev/null
+++ b/src/test/ui/const-generics/generic_arg_infer/infer-arg-test.rs
@@ -0,0 +1,22 @@
+#![feature(generic_arg_infer)]
+
+struct All<'a, T, const N: usize> {
+  v: &'a T,
+}
+
+struct BadInfer<_>;
+//~^ ERROR expected identifier
+//~| ERROR parameter `_` is never used
+
+fn all_fn<'a, T, const N: usize>() {}
+
+fn bad_infer_fn<_>() {}
+//~^ ERROR expected identifier
+
+
+fn main() {
+  let a: All<_, _, _>;
+  all_fn();
+  let v: [u8; _];
+  let v: [u8; 10] = [0; _];
+}
diff --git a/src/test/ui/const-generics/generic_arg_infer/infer-arg-test.stderr b/src/test/ui/const-generics/generic_arg_infer/infer-arg-test.stderr
new file mode 100644
index 00000000000..e6d0c743d01
--- /dev/null
+++ b/src/test/ui/const-generics/generic_arg_infer/infer-arg-test.stderr
@@ -0,0 +1,24 @@
+error: expected identifier, found reserved identifier `_`
+  --> $DIR/infer-arg-test.rs:7:17
+   |
+LL | struct BadInfer<_>;
+   |                 ^ expected identifier, found reserved identifier
+
+error: expected identifier, found reserved identifier `_`
+  --> $DIR/infer-arg-test.rs:13:17
+   |
+LL | fn bad_infer_fn<_>() {}
+   |                 ^ expected identifier, found reserved identifier
+
+error[E0392]: parameter `_` is never used
+  --> $DIR/infer-arg-test.rs:7:17
+   |
+LL | struct BadInfer<_>;
+   |                 ^ unused parameter
+   |
+   = help: consider removing `_`, referring to it in a field, or using a marker such as `PhantomData`
+   = help: if you intended `_` to be a const parameter, use `const _: usize` instead
+
+error: aborting due to 3 previous errors
+
+For more information about this error, try `rustc --explain E0392`.