Positive coverage: overlap_check_impl / inverted
inverted| Line | Coverage | Source |
|---|---|---|
| 114 | ✗ | (if impl_a != impl_b) |
| 115 | ✗ | (if impl_a.trait_id() == impl_b.trait_id()) |
| 116 | ✗ | (scope(enter_universally(Env::default(), &impl_a.binder) => (env, a)) with() (scope(enter_universally(env, &impl_b.binder) => (env, b)) with() (wc in a.where_clauses.iter().chain(&b.where_clauses).flat_map(|wc| wc.invert())) (prove_goal(program, env, (Predicates::all_eq(&a.trait_ref().parameters, &b.trait_ref().parameters), &a.where_clauses, &b.where_clauses), wc) => ()))) |
| ──────── ("inverted") | ||
| 121 | 1 | (overlap_check_impl(program, impl_a, impl_b) => ()) |
1 test exercised this rule:
Source location: tests/coherence_overlap.rs:237 (all coverage from this test)
#[test]
fn neg_CoreTrait_for_CoreStruct_implies_no_overlap() {
FormalityTest::new(crates![crate core {
#![feature(negative_impls)]
trait CoreTrait {}
struct CoreStruct {}
impl !CoreTrait for CoreStruct {}
},
crate foo {
trait FooTrait {}
impl<T> FooTrait for T where T: CoreTrait {}
impl FooTrait for CoreStruct {}
}])
.skip_execute()
.ok()
}
Proof tree
check_all_crates (check all prefixes)mod.rs:55args
for_allmod.rs:42for_allmod.rs:52args
check_crate (check crate)mod.rs:76args
for_allmod.rs:61for_allmod.rs:73args
check_crate_item (feature gate)mod.rs:225args
for_allmod.rs:73args
check_crate_item (trait)mod.rs:189args
check_trait (check trait)traits.rs:25args
scopetraits.rs:9prove_predicate_list (none)prove_predicate_list.rs:21args
for_allmod.rs:73args
check_crate_item (adt)mod.rs:202args
check_adt (check adt)adts.rs:26args
scopeadts.rs:11prove_predicate_list (none)prove_predicate_list.rs:21args
for_allmod.rs:73args
check_crate_item (neg trait impl)mod.rs:214args
check_neg_trait_impl (check_neg_trait_impl)impls.rs:68args
scopeimpls.rs:46prove_predicate_list (none)prove_predicate_list.rs:21args
prove_predicate_list (some)prove_predicate_list.rs:28args
prove_predicate (negative impl)prove_predicate.rs:95args
scopeprove_predicate.rs:22prove_predicate_list (some)prove_predicate_list.rs:28args
prove_predicate (eq)prove_predicate.rs:116args
prove_after (prove_after)prove_after.rs:20args
prove_predicate_list (none)prove_predicate_list.rs:21args
prove_after (prove_after)prove_after.rs:20args
prove_predicate_list (none)prove_predicate_list.rs:21args
prove_after (prove_after)prove_after.rs:20args
prove_predicate_list (none)prove_predicate_list.rs:21args
check_coherence (check_coherence)coherence.rs:23args
for_allcoherence.rs:7for_allcoherence.rs:21args
orphan_check_neg (orphan_check_neg)coherence.rs:58args
scopecoherence.rs:44prove_predicate_list (some)prove_predicate_list.rs:28args
prove_predicate (trait ref is local)prove_predicate.rs:137args
is_local_trait_ref (local trait)is_local.rs:217args
prove_after (prove_after)prove_after.rs:20args
prove_predicate_list (none)prove_predicate_list.rs:21args
for_allmod.rs:52args
check_crate (check crate)mod.rs:76args
for_allmod.rs:61for_allmod.rs:73args
check_crate_item (trait)mod.rs:189args
check_trait (check trait)traits.rs:25args
scopetraits.rs:9prove_predicate_list (none)prove_predicate_list.rs:21args
for_allmod.rs:73args
check_crate_item (trait impl)mod.rs:196args
check_trait_impl (check_trait_impl)impls.rs:40args
scopeimpls.rs:14prove_predicate_list (some)prove_predicate_list.rs:28args
prove_predicate (trait well formed)prove_predicate.rs:131args
for_allcombinators.rs:69prove_wf (universal variables)prove_wf.rs:27args
prove_after (prove_after)prove_after.rs:20args
prove_predicate_list (none)prove_predicate_list.rs:21args
prove_after (prove_after)prove_after.rs:20args
prove_predicate_list (none)prove_predicate_list.rs:21args
prove_predicate_list (some)prove_predicate_list.rs:28args
prove_predicate (positive impl)prove_predicate.rs:79args
scopeprove_predicate.rs:22prove_predicate_list (some)prove_predicate_list.rs:28args
prove_predicate (eq)prove_predicate.rs:116args
prove_eq (symmetric)prove_eq.rs:39args
prove_eq (existential)prove_eq.rs:63args
prove_existential_var_eq (existential-universal)prove_eq.rs:141args
prove_after (prove_after)prove_after.rs:20args
prove_predicate_list (none)prove_predicate_list.rs:21args
prove_after (prove_after)prove_after.rs:20args
prove_predicate_list (some)prove_predicate_list.rs:28args
prove_predicate (assumption)prove_predicate.rs:49args
prove_via (predicate-congruence-axiom)prove_via.rs:33args
prove_predicate_list (some)prove_predicate_list.rs:28args
prove_predicate (eq)prove_predicate.rs:116args
prove_after (prove_after)prove_after.rs:20args
prove_predicate_list (none)prove_predicate_list.rs:21args
prove_after (prove_after)prove_after.rs:20args
prove_predicate_list (none)prove_predicate_list.rs:21args
prove_after (prove_after)prove_after.rs:20args
prove_predicate_list (none)prove_predicate_list.rs:21args
prove_after (prove_after)prove_after.rs:20args
prove_predicate_list (none)prove_predicate_list.rs:21args
check_safety_matches (safety matches)impls.rs:83args
check_drop_impl_always_applicable (not a Drop impl)impls.rs:342args
for_allmod.rs:73args
check_crate_item (trait impl)mod.rs:196args
check_trait_impl (check_trait_impl)impls.rs:40args
scopeimpls.rs:14prove_predicate_list (none)prove_predicate_list.rs:21args
prove_predicate_list (some)prove_predicate_list.rs:28args
prove_predicate (positive impl)prove_predicate.rs:79args
scopeprove_predicate.rs:22prove_predicate_list (some)prove_predicate_list.rs:28args
prove_predicate (eq)prove_predicate.rs:116args
prove_after (prove_after)prove_after.rs:20args
prove_predicate_list (none)prove_predicate_list.rs:21args
prove_after (prove_after)prove_after.rs:20args
prove_predicate_list (none)prove_predicate_list.rs:21args
prove_after (prove_after)prove_after.rs:20args
prove_predicate_list (none)prove_predicate_list.rs:21args
prove_after (prove_after)prove_after.rs:20args
prove_predicate_list (none)prove_predicate_list.rs:21args
check_safety_matches (safety matches)impls.rs:83args
check_drop_impl_always_applicable (not a Drop impl)impls.rs:342args
check_coherence (check_coherence)coherence.rs:23args
for_allcoherence.rs:7for_allcoherence.rs:16args
for_allcoherence.rs:7for_allcoherence.rs:17args
overlap_check_impl (same impl)coherence.rs:73args
for_allcoherence.rs:17args
overlap_check_impl (inverted)coherence.rs:120args
scopecoherence.rs:64scopecoherence.rs:64prove_predicate_list (some)prove_predicate_list.rs:28args
prove_predicate (negative impl)prove_predicate.rs:95args
scopeprove_predicate.rs:22prove_predicate_list (some)prove_predicate_list.rs:28args
prove_predicate (assumption)prove_predicate.rs:49args
prove_via (relation-axiom)prove_via.rs:43args
prove_after (prove_after)prove_after.rs:20args
prove_predicate_list (none)prove_predicate_list.rs:21args
prove_after (prove_after)prove_after.rs:20args
prove_predicate_list (none)prove_predicate_list.rs:21args
prove_after (prove_after)prove_after.rs:20args
prove_predicate_list (none)prove_predicate_list.rs:21args
for_allcoherence.rs:16args
for_allcoherence.rs:7for_allcoherence.rs:17args
overlap_check_impl (inverted)coherence.rs:120args
scopecoherence.rs:64scopecoherence.rs:64prove_predicate_list (some)prove_predicate_list.rs:28args
prove_predicate (negative impl)prove_predicate.rs:95args
scopeprove_predicate.rs:22prove_predicate_list (some)prove_predicate_list.rs:28args
prove_predicate (eq)prove_predicate.rs:116args
prove_eq (normalize-l)prove_eq.rs:70args
prove_normalize (normalize-via-assumption)prove_normalize.rs:37args
prove_normalize_via (axiom-r)prove_normalize.rs:107args
prove_after (prove_after)prove_after.rs:20args
prove_predicate_list (some)prove_predicate_list.rs:28args
prove_predicate (eq)prove_predicate.rs:116args
prove_after (prove_after)prove_after.rs:20args
prove_predicate_list (none)prove_predicate_list.rs:21args
prove_after (prove_after)prove_after.rs:20args
prove_predicate_list (none)prove_predicate_list.rs:21args
prove_after (prove_after)prove_after.rs:20args
prove_predicate_list (none)prove_predicate_list.rs:21args
prove_after (prove_after)prove_after.rs:20args
prove_predicate_list (none)prove_predicate_list.rs:21args
for_allcoherence.rs:17args
overlap_check_impl (same impl)coherence.rs:73args
for_allcoherence.rs:7for_allcoherence.rs:19args
orphan_check (orphan_check)coherence.rs:38args
scopecoherence.rs:30prove_predicate_list (some)prove_predicate_list.rs:28args
prove_predicate (trait ref is local)prove_predicate.rs:137args
is_local_trait_ref (local trait)is_local.rs:217args
prove_after (prove_after)prove_after.rs:20args
prove_predicate_list (none)prove_predicate_list.rs:21args
for_allcoherence.rs:19args
orphan_check (orphan_check)coherence.rs:38args
scopecoherence.rs:30prove_predicate_list (some)prove_predicate_list.rs:28args
prove_predicate (trait ref is local)prove_predicate.rs:137args
is_local_trait_ref (local trait)is_local.rs:217args
prove_after (prove_after)prove_after.rs:20args
prove_predicate_list (none)prove_predicate_list.rs:21args