diff --git a/src/librustc_parse/parser/expr.rs b/src/librustc_parse/parser/expr.rs index 64154aa90740..585ddad5a9e7 100644 --- a/src/librustc_parse/parser/expr.rs +++ b/src/librustc_parse/parser/expr.rs @@ -715,11 +715,7 @@ impl<'a> Parser<'a> { err? } } - _ => { - // FIXME Could factor this out into non_fatal_unexpected or something. - let actual = self.this_token_to_string(); - self.span_err(self.token.span, &format!("unexpected token: `{}`", actual)); - } + _ => self.error_unexpected_after_dot(), } continue; } @@ -735,6 +731,12 @@ impl<'a> Parser<'a> { return Ok(e); } + fn error_unexpected_after_dot(&self) { + // FIXME Could factor this out into non_fatal_unexpected or something. + let actual = self.this_token_to_string(); + self.struct_span_err(self.token.span, &format!("unexpected token: `{}`", actual)).emit(); + } + fn recover_field_access_by_float_lit( &mut self, lo: Span, diff --git a/src/test/ui/parser/attr-stmt-expr-attr-bad-2.rs b/src/test/ui/parser/attr-stmt-expr-attr-bad-2.rs deleted file mode 100644 index e5ac59ae4630..000000000000 --- a/src/test/ui/parser/attr-stmt-expr-attr-bad-2.rs +++ /dev/null @@ -1,2 +0,0 @@ -#[cfg(FALSE)] fn e() { let _ = x.#![attr]foo(); } -//~^ ERROR unexpected token: `#` diff --git a/src/test/ui/parser/attr-stmt-expr-attr-bad-2.stderr b/src/test/ui/parser/attr-stmt-expr-attr-bad-2.stderr deleted file mode 100644 index ca1043250ba7..000000000000 --- a/src/test/ui/parser/attr-stmt-expr-attr-bad-2.stderr +++ /dev/null @@ -1,8 +0,0 @@ -error: unexpected token: `#` - --> $DIR/attr-stmt-expr-attr-bad-2.rs:1:34 - | -LL | #[cfg(FALSE)] fn e() { let _ = x.#![attr]foo(); } - | ^ - -error: aborting due to previous error - diff --git a/src/test/ui/parser/attr-stmt-expr-attr-bad-3.rs b/src/test/ui/parser/attr-stmt-expr-attr-bad-3.rs deleted file mode 100644 index 7dc71af52f4d..000000000000 --- a/src/test/ui/parser/attr-stmt-expr-attr-bad-3.rs +++ /dev/null @@ -1,2 +0,0 @@ -#[cfg(FALSE)] fn e() { let _ = x.#[attr]foo(); } -//~^ ERROR unexpected token: `#` diff --git a/src/test/ui/parser/attr-stmt-expr-attr-bad-3.stderr b/src/test/ui/parser/attr-stmt-expr-attr-bad-3.stderr deleted file mode 100644 index ab9366d042a2..000000000000 --- a/src/test/ui/parser/attr-stmt-expr-attr-bad-3.stderr +++ /dev/null @@ -1,8 +0,0 @@ -error: unexpected token: `#` - --> $DIR/attr-stmt-expr-attr-bad-3.rs:1:34 - | -LL | #[cfg(FALSE)] fn e() { let _ = x.#[attr]foo(); } - | ^ - -error: aborting due to previous error - diff --git a/src/test/ui/parser/attr-stmt-expr-attr-bad.rs b/src/test/ui/parser/attr-stmt-expr-attr-bad.rs index ef10010ed0e6..6e1d72cd2f6e 100644 --- a/src/test/ui/parser/attr-stmt-expr-attr-bad.rs +++ b/src/test/ui/parser/attr-stmt-expr-attr-bad.rs @@ -101,6 +101,13 @@ fn main() {} //~^ ERROR `X..=` range patterns are not supported //~| ERROR expected one of `=>`, `if`, or `|`, found `#` +#[cfg(FALSE)] fn e() { let _ = x.#![attr]foo(); } +//~^ ERROR unexpected token: `#` +//~| ERROR expected one of `.` +#[cfg(FALSE)] fn e() { let _ = x.#[attr]foo(); } +//~^ ERROR unexpected token: `#` +//~| ERROR expected one of `.` + // make sure we don't catch this bug again... #[cfg(FALSE)] fn e() { { fn foo() { #[attr]; } } } //~^ ERROR expected statement after outer attribute diff --git a/src/test/ui/parser/attr-stmt-expr-attr-bad.stderr b/src/test/ui/parser/attr-stmt-expr-attr-bad.stderr index 30aa820141cf..992b491917ee 100644 --- a/src/test/ui/parser/attr-stmt-expr-attr-bad.stderr +++ b/src/test/ui/parser/attr-stmt-expr-attr-bad.stderr @@ -380,11 +380,35 @@ error: expected one of `=>`, `if`, or `|`, found `#` LL | #[cfg(FALSE)] fn e() { match 0 { 0..=#[attr] FOO => () } } | ^ expected one of `=>`, `if`, or `|` +error: unexpected token: `#` + --> $DIR/attr-stmt-expr-attr-bad.rs:104:34 + | +LL | #[cfg(FALSE)] fn e() { let _ = x.#![attr]foo(); } + | ^ + +error: expected one of `.`, `;`, `?`, or an operator, found `#` + --> $DIR/attr-stmt-expr-attr-bad.rs:104:34 + | +LL | #[cfg(FALSE)] fn e() { let _ = x.#![attr]foo(); } + | ^ expected one of `.`, `;`, `?`, or an operator + +error: unexpected token: `#` + --> $DIR/attr-stmt-expr-attr-bad.rs:106:34 + | +LL | #[cfg(FALSE)] fn e() { let _ = x.#[attr]foo(); } + | ^ + +error: expected one of `.`, `;`, `?`, or an operator, found `#` + --> $DIR/attr-stmt-expr-attr-bad.rs:106:34 + | +LL | #[cfg(FALSE)] fn e() { let _ = x.#[attr]foo(); } + | ^ expected one of `.`, `;`, `?`, or an operator + error: expected statement after outer attribute - --> $DIR/attr-stmt-expr-attr-bad.rs:105:44 + --> $DIR/attr-stmt-expr-attr-bad.rs:110:44 | LL | #[cfg(FALSE)] fn e() { { fn foo() { #[attr]; } } } | ^ -error: aborting due to 52 previous errors +error: aborting due to 56 previous errors