about summary refs log tree commit diff
path: root/src/test/ui/const-generics/const_evaluatable_checked
diff options
context:
space:
mode:
authorBastian Kauschke <bastian_kauschke@hotmail.de>2020-11-07 12:37:28 +0100
committerBastian Kauschke <bastian_kauschke@hotmail.de>2020-11-07 12:39:52 +0100
commit439171e094e00e7d3ac0b2d8f65c23cac87836f2 (patch)
tree69ba3c86f6f4079ce146ce3d33b9feddfdb691d3 /src/test/ui/const-generics/const_evaluatable_checked
parent0256d065d4901b63def6c04013da4f781d0752bb (diff)
downloadrust-439171e094e00e7d3ac0b2d8f65c23cac87836f2.tar.gz
rust-439171e094e00e7d3ac0b2d8f65c23cac87836f2.zip
look at assoc ct, check the type of nodes
Diffstat (limited to 'src/test/ui/const-generics/const_evaluatable_checked')
-rw-r--r--src/test/ui/const-generics/const_evaluatable_checked/associated-consts.rs31
-rw-r--r--src/test/ui/const-generics/const_evaluatable_checked/different-fn.rs16
-rw-r--r--src/test/ui/const-generics/const_evaluatable_checked/different-fn.stderr14
3 files changed, 61 insertions, 0 deletions
diff --git a/src/test/ui/const-generics/const_evaluatable_checked/associated-consts.rs b/src/test/ui/const-generics/const_evaluatable_checked/associated-consts.rs
new file mode 100644
index 00000000000..533fe55b45b
--- /dev/null
+++ b/src/test/ui/const-generics/const_evaluatable_checked/associated-consts.rs
@@ -0,0 +1,31 @@
+// run-pass
+#![feature(const_generics, const_evaluatable_checked)]
+#![allow(incomplete_features)]
+
+pub trait BlockCipher {
+    const BLOCK_SIZE: usize;
+}
+
+struct FooCipher;
+impl BlockCipher for FooCipher {
+    const BLOCK_SIZE: usize = 64;
+}
+
+struct BarCipher;
+impl BlockCipher for BarCipher {
+    const BLOCK_SIZE: usize = 32;
+}
+
+pub struct Block<C>(C);
+
+pub fn test<C: BlockCipher, const M: usize>()
+where
+    [u8; M - C::BLOCK_SIZE]: Sized,
+{
+    let _ = [0; M - C::BLOCK_SIZE];
+}
+
+fn main() {
+    test::<FooCipher, 128>();
+    test::<BarCipher, 64>();
+}
diff --git a/src/test/ui/const-generics/const_evaluatable_checked/different-fn.rs b/src/test/ui/const-generics/const_evaluatable_checked/different-fn.rs
new file mode 100644
index 00000000000..05049d9c2a6
--- /dev/null
+++ b/src/test/ui/const-generics/const_evaluatable_checked/different-fn.rs
@@ -0,0 +1,16 @@
+#![feature(const_generics, const_evaluatable_checked)]
+#![allow(incomplete_features)]
+
+use std::mem::size_of;
+use std::marker::PhantomData;
+
+struct Foo<T>(PhantomData<T>);
+
+fn test<T>() -> [u8; size_of::<T>()] {
+    [0; size_of::<Foo<T>>()]
+    //~^ ERROR unconstrained generic constant
+}
+
+fn main() {
+    test::<u32>();
+}
diff --git a/src/test/ui/const-generics/const_evaluatable_checked/different-fn.stderr b/src/test/ui/const-generics/const_evaluatable_checked/different-fn.stderr
new file mode 100644
index 00000000000..1f6dddb04e5
--- /dev/null
+++ b/src/test/ui/const-generics/const_evaluatable_checked/different-fn.stderr
@@ -0,0 +1,14 @@
+error: unconstrained generic constant
+  --> $DIR/different-fn.rs:10:9
+   |
+LL |     [0; size_of::<Foo<T>>()]
+   |         ^^^^^^^^^^^^^^^^^^^
+   |
+help: consider adding a `where` bound for this expression
+  --> $DIR/different-fn.rs:10:9
+   |
+LL |     [0; size_of::<Foo<T>>()]
+   |         ^^^^^^^^^^^^^^^^^^^
+
+error: aborting due to previous error
+