]> git.lizzy.rs Git - rust.git/commitdiff
simplify unused unsafe block handling
authorljedrz <ljedrz@gmail.com>
Thu, 16 Apr 2020 12:24:52 +0000 (14:24 +0200)
committerljedrz <ljedrz@gmail.com>
Thu, 16 Apr 2020 12:24:52 +0000 (14:24 +0200)
src/librustc_mir/transform/check_unsafety.rs

index 3ce9b875e16cc2861bb81c4c242ee3749833ca1b..595b0432015b3e4f448616bde62427783aec2b25 100644 (file)
@@ -641,13 +641,17 @@ pub fn check_unsafety(tcx: TyCtxt<'_>, def_id: DefId) {
         }
     }
 
-    let mut unsafe_blocks: Vec<_> = unsafe_blocks.iter().collect();
-    unsafe_blocks.sort_by_cached_key(|(hir_id, _)| tcx.hir().hir_id_to_node_id(*hir_id));
-    let used_unsafe: FxHashSet<_> =
-        unsafe_blocks.iter().flat_map(|&&(id, used)| used.then_some(id)).collect();
-    for &(block_id, is_used) in unsafe_blocks {
-        if !is_used {
-            report_unused_unsafe(tcx, &used_unsafe, block_id);
+    let (mut unsafe_used, mut unsafe_unused): (FxHashSet<_>, Vec<_>) = Default::default();
+    for &(block_id, is_used) in unsafe_blocks.iter() {
+        if is_used {
+            unsafe_used.insert(block_id);
+        } else {
+            unsafe_unused.push(block_id);
         }
     }
+    unsafe_unused.sort_by_cached_key(|hir_id| tcx.hir().hir_id_to_node_id(*hir_id));
+
+    for &block_id in &unsafe_unused {
+        report_unused_unsafe(tcx, &unsafe_used, block_id);
+    }
 }