about summary refs log tree commit diff
path: root/src/test
diff options
context:
space:
mode:
authorOliver Scherer <github35764891676564198441@oli-obk.de>2019-01-29 16:33:53 +0100
committerOliver Scherer <github35764891676564198441@oli-obk.de>2019-02-01 16:39:50 +0100
commit6f83dcc192e989eba6f4e531f4931ae057e62f9e (patch)
treec45adbff4a5c753d7f4c40fa9d9175ce6be797e9 /src/test
parentcf01b514c876656696e87672a1c118a3ce7817ed (diff)
downloadrust-6f83dcc192e989eba6f4e531f4931ae057e62f9e.tar.gz
rust-6f83dcc192e989eba6f4e531f4931ae057e62f9e.zip
Restrict concrete types to equivalent types
Diffstat (limited to 'src/test')
-rw-r--r--src/test/ui/existential_types/different_defining_uses.rs2
-rw-r--r--src/test/ui/existential_types/different_defining_uses.stderr4
-rw-r--r--src/test/ui/existential_types/different_defining_uses_never_type.rs4
-rw-r--r--src/test/ui/existential_types/different_defining_uses_never_type.stderr8
-rw-r--r--src/test/ui/existential_types/generic_different_defining_uses.rs2
-rw-r--r--src/test/ui/existential_types/generic_different_defining_uses.stderr4
-rw-r--r--src/test/ui/existential_types/generic_duplicate_param_use.rs3
-rw-r--r--src/test/ui/existential_types/generic_duplicate_param_use.stderr17
-rw-r--r--src/test/ui/existential_types/generic_duplicate_param_use2.rs2
-rw-r--r--src/test/ui/existential_types/generic_duplicate_param_use2.stderr11
-rw-r--r--src/test/ui/existential_types/generic_duplicate_param_use3.rs3
-rw-r--r--src/test/ui/existential_types/generic_duplicate_param_use3.stderr28
-rw-r--r--src/test/ui/existential_types/generic_duplicate_param_use4.rs2
-rw-r--r--src/test/ui/existential_types/generic_duplicate_param_use4.stderr11
-rw-r--r--src/test/ui/existential_types/generic_duplicate_param_use5.rs17
-rw-r--r--src/test/ui/existential_types/generic_duplicate_param_use5.stderr19
-rw-r--r--src/test/ui/existential_types/generic_duplicate_param_use6.rs17
-rw-r--r--src/test/ui/existential_types/generic_duplicate_param_use6.stderr19
-rw-r--r--src/test/ui/existential_types/generic_duplicate_param_use7.rs16
19 files changed, 173 insertions, 16 deletions
diff --git a/src/test/ui/existential_types/different_defining_uses.rs b/src/test/ui/existential_types/different_defining_uses.rs
index c51fca75a24..a8670cc07f2 100644
--- a/src/test/ui/existential_types/different_defining_uses.rs
+++ b/src/test/ui/existential_types/different_defining_uses.rs
@@ -9,6 +9,6 @@ fn foo() -> Foo {
     ""
 }
 
-fn bar() -> Foo { //~ ERROR defining existential type use differs from previous
+fn bar() -> Foo { //~ ERROR concrete type differs from previous
     42i32
 }
diff --git a/src/test/ui/existential_types/different_defining_uses.stderr b/src/test/ui/existential_types/different_defining_uses.stderr
index f782a002297..3b3449bbf11 100644
--- a/src/test/ui/existential_types/different_defining_uses.stderr
+++ b/src/test/ui/existential_types/different_defining_uses.stderr
@@ -1,7 +1,7 @@
-error: defining existential type use differs from previous
+error: concrete type differs from previous defining existential type use
   --> $DIR/different_defining_uses.rs:12:1
    |
-LL | / fn bar() -> Foo { //~ ERROR defining existential type use differs from previous
+LL | / fn bar() -> Foo { //~ ERROR concrete type differs from previous
 LL | |     42i32
 LL | | }
    | |_^
diff --git a/src/test/ui/existential_types/different_defining_uses_never_type.rs b/src/test/ui/existential_types/different_defining_uses_never_type.rs
index c6c6ae8d2dc..13ada63e4bc 100644
--- a/src/test/ui/existential_types/different_defining_uses_never_type.rs
+++ b/src/test/ui/existential_types/different_defining_uses_never_type.rs
@@ -9,10 +9,10 @@ fn foo() -> Foo {
     ""
 }
 
-fn bar() -> Foo { //~ ERROR defining existential type use differs from previous
+fn bar() -> Foo { //~ ERROR concrete type differs from previous
     panic!()
 }
 
-fn boo() -> Foo { //~ ERROR defining existential type use differs from previous
+fn boo() -> Foo { //~ ERROR concrete type differs from previous
     loop {}
 }
diff --git a/src/test/ui/existential_types/different_defining_uses_never_type.stderr b/src/test/ui/existential_types/different_defining_uses_never_type.stderr
index 04b0cf27784..161111e3379 100644
--- a/src/test/ui/existential_types/different_defining_uses_never_type.stderr
+++ b/src/test/ui/existential_types/different_defining_uses_never_type.stderr
@@ -1,7 +1,7 @@
-error: defining existential type use differs from previous
+error: concrete type differs from previous defining existential type use
   --> $DIR/different_defining_uses_never_type.rs:12:1
    |
-LL | / fn bar() -> Foo { //~ ERROR defining existential type use differs from previous
+LL | / fn bar() -> Foo { //~ ERROR concrete type differs from previous
 LL | |     panic!()
 LL | | }
    | |_^
@@ -14,10 +14,10 @@ LL | |     ""
 LL | | }
    | |_^
 
-error: defining existential type use differs from previous
+error: concrete type differs from previous defining existential type use
   --> $DIR/different_defining_uses_never_type.rs:16:1
    |
-LL | / fn boo() -> Foo { //~ ERROR defining existential type use differs from previous
+LL | / fn boo() -> Foo { //~ ERROR concrete type differs from previous
 LL | |     loop {}
 LL | | }
    | |_^
diff --git a/src/test/ui/existential_types/generic_different_defining_uses.rs b/src/test/ui/existential_types/generic_different_defining_uses.rs
index 3bd104251fb..ce3ab88a1c0 100644
--- a/src/test/ui/existential_types/generic_different_defining_uses.rs
+++ b/src/test/ui/existential_types/generic_different_defining_uses.rs
@@ -8,6 +8,6 @@ fn my_iter<T>(t: T) -> MyIter<T> {
     std::iter::once(t)
 }
 
-fn my_iter2<T>(t: T) -> MyIter<T> { //~ ERROR defining existential type use differs from previous
+fn my_iter2<T>(t: T) -> MyIter<T> { //~ ERROR concrete type differs from previous
     Some(t).into_iter()
 }
diff --git a/src/test/ui/existential_types/generic_different_defining_uses.stderr b/src/test/ui/existential_types/generic_different_defining_uses.stderr
index 234bcf232ae..89f70a873d9 100644
--- a/src/test/ui/existential_types/generic_different_defining_uses.stderr
+++ b/src/test/ui/existential_types/generic_different_defining_uses.stderr
@@ -1,7 +1,7 @@
-error: defining existential type use differs from previous
+error: concrete type differs from previous defining existential type use
   --> $DIR/generic_different_defining_uses.rs:11:1
    |
-LL | / fn my_iter2<T>(t: T) -> MyIter<T> { //~ ERROR defining existential type use differs from previous
+LL | / fn my_iter2<T>(t: T) -> MyIter<T> { //~ ERROR concrete type differs from previous
 LL | |     Some(t).into_iter()
 LL | | }
    | |_^
diff --git a/src/test/ui/existential_types/generic_duplicate_param_use.rs b/src/test/ui/existential_types/generic_duplicate_param_use.rs
index d08cd88c600..3f8753333aa 100644
--- a/src/test/ui/existential_types/generic_duplicate_param_use.rs
+++ b/src/test/ui/existential_types/generic_duplicate_param_use.rs
@@ -1,4 +1,3 @@
-// compile-pass
 #![feature(existential_type)]
 
 use std::fmt::Debug;
@@ -7,7 +6,9 @@ fn main() {}
 
 // test that unused generic parameters are ok
 existential type Two<T, U>: Debug;
+//~^ could not find defining uses
 
 fn one<T: Debug>(t: T) -> Two<T, T> {
+//~^ ERROR defining existential type use restricts existential type
     t
 }
diff --git a/src/test/ui/existential_types/generic_duplicate_param_use.stderr b/src/test/ui/existential_types/generic_duplicate_param_use.stderr
new file mode 100644
index 00000000000..d4deda999da
--- /dev/null
+++ b/src/test/ui/existential_types/generic_duplicate_param_use.stderr
@@ -0,0 +1,17 @@
+error: defining existential type use restricts existential type by using the generic parameter `T` twice
+  --> $DIR/generic_duplicate_param_use.rs:11:1
+   |
+LL | / fn one<T: Debug>(t: T) -> Two<T, T> {
+LL | | //~^ ERROR defining existential type use restricts existential type
+LL | |     t
+LL | | }
+   | |_^
+
+error: could not find defining uses
+  --> $DIR/generic_duplicate_param_use.rs:8:1
+   |
+LL | existential type Two<T, U>: Debug;
+   | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+error: aborting due to 2 previous errors
+
diff --git a/src/test/ui/existential_types/generic_duplicate_param_use2.rs b/src/test/ui/existential_types/generic_duplicate_param_use2.rs
index c27fbb74cf1..3842292decd 100644
--- a/src/test/ui/existential_types/generic_duplicate_param_use2.rs
+++ b/src/test/ui/existential_types/generic_duplicate_param_use2.rs
@@ -1,4 +1,3 @@
-// compile-pass
 #![feature(existential_type)]
 
 use std::fmt::Debug;
@@ -9,6 +8,7 @@ fn main() {}
 existential type Two<T, U>: Debug;
 
 fn one<T: Debug>(t: T) -> Two<T, T> {
+//~^ defining existential type use restricts existential type
     t
 }
 
diff --git a/src/test/ui/existential_types/generic_duplicate_param_use2.stderr b/src/test/ui/existential_types/generic_duplicate_param_use2.stderr
new file mode 100644
index 00000000000..0a8be3218c7
--- /dev/null
+++ b/src/test/ui/existential_types/generic_duplicate_param_use2.stderr
@@ -0,0 +1,11 @@
+error: defining existential type use restricts existential type by using the generic parameter `T` twice
+  --> $DIR/generic_duplicate_param_use2.rs:10:1
+   |
+LL | / fn one<T: Debug>(t: T) -> Two<T, T> {
+LL | | //~^ defining existential type use restricts existential type
+LL | |     t
+LL | | }
+   | |_^
+
+error: aborting due to previous error
+
diff --git a/src/test/ui/existential_types/generic_duplicate_param_use3.rs b/src/test/ui/existential_types/generic_duplicate_param_use3.rs
index b4d1b26dbab..05c77c89473 100644
--- a/src/test/ui/existential_types/generic_duplicate_param_use3.rs
+++ b/src/test/ui/existential_types/generic_duplicate_param_use3.rs
@@ -1,4 +1,3 @@
-// compile-pass
 #![feature(existential_type)]
 
 use std::fmt::Debug;
@@ -9,6 +8,7 @@ fn main() {}
 existential type Two<T, U>: Debug;
 
 fn one<T: Debug>(t: T) -> Two<T, T> {
+//~^ defining existential type use restricts existential type
     t
 }
 
@@ -17,5 +17,6 @@ fn two<T: Debug, U>(t: T, _: U) -> Two<T, U> {
 }
 
 fn three<T, U: Debug>(_: T, u: U) -> Two<T, U> {
+//~^ concrete type's generic parameters differ from previous defining use
     u
 }
diff --git a/src/test/ui/existential_types/generic_duplicate_param_use3.stderr b/src/test/ui/existential_types/generic_duplicate_param_use3.stderr
new file mode 100644
index 00000000000..8f860e7ee0a
--- /dev/null
+++ b/src/test/ui/existential_types/generic_duplicate_param_use3.stderr
@@ -0,0 +1,28 @@
+error: defining existential type use restricts existential type by using the generic parameter `T` twice
+  --> $DIR/generic_duplicate_param_use3.rs:10:1
+   |
+LL | / fn one<T: Debug>(t: T) -> Two<T, T> {
+LL | | //~^ defining existential type use restricts existential type
+LL | |     t
+LL | | }
+   | |_^
+
+error: concrete type's generic parameters differ from previous defining use
+  --> $DIR/generic_duplicate_param_use3.rs:19:1
+   |
+LL | / fn three<T, U: Debug>(_: T, u: U) -> Two<T, U> {
+LL | | //~^ concrete type's generic parameters differ from previous defining use
+LL | |     u
+LL | | }
+   | |_^
+   |
+note: previous use here
+  --> $DIR/generic_duplicate_param_use3.rs:15:1
+   |
+LL | / fn two<T: Debug, U>(t: T, _: U) -> Two<T, U> {
+LL | |     t
+LL | | }
+   | |_^
+
+error: aborting due to 2 previous errors
+
diff --git a/src/test/ui/existential_types/generic_duplicate_param_use4.rs b/src/test/ui/existential_types/generic_duplicate_param_use4.rs
index afab86c3ff0..609dbe06cd7 100644
--- a/src/test/ui/existential_types/generic_duplicate_param_use4.rs
+++ b/src/test/ui/existential_types/generic_duplicate_param_use4.rs
@@ -1,4 +1,3 @@
-// compile-pass
 #![feature(existential_type)]
 
 use std::fmt::Debug;
@@ -9,6 +8,7 @@ fn main() {}
 existential type Two<T, U>: Debug;
 
 fn one<T: Debug>(t: T) -> Two<T, T> {
+//~^ ERROR defining existential type use restricts existential type
     t
 }
 
diff --git a/src/test/ui/existential_types/generic_duplicate_param_use4.stderr b/src/test/ui/existential_types/generic_duplicate_param_use4.stderr
new file mode 100644
index 00000000000..24b1caf7c1b
--- /dev/null
+++ b/src/test/ui/existential_types/generic_duplicate_param_use4.stderr
@@ -0,0 +1,11 @@
+error: defining existential type use restricts existential type by using the generic parameter `T` twice
+  --> $DIR/generic_duplicate_param_use4.rs:10:1
+   |
+LL | / fn one<T: Debug>(t: T) -> Two<T, T> {
+LL | | //~^ ERROR defining existential type use restricts existential type
+LL | |     t
+LL | | }
+   | |_^
+
+error: aborting due to previous error
+
diff --git a/src/test/ui/existential_types/generic_duplicate_param_use5.rs b/src/test/ui/existential_types/generic_duplicate_param_use5.rs
new file mode 100644
index 00000000000..3f4a23b8b41
--- /dev/null
+++ b/src/test/ui/existential_types/generic_duplicate_param_use5.rs
@@ -0,0 +1,17 @@
+#![feature(existential_type)]
+
+use std::fmt::Debug;
+
+fn main() {}
+
+// test that unused generic parameters are ok
+existential type Two<T, U>: Debug;
+
+fn two<T: Debug, U: Debug>(t: T, u: U) -> Two<T, U> {
+    (t, u)
+}
+
+fn three<T: Debug, U: Debug>(t: T, u: U) -> Two<T, U> {
+//~^ concrete type differs from previous
+    (u, t)
+}
diff --git a/src/test/ui/existential_types/generic_duplicate_param_use5.stderr b/src/test/ui/existential_types/generic_duplicate_param_use5.stderr
new file mode 100644
index 00000000000..52befb9c2e1
--- /dev/null
+++ b/src/test/ui/existential_types/generic_duplicate_param_use5.stderr
@@ -0,0 +1,19 @@
+error: concrete type differs from previous defining existential type use
+  --> $DIR/generic_duplicate_param_use5.rs:14:1
+   |
+LL | / fn three<T: Debug, U: Debug>(t: T, u: U) -> Two<T, U> {
+LL | | //~^ concrete type differs from previous
+LL | |     (u, t)
+LL | | }
+   | |_^
+   |
+note: previous use here
+  --> $DIR/generic_duplicate_param_use5.rs:10:1
+   |
+LL | / fn two<T: Debug, U: Debug>(t: T, u: U) -> Two<T, U> {
+LL | |     (t, u)
+LL | | }
+   | |_^
+
+error: aborting due to previous error
+
diff --git a/src/test/ui/existential_types/generic_duplicate_param_use6.rs b/src/test/ui/existential_types/generic_duplicate_param_use6.rs
new file mode 100644
index 00000000000..3b8c56352bd
--- /dev/null
+++ b/src/test/ui/existential_types/generic_duplicate_param_use6.rs
@@ -0,0 +1,17 @@
+#![feature(existential_type)]
+
+use std::fmt::Debug;
+
+fn main() {}
+
+// test that unused generic parameters are ok
+existential type Two<T, U>: Debug;
+
+fn two<T: Debug, U: Debug>(t: T, u: U) -> Two<T, U> {
+    (t, t)
+}
+
+fn three<T: Debug, U: Debug>(t: T, u: U) -> Two<T, U> {
+//~^ concrete type differs from previous
+    (u, t)
+}
diff --git a/src/test/ui/existential_types/generic_duplicate_param_use6.stderr b/src/test/ui/existential_types/generic_duplicate_param_use6.stderr
new file mode 100644
index 00000000000..2bf1d0c05e6
--- /dev/null
+++ b/src/test/ui/existential_types/generic_duplicate_param_use6.stderr
@@ -0,0 +1,19 @@
+error: concrete type differs from previous defining existential type use
+  --> $DIR/generic_duplicate_param_use6.rs:14:1
+   |
+LL | / fn three<T: Debug, U: Debug>(t: T, u: U) -> Two<T, U> {
+LL | | //~^ concrete type differs from previous
+LL | |     (u, t)
+LL | | }
+   | |_^
+   |
+note: previous use here
+  --> $DIR/generic_duplicate_param_use6.rs:10:1
+   |
+LL | / fn two<T: Debug, U: Debug>(t: T, u: U) -> Two<T, U> {
+LL | |     (t, t)
+LL | | }
+   | |_^
+
+error: aborting due to previous error
+
diff --git a/src/test/ui/existential_types/generic_duplicate_param_use7.rs b/src/test/ui/existential_types/generic_duplicate_param_use7.rs
new file mode 100644
index 00000000000..3906b85aadb
--- /dev/null
+++ b/src/test/ui/existential_types/generic_duplicate_param_use7.rs
@@ -0,0 +1,16 @@
+// compile-pass
+#![feature(existential_type)]
+
+use std::fmt::Debug;
+
+fn main() {}
+
+existential type Two<A, B>: Debug;
+
+fn two<T: Debug + Copy, U>(t: T, u: U) -> Two<T, U> {
+    (t, t)
+}
+
+fn three<T: Debug, U>(t: T, t2: T, u: U) -> Two<T, U> {
+    (t, t2)
+}