Rollup merge of #116393 - compiler-errors:auto-bad, r=WaffleLapkin
Emit feature gate *warning* for `auto` traits pre-expansion Auto traits were introduced before we were more careful about not stabilizing new syntax pre-expansion. This is a more conservative step in the general direction we want to go in https://rust-lang.zulipchat.com/#narrow/stream/213817-t-lang/topic/Removal.20of.20.60auto.20trait.60.20syntax. Fixes #116121
This commit is contained in:
commit
4ed2291624
@ -603,6 +603,7 @@ pub fn check_crate(krate: &ast::Crate, sess: &Session, features: &Features) {
|
|||||||
"exclusive range pattern syntax is experimental"
|
"exclusive range pattern syntax is experimental"
|
||||||
);
|
);
|
||||||
gate_all_legacy_dont_use!(try_blocks, "`try` blocks are unstable");
|
gate_all_legacy_dont_use!(try_blocks, "`try` blocks are unstable");
|
||||||
|
gate_all_legacy_dont_use!(auto_traits, "`auto` traits are unstable");
|
||||||
|
|
||||||
visit::walk_crate(&mut visitor, krate);
|
visit::walk_crate(&mut visitor, krate);
|
||||||
}
|
}
|
||||||
|
@ -813,7 +813,12 @@ impl<'a> Parser<'a> {
|
|||||||
fn parse_item_trait(&mut self, attrs: &mut AttrVec, lo: Span) -> PResult<'a, ItemInfo> {
|
fn parse_item_trait(&mut self, attrs: &mut AttrVec, lo: Span) -> PResult<'a, ItemInfo> {
|
||||||
let unsafety = self.parse_unsafety(Case::Sensitive);
|
let unsafety = self.parse_unsafety(Case::Sensitive);
|
||||||
// Parse optional `auto` prefix.
|
// Parse optional `auto` prefix.
|
||||||
let is_auto = if self.eat_keyword(kw::Auto) { IsAuto::Yes } else { IsAuto::No };
|
let is_auto = if self.eat_keyword(kw::Auto) {
|
||||||
|
self.sess.gated_spans.gate(sym::auto_traits, self.prev_token.span);
|
||||||
|
IsAuto::Yes
|
||||||
|
} else {
|
||||||
|
IsAuto::No
|
||||||
|
};
|
||||||
|
|
||||||
self.expect_keyword(kw::Trait)?;
|
self.expect_keyword(kw::Trait)?;
|
||||||
let ident = self.parse_ident()?;
|
let ident = self.parse_ident()?;
|
||||||
|
8
tests/ui/auto-traits/pre-cfg.rs
Normal file
8
tests/ui/auto-traits/pre-cfg.rs
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
// check-pass
|
||||||
|
|
||||||
|
#[cfg(FALSE)]
|
||||||
|
auto trait Foo {}
|
||||||
|
//~^ WARN `auto` traits are unstable
|
||||||
|
//~| WARN unstable syntax can change at any point in the future, causing a hard error!
|
||||||
|
|
||||||
|
fn main() {}
|
13
tests/ui/auto-traits/pre-cfg.stderr
Normal file
13
tests/ui/auto-traits/pre-cfg.stderr
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
warning: `auto` traits are unstable
|
||||||
|
--> $DIR/pre-cfg.rs:4:1
|
||||||
|
|
|
||||||
|
LL | auto trait Foo {}
|
||||||
|
| ^^^^
|
||||||
|
|
|
||||||
|
= note: see issue #13231 <https://github.com/rust-lang/rust/issues/13231> for more information
|
||||||
|
= help: add `#![feature(auto_traits)]` to the crate attributes to enable
|
||||||
|
= warning: unstable syntax can change at any point in the future, causing a hard error!
|
||||||
|
= note: for more information, see issue #65860 <https://github.com/rust-lang/rust/issues/65860>
|
||||||
|
|
||||||
|
warning: 1 warning emitted
|
||||||
|
|
@ -3,6 +3,7 @@
|
|||||||
// compile-flags: --test
|
// compile-flags: --test
|
||||||
|
|
||||||
#![feature(async_closure)]
|
#![feature(async_closure)]
|
||||||
|
#![feature(auto_traits)]
|
||||||
#![feature(box_patterns)]
|
#![feature(box_patterns)]
|
||||||
#![feature(const_trait_impl)]
|
#![feature(const_trait_impl)]
|
||||||
#![feature(decl_macro)]
|
#![feature(decl_macro)]
|
||||||
|
Loading…
x
Reference in New Issue
Block a user