about summary refs log tree commit diff
diff options
context:
space:
mode:
authorMatthew Jasper <mjjasper1@gmail.com>2019-12-08 17:22:35 +0000
committerMatthew Jasper <mjjasper1@gmail.com>2019-12-21 12:35:28 +0000
commitc2687985b0e15a954ca0459acfbfd08a14f93eb0 (patch)
tree061cdf7ca13ad4cd6920f921b111f9e313b0e2ee
parent0a5c91c1293bcc0ece70c9bde849eb619fd6a64f (diff)
downloadrust-c2687985b0e15a954ca0459acfbfd08a14f93eb0.tar.gz
rust-c2687985b0e15a954ca0459acfbfd08a14f93eb0.zip
Update tests for GATs
* Make some run-pass or check-pass
* Use `#![allow(incomplete_features)]`
* Update FIXMEs now that some of the issues have been addressed
* Add regression tests
-rw-r--r--src/test/ui/feature-gates/feature-gate-generic_associated_types.rs2
-rw-r--r--src/test/ui/feature-gates/feature-gate-generic_associated_types.stderr30
-rw-r--r--src/test/ui/generic-associated-types/collections.rs (renamed from src/test/ui/rfc1598-generic-associated-types/collections.rs)12
-rw-r--r--src/test/ui/generic-associated-types/collections.stderr19
-rw-r--r--src/test/ui/generic-associated-types/construct_with_other_type.rs26
-rw-r--r--src/test/ui/generic-associated-types/construct_with_other_type.stderr13
-rw-r--r--src/test/ui/generic-associated-types/empty_generics.rs (renamed from src/test/ui/rfc1598-generic-associated-types/empty_generics.rs)2
-rw-r--r--src/test/ui/generic-associated-types/empty_generics.stderr8
-rw-r--r--src/test/ui/generic-associated-types/gat-dont-ice-on-absent-feature-2.rs17
-rw-r--r--src/test/ui/generic-associated-types/gat-dont-ice-on-absent-feature-2.stderr29
-rw-r--r--src/test/ui/generic-associated-types/gat-dont-ice-on-absent-feature.rs (renamed from src/test/ui/rfc1598-generic-associated-types/gat-dont-ice-on-absent-feature.rs)4
-rw-r--r--src/test/ui/generic-associated-types/gat-dont-ice-on-absent-feature.stderr19
-rw-r--r--src/test/ui/generic-associated-types/gat-incomplete-warning.rs (renamed from src/test/ui/rfc1598-generic-associated-types/gat-incomplete-warning.rs)0
-rw-r--r--src/test/ui/generic-associated-types/gat-incomplete-warning.stderr (renamed from src/test/ui/rfc1598-generic-associated-types/gat-incomplete-warning.stderr)0
-rw-r--r--src/test/ui/generic-associated-types/generic-associated-types-where.rs (renamed from src/test/ui/rfc1598-generic-associated-types/generic-associated-types-where.rs)10
-rw-r--r--src/test/ui/generic-associated-types/generic-associated-types-where.stderr26
-rw-r--r--src/test/ui/generic-associated-types/generic_associated_type_undeclared_lifetimes.rs16
-rw-r--r--src/test/ui/generic-associated-types/generic_associated_type_undeclared_lifetimes.stderr15
-rw-r--r--src/test/ui/generic-associated-types/impl_bounds.rs23
-rw-r--r--src/test/ui/generic-associated-types/impl_bounds.stderr46
-rw-r--r--src/test/ui/generic-associated-types/impl_bounds_ok.rs30
-rw-r--r--src/test/ui/generic-associated-types/issue-47206-where-clause.rs17
-rw-r--r--src/test/ui/generic-associated-types/issue-47206-where-clause.stderr10
-rw-r--r--src/test/ui/generic-associated-types/issue-58694-parameter-out-of-range.rs10
-rw-r--r--src/test/ui/generic-associated-types/issue-62326-parameter-out-of-range.rs12
-rw-r--r--src/test/ui/generic-associated-types/issue-62326-parameter-out-of-range.stderr15
-rw-r--r--src/test/ui/generic-associated-types/iterable.rs51
-rw-r--r--src/test/ui/generic-associated-types/iterable.stderr63
-rw-r--r--src/test/ui/generic-associated-types/parameter_number_and_kind.rs24
-rw-r--r--src/test/ui/generic-associated-types/parameter_number_and_kind.stderr53
-rw-r--r--src/test/ui/generic-associated-types/parameter_number_and_kind_impl.rs35
-rw-r--r--src/test/ui/generic-associated-types/parameter_number_and_kind_impl.stderr62
-rw-r--r--src/test/ui/generic-associated-types/parse/in-trait-impl.rs (renamed from src/test/ui/rfc1598-generic-associated-types/parse/in-trait-impl.rs)2
-rw-r--r--src/test/ui/generic-associated-types/parse/in-trait.rs (renamed from src/test/ui/rfc1598-generic-associated-types/parse/in-trait.rs)3
-rw-r--r--src/test/ui/generic-associated-types/pointer_family.rs (renamed from src/test/ui/rfc1598-generic-associated-types/pointer_family.rs)9
-rw-r--r--src/test/ui/generic-associated-types/pointer_family.stderr10
-rw-r--r--src/test/ui/generic-associated-types/shadowing.rs (renamed from src/test/ui/rfc1598-generic-associated-types/shadowing.rs)8
-rw-r--r--src/test/ui/generic-associated-types/shadowing.stderr (renamed from src/test/ui/rfc1598-generic-associated-types/shadowing.stderr)20
-rw-r--r--src/test/ui/generic-associated-types/streaming_iterator.rs (renamed from src/test/ui/rfc1598-generic-associated-types/streaming_iterator.rs)48
-rw-r--r--src/test/ui/parser/impl-item-type-no-body-semantic-fail.rs1
-rw-r--r--src/test/ui/parser/impl-item-type-no-body-semantic-fail.stderr8
-rw-r--r--src/test/ui/qualified/qualified-path-params-2.rs3
-rw-r--r--src/test/ui/qualified/qualified-path-params-2.stderr11
-rw-r--r--src/test/ui/rfc1598-generic-associated-types/collections.stderr41
-rw-r--r--src/test/ui/rfc1598-generic-associated-types/construct_with_other_type.rs29
-rw-r--r--src/test/ui/rfc1598-generic-associated-types/construct_with_other_type.stderr29
-rw-r--r--src/test/ui/rfc1598-generic-associated-types/empty_generics.stderr16
-rw-r--r--src/test/ui/rfc1598-generic-associated-types/gat-dont-ice-on-absent-feature.stderr12
-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/generic_associated_type_undeclared_lifetimes.rs22
-rw-r--r--src/test/ui/rfc1598-generic-associated-types/generic_associated_type_undeclared_lifetimes.stderr42
-rw-r--r--src/test/ui/rfc1598-generic-associated-types/iterable.rs50
-rw-r--r--src/test/ui/rfc1598-generic-associated-types/iterable.stderr47
-rw-r--r--src/test/ui/rfc1598-generic-associated-types/parameter_number_and_kind.rs47
-rw-r--r--src/test/ui/rfc1598-generic-associated-types/parameter_number_and_kind.stderr41
-rw-r--r--src/test/ui/rfc1598-generic-associated-types/pointer_family.stderr35
-rw-r--r--src/test/ui/rfc1598-generic-associated-types/streaming_iterator.stderr41
-rw-r--r--src/test/ui/structs/struct-path-associated-type.rs1
-rw-r--r--src/test/ui/structs/struct-path-associated-type.stderr10
-rw-r--r--src/test/ui/suggestions/let-binding-init-expr-as-ty.rs1
-rw-r--r--src/test/ui/suggestions/let-binding-init-expr-as-ty.stderr12
61 files changed, 760 insertions, 546 deletions
diff --git a/src/test/ui/feature-gates/feature-gate-generic_associated_types.rs b/src/test/ui/feature-gates/feature-gate-generic_associated_types.rs
index 17548d7b9e8..7ff348aca7c 100644
--- a/src/test/ui/feature-gates/feature-gate-generic_associated_types.rs
+++ b/src/test/ui/feature-gates/feature-gate-generic_associated_types.rs
@@ -3,9 +3,11 @@ use std::ops::Deref;
 trait PointerFamily<U> {
     type Pointer<T>: Deref<Target = T>;
     //~^ ERROR generic associated types are unstable
+    //~| ERROR type-generic associated types are not yet implemented
     type Pointer2<T>: Deref<Target = T> where T: Clone, U: Clone;
     //~^ ERROR generic associated types are unstable
     //~| ERROR where clauses on associated types are unstable
+    //~| ERROR type-generic associated types are not yet implemented
 }
 
 struct Foo;
diff --git a/src/test/ui/feature-gates/feature-gate-generic_associated_types.stderr b/src/test/ui/feature-gates/feature-gate-generic_associated_types.stderr
index 04473f41069..ab17c9a28ae 100644
--- a/src/test/ui/feature-gates/feature-gate-generic_associated_types.stderr
+++ b/src/test/ui/feature-gates/feature-gate-generic_associated_types.stderr
@@ -8,7 +8,7 @@ LL |     type Pointer<T>: Deref<Target = T>;
    = help: add `#![feature(generic_associated_types)]` to the crate attributes to enable
 
 error[E0658]: generic associated types are unstable
-  --> $DIR/feature-gate-generic_associated_types.rs:6:5
+  --> $DIR/feature-gate-generic_associated_types.rs:7:5
    |
 LL |     type Pointer2<T>: Deref<Target = T> where T: Clone, U: Clone;
    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
@@ -17,7 +17,7 @@ LL |     type Pointer2<T>: Deref<Target = T> where T: Clone, U: Clone;
    = help: add `#![feature(generic_associated_types)]` to the crate attributes to enable
 
 error[E0658]: where clauses on associated types are unstable
-  --> $DIR/feature-gate-generic_associated_types.rs:6:5
+  --> $DIR/feature-gate-generic_associated_types.rs:7:5
    |
 LL |     type Pointer2<T>: Deref<Target = T> where T: Clone, U: Clone;
    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
@@ -26,7 +26,7 @@ LL |     type Pointer2<T>: Deref<Target = T> where T: Clone, U: Clone;
    = help: add `#![feature(generic_associated_types)]` to the crate attributes to enable
 
 error[E0658]: generic associated types are unstable
-  --> $DIR/feature-gate-generic_associated_types.rs:14:5
+  --> $DIR/feature-gate-generic_associated_types.rs:16:5
    |
 LL |     type Pointer<Usize> = Box<Usize>;
    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
@@ -35,7 +35,7 @@ LL |     type Pointer<Usize> = Box<Usize>;
    = help: add `#![feature(generic_associated_types)]` to the crate attributes to enable
 
 error[E0658]: generic associated types are unstable
-  --> $DIR/feature-gate-generic_associated_types.rs:16:5
+  --> $DIR/feature-gate-generic_associated_types.rs:18:5
    |
 LL |     type Pointer2<U32> = Box<U32>;
    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
@@ -44,7 +44,7 @@ LL |     type Pointer2<U32> = Box<U32>;
    = help: add `#![feature(generic_associated_types)]` to the crate attributes to enable
 
 error[E0658]: where clauses on associated types are unstable
-  --> $DIR/feature-gate-generic_associated_types.rs:21:5
+  --> $DIR/feature-gate-generic_associated_types.rs:23:5
    |
 LL |     type Assoc where Self: Sized;
    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
@@ -53,7 +53,7 @@ LL |     type Assoc where Self: Sized;
    = help: add `#![feature(generic_associated_types)]` to the crate attributes to enable
 
 error[E0658]: where clauses on associated types are unstable
-  --> $DIR/feature-gate-generic_associated_types.rs:26:5
+  --> $DIR/feature-gate-generic_associated_types.rs:28:5
    |
 LL |     type Assoc where Self: Sized = Foo;
    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
@@ -61,6 +61,22 @@ LL |     type Assoc where Self: Sized = Foo;
    = note: for more information, see https://github.com/rust-lang/rust/issues/44265
    = help: add `#![feature(generic_associated_types)]` to the crate attributes to enable
 
-error: aborting due to 7 previous errors
+error: type-generic associated types are not yet implemented
+  --> $DIR/feature-gate-generic_associated_types.rs:4:5
+   |
+LL |     type Pointer<T>: Deref<Target = T>;
+   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+   |
+   = note: for more information, see https://github.com/rust-lang/rust/issues/44265
+
+error: type-generic associated types are not yet implemented
+  --> $DIR/feature-gate-generic_associated_types.rs:7:5
+   |
+LL |     type Pointer2<T>: Deref<Target = T> where T: Clone, U: Clone;
+   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+   |
+   = note: for more information, see https://github.com/rust-lang/rust/issues/44265
+
+error: aborting due to 9 previous errors
 
 For more information about this error, try `rustc --explain E0658`.
diff --git a/src/test/ui/rfc1598-generic-associated-types/collections.rs b/src/test/ui/generic-associated-types/collections.rs
index ede6a3b2b39..6f018f04018 100644
--- a/src/test/ui/rfc1598-generic-associated-types/collections.rs
+++ b/src/test/ui/generic-associated-types/collections.rs
@@ -1,10 +1,7 @@
+#![allow(incomplete_features)]
 #![feature(generic_associated_types)]
-//~^ WARNING the feature `generic_associated_types` is incomplete
 #![feature(associated_type_defaults)]
 
-// FIXME(#44265): "lifetime arguments are not allowed for this type" errors will be addressed in a
-// follow-up PR.
-
 // A Collection trait and collection families. Based on
 // http://smallcultfollowing.com/babysteps/blog/2016/11/03/
 // associated-type-constructors-part-2-family-traits/
@@ -15,18 +12,18 @@ trait Collection<T> {
     // Test associated type defaults with parameters
     type Sibling<U>: Collection<U> =
         <<Self as Collection<T>>::Family as CollectionFamily>::Member<U>;
-    //~^ ERROR type arguments are not allowed for this type [E0109]
+    //~^^ ERROR type-generic associated types are not yet implemented
 
     fn empty() -> Self;
 
     fn add(&mut self, value: T);
 
     fn iterate<'iter>(&'iter self) -> Self::Iter<'iter>;
-    //~^ ERROR lifetime arguments are not allowed for this type [E0109]
 }
 
 trait CollectionFamily {
     type Member<T>: Collection<T, Family = Self>;
+    //~^ ERROR type-generic associated types are not yet implemented
 }
 
 struct VecFamily;
@@ -48,13 +45,11 @@ impl<T> Collection<T> for Vec<T> {
     }
 
     fn iterate<'iter>(&'iter self) -> Self::Iter<'iter> {
-    //~^ ERROR lifetime arguments are not allowed for this type [E0109]
         self.iter()
     }
 }
 
 fn floatify<C>(ints: &C) -> <<C as Collection<i32>>::Family as CollectionFamily>::Member<f32>
-//~^ ERROR type arguments are not allowed for this type [E0109]
 where
     C: Collection<i32>,
 {
@@ -66,7 +61,6 @@ where
 }
 
 fn floatify_sibling<C>(ints: &C) -> <C as Collection<i32>>::Sibling<f32>
-//~^ ERROR type arguments are not allowed for this type [E0109]
 where
     C: Collection<i32>,
 {
diff --git a/src/test/ui/generic-associated-types/collections.stderr b/src/test/ui/generic-associated-types/collections.stderr
new file mode 100644
index 00000000000..e99ae78f714
--- /dev/null
+++ b/src/test/ui/generic-associated-types/collections.stderr
@@ -0,0 +1,19 @@
+error: type-generic associated types are not yet implemented
+  --> $DIR/collections.rs:13:5
+   |
+LL | /     type Sibling<U>: Collection<U> =
+LL | |         <<Self as Collection<T>>::Family as CollectionFamily>::Member<U>;
+   | |_________________________________________________________________________^
+   |
+   = note: for more information, see https://github.com/rust-lang/rust/issues/44265
+
+error: type-generic associated types are not yet implemented
+  --> $DIR/collections.rs:25:5
+   |
+LL |     type Member<T>: Collection<T, Family = Self>;
+   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+   |
+   = note: for more information, see https://github.com/rust-lang/rust/issues/44265
+
+error: aborting due to 2 previous errors
+
diff --git a/src/test/ui/generic-associated-types/construct_with_other_type.rs b/src/test/ui/generic-associated-types/construct_with_other_type.rs
new file mode 100644
index 00000000000..2198b99db25
--- /dev/null
+++ b/src/test/ui/generic-associated-types/construct_with_other_type.rs
@@ -0,0 +1,26 @@
+#![allow(incomplete_features)]
+#![feature(generic_associated_types)]
+
+// FIXME(#30472) normalize enough to handle this.
+
+use std::ops::Deref;
+
+trait Foo {
+    type Bar<'a, 'b>;
+}
+
+trait Baz {
+    type Quux<'a>: Foo where Self: 'a;
+
+    // This weird type tests that we can use universal function call syntax to access the Item on
+    type Baa<'a>: Deref<Target = <Self::Quux<'a> as Foo>::Bar<'a, 'static>>  where Self: 'a;
+}
+
+impl<T> Baz for T where T: Foo {
+//~^ ERROR type mismatch resolving
+    type Quux<'a> where T: 'a = T;
+
+    type Baa<'a> where T: 'a = &'a <T as Foo>::Bar<'a, 'static>;
+}
+
+fn main() {}
diff --git a/src/test/ui/generic-associated-types/construct_with_other_type.stderr b/src/test/ui/generic-associated-types/construct_with_other_type.stderr
new file mode 100644
index 00000000000..bad746f7ef1
--- /dev/null
+++ b/src/test/ui/generic-associated-types/construct_with_other_type.stderr
@@ -0,0 +1,13 @@
+error[E0271]: type mismatch resolving `for<'a> <<T as Baz>::Baa<'a> as std::ops::Deref>::Target == <<T as Baz>::Quux<'a> as Foo>::Bar<'a, 'static>`
+  --> $DIR/construct_with_other_type.rs:19:9
+   |
+LL | impl<T> Baz for T where T: Foo {
+   |         ^^^ expected type parameter `T`, found associated type
+   |
+   = note: expected associated type `<T as Foo>::Bar<'_, 'static>`
+              found associated type `<<T as Baz>::Quux<'_> as Foo>::Bar<'_, 'static>`
+   = note: you might be missing a type parameter or trait bound
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0271`.
diff --git a/src/test/ui/rfc1598-generic-associated-types/empty_generics.rs b/src/test/ui/generic-associated-types/empty_generics.rs
index afc27701920..522e23ca43d 100644
--- a/src/test/ui/rfc1598-generic-associated-types/empty_generics.rs
+++ b/src/test/ui/generic-associated-types/empty_generics.rs
@@ -1,5 +1,5 @@
+#![allow(incomplete_features)]
 #![feature(generic_associated_types)]
-//~^ WARNING the feature `generic_associated_types` is incomplete
 
 trait Foo {
     type Bar<,>;
diff --git a/src/test/ui/generic-associated-types/empty_generics.stderr b/src/test/ui/generic-associated-types/empty_generics.stderr
new file mode 100644
index 00000000000..d3acad47831
--- /dev/null
+++ b/src/test/ui/generic-associated-types/empty_generics.stderr
@@ -0,0 +1,8 @@
+error: expected one of `>`, `const`, identifier, or lifetime, found `,`
+  --> $DIR/empty_generics.rs:5:14
+   |
+LL |     type Bar<,>;
+   |              ^ expected one of `>`, `const`, identifier, or lifetime
+
+error: aborting due to previous error
+
diff --git a/src/test/ui/generic-associated-types/gat-dont-ice-on-absent-feature-2.rs b/src/test/ui/generic-associated-types/gat-dont-ice-on-absent-feature-2.rs
new file mode 100644
index 00000000000..f88df6a608a
--- /dev/null
+++ b/src/test/ui/generic-associated-types/gat-dont-ice-on-absent-feature-2.rs
@@ -0,0 +1,17 @@
+// rust-lang/rust#60654: Do not ICE on an attempt to use GATs that is
+// missing the feature gate.
+
+struct Foo;
+
+trait MyTrait {
+    type Item<T>;
+    //~^ ERROR generic associated types are unstable [E0658]
+    //~| ERROR type-generic associated types are not yet implemented
+}
+
+impl MyTrait for Foo {
+    type Item<T> = T;
+    //~^ ERROR generic associated types are unstable [E0658]
+}
+
+fn main() { }
diff --git a/src/test/ui/generic-associated-types/gat-dont-ice-on-absent-feature-2.stderr b/src/test/ui/generic-associated-types/gat-dont-ice-on-absent-feature-2.stderr
new file mode 100644
index 00000000000..a7d280d6359
--- /dev/null
+++ b/src/test/ui/generic-associated-types/gat-dont-ice-on-absent-feature-2.stderr
@@ -0,0 +1,29 @@
+error[E0658]: generic associated types are unstable
+  --> $DIR/gat-dont-ice-on-absent-feature-2.rs:7:5
+   |
+LL |     type Item<T>;
+   |     ^^^^^^^^^^^^^
+   |
+   = note: for more information, see https://github.com/rust-lang/rust/issues/44265
+   = help: add `#![feature(generic_associated_types)]` to the crate attributes to enable
+
+error[E0658]: generic associated types are unstable
+  --> $DIR/gat-dont-ice-on-absent-feature-2.rs:13:5
+   |
+LL |     type Item<T> = T;
+   |     ^^^^^^^^^^^^^^^^^
+   |
+   = note: for more information, see https://github.com/rust-lang/rust/issues/44265
+   = help: add `#![feature(generic_associated_types)]` to the crate attributes to enable
+
+error: type-generic associated types are not yet implemented
+  --> $DIR/gat-dont-ice-on-absent-feature-2.rs:7:5
+   |
+LL |     type Item<T>;
+   |     ^^^^^^^^^^^^^
+   |
+   = note: for more information, see https://github.com/rust-lang/rust/issues/44265
+
+error: aborting due to 3 previous errors
+
+For more information about this error, try `rustc --explain E0658`.
diff --git a/src/test/ui/rfc1598-generic-associated-types/gat-dont-ice-on-absent-feature.rs b/src/test/ui/generic-associated-types/gat-dont-ice-on-absent-feature.rs
index 84fbb47301f..e8fc47d2a59 100644
--- a/src/test/ui/rfc1598-generic-associated-types/gat-dont-ice-on-absent-feature.rs
+++ b/src/test/ui/generic-associated-types/gat-dont-ice-on-absent-feature.rs
@@ -4,7 +4,9 @@
 struct Foo;
 
 impl Iterator for Foo {
-    type Item<'b> = &'b Foo; //~ ERROR generic associated types are unstable [E0658]
+    type Item<'b> = &'b Foo;
+    //~^ ERROR generic associated types are unstable [E0658]
+    //~| ERROR lifetime parameters or bounds on type `Item` do not match the trait declaration
 
     fn next(&mut self) -> Option<Self::Item> {
         None
diff --git a/src/test/ui/generic-associated-types/gat-dont-ice-on-absent-feature.stderr b/src/test/ui/generic-associated-types/gat-dont-ice-on-absent-feature.stderr
new file mode 100644
index 00000000000..9031071ff69
--- /dev/null
+++ b/src/test/ui/generic-associated-types/gat-dont-ice-on-absent-feature.stderr
@@ -0,0 +1,19 @@
+error[E0658]: generic associated types are unstable
+  --> $DIR/gat-dont-ice-on-absent-feature.rs:7:5
+   |
+LL |     type Item<'b> = &'b Foo;
+   |     ^^^^^^^^^^^^^^^^^^^^^^^^
+   |
+   = note: for more information, see https://github.com/rust-lang/rust/issues/44265
+   = help: add `#![feature(generic_associated_types)]` to the crate attributes to enable
+
+error[E0195]: lifetime parameters or bounds on type `Item` do not match the trait declaration
+  --> $DIR/gat-dont-ice-on-absent-feature.rs:7:14
+   |
+LL |     type Item<'b> = &'b Foo;
+   |              ^^^^ lifetimes do not match type in trait
+
+error: aborting due to 2 previous errors
+
+Some errors have detailed explanations: E0195, E0658.
+For more information about an error, try `rustc --explain E0195`.
diff --git a/src/test/ui/rfc1598-generic-associated-types/gat-incomplete-warning.rs b/src/test/ui/generic-associated-types/gat-incomplete-warning.rs
index 33593884de3..33593884de3 100644
--- a/src/test/ui/rfc1598-generic-associated-types/gat-incomplete-warning.rs
+++ b/src/test/ui/generic-associated-types/gat-incomplete-warning.rs
diff --git a/src/test/ui/rfc1598-generic-associated-types/gat-incomplete-warning.stderr b/src/test/ui/generic-associated-types/gat-incomplete-warning.stderr
index d75f9fb8451..d75f9fb8451 100644
--- a/src/test/ui/rfc1598-generic-associated-types/gat-incomplete-warning.stderr
+++ b/src/test/ui/generic-associated-types/gat-incomplete-warning.stderr
diff --git a/src/test/ui/rfc1598-generic-associated-types/generic-associated-types-where.rs b/src/test/ui/generic-associated-types/generic-associated-types-where.rs
index 01daf307c00..589024e1621 100644
--- a/src/test/ui/rfc1598-generic-associated-types/generic-associated-types-where.rs
+++ b/src/test/ui/generic-associated-types/generic-associated-types-where.rs
@@ -1,4 +1,5 @@
-#![feature(generic_associated_types)] //~ WARN `generic_associated_types` is incomplete
+#![allow(incomplete_features)]
+#![feature(generic_associated_types)]
 
 // Checking the interaction with this other feature
 #![feature(associated_type_defaults)]
@@ -8,8 +9,11 @@ use std::fmt::{Display, Debug};
 trait Foo {
     type Assoc where Self: Sized;
     type Assoc2<T> where T: Display;
+    //~^ ERROR type-generic associated types are not yet implemented
     type Assoc3<T>;
-    type WithDefault<T> where T: Debug = dyn Iterator<Item=T>;
+    //~^ ERROR type-generic associated types are not yet implemented
+    type WithDefault<'a, T: Debug + 'a> = dyn Iterator<Item=T>;
+    //~^ ERROR type-generic associated types are not yet implemented
     type NoGenerics;
 }
 
@@ -19,7 +23,7 @@ impl Foo for Bar {
     type Assoc = usize;
     type Assoc2<T> = Vec<T>;
     type Assoc3<T> where T: Iterator = Vec<T>;
-    type WithDefault<'a, T> = &'a dyn Iterator<T>;
+    type WithDefault<'a, T: Debug + 'a> = &'a dyn Iterator<Item=T>;
     type NoGenerics = ::std::cell::Cell<i32>;
 }
 
diff --git a/src/test/ui/generic-associated-types/generic-associated-types-where.stderr b/src/test/ui/generic-associated-types/generic-associated-types-where.stderr
new file mode 100644
index 00000000000..2144a5e7d9c
--- /dev/null
+++ b/src/test/ui/generic-associated-types/generic-associated-types-where.stderr
@@ -0,0 +1,26 @@
+error: type-generic associated types are not yet implemented
+  --> $DIR/generic-associated-types-where.rs:11:5
+   |
+LL |     type Assoc2<T> where T: Display;
+   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+   |
+   = note: for more information, see https://github.com/rust-lang/rust/issues/44265
+
+error: type-generic associated types are not yet implemented
+  --> $DIR/generic-associated-types-where.rs:13:5
+   |
+LL |     type Assoc3<T>;
+   |     ^^^^^^^^^^^^^^^
+   |
+   = note: for more information, see https://github.com/rust-lang/rust/issues/44265
+
+error: type-generic associated types are not yet implemented
+  --> $DIR/generic-associated-types-where.rs:15:5
+   |
+LL |     type WithDefault<'a, T: Debug + 'a> = dyn Iterator<Item=T>;
+   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+   |
+   = note: for more information, see https://github.com/rust-lang/rust/issues/44265
+
+error: aborting due to 3 previous errors
+
diff --git a/src/test/ui/generic-associated-types/generic_associated_type_undeclared_lifetimes.rs b/src/test/ui/generic-associated-types/generic_associated_type_undeclared_lifetimes.rs
new file mode 100644
index 00000000000..4b4e59a5124
--- /dev/null
+++ b/src/test/ui/generic-associated-types/generic_associated_type_undeclared_lifetimes.rs
@@ -0,0 +1,16 @@
+#![allow(incomplete_features)]
+#![feature(generic_associated_types)]
+
+use std::ops::Deref;
+
+trait Iterable {
+    type Item<'a>;
+    type Iter<'a>: Iterator<Item = Self::Item<'a>>
+        + Deref<Target = Self::Item<'b>>;
+    //~^ ERROR undeclared lifetime
+
+    fn iter<'a>(&'a self) -> Self::Iter<'undeclared>;
+    //~^ ERROR undeclared lifetime
+}
+
+fn main() {}
diff --git a/src/test/ui/generic-associated-types/generic_associated_type_undeclared_lifetimes.stderr b/src/test/ui/generic-associated-types/generic_associated_type_undeclared_lifetimes.stderr
new file mode 100644
index 00000000000..81137e81dc4
--- /dev/null
+++ b/src/test/ui/generic-associated-types/generic_associated_type_undeclared_lifetimes.stderr
@@ -0,0 +1,15 @@
+error[E0261]: use of undeclared lifetime name `'b`
+  --> $DIR/generic_associated_type_undeclared_lifetimes.rs:9:37
+   |
+LL |         + Deref<Target = Self::Item<'b>>;
+   |                                     ^^ undeclared lifetime
+
+error[E0261]: use of undeclared lifetime name `'undeclared`
+  --> $DIR/generic_associated_type_undeclared_lifetimes.rs:12:41
+   |
+LL |     fn iter<'a>(&'a self) -> Self::Iter<'undeclared>;
+   |                                         ^^^^^^^^^^^ undeclared lifetime
+
+error: aborting due to 2 previous errors
+
+For more information about this error, try `rustc --explain E0261`.
diff --git a/src/test/ui/generic-associated-types/impl_bounds.rs b/src/test/ui/generic-associated-types/impl_bounds.rs
new file mode 100644
index 00000000000..3ffa6c6eec4
--- /dev/null
+++ b/src/test/ui/generic-associated-types/impl_bounds.rs
@@ -0,0 +1,23 @@
+#![allow(incomplete_features)]
+#![feature(generic_associated_types)]
+#![feature(associated_type_defaults)]
+
+trait Foo {
+    type A<'a> where Self: 'a;
+    type B<'a, 'b> where 'a: 'b;
+    type C where Self: Clone;
+}
+
+#[derive(Copy, Clone)]
+struct Fooy<T>(T);
+
+impl<T> Foo for Fooy<T> {
+    type A<'a> where Self: 'static = (&'a ());
+    //~^ ERROR the parameter type `T` may not live long enough
+    type B<'a, 'b> where 'b: 'a = (&'a(), &'b ());
+    //~^ ERROR lifetime bound not satisfied
+    type C where Self: Copy = String;
+    //~^ ERROR the trait bound `T: std::marker::Copy` is not satisfied
+}
+
+fn main() {}
diff --git a/src/test/ui/generic-associated-types/impl_bounds.stderr b/src/test/ui/generic-associated-types/impl_bounds.stderr
new file mode 100644
index 00000000000..01799007693
--- /dev/null
+++ b/src/test/ui/generic-associated-types/impl_bounds.stderr
@@ -0,0 +1,46 @@
+error[E0310]: the parameter type `T` may not live long enough
+  --> $DIR/impl_bounds.rs:15:5
+   |
+LL |     type A<'a> where Self: 'static = (&'a ());
+   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+   |
+   = help: consider adding an explicit lifetime bound `T: 'static`...
+note: ...so that the type `Fooy<T>` will meet its required lifetime bounds
+  --> $DIR/impl_bounds.rs:15:5
+   |
+LL |     type A<'a> where Self: 'static = (&'a ());
+   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+error[E0478]: lifetime bound not satisfied
+  --> $DIR/impl_bounds.rs:17:5
+   |
+LL |     type B<'a, 'b> where 'b: 'a = (&'a(), &'b ());
+   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+   |
+note: lifetime parameter instantiated with the lifetime `'b` as defined on the associated item at 17:16
+  --> $DIR/impl_bounds.rs:17:16
+   |
+LL |     type B<'a, 'b> where 'b: 'a = (&'a(), &'b ());
+   |                ^^
+note: but lifetime parameter must outlive the lifetime `'a` as defined on the associated item at 17:12
+  --> $DIR/impl_bounds.rs:17:12
+   |
+LL |     type B<'a, 'b> where 'b: 'a = (&'a(), &'b ());
+   |            ^^
+
+error[E0277]: the trait bound `T: std::marker::Copy` is not satisfied
+  --> $DIR/impl_bounds.rs:19:5
+   |
+LL | impl<T> Foo for Fooy<T> {
+   |      - help: consider restricting this bound: `T: std::marker::Copy`
+...
+LL |     type C where Self: Copy = String;
+   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the trait `std::marker::Copy` is not implemented for `T`
+   |
+   = note: required because of the requirements on the impl of `std::marker::Copy` for `Fooy<T>`
+   = note: the requirement `Fooy<T>: std::marker::Copy` appears on the associated impl typebut not on the corresponding associated trait type
+
+error: aborting due to 3 previous errors
+
+Some errors have detailed explanations: E0277, E0310, E0478.
+For more information about an error, try `rustc --explain E0277`.
diff --git a/src/test/ui/generic-associated-types/impl_bounds_ok.rs b/src/test/ui/generic-associated-types/impl_bounds_ok.rs
new file mode 100644
index 00000000000..2387b891755
--- /dev/null
+++ b/src/test/ui/generic-associated-types/impl_bounds_ok.rs
@@ -0,0 +1,30 @@
+// check-pass
+
+#![allow(incomplete_features)]
+#![feature(generic_associated_types)]
+#![feature(associated_type_defaults)]
+
+trait Foo {
+    type A<'a> where Self: 'a;
+    type B<'a, 'b> where 'a: 'b;
+    type C where Self: Clone;
+}
+
+struct Fooy;
+
+impl Foo for Fooy {
+    type A<'a> = (&'a ());
+    type B<'a, 'b> = (&'a(), &'b ());
+    type C = String;
+}
+
+#[derive(Clone)]
+struct Fooer<T>(T);
+
+impl<T> Foo for Fooer<T> {
+    type A<'x> where T: 'x = (&'x ());
+    type B<'u, 'v> where 'u: 'v = (&'v &'u ());
+    type C where Self: ToOwned = String;
+}
+
+fn main() {}
diff --git a/src/test/ui/generic-associated-types/issue-47206-where-clause.rs b/src/test/ui/generic-associated-types/issue-47206-where-clause.rs
new file mode 100644
index 00000000000..53e350aacf8
--- /dev/null
+++ b/src/test/ui/generic-associated-types/issue-47206-where-clause.rs
@@ -0,0 +1,17 @@
+// Check that this program doesn't cause the compiler to error without output.
+
+#![allow(incomplete_features)]
+#![feature(generic_associated_types)]
+
+trait Foo {
+    type Assoc3<T>;
+    //~^ type-generic associated types are not yet implemented
+}
+
+struct Bar;
+
+impl Foo for Bar {
+    type Assoc3<T> where T: Iterator = Vec<T>;
+}
+
+fn main() {}
diff --git a/src/test/ui/generic-associated-types/issue-47206-where-clause.stderr b/src/test/ui/generic-associated-types/issue-47206-where-clause.stderr
new file mode 100644
index 00000000000..52207d759b9
--- /dev/null
+++ b/src/test/ui/generic-associated-types/issue-47206-where-clause.stderr
@@ -0,0 +1,10 @@
+error: type-generic associated types are not yet implemented
+  --> $DIR/issue-47206-where-clause.rs:7:5
+   |
+LL |     type Assoc3<T>;
+   |     ^^^^^^^^^^^^^^^
+   |
+   = note: for more information, see https://github.com/rust-lang/rust/issues/44265
+
+error: aborting due to previous error
+
diff --git a/src/test/ui/generic-associated-types/issue-58694-parameter-out-of-range.rs b/src/test/ui/generic-associated-types/issue-58694-parameter-out-of-range.rs
new file mode 100644
index 00000000000..2298aa5b0b7
--- /dev/null
+++ b/src/test/ui/generic-associated-types/issue-58694-parameter-out-of-range.rs
@@ -0,0 +1,10 @@
+// check-pass
+
+#![allow(incomplete_features)]
+#![feature(generic_associated_types)]
+
+trait Cert {
+    type PublicKey<'a>: From<&'a [u8]>;
+}
+
+fn main() {}
diff --git a/src/test/ui/generic-associated-types/issue-62326-parameter-out-of-range.rs b/src/test/ui/generic-associated-types/issue-62326-parameter-out-of-range.rs
new file mode 100644
index 00000000000..db0da40aab0
--- /dev/null
+++ b/src/test/ui/generic-associated-types/issue-62326-parameter-out-of-range.rs
@@ -0,0 +1,12 @@
+#![allow(incomplete_features)]
+#![feature(generic_associated_types)]
+
+// FIXME(generic-associated-types) Investigate why this doesn't compile.
+
+trait Iterator {
+//~^ ERROR the requirement `for<'a> <Self as Iterator>::Item<'a> : 'a` is not satisfied
+    type Item<'a>: 'a;
+}
+
+
+fn main() {}
diff --git a/src/test/ui/generic-associated-types/issue-62326-parameter-out-of-range.stderr b/src/test/ui/generic-associated-types/issue-62326-parameter-out-of-range.stderr
new file mode 100644
index 00000000000..07169700f39
--- /dev/null
+++ b/src/test/ui/generic-associated-types/issue-62326-parameter-out-of-range.stderr
@@ -0,0 +1,15 @@
+error[E0280]: the requirement `for<'a> <Self as Iterator>::Item<'a> : 'a` is not satisfied
+  --> $DIR/issue-62326-parameter-out-of-range.rs:6:1
+   |
+LL |   trait Iterator {
+   |   ^-------------
+   |   |
+   |  _required by `Iterator`
+   | |
+LL | |
+LL | |     type Item<'a>: 'a;
+LL | | }
+   | |_^
+
+error: aborting due to previous error
+
diff --git a/src/test/ui/generic-associated-types/iterable.rs b/src/test/ui/generic-associated-types/iterable.rs
new file mode 100644
index 00000000000..105ab4a8adc
--- /dev/null
+++ b/src/test/ui/generic-associated-types/iterable.rs
@@ -0,0 +1,51 @@
+#![allow(incomplete_features)]
+#![feature(generic_associated_types)]
+
+// FIXME(#30472) normalize enough to handle this.
+
+trait Iterable {
+    type Item<'a> where Self: 'a;
+    type Iter<'a>: Iterator<Item = Self::Item<'a>> where Self: 'a;
+
+    fn iter<'a>(&'a self) -> Self::Iter<'a>;
+}
+
+// Impl for struct type
+impl<T> Iterable for Vec<T> {
+    type Item<'a> where T: 'a = <std::slice::Iter<'a, T> as Iterator>::Item;
+    //~^ ERROR type mismatch resolving
+    type Iter<'a> where T: 'a = std::slice::Iter<'a, T>;
+
+    fn iter<'a>(&'a self) -> Self::Iter<'a> {
+    //~^ ERROR type mismatch resolving
+        self.iter()
+    }
+}
+
+// Impl for a primitive type
+impl<T> Iterable for [T] {
+    type Item<'a> where T: 'a = <std::slice::Iter<'a, T> as Iterator>::Item;
+    //~^ ERROR type mismatch resolving
+    type Iter<'a> where T: 'a = std::slice::Iter<'a, T>;
+
+    fn iter<'a>(&'a self) -> Self::Iter<'a> {
+    //~^ ERROR type mismatch resolving
+        self.iter()
+    }
+}
+
+fn make_iter<'a, I: Iterable>(it: &'a I) -> I::Iter<'a> {
+    it.iter()
+}
+
+fn get_first<'a, I: Iterable>(it: &'a I) -> Option<I::Item<'a>> {
+    it.iter().next()
+}
+
+fn main() {
+    let v = vec![1, 2, 3];
+    assert_eq!(v, make_iter(&v).copied().collect());
+    assert_eq!(v, make_iter(&*v).copied().collect());
+    assert_eq!(1, get_first(&v));
+    assert_eq!(1, get_first(&*v));
+}
diff --git a/src/test/ui/generic-associated-types/iterable.stderr b/src/test/ui/generic-associated-types/iterable.stderr
new file mode 100644
index 00000000000..d0d75f3cc63
--- /dev/null
+++ b/src/test/ui/generic-associated-types/iterable.stderr
@@ -0,0 +1,63 @@
+error[E0271]: type mismatch resolving `for<'a> <<std::vec::Vec<T> as Iterable>::Iter<'a> as std::iter::Iterator>::Item == <std::vec::Vec<T> as Iterable>::Item<'a>`
+  --> $DIR/iterable.rs:15:5
+   |
+LL | impl<T> Iterable for Vec<T> {
+   | --------------------------- in this `impl` item
+LL |     type Item<'a> where T: 'a = <std::slice::Iter<'a, T> as Iterator>::Item;
+   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ expected reference, found associated type
+   |
+   = note:    expected reference `&T`
+           found associated type `<std::vec::Vec<T> as Iterable>::Item<'_>`
+   = note: consider constraining the associated type `<std::vec::Vec<T> as Iterable>::Item<'_>` to `&_`
+   = note: for more information, visit https://doc.rust-lang.org/book/ch19-03-advanced-traits.html
+
+error[E0271]: type mismatch resolving `for<'a> <<[T] as Iterable>::Iter<'a> as std::iter::Iterator>::Item == <[T] as Iterable>::Item<'a>`
+  --> $DIR/iterable.rs:27:5
+   |
+LL | impl<T> Iterable for [T] {
+   | ------------------------ in this `impl` item
+LL |     type Item<'a> where T: 'a = <std::slice::Iter<'a, T> as Iterator>::Item;
+   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ expected reference, found associated type
+   |
+   = note:    expected reference `&T`
+           found associated type `<[T] as Iterable>::Item<'_>`
+   = note: consider constraining the associated type `<[T] as Iterable>::Item<'_>` to `&_`
+   = note: for more information, visit https://doc.rust-lang.org/book/ch19-03-advanced-traits.html
+
+error[E0271]: type mismatch resolving `for<'a> <<std::vec::Vec<T> as Iterable>::Iter<'a> as std::iter::Iterator>::Item == <std::vec::Vec<T> as Iterable>::Item<'a>`
+  --> $DIR/iterable.rs:19:5
+   |
+LL |   trait Iterable {
+   |   -------------- required by `Iterable`
+...
+LL | /     fn iter<'a>(&'a self) -> Self::Iter<'a> {
+LL | |
+LL | |         self.iter()
+LL | |     }
+   | |_____^ expected associated type, found reference
+   |
+   = note: expected associated type `<std::vec::Vec<T> as Iterable>::Item<'_>`
+                    found reference `&T`
+   = note: consider constraining the associated type `<std::vec::Vec<T> as Iterable>::Item<'_>` to `&_` or calling a method that returns `<std::vec::Vec<T> as Iterable>::Item<'_>`
+   = note: for more information, visit https://doc.rust-lang.org/book/ch19-03-advanced-traits.html
+
+error[E0271]: type mismatch resolving `for<'a> <<[T] as Iterable>::Iter<'a> as std::iter::Iterator>::Item == <[T] as Iterable>::Item<'a>`
+  --> $DIR/iterable.rs:31:5
+   |
+LL |   trait Iterable {
+   |   -------------- required by `Iterable`
+...
+LL | /     fn iter<'a>(&'a self) -> Self::Iter<'a> {
+LL | |
+LL | |         self.iter()
+LL | |     }
+   | |_____^ expected associated type, found reference
+   |
+   = note: expected associated type `<[T] as Iterable>::Item<'_>`
+                    found reference `&T`
+   = note: consider constraining the associated type `<[T] as Iterable>::Item<'_>` to `&_` or calling a method that returns `<[T] as Iterable>::Item<'_>`
+   = note: for more information, visit https://doc.rust-lang.org/book/ch19-03-advanced-traits.html
+
+error: aborting due to 4 previous errors
+
+For more information about this error, try `rustc --explain E0271`.
diff --git a/src/test/ui/generic-associated-types/parameter_number_and_kind.rs b/src/test/ui/generic-associated-types/parameter_number_and_kind.rs
new file mode 100644
index 00000000000..0edc5c48c01
--- /dev/null
+++ b/src/test/ui/generic-associated-types/parameter_number_and_kind.rs
@@ -0,0 +1,24 @@
+#![allow(incomplete_features)]
+#![feature(generic_associated_types)]
+#![feature(associated_type_defaults)]
+
+trait Foo {
+    type A<'a>;
+    type B<'a, 'b>;
+    type C;
+    type D<T>;
+    //~^ ERROR type-generic associated types are not yet implemented
+    type E<'a, T>;
+    //~^ ERROR type-generic associated types are not yet implemented
+    // Test parameters in default values
+    type FOk<T> = Self::E<'static, T>;
+    //~^ ERROR type-generic associated types are not yet implemented
+    type FErr1 = Self::E<'static, 'static>;
+    //~^ ERROR wrong number of lifetime arguments: expected 1, found 2
+    //~| ERROR wrong number of type arguments: expected 1, found 0
+    type FErr2<T> = Self::E<'static, T, u32>;
+    //~^ ERROR type-generic associated types are not yet implemented
+    //~| ERROR wrong number of type arguments: expected 1, found 2
+}
+
+fn main() {}
diff --git a/src/test/ui/generic-associated-types/parameter_number_and_kind.stderr b/src/test/ui/generic-associated-types/parameter_number_and_kind.stderr
new file mode 100644
index 00000000000..6b5683611a2
--- /dev/null
+++ b/src/test/ui/generic-associated-types/parameter_number_and_kind.stderr
@@ -0,0 +1,53 @@
+error: type-generic associated types are not yet implemented
+  --> $DIR/parameter_number_and_kind.rs:9:5
+   |
+LL |     type D<T>;
+   |     ^^^^^^^^^^
+   |
+   = note: for more information, see https://github.com/rust-lang/rust/issues/44265
+
+error: type-generic associated types are not yet implemented
+  --> $DIR/parameter_number_and_kind.rs:11:5
+   |
+LL |     type E<'a, T>;
+   |     ^^^^^^^^^^^^^^
+   |
+   = note: for more information, see https://github.com/rust-lang/rust/issues/44265
+
+error: type-generic associated types are not yet implemented
+  --> $DIR/parameter_number_and_kind.rs:14:5
+   |
+LL |     type FOk<T> = Self::E<'static, T>;
+   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+   |
+   = note: for more information, see https://github.com/rust-lang/rust/issues/44265
+
+error: type-generic associated types are not yet implemented
+  --> $DIR/parameter_number_and_kind.rs:19:5
+   |
+LL |     type FErr2<T> = Self::E<'static, T, u32>;
+   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+   |
+   = note: for more information, see https://github.com/rust-lang/rust/issues/44265
+
+error[E0107]: wrong number of lifetime arguments: expected 1, found 2
+  --> $DIR/parameter_number_and_kind.rs:16:35
+   |
+LL |     type FErr1 = Self::E<'static, 'static>;
+   |                                   ^^^^^^^ unexpected lifetime argument
+
+error[E0107]: wrong number of type arguments: expected 1, found 0
+  --> $DIR/parameter_number_and_kind.rs:16:18
+   |
+LL |     type FErr1 = Self::E<'static, 'static>;
+   |                  ^^^^^^^^^^^^^^^^^^^^^^^^^ expected 1 type argument
+
+error[E0107]: wrong number of type arguments: expected 1, found 2
+  --> $DIR/parameter_number_and_kind.rs:19:41
+   |
+LL |     type FErr2<T> = Self::E<'static, T, u32>;
+   |                                         ^^^ unexpected type argument
+
+error: aborting due to 7 previous errors
+
+For more information about this error, try `rustc --explain E0107`.
diff --git a/src/test/ui/generic-associated-types/parameter_number_and_kind_impl.rs b/src/test/ui/generic-associated-types/parameter_number_and_kind_impl.rs
new file mode 100644
index 00000000000..74b9cec1da3
--- /dev/null
+++ b/src/test/ui/generic-associated-types/parameter_number_and_kind_impl.rs
@@ -0,0 +1,35 @@
+#![allow(incomplete_features)]
+#![feature(generic_associated_types)]
+#![feature(associated_type_defaults)]
+
+// FIXME(#44265) add tests for type-generic and const-genertic associated types.
+
+trait Foo {
+    type A<'a>;
+    type B<'a, 'b>;
+    type C;
+}
+
+struct Fooy;
+
+impl Foo for Fooy {
+    type A = u32;
+    //~^ ERROR lifetime parameters or bounds on type `A` do not match the trait declaration
+    type B<'a, T> = Vec<T>;
+    //~^ ERROR type `B` has 1 type parameter but its trait declaration has 0 type parameters
+    type C<'a> = u32;
+    //~^ ERROR lifetime parameters or bounds on type `C` do not match the trait declaration
+}
+
+struct Fooer;
+
+impl Foo for Fooer {
+    type A<T> = u32;
+    //~^ ERROR type `A` has 1 type parameter but its trait declaration has 0 type parameters
+    type B<'a> = u32;
+    //~^ ERROR lifetime parameters or bounds on type `B` do not match the trait declaration
+    type C<T> = T;
+    //~^ ERROR type `C` has 1 type parameter but its trait declaration has 0 type parameters
+}
+
+fn main() {}
diff --git a/src/test/ui/generic-associated-types/parameter_number_and_kind_impl.stderr b/src/test/ui/generic-associated-types/parameter_number_and_kind_impl.stderr
new file mode 100644
index 00000000000..bdd1c895fd9
--- /dev/null
+++ b/src/test/ui/generic-associated-types/parameter_number_and_kind_impl.stderr
@@ -0,0 +1,62 @@
+error[E0195]: lifetime parameters or bounds on type `A` do not match the trait declaration
+  --> $DIR/parameter_number_and_kind_impl.rs:16:11
+   |
+LL |     type A<'a>;
+   |           ---- lifetimes in impl do not match this type in trait
+...
+LL |     type A = u32;
+   |           ^ lifetimes do not match type in trait
+
+error[E0049]: type `B` has 1 type parameter but its trait declaration has 0 type parameters
+  --> $DIR/parameter_number_and_kind_impl.rs:18:12
+   |
+LL |     type B<'a, 'b>;
+   |            --  --
+   |            |
+   |            expected 0 type parameters
+...
+LL |     type B<'a, T> = Vec<T>;
+   |            ^^  ^
+   |            |
+   |            found 1 type parameter
+
+error[E0195]: lifetime parameters or bounds on type `C` do not match the trait declaration
+  --> $DIR/parameter_number_and_kind_impl.rs:20:11
+   |
+LL |     type C;
+   |           - lifetimes in impl do not match this type in trait
+...
+LL |     type C<'a> = u32;
+   |           ^^^^ lifetimes do not match type in trait
+
+error[E0049]: type `A` has 1 type parameter but its trait declaration has 0 type parameters
+  --> $DIR/parameter_number_and_kind_impl.rs:27:12
+   |
+LL |     type A<'a>;
+   |            -- expected 0 type parameters
+...
+LL |     type A<T> = u32;
+   |            ^ found 1 type parameter
+
+error[E0195]: lifetime parameters or bounds on type `B` do not match the trait declaration
+  --> $DIR/parameter_number_and_kind_impl.rs:29:11
+   |
+LL |     type B<'a, 'b>;
+   |           -------- lifetimes in impl do not match this type in trait
+...
+LL |     type B<'a> = u32;
+   |           ^^^^ lifetimes do not match type in trait
+
+error[E0049]: type `C` has 1 type parameter but its trait declaration has 0 type parameters
+  --> $DIR/parameter_number_and_kind_impl.rs:31:12
+   |
+LL |     type C;
+   |           - expected 0 type parameters
+...
+LL |     type C<T> = T;
+   |            ^ found 1 type parameter
+
+error: aborting due to 6 previous errors
+
+Some errors have detailed explanations: E0049, E0195.
+For more information about an error, try `rustc --explain E0049`.
diff --git a/src/test/ui/rfc1598-generic-associated-types/parse/in-trait-impl.rs b/src/test/ui/generic-associated-types/parse/in-trait-impl.rs
index 9fc32d7cc55..7f4775ddbb0 100644
--- a/src/test/ui/rfc1598-generic-associated-types/parse/in-trait-impl.rs
+++ b/src/test/ui/generic-associated-types/parse/in-trait-impl.rs
@@ -1,4 +1,4 @@
-// build-pass (FIXME(62277): could be check-pass?)
+// check-pass
 // compile-flags: -Z parse-only
 
 #![feature(generic_associated_types)]
diff --git a/src/test/ui/rfc1598-generic-associated-types/parse/in-trait.rs b/src/test/ui/generic-associated-types/parse/in-trait.rs
index 7974ee9d39b..d438795eb1d 100644
--- a/src/test/ui/rfc1598-generic-associated-types/parse/in-trait.rs
+++ b/src/test/ui/generic-associated-types/parse/in-trait.rs
@@ -1,9 +1,10 @@
-// build-pass (FIXME(62277): could be check-pass?)
+// check-pass
 // compile-flags: -Z parse-only
 
 #![feature(generic_associated_types)]
 
 use std::ops::Deref;
+use std::fmt::Debug;
 
 trait Foo {
     type Bar<'a>;
diff --git a/src/test/ui/rfc1598-generic-associated-types/pointer_family.rs b/src/test/ui/generic-associated-types/pointer_family.rs
index edeeaba7565..1668759b4e3 100644
--- a/src/test/ui/rfc1598-generic-associated-types/pointer_family.rs
+++ b/src/test/ui/generic-associated-types/pointer_family.rs
@@ -1,7 +1,7 @@
+#![allow(incomplete_features)]
 #![feature(generic_associated_types)]
-//~^ WARNING the feature `generic_associated_types` is incomplete
 
-// FIXME(#44265): "type argument not allowed" errors will be addressed in a follow-up PR.
+// FIXME(#44265): allow type-generic associated types.
 
 use std::rc::Rc;
 use std::sync::Arc;
@@ -9,8 +9,8 @@ use std::ops::Deref;
 
 trait PointerFamily {
     type Pointer<T>: Deref<Target = T>;
+    //~^ ERROR type-generic associated types are not yet implemented
     fn new<T>(value: T) -> Self::Pointer<T>;
-    //~^ ERROR type arguments are not allowed for this type [E0109]
 }
 
 struct ArcFamily;
@@ -18,7 +18,6 @@ struct ArcFamily;
 impl PointerFamily for ArcFamily {
     type Pointer<T> = Arc<T>;
     fn new<T>(value: T) -> Self::Pointer<T> {
-    //~^ ERROR type arguments are not allowed for this type [E0109]
         Arc::new(value)
     }
 }
@@ -28,14 +27,12 @@ struct RcFamily;
 impl PointerFamily for RcFamily {
     type Pointer<T> = Rc<T>;
     fn new<T>(value: T) -> Self::Pointer<T> {
-    //~^ ERROR type arguments are not allowed for this type [E0109]
         Rc::new(value)
     }
 }
 
 struct Foo<P: PointerFamily> {
     bar: P::Pointer<String>,
-    //~^ ERROR type arguments are not allowed for this type [E0109]
 }
 
 fn main() {}
diff --git a/src/test/ui/generic-associated-types/pointer_family.stderr b/src/test/ui/generic-associated-types/pointer_family.stderr
new file mode 100644
index 00000000000..2a784f8b9d7
--- /dev/null
+++ b/src/test/ui/generic-associated-types/pointer_family.stderr
@@ -0,0 +1,10 @@
+error: type-generic associated types are not yet implemented
+  --> $DIR/pointer_family.rs:11:5
+   |
+LL |     type Pointer<T>: Deref<Target = T>;
+   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+   |
+   = note: for more information, see https://github.com/rust-lang/rust/issues/44265
+
+error: aborting due to previous error
+
diff --git a/src/test/ui/rfc1598-generic-associated-types/shadowing.rs b/src/test/ui/generic-associated-types/shadowing.rs
index f5197fd01bf..7277c0d87c6 100644
--- a/src/test/ui/rfc1598-generic-associated-types/shadowing.rs
+++ b/src/test/ui/generic-associated-types/shadowing.rs
@@ -16,15 +16,19 @@ impl<'a> NoShadow<'a> for &'a u32 {
 }
 
 trait ShadowT<T> {
-    type Bar<T>; //~ ERROR the name `T` is already used
+    type Bar<T>;
+    //~^ ERROR the name `T` is already used
+    //~| ERROR type-generic associated types are not yet implemented
 }
 
 trait NoShadowT<T> {
     type Bar<U>; // OK
+    //~^ ERROR type-generic associated types are not yet implemented
 }
 
 impl<T> NoShadowT<T> for Option<T> {
-    type Bar<T> = i32; //~ ERROR the name `T` is already used
+    type Bar<T> = i32;
+    //~^ ERROR the name `T` is already used
 }
 
 fn main() {}
diff --git a/src/test/ui/rfc1598-generic-associated-types/shadowing.stderr b/src/test/ui/generic-associated-types/shadowing.stderr
index a06c6350845..50c12e822e7 100644
--- a/src/test/ui/rfc1598-generic-associated-types/shadowing.stderr
+++ b/src/test/ui/generic-associated-types/shadowing.stderr
@@ -7,13 +7,29 @@ LL |     type Bar<T>;
    |              ^ already used
 
 error[E0403]: the name `T` is already used for a generic parameter in this item's generic parameters
-  --> $DIR/shadowing.rs:27:14
+  --> $DIR/shadowing.rs:30:14
    |
 LL | impl<T> NoShadowT<T> for Option<T> {
    |      - first use of `T`
 LL |     type Bar<T> = i32;
    |              ^ already used
 
-error: aborting due to 2 previous errors
+error: type-generic associated types are not yet implemented
+  --> $DIR/shadowing.rs:19:5
+   |
+LL |     type Bar<T>;
+   |     ^^^^^^^^^^^^
+   |
+   = note: for more information, see https://github.com/rust-lang/rust/issues/44265
+
+error: type-generic associated types are not yet implemented
+  --> $DIR/shadowing.rs:25:5
+   |
+LL |     type Bar<U>; // OK
+   |     ^^^^^^^^^^^^
+   |
+   = note: for more information, see https://github.com/rust-lang/rust/issues/44265
+
+error: aborting due to 4 previous errors
 
 For more information about this error, try `rustc --explain E0403`.
diff --git a/src/test/ui/rfc1598-generic-associated-types/streaming_iterator.rs b/src/test/ui/generic-associated-types/streaming_iterator.rs
index 4e177fb41d7..d814f7140d9 100644
--- a/src/test/ui/rfc1598-generic-associated-types/streaming_iterator.rs
+++ b/src/test/ui/generic-associated-types/streaming_iterator.rs
@@ -1,30 +1,26 @@
-#![feature(generic_associated_types)]
-//~^ WARNING the feature `generic_associated_types` is incomplete
+// run-pass
 
-// FIXME(#44265): "lifetime argument not allowed on this type" errors will be addressed in a
-// follow-up PR
+#![allow(incomplete_features)]
+#![feature(generic_associated_types)]
 
 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 arguments are not allowed for this type [E0109]
+    fn next<'a>(&'a mut self) -> Option<Self::Item<'a>>;
 }
 
 struct Foo<T: StreamingIterator> {
     // Applying a concrete lifetime to the constructor outside the trait.
     bar: <T as StreamingIterator>::Item<'static>,
-    //~^ ERROR lifetime arguments are not allowed for this type [E0109]
 }
 
 // Users can bound parameters by the type constructed by that trait's associated type constructor
 // of a trait using HRTB. Both type equality bounds and trait bounds of this kind are valid:
-//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 arguments are not allowed for this type [E0109]
+//FIXME(#44265): 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 { /* ... */ }
 
 // Full example of enumerate iterator
 
@@ -36,9 +32,7 @@ struct StreamEnumerate<I> {
 
 impl<I: StreamingIterator> StreamingIterator for StreamEnumerate<I> {
     type Item<'a> = (usize, I::Item<'a>);
-    //~^ ERROR lifetime arguments are not allowed for this type [E0109]
-    fn next<'a>(&'a self) -> Option<Self::Item<'a>> {
-        //~^ ERROR lifetime arguments are not allowed for this type [E0109]
+    fn next<'a>(&'a mut self) -> Option<Self::Item<'a>> {
         match self.iter.next() {
             None => None,
             Some(val) => {
@@ -50,24 +44,34 @@ impl<I: StreamingIterator> StreamingIterator for StreamEnumerate<I> {
     }
 }
 
+impl<I: Iterator> StreamingIterator for I {
+    type Item<'a> = <I as Iterator>::Item;
+    fn next(&mut self) -> Option<<I as StreamingIterator>::Item<'_>> {
+        Iterator::next(self)
+    }
+}
+
 impl<I> StreamEnumerate<I> {
     pub fn new(iter: I) -> Self {
         StreamEnumerate {
             count: 0,
-            iter: iter,
+            iter,
         }
     }
 }
 
 fn test_stream_enumerate() {
     let v = vec!["a", "b", "c"];
-    let se = StreamEnumerate::new(v.iter());
-    let a: &str = se.next().unwrap().1;
-    for (i, s) in se {
-        println!("{} {}", i, s);
+    let mut se = StreamEnumerate::new(v.iter());
+    while let Some(item) = se.next() {
+        assert_eq!(v[item.0], *item.1);
     }
-    println!("{}", a);
+    let x = Foo::<std::slice::Iter<'static, u32>> {
+        bar: &0u32,
+    };
+    assert_eq!(*x.bar, 0u32);
 }
 
-
-fn main() {}
+fn main() {
+    test_stream_enumerate();
+}
diff --git a/src/test/ui/parser/impl-item-type-no-body-semantic-fail.rs b/src/test/ui/parser/impl-item-type-no-body-semantic-fail.rs
index 71c7d4ba21d..9c321c4bd0d 100644
--- a/src/test/ui/parser/impl-item-type-no-body-semantic-fail.rs
+++ b/src/test/ui/parser/impl-item-type-no-body-semantic-fail.rs
@@ -19,4 +19,5 @@ impl X {
     //~| ERROR associated types are not yet supported in inherent impls
     type W where Self: Eq;
     //~^ ERROR associated type in `impl` without body
+    //~| ERROR associated types are not yet supported in inherent impls
 }
diff --git a/src/test/ui/parser/impl-item-type-no-body-semantic-fail.stderr b/src/test/ui/parser/impl-item-type-no-body-semantic-fail.stderr
index 6f1439c8f0b..65e1981e3ac 100644
--- a/src/test/ui/parser/impl-item-type-no-body-semantic-fail.stderr
+++ b/src/test/ui/parser/impl-item-type-no-body-semantic-fail.stderr
@@ -68,6 +68,12 @@ error[E0202]: associated types are not yet supported in inherent impls (see #899
 LL |     type W: Ord where Self: Eq;
    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^
 
-error: aborting due to 9 previous errors
+error[E0202]: associated types are not yet supported in inherent impls (see #8995)
+  --> $DIR/impl-item-type-no-body-semantic-fail.rs:20:5
+   |
+LL |     type W where Self: Eq;
+   |     ^^^^^^^^^^^^^^^^^^^^^^
+
+error: aborting due to 10 previous errors
 
 For more information about this error, try `rustc --explain E0202`.
diff --git a/src/test/ui/qualified/qualified-path-params-2.rs b/src/test/ui/qualified/qualified-path-params-2.rs
index ebdd7490462..d0cc1fa3d51 100644
--- a/src/test/ui/qualified/qualified-path-params-2.rs
+++ b/src/test/ui/qualified/qualified-path-params-2.rs
@@ -16,7 +16,6 @@ impl S {
 }
 
 type A = <S as Tr>::A::f<u8>;
-//~^ ERROR type arguments are not allowed for this type
-//~| ERROR ambiguous associated type
+//~^ ERROR ambiguous associated type
 
 fn main() {}
diff --git a/src/test/ui/qualified/qualified-path-params-2.stderr b/src/test/ui/qualified/qualified-path-params-2.stderr
index 15da5193e88..948f21fce4b 100644
--- a/src/test/ui/qualified/qualified-path-params-2.stderr
+++ b/src/test/ui/qualified/qualified-path-params-2.stderr
@@ -1,16 +1,9 @@
-error[E0109]: type arguments are not allowed for this type
-  --> $DIR/qualified-path-params-2.rs:18:26
-   |
-LL | type A = <S as Tr>::A::f<u8>;
-   |                          ^^ type argument not allowed
-
 error[E0223]: ambiguous associated type
   --> $DIR/qualified-path-params-2.rs:18:10
    |
 LL | type A = <S as Tr>::A::f<u8>;
    |          ^^^^^^^^^^^^^^^^^^^ help: use fully-qualified syntax: `<<S as Tr>::A as Trait>::f`
 
-error: aborting due to 2 previous errors
+error: aborting due to previous error
 
-Some errors have detailed explanations: E0109, E0223.
-For more information about an error, try `rustc --explain E0109`.
+For more information about this error, try `rustc --explain E0223`.
diff --git a/src/test/ui/rfc1598-generic-associated-types/collections.stderr b/src/test/ui/rfc1598-generic-associated-types/collections.stderr
deleted file mode 100644
index fa8fcc99240..00000000000
--- a/src/test/ui/rfc1598-generic-associated-types/collections.stderr
+++ /dev/null
@@ -1,41 +0,0 @@
-warning: the feature `generic_associated_types` is incomplete and may cause the compiler to crash
-  --> $DIR/collections.rs:1:12
-   |
-LL | #![feature(generic_associated_types)]
-   |            ^^^^^^^^^^^^^^^^^^^^^^^^
-   |
-   = note: `#[warn(incomplete_features)]` on by default
-
-error[E0109]: type arguments are not allowed for this type
-  --> $DIR/collections.rs:56:90
-   |
-LL | fn floatify<C>(ints: &C) -> <<C as Collection<i32>>::Family as CollectionFamily>::Member<f32>
-   |                                                                                          ^^^ type argument not allowed
-
-error[E0109]: type arguments are not allowed for this type
-  --> $DIR/collections.rs:68:69
-   |
-LL | fn floatify_sibling<C>(ints: &C) -> <C as Collection<i32>>::Sibling<f32>
-   |                                                                     ^^^ type argument not allowed
-
-error[E0109]: type arguments are not allowed for this type
-  --> $DIR/collections.rs:17:71
-   |
-LL |         <<Self as Collection<T>>::Family as CollectionFamily>::Member<U>;
-   |                                                                       ^ type argument not allowed
-
-error[E0109]: lifetime arguments are not allowed for this type
-  --> $DIR/collections.rs:24:50
-   |
-LL |     fn iterate<'iter>(&'iter self) -> Self::Iter<'iter>;
-   |                                                  ^^^^^ lifetime argument not allowed
-
-error[E0109]: lifetime arguments are not allowed for this type
-  --> $DIR/collections.rs:50:50
-   |
-LL |     fn iterate<'iter>(&'iter self) -> Self::Iter<'iter> {
-   |                                                  ^^^^^ lifetime argument not allowed
-
-error: aborting due to 5 previous errors
-
-For more information about this error, try `rustc --explain E0109`.
diff --git a/src/test/ui/rfc1598-generic-associated-types/construct_with_other_type.rs b/src/test/ui/rfc1598-generic-associated-types/construct_with_other_type.rs
deleted file mode 100644
index 3a459a4551c..00000000000
--- a/src/test/ui/rfc1598-generic-associated-types/construct_with_other_type.rs
+++ /dev/null
@@ -1,29 +0,0 @@
-#![feature(generic_associated_types)]
-//~^ WARNING the feature `generic_associated_types` is incomplete
-
-use std::ops::Deref;
-
-// FIXME(#44265): "lifetime arguments are not allowed for this type" errors will be addressed in a
-// follow-up PR.
-
-trait Foo {
-    type Bar<'a, 'b>;
-}
-
-trait Baz {
-    type Quux<'a>: Foo;
-
-    // This weird type tests that we can use universal function call syntax to access the Item on
-    type Baa<'a>: Deref<Target = <Self::Quux<'a> as Foo>::Bar<'a, 'static>>;
-    //~^ ERROR lifetime arguments are not allowed for this type [E0109]
-    //~| ERROR lifetime arguments are not allowed for this type [E0109]
-}
-
-impl<T> Baz for T where T: Foo {
-    type Quux<'a> = T;
-
-    type Baa<'a> = &'a <T as Foo>::Bar<'a, 'static>;
-    //~^ ERROR lifetime arguments are not allowed for this type [E0109]
-}
-
-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
deleted file mode 100644
index ab161ae21bb..00000000000
--- a/src/test/ui/rfc1598-generic-associated-types/construct_with_other_type.stderr
+++ /dev/null
@@ -1,29 +0,0 @@
-warning: the feature `generic_associated_types` is incomplete and may cause the compiler to crash
-  --> $DIR/construct_with_other_type.rs:1:12
-   |
-LL | #![feature(generic_associated_types)]
-   |            ^^^^^^^^^^^^^^^^^^^^^^^^
-   |
-   = note: `#[warn(incomplete_features)]` on by default
-
-error[E0109]: lifetime arguments are not allowed for this type
-  --> $DIR/construct_with_other_type.rs:17:46
-   |
-LL |     type Baa<'a>: Deref<Target = <Self::Quux<'a> as Foo>::Bar<'a, 'static>>;
-   |                                              ^^ lifetime argument not allowed
-
-error[E0109]: lifetime arguments are not allowed for this type
-  --> $DIR/construct_with_other_type.rs:17:63
-   |
-LL |     type Baa<'a>: Deref<Target = <Self::Quux<'a> as Foo>::Bar<'a, 'static>>;
-   |                                                               ^^ lifetime argument not allowed
-
-error[E0109]: lifetime arguments are not allowed for this type
-  --> $DIR/construct_with_other_type.rs:25:40
-   |
-LL |     type Baa<'a> = &'a <T as Foo>::Bar<'a, 'static>;
-   |                                        ^^ lifetime argument not allowed
-
-error: aborting due to 3 previous errors
-
-For more information about this error, try `rustc --explain E0109`.
diff --git a/src/test/ui/rfc1598-generic-associated-types/empty_generics.stderr b/src/test/ui/rfc1598-generic-associated-types/empty_generics.stderr
deleted file mode 100644
index 9c8d3f192da..00000000000
--- a/src/test/ui/rfc1598-generic-associated-types/empty_generics.stderr
+++ /dev/null
@@ -1,16 +0,0 @@
-error: expected one of `>`, `const`, identifier, or lifetime, found `,`
-  --> $DIR/empty_generics.rs:5:14
-   |
-LL |     type Bar<,>;
-   |              ^ expected one of `>`, `const`, identifier, or lifetime
-
-warning: the feature `generic_associated_types` is incomplete and may cause the compiler to crash
-  --> $DIR/empty_generics.rs:1:12
-   |
-LL | #![feature(generic_associated_types)]
-   |            ^^^^^^^^^^^^^^^^^^^^^^^^
-   |
-   = note: `#[warn(incomplete_features)]` on by default
-
-error: aborting due to previous error
-
diff --git a/src/test/ui/rfc1598-generic-associated-types/gat-dont-ice-on-absent-feature.stderr b/src/test/ui/rfc1598-generic-associated-types/gat-dont-ice-on-absent-feature.stderr
deleted file mode 100644
index fb43a50df78..00000000000
--- a/src/test/ui/rfc1598-generic-associated-types/gat-dont-ice-on-absent-feature.stderr
+++ /dev/null
@@ -1,12 +0,0 @@
-error[E0658]: generic associated types are unstable
-  --> $DIR/gat-dont-ice-on-absent-feature.rs:7:5
-   |
-LL |     type Item<'b> = &'b Foo;
-   |     ^^^^^^^^^^^^^^^^^^^^^^^^
-   |
-   = note: for more information, see https://github.com/rust-lang/rust/issues/44265
-   = help: add `#![feature(generic_associated_types)]` to the crate attributes to enable
-
-error: aborting due to previous error
-
-For more information about this error, try `rustc --explain E0658`.
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
deleted file mode 100644
index 0d319a7a599..00000000000
--- a/src/test/ui/rfc1598-generic-associated-types/generic-associated-types-where.stderr
+++ /dev/null
@@ -1,8 +0,0 @@
-warning: the feature `generic_associated_types` is incomplete and may cause the compiler to crash
-  --> $DIR/generic-associated-types-where.rs:1:12
-   |
-LL | #![feature(generic_associated_types)]
-   |            ^^^^^^^^^^^^^^^^^^^^^^^^
-   |
-   = note: `#[warn(incomplete_features)]` on by default
-
diff --git a/src/test/ui/rfc1598-generic-associated-types/generic_associated_type_undeclared_lifetimes.rs b/src/test/ui/rfc1598-generic-associated-types/generic_associated_type_undeclared_lifetimes.rs
deleted file mode 100644
index 150899a034b..00000000000
--- a/src/test/ui/rfc1598-generic-associated-types/generic_associated_type_undeclared_lifetimes.rs
+++ /dev/null
@@ -1,22 +0,0 @@
-#![feature(generic_associated_types)]
-//~^ WARNING the feature `generic_associated_types` is incomplete
-
-use std::ops::Deref;
-
-// FIXME(#44265): "lifetime arguments are not allowed for this type" errors will be addressed in a
-// follow-up PR.
-
-trait Iterable {
-    type Item<'a>;
-    type Iter<'a>: Iterator<Item = Self::Item<'a>>
-    //~^ ERROR lifetime arguments are not allowed for this type [E0109]
-        + Deref<Target = Self::Item<'b>>;
-    //~^ ERROR undeclared lifetime
-    //~| ERROR lifetime arguments are not allowed for this type [E0109]
-
-    fn iter<'a>(&'a self) -> Self::Iter<'undeclared>;
-    //~^ ERROR undeclared lifetime
-    //~| ERROR lifetime arguments are not allowed for this type [E0109]
-}
-
-fn main() {}
diff --git a/src/test/ui/rfc1598-generic-associated-types/generic_associated_type_undeclared_lifetimes.stderr b/src/test/ui/rfc1598-generic-associated-types/generic_associated_type_undeclared_lifetimes.stderr
deleted file mode 100644
index 40ea42f6243..00000000000
--- a/src/test/ui/rfc1598-generic-associated-types/generic_associated_type_undeclared_lifetimes.stderr
+++ /dev/null
@@ -1,42 +0,0 @@
-warning: the feature `generic_associated_types` is incomplete and may cause the compiler to crash
-  --> $DIR/generic_associated_type_undeclared_lifetimes.rs:1:12
-   |
-LL | #![feature(generic_associated_types)]
-   |            ^^^^^^^^^^^^^^^^^^^^^^^^
-   |
-   = note: `#[warn(incomplete_features)]` on by default
-
-error[E0261]: use of undeclared lifetime name `'b`
-  --> $DIR/generic_associated_type_undeclared_lifetimes.rs:13:37
-   |
-LL |         + Deref<Target = Self::Item<'b>>;
-   |                                     ^^ undeclared lifetime
-
-error[E0261]: use of undeclared lifetime name `'undeclared`
-  --> $DIR/generic_associated_type_undeclared_lifetimes.rs:17:41
-   |
-LL |     fn iter<'a>(&'a self) -> Self::Iter<'undeclared>;
-   |                                         ^^^^^^^^^^^ undeclared lifetime
-
-error[E0109]: lifetime arguments are not allowed for this type
-  --> $DIR/generic_associated_type_undeclared_lifetimes.rs:11:47
-   |
-LL |     type Iter<'a>: Iterator<Item = Self::Item<'a>>
-   |                                               ^^ lifetime argument not allowed
-
-error[E0109]: lifetime arguments are not allowed for this type
-  --> $DIR/generic_associated_type_undeclared_lifetimes.rs:13:37
-   |
-LL |         + Deref<Target = Self::Item<'b>>;
-   |                                     ^^ lifetime argument not allowed
-
-error[E0109]: lifetime arguments are not allowed for this type
-  --> $DIR/generic_associated_type_undeclared_lifetimes.rs:17:41
-   |
-LL |     fn iter<'a>(&'a self) -> Self::Iter<'undeclared>;
-   |                                         ^^^^^^^^^^^ lifetime argument not allowed
-
-error: aborting due to 5 previous errors
-
-Some errors have detailed explanations: E0109, E0261.
-For more information about an error, try `rustc --explain E0109`.
diff --git a/src/test/ui/rfc1598-generic-associated-types/iterable.rs b/src/test/ui/rfc1598-generic-associated-types/iterable.rs
deleted file mode 100644
index 29953b9db1a..00000000000
--- a/src/test/ui/rfc1598-generic-associated-types/iterable.rs
+++ /dev/null
@@ -1,50 +0,0 @@
-#![feature(generic_associated_types)]
-//~^ WARNING the feature `generic_associated_types` is incomplete
-
-use std::ops::Deref;
-
-// FIXME(#44265): "lifetime arguments are not allowed for this type" errors will be addressed in a
-// follow-up PR.
-
-trait Iterable {
-    type Item<'a>;
-    type Iter<'a>: Iterator<Item = Self::Item<'a>>;
-    //~^ ERROR lifetime arguments are not allowed for this type [E0109]
-
-    fn iter<'a>(&'a self) -> Self::Iter<'a>;
-    //~^ ERROR lifetime arguments are not allowed for this type [E0109]
-}
-
-// Impl for struct type
-impl<T> Iterable for Vec<T> {
-    type Item<'a> = &'a T;
-    type Iter<'a> = std::slice::Iter<'a, T>;
-
-    fn iter<'a>(&'a self) -> Self::Iter<'a> {
-    //~^ ERROR lifetime arguments are not allowed for this type [E0109]
-        self.iter()
-    }
-}
-
-// Impl for a primitive type
-impl<T> Iterable for [T] {
-    type Item<'a> = &'a T;
-    type Iter<'a> = std::slice::Iter<'a, T>;
-
-    fn iter<'a>(&'a self) -> Self::Iter<'a> {
-    //~^ ERROR lifetime arguments are not allowed for this type [E0109]
-        self.iter()
-    }
-}
-
-fn make_iter<'a, I: Iterable>(it: &'a I) -> I::Iter<'a> {
-    //~^ ERROR lifetime arguments are not allowed for this type [E0109]
-    it.iter()
-}
-
-fn get_first<'a, I: Iterable>(it: &'a I) -> Option<I::Item<'a>> {
-    //~^ ERROR lifetime arguments are not allowed for this type [E0109]
-    it.iter().next()
-}
-
-fn main() {}
diff --git a/src/test/ui/rfc1598-generic-associated-types/iterable.stderr b/src/test/ui/rfc1598-generic-associated-types/iterable.stderr
deleted file mode 100644
index 51246d3c902..00000000000
--- a/src/test/ui/rfc1598-generic-associated-types/iterable.stderr
+++ /dev/null
@@ -1,47 +0,0 @@
-warning: the feature `generic_associated_types` is incomplete and may cause the compiler to crash
-  --> $DIR/iterable.rs:1:12
-   |
-LL | #![feature(generic_associated_types)]
-   |            ^^^^^^^^^^^^^^^^^^^^^^^^
-   |
-   = note: `#[warn(incomplete_features)]` on by default
-
-error[E0109]: lifetime arguments are not allowed for this type
-  --> $DIR/iterable.rs:11:47
-   |
-LL |     type Iter<'a>: Iterator<Item = Self::Item<'a>>;
-   |                                               ^^ lifetime argument not allowed
-
-error[E0109]: lifetime arguments are not allowed for this type
-  --> $DIR/iterable.rs:40:53
-   |
-LL | fn make_iter<'a, I: Iterable>(it: &'a I) -> I::Iter<'a> {
-   |                                                     ^^ lifetime argument not allowed
-
-error[E0109]: lifetime arguments are not allowed for this type
-  --> $DIR/iterable.rs:45:60
-   |
-LL | fn get_first<'a, I: Iterable>(it: &'a I) -> Option<I::Item<'a>> {
-   |                                                            ^^ lifetime argument not allowed
-
-error[E0109]: lifetime arguments are not allowed for this type
-  --> $DIR/iterable.rs:14:41
-   |
-LL |     fn iter<'a>(&'a self) -> Self::Iter<'a>;
-   |                                         ^^ lifetime argument not allowed
-
-error[E0109]: lifetime arguments are not allowed for this type
-  --> $DIR/iterable.rs:23:41
-   |
-LL |     fn iter<'a>(&'a self) -> Self::Iter<'a> {
-   |                                         ^^ lifetime argument not allowed
-
-error[E0109]: lifetime arguments are not allowed for this type
-  --> $DIR/iterable.rs:34:41
-   |
-LL |     fn iter<'a>(&'a self) -> Self::Iter<'a> {
-   |                                         ^^ lifetime argument not allowed
-
-error: aborting due to 6 previous errors
-
-For more information about this error, try `rustc --explain E0109`.
diff --git a/src/test/ui/rfc1598-generic-associated-types/parameter_number_and_kind.rs b/src/test/ui/rfc1598-generic-associated-types/parameter_number_and_kind.rs
deleted file mode 100644
index aa3f4b186da..00000000000
--- a/src/test/ui/rfc1598-generic-associated-types/parameter_number_and_kind.rs
+++ /dev/null
@@ -1,47 +0,0 @@
-#![feature(generic_associated_types)]
-//~^ WARNING the feature `generic_associated_types` is incomplete
-#![feature(associated_type_defaults)]
-
-// FIXME(#44265): "lifetime arguments are not allowed for this type" errors will be addressed in a
-// follow-up PR.
-
-// FIXME(#44265): Update expected errors once E110 is resolved, now does not get past `trait Foo`.
-
-trait Foo {
-    type A<'a>;
-    type B<'a, 'b>;
-    type C;
-    type D<T>;
-    type E<'a, T>;
-    // Test parameters in default values
-    type FOk<T> = Self::E<'static, T>;
-    //~^ ERROR type arguments are not allowed for this type [E0109]
-    //~| ERROR lifetime arguments are not allowed for this type [E0109]
-    type FErr1 = Self::E<'static, 'static>; // Error
-    //~^ ERROR lifetime arguments are not allowed for this type [E0109]
-    type FErr2<T> = Self::E<'static, T, u32>; // Error
-    //~^ ERROR type arguments are not allowed for this type [E0109]
-    //~| ERROR lifetime arguments are not allowed for this type [E0109]
-}
-
-struct Fooy;
-
-impl Foo for Fooy {
-    type A = u32; // Error: parameter expected
-    type B<'a, T> = Vec<T>; // Error: lifetime param expected
-    type C<'a> = u32; // Error: no param expected
-    type D<'a> = u32; // Error: type param expected
-    type E<T, U> = u32; // Error: lifetime expected as the first param
-}
-
-struct Fooer;
-
-impl Foo for Fooer {
-    type A<T> = u32; // Error: lifetime parameter expected
-    type B<'a> = u32; // Error: another lifetime param expected
-    type C<T> = T; // Error: no param expected
-    type D<'b, T> = u32; // Error: unexpected lifetime param
-    type E<'a, 'b> = u32; // Error: type expected as the second param
-}
-
-fn main() {}
diff --git a/src/test/ui/rfc1598-generic-associated-types/parameter_number_and_kind.stderr b/src/test/ui/rfc1598-generic-associated-types/parameter_number_and_kind.stderr
deleted file mode 100644
index 65dbd00c5b1..00000000000
--- a/src/test/ui/rfc1598-generic-associated-types/parameter_number_and_kind.stderr
+++ /dev/null
@@ -1,41 +0,0 @@
-warning: the feature `generic_associated_types` is incomplete and may cause the compiler to crash
-  --> $DIR/parameter_number_and_kind.rs:1:12
-   |
-LL | #![feature(generic_associated_types)]
-   |            ^^^^^^^^^^^^^^^^^^^^^^^^
-   |
-   = note: `#[warn(incomplete_features)]` on by default
-
-error[E0109]: lifetime arguments are not allowed for this type
-  --> $DIR/parameter_number_and_kind.rs:17:27
-   |
-LL |     type FOk<T> = Self::E<'static, T>;
-   |                           ^^^^^^^ lifetime argument not allowed
-
-error[E0109]: type arguments are not allowed for this type
-  --> $DIR/parameter_number_and_kind.rs:17:36
-   |
-LL |     type FOk<T> = Self::E<'static, T>;
-   |                                    ^ type argument not allowed
-
-error[E0109]: lifetime arguments are not allowed for this type
-  --> $DIR/parameter_number_and_kind.rs:20:26
-   |
-LL |     type FErr1 = Self::E<'static, 'static>; // Error
-   |                          ^^^^^^^ lifetime argument not allowed
-
-error[E0109]: lifetime arguments are not allowed for this type
-  --> $DIR/parameter_number_and_kind.rs:22:29
-   |
-LL |     type FErr2<T> = Self::E<'static, T, u32>; // Error
-   |                             ^^^^^^^ lifetime argument not allowed
-
-error[E0109]: type arguments are not allowed for this type
-  --> $DIR/parameter_number_and_kind.rs:22:38
-   |
-LL |     type FErr2<T> = Self::E<'static, T, u32>; // Error
-   |                                      ^ type argument not allowed
-
-error: aborting due to 5 previous errors
-
-For more information about this error, try `rustc --explain E0109`.
diff --git a/src/test/ui/rfc1598-generic-associated-types/pointer_family.stderr b/src/test/ui/rfc1598-generic-associated-types/pointer_family.stderr
deleted file mode 100644
index 626495350a7..00000000000
--- a/src/test/ui/rfc1598-generic-associated-types/pointer_family.stderr
+++ /dev/null
@@ -1,35 +0,0 @@
-warning: the feature `generic_associated_types` is incomplete and may cause the compiler to crash
-  --> $DIR/pointer_family.rs:1:12
-   |
-LL | #![feature(generic_associated_types)]
-   |            ^^^^^^^^^^^^^^^^^^^^^^^^
-   |
-   = note: `#[warn(incomplete_features)]` on by default
-
-error[E0109]: type arguments are not allowed for this type
-  --> $DIR/pointer_family.rs:37:21
-   |
-LL |     bar: P::Pointer<String>,
-   |                     ^^^^^^ type argument not allowed
-
-error[E0109]: type arguments are not allowed for this type
-  --> $DIR/pointer_family.rs:12:42
-   |
-LL |     fn new<T>(value: T) -> Self::Pointer<T>;
-   |                                          ^ type argument not allowed
-
-error[E0109]: type arguments are not allowed for this type
-  --> $DIR/pointer_family.rs:20:42
-   |
-LL |     fn new<T>(value: T) -> Self::Pointer<T> {
-   |                                          ^ type argument not allowed
-
-error[E0109]: type arguments are not allowed for this type
-  --> $DIR/pointer_family.rs:30:42
-   |
-LL |     fn new<T>(value: T) -> Self::Pointer<T> {
-   |                                          ^ type argument not allowed
-
-error: aborting due to 4 previous errors
-
-For more information about this error, try `rustc --explain E0109`.
diff --git a/src/test/ui/rfc1598-generic-associated-types/streaming_iterator.stderr b/src/test/ui/rfc1598-generic-associated-types/streaming_iterator.stderr
deleted file mode 100644
index 09dd654b575..00000000000
--- a/src/test/ui/rfc1598-generic-associated-types/streaming_iterator.stderr
+++ /dev/null
@@ -1,41 +0,0 @@
-warning: the feature `generic_associated_types` is incomplete and may cause the compiler to crash
-  --> $DIR/streaming_iterator.rs:1:12
-   |
-LL | #![feature(generic_associated_types)]
-   |            ^^^^^^^^^^^^^^^^^^^^^^^^
-   |
-   = note: `#[warn(incomplete_features)]` on by default
-
-error[E0109]: lifetime arguments are not allowed for this type
-  --> $DIR/streaming_iterator.rs:18:41
-   |
-LL |     bar: <T as StreamingIterator>::Item<'static>,
-   |                                         ^^^^^^^ lifetime argument not allowed
-
-error[E0109]: lifetime arguments are not allowed for this type
-  --> $DIR/streaming_iterator.rs:26:64
-   |
-LL | fn foo<T>(iter: T) where T: StreamingIterator, for<'a> T::Item<'a>: Display { /* ... */ }
-   |                                                                ^^ lifetime argument not allowed
-
-error[E0109]: lifetime arguments are not allowed for this type
-  --> $DIR/streaming_iterator.rs:12:48
-   |
-LL |     fn next<'a>(&'a self) -> Option<Self::Item<'a>>;
-   |                                                ^^ lifetime argument not allowed
-
-error[E0109]: lifetime arguments are not allowed for this type
-  --> $DIR/streaming_iterator.rs:38:37
-   |
-LL |     type Item<'a> = (usize, I::Item<'a>);
-   |                                     ^^ lifetime argument not allowed
-
-error[E0109]: lifetime arguments are not allowed for this type
-  --> $DIR/streaming_iterator.rs:40:48
-   |
-LL |     fn next<'a>(&'a self) -> Option<Self::Item<'a>> {
-   |                                                ^^ lifetime argument not allowed
-
-error: aborting due to 5 previous errors
-
-For more information about this error, try `rustc --explain E0109`.
diff --git a/src/test/ui/structs/struct-path-associated-type.rs b/src/test/ui/structs/struct-path-associated-type.rs
index 15b37facc50..e44a203b783 100644
--- a/src/test/ui/structs/struct-path-associated-type.rs
+++ b/src/test/ui/structs/struct-path-associated-type.rs
@@ -31,7 +31,6 @@ fn g<T: Tr<A = S>>() {
 fn main() {
     let s = S::A {}; //~ ERROR ambiguous associated type
     let z = S::A::<u8> {}; //~ ERROR ambiguous associated type
-    //~^ ERROR type arguments are not allowed for this type
     match S {
         S::A {} => {} //~ ERROR ambiguous associated type
     }
diff --git a/src/test/ui/structs/struct-path-associated-type.stderr b/src/test/ui/structs/struct-path-associated-type.stderr
index 7cfbd7b720b..f8a2c7c6b6c 100644
--- a/src/test/ui/structs/struct-path-associated-type.stderr
+++ b/src/test/ui/structs/struct-path-associated-type.stderr
@@ -34,12 +34,6 @@ error[E0223]: ambiguous associated type
 LL |     let s = S::A {};
    |             ^^^^ help: use fully-qualified syntax: `<S as Trait>::A`
 
-error[E0109]: type arguments are not allowed for this type
-  --> $DIR/struct-path-associated-type.rs:33:20
-   |
-LL |     let z = S::A::<u8> {};
-   |                    ^^ type argument not allowed
-
 error[E0223]: ambiguous associated type
   --> $DIR/struct-path-associated-type.rs:33:13
    |
@@ -47,12 +41,12 @@ LL |     let z = S::A::<u8> {};
    |             ^^^^^^^^^^ help: use fully-qualified syntax: `<S as Trait>::A`
 
 error[E0223]: ambiguous associated type
-  --> $DIR/struct-path-associated-type.rs:36:9
+  --> $DIR/struct-path-associated-type.rs:35:9
    |
 LL |         S::A {} => {}
    |         ^^^^ help: use fully-qualified syntax: `<S as Trait>::A`
 
-error: aborting due to 9 previous errors
+error: aborting due to 8 previous errors
 
 Some errors have detailed explanations: E0071, E0109, E0223.
 For more information about an error, try `rustc --explain E0071`.
diff --git a/src/test/ui/suggestions/let-binding-init-expr-as-ty.rs b/src/test/ui/suggestions/let-binding-init-expr-as-ty.rs
index 94c72a31e5e..06ee421fc32 100644
--- a/src/test/ui/suggestions/let-binding-init-expr-as-ty.rs
+++ b/src/test/ui/suggestions/let-binding-init-expr-as-ty.rs
@@ -1,7 +1,6 @@
 pub fn foo(num: i32) -> i32 {
     let foo: i32::from_be(num);
     //~^ ERROR expected type, found local variable `num`
-    //~| ERROR type arguments are not allowed for this type
     //~| ERROR parenthesized type parameters may only be used with a `Fn` trait
     //~| ERROR ambiguous associated type
     foo
diff --git a/src/test/ui/suggestions/let-binding-init-expr-as-ty.stderr b/src/test/ui/suggestions/let-binding-init-expr-as-ty.stderr
index 5353b3a75b2..63ba7893f04 100644
--- a/src/test/ui/suggestions/let-binding-init-expr-as-ty.stderr
+++ b/src/test/ui/suggestions/let-binding-init-expr-as-ty.stderr
@@ -15,19 +15,13 @@ LL |     let foo: i32::from_be(num);
    |                   only `Fn` traits may use parentheses
    |                   help: use angle brackets instead: `from_be<num>`
 
-error[E0109]: type arguments are not allowed for this type
-  --> $DIR/let-binding-init-expr-as-ty.rs:2:27
-   |
-LL |     let foo: i32::from_be(num);
-   |                           ^^^ type argument not allowed
-
 error[E0223]: ambiguous associated type
   --> $DIR/let-binding-init-expr-as-ty.rs:2:14
    |
 LL |     let foo: i32::from_be(num);
    |              ^^^^^^^^^^^^^^^^^ help: use fully-qualified syntax: `<i32 as Trait>::from_be`
 
-error: aborting due to 4 previous errors
+error: aborting due to 3 previous errors
 
-Some errors have detailed explanations: E0109, E0214, E0223, E0573.
-For more information about an error, try `rustc --explain E0109`.
+Some errors have detailed explanations: E0214, E0223, E0573.
+For more information about an error, try `rustc --explain E0214`.