about summary refs log tree commit diff
diff options
context:
space:
mode:
authorMatthias Krüger <matthias.krueger@famsik.de>2023-06-27 17:48:44 +0200
committerGitHub <noreply@github.com>2023-06-27 17:48:44 +0200
commit9f2c21c11f0cf8762b66675024c9d1041dbcc219 (patch)
tree8f17cd3b7dad4fd945dd55272e47f0873d38d0e1
parentf42f19b6d3d785a74dbe57aa395b6c288437dd51 (diff)
parent0220c0b765e92dcb3565f0a8bd3c422afbd77f88 (diff)
downloadrust-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.rs10
-rw-r--r--tests/ui/parser/issues/issue-112458.rs4
-rw-r--r--tests/ui/parser/issues/issue-112458.stderr15
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`.