about summary refs log tree commit diff
diff options
context:
space:
mode:
authorAlex Burka <aburka@seas.upenn.edu>2017-12-03 12:55:22 -0500
committerAlex Burka <aburka@seas.upenn.edu>2017-12-14 12:56:26 -0500
commit4f0b4f267f98e9ec719ee5ac1aaa2a39467ffc98 (patch)
treea37ef20957f0d445fc7c99fdd7ac3a257d1a380b
parent4029a0198433a4b03dc4b4529164ee4872fc2834 (diff)
downloadrust-4f0b4f267f98e9ec719ee5ac1aaa2a39467ffc98.tar.gz
rust-4f0b4f267f98e9ec719ee5ac1aaa2a39467ffc98.zip
feature gate trait aliases
-rw-r--r--src/libsyntax/feature_gate.rs8
-rw-r--r--src/test/compile-fail/trait-alias.rs6
-rw-r--r--src/test/ui/trait-alias.rs2
-rw-r--r--src/test/ui/trait-alias.stderr24
4 files changed, 26 insertions, 14 deletions
diff --git a/src/libsyntax/feature_gate.rs b/src/libsyntax/feature_gate.rs
index c7bfb121f80..ba534676324 100644
--- a/src/libsyntax/feature_gate.rs
+++ b/src/libsyntax/feature_gate.rs
@@ -368,6 +368,8 @@ declare_features! (
     // Generators
     (active, generators, "1.21.0", None),
 
+    // Trait aliases
+    (active, trait_alias, "1.24.0", Some(41517)),
 
     // global allocators and their internals
     (active, global_allocator, "1.20.0", None),
@@ -1406,6 +1408,12 @@ impl<'a> Visitor<'a> for PostExpansionVisitor<'a> {
                 }
             }
 
+            ast::ItemKind::TraitAlias(..) => {
+                gate_feature_post!(&self, trait_alias,
+                                   i.span,
+                                   "trait aliases are not yet fully implemented");
+            }
+
             ast::ItemKind::AutoImpl(..) => {
                 gate_feature_post!(&self, optin_builtin_traits,
                                    i.span,
diff --git a/src/test/compile-fail/trait-alias.rs b/src/test/compile-fail/trait-alias.rs
index 5d4112e4a5e..12cfd4ce0e5 100644
--- a/src/test/compile-fail/trait-alias.rs
+++ b/src/test/compile-fail/trait-alias.rs
@@ -8,12 +8,14 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
+// gate-test-trait_alias
+
 trait Alias1<T> = Default where T: Clone; // ok
-    //~^ERROR trait aliases are not yet implemented
+    //~^ERROR trait aliases are not yet fully implemented
 trait Alias2<T: Clone = ()> = Default;
     //~^ERROR type parameters on the left side of a trait alias cannot be bounded
     //~^^ERROR type parameters on the left side of a trait alias cannot have defaults
-    //~^^^ERROR trait aliases are not yet implemented
+    //~^^^ERROR trait aliases are not yet fully implemented
 
 impl Alias1 { //~ERROR expected type, found trait alias
     fn foo() {}
diff --git a/src/test/ui/trait-alias.rs b/src/test/ui/trait-alias.rs
index b794bab8470..9ea211b4d7d 100644
--- a/src/test/ui/trait-alias.rs
+++ b/src/test/ui/trait-alias.rs
@@ -8,6 +8,8 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
+#![feature(trait_alias)]
+
 trait SimpleAlias = Default; //~ERROR E0645
 trait GenericAlias<T> = Iterator<Item=T>; //~ERROR E0645
 trait Partial<T> = IntoIterator<Item=T>; //~ERROR E0645
diff --git a/src/test/ui/trait-alias.stderr b/src/test/ui/trait-alias.stderr
index 4a8de37a393..ad299dc8414 100644
--- a/src/test/ui/trait-alias.stderr
+++ b/src/test/ui/trait-alias.stderr
@@ -1,37 +1,37 @@
 error[E0645]: trait aliases are not yet implemented (see issue #41517)
-  --> $DIR/trait-alias.rs:11:1
+  --> $DIR/trait-alias.rs:13:1
    |
-11 | trait SimpleAlias = Default; //~ERROR E0645
+13 | trait SimpleAlias = Default; //~ERROR E0645
    | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 
 error[E0645]: trait aliases are not yet implemented (see issue #41517)
-  --> $DIR/trait-alias.rs:12:1
+  --> $DIR/trait-alias.rs:14:1
    |
-12 | trait GenericAlias<T> = Iterator<Item=T>; //~ERROR E0645
+14 | trait GenericAlias<T> = Iterator<Item=T>; //~ERROR E0645
    | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 
 error[E0645]: trait aliases are not yet implemented (see issue #41517)
-  --> $DIR/trait-alias.rs:13:1
+  --> $DIR/trait-alias.rs:15:1
    |
-13 | trait Partial<T> = IntoIterator<Item=T>; //~ERROR E0645
+15 | trait Partial<T> = IntoIterator<Item=T>; //~ERROR E0645
    | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 
 error[E0645]: trait aliases are not yet implemented (see issue #41517)
-  --> $DIR/trait-alias.rs:22:1
+  --> $DIR/trait-alias.rs:24:1
    |
-22 | trait WithWhere<Art, Thou> = Romeo + Romeo where Fore<(Art, Thou)>: Romeo; //~ERROR E0645
+24 | trait WithWhere<Art, Thou> = Romeo + Romeo where Fore<(Art, Thou)>: Romeo; //~ERROR E0645
    | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 
 error[E0645]: trait aliases are not yet implemented (see issue #41517)
-  --> $DIR/trait-alias.rs:23:1
+  --> $DIR/trait-alias.rs:25:1
    |
-23 | trait BareWhere<Wild, Are> = where The<Wild>: Things<Are>; //~ERROR E0645
+25 | trait BareWhere<Wild, Are> = where The<Wild>: Things<Are>; //~ERROR E0645
    | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 
 error[E0645]: trait aliases are not yet implemented (see issue #41517)
-  --> $DIR/trait-alias.rs:25:1
+  --> $DIR/trait-alias.rs:27:1
    |
-25 | trait CD = Clone + Default; //~ERROR E0645
+27 | trait CD = Clone + Default; //~ERROR E0645
    | ^^^^^^^^^^^^^^^^^^^^^^^^^^^
 
 error: aborting due to 6 previous errors