about summary refs log tree commit diff
diff options
context:
space:
mode:
authorSunjay Varma <varma.sunjay@gmail.com>2017-11-28 23:39:46 -0500
committerSunjay Varma <varma.sunjay@gmail.com>2017-12-01 01:26:29 -0500
commitfdf6c652cecdb09b28cd4701917b9857f7ce0cb7 (patch)
tree493e0d6060736bed07f6efd127c301b983e87fa1
parentdb4408a3ce89551cc89e73d56928a06f67aa1c11 (diff)
Moved all of the tests over to ui and annotated why they are failing with appropriate fixme comments
-rw-r--r--src/test/compile-fail/feature-gate-generic_associated_types.rs4
-rw-r--r--src/test/run-pass/rfc1598-generic-associated-types/whitespace-before-generics.rs35
-rw-r--r--src/test/ui/rfc1598-generic-associated-types/construct_with_other_type.rs (renamed from src/test/run-pass/rfc1598-generic-associated-types/construct_with_other_type.rs)3
-rw-r--r--src/test/ui/rfc1598-generic-associated-types/construct_with_other_type.stderr8
-rw-r--r--src/test/ui/rfc1598-generic-associated-types/generic-associated-types-where.rs (renamed from src/test/run-pass/rfc1598-generic-associated-types/generic-associated-types-where.rs)5
-rw-r--r--src/test/ui/rfc1598-generic-associated-types/generic-associated-types-where.stderr8
-rw-r--r--src/test/ui/rfc1598-generic-associated-types/iterable.rs (renamed from src/test/run-pass/rfc1598-generic-associated-types/iterable.rs)3
-rw-r--r--src/test/ui/rfc1598-generic-associated-types/iterable.stderr8
-rw-r--r--src/test/ui/rfc1598-generic-associated-types/pointer_family.rs (renamed from src/test/run-pass/rfc1598-generic-associated-types/pointer_family.rs)6
-rw-r--r--src/test/ui/rfc1598-generic-associated-types/pointer_family.stderr26
-rw-r--r--src/test/ui/rfc1598-generic-associated-types/streaming_iterator.rs (renamed from src/test/run-pass/rfc1598-generic-associated-types/streaming_iterator.rs)6
-rw-r--r--src/test/ui/rfc1598-generic-associated-types/streaming_iterator.stderr20
12 files changed, 97 insertions, 35 deletions
diff --git a/src/test/compile-fail/feature-gate-generic_associated_types.rs b/src/test/compile-fail/feature-gate-generic_associated_types.rs
index e2643bafd38..724ec2496f2 100644
--- a/src/test/compile-fail/feature-gate-generic_associated_types.rs
+++ b/src/test/compile-fail/feature-gate-generic_associated_types.rs
@@ -12,13 +12,17 @@ use std::ops::Deref;
 
 trait PointerFamily<U> {
     type Pointer<T>: Deref<Target = T>;
+    //~^ ERROR generic associated types are unstable
     type Pointer2<T>: Deref<Target = T> where T: Clone, U: Clone;
+    //~^ ERROR generic associated types are unstable
 }
 
 struct Foo;
 impl PointerFamily<u32> for Foo {
     type Pointer<usize> = Box<usize>;
+    //~^ ERROR generic associated types are unstable
     type Pointer2<u32> = Box<u32>;
+    //~^ ERROR generic associated types are unstable
 }
 
 fn main() {}
diff --git a/src/test/run-pass/rfc1598-generic-associated-types/whitespace-before-generics.rs b/src/test/run-pass/rfc1598-generic-associated-types/whitespace-before-generics.rs
deleted file mode 100644
index 892a925f3d5..00000000000
--- a/src/test/run-pass/rfc1598-generic-associated-types/whitespace-before-generics.rs
+++ /dev/null
@@ -1,35 +0,0 @@
-// Copyright 2012 The Rust Project Developers. See the COPYRIGHT
-// file at the top-level directory of this distribution and at
-// http://rust-lang.org/COPYRIGHT.
-//
-// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
-// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
-// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
-// option. This file may not be copied, modified, or distributed
-// except according to those terms.
-
-#![feature(generic_associated_types)]
-
-// Checking the interaction with this other feature
-#![feature(associated_type_defaults)]
-
-use std::fmt::{Display, Debug};
-
-trait Foo {
-    type Assoc where Self: Sized;
-    type Assoc2 <T >where T: Display;
-    type WithDefault <T> = Iterator <Item=T> where T: Debug;
-    // No generics on this associated type
-    type NoGenerics;
-}
-
-struct Bar;
-
-impl Foo for Bar {
-    type Assoc = usize;
-    type Assoc2 <T> = Vec<T>;
-    type WithDefault<'a, T> = &'a Iterator<T>;
-    type NoGenerics = f64;
-}
-
-fn main() {}
diff --git a/src/test/run-pass/rfc1598-generic-associated-types/construct_with_other_type.rs b/src/test/ui/rfc1598-generic-associated-types/construct_with_other_type.rs
index 81475c6888d..87a0b33e63b 100644
--- a/src/test/run-pass/rfc1598-generic-associated-types/construct_with_other_type.rs
+++ b/src/test/ui/rfc1598-generic-associated-types/construct_with_other_type.rs
@@ -10,6 +10,8 @@
 
 #![feature(generic_associated_types)]
 
+//FIXME(#44265): "undeclared lifetime" errors will be addressed in a follow-up PR
+
 trait Foo {
     type Bar<'a, 'b>;
 }
@@ -20,6 +22,7 @@ trait Baz {
 
 impl<T> Baz for T where T: Foo {
     type Quux<'a> = <T as Foo>::Bar<'a, 'static>;
+    //~^ ERROR undeclared lifetime
 }
 
 fn main() {}
diff --git a/src/test/ui/rfc1598-generic-associated-types/construct_with_other_type.stderr b/src/test/ui/rfc1598-generic-associated-types/construct_with_other_type.stderr
new file mode 100644
index 00000000000..3c3c5d12627
--- /dev/null
+++ b/src/test/ui/rfc1598-generic-associated-types/construct_with_other_type.stderr
@@ -0,0 +1,8 @@
+error[E0261]: use of undeclared lifetime name `'a`
+  --> $DIR/construct_with_other_type.rs:24:37
+   |
+24 |     type Quux<'a> = <T as Foo>::Bar<'a, 'static>;
+   |                                     ^^ undeclared lifetime
+
+error: aborting due to previous error
+
diff --git a/src/test/run-pass/rfc1598-generic-associated-types/generic-associated-types-where.rs b/src/test/ui/rfc1598-generic-associated-types/generic-associated-types-where.rs
index cad8a96b8f0..af580aeccf7 100644
--- a/src/test/run-pass/rfc1598-generic-associated-types/generic-associated-types-where.rs
+++ b/src/test/ui/rfc1598-generic-associated-types/generic-associated-types-where.rs
@@ -13,12 +13,15 @@
 // Checking the interaction with this other feature
 #![feature(associated_type_defaults)]
 
+//FIXME(#44265): "undeclared lifetime" errors will be addressed in a follow-up PR
+
 use std::fmt::{Display, Debug};
 
 trait Foo {
     type Assoc where Self: Sized;
     type Assoc2<T> where T: Display;
     type WithDefault<T> where T: Debug = Iterator<Item=T>;
+    type NoGenerics;
 }
 
 struct Bar;
@@ -27,6 +30,8 @@ impl Foo for Bar {
     type Assoc = usize;
     type Assoc2<T> = Vec<T>;
     type WithDefault<'a, T> = &'a Iterator<T>;
+    //~^ ERROR undeclared lifetime
+    type NoGenerics = ::std::cell::Cell<i32>;
 }
 
 fn main() {}
diff --git a/src/test/ui/rfc1598-generic-associated-types/generic-associated-types-where.stderr b/src/test/ui/rfc1598-generic-associated-types/generic-associated-types-where.stderr
new file mode 100644
index 00000000000..1ffeb36f6ae
--- /dev/null
+++ b/src/test/ui/rfc1598-generic-associated-types/generic-associated-types-where.stderr
@@ -0,0 +1,8 @@
+error[E0261]: use of undeclared lifetime name `'a`
+  --> $DIR/generic-associated-types-where.rs:32:32
+   |
+32 |     type WithDefault<'a, T> = &'a Iterator<T>;
+   |                                ^^ undeclared lifetime
+
+error: aborting due to previous error
+
diff --git a/src/test/run-pass/rfc1598-generic-associated-types/iterable.rs b/src/test/ui/rfc1598-generic-associated-types/iterable.rs
index 40b1d131292..0019c4be5e8 100644
--- a/src/test/run-pass/rfc1598-generic-associated-types/iterable.rs
+++ b/src/test/ui/rfc1598-generic-associated-types/iterable.rs
@@ -10,9 +10,12 @@
 
 #![feature(generic_associated_types)]
 
+//FIXME(#44265): "undeclared lifetime" errors will be addressed in a follow-up PR
+
 trait Iterable {
     type Item<'a>;
     type Iter<'a>: Iterator<Item = Self::Item<'a>>;
+    //~^ ERROR undeclared lifetime
 
     fn iter<'a>(&'a self) -> Self::Iter<'a>;
 }
diff --git a/src/test/ui/rfc1598-generic-associated-types/iterable.stderr b/src/test/ui/rfc1598-generic-associated-types/iterable.stderr
new file mode 100644
index 00000000000..0e565047afe
--- /dev/null
+++ b/src/test/ui/rfc1598-generic-associated-types/iterable.stderr
@@ -0,0 +1,8 @@
+error[E0261]: use of undeclared lifetime name `'a`
+  --> $DIR/iterable.rs:17:47
+   |
+17 |     type Iter<'a>: Iterator<Item = Self::Item<'a>>;
+   |                                               ^^ undeclared lifetime
+
+error: aborting due to previous error
+
diff --git a/src/test/run-pass/rfc1598-generic-associated-types/pointer_family.rs b/src/test/ui/rfc1598-generic-associated-types/pointer_family.rs
index 0d0f1396969..cbeeb1d6ca7 100644
--- a/src/test/run-pass/rfc1598-generic-associated-types/pointer_family.rs
+++ b/src/test/ui/rfc1598-generic-associated-types/pointer_family.rs
@@ -10,6 +10,8 @@
 
 #![feature(generic_associated_types)]
 
+//FIXME(#44265): "type parameter not allowed" errors will be addressed in a follow-up PR
+
 use std::rc::Rc;
 use std::sync::Arc;
 use std::ops::Deref;
@@ -17,6 +19,7 @@ use std::ops::Deref;
 trait PointerFamily {
     type Pointer<T>: Deref<Target = T>;
     fn new<T>(value: T) -> Self::Pointer<T>;
+    //~^ ERROR type parameters are not allowed on this type [E0109]
 }
 
 struct ArcFamily;
@@ -24,6 +27,7 @@ struct ArcFamily;
 impl PointerFamily for ArcFamily {
     type Pointer<T> = Arc<T>;
     fn new<T>(value: T) -> Self::Pointer<T> {
+    //~^ ERROR type parameters are not allowed on this type [E0109]
         Arc::new(value)
     }
 }
@@ -33,12 +37,14 @@ struct RcFamily;
 impl PointerFamily for RcFamily {
     type Pointer<T> = Rc<T>;
     fn new<T>(value: T) -> Self::Pointer<T> {
+    //~^ ERROR type parameters are not allowed on this type [E0109]
         Rc::new(value)
     }
 }
 
 struct Foo<P: PointerFamily> {
     bar: P::Pointer<String>,
+    //~^ ERROR type parameters are not allowed on this type [E0109]
 }
 
 fn main() {}
diff --git a/src/test/ui/rfc1598-generic-associated-types/pointer_family.stderr b/src/test/ui/rfc1598-generic-associated-types/pointer_family.stderr
new file mode 100644
index 00000000000..cc7f06f3b86
--- /dev/null
+++ b/src/test/ui/rfc1598-generic-associated-types/pointer_family.stderr
@@ -0,0 +1,26 @@
+error[E0109]: type parameters are not allowed on this type
+  --> $DIR/pointer_family.rs:46:21
+   |
+46 |     bar: P::Pointer<String>,
+   |                     ^^^^^^ type parameter not allowed
+
+error[E0109]: type parameters are not allowed on this type
+  --> $DIR/pointer_family.rs:21:42
+   |
+21 |     fn new<T>(value: T) -> Self::Pointer<T>;
+   |                                          ^ type parameter not allowed
+
+error[E0109]: type parameters are not allowed on this type
+  --> $DIR/pointer_family.rs:29:42
+   |
+29 |     fn new<T>(value: T) -> Self::Pointer<T> {
+   |                                          ^ type parameter not allowed
+
+error[E0109]: type parameters are not allowed on this type
+  --> $DIR/pointer_family.rs:39:42
+   |
+39 |     fn new<T>(value: T) -> Self::Pointer<T> {
+   |                                          ^ type parameter not allowed
+
+error: aborting due to 4 previous errors
+
diff --git a/src/test/run-pass/rfc1598-generic-associated-types/streaming_iterator.rs b/src/test/ui/rfc1598-generic-associated-types/streaming_iterator.rs
index 58ec14d1075..f9e270ee92e 100644
--- a/src/test/run-pass/rfc1598-generic-associated-types/streaming_iterator.rs
+++ b/src/test/ui/rfc1598-generic-associated-types/streaming_iterator.rs
@@ -10,17 +10,22 @@
 
 #![feature(generic_associated_types)]
 
+//FIXME(#44265): "lifetime parameter not allowed on this type" errors will be addressed in a
+// follow-up PR
+
 use std::fmt::Display;
 
 trait StreamingIterator {
     type Item<'a>;
     // Applying the lifetime parameter `'a` to `Self::Item` inside the trait.
     fn next<'a>(&'a self) -> Option<Self::Item<'a>>;
+    //~^ ERROR lifetime parameters are not allowed on this type [E0110]
 }
 
 struct Foo<T: StreamingIterator> {
     // Applying a concrete lifetime to the constructor outside the trait.
     bar: <T as StreamingIterator>::Item<'static>,
+    //~^ ERROR lifetime parameters are not allowed on this type [E0110]
 }
 
 // Users can bound parameters by the type constructed by that trait's associated type constructor
@@ -28,5 +33,6 @@ struct Foo<T: StreamingIterator> {
 //FIXME(sunjay): This next line should parse and be valid
 //fn foo<T: for<'a> StreamingIterator<Item<'a>=&'a [i32]>>(iter: T) { /* ... */ }
 fn foo<T>(iter: T) where T: StreamingIterator, for<'a> T::Item<'a>: Display { /* ... */ }
+//~^ ERROR lifetime parameters are not allowed on this type [E0110]
 
 fn main() {}
diff --git a/src/test/ui/rfc1598-generic-associated-types/streaming_iterator.stderr b/src/test/ui/rfc1598-generic-associated-types/streaming_iterator.stderr
new file mode 100644
index 00000000000..b1908d022ed
--- /dev/null
+++ b/src/test/ui/rfc1598-generic-associated-types/streaming_iterator.stderr
@@ -0,0 +1,20 @@
+error[E0110]: lifetime parameters are not allowed on this type
+  --> $DIR/streaming_iterator.rs:27:41
+   |
+27 |     bar: <T as StreamingIterator>::Item<'static>,
+   |                                         ^^^^^^^ lifetime parameter not allowed on this type
+
+error[E0110]: lifetime parameters are not allowed on this type
+  --> $DIR/streaming_iterator.rs:35:64
+   |
+35 | fn foo<T>(iter: T) where T: StreamingIterator, for<'a> T::Item<'a>: Display { /* ... */ }
+   |                                                                ^^ lifetime parameter not allowed on this type
+
+error[E0110]: lifetime parameters are not allowed on this type
+  --> $DIR/streaming_iterator.rs:21:48
+   |
+21 |     fn next<'a>(&'a self) -> Option<Self::Item<'a>>;
+   |                                                ^^ lifetime parameter not allowed on this type
+
+error: aborting due to 3 previous errors
+