| // We used to ICE if you had a single match arm with multiple |
| // candidate patterns with `ref mut` identifiers used in the arm's |
| // guard. |
| // |
| // Also, this test expands on the original bug's example by actually |
| // trying to double check that we are matching against the right part |
| // of the input data based on which candidate pattern actually fired. |
| |
| //@ run-pass |
| |
| fn foo(x: &mut Result<(u32, u32), (u32, u32)>) -> u32 { |
| match *x { |
| Ok((ref mut v, _)) | Err((_, ref mut v)) if *v > 0 => { *v } |
| _ => { 0 } |
| } |
| } |
| |
| fn main() { |
| assert_eq!(foo(&mut Ok((3, 4))), 3); |
| assert_eq!(foo(&mut Err((3, 4))), 4); |
| } |