rust/tests/debuginfo/step-into-match.rs
Martin Nordholts 5b57d02e9f compiletest: Use //@ prefixes also for debuginfo test directives
So that when we later add support for revisions we can use the same
syntax for revisions as elsewhere.

This also prevents people from making typos for commands since
`src/tools/compiletest/src/directives/directive_names.rs` will catch such
typos now.

Note that we one FIXME for a non-trivial change for later:
```
// FIXME(148097): Change `// cdb-checksimple_closure` to `//@ cdb-check:simple_closure`
```
2025-11-25 06:13:45 +01:00

388 lines
7.3 KiB
Rust

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