let binding =
(module, ty::Visibility::Public, sp, expansion).to_name_binding(self.arenas);
if ptr::eq(self.current_module, self.graph_root) {
- self.extern_prelude.entry(ident.modern()).or_insert(ExternPreludeEntry {
+ if let Some(entry) = self.extern_prelude.get(&ident.modern()) {
+ if expansion != Mark::root() && orig_name.is_some() &&
+ entry.extern_crate_item.is_none() {
+ self.session.span_err(item.span, "macro-expanded `extern crate` items \
+ cannot shadow names passed with \
+ `--extern`");
+ }
+ }
+ let entry = self.extern_prelude.entry(ident.modern())
+ .or_insert(ExternPreludeEntry {
extern_crate_item: None,
introduced_by_item: true,
- }).extern_crate_item = Some(binding);
+ });
+ entry.extern_crate_item = Some(binding);
+ if orig_name.is_some() {
+ entry.introduced_by_item = true;
+ }
}
let directive = self.arenas.alloc_import_directive(ImportDirective {
root_id: item.id,
//~^ ERROR use of extern prelude names introduced with `extern crate` items is unstable
}
+extern crate alloc as core;
+
+mod unrelated_crate_renamed {
+ type A = core::boxed::Box<u8>;
+ //~^ ERROR use of extern prelude names introduced with `extern crate` items is unstable
+}
+
fn main() {}
|
= help: add #![feature(extern_crate_item_prelude)] to the crate attributes to enable
-error: aborting due to 8 previous errors
+error[E0658]: use of extern prelude names introduced with `extern crate` items is unstable (see issue #54658)
+ --> $DIR/feature-gate-extern_crate_item_prelude.rs:42:14
+ |
+LL | type A = core::boxed::Box<u8>;
+ | ^^^^
+ |
+ = help: add #![feature(extern_crate_item_prelude)] to the crate attributes to enable
+
+error: aborting due to 9 previous errors
For more information about this error, try `rustc --explain E0658`.
// aux-build:two_macros.rs
+// compile-flags:--extern non_existent
mod n {
extern crate two_macros;
}
}
+macro_rules! define_std_as_non_existent {
+ () => {
+ extern crate std as non_existent;
+ //~^ ERROR `extern crate` items cannot shadow names passed with `--extern`
+ }
+}
+define_std_as_non_existent!();
+
fn main() {}
+error: macro-expanded `extern crate` items cannot shadow names passed with `--extern`
+ --> $DIR/extern-prelude-extern-crate-fail.rs:16:9
+ |
+LL | extern crate std as non_existent;
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+...
+LL | define_std_as_non_existent!();
+ | ------------------------------ in this macro invocation
+
error[E0433]: failed to resolve. Use of undeclared type or module `two_macros`
- --> $DIR/extern-prelude-extern-crate-fail.rs:9:9
+ --> $DIR/extern-prelude-extern-crate-fail.rs:10:9
|
LL | two_macros::m!(); //~ ERROR failed to resolve. Use of undeclared type or module `two_macros`
| ^^^^^^^^^^ Use of undeclared type or module `two_macros`
-error: aborting due to previous error
+error: aborting due to 2 previous errors
For more information about this error, try `rustc --explain E0433`.