| //@ compile-flags: -g | |
| //@ ignore-android: FIXME(#10381) | |
| // On Arm64 Windows, stepping at the end of a function on goes to the callsite, not the instruction | |
| // after it. | |
| //@ ignore-aarch64-pc-windows-msvc: Stepping out of functions behaves differently. | |
| //@ ignore-backends: gcc | |
| // === GDB TESTS ============================================================== | |
| //@ gdb-command: r | |
| //@ gdb-command: s | |
| //@ gdb-check:[...]match x { | |
| //@ gdb-command: s | |
| //@ gdb-check:[...] Some(42) => 1, | |
| //@ gdb-command: s | |
| //@ gdb-check:[...]} | |
| //@ gdb-command: s | |
| //@ gdb-check:[...]match_enum(Some(12)); | |
| //@ gdb-command: s | |
| //@ gdb-check:[...]match x { | |
| //@ gdb-command: s | |
| //@ gdb-check:[...]Some(_) => 2, | |
| //@ gdb-command: s | |
| //@ gdb-check:[...]} | |
| //@ gdb-command: s | |
| //@ gdb-check:[...]match_enum(None); | |
| //@ gdb-command: s | |
| //@ gdb-check:[...]match x { | |
| //@ gdb-command: s | |
| //@ gdb-check:[...]None => 3, | |
| //@ gdb-command: s | |
| //@ gdb-check:[...]} | |
| //@ gdb-command: s | |
| //@ gdb-check:[...]match_int(1); | |
| //@ gdb-command: s | |
| //@ gdb-check:[...]match y { | |
| //@ gdb-command: s | |
| //@ gdb-check:[...]1 => 3, | |
| //@ gdb-command: s | |
| //@ gdb-check:[...]} | |
| //@ gdb-command: s | |
| //@ gdb-check:[...]match_int(2); | |
| //@ gdb-command: s | |
| //@ gdb-check:[...]match y { | |
| //@ gdb-command: s | |
| //@ gdb-check:[...]_ => 4, | |
| //@ gdb-command: s | |
| //@ gdb-check:[...]} | |
| //@ gdb-command: s | |
| //@ gdb-check:[...]match_int(0); | |
| //@ gdb-command: s | |
| //@ gdb-check:[...]match y { | |
| //@ gdb-command: s | |
| //@ gdb-check:[...]0 => 2, | |
| //@ gdb-command: s | |
| //@ gdb-check:[...]} | |
| //@ gdb-command: s | |
| //@ gdb-check:[...]match_int(-1); | |
| //@ gdb-command: s | |
| //@ gdb-check:[...]match y { | |
| //@ gdb-command: s | |
| //@ gdb-check:[...]-1 => 1, | |
| //@ gdb-command: s | |
| //@ gdb-check:[...]} | |
| //@ gdb-command: s | |
| //@ gdb-check:[...]match_tuple(5, 12); | |
| //@ gdb-command: s | |
| //@ gdb-check:[...]match (a, b) { | |
| //@ gdb-command: s | |
| //@ gdb-check:[...](5, 12) => 3, | |
| //@ gdb-command: s | |
| //@ gdb-check:[...]} | |
| //@ gdb-command: s | |
| //@ gdb-check:[...]match_tuple(29, 1); | |
| //@ gdb-command: s | |
| //@ gdb-check:[...]match (a, b) { | |
| //@ gdb-command: s | |
| //@ gdb-check:[...](29, _) => 2, | |
| //@ gdb-command: s | |
| //@ gdb-check:[...]} | |
| //@ gdb-command: s | |
| //@ gdb-check:[...]match_tuple(12, 12); | |
| //@ gdb-command: s | |
| //@ gdb-check:[...]match (a, b) { | |
| //@ gdb-command: s | |
| //@ gdb-check:[...](_, _) => 5, | |
| //@ gdb-command: s | |
| //@ gdb-check:[...]} | |
| //@ gdb-command: s | |
| //@ gdb-check:[...]match_tuple(42, 12); | |
| //@ gdb-command: s | |
| //@ gdb-check:[...]match (a, b) { | |
| //@ gdb-command: s | |
| //@ gdb-check:[...](42, 12) => 1, | |
| //@ gdb-command: s | |
| //@ gdb-check:[...]} | |
| //@ gdb-command: s | |
| //@ gdb-check:[...]match_tuple(1, 9); | |
| //@ gdb-command: s | |
| //@ gdb-check:[...]match (a, b) { | |
| //@ gdb-command: s | |
| //@ gdb-check:[...](_, 9) => 4, | |
| //@ gdb-command: s | |
| //@ gdb-check:[...]} | |
| //@ gdb-command: s | |
| //@ gdb-check:[...]} | |
| // === CDB TESTS ============================================================== | |
| // Enable line-based debugging and print lines after stepping. | |
| //@ cdb-command: .lines -e | |
| //@ cdb-command: l+s | |
| //@ cdb-command: l+t | |
| //@ cdb-command: g | |
| //@ cdb-command: t | |
| //@ cdb-check: [...]: fn match_enum(x: Option<u32>) -> u8 { | |
| //@ cdb-command: t | |
| //@ cdb-check: [...]: match x { | |
| //@ cdb-command: t | |
| //@ cdb-check: [...]: Some(42) => 1, | |
| //@ cdb-command: t | |
| //@ cdb-check: [...]: } | |
| //@ cdb-command: t | |
| //@ cdb-check: [...]: match_enum(Some(12)); | |
| //@ cdb-command: t | |
| //@ cdb-check: [...]: fn match_enum(x: Option<u32>) -> u8 { | |
| //@ cdb-command: t | |
| //@ cdb-check: [...]: match x { | |
| //@ cdb-command: t | |
| //@ cdb-check: [...]: Some(_) => 2, | |
| //@ cdb-command: t | |
| //@ cdb-check: [...]: } | |
| //@ cdb-command: t | |
| //@ cdb-check: [...]: match_enum(None); | |
| //@ cdb-command: t | |
| //@ cdb-check: [...]: fn match_enum(x: Option<u32>) -> u8 { | |
| //@ cdb-command: t | |
| //@ cdb-check: [...]: match x { | |
| //@ cdb-command: t | |
| //@ cdb-check: [...]: None => 3, | |
| //@ cdb-command: t | |
| //@ cdb-check: [...]: } | |
| //@ cdb-command: t | |
| //@ cdb-check: [...]: match_int(1); | |
| //@ cdb-command: t | |
| //@ cdb-check: [...]: fn match_int(y: i32) -> u16 { | |
| //@ cdb-command: t | |
| //@ cdb-check: [...]: match y { | |
| //@ cdb-command: t | |
| //@ cdb-check: [...]: 1 => 3, | |
| //@ cdb-command: t | |
| //@ cdb-check: [...]: } | |
| //@ cdb-command: t | |
| //@ cdb-check: [...]: match_int(2); | |
| //@ cdb-command: t | |
| //@ cdb-check: [...]: fn match_int(y: i32) -> u16 { | |
| //@ cdb-command: t | |
| //@ cdb-check: [...]: match y { | |
| //@ cdb-command: t | |
| //@ cdb-check: [...]: _ => 4, | |
| //@ cdb-command: t | |
| //@ cdb-check: [...]: } | |
| //@ cdb-command: t | |
| //@ cdb-check: [...]: match_int(0); | |
| //@ cdb-command: t | |
| //@ cdb-check: [...]: fn match_int(y: i32) -> u16 { | |
| //@ cdb-command: t | |
| //@ cdb-check: [...]: match y { | |
| //@ cdb-command: t | |
| //@ cdb-check: [...]: 0 => 2, | |
| //@ cdb-command: t | |
| //@ cdb-check: [...]: } | |
| //@ cdb-command: t | |
| //@ cdb-check: [...]: match_int(-1); | |
| //@ cdb-command: t | |
| //@ cdb-check: [...]: fn match_int(y: i32) -> u16 { | |
| //@ cdb-command: t | |
| //@ cdb-check: [...]: match y { | |
| //@ cdb-command: t | |
| //@ cdb-check: [...]: -1 => 1, | |
| //@ cdb-command: t | |
| //@ cdb-check: [...]: } | |
| //@ cdb-command: t | |
| //@ cdb-check: [...]: match_tuple(5, 12); | |
| //@ cdb-command: t | |
| //@ cdb-check: [...]: fn match_tuple(a: u8, b: i8) -> u32 { | |
| //@ cdb-command: t | |
| //@ cdb-check: [...]: match (a, b) { | |
| //@ cdb-command: t | |
| //@ cdb-check: [...]: (5, 12) => 3, | |
| //@ cdb-command: t | |
| //@ cdb-check: [...]: } | |
| //@ cdb-command: t | |
| //@ cdb-check: [...]: match_tuple(29, 1); | |
| //@ cdb-command: t | |
| //@ cdb-check: [...]: fn match_tuple(a: u8, b: i8) -> u32 { | |
| //@ cdb-command: t | |
| //@ cdb-check: [...]: match (a, b) { | |
| //@ cdb-command: t | |
| //@ cdb-check: [...]: (29, _) => 2, | |
| //@ cdb-command: t | |
| //@ cdb-check: [...]: } | |
| //@ cdb-command: t | |
| //@ cdb-check: [...]: match_tuple(12, 12); | |
| //@ cdb-command: t | |
| //@ cdb-check: [...]: fn match_tuple(a: u8, b: i8) -> u32 { | |
| //@ cdb-command: t | |
| //@ cdb-check: [...]: match (a, b) { | |
| //@ cdb-command: t | |
| //@ cdb-check: [...]: (_, _) => 5, | |
| //@ cdb-command: t | |
| //@ cdb-check: [...]: } | |
| //@ cdb-command: t | |
| //@ cdb-check: [...]: match_tuple(42, 12); | |
| //@ cdb-command: t | |
| //@ cdb-check: [...]: fn match_tuple(a: u8, b: i8) -> u32 { | |
| //@ cdb-command: t | |
| //@ cdb-check: [...]: match (a, b) { | |
| //@ cdb-command: t | |
| //@ cdb-check: [...]: (42, 12) => 1, | |
| //@ cdb-command: t | |
| //@ cdb-check: [...]: } | |
| //@ cdb-command: t | |
| //@ cdb-check: [...]: match_tuple(1, 9); | |
| //@ cdb-command: t | |
| //@ cdb-check: [...]: fn match_tuple(a: u8, b: i8) -> u32 { | |
| //@ cdb-command: t | |
| //@ cdb-check: [...]: match (a, b) { | |
| //@ cdb-command: t | |
| //@ cdb-check: [...]: (_, 9) => 4, | |
| //@ cdb-command: t | |
| //@ cdb-check: [...]: } | |
| //@ cdb-command: t | |
| //@ cdb-check: [...]: } | |
| fn main() { | |
| match_enum(Some(42)); // #break | |
| match_enum(Some(12)); | |
| match_enum(None); | |
| match_int(1); | |
| match_int(2); | |
| match_int(0); | |
| match_int(-1); | |
| match_tuple(5, 12); | |
| match_tuple(29, 1); | |
| match_tuple(12, 12); | |
| match_tuple(42, 12); | |
| match_tuple(1, 9); | |
| } | |
| fn match_enum(x: Option<u32>) -> u8 { | |
| match x { | |
| Some(42) => 1, | |
| Some(_) => 2, | |
| None => 3, | |
| } | |
| } | |
| fn match_int(y: i32) -> u16 { | |
| match y { | |
| -1 => 1, | |
| 0 => 2, | |
| 1 => 3, | |
| _ => 4, | |
| } | |
| } | |
| fn match_tuple(a: u8, b: i8) -> u32 { | |
| match (a, b) { | |
| (42, 12) => 1, | |
| (29, _) => 2, | |
| (5, 12) => 3, | |
| (_, 9) => 4, | |
| (_, _) => 5, | |
| } | |
| } |