rust/tests/debuginfo/function-prologue-stepping-regular.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

224 lines
4.4 KiB
Rust

// This test case checks if function arguments already have the correct value when breaking at the
// beginning of a function.
//@ min-lldb-version: 1800
//@ ignore-gdb
//@ compile-flags:-g
//@ disable-gdb-pretty-printers
//@ lldb-command:breakpoint set --name immediate_args
//@ lldb-command:breakpoint set --name non_immediate_args
//@ lldb-command:breakpoint set --name binding
//@ lldb-command:breakpoint set --name assignment
//@ lldb-command:breakpoint set --name function_call
//@ lldb-command:breakpoint set --name identifier
//@ lldb-command:breakpoint set --name return_expr
//@ lldb-command:breakpoint set --name arithmetic_expr
//@ lldb-command:breakpoint set --name if_expr
//@ lldb-command:breakpoint set --name while_expr
//@ lldb-command:breakpoint set --name loop_expr
//@ lldb-command:run
// IMMEDIATE ARGS
//@ lldb-command:v a
//@ lldb-check:[...] 1
//@ lldb-command:v b
//@ lldb-check:[...] true
//@ lldb-command:v c
//@ lldb-check:[...] 2.5
//@ lldb-command:continue
// NON IMMEDIATE ARGS
//@ lldb-command:v a
//@ lldb-check:[...] { a = 3, b = 4, c = 5, d = 6, e = 7, f = 8, g = 9, h = 10 }
//@ lldb-command:v b
//@ lldb-check:[...] { a = 11, b = 12, c = 13, d = 14, e = 15, f = 16, g = 17, h = 18 }
//@ lldb-command:continue
// BINDING
//@ lldb-command:v a
//@ lldb-check:[...] 19
//@ lldb-command:v b
//@ lldb-check:[...] 20
//@ lldb-command:v c
//@ lldb-check:[...] 21.5
//@ lldb-command:continue
// ASSIGNMENT
//@ lldb-command:v a
//@ lldb-check:[...] 22
//@ lldb-command:v b
//@ lldb-check:[...] 23
//@ lldb-command:v c
//@ lldb-check:[...] 24.5
//@ lldb-command:continue
// FUNCTION CALL
//@ lldb-command:v x
//@ lldb-check:[...] 25
//@ lldb-command:v y
//@ lldb-check:[...] 26
//@ lldb-command:v z
//@ lldb-check:[...] 27.5
//@ lldb-command:continue
// EXPR
//@ lldb-command:v x
//@ lldb-check:[...] 28
//@ lldb-command:v y
//@ lldb-check:[...] 29
//@ lldb-command:v z
//@ lldb-check:[...] 30.5
//@ lldb-command:continue
// RETURN EXPR
//@ lldb-command:v x
//@ lldb-check:[...] 31
//@ lldb-command:v y
//@ lldb-check:[...] 32
//@ lldb-command:v z
//@ lldb-check:[...] 33.5
//@ lldb-command:continue
// ARITHMETIC EXPR
//@ lldb-command:v x
//@ lldb-check:[...] 34
//@ lldb-command:v y
//@ lldb-check:[...] 35
//@ lldb-command:v z
//@ lldb-check:[...] 36.5
//@ lldb-command:continue
// IF EXPR
//@ lldb-command:v x
//@ lldb-check:[...] 37
//@ lldb-command:v y
//@ lldb-check:[...] 38
//@ lldb-command:v z
//@ lldb-check:[...] 39.5
//@ lldb-command:continue
// WHILE EXPR
//@ lldb-command:v x
//@ lldb-check:[...] 40
//@ lldb-command:v y
//@ lldb-check:[...] 41
//@ lldb-command:v z
//@ lldb-check:[...] 42
//@ lldb-command:continue
// LOOP EXPR
//@ lldb-command:v x
//@ lldb-check:[...] 43
//@ lldb-command:v y
//@ lldb-check:[...] 44
//@ lldb-command:v z
//@ lldb-check:[...] 45
//@ lldb-command:continue
#![allow(unused_variables)]
fn immediate_args(a: isize, b: bool, c: f64) {
()
}
struct BigStruct {
a: u64,
b: u64,
c: u64,
d: u64,
e: u64,
f: u64,
g: u64,
h: u64
}
fn non_immediate_args(a: BigStruct, b: BigStruct) {
()
}
fn binding(a: i64, b: u64, c: f64) {
let x = 0;
}
fn assignment(mut a: u64, b: u64, c: f64) {
a = b;
}
fn function_call(x: u64, y: u64, z: f64) {
println!("Hi!")
}
fn identifier(x: u64, y: u64, z: f64) -> u64 {
x
}
fn return_expr(x: u64, y: u64, z: f64) -> u64 {
return x;
}
fn arithmetic_expr(x: u64, y: u64, z: f64) -> u64 {
x + y
}
fn if_expr(x: u64, y: u64, z: f64) -> u64 {
if x + y < 1000 {
x
} else {
y
}
}
fn while_expr(mut x: u64, y: u64, z: u64) -> u64 {
while x + y < 1000 {
x += z
}
return x;
}
fn loop_expr(mut x: u64, y: u64, z: u64) -> u64 {
loop {
x += z;
if x + y > 1000 {
return x;
}
}
}
fn main() {
immediate_args(1, true, 2.5);
non_immediate_args(
BigStruct {
a: 3,
b: 4,
c: 5,
d: 6,
e: 7,
f: 8,
g: 9,
h: 10
},
BigStruct {
a: 11,
b: 12,
c: 13,
d: 14,
e: 15,
f: 16,
g: 17,
h: 18
}
);
binding(19, 20, 21.5);
assignment(22, 23, 24.5);
function_call(25, 26, 27.5);
identifier(28, 29, 30.5);
return_expr(31, 32, 33.5);
arithmetic_expr(34, 35, 36.5);
if_expr(37, 38, 39.5);
while_expr(40, 41, 42);
loop_expr(43, 44, 45);
}