diff options
| author | Mazdak Farrokhzad <twingoow@gmail.com> | 2019-09-21 17:40:50 +0200 |
|---|---|---|
| committer | Mazdak Farrokhzad <twingoow@gmail.com> | 2019-10-24 00:32:03 +0200 |
| commit | 2d182b82ce5ecfe8090ba3d4e78f1cd72c072ef1 (patch) | |
| tree | 686757127092ea8670e546c998e259a2e0c83b03 /src | |
| parent | 2e64bb2d37d5f15113e0a7199cd684504c6b8de7 (diff) | |
| download | rust-2d182b82ce5ecfe8090ba3d4e78f1cd72c072ef1.tar.gz rust-2d182b82ce5ecfe8090ba3d4e78f1cd72c072ef1.zip | |
pre-expansion gate trait_alias.
Diffstat (limited to 'src')
| -rw-r--r-- | src/libsyntax/feature_gate/check.rs | 10 | ||||
| -rw-r--r-- | src/libsyntax/parse/parser/item.rs | 2 | ||||
| -rw-r--r-- | src/libsyntax/sess.rs | 2 | ||||
| -rw-r--r-- | src/test/ui/feature-gates/feature-gate-trait-alias.rs | 9 | ||||
| -rw-r--r-- | src/test/ui/feature-gates/feature-gate-trait-alias.stderr | 11 |
5 files changed, 24 insertions, 10 deletions
diff --git a/src/libsyntax/feature_gate/check.rs b/src/libsyntax/feature_gate/check.rs index 172511f0f09..97172691a11 100644 --- a/src/libsyntax/feature_gate/check.rs +++ b/src/libsyntax/feature_gate/check.rs @@ -423,15 +423,6 @@ impl<'a> Visitor<'a> for PostExpansionVisitor<'a> { "auto traits are experimental and possibly buggy"); } - ast::ItemKind::TraitAlias(..) => { - gate_feature_post!( - &self, - trait_alias, - i.span, - "trait aliases are experimental" - ); - } - ast::ItemKind::MacroDef(ast::MacroDef { legacy: false, .. }) => { let msg = "`macro` is experimental"; gate_feature_post!(&self, decl_macro, i.span, msg); @@ -867,6 +858,7 @@ pub fn check_crate(krate: &ast::Crate, gate_all!(yields, generators, "yield syntax is experimental"); gate_all!(or_patterns, "or-patterns syntax is experimental"); gate_all!(const_extern_fn, "`const extern fn` definitions are unstable"); + gate_all!(trait_alias, "trait aliases are experimental"); visit::walk_crate(&mut visitor, krate); } diff --git a/src/libsyntax/parse/parser/item.rs b/src/libsyntax/parse/parser/item.rs index 01dc0c21d4d..c5498236da1 100644 --- a/src/libsyntax/parse/parser/item.rs +++ b/src/libsyntax/parse/parser/item.rs @@ -828,6 +828,8 @@ impl<'a> Parser<'a> { .emit(); } + self.sess.gated_spans.trait_alias.borrow_mut().push(whole_span); + Ok((ident, ItemKind::TraitAlias(tps, bounds), None)) } else { // It's a normal trait. diff --git a/src/libsyntax/sess.rs b/src/libsyntax/sess.rs index e49d3954f8e..b48b2b494c8 100644 --- a/src/libsyntax/sess.rs +++ b/src/libsyntax/sess.rs @@ -30,6 +30,8 @@ crate struct GatedSpans { crate or_patterns: Lock<Vec<Span>>, /// Spans collected for gating `const_extern_fn`, e.g. `const extern fn foo`. crate const_extern_fn: Lock<Vec<Span>>, + /// Spans collected for gating `trait_alias`, e.g. `trait Foo = Ord + Eq;`. + pub trait_alias: Lock<Vec<Span>>, } /// Info about a parsing session. diff --git a/src/test/ui/feature-gates/feature-gate-trait-alias.rs b/src/test/ui/feature-gates/feature-gate-trait-alias.rs index 819085addda..4b94d7d6d3b 100644 --- a/src/test/ui/feature-gates/feature-gate-trait-alias.rs +++ b/src/test/ui/feature-gates/feature-gate-trait-alias.rs @@ -1,4 +1,13 @@ trait Foo = Default; //~^ ERROR trait aliases are experimental +macro_rules! accept_item { + ($i:item) => {} +} + +accept_item! { + trait Foo = Ord + Eq; + //~^ ERROR trait aliases are experimental +} + fn main() {} diff --git a/src/test/ui/feature-gates/feature-gate-trait-alias.stderr b/src/test/ui/feature-gates/feature-gate-trait-alias.stderr index 9250e27d158..b1bf6ad3491 100644 --- a/src/test/ui/feature-gates/feature-gate-trait-alias.stderr +++ b/src/test/ui/feature-gates/feature-gate-trait-alias.stderr @@ -7,6 +7,15 @@ LL | trait Foo = Default; = note: for more information, see https://github.com/rust-lang/rust/issues/41517 = help: add `#![feature(trait_alias)]` to the crate attributes to enable -error: aborting due to previous error +error[E0658]: trait aliases are experimental + --> $DIR/feature-gate-trait-alias.rs:9:5 + | +LL | trait Foo = Ord + Eq; + | ^^^^^^^^^^^^^^^^^^^^^ + | + = note: for more information, see https://github.com/rust-lang/rust/issues/41517 + = help: add `#![feature(trait_alias)]` to the crate attributes to enable + +error: aborting due to 2 previous errors For more information about this error, try `rustc --explain E0658`. |
