Closed
Description
fn foo(bl: block(int)) {
let val = 5;
bl(val);
}
fn main() {
let val;
foo({|new_val| val = new_val;});
log_err val;
}
yields this error:
/Users/jdm/src/closure.rs:8:8: 8:34 error: Unsatisfied precondition constraint (for example, init(val [/Users/jdm/src/closure.rs:7:8: 7:11])) for expression:
{|new_val| val = new_val; }
Precondition:
init(val [/Users/jdm/src/closure.rs:7:8: 7:11])
Prestate:
!init(val [/Users/jdm/src/closure.rs:7:8: 7:11]), !init(main [/Users/jdm/src/closure.rs:6:0: 10:0]), !init(main! [/Users/jdm/src/closure.rs:6:0: 10:0])
/Users/jdm/src/closure.rs:8 foo({|new_val| val = new_val;});
^~~~~~~~~~~~~~~~~~~~~~~~~~
rust: upcall fail 'explicit failure', ../src/comp/driver/session.rs:66
rust: domain main @0x10202c400 root task failed
Activity
graydon commentedon Dec 5, 2011
The type state system has no idea that the block gets run. It sees you using an uninitialized value in the log statement.
marijnh commentedon Dec 7, 2011
Right. Calling a block zero times is valid, so the error message is correct in the above case.
Split aarch64 `pauth` feature into `paca` and `pacg` (rust-lang#1259)
Add support to compiletest's cargo-kani mode for tests with multi-lev…
Fix broken links related to `rustc_borrowck` (rust-lang#1259)
Fix broken links related to `rustc_borrowck` (rust-lang#1259)
Split aarch64 `pauth` feature into `paca` and `pacg` (#1259)