From 1b5d2f21d65bcb9045d86dc952cadf2e52e6eb23 Mon Sep 17 00:00:00 2001 From: Jeffrey Seyfried Date: Tue, 16 Feb 2016 21:59:46 +0000 Subject: [PATCH 1/2] Don't compute LastPrivate data for Def::Err. --- src/librustc_resolve/lib.rs | 1 + src/test/compile-fail/import.rs | 7 ++++++- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/src/librustc_resolve/lib.rs b/src/librustc_resolve/lib.rs index f0e4d7578e373..52580678c3fa7 100644 --- a/src/librustc_resolve/lib.rs +++ b/src/librustc_resolve/lib.rs @@ -1047,6 +1047,7 @@ impl<'a> NameBinding<'a> { fn def_and_lp(&self) -> (Def, LastPrivate) { let def = self.def().unwrap(); + if let Def::Err = def { return (def, LastMod(AllPublic)) } (def, LastMod(if self.is_public() { AllPublic } else { DependsOn(def.def_id()) })) } diff --git a/src/test/compile-fail/import.rs b/src/test/compile-fail/import.rs index 86c4ce8b0380b..390bba235806a 100644 --- a/src/test/compile-fail/import.rs +++ b/src/test/compile-fail/import.rs @@ -15,5 +15,10 @@ use zed::baz; mod zed { pub fn bar() { println!("bar"); } + use foo; //~ ERROR unresolved import +} + +fn main() { + zed::foo(); // Check that this does not panic. Ideally, it would be a privacy error. + bar(); } -fn main() { bar(); } From 08b909719790e40f7feaab4b314893d178e892ea Mon Sep 17 00:00:00 2001 From: Jeffrey Seyfried Date: Fri, 19 Feb 2016 00:42:30 +0000 Subject: [PATCH 2/2] Improve dummy bindings for unresolved imports --- src/librustc_resolve/resolve_imports.rs | 2 ++ src/test/compile-fail/import.rs | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/src/librustc_resolve/resolve_imports.rs b/src/librustc_resolve/resolve_imports.rs index f21ffb9b9a16d..e0bd4867a7ff7 100644 --- a/src/librustc_resolve/resolve_imports.rs +++ b/src/librustc_resolve/resolve_imports.rs @@ -218,6 +218,8 @@ impl<'a, 'b:'a, 'tcx:'b> ImportResolver<'a, 'b, 'tcx> { kind: NameBindingKind::Def(Def::Err), span: None, }); + let dummy_binding = + self.resolver.new_name_binding(e.import_directive.import(dummy_binding)); let _ = e.source_module.try_define_child(target, ValueNS, dummy_binding); let _ = e.source_module.try_define_child(target, TypeNS, dummy_binding); diff --git a/src/test/compile-fail/import.rs b/src/test/compile-fail/import.rs index 390bba235806a..ff93cd0f06624 100644 --- a/src/test/compile-fail/import.rs +++ b/src/test/compile-fail/import.rs @@ -19,6 +19,6 @@ mod zed { } fn main() { - zed::foo(); // Check that this does not panic. Ideally, it would be a privacy error. + zed::foo(); //~ ERROR unresolved name bar(); }