Positive coverage: prove_wc / negative impl
negative impl| Line | Coverage | Source |
|---|---|---|
| 101 | ✗ | (i in decls.neg_impl_decls(&trait_ref.trait_id)) |
| 102 | N/A | (let (env, subst) = env.existential_substitution(&i.binder)) |
| 103 | N/A | (let i = i.binder.instantiate_with(&subst).unwrap()) |
| 104 | ✗ | (prove(decls, env, assumptions, Wcs::all_eq(&trait_ref.parameters, &i.trait_ref.parameters)) => c) |
| 105 | ✗ | (prove_after(decls, c, assumptions, &i.where_clause) => c) |
| ──────── ("negative impl") | ||
| 107 | 3 | (prove_wc(decls, env, assumptions, Predicate::NotImplemented(trait_ref)) => c.pop_subst(&subst)) |
3 tests exercised this rule:
Source location: tests/basic_tests.rs:179
#[test]
fn non_lifetime_binder_in_neg_trait_impl_where_clause_pass() {
FormalityTest::new(crates![crate core {
#![feature(non_lifetime_binders)]
trait A<T> where T: B { }
trait B { }
impl<T> !A<T> for u32 where for<U> u32: A<U> { }
impl <T> B for T {}
}])
.skip_execute()
.ok()
}
Proof tree
check_all_crates (check all prefixes)mod.rs:54for_allmod.rs:41for_allmod.rs:51check_crate (check crate)mod.rs:75for_allmod.rs:60for_allmod.rs:72check_crate_item (feature gate)mod.rs:209
for_allmod.rs:72check_crate_item (trait)mod.rs:173check_trait (check trait)traits.rs:26prove_wc_list (some)prove_wc_list.rs:31prove_wc (trait well formed)prove_wc.rs:143for_allcombinators.rs:69prove_wf (universal variables)prove_wf.rs:30
prove_after (prove_after)prove_after.rs:20prove_wc_list (none)prove_wc_list.rs:24
prove_after (prove_after)prove_after.rs:20prove_wc_list (none)prove_wc_list.rs:24
for_allmod.rs:72check_crate_item (trait)mod.rs:173check_trait (check trait)traits.rs:26prove_wc_list (none)prove_wc_list.rs:24
for_allmod.rs:72check_crate_item (neg trait impl)mod.rs:198check_neg_trait_impl (check_neg_trait_impl)impls.rs:64prove_wc_list (some)prove_wc_list.rs:31prove_wc (forall)prove_wc.rs:38prove_wc (trait well formed)prove_wc.rs:143for_allcombinators.rs:69prove_wf (integers and booleans)prove_wf.rs:59for_allcombinators.rs:69prove_wf (universal variables)prove_wf.rs:30
prove_after (prove_after)prove_after.rs:20prove_wc_list (some)prove_wc_list.rs:31prove_wc (positive impl)prove_wc.rs:89prove_wc_list (some)prove_wc_list.rs:31prove_wc (eq)prove_wc.rs:128prove_eq (symmetric)prove_eq.rs:41prove_eq (existential)prove_eq.rs:65prove_existential_var_eq (existential-universal)prove_eq.rs:143
prove_after (prove_after)prove_after.rs:20prove_wc_list (none)prove_wc_list.rs:24
prove_after (prove_after)prove_after.rs:20prove_wc_list (none)prove_wc_list.rs:24
prove_after (prove_after)prove_after.rs:20prove_wc_list (none)prove_wc_list.rs:24
prove_after (prove_after)prove_after.rs:20prove_wc_list (none)prove_wc_list.rs:24
prove_after (prove_after)prove_after.rs:20prove_wc_list (none)prove_wc_list.rs:24
prove_wc_list (some)prove_wc_list.rs:31prove_wc (negative impl)prove_wc.rs:106prove_wc_list (some)prove_wc_list.rs:31prove_wc (eq)prove_wc.rs:128prove_after (prove_after)prove_after.rs:20prove_wc_list (some)prove_wc_list.rs:31prove_wc (eq)prove_wc.rs:128prove_eq (symmetric)prove_eq.rs:41prove_eq (existential)prove_eq.rs:65prove_existential_var_eq (existential-universal)prove_eq.rs:143
prove_after (prove_after)prove_after.rs:20prove_wc_list (none)prove_wc_list.rs:24
prove_after (prove_after)prove_after.rs:20prove_wc_list (some)prove_wc_list.rs:31prove_wc (forall)prove_wc.rs:38prove_wc (assumption - predicate)prove_wc.rs:51prove_via (forall)prove_via.rs:51prove_via (predicate-congruence-axiom)prove_via.rs:32prove_wc_list (some)prove_wc_list.rs:31prove_wc (eq)prove_wc.rs:128prove_after (prove_after)prove_after.rs:20prove_wc_list (some)prove_wc_list.rs:31prove_wc (eq)prove_wc.rs:128prove_eq (existential)prove_eq.rs:65prove_existential_var_eq (existential-universal)prove_eq.rs:143
prove_after (prove_after)prove_after.rs:20prove_wc_list (none)prove_wc_list.rs:24
prove_after (prove_after)prove_after.rs:20prove_wc_list (none)prove_wc_list.rs:24
prove_after (prove_after)prove_after.rs:20prove_wc_list (none)prove_wc_list.rs:24
for_allmod.rs:72check_crate_item (trait impl)mod.rs:180check_trait_impl (check_trait_impl)impls.rs:39prove_wc_list (none)prove_wc_list.rs:24prove_wc_list (some)prove_wc_list.rs:31prove_wc (positive impl)prove_wc.rs:89prove_wc_list (some)prove_wc_list.rs:31prove_wc (eq)prove_wc.rs:128prove_eq (symmetric)prove_eq.rs:41prove_eq (existential)prove_eq.rs:65prove_existential_var_eq (existential-universal)prove_eq.rs:143
prove_after (prove_after)prove_after.rs:20prove_wc_list (none)prove_wc_list.rs:24
prove_after (prove_after)prove_after.rs:20prove_wc_list (none)prove_wc_list.rs:24
prove_after (prove_after)prove_after.rs:20prove_wc_list (none)prove_wc_list.rs:24
prove_after (prove_after)prove_after.rs:20prove_wc_list (none)prove_wc_list.rs:24
check_safety_matches (safety matches)impls.rs:79
check_drop_impl_always_applicable (not a Drop impl)impls.rs:295
check_coherence (check_coherence)coherence.rs:24for_allcoherence.rs:8for_allcoherence.rs:17for_allcoherence.rs:8for_allcoherence.rs:18overlap_check (skip_same_impl)coherence.rs:75
for_allcoherence.rs:8for_allcoherence.rs:20orphan_check (orphan_check)coherence.rs:39prove_wc_list (some)prove_wc_list.rs:31prove_wc (trait ref is local)prove_wc.rs:149is_local_trait_ref (local trait)is_local.rs:212
prove_after (prove_after)prove_after.rs:20prove_wc_list (none)prove_wc_list.rs:24
for_allcoherence.rs:8for_allcoherence.rs:22orphan_check_neg (orphan_check_neg)coherence.rs:59prove_wc_list (some)prove_wc_list.rs:31prove_wc (trait ref is local)prove_wc.rs:149is_local_trait_ref (local trait)is_local.rs:212
prove_after (prove_after)prove_after.rs:20prove_wc_list (none)prove_wc_list.rs:24
Source location: tests/coherence_overlap.rs:147
#[test]
fn neg_CoreTrait_for_CoreStruct_implies_no_overlap() {
FormalityTest::new(crates![crate core {
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:54for_allmod.rs:41for_allmod.rs:51check_crate (check crate)mod.rs:75for_allmod.rs:60for_allmod.rs:72check_crate_item (trait)mod.rs:173check_trait (check trait)traits.rs:26prove_wc_list (none)prove_wc_list.rs:24
for_allmod.rs:72check_crate_item (adt)mod.rs:186check_adt (check adt)adts.rs:27prove_wc_list (none)prove_wc_list.rs:24
for_allmod.rs:72check_crate_item (neg trait impl)mod.rs:198check_neg_trait_impl (check_neg_trait_impl)impls.rs:64prove_wc_list (none)prove_wc_list.rs:24prove_wc_list (some)prove_wc_list.rs:31prove_wc (negative impl)prove_wc.rs:106prove_wc_list (some)prove_wc_list.rs:31prove_wc (eq)prove_wc.rs:128prove_after (prove_after)prove_after.rs:20prove_wc_list (none)prove_wc_list.rs:24
prove_after (prove_after)prove_after.rs:20prove_wc_list (none)prove_wc_list.rs:24
prove_after (prove_after)prove_after.rs:20prove_wc_list (none)prove_wc_list.rs:24
check_coherence (check_coherence)coherence.rs:24for_allcoherence.rs:8for_allcoherence.rs:22orphan_check_neg (orphan_check_neg)coherence.rs:59prove_wc_list (some)prove_wc_list.rs:31prove_wc (trait ref is local)prove_wc.rs:149is_local_trait_ref (local trait)is_local.rs:212
prove_after (prove_after)prove_after.rs:20prove_wc_list (none)prove_wc_list.rs:24
for_allmod.rs:51check_crate (check crate)mod.rs:75for_allmod.rs:60for_allmod.rs:72check_crate_item (trait)mod.rs:173check_trait (check trait)traits.rs:26prove_wc_list (none)prove_wc_list.rs:24
for_allmod.rs:72check_crate_item (trait impl)mod.rs:180check_trait_impl (check_trait_impl)impls.rs:39prove_wc_list (some)prove_wc_list.rs:31prove_wc (trait well formed)prove_wc.rs:143for_allcombinators.rs:69prove_wf (universal variables)prove_wf.rs:30
prove_after (prove_after)prove_after.rs:20prove_wc_list (none)prove_wc_list.rs:24
prove_after (prove_after)prove_after.rs:20prove_wc_list (none)prove_wc_list.rs:24
prove_wc_list (some)prove_wc_list.rs:31prove_wc (positive impl)prove_wc.rs:89prove_wc_list (some)prove_wc_list.rs:31prove_wc (eq)prove_wc.rs:128prove_eq (symmetric)prove_eq.rs:41prove_eq (existential)prove_eq.rs:65prove_existential_var_eq (existential-universal)prove_eq.rs:143
prove_after (prove_after)prove_after.rs:20prove_wc_list (none)prove_wc_list.rs:24
prove_after (prove_after)prove_after.rs:20prove_wc_list (some)prove_wc_list.rs:31prove_wc (assumption - predicate)prove_wc.rs:51prove_via (predicate-congruence-axiom)prove_via.rs:32prove_wc_list (some)prove_wc_list.rs:31prove_wc (eq)prove_wc.rs:128prove_after (prove_after)prove_after.rs:20prove_wc_list (none)prove_wc_list.rs:24
prove_after (prove_after)prove_after.rs:20prove_wc_list (none)prove_wc_list.rs:24
prove_after (prove_after)prove_after.rs:20prove_wc_list (none)prove_wc_list.rs:24
prove_after (prove_after)prove_after.rs:20prove_wc_list (none)prove_wc_list.rs:24
check_safety_matches (safety matches)impls.rs:79
check_drop_impl_always_applicable (not a Drop impl)impls.rs:295
for_allmod.rs:72check_crate_item (trait impl)mod.rs:180check_trait_impl (check_trait_impl)impls.rs:39prove_wc_list (none)prove_wc_list.rs:24prove_wc_list (some)prove_wc_list.rs:31prove_wc (positive impl)prove_wc.rs:89prove_wc_list (some)prove_wc_list.rs:31prove_wc (eq)prove_wc.rs:128prove_after (prove_after)prove_after.rs:20prove_wc_list (none)prove_wc_list.rs:24
prove_after (prove_after)prove_after.rs:20prove_wc_list (none)prove_wc_list.rs:24
prove_after (prove_after)prove_after.rs:20prove_wc_list (none)prove_wc_list.rs:24
prove_after (prove_after)prove_after.rs:20prove_wc_list (none)prove_wc_list.rs:24
check_safety_matches (safety matches)impls.rs:79
check_drop_impl_always_applicable (not a Drop impl)impls.rs:295
check_coherence (check_coherence)coherence.rs:24for_allcoherence.rs:8for_allcoherence.rs:17for_allcoherence.rs:8for_allcoherence.rs:18overlap_check (skip_same_impl)coherence.rs:75
for_allcoherence.rs:18overlap_check (inverted)coherence.rs:174
for_allcoherence.rs:17for_allcoherence.rs:8for_allcoherence.rs:18overlap_check (inverted)coherence.rs:174
for_allcoherence.rs:18overlap_check (skip_same_impl)coherence.rs:75
for_allcoherence.rs:8for_allcoherence.rs:20orphan_check (orphan_check)coherence.rs:39prove_wc_list (some)prove_wc_list.rs:31prove_wc (trait ref is local)prove_wc.rs:149is_local_trait_ref (local trait)is_local.rs:212
prove_after (prove_after)prove_after.rs:20prove_wc_list (none)prove_wc_list.rs:24
for_allcoherence.rs:20orphan_check (orphan_check)coherence.rs:39prove_wc_list (some)prove_wc_list.rs:31prove_wc (trait ref is local)prove_wc.rs:149is_local_trait_ref (local trait)is_local.rs:212
prove_after (prove_after)prove_after.rs:20prove_wc_list (none)prove_wc_list.rs:24
Source location: tests/decl_safety.rs:32
#[test]
fn unsafe_trait_negative_impl() {
FormalityTest::new(crates![crate baguette {
unsafe trait Foo {}
impl !Foo for u32 {}
}])
.skip_execute()
.ok()
}
Proof tree
check_all_crates (check all prefixes)mod.rs:54for_allmod.rs:41for_allmod.rs:51check_crate (check crate)mod.rs:75for_allmod.rs:60for_allmod.rs:72check_crate_item (trait)mod.rs:173check_trait (check trait)traits.rs:26prove_wc_list (none)prove_wc_list.rs:24
for_allmod.rs:72check_crate_item (trait impl)mod.rs:180check_trait_impl (check_trait_impl)impls.rs:39prove_wc_list (none)prove_wc_list.rs:24prove_wc_list (some)prove_wc_list.rs:31prove_wc (positive impl)prove_wc.rs:89prove_wc_list (some)prove_wc_list.rs:31prove_wc (eq)prove_wc.rs:128prove_after (prove_after)prove_after.rs:20prove_wc_list (none)prove_wc_list.rs:24
prove_after (prove_after)prove_after.rs:20prove_wc_list (none)prove_wc_list.rs:24
prove_after (prove_after)prove_after.rs:20prove_wc_list (none)prove_wc_list.rs:24
prove_after (prove_after)prove_after.rs:20prove_wc_list (none)prove_wc_list.rs:24
check_safety_matches (safety matches)impls.rs:79
check_drop_impl_always_applicable (not a Drop impl)impls.rs:295
for_allmod.rs:72check_crate_item (trait impl)mod.rs:180check_trait_impl (check_trait_impl)impls.rs:39prove_wc_list (none)prove_wc_list.rs:24prove_wc_list (some)prove_wc_list.rs:31prove_wc (positive impl)prove_wc.rs:89prove_wc_list (some)prove_wc_list.rs:31prove_wc (eq)prove_wc.rs:128prove_after (prove_after)prove_after.rs:20prove_wc_list (none)prove_wc_list.rs:24
prove_after (prove_after)prove_after.rs:20prove_wc_list (none)prove_wc_list.rs:24
prove_after (prove_after)prove_after.rs:20prove_wc_list (none)prove_wc_list.rs:24
prove_after (prove_after)prove_after.rs:20prove_wc_list (none)prove_wc_list.rs:24
check_safety_matches (safety matches)impls.rs:79
check_drop_impl_always_applicable (not a Drop impl)impls.rs:295
for_allmod.rs:72check_crate_item (trait impl)mod.rs:180check_trait_impl (check_trait_impl)impls.rs:39prove_wc_list (none)prove_wc_list.rs:24prove_wc_list (some)prove_wc_list.rs:31prove_wc (positive impl)prove_wc.rs:89prove_wc_list (some)prove_wc_list.rs:31prove_wc (eq)prove_wc.rs:128prove_after (prove_after)prove_after.rs:20prove_wc_list (none)prove_wc_list.rs:24
prove_after (prove_after)prove_after.rs:20prove_wc_list (none)prove_wc_list.rs:24
prove_after (prove_after)prove_after.rs:20prove_wc_list (none)prove_wc_list.rs:24
prove_after (prove_after)prove_after.rs:20prove_wc_list (none)prove_wc_list.rs:24
check_safety_matches (safety matches)impls.rs:79
check_drop_impl_always_applicable (not a Drop impl)impls.rs:295
for_allmod.rs:72check_crate_item (trait impl)mod.rs:180check_trait_impl (check_trait_impl)impls.rs:39prove_wc_list (none)prove_wc_list.rs:24prove_wc_list (some)prove_wc_list.rs:31prove_wc (positive impl)prove_wc.rs:89prove_wc_list (some)prove_wc_list.rs:31prove_wc (eq)prove_wc.rs:128prove_after (prove_after)prove_after.rs:20prove_wc_list (none)prove_wc_list.rs:24
prove_after (prove_after)prove_after.rs:20prove_wc_list (none)prove_wc_list.rs:24
prove_after (prove_after)prove_after.rs:20prove_wc_list (none)prove_wc_list.rs:24
prove_after (prove_after)prove_after.rs:20prove_wc_list (none)prove_wc_list.rs:24
check_safety_matches (safety matches)impls.rs:79
check_drop_impl_always_applicable (not a Drop impl)impls.rs:295
for_allmod.rs:72check_crate_item (trait impl)mod.rs:180check_trait_impl (check_trait_impl)impls.rs:39prove_wc_list (none)prove_wc_list.rs:24prove_wc_list (some)prove_wc_list.rs:31prove_wc (positive impl)prove_wc.rs:89prove_wc_list (some)prove_wc_list.rs:31prove_wc (eq)prove_wc.rs:128prove_after (prove_after)prove_after.rs:20prove_wc_list (none)prove_wc_list.rs:24
prove_after (prove_after)prove_after.rs:20prove_wc_list (none)prove_wc_list.rs:24
prove_after (prove_after)prove_after.rs:20prove_wc_list (none)prove_wc_list.rs:24
prove_after (prove_after)prove_after.rs:20prove_wc_list (none)prove_wc_list.rs:24
check_safety_matches (safety matches)impls.rs:79
check_drop_impl_always_applicable (not a Drop impl)impls.rs:295
for_allmod.rs:72check_crate_item (trait impl)mod.rs:180check_trait_impl (check_trait_impl)impls.rs:39prove_wc_list (none)prove_wc_list.rs:24prove_wc_list (some)prove_wc_list.rs:31prove_wc (positive impl)prove_wc.rs:89prove_wc_list (some)prove_wc_list.rs:31prove_wc (eq)prove_wc.rs:128prove_after (prove_after)prove_after.rs:20prove_wc_list (none)prove_wc_list.rs:24
prove_after (prove_after)prove_after.rs:20prove_wc_list (none)prove_wc_list.rs:24
prove_after (prove_after)prove_after.rs:20prove_wc_list (none)prove_wc_list.rs:24
prove_after (prove_after)prove_after.rs:20prove_wc_list (none)prove_wc_list.rs:24
check_safety_matches (safety matches)impls.rs:79
check_drop_impl_always_applicable (not a Drop impl)impls.rs:295
for_allmod.rs:72check_crate_item (trait impl)mod.rs:180check_trait_impl (check_trait_impl)impls.rs:39prove_wc_list (none)prove_wc_list.rs:24prove_wc_list (some)prove_wc_list.rs:31prove_wc (positive impl)prove_wc.rs:89prove_wc_list (some)prove_wc_list.rs:31prove_wc (eq)prove_wc.rs:128prove_after (prove_after)prove_after.rs:20prove_wc_list (none)prove_wc_list.rs:24
prove_after (prove_after)prove_after.rs:20prove_wc_list (none)prove_wc_list.rs:24
prove_after (prove_after)prove_after.rs:20prove_wc_list (none)prove_wc_list.rs:24
prove_after (prove_after)prove_after.rs:20prove_wc_list (none)prove_wc_list.rs:24
check_safety_matches (safety matches)impls.rs:79
check_drop_impl_always_applicable (not a Drop impl)impls.rs:295
for_allmod.rs:72check_crate_item (trait impl)mod.rs:180check_trait_impl (check_trait_impl)impls.rs:39prove_wc_list (none)prove_wc_list.rs:24prove_wc_list (some)prove_wc_list.rs:31prove_wc (positive impl)prove_wc.rs:89prove_wc_list (some)prove_wc_list.rs:31prove_wc (eq)prove_wc.rs:128prove_after (prove_after)prove_after.rs:20prove_wc_list (none)prove_wc_list.rs:24
prove_after (prove_after)prove_after.rs:20prove_wc_list (none)prove_wc_list.rs:24
prove_after (prove_after)prove_after.rs:20prove_wc_list (none)prove_wc_list.rs:24
prove_after (prove_after)prove_after.rs:20prove_wc_list (none)prove_wc_list.rs:24
check_safety_matches (safety matches)impls.rs:79
check_drop_impl_always_applicable (not a Drop impl)impls.rs:295
for_allmod.rs:72check_crate_item (trait impl)mod.rs:180check_trait_impl (check_trait_impl)impls.rs:39prove_wc_list (none)prove_wc_list.rs:24prove_wc_list (some)prove_wc_list.rs:31prove_wc (positive impl)prove_wc.rs:89prove_wc_list (some)prove_wc_list.rs:31prove_wc (eq)prove_wc.rs:128prove_after (prove_after)prove_after.rs:20prove_wc_list (none)prove_wc_list.rs:24
prove_after (prove_after)prove_after.rs:20prove_wc_list (none)prove_wc_list.rs:24
prove_after (prove_after)prove_after.rs:20prove_wc_list (none)prove_wc_list.rs:24
prove_after (prove_after)prove_after.rs:20prove_wc_list (none)prove_wc_list.rs:24
check_safety_matches (safety matches)impls.rs:79
check_drop_impl_always_applicable (not a Drop impl)impls.rs:295
for_allmod.rs:72check_crate_item (trait impl)mod.rs:180check_trait_impl (check_trait_impl)impls.rs:39prove_wc_list (none)prove_wc_list.rs:24prove_wc_list (some)prove_wc_list.rs:31prove_wc (positive impl)prove_wc.rs:89prove_wc_list (some)prove_wc_list.rs:31prove_wc (eq)prove_wc.rs:128prove_after (prove_after)prove_after.rs:20prove_wc_list (none)prove_wc_list.rs:24
prove_after (prove_after)prove_after.rs:20prove_wc_list (none)prove_wc_list.rs:24
prove_after (prove_after)prove_after.rs:20prove_wc_list (none)prove_wc_list.rs:24
prove_after (prove_after)prove_after.rs:20prove_wc_list (none)prove_wc_list.rs:24
check_safety_matches (safety matches)impls.rs:79
check_drop_impl_always_applicable (not a Drop impl)impls.rs:295
for_allmod.rs:72check_crate_item (trait impl)mod.rs:180check_trait_impl (check_trait_impl)impls.rs:39prove_wc_list (none)prove_wc_list.rs:24prove_wc_list (some)prove_wc_list.rs:31prove_wc (positive impl)prove_wc.rs:89prove_wc_list (some)prove_wc_list.rs:31prove_wc (eq)prove_wc.rs:128prove_after (prove_after)prove_after.rs:20prove_wc_list (none)prove_wc_list.rs:24
prove_after (prove_after)prove_after.rs:20