fn foo(test: bool, x: &mut S, y: S, mut z: S) -> S {
let ret;
// `ret` starts off uninitialized
- unsafe { rustc_peek(&ret); }
+ rustc_peek(&ret);
// All function formal parameters start off initialized.
- unsafe { rustc_peek(&x) }; //~ ERROR rustc_peek: bit not set
- unsafe { rustc_peek(&y) }; //~ ERROR rustc_peek: bit not set
- unsafe { rustc_peek(&z) }; //~ ERROR rustc_peek: bit not set
+ rustc_peek(&x); //~ ERROR rustc_peek: bit not set
+ rustc_peek(&y); //~ ERROR rustc_peek: bit not set
+ rustc_peek(&z); //~ ERROR rustc_peek: bit not set
ret = if test {
::std::mem::replace(x, y)
};
// `z` may be uninitialized here.
- unsafe { rustc_peek(&z); }
+ rustc_peek(&z);
// `y` is definitely uninitialized here.
- unsafe { rustc_peek(&y); }
+ rustc_peek(&y);
// `x` is still (definitely) initialized (replace above is a reborrow).
- unsafe { rustc_peek(&x); } //~ ERROR rustc_peek: bit not set
+ rustc_peek(&x); //~ ERROR rustc_peek: bit not set
::std::mem::drop(x);
// `x` is *definitely* uninitialized here
- unsafe { rustc_peek(&x); }
+ rustc_peek(&x);
// `ret` is now definitely initialized (via `if` above).
- unsafe { rustc_peek(&ret); } //~ ERROR rustc_peek: bit not set
+ rustc_peek(&ret); //~ ERROR rustc_peek: bit not set
ret
}