Negative coverage: check_drop_impl_always_applicable / Drop impl is always applicable / premise super::prove_goal(&program, &env, &adt_bound.where_clauses, Predicate::IsImplemented(drop_trait_ref.clone())) => ()
Premise at line 358. Observed failure causes: failed_judgment.
Drop impl is always applicable| Line | Coverage | Source |
|---|---|---|
| 345 | ✗ | (if **trait_impl.trait_id() == *"Drop") |
| 347 | 1 | (let adt_id = drop_impl_adt_id(&trait_impl)?) |
| 349 | 1 | (check_drop_impl_in_defining_crate(program, adt_id, crate_id) => ()) |
| 350 | ✗ | (let adt = program.program().adt_item_named(adt_id)?.to_adt()) |
| 352 | N/A | (let (env, adt_vars) = Env::default().universal_substitution(&adt.binder)) |
| 353 | ✗ | (let adt_bound = adt.binder.instantiate_with(adt_vars)?) |
| 354 | N/A | (let adt_self_ty = Ty::rigid(adt_id, adt_vars)) |
| 357 | N/A | (let drop_trait_ref = crate::grammar::TraitId::new("Drop").with(adt_self_ty, ())) |
| 358 | 3 | (super::prove_goal(&program, &env, &adt_bound.where_clauses, Predicate::IsImplemented(drop_trait_ref.clone())) => ()) |
| ──────── ("Drop impl is always applicable") | ||
| 361 | 6 | (check_drop_impl_always_applicable(program, trait_impl, crate_id) => ()) |
3 tests failed proving this premise:
Source location: tests/drop.rs:132 (all coverage from this test)
#[test]
fn drop_impl_extra_where_clause() {
FormalityTest::new(crates![
crate Foo {
trait Clone {}
struct MyStruct<T> {
value: T,
}
impl<T> Drop for MyStruct<T> where T: Clone {}
}
])
.err(expect_test::expect![[r#"
crates/formality-rust/src/prove/prove_via.rs:8:1: no applicable rules for prove_via { goal: Clone(!ty_0), via: Drop(MyStruct<!ty_0>), assumptions: {Drop(MyStruct<!ty_0>)}, env: Env { variables: [!ty_0], bias: Soundness, pending: [], allow_pending_outlives: false } }
the rule "trait implied bound" at (prove_wc.rs) failed because
expression evaluated to an empty collection: `decls.trait_invariants()`
the rule "trait implied bound" at (prove_wc.rs) failed because
expression evaluated to an empty collection: `decls.trait_invariants()`"#]])
}
Failed proof tree
check_all_crates failedmod.rs:41args
rule "check all prefixes"mod.rs:53check_crate failedmod.rs:60args
rule "check crate"mod.rs:73check_crate_item failedmod.rs:178rule "trait impl"mod.rs:194check_drop_impl_always_applicable failedimpls.rs:328rule "Drop impl is always applicable"impls.rs:358prove failedfunction.rs:250args
rulefunction.rs:250prove_wc_list failedprove_wc_list.rs:8args
rule "some"prove_wc_list.rs:26prove_wc failedprove_wc.rs:21args
rule "positive impl"prove_wc.rs:74prove_after failedprove_after.rs:8args
rule "prove_after"prove_after.rs:19prove failedprove_after.rs:19args
ruleprove_after.rs:19prove_wc_list failedprove_wc_list.rs:8args
rule "some"prove_wc_list.rs:26prove_wc failedprove_wc.rs:21args
rule "assumption"prove_wc.rs:48prove_via failedprove_via.rs:8args
rule "trait implied bound"prove_wc.rs:109 (failed: empty_collection)
rule "trait implied bound"prove_wc.rs:109 (failed: empty_collection)
Source location: tests/drop.rs:154 (all coverage from this test)
#[test]
fn drop_impl_concrete_type_param() {
FormalityTest::new(crates![
crate Foo {
struct MyStruct<T> {
value: T,
}
impl Drop for MyStruct<u32> {}
}
])
.err(expect_test::expect![[r#"
crates/formality-rust/src/prove/prove_via.rs:8:1: no applicable rules for prove_via { goal: MyStruct<!ty_0> = MyStruct<u32>, via: Drop(MyStruct<!ty_0>), assumptions: {Drop(MyStruct<!ty_0>)}, env: Env { variables: [!ty_0], bias: Soundness, pending: [], allow_pending_outlives: false } }
crates/formality-rust/src/prove/prove_normalize.rs:54:1: no applicable rules for prove_normalize_via { goal: MyStruct<!ty_0>, via: Drop(MyStruct<!ty_0>), assumptions: {Drop(MyStruct<!ty_0>)}, env: Env { variables: [!ty_0], bias: Soundness, pending: [], allow_pending_outlives: false } }
crates/formality-rust/src/prove/prove_via.rs:8:1: no applicable rules for prove_via { goal: !ty_0 = u32, via: Drop(MyStruct<!ty_0>), assumptions: {Drop(MyStruct<!ty_0>)}, env: Env { variables: [!ty_0], bias: Soundness, pending: [], allow_pending_outlives: false } }
crates/formality-rust/src/prove/prove_normalize.rs:54:1: no applicable rules for prove_normalize_via { goal: !ty_0, via: Drop(MyStruct<!ty_0>), assumptions: {Drop(MyStruct<!ty_0>)}, env: Env { variables: [!ty_0], bias: Soundness, pending: [], allow_pending_outlives: false } }
crates/formality-rust/src/prove/prove_normalize.rs:54:1: no applicable rules for prove_normalize_via { goal: u32, via: Drop(MyStruct<!ty_0>), assumptions: {Drop(MyStruct<!ty_0>)}, env: Env { variables: [!ty_0], bias: Soundness, pending: [], allow_pending_outlives: false } }
crates/formality-rust/src/prove/prove_normalize.rs:54:1: no applicable rules for prove_normalize_via { goal: MyStruct<u32>, via: Drop(MyStruct<!ty_0>), assumptions: {Drop(MyStruct<!ty_0>)}, env: Env { variables: [!ty_0], bias: Soundness, pending: [], allow_pending_outlives: false } }
crates/formality-rust/src/prove/prove_via.rs:8:1: no applicable rules for prove_via { goal: u32 = !ty_0, via: Drop(MyStruct<!ty_0>), assumptions: {Drop(MyStruct<!ty_0>)}, env: Env { variables: [!ty_0], bias: Soundness, pending: [], allow_pending_outlives: false } }
crates/formality-rust/src/prove/prove_normalize.rs:54:1: no applicable rules for prove_normalize_via { goal: u32, via: Drop(MyStruct<!ty_0>), assumptions: {Drop(MyStruct<!ty_0>)}, env: Env { variables: [!ty_0], bias: Soundness, pending: [], allow_pending_outlives: false } }
crates/formality-rust/src/prove/prove_normalize.rs:54:1: no applicable rules for prove_normalize_via { goal: !ty_0, via: Drop(MyStruct<!ty_0>), assumptions: {Drop(MyStruct<!ty_0>)}, env: Env { variables: [!ty_0], bias: Soundness, pending: [], allow_pending_outlives: false } }
the rule "trait implied bound" at (prove_wc.rs) failed because
expression evaluated to an empty collection: `decls.trait_invariants()`"#]])
}
Failed proof tree
check_all_crates failedmod.rs:41args
rule "check all prefixes"mod.rs:53check_crate failedmod.rs:60args
rule "check crate"mod.rs:73check_crate_item failedmod.rs:178rule "trait impl"mod.rs:194check_drop_impl_always_applicable failedimpls.rs:328rule "Drop impl is always applicable"impls.rs:358prove failedfunction.rs:250args
rulefunction.rs:250prove_wc_list failedprove_wc_list.rs:8args
rule "some"prove_wc_list.rs:26prove_wc failedprove_wc.rs:21args
rule "positive impl"prove_wc.rs:73prove failedprove_wc.rs:73args
ruleprove_wc.rs:73prove_wc_list failedprove_wc_list.rs:8args
rule "some"prove_wc_list.rs:26prove_wc failedprove_wc.rs:21args
rule "assumption"prove_wc.rs:48prove_via failedprove_via.rs:8args
rule "eq"prove_wc.rs:119prove_eq failedprove_eq.rs:23args
rule "normalize-l"prove_eq.rs:68prove_normalize failedprove_normalize.rs:18args
rule "normalize-via-assumption"prove_normalize.rs:32prove_normalize_via failedprove_normalize.rs:54args
rule "rigid"prove_eq.rs:47prove failedprove_eq.rs:47args
ruleprove_eq.rs:47prove_wc_list failedprove_wc_list.rs:8args
rule "some"prove_wc_list.rs:26prove_wc failedprove_wc.rs:21args
rule "assumption"prove_wc.rs:48prove_via failedprove_via.rs:8args
rule "eq"prove_wc.rs:119prove_eq failedprove_eq.rs:23args
rule "normalize-l"prove_eq.rs:68prove_normalize failedprove_normalize.rs:18args
rule "normalize-via-assumption"prove_normalize.rs:32prove_normalize_via failedprove_normalize.rs:54args
rule "symmetric"prove_eq.rs:38prove_eq failedprove_eq.rs:23args
rule "normalize-l"prove_eq.rs:68prove_normalize failedprove_normalize.rs:18args
rule "normalize-via-assumption"prove_normalize.rs:32prove_normalize_via failedprove_normalize.rs:54args
rule "symmetric"prove_eq.rs:38prove_eq failedprove_eq.rs:23args
rule "normalize-l"prove_eq.rs:68prove_normalize failedprove_normalize.rs:18args
rule "normalize-via-assumption"prove_normalize.rs:32prove_normalize_via failedprove_normalize.rs:54args
rule "rigid"prove_eq.rs:47prove failedprove_eq.rs:47args
ruleprove_eq.rs:47prove_wc_list failedprove_wc_list.rs:8args
rule "some"prove_wc_list.rs:26prove_wc failedprove_wc.rs:21args
rule "assumption"prove_wc.rs:48prove_via failedprove_via.rs:8args
rule "eq"prove_wc.rs:119prove_eq failedprove_eq.rs:23args
rule "normalize-l"prove_eq.rs:68prove_normalize failedprove_normalize.rs:18args
rule "normalize-via-assumption"prove_normalize.rs:32prove_normalize_via failedprove_normalize.rs:54args
rule "symmetric"prove_eq.rs:38prove_eq failedprove_eq.rs:23args
rule "normalize-l"prove_eq.rs:68prove_normalize failedprove_normalize.rs:18args
rule "normalize-via-assumption"prove_normalize.rs:32prove_normalize_via failedprove_normalize.rs:54args
rule "trait implied bound"prove_wc.rs:109 (failed: empty_collection)
Source location: tests/drop.rs:191 (all coverage from this test)
#[test]
fn drop_impl_enum_extra_where_clause() {
FormalityTest::new(crates![
crate Foo {
trait Clone {}
enum MyEnum<T> {
Value{value: T},
}
impl<T> Drop for MyEnum<T> where T: Clone {}
}
])
.err(expect_test::expect![[r#"
crates/formality-rust/src/prove/prove_via.rs:8:1: no applicable rules for prove_via { goal: Clone(!ty_0), via: Drop(MyEnum<!ty_0>), assumptions: {Drop(MyEnum<!ty_0>)}, env: Env { variables: [!ty_0], bias: Soundness, pending: [], allow_pending_outlives: false } }
the rule "trait implied bound" at (prove_wc.rs) failed because
expression evaluated to an empty collection: `decls.trait_invariants()`
the rule "trait implied bound" at (prove_wc.rs) failed because
expression evaluated to an empty collection: `decls.trait_invariants()`"#]])
}
Failed proof tree
check_all_crates failedmod.rs:41args
rule "check all prefixes"mod.rs:53check_crate failedmod.rs:60args
rule "check crate"mod.rs:73check_crate_item failedmod.rs:178rule "trait impl"mod.rs:194check_drop_impl_always_applicable failedimpls.rs:328rule "Drop impl is always applicable"impls.rs:358prove failedfunction.rs:250args
rulefunction.rs:250prove_wc_list failedprove_wc_list.rs:8args
rule "some"prove_wc_list.rs:26prove_wc failedprove_wc.rs:21args
rule "positive impl"prove_wc.rs:74prove_after failedprove_after.rs:8args
rule "prove_after"prove_after.rs:19prove failedprove_after.rs:19args
ruleprove_after.rs:19prove_wc_list failedprove_wc_list.rs:8args
rule "some"prove_wc_list.rs:26prove_wc failedprove_wc.rs:21args
rule "assumption"prove_wc.rs:48prove_via failedprove_via.rs:8args
rule "trait implied bound"prove_wc.rs:109 (failed: empty_collection)
rule "trait implied bound"prove_wc.rs:109 (failed: empty_collection)