Negative coverage: borrow_check_statement / exists / premise borrow_check_block(env, assumptions_body, state, block, places_live_on_exit) => state
Premise at line 327. Observed failure causes: failed_judgment.
exists| Line | Coverage | Source |
|---|---|---|
| 322 | ✗ | (if !feature_gate_enabled_in_program(&env.program, &FeatureGateName::PoloniusUnlocked) && !feature_gate_enabled_in_program(&env.program, &FeatureGateName::PoloniusAlpha)) |
| 324 | N/A | (let (env, subst, block) = env.instantiate_existentially(binder)) |
| 325 | N/A | (let assumptions_body = (assumptions, wf_assumptions_for_existential_subst(&subst))) |
| 326 | N/A | (let entry_state = state.clone()) |
| 327 | 23 | (borrow_check_block(env, assumptions_body, state, block, places_live_on_exit) => state) |
| 329 | N/A | (let state = entry_state.with_global_outlives_from(&state)) |
| 330 | 6 | (borrow_check_block(env, assumptions_body, state, block, places_live_on_exit) => state) |
| 331 | N/A | (let state = state.pop_subst(&env.env, subst)) |
| ──────── ("exists") | ||
| 333 | 36 | (borrow_check_statement(env, assumptions, state, Stmt::Exists { binder }, places_live_on_exit) => (env, state)) |
23 tests failed proving this premise:
Source location: tests/borrowck.rs:638 (all coverage from this test)
fn foo() -> Datum {
exists<'r0, 'r1> {
let x: Datum = Datum { value: 0_u32 };
let r: &'r0 Datum = &'r1 x;
let y: Datum = *r;
return y;
}
}
Source location: tests/borrowck.rs:1297 (all coverage from this test)
fn foo() -> Datum {
exists<'r0, 'r1> {
let x: Datum = Datum { value: 0_u32 };
let r: &'r0 mut Datum = &'r1 mut x;
let y: Datum = *r;
return y;
}
}
Source location: tests/borrowck.rs:1957 (all coverage from this test)
fn foo() -> Datum {
exists<'r0, 'r1> {
let x: Datum = Datum { value: 0_u32 };
let r: &'r0 Datum = &'r1 x;
let y: Datum = x;
return *r;
}
}
Source location: tests/borrowck.rs:2072 (all coverage from this test)
fn foo() -> i32 {
exists<'r0, 'r1> {
let v1: i32 = 0_i32;
let v2: &'r0 mut i32 = &'r1 mut v1;
// This should result in an error
v1 = 1_i32;
return *v2;
}
}
Source location: tests/borrowck.rs:2110 (all coverage from this test)
fn foo() -> i32 {
exists<'r0, 'r1> {
let v1: i32 = 0_i32;
let v2: &'r0 i32 = &'r1 v1;
v1 = 1_i32;
return *v2;
}
}
Source location: tests/borrowck.rs:2219 (all coverage from this test)
fn foo() -> i32 {
exists<'r0, 'r1> {
let v2: &'r0 i32;
{
let v1: i32 = 0_i32;
v2 = &'r1 v1;
}
return *v2;
}
}
Source location: tests/borrowck.rs:2291 (all coverage from this test)
fn foo() -> i32 {
exists<'r0, 'r1> {
let v2: &'r0 mut i32;
{
let v1: i32 = 0_i32;
v2 = &'r1 mut v1;
}
return *v2;
}
}
Source location: tests/borrowck.rs:2333 (all coverage from this test)
fn foo() -> i32 {
exists<'r0, 'r1> {
let v2: &'r0 i32;
'a: {
let v1: i32 = 0_i32;
v2 = &'r1 v1;
break 'a;
}
return *v2;
}
}
Source location: tests/borrowck.rs:2392 (all coverage from this test)
fn foo<'a, 'b>(v1: &'a u32) -> &'b u32 {
exists<'r0> {
let v2: &'r0 u32 = v1;
return v2;
}
}
Source location: tests/borrowck.rs:2655 (all coverage from this test)
fn foo() -> i32 {
exists<'r0, 'r1> {
let r: &'r0 i32;
'a: loop {
let y: i32 = 0_i32;
r = &'r1 y;
continue 'a;
}
r; // only an error because of false edges, assumption that all loops terminate
}
}
Source location: tests/borrowck.rs:2702 (all coverage from this test)
fn foo() -> i32 {
exists<'r0, 'r1> {
let x: i32 = 0_i32;
let r: &'r0 i32;
'a: loop {
r; // this *may* read from `y` in a previous iteration
let y: i32 = 0_i32;
r = &'r1 y;
continue 'a;
}
}
}
Proof trees omitted for the remaining 13 tests; each one is on its test’s page in Coverage by test.
Source location: tests/borrowck.rs:2772 (all coverage from this test)
fn foo() -> i32 {
exists<'r0, 'r1> {
let r: &'r0 i32;
'a: loop {
let x: i32 = 0_i32;
r = &'r1 x;
break 'a;
}
return *r;
}
}
Source location: tests/borrowck.rs:2899 (all coverage from this test)
fn foo() -> u32 {
exists<'r0, 'r1> {
let a: u32 = 22_u32;
let p: &'r0 u32 = &'r1 a;
'l: loop {
if true {
a = 23_u32;
continue 'l;
} else {
break 'l;
}
}
return *p;
}
}
Source location: tests/borrowck.rs:3024 (all coverage from this test)
fn foo() -> u32 {
exists<'r0, 'r1, 'r2> {
let a: u32 = 22_u32;
let b: u32 = 22_u32;
let p: &'r0 u32 = &'r1 a;
a = 23_u32;
'l: loop {
p = &'r2 b;
break 'l;
}
return *p;
}
}
Source location: tests/borrowck.rs:3208 (all coverage from this test)
fn bar() -> u32 {
exists<'r0, 'r1, 'r2> {
let v: u32 = 0_u32;
let p: &'r0 u32 = &'r1 v;
let _: u32 = foo::<'r2>(&'r2 mut v);
return *p;
}
}
Source location: tests/borrowck.rs:3256 (all coverage from this test)
fn foo() -> u32 {
exists<'r0, 'r1> {
let p: Point = Point { x: 0_u32, y: 0_u32 };
let b1: &'r0 mut u32 = &'r1 mut p.x;
p.x = 1_u32;
return *b1;
}
}
Source location: tests/borrowck.rs:3290 (all coverage from this test)
fn foo() -> u32 {
exists<'r0, 'r1> {
let v1: u32 = 22_u32;
let v2: &'r0 mut u32 = &'r1 mut v1;
let w: Wrapper = Wrapper { value: v1 };
return *v2;
}
}
Source location: tests/borrowck.rs:3330 (all coverage from this test)
fn foo() -> u32 {
exists<'r0> {
let v1: u32 = 0_u32;
let w: Wrapper<'r0> = Wrapper::<'r0> { value: &'r0 mut v1 };
v1 = 1_u32;
return *(w.value);
}
}
Source location: tests/borrowck.rs:3484 (all coverage from this test)
fn foo() -> u32 {
exists<'r0, 'r1, 'r2> {
let x: u32 = 22_u32;
let p: &'r1 u32 = &'r0 x;
let q: &'r2 u32 = p;
x = 1_u32;
q;
return 0_u32;
}
}
Source location: tests/borrowck.rs:3648 (all coverage from this test)
fn foo() -> u32 {
exists<'r0, 'r1> {
let x: u32 = 22_u32;
let helper: &'r1 u32 = &'r0 x;
x = 1_u32;
helper;
return 0_u32;
}
}
Source location: tests/borrowck.rs:3855 (all coverage from this test)
fn remove_last_node_iterative<'a>(node: &'a mut List) -> u32 {
exists<'r0, 'r1> {
let cursor: &'r0 mut List = &'r0 mut *node;
'l: loop {
let next: &'r1 mut List = &'r1 mut *cursor;
if true {
cursor = next;
} else {
break 'l;
}
}
*cursor = List { value: 0_u32 };
return 0_u32;
}
}
Source location: tests/borrowck.rs:3967 (all coverage from this test)
fn conditional() -> u32 {
exists<'r0, 'r1, 'r2, 'r3> {
let b: X = X { value: 0_u32 };
let p: &'r0 mut X = &'r1 mut b;
'l: loop {
let now: &'r2 mut X = &'r2 mut *p;
if true {
if true {
let next: &'r3 mut X = next_of::<'r3>(&'r3 mut *now);
p = next;
} else {
}
} else {
break 'l;
}
}
return 0_u32;
}
}
Source location: tests/borrowck.rs:4503 (all coverage from this test)
fn use_both<'a, 'b>() -> u32 {
exists<'r0> {
let v: Invariant<'r0> = create_invariant::<'r0>();
let w: Invariant<'r0> = create_invariant::<'r0>();
sink::<'a, 'r0>(v);
sink::<'b, 'r0>(w);
return 0_u32;
}
}