fix(resolve): not defined extern crate shadow_name

This commit is contained in:
bohan 2023-05-19 21:12:08 +08:00
parent 8b4b20836b
commit c41b2089c7
4 changed files with 34 additions and 1 deletions

View file

@ -873,6 +873,11 @@ fn build_reduced_graph_for_extern_crate(
let msg = "macro-expanded `extern crate` items cannot \
shadow names passed with `--extern`";
self.r.tcx.sess.span_err(item.span, msg);
// `return` is intended to discard this binding because it's an
// unregistered ambiguity error which would result in a panic
// caused by inconsistency `path_res`
// more details: https://github.com/rust-lang/rust/pull/111761
return;
}
}
let entry = self.r.extern_prelude.entry(ident.normalize_to_macros_2_0()).or_insert(

View file

@ -106,7 +106,7 @@ fn determined(determined: bool) -> Determinacy {
/// A specific scope in which a name can be looked up.
/// This enum is currently used only for early resolution (imports and macros),
/// but not for late resolution yet.
#[derive(Clone, Copy)]
#[derive(Clone, Copy, Debug)]
enum Scope<'a> {
DeriveHelpers(LocalExpnId),
DeriveHelpersCompat,

View file

@ -0,0 +1,15 @@
// edition: 2021
// https://github.com/rust-lang/rust/pull/111761#issuecomment-1557777314
macro_rules! m {
() => {
extern crate core as std;
//~^ ERROR macro-expanded `extern crate` items cannot shadow names passed with `--extern`
}
}
m!();
use std::mem;
fn main() {}

View file

@ -0,0 +1,13 @@
error: macro-expanded `extern crate` items cannot shadow names passed with `--extern`
--> $DIR/issue-109148.rs:6:9
|
LL | extern crate core as std;
| ^^^^^^^^^^^^^^^^^^^^^^^^^
...
LL | m!();
| ---- in this macro invocation
|
= note: this error originates in the macro `m` (in Nightly builds, run with -Z macro-backtrace for more info)
error: aborting due to previous error