Skip to content

Commit 37625bf

Browse files
committed
Use nodes_newly_allocated_in_current_session to lookup forbidden reads
1 parent 421b61d commit 37625bf

File tree

1 file changed

+18
-5
lines changed
  • compiler/rustc_query_system/src/dep_graph

1 file changed

+18
-5
lines changed

compiler/rustc_query_system/src/dep_graph/graph.rs

+18-5
Original file line numberDiff line numberDiff line change
@@ -653,7 +653,7 @@ impl<D: Deps> DepGraphData<D> {
653653
&self.current.nodes_newly_allocated_in_current_session
654654
{
655655
outline(|| {
656-
let seen = nodes_newly_allocated_in_current_session.lock().contains(dep_node);
656+
let seen = nodes_newly_allocated_in_current_session.lock().contains_key(dep_node);
657657
assert!(!seen, "{}", msg());
658658
});
659659
}
@@ -1103,7 +1103,7 @@ pub(super) struct CurrentDepGraph<D: Deps> {
11031103
///
11041104
/// The map contains all DepNodes that have been allocated in the current session so far and
11051105
/// for which there is no equivalent in the previous session.
1106-
nodes_newly_allocated_in_current_session: Option<Lock<FxHashSet<DepNode>>>,
1106+
nodes_newly_allocated_in_current_session: Option<Lock<FxHashMap<DepNode, DepNodeIndex>>>,
11071107

11081108
/// Anonymous `DepNode`s are nodes whose IDs we compute from the list of
11091109
/// their edges. This has the beneficial side-effect that multiple anonymous
@@ -1178,7 +1178,7 @@ impl<D: Deps> CurrentDepGraph<D> {
11781178
#[cfg(debug_assertions)]
11791179
fingerprints: Lock::new(IndexVec::from_elem_n(None, new_node_count_estimate)),
11801180
nodes_newly_allocated_in_current_session: new_node_dbg.then(|| {
1181-
Lock::new(FxHashSet::with_capacity_and_hasher(
1181+
Lock::new(FxHashMap::with_capacity_and_hasher(
11821182
new_node_count_estimate,
11831183
Default::default(),
11841184
))
@@ -1215,7 +1215,11 @@ impl<D: Deps> CurrentDepGraph<D> {
12151215
self.nodes_newly_allocated_in_current_session
12161216
{
12171217
outline(|| {
1218-
if !nodes_newly_allocated_in_current_session.lock().insert(key) {
1218+
if nodes_newly_allocated_in_current_session
1219+
.lock()
1220+
.insert(key, dep_node_index)
1221+
.is_some()
1222+
{
12191223
panic!("Found duplicate dep-node {key:?}");
12201224
}
12211225
});
@@ -1317,7 +1321,7 @@ impl<D: Deps> CurrentDepGraph<D> {
13171321
!self
13181322
.nodes_newly_allocated_in_current_session
13191323
.as_ref()
1320-
.map_or(false, |set| set.lock().contains(node)),
1324+
.map_or(false, |set| set.lock().contains_key(node)),
13211325
"node from previous graph present in new node collection"
13221326
);
13231327
}
@@ -1439,6 +1443,15 @@ fn panic_on_forbidden_read<D: Deps>(data: &DepGraphData<D>, dep_node_index: DepN
14391443
}
14401444
}
14411445

1446+
if dep_node.is_none()
1447+
&& let Some(nodes) = &data.current.nodes_newly_allocated_in_current_session
1448+
{
1449+
// Try to find it among the nodes allocated so far in this session
1450+
if let Some((node, _)) = nodes.lock().iter().find(|&(_, index)| *index == dep_node_index) {
1451+
dep_node = Some(*node);
1452+
}
1453+
}
1454+
14421455
let dep_node = dep_node.map_or_else(
14431456
|| format!("with index {:?}", dep_node_index),
14441457
|dep_node| format!("`{:?}`", dep_node),

0 commit comments

Comments
 (0)