]> git.lizzy.rs Git - rust.git/commitdiff
ensure lint are issued in a stable order
authorNiko Matsakis <niko@alum.mit.edu>
Thu, 10 May 2018 23:04:02 +0000 (19:04 -0400)
committerNiko Matsakis <niko@alum.mit.edu>
Thu, 10 May 2018 23:39:00 +0000 (19:39 -0400)
src/librustc/middle/resolve_lifetime.rs

index 49a88323653122f3ee449d64cf07a8d9e2c0efa4..8c19a19523275d226692e95be3fa0d1349ed5323 100644 (file)
@@ -1306,33 +1306,33 @@ fn check_uses_for_lifetimes_defined_by_scope(&mut self) {
             }
         };
 
-        for region in defined_by.values() {
-            debug!(
-                "check_uses_for_lifetimes_defined_by_scope: region = {:?}",
-                region
-            );
-
-            let def_id = match region {
+        let mut def_ids: Vec<_> = defined_by.values()
+            .flat_map(|region| match region {
                 Region::EarlyBound(_, def_id, _)
                 | Region::LateBound(_, def_id, _)
-                | Region::Free(_, def_id) => def_id,
+                | Region::Free(_, def_id) => Some(*def_id),
 
-                Region::LateBoundAnon(..) | Region::Static => continue,
-            };
+                Region::LateBoundAnon(..) | Region::Static => None,
+            })
+            .collect();
+
+        // ensure that we issue lints in a repeatable order
+        def_ids.sort_by_key(|&def_id| self.tcx.def_path_hash(def_id));
 
+        for def_id in def_ids {
             debug!(
                 "check_uses_for_lifetimes_defined_by_scope: def_id = {:?}",
-                def_id
+                def_id,
             );
 
-            let lifetimeuseset = self.lifetime_uses.remove(def_id);
+            let lifetimeuseset = self.lifetime_uses.remove(&def_id);
             debug!(
                 "check_uses_for_lifetimes_defined_by_scope: lifetimeuseset = {:?}",
                 lifetimeuseset
             );
             match lifetimeuseset {
                 Some(LifetimeUseSet::One(_)) => {
-                    let node_id = self.tcx.hir.as_local_node_id(*def_id).unwrap();
+                    let node_id = self.tcx.hir.as_local_node_id(def_id).unwrap();
                     debug!("node id first={:?}", node_id);
                     if let hir::map::NodeLifetime(hir_lifetime) = self.tcx.hir.get(node_id) {
                         let span = hir_lifetime.span;
@@ -1359,7 +1359,7 @@ fn check_uses_for_lifetimes_defined_by_scope(&mut self) {
                     debug!("Not one use lifetime");
                 }
                 None => {
-                    let node_id = self.tcx.hir.as_local_node_id(*def_id).unwrap();
+                    let node_id = self.tcx.hir.as_local_node_id(def_id).unwrap();
                     if let hir::map::NodeLifetime(hir_lifetime) = self.tcx.hir.get(node_id) {
                         let span = hir_lifetime.span;
                         let id = hir_lifetime.id;