diff options
| author | Alex Burka <aburka@seas.upenn.edu> | 2017-12-03 12:55:22 -0500 |
|---|---|---|
| committer | Alex Burka <aburka@seas.upenn.edu> | 2017-12-14 12:56:26 -0500 |
| commit | 4f0b4f267f98e9ec719ee5ac1aaa2a39467ffc98 (patch) | |
| tree | a37ef20957f0d445fc7c99fdd7ac3a257d1a380b | |
| parent | 4029a0198433a4b03dc4b4529164ee4872fc2834 (diff) | |
| download | rust-4f0b4f267f98e9ec719ee5ac1aaa2a39467ffc98.tar.gz rust-4f0b4f267f98e9ec719ee5ac1aaa2a39467ffc98.zip | |
feature gate trait aliases
| -rw-r--r-- | src/libsyntax/feature_gate.rs | 8 | ||||
| -rw-r--r-- | src/test/compile-fail/trait-alias.rs | 6 | ||||
| -rw-r--r-- | src/test/ui/trait-alias.rs | 2 | ||||
| -rw-r--r-- | src/test/ui/trait-alias.stderr | 24 |
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 |
