diff --git a/src/libsyntax/parse/parser.rs b/src/libsyntax/parse/parser.rs index 50cedc0f8d4fd..e22047938e518 100644 --- a/src/libsyntax/parse/parser.rs +++ b/src/libsyntax/parse/parser.rs @@ -6538,8 +6538,14 @@ impl<'a> Parser<'a> { let bounds = self.parse_generic_bounds()?; tps.where_clause = self.parse_where_clause()?; self.expect(&token::Semi)?; + if is_auto == IsAuto::Yes { + let msg = "trait aliases cannot be `auto`"; + self.struct_span_err(self.prev_span, msg) + .span_label(self.prev_span, msg) + .emit(); + } if unsafety != Unsafety::Normal { - let msg = "trait aliases cannot be unsafe"; + let msg = "trait aliases cannot be `unsafe`"; self.struct_span_err(self.prev_span, msg) .span_label(self.prev_span, msg) .emit(); diff --git a/src/test/ui/traits/trait-alias-syntax.rs b/src/test/ui/traits/trait-alias-syntax.rs new file mode 100644 index 0000000000000..5948d45b6987f --- /dev/null +++ b/src/test/ui/traits/trait-alias-syntax.rs @@ -0,0 +1,7 @@ +#![feature(trait_alias)] + +trait Foo {} +auto trait A = Foo; //~ ERROR trait aliases cannot be `auto` +unsafe trait B = Foo; //~ ERROR trait aliases cannot be `unsafe` + +fn main() {} diff --git a/src/test/ui/traits/trait-alias-syntax.stderr b/src/test/ui/traits/trait-alias-syntax.stderr new file mode 100644 index 0000000000000..fc96f6274393d --- /dev/null +++ b/src/test/ui/traits/trait-alias-syntax.stderr @@ -0,0 +1,14 @@ +error: trait aliases cannot be `auto` + --> $DIR/trait-alias-syntax.rs:4:19 + | +LL | auto trait A = Foo; //~ ERROR trait aliases cannot be `auto` + | ^ trait aliases cannot be `auto` + +error: trait aliases cannot be `unsafe` + --> $DIR/trait-alias-syntax.rs:5:21 + | +LL | unsafe trait B = Foo; //~ ERROR trait aliases cannot be `unsafe` + | ^ trait aliases cannot be `unsafe` + +error: aborting due to 2 previous errors +