From b223c9c4651ee2f4b8fe2af0136e657a0893caa4 Mon Sep 17 00:00:00 2001 From: Patrick Walton Date: Wed, 7 Nov 2012 14:27:07 -0800 Subject: [PATCH] rustc: Autovivify modules even when a type def is present in resolve. Closes #3931. rs=nasty-bug --- src/librustc/middle/resolve.rs | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/src/librustc/middle/resolve.rs b/src/librustc/middle/resolve.rs index 8ebebfa11216..b915086c5511 100644 --- a/src/librustc/middle/resolve.rs +++ b/src/librustc/middle/resolve.rs @@ -1738,15 +1738,30 @@ impl Resolver { match child_name_bindings.type_def { None => { debug!("(building reduced graph for external crate) \ - autovivifying %s", *ident_str); + autovivifying missing type def %s", + *ident_str); let parent_link = self.get_parent_link(new_parent, ident); (*child_name_bindings).define_module(Public, parent_link, - None, false, + None, + false, dummy_sp()); } - Some(_) => { /* Fall through. */ } + Some(copy type_ns_def) + if type_ns_def.module_def.is_none() => { + debug!("(building reduced graph for external crate) \ + autovivifying missing module def %s", + *ident_str); + let parent_link = self.get_parent_link(new_parent, + ident); + (*child_name_bindings).define_module(Public, + parent_link, + None, + false, + dummy_sp()); + } + _ => {} // Fall through. } current_module = (*child_name_bindings).get_module();