edafbaffb2
- Either explicitly annotate `let x: () = expr;` where `x` has unit type, or remove the unit binding to leave only `expr;` instead. - Fix disjoint-capture-in-same-closure test
38 lines
807 B
Rust
38 lines
807 B
Rust
// run-pass
|
|
#![allow(dead_code)]
|
|
|
|
// Don't panic on blocks without results
|
|
// There are several tests in this run-pass that raised
|
|
// when this bug was opened. The cases where the compiler
|
|
// panics before the fix have a comment.
|
|
|
|
struct S {x:()}
|
|
|
|
fn test(slot: &mut Option<Box<dyn FnMut() -> Box<dyn FnMut()>>>) -> () {
|
|
let a = slot.take();
|
|
let _a: () = match a {
|
|
// `{let .. a(); }` would break
|
|
Some(mut a) => { let _a = a(); },
|
|
None => (),
|
|
};
|
|
}
|
|
|
|
fn not(b: bool) -> bool {
|
|
if b {
|
|
!b
|
|
} else {
|
|
// `panic!(...)` would break
|
|
panic!("Break the compiler");
|
|
}
|
|
}
|
|
|
|
pub fn main() {
|
|
// {} would break
|
|
let _r: () = {};
|
|
let mut slot = None;
|
|
// `{ test(...); }` would break
|
|
let _s : S = S{ x: { test(&mut slot); } };
|
|
|
|
let _b = not(true);
|
|
}
|