Skip to content

Commit 199ed20

Browse files
committed
Fix $crate-related regressions.
1 parent 67f26f7 commit 199ed20

File tree

2 files changed

+14
-3
lines changed

2 files changed

+14
-3
lines changed

src/librustc_resolve/lib.rs

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -845,6 +845,10 @@ impl<'a> ModuleS<'a> {
845845
_ => false,
846846
}
847847
}
848+
849+
fn is_local(&self) -> bool {
850+
self.normal_ancestor_id.is_some()
851+
}
848852
}
849853

850854
impl<'a> fmt::Debug for ModuleS<'a> {
@@ -1585,8 +1589,7 @@ impl<'a> Resolver<'a> {
15851589
ctxt = ctxt.source().0;
15861590
}
15871591
let module = self.invocations[&ctxt.source().1].module.get();
1588-
let crate_root =
1589-
if module.def_id().unwrap().is_local() { self.graph_root } else { module };
1592+
let crate_root = if module.is_local() { self.graph_root } else { module };
15901593
return Success(PrefixFound(crate_root, 1))
15911594
}
15921595

@@ -2569,7 +2572,8 @@ impl<'a> Resolver<'a> {
25692572
let unqualified_def = resolve_identifier_with_fallback(self, None);
25702573
let qualified_binding = self.resolve_module_relative_path(span, segments, namespace);
25712574
match (qualified_binding, unqualified_def) {
2572-
(Ok(binding), Some(ref ud)) if binding.def() == ud.def => {
2575+
(Ok(binding), Some(ref ud)) if binding.def() == ud.def &&
2576+
segments[0].identifier.name.as_str() != "$crate" => {
25732577
self.session
25742578
.add_lint(lint::builtin::UNUSED_QUALIFICATIONS,
25752579
id,

src/test/compile-fail/lint-qualification.rs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,4 +18,11 @@ fn main() {
1818
use foo::bar;
1919
foo::bar(); //~ ERROR: unnecessary qualification
2020
bar();
21+
22+
let _ = || -> Result<(), ()> { try!(Ok(())); Ok(()) }; // issue #37345
23+
24+
macro_rules! m {
25+
() => { $crate::foo::bar(); }
26+
}
27+
m!(); // issue #37357
2128
}

0 commit comments

Comments
 (0)