about summary refs log tree commit diff
path: root/src/test/ui/const-generics
diff options
context:
space:
mode:
authorBastian Kauschke <bastian_kauschke@hotmail.de>2020-09-10 19:43:53 +0200
committerBastian Kauschke <bastian_kauschke@hotmail.de>2020-09-20 08:22:35 +0200
commit2a00dda90258576e3adf5ecae0437a8fe6fadbcf (patch)
tree76363ded70d38d49b3b250a625a6f586733c30e1 /src/test/ui/const-generics
parent255a4c58f5863ed41c2e68792799125c6c676575 (diff)
downloadrust-2a00dda90258576e3adf5ecae0437a8fe6fadbcf.tar.gz
rust-2a00dda90258576e3adf5ecae0437a8fe6fadbcf.zip
miri: correctly deal with `ConstKind::Bound`
Diffstat (limited to 'src/test/ui/const-generics')
-rw-r--r--src/test/ui/const-generics/issues/issue-73260.rs20
-rw-r--r--src/test/ui/const-generics/issues/issue-73260.stderr29
-rw-r--r--src/test/ui/const-generics/issues/issue-74634.rs27
-rw-r--r--src/test/ui/const-generics/issues/issue-74634.stderr10
4 files changed, 86 insertions, 0 deletions
diff --git a/src/test/ui/const-generics/issues/issue-73260.rs b/src/test/ui/const-generics/issues/issue-73260.rs
new file mode 100644
index 00000000000..351d6849af5
--- /dev/null
+++ b/src/test/ui/const-generics/issues/issue-73260.rs
@@ -0,0 +1,20 @@
+// compile-flags: -Zsave-analysis
+
+#![feature(const_generics)]
+#![allow(incomplete_features)]
+struct Arr<const N: usize>
+where Assert::<{N < usize::max_value() / 2}>: IsTrue, //~ ERROR constant expression
+{
+}
+
+enum Assert<const CHECK: bool> {}
+
+trait IsTrue {}
+
+impl IsTrue for Assert<true> {}
+
+fn main() {
+    let x: Arr<{usize::max_value()}> = Arr {};
+    //~^ ERROR mismatched types
+    //~| ERROR mismatched types
+}
diff --git a/src/test/ui/const-generics/issues/issue-73260.stderr b/src/test/ui/const-generics/issues/issue-73260.stderr
new file mode 100644
index 00000000000..e22612ed5ea
--- /dev/null
+++ b/src/test/ui/const-generics/issues/issue-73260.stderr
@@ -0,0 +1,29 @@
+error: constant expression depends on a generic parameter
+  --> $DIR/issue-73260.rs:6:47
+   |
+LL | where Assert::<{N < usize::max_value() / 2}>: IsTrue,
+   |                                               ^^^^^^
+   |
+   = note: this may fail depending on what value the parameter takes
+
+error[E0308]: mismatched types
+  --> $DIR/issue-73260.rs:17:12
+   |
+LL |     let x: Arr<{usize::max_value()}> = Arr {};
+   |            ^^^^^^^^^^^^^^^^^^^^^^^^^ expected `false`, found `true`
+   |
+   = note: expected type `false`
+              found type `true`
+
+error[E0308]: mismatched types
+  --> $DIR/issue-73260.rs:17:40
+   |
+LL |     let x: Arr<{usize::max_value()}> = Arr {};
+   |                                        ^^^ expected `false`, found `true`
+   |
+   = note: expected type `false`
+              found type `true`
+
+error: aborting due to 3 previous errors
+
+For more information about this error, try `rustc --explain E0308`.
diff --git a/src/test/ui/const-generics/issues/issue-74634.rs b/src/test/ui/const-generics/issues/issue-74634.rs
new file mode 100644
index 00000000000..0f23fa92c36
--- /dev/null
+++ b/src/test/ui/const-generics/issues/issue-74634.rs
@@ -0,0 +1,27 @@
+#![feature(const_generics)]
+#![allow(incomplete_features)]
+
+trait If<const COND: bool> {}
+impl If<true> for () {}
+
+trait IsZero<const N: u8> {
+    type Answer;
+}
+
+struct True;
+struct False;
+
+impl<const N: u8> IsZero<N> for ()
+where (): If<{N == 0}> { //~ERROR constant expression
+    type Answer = True;
+}
+
+trait Foobar<const N: u8> {}
+
+impl<const N: u8> Foobar<N> for ()
+where (): IsZero<N, Answer = True> {}
+
+impl<const N: u8> Foobar<N> for ()
+where (): IsZero<N, Answer = False> {}
+
+fn main() {}
diff --git a/src/test/ui/const-generics/issues/issue-74634.stderr b/src/test/ui/const-generics/issues/issue-74634.stderr
new file mode 100644
index 00000000000..091a1ac7b99
--- /dev/null
+++ b/src/test/ui/const-generics/issues/issue-74634.stderr
@@ -0,0 +1,10 @@
+error: constant expression depends on a generic parameter
+  --> $DIR/issue-74634.rs:15:11
+   |
+LL | where (): If<{N == 0}> {
+   |           ^^^^^^^^^^^^
+   |
+   = note: this may fail depending on what value the parameter takes
+
+error: aborting due to previous error
+