Negative coverage: check_trait_impl / check_trait_impl / premise super::prove_not_goal(program, env, where_clauses, Predicate::not_implemented(trait_ref)) => ()
Premise at line 28. Observed failure causes: failed_judgment, inapplicable.
check_trait_impl| Line | Coverage | Source |
|---|---|---|
| 21 | N/A | (let TraitImpl { binder, safety: _ } = &trait_impl) |
| 22 | N/A | (let (env, bound_data) = Env::default().instantiate_universally(binder)) |
| 23 | N/A | (let TraitImplBoundData { trait_id, self_ty, trait_parameters, where_clauses, impl_items } = bound_data) |
| 24 | N/A | (let trait_ref = trait_id.with(self_ty, trait_parameters)) |
| 26 | ✗ | (super::where_clauses::prove_where_clauses_well_formed(program, env, where_clauses, where_clauses) => ()) |
| 27 | 2 | (super::prove_goal(program, env, where_clauses, Predicate::is_implemented(trait_ref)) => ()) |
| 28 | 2 | (super::prove_not_goal(program, env, where_clauses, Predicate::not_implemented(trait_ref)) => ()) |
| 30 | ✗ | (let trait_decl = program.program().trait_named(&trait_ref.trait_id)?) |
| 31 | ✗ | (let TraitBoundData { where_clauses: _, trait_items } = trait_decl.binder.instantiate_with(&trait_ref.parameters)?) |
| 32 | 2 | (check_safety_matches(&trait_decl, &trait_impl) => ()) |
| 34 | ✗ | (for_all(impl_item in impl_items) (check_trait_impl_item(program, env, where_clauses, trait_items, impl_item, crate_id) => ())) |
| 37 | 2 | (check_all_required_items_present(trait_items, impl_items) => ()) |
| ──────── ("check_trait_impl") | ||
| 40 | 110 | (check_trait_impl(program, trait_impl, crate_id) => ()) |
2 tests failed proving this premise:
Source location: tests/coherence_overlap.rs:129
#[test]
fn u32_not_u32_impls() {
FormalityTest::new(crates![crate core {
trait Foo {}
impl Foo for u32 {}
impl !Foo for u32 {}
}]).err(expect_test::expect![[r#"
failed at (proven_set.rs) because
found an unconditionally true solution Constraints { env: Env { variables: [], bias: Completeness, pending: [], allow_pending_outlives: false }, known_true: true, substitution: {} }"#]])
}
Failed proof tree
check_all_crates failedmod.rs:41rule "check all prefixes"mod.rs:53check_crate failedmod.rs:60rule "check crate"mod.rs:73check_crate_item failedmod.rs:163rule "trait impl"mod.rs:178check_trait_impl failedimpls.rs:13rule "check_trait_impl"impls.rs:28negation_via_failure failednegation.rs:41ruleproven_set.rs:57 (failed: inapplicable)
Source location: tests/coherence_overlap.rs:174
#[test]
fn T_where_Foo_not_u32_impls() {
FormalityTest::new(crates![crate core {
trait Foo {}
impl<T> Foo for T where T: Foo {}
impl !Foo for u32 {}
}]).err(expect_test::expect![[r#"
the rule "check_trait_impl" at (impls.rs) failed because
failed to prove {! Foo(!ty_1)} given {Foo(!ty_1)}, got [Constraints { env: Env { variables: [!ty_1], bias: Soundness, pending: [], allow_pending_outlives: false }, known_true: false, substitution: {} }]"#]])
}
Failed proof tree
check_all_crates failedmod.rs:41rule "check all prefixes"mod.rs:53check_crate failedmod.rs:60rule "check crate"mod.rs:73check_crate_item failedmod.rs:163rule "trait impl"mod.rs:178check_trait_impl failedimpls.rs:13rule "check_trait_impl"impls.rs:28 (failed: inapplicable)