about summary refs log tree commit diff
diff options
context:
space:
mode:
authorBastian Kauschke <bastian_kauschke@hotmail.de>2020-11-10 10:55:34 +0100
committerBastian Kauschke <bastian_kauschke@hotmail.de>2020-11-10 12:31:57 +0100
commitf4790ec2b6392972f5ef65ad9afb70ea1937a692 (patch)
tree3058b250623d1433cad7d5d80141c9b817cb999a
parent4b5cd0413095b3ccca2d0c799eeb62d418d42248 (diff)
downloadrust-f4790ec2b6392972f5ef65ad9afb70ea1937a692.tar.gz
rust-f4790ec2b6392972f5ef65ad9afb70ea1937a692.zip
add cross crate test
-rw-r--r--src/test/ui/const-generics/auxiliary/crayte.rs19
-rw-r--r--src/test/ui/const-generics/cross_crate_complex.rs28
2 files changed, 47 insertions, 0 deletions
diff --git a/src/test/ui/const-generics/auxiliary/crayte.rs b/src/test/ui/const-generics/auxiliary/crayte.rs
new file mode 100644
index 00000000000..725005971e1
--- /dev/null
+++ b/src/test/ui/const-generics/auxiliary/crayte.rs
@@ -0,0 +1,19 @@
+// edition:2018
+#![cfg_attr(full, feature(const_generics))]
+#![cfg_attr(full, allow(incomplete_features))]
+#![cfg_attr(min, feature(min_const_generics))]
+
+pub trait Foo<const N: usize> {}
+struct Local;
+impl<const N: usize> Foo<N> for Local {}
+
+pub fn out_foo<const N: usize>() -> impl Foo<N> { Local }
+pub fn in_foo<const N: usize>(_: impl Foo<N>) {}
+
+pub async fn async_simple<const N: usize>(_: [u8; N]) {}
+pub async fn async_out_foo<const N: usize>() -> impl Foo<N> { Local }
+pub async fn async_in_foo<const N: usize>(_: impl Foo<N>) {}
+
+pub trait Bar<const N: usize> {
+    type Assoc: Foo<N>;
+}
diff --git a/src/test/ui/const-generics/cross_crate_complex.rs b/src/test/ui/const-generics/cross_crate_complex.rs
new file mode 100644
index 00000000000..30749b8bc6d
--- /dev/null
+++ b/src/test/ui/const-generics/cross_crate_complex.rs
@@ -0,0 +1,28 @@
+// aux-build:crayte.rs
+// edition:2018
+// run-pass
+// revisions: full min
+
+#![cfg_attr(full, feature(const_generics))]
+#![cfg_attr(full, allow(incomplete_features))]
+#![cfg_attr(min, feature(min_const_generics))]
+extern crate crayte;
+
+use crayte::*;
+
+async fn foo() {
+    in_foo(out_foo::<3>());
+    async_simple([0; 17]).await;
+    async_in_foo(async_out_foo::<4>().await).await;
+}
+
+struct Faz<const N: usize>;
+
+impl<const N: usize> Foo<N> for Faz<N> {}
+impl<const N: usize> Bar<N> for Faz<N> {
+    type Assoc = Faz<N>;
+}
+
+fn main() {
+    let _ = foo;
+}