Skip to content

Commit

Permalink
fix stupid bug
Browse files Browse the repository at this point in the history
  • Loading branch information
arielb1 committed Dec 14, 2018
1 parent 7606396 commit 6e4b2b3
Showing 1 changed file with 48 additions and 38 deletions.
86 changes: 48 additions & 38 deletions src/librustc_typeck/coherence/inherent_impls_overlap.rs
Original file line number Diff line number Diff line change
Expand Up @@ -94,7 +94,9 @@ impl<'a, 'tcx> InherentOverlapChecker<'a, 'tcx> {

for (i, &impl1_def_id) in impls.iter().enumerate() {
for &impl2_def_id in &impls[(i + 1)..] {
let mut used_to_be_allowed = traits::overlapping_impls(
// First, check if the impl was forbidden under the
// old rules. In that case, just have an error.
let used_to_be_allowed = traits::overlapping_impls(
self.tcx,
impl1_def_id,
impl2_def_id,
Expand All @@ -105,52 +107,60 @@ impl<'a, 'tcx> InherentOverlapChecker<'a, 'tcx> {
impl1_def_id,
impl2_def_id,
overlap,
Some(FutureCompatOverlapErrorKind::Issue43355),
None,
);
false
},
|| true,
);

if used_to_be_allowed {
used_to_be_allowed = traits::overlapping_impls(
self.tcx,
impl1_def_id,
impl2_def_id,
IntercrateMode::Fixed,
TraitObjectMode::NoSquash,
|overlap| {
self.check_for_common_items_in_impls(
impl1_def_id,
impl2_def_id,
overlap,
None,
);
false
},
|| true,
);
if !used_to_be_allowed {
continue;
}

if used_to_be_allowed {
traits::overlapping_impls(
self.tcx,
impl1_def_id,
impl2_def_id,
IntercrateMode::Fixed,
TraitObjectMode::SquashAutoTraitsIssue33140,
|overlap| {
self.check_for_common_items_in_impls(
impl1_def_id,
impl2_def_id,
overlap,
Some(FutureCompatOverlapErrorKind::Issue33140),
);
false
},
|| true,
);
// Then, check if the impl was forbidden under only
// #43355. In that case, emit an #43355 error.
let used_to_be_allowed = traits::overlapping_impls(
self.tcx,
impl1_def_id,
impl2_def_id,
IntercrateMode::Fixed,
TraitObjectMode::NoSquash,
|overlap| {
self.check_for_common_items_in_impls(
impl1_def_id,
impl2_def_id,
overlap,
Some(FutureCompatOverlapErrorKind::Issue43355),
);
false
},
|| true,
);

if !used_to_be_allowed {
continue;
}

// Then, check if the impl was forbidden under
// #33140. In that case, emit a #33140 error.
traits::overlapping_impls(
self.tcx,
impl1_def_id,
impl2_def_id,
IntercrateMode::Fixed,
TraitObjectMode::SquashAutoTraitsIssue33140,
|overlap| {
self.check_for_common_items_in_impls(
impl1_def_id,
impl2_def_id,
overlap,
Some(FutureCompatOverlapErrorKind::Issue33140),
);
false
},
|| true,
);
}
}
}
Expand Down

0 comments on commit 6e4b2b3

Please sign in to comment.