blob: 0dff383be8255aa18a0051751db9a8c989862486 [file] [log] [blame] [edit]
//! This tests that `next` skips over macro invocations correctly.
//! The `#locN` markers have no meaning for compiletest, we include them just
//! so that the debugger prints them when printing the current source location,
//! and we can match on them for testing purposes.
//@ ignore-android
//@ min-lldb-version: 1800
//@ min-gdb-version: 13.0
//@ aux-build:macro-stepping.rs
#![allow(unused)]
#[macro_use]
extern crate macro_stepping; // exports new_scope!()
//@ compile-flags:-g -Zmir-enable-passes=-SingleUseConsts
// SingleUseConsts shouldn't need to be disabled, see #128945
// === GDB TESTS ===================================================================================
//@ gdb-command:run
//@ gdb-command:next
//@ gdb-command:frame
//@ gdb-check:[...]#loc1[...]
//@ gdb-command:next
//@ gdb-command:frame
//@ gdb-check:[...]#loc2[...]
//@ gdb-command:next
//@ gdb-command:frame
//@ gdb-check:[...]#loc3[...]
//@ gdb-command:next
//@ gdb-command:frame
//@ gdb-check:[...]#loc4[...]
//@ gdb-command:next
//@ gdb-command:frame
//@ gdb-check:[...]#loc5[...]
//@ gdb-command:next
//@ gdb-command:frame
//@ gdb-check:[...]#loc6[...]
//@ gdb-command:continue
//@ gdb-command:step
//@ gdb-command:frame
//@ gdb-check:[...]#inc-loc1[...]
//@ gdb-command:next
//@ gdb-command:frame
//@ gdb-check:[...]#inc-loc2[...]
//@ gdb-command:next
//@ gdb-command:frame
//@ gdb-check:[...]#inc-loc3[...]
// === LLDB TESTS ==================================================================================
//@ lldb-command:set set stop-line-count-before 0
//@ lldb-command:set set stop-line-count-after 1
// Can't set both to zero or lldb will stop printing source at all. So it will output the current
// line and the next. We deal with this by having at least 2 lines between the #loc's
//@ lldb-command:run
//@ lldb-command:next
//@ lldb-command:frame select
//@ lldb-check:[...] #loc1 [...]
//@ lldb-command:next
//@ lldb-command:frame select
//@ lldb-check:[...] #loc2 [...]
//@ lldb-command:next
//@ lldb-command:frame select
//@ lldb-check:[...] #loc3 [...]
//@ lldb-command:next
//@ lldb-command:frame select
//@ lldb-check:[...] #loc4 [...]
//@ lldb-command:next
//@ lldb-command:frame select
//@ lldb-check:[...] #loc5 [...]
// FIXME: what about loc6?
//@ lldb-command:continue
//@ lldb-command:step
//@ lldb-command:frame select
//@ lldb-check:[...] #inc-loc1 [...]
//@ lldb-command:next
//@ lldb-command:frame select
//@ lldb-check:[...] #inc-loc2 [...]
//@ lldb-command:next
//@ lldb-command:frame select
//@ lldb-check:[...] #inc-loc1 [...]
//@ lldb-command:next
//@ lldb-command:frame select
//@ lldb-check:[...] #inc-loc2 [...]
//@ lldb-command:next
//@ lldb-command:frame select
//@ lldb-check:[...] #inc-loc3 [...]
#[collapse_debuginfo(yes)]
macro_rules! foo {
() => {
let a = 1; opaque(a);
let b = 2; opaque(b);
let c = 3; opaque(c);
};
}
#[collapse_debuginfo(yes)]
macro_rules! foo2 {
() => {
foo!();
let x = 1; opaque(x);
foo!();
};
}
fn main() {
zzz(); // #break
foo!(); // #loc1
foo2!(); // #loc2
let x = vec![42]; // #loc3
new_scope!(); // #loc4
println!("Hello {}", // #loc5
"world");
zzz(); // #loc6
included(); // #break
}
fn zzz() {()}
fn opaque(_: u32) {}
include!("macro-stepping.inc");