From 7490305e13bd90b4c4697d465ceea8df2625a7ad Mon Sep 17 00:00:00 2001
From: Mara Bos <m-ou.se@m-ou.se>
Date: Mon, 14 Jun 2021 20:38:57 +0000
Subject: [PATCH] No reserved_prefix suggestion in proc macro call_site.

---
 compiler/rustc_parse/src/lexer/mod.rs | 24 +++++++++++++-----------
 1 file changed, 13 insertions(+), 11 deletions(-)

diff --git a/compiler/rustc_parse/src/lexer/mod.rs b/compiler/rustc_parse/src/lexer/mod.rs
index 0f6b9a2f122..87e60a48e44 100644
--- a/compiler/rustc_parse/src/lexer/mod.rs
+++ b/compiler/rustc_parse/src/lexer/mod.rs
@@ -8,7 +8,7 @@ use rustc_session::lint::builtin::RESERVED_PREFIX;
 use rustc_session::lint::BuiltinLintDiagnostics;
 use rustc_session::parse::ParseSess;
 use rustc_span::symbol::{sym, Symbol};
-use rustc_span::{BytePos, Pos, Span};
+use rustc_span::{edition::Edition, BytePos, Pos, Span};
 
 use tracing::debug;
 
@@ -507,20 +507,22 @@ impl<'a> StringReader<'a> {
         let prefix_span = self.mk_sp(start, self.pos);
         let msg = format!("prefix `{}` is unknown", self.str_from_to(start, self.pos));
 
-        if prefix_span.rust_2021() {
+        let expn_data = prefix_span.ctxt().outer_expn_data();
+
+        if expn_data.edition >= Edition::Edition2021 {
             // In Rust 2021, this is a hard error.
-            self.sess
-                .span_diagnostic
-                .struct_span_err(prefix_span, &msg)
-                .span_label(prefix_span, "unknown prefix")
-                .span_suggestion_verbose(
-                    self.mk_sp(self.pos, self.pos),
+            let mut err = self.sess.span_diagnostic.struct_span_err(prefix_span, &msg);
+            err.span_label(prefix_span, "unknown prefix");
+            if expn_data.is_root() {
+                err.span_suggestion_verbose(
+                    prefix_span.shrink_to_hi(),
                     "consider inserting whitespace here",
                     " ".into(),
                     Applicability::MachineApplicable,
-                )
-                .note("prefixed identifiers and literals are reserved since Rust 2021")
-                .emit();
+                );
+            }
+            err.note("prefixed identifiers and literals are reserved since Rust 2021");
+            err.emit();
         } else {
             // Before Rust 2021, only emit a lint for migration.
             self.sess.buffer_lint_with_diagnostic(