about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--src/librustc_resolve/lib.rs25
-rw-r--r--src/test/compile-fail/lint-qualification.rs9
2 files changed, 17 insertions, 17 deletions
diff --git a/src/librustc_resolve/lib.rs b/src/librustc_resolve/lib.rs
index b7908f0c0ed..1eeb356480c 100644
--- a/src/librustc_resolve/lib.rs
+++ b/src/librustc_resolve/lib.rs
@@ -2336,20 +2336,19 @@ impl<'a> Resolver<'a> {
             PathResult::Indeterminate => bug!("indetermined path result in resolve_qpath"),
         };
 
-        if path.len() == 1 || global_by_default || result.base_def == Def::Err {
-            return Some(result);
-        }
-
-        let unqualified_result = {
-            match self.resolve_path(&[*path.last().unwrap()], Some(ns), None) {
-                PathResult::NonModule(path_res) => path_res.base_def,
-                PathResult::Module(module) => module.def().unwrap(),
-                _ => return Some(result),
+        if path.len() > 1 && !global_by_default && result.base_def != Def::Err &&
+           path[0].name != keywords::CrateRoot.name() && path[0].name != "$crate" {
+            let unqualified_result = {
+                match self.resolve_path(&[*path.last().unwrap()], Some(ns), None) {
+                    PathResult::NonModule(path_res) => path_res.base_def,
+                    PathResult::Module(module) => module.def().unwrap(),
+                    _ => return Some(result),
+                }
+            };
+            if result.base_def == unqualified_result {
+                let lint = lint::builtin::UNUSED_QUALIFICATIONS;
+                self.session.add_lint(lint, id, span, "unnecessary qualification".to_string());
             }
-        };
-        if result.base_def == unqualified_result && path[0].name != "$crate" {
-            let lint = lint::builtin::UNUSED_QUALIFICATIONS;
-            self.session.add_lint(lint, id, span, "unnecessary qualification".to_string());
         }
 
         Some(result)
diff --git a/src/test/compile-fail/lint-qualification.rs b/src/test/compile-fail/lint-qualification.rs
index af9b21dadd1..57c2166565f 100644
--- a/src/test/compile-fail/lint-qualification.rs
+++ b/src/test/compile-fail/lint-qualification.rs
@@ -21,8 +21,9 @@ fn main() {
 
     let _ = || -> Result<(), ()> { try!(Ok(())); Ok(()) }; // issue #37345
 
-    macro_rules! m {
-        () => { $crate::foo::bar(); }
-    }
-    m!(); // issue #37357
+    macro_rules! m { () => {
+        $crate::foo::bar(); // issue #37357
+        ::foo::bar(); // issue #38682
+    } }
+    m!();
 }