diff --git a/src/libsyntax/feature_gate.rs b/src/libsyntax/feature_gate.rs index c7bfb121f801..ba534676324a 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 5d4112e4a5e4..12cfd4ce0e5b 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 = Default where T: Clone; // ok - //~^ERROR trait aliases are not yet implemented + //~^ERROR trait aliases are not yet fully implemented trait Alias2 = 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 b794bab84704..9ea211b4d7d6 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 = Iterator; //~ERROR E0645 trait Partial = IntoIterator; //~ERROR E0645 diff --git a/src/test/ui/trait-alias.stderr b/src/test/ui/trait-alias.stderr index 4a8de37a3935..ad299dc84145 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 - | -11 | trait SimpleAlias = Default; //~ERROR E0645 - | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -error[E0645]: trait aliases are not yet implemented (see issue #41517) - --> $DIR/trait-alias.rs:12:1 - | -12 | trait GenericAlias = Iterator; //~ERROR E0645 - | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - error[E0645]: trait aliases are not yet implemented (see issue #41517) --> $DIR/trait-alias.rs:13:1 | -13 | trait Partial = IntoIterator; //~ERROR E0645 +13 | trait SimpleAlias = Default; //~ERROR E0645 + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +error[E0645]: trait aliases are not yet implemented (see issue #41517) + --> $DIR/trait-alias.rs:14:1 + | +14 | trait GenericAlias = Iterator; //~ERROR E0645 + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +error[E0645]: trait aliases are not yet implemented (see issue #41517) + --> $DIR/trait-alias.rs:15:1 + | +15 | trait Partial = IntoIterator; //~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 = Romeo + Romeo where Fore<(Art, Thou)>: Romeo; //~ERROR E0645 +24 | trait WithWhere = 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 - | -23 | trait BareWhere = where The: Things; //~ERROR E0645 - | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - error[E0645]: trait aliases are not yet implemented (see issue #41517) --> $DIR/trait-alias.rs:25:1 | -25 | trait CD = Clone + Default; //~ERROR E0645 +25 | trait BareWhere = where The: Things; //~ERROR E0645 + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +error[E0645]: trait aliases are not yet implemented (see issue #41517) + --> $DIR/trait-alias.rs:27:1 + | +27 | trait CD = Clone + Default; //~ERROR E0645 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ error: aborting due to 6 previous errors