about summary refs log tree commit diff
diff options
context:
space:
mode:
authorDominik Stolz <d.stolz@tum.de>2021-10-12 21:50:44 +0200
committerDominik Stolz <d.stolz@tum.de>2021-10-12 21:50:44 +0200
commit59b36bcfb5fa50b370869f5073a57d514f59e0c8 (patch)
treea8b7966fe3d8589bc194348882e31cfdda094812
parent8b141a24d05c86b4c074715803f0c29783f8f9bc (diff)
downloadrust-59b36bcfb5fa50b370869f5073a57d514f59e0c8.tar.gz
rust-59b36bcfb5fa50b370869f5073a57d514f59e0c8.zip
Add UI test for the variance of types appearing in consts
-rw-r--r--src/test/ui/variance/variance-associated-consts.rs17
-rw-r--r--src/test/ui/variance/variance-associated-consts.stderr10
2 files changed, 27 insertions, 0 deletions
diff --git a/src/test/ui/variance/variance-associated-consts.rs b/src/test/ui/variance/variance-associated-consts.rs
new file mode 100644
index 00000000000..da55bc96244
--- /dev/null
+++ b/src/test/ui/variance/variance-associated-consts.rs
@@ -0,0 +1,17 @@
+// Test that the variance computation considers types that
+// appear in const expressions to be invariant.
+
+#![feature(rustc_attrs)]
+#![allow(incomplete_features)]
+#![feature(generic_const_exprs)]
+
+trait Trait {
+    const Const: usize;
+}
+
+#[rustc_variance]
+struct Foo<T: Trait> { //~ ERROR [o]
+    field: [u8; <T as Trait>::Const]
+}
+
+fn main() { }
diff --git a/src/test/ui/variance/variance-associated-consts.stderr b/src/test/ui/variance/variance-associated-consts.stderr
new file mode 100644
index 00000000000..d1bf34781df
--- /dev/null
+++ b/src/test/ui/variance/variance-associated-consts.stderr
@@ -0,0 +1,10 @@
+error[E0208]: [o]
+  --> $DIR/variance-associated-consts.rs:13:1
+   |
+LL | / struct Foo<T: Trait> {
+LL | |     field: [u8; <T as Trait>::Const]
+LL | | }
+   | |_^
+
+error: aborting due to previous error
+