From 0d8e9cd4df6d2a5e059168fac16d4de9e6eb62fe Mon Sep 17 00:00:00 2001 From: Vadim Petrochenkov Date: Thu, 4 Oct 2018 14:41:58 +0400 Subject: [PATCH] Reapply the macro_rules disambiguation changes from master --- src/Cargo.lock | 1 + src/librustc_resolve/macros.rs | 7 +++++-- src/test/ui/imports/macros.stderr | 19 +------------------ 3 files changed, 7 insertions(+), 20 deletions(-) diff --git a/src/Cargo.lock b/src/Cargo.lock index 5d9f84650470d..6a9488226b1bd 100644 --- a/src/Cargo.lock +++ b/src/Cargo.lock @@ -2388,6 +2388,7 @@ name = "rustc_resolve" version = "0.0.0" dependencies = [ "arena 0.0.0", + "bitflags 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)", "rustc 0.0.0", "rustc_data_structures 0.0.0", diff --git a/src/librustc_resolve/macros.rs b/src/librustc_resolve/macros.rs index 54eb27d4f39f5..c31b558dedea0 100644 --- a/src/librustc_resolve/macros.rs +++ b/src/librustc_resolve/macros.rs @@ -642,7 +642,7 @@ impl<'a, 'cl> Resolver<'a, 'cl> { } WhereToResolve::MacroRules(legacy_scope) => match legacy_scope { LegacyScope::Binding(legacy_binding) if ident == legacy_binding.ident => - Ok((legacy_binding.binding, Flags::MACRO_RULES, Flags::MODULE)), + Ok((legacy_binding.binding, Flags::MACRO_RULES, Flags::empty())), _ => Err(Determinacy::Determined), } WhereToResolve::Module(module) => { @@ -804,7 +804,10 @@ impl<'a, 'cl> Resolver<'a, 'cl> { (innermost_binding.is_glob_import() || innermost_binding.may_appear_after(parent_scope.expansion, binding) || innermost_flags.intersects(ambig_flags) || - flags.intersects(innermost_ambig_flags)) { + flags.intersects(innermost_ambig_flags) || + (innermost_flags.contains(Flags::MACRO_RULES) && + flags.contains(Flags::MODULE) && + !self.disambiguate_legacy_vs_modern(innermost_binding, binding))) { self.ambiguity_errors.push(AmbiguityError { ident, b1: innermost_binding, diff --git a/src/test/ui/imports/macros.stderr b/src/test/ui/imports/macros.stderr index 965b23e1a5c9f..209d449dfd840 100644 --- a/src/test/ui/imports/macros.stderr +++ b/src/test/ui/imports/macros.stderr @@ -34,23 +34,6 @@ LL | use two_macros::m; | ^^^^^^^^^^^^^ = note: macro-expanded macro imports do not shadow -error[E0659]: `m` is ambiguous - --> $DIR/macros.rs:48:5 - | -LL | m!(); //~ ERROR ambiguous - | ^ ambiguous name - | -note: `m` could refer to the name defined here - --> $DIR/macros.rs:46:5 - | -LL | macro_rules! m { () => {} } - | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ -note: `m` could also refer to the name imported here - --> $DIR/macros.rs:47:9 - | -LL | use two_macros::m; - | ^^^^^^^^^^^^^ - -error: aborting due to 3 previous errors +error: aborting due to 2 previous errors For more information about this error, try `rustc --explain E0659`.