Fixed failing test + minor cleanup

This commit is contained in:
Andrew Xie 2023-05-07 21:08:47 -04:00
parent cf7dea5716
commit 96b577860d
8 changed files with 20 additions and 18 deletions

View File

@ -62,6 +62,11 @@ impl<T, I: Iterator<Item = T>> UnordItems<T, I> {
UnordItems(self.0.filter_map(f))
}
#[inline]
pub fn for_each<F: Fn(T) -> ()>(self, f: F) {
self.0.for_each(|x| f(x));
}
#[inline]
pub fn max(self) -> Option<T>
where

View File

@ -377,20 +377,17 @@ impl<'tcx> DirtyCleanVisitor<'tcx> {
continue;
};
self.checked_attrs.insert(attr.id);
assertion.clean.items().all(|label| {
assertion.clean.items().for_each(|label| {
let dep_node = DepNode::from_label_string(self.tcx, &label, def_path_hash).unwrap();
self.assert_clean(item_span, dep_node);
true
});
assertion.dirty.items().all(|label| {
assertion.dirty.items().for_each(|label| {
let dep_node = DepNode::from_label_string(self.tcx, &label, def_path_hash).unwrap();
self.assert_dirty(item_span, dep_node);
true
});
assertion.loaded_from_disk.items().all(|label| {
assertion.loaded_from_disk.items().for_each(|label| {
let dep_node = DepNode::from_label_string(self.tcx, &label, def_path_hash).unwrap();
self.assert_loaded_from_disk(item_span, dep_node);
true
});
}
}

View File

@ -674,7 +674,7 @@ pub fn garbage_collect_session_directories(sess: &Session) -> io::Result<()> {
// Delete all lock files, that don't have an associated directory. They must
// be some kind of leftover
lock_file_to_session_dir.items().all(|(lock_file_name, directory_name)| {
lock_file_to_session_dir.items().for_each(|(lock_file_name, directory_name)| {
if directory_name.is_none() {
let Ok(timestamp) = extract_timestamp_from_session_dir(lock_file_name) else {
debug!(
@ -682,7 +682,7 @@ pub fn garbage_collect_session_directories(sess: &Session) -> io::Result<()> {
crate_directory.join(&lock_file_name).display()
);
// Ignore it
return true;
return;
};
let lock_file_path = crate_directory.join(&**lock_file_name);
@ -702,7 +702,6 @@ pub fn garbage_collect_session_directories(sess: &Session) -> io::Result<()> {
);
}
}
true
});
// Filter out `None` directories

View File

@ -10,7 +10,7 @@ fn test_all_except_most_recent() {
((UNIX_EPOCH + Duration::new(2, 0), PathBuf::from("2")), None),
]);
let mut paths = UnordSet::default();
UnordSet::extend_unord(&mut paths, computed.into_items().map(|((_, path), _)| path));
paths.extend_unord(all_except_most_recent(computed).into_items().map(|(path, _)| path));
assert_eq!(
UnordSet::from(paths),
UnordSet::from_iter([

View File

@ -163,7 +163,7 @@ pub fn load_dep_graph(sess: &Session) -> DepGraphFuture {
Decodable::decode(&mut work_product_decoder);
for swp in work_products {
let all_files_exist = swp.work_product.saved_files.iter().all(|(_, path)| {
let all_files_exist = swp.work_product.saved_files.items().all(|(_, path)| {
let exists = in_incr_comp_dir_sess(sess, path).exists();
if !exists && sess.opts.unstable_opts.incremental_info {
eprintln!("incremental: could not find file for work product: {path}",);

View File

@ -105,7 +105,7 @@ pub fn save_work_product_index(
if !new_work_products.contains_key(id) {
work_product::delete_workproduct_files(sess, wp);
debug_assert!(
!wp.saved_files.iter().all(|(_, path)| in_incr_comp_dir_sess(sess, path).exists())
!wp.saved_files.items().all(|(_, path)| in_incr_comp_dir_sess(sess, path).exists())
);
}
}
@ -113,7 +113,7 @@ pub fn save_work_product_index(
// Check that we did not delete one of the current work-products:
debug_assert!({
new_work_products.iter().all(|(_, wp)| {
wp.saved_files.iter().all(|(_, path)| in_incr_comp_dir_sess(sess, path).exists())
wp.saved_files.items().all(|(_, path)| in_incr_comp_dir_sess(sess, path).exists())
})
});
}

View File

@ -4,7 +4,7 @@
use crate::errors;
use crate::persist::fs::*;
use rustc_data_structures::fx::FxIndexMap;
use rustc_data_structures::unord::UnordMap;
use rustc_fs_util::link_or_copy;
use rustc_middle::dep_graph::{WorkProduct, WorkProductId};
use rustc_session::Session;
@ -20,7 +20,7 @@ pub fn copy_cgu_workproduct_to_incr_comp_cache_dir(
debug!(?cgu_name, ?files);
sess.opts.incremental.as_ref()?;
let mut saved_files = FxIndexMap::default();
let mut saved_files = UnordMap::default();
for (ext, path) in files {
let file_name = format!("{cgu_name}.{ext}");
let path_in_incr_dir = in_incr_comp_dir_sess(sess, &file_name);
@ -46,10 +46,10 @@ pub fn copy_cgu_workproduct_to_incr_comp_cache_dir(
/// Removes files for a given work product.
pub fn delete_workproduct_files(sess: &Session, work_product: &WorkProduct) {
for (_, path) in &work_product.saved_files {
work_product.saved_files.items().for_each(|(_, path)| {
let path = in_incr_comp_dir_sess(sess, path);
if let Err(err) = std_fs::remove_file(&path) {
sess.emit_warning(errors::DeleteWorkProduct { path: &path, err });
}
}
});
}

View File

@ -6,6 +6,7 @@ use rustc_data_structures::sharded::{self, Sharded};
use rustc_data_structures::stable_hasher::{HashStable, StableHasher};
use rustc_data_structures::steal::Steal;
use rustc_data_structures::sync::{AtomicU32, AtomicU64, Lock, Lrc, Ordering};
use rustc_data_structures::unord::UnordMap;
use rustc_index::IndexVec;
use rustc_serialize::opaque::{FileEncodeResult, FileEncoder};
use smallvec::{smallvec, SmallVec};
@ -1048,7 +1049,7 @@ pub struct WorkProduct {
///
/// By convention, file extensions are currently used as identifiers, i.e. the key "o" maps to
/// the object file's path, and "dwo" to the dwarf object file's path.
pub saved_files: FxIndexMap<String, String>,
pub saved_files: UnordMap<String, String>,
}
// Index type for `DepNodeData`'s edges.