Skip to content

Commit

Permalink
Do not store overlap_mode, just pass it down on insert
Browse files Browse the repository at this point in the history
  • Loading branch information
spastorino committed Jan 31, 2022
1 parent a9bfb5d commit 0decf14
Show file tree
Hide file tree
Showing 3 changed files with 6 additions and 16 deletions.
14 changes: 1 addition & 13 deletions compiler/rustc_middle/src/traits/specialization_graph.rs
Original file line number Diff line number Diff line change
Expand Up @@ -32,23 +32,11 @@ pub struct Graph {

/// Whether an error was emitted while constructing the graph.
pub has_errored: bool,

/// Overlap mode to be used
pub overlap_mode: OverlapMode,
}

impl Graph {
pub fn new() -> Graph {
Graph {
parent: Default::default(),
children: Default::default(),
has_errored: false,
overlap_mode: OverlapMode::Stable,
}
}

pub fn set_overlap_mode(&mut self, overlap_mode: OverlapMode) {
self.overlap_mode = overlap_mode;
Graph { parent: Default::default(), children: Default::default(), has_errored: false }
}

/// The parent of a given impl, which is the `DefId` of the trait when the
Expand Down
4 changes: 2 additions & 2 deletions compiler/rustc_trait_selection/src/traits/specialize/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -257,7 +257,7 @@ pub(super) fn specialization_graph_provider(
trait_id: DefId,
) -> specialization_graph::Graph {
let mut sg = specialization_graph::Graph::new();
sg.set_overlap_mode(specialization_graph::OverlapMode::get(tcx, trait_id));
let overlap_mode = specialization_graph::OverlapMode::get(tcx, trait_id);

let mut trait_impls: Vec<_> = tcx.all_impls(trait_id).collect();

Expand All @@ -271,7 +271,7 @@ pub(super) fn specialization_graph_provider(
for impl_def_id in trait_impls {
if let Some(impl_def_id) = impl_def_id.as_local() {
// This is where impl overlap checking happens:
let insert_result = sg.insert(tcx, impl_def_id.to_def_id());
let insert_result = sg.insert(tcx, impl_def_id.to_def_id(), overlap_mode);
// Report error if there was one.
let (overlap, used_to_be_allowed) = match insert_result {
Err(overlap) => (Some(overlap), None),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -277,6 +277,7 @@ pub trait GraphExt {
&mut self,
tcx: TyCtxt<'_>,
impl_def_id: DefId,
overlap_mode: OverlapMode,
) -> Result<Option<FutureCompatOverlapError>, OverlapError>;

/// Insert cached metadata mapping from a child impl back to its parent.
Expand All @@ -291,6 +292,7 @@ impl GraphExt for Graph {
&mut self,
tcx: TyCtxt<'_>,
impl_def_id: DefId,
overlap_mode: OverlapMode,
) -> Result<Option<FutureCompatOverlapError>, OverlapError> {
assert!(impl_def_id.is_local());

Expand Down Expand Up @@ -335,7 +337,7 @@ impl GraphExt for Graph {
tcx,
impl_def_id,
simplified,
self.overlap_mode,
overlap_mode,
)?;

match insert_result {
Expand Down

0 comments on commit 0decf14

Please sign in to comment.