diff options
| author | Matthias Krüger <matthias.krueger@famsik.de> | 2023-06-27 17:48:44 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-06-27 17:48:44 +0200 |
| commit | 9f2c21c11f0cf8762b66675024c9d1041dbcc219 (patch) | |
| tree | 8f17cd3b7dad4fd945dd55272e47f0873d38d0e1 | |
| parent | f42f19b6d3d785a74dbe57aa395b6c288437dd51 (diff) | |
| parent | 0220c0b765e92dcb3565f0a8bd3c422afbd77f88 (diff) | |
| download | rust-9f2c21c11f0cf8762b66675024c9d1041dbcc219.tar.gz rust-9f2c21c11f0cf8762b66675024c9d1041dbcc219.zip | |
Rollup merge of #112518 - chenyukang:yukang-fix-112458, r=davidtwco
Detect actual span for getting unexpected token from parsing macros Fixes #112458
| -rw-r--r-- | compiler/rustc_parse/src/parser/expr.rs | 10 | ||||
| -rw-r--r-- | tests/ui/parser/issues/issue-112458.rs | 4 | ||||
| -rw-r--r-- | tests/ui/parser/issues/issue-112458.stderr | 15 |
3 files changed, 27 insertions, 2 deletions
diff --git a/compiler/rustc_parse/src/parser/expr.rs b/compiler/rustc_parse/src/parser/expr.rs index 88c6cc1ae70..5f2f86e8113 100644 --- a/compiler/rustc_parse/src/parser/expr.rs +++ b/compiler/rustc_parse/src/parser/expr.rs @@ -1013,9 +1013,15 @@ impl<'a> Parser<'a> { } fn error_unexpected_after_dot(&self) { - // FIXME Could factor this out into non_fatal_unexpected or something. let actual = pprust::token_to_string(&self.token); - self.sess.emit_err(errors::UnexpectedTokenAfterDot { span: self.token.span, actual }); + let span = self.token.span; + let sm = self.sess.source_map(); + let (span, actual) = match (&self.token.kind, self.subparser_name) { + (token::Eof, Some(_)) if let Ok(actual) = sm.span_to_snippet(sm.next_point(span)) => + (span.shrink_to_hi(), actual.into()), + _ => (span, actual), + }; + self.sess.emit_err(errors::UnexpectedTokenAfterDot { span, actual }); } // We need an identifier or integer, but the next token is a float. diff --git a/tests/ui/parser/issues/issue-112458.rs b/tests/ui/parser/issues/issue-112458.rs new file mode 100644 index 00000000000..36895450cd9 --- /dev/null +++ b/tests/ui/parser/issues/issue-112458.rs @@ -0,0 +1,4 @@ +fn main() { + println!("{}", x.); //~ ERROR unexpected token: `)` + //~^ ERROR cannot find value `x` in this scope +} diff --git a/tests/ui/parser/issues/issue-112458.stderr b/tests/ui/parser/issues/issue-112458.stderr new file mode 100644 index 00000000000..54a8f1d03b0 --- /dev/null +++ b/tests/ui/parser/issues/issue-112458.stderr @@ -0,0 +1,15 @@ +error: unexpected token: `)` + --> $DIR/issue-112458.rs:2:22 + | +LL | println!("{}", x.); + | ^ + +error[E0425]: cannot find value `x` in this scope + --> $DIR/issue-112458.rs:2:20 + | +LL | println!("{}", x.); + | ^ not found in this scope + +error: aborting due to 2 previous errors + +For more information about this error, try `rustc --explain E0425`. |
