From 49c425dfcfdd7e4ef238ed38620880075dde1929 Mon Sep 17 00:00:00 2001 From: mu001999 Date: Thu, 25 Sep 2025 09:53:57 +0800 Subject: [PATCH] Disable use $crate::{self} --- compiler/rustc_resolve/src/build_reduced_graph.rs | 6 ++++++ tests/ui/dollar-crate/use-dollar-crate-self.rs | 9 +++++++++ tests/ui/dollar-crate/use-dollar-crate-self.stderr | 13 +++++++++++++ 3 files changed, 28 insertions(+) create mode 100644 tests/ui/dollar-crate/use-dollar-crate-self.rs create mode 100644 tests/ui/dollar-crate/use-dollar-crate-self.stderr diff --git a/compiler/rustc_resolve/src/build_reduced_graph.rs b/compiler/rustc_resolve/src/build_reduced_graph.rs index fa3c06059b3da..d6289493428ea 100644 --- a/compiler/rustc_resolve/src/build_reduced_graph.rs +++ b/compiler/rustc_resolve/src/build_reduced_graph.rs @@ -706,6 +706,12 @@ impl<'a, 'ra, 'tcx> BuildReducedGraphVisitor<'a, 'ra, 'tcx> { } e.emit(); + } else if let &[self_span] = &self_spans[..] + && prefix.len() == 1 + && prefix[0].ident.name == kw::DollarCrate + { + // Disallow `use $crate::{self};` + self.r.dcx().emit_err(errors::CrateImported { span: self_span }); } for &(ref tree, id) in items { diff --git a/tests/ui/dollar-crate/use-dollar-crate-self.rs b/tests/ui/dollar-crate/use-dollar-crate-self.rs new file mode 100644 index 0000000000000..fc9898ef151ac --- /dev/null +++ b/tests/ui/dollar-crate/use-dollar-crate-self.rs @@ -0,0 +1,9 @@ +macro_rules! foo { + () => { + use $crate::{self}; //~ ERROR `$crate` may not be imported + }; +} + +foo!(); + +fn main() {} diff --git a/tests/ui/dollar-crate/use-dollar-crate-self.stderr b/tests/ui/dollar-crate/use-dollar-crate-self.stderr new file mode 100644 index 0000000000000..262bb56dc50b7 --- /dev/null +++ b/tests/ui/dollar-crate/use-dollar-crate-self.stderr @@ -0,0 +1,13 @@ +error: `$crate` may not be imported + --> $DIR/use-dollar-crate-self.rs:3:22 + | +LL | use $crate::{self}; + | ^^^^ +... +LL | foo!(); + | ------ in this macro invocation + | + = note: this error originates in the macro `foo` (in Nightly builds, run with -Z macro-backtrace for more info) + +error: aborting due to 1 previous error +