]> git.lizzy.rs Git - rust.git/commitdiff
Fixes #32222
authorJeffrey Seyfried <jeffrey.seyfried@gmail.com>
Sun, 13 Mar 2016 10:31:40 +0000 (10:31 +0000)
committerJeffrey Seyfried <jeffrey.seyfried@gmail.com>
Sun, 13 Mar 2016 10:46:19 +0000 (10:46 +0000)
src/librustc_resolve/resolve_imports.rs

index 89586db32bcee9cb8191660070610a59aa79f744..31524b9a12accd4feb973dc0a660f1aeb4669117 100644 (file)
@@ -276,12 +276,6 @@ pub fn increment_outstanding_references_for(&self, name: Name, ns: Namespace, is
             .increment_outstanding_references(is_public);
     }
 
-    fn decrement_outstanding_references_for(&self, name: Name, ns: Namespace, is_public: bool) {
-        self.update_resolution(name, ns, |resolution| {
-            resolution.decrement_outstanding_references(is_public);
-        })
-    }
-
     // Use `update` to mutate the resolution for the name.
     // If the resolution becomes a success, define it in the module's glob importers.
     fn update_resolution<T, F>(&self, name: Name, ns: Namespace, update: F) -> T
@@ -485,7 +479,8 @@ fn resolve_import(&mut self,
                 // Temporarily count the directive as determined so that the resolution fails
                 // (as opposed to being indeterminate) when it can only be defined by the directive.
                 if !determined {
-                    module_.decrement_outstanding_references_for(target, ns, directive.is_public)
+                    module_.resolutions.borrow_mut().get_mut(&(target, ns)).unwrap()
+                           .decrement_outstanding_references(directive.is_public);
                 }
                 let result =
                     self.resolver.resolve_name_in_module(target_module, source, ns, false, true);
@@ -522,7 +517,10 @@ fn resolve_import(&mut self,
                     self.report_conflict(target, ns, &directive.import(binding, None), old_binding);
                 }
             }
-            module_.decrement_outstanding_references_for(target, ns, directive.is_public);
+
+            module_.update_resolution(target, ns, |resolution| {
+                resolution.decrement_outstanding_references(directive.is_public);
+            })
         }
 
         match (&value_result, &type_result) {