//@ 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) -> 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) -> 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) -> 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) -> 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, } }