about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorOlivier FAURE <couteaubleu@gmail.com>2021-02-25 14:09:52 +0100
committerOlivier FAURE <couteaubleu@gmail.com>2021-02-25 14:10:25 +0100
commit4f4e15d5eb9750c4ac8c140207612122562d6c51 (patch)
tree748663a23ca79d733a7c3836b4f10b2bb59c2f62 /src
parent89d32eb1ea44b3d739feb3c2a77adbba1e39b8e6 (diff)
downloadrust-4f4e15d5eb9750c4ac8c140207612122562d6c51.tar.gz
rust-4f4e15d5eb9750c4ac8c140207612122562d6c51.zip
Add feature gate for inherent associate types.
Diffstat (limited to 'src')
-rw-r--r--src/test/ui/assoc-inherent.rs17
-rw-r--r--src/test/ui/assoc-inherent.stderr20
-rw-r--r--src/test/ui/feature-gates/feature-gate-inherent_associated_types.rs10
-rw-r--r--src/test/ui/feature-gates/feature-gate-inherent_associated_types.stderr12
-rw-r--r--src/test/ui/parser/impl-item-type-no-body-semantic-fail.rs8
-rw-r--r--src/test/ui/parser/impl-item-type-no-body-semantic-fail.stderr22
6 files changed, 71 insertions, 18 deletions
diff --git a/src/test/ui/assoc-inherent.rs b/src/test/ui/assoc-inherent.rs
index 05329a27142..c579c962ffc 100644
--- a/src/test/ui/assoc-inherent.rs
+++ b/src/test/ui/assoc-inherent.rs
@@ -1,9 +1,20 @@
-// Test associated types are, until #8995 is implemented, forbidden in inherent impls.
+// Test that inherent associated types work with
+// inherent_associated_types feature gate.
+
+#![feature(inherent_associated_types)]
+#![allow(incomplete_features)]
 
 struct Foo;
 
 impl Foo {
-    type Bar = isize; //~ERROR associated types are not yet supported in inherent impls (see #8995)
+    type Bar = isize;
 }
 
-fn main() {}
+impl Foo {
+    type Baz; //~ ERROR associated type in `impl` without body
+}
+
+fn main() {
+    let x : Foo::Bar; //~ERROR ambiguous associated type
+    x = 0isize;
+}
diff --git a/src/test/ui/assoc-inherent.stderr b/src/test/ui/assoc-inherent.stderr
index f9ea3365cb8..b703453fa03 100644
--- a/src/test/ui/assoc-inherent.stderr
+++ b/src/test/ui/assoc-inherent.stderr
@@ -1,9 +1,17 @@
-error[E0202]: associated types are not yet supported in inherent impls (see #8995)
-  --> $DIR/assoc-inherent.rs:6:5
+error: associated type in `impl` without body
+  --> $DIR/assoc-inherent.rs:14:5
    |
-LL |     type Bar = isize;
-   |     ^^^^^^^^^^^^^^^^^
+LL |     type Baz;
+   |     ^^^^^^^^-
+   |             |
+   |             help: provide a definition for the type: `= <type>;`
 
-error: aborting due to previous error
+error[E0223]: ambiguous associated type
+  --> $DIR/assoc-inherent.rs:18:13
+   |
+LL |     let x : Foo::Bar;
+   |             ^^^^^^^^ help: use fully-qualified syntax: `<Foo as Trait>::Bar`
+
+error: aborting due to 2 previous errors
 
-For more information about this error, try `rustc --explain E0202`.
+For more information about this error, try `rustc --explain E0223`.
diff --git a/src/test/ui/feature-gates/feature-gate-inherent_associated_types.rs b/src/test/ui/feature-gates/feature-gate-inherent_associated_types.rs
new file mode 100644
index 00000000000..fc7c6dbc02e
--- /dev/null
+++ b/src/test/ui/feature-gates/feature-gate-inherent_associated_types.rs
@@ -0,0 +1,10 @@
+// Test that inherent associated types cannot be used when inherent_associated_types
+// feature gate is not used.
+
+struct Foo;
+
+impl Foo {
+    type Bar = isize; //~ERROR inherent associated types are unstable
+}
+
+fn main() {}
diff --git a/src/test/ui/feature-gates/feature-gate-inherent_associated_types.stderr b/src/test/ui/feature-gates/feature-gate-inherent_associated_types.stderr
new file mode 100644
index 00000000000..76e65d239f8
--- /dev/null
+++ b/src/test/ui/feature-gates/feature-gate-inherent_associated_types.stderr
@@ -0,0 +1,12 @@
+error[E0658]: inherent associated types are unstable
+  --> $DIR/feature-gate-inherent_associated_types.rs:7:5
+   |
+LL |     type Bar = isize;
+   |     ^^^^^^^^^^^^^^^^^
+   |
+   = note: see issue #8995 <https://github.com/rust-lang/rust/issues/8995> for more information
+   = help: add `#![feature(inherent_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/parser/impl-item-type-no-body-semantic-fail.rs b/src/test/ui/parser/impl-item-type-no-body-semantic-fail.rs
index fa9c7ababcf..1ccc9497d9d 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
@@ -8,16 +8,16 @@ struct X;
 impl X {
     type Y;
     //~^ ERROR associated type in `impl` without body
-    //~| ERROR associated types are not yet supported in inherent impls
+    //~| ERROR inherent associated types are unstable
     type Z: Ord;
     //~^ ERROR associated type in `impl` without body
     //~| ERROR bounds on `type`s in `impl`s have no effect
-    //~| ERROR associated types are not yet supported in inherent impls
+    //~| ERROR inherent associated types are unstable
     type W: Ord where Self: Eq;
     //~^ ERROR associated type in `impl` without body
     //~| ERROR bounds on `type`s in `impl`s have no effect
-    //~| ERROR associated types are not yet supported in inherent impls
+    //~| ERROR inherent associated types are unstable
     type W where Self: Eq;
     //~^ ERROR associated type in `impl` without body
-    //~| ERROR associated types are not yet supported in inherent impls
+    //~| ERROR inherent associated types are unstable
 }
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 214467793bc..818d73c898d 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
@@ -51,30 +51,42 @@ LL | #![feature(generic_associated_types)]
    = note: `#[warn(incomplete_features)]` on by default
    = note: see issue #44265 <https://github.com/rust-lang/rust/issues/44265> for more information
 
-error[E0202]: associated types are not yet supported in inherent impls (see #8995)
+error[E0658]: inherent associated types are unstable
   --> $DIR/impl-item-type-no-body-semantic-fail.rs:9:5
    |
 LL |     type Y;
    |     ^^^^^^^
+   |
+   = note: see issue #8995 <https://github.com/rust-lang/rust/issues/8995> for more information
+   = help: add `#![feature(inherent_associated_types)]` to the crate attributes to enable
 
-error[E0202]: associated types are not yet supported in inherent impls (see #8995)
+error[E0658]: inherent associated types are unstable
   --> $DIR/impl-item-type-no-body-semantic-fail.rs:12:5
    |
 LL |     type Z: Ord;
    |     ^^^^^^^^^^^^
+   |
+   = note: see issue #8995 <https://github.com/rust-lang/rust/issues/8995> for more information
+   = help: add `#![feature(inherent_associated_types)]` to the crate attributes to enable
 
-error[E0202]: associated types are not yet supported in inherent impls (see #8995)
+error[E0658]: inherent associated types are unstable
   --> $DIR/impl-item-type-no-body-semantic-fail.rs:16:5
    |
 LL |     type W: Ord where Self: Eq;
    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^
+   |
+   = note: see issue #8995 <https://github.com/rust-lang/rust/issues/8995> for more information
+   = help: add `#![feature(inherent_associated_types)]` to the crate attributes to enable
 
-error[E0202]: associated types are not yet supported in inherent impls (see #8995)
+error[E0658]: inherent associated types are unstable
   --> $DIR/impl-item-type-no-body-semantic-fail.rs:20:5
    |
 LL |     type W where Self: Eq;
    |     ^^^^^^^^^^^^^^^^^^^^^^
+   |
+   = note: see issue #8995 <https://github.com/rust-lang/rust/issues/8995> for more information
+   = help: add `#![feature(inherent_associated_types)]` to the crate attributes to enable
 
 error: aborting due to 10 previous errors; 1 warning emitted
 
-For more information about this error, try `rustc --explain E0202`.
+For more information about this error, try `rustc --explain E0658`.