mirror of
https://github.com/rust-lang/rust.git
synced 2026-04-26 13:01:27 +03:00
686ddd3e2e
Some optimization passes _improve_ compile times [1]. So we want to run some passes even with `-Copt-level=0`. That means that some of the lines in the test can be optimized away. To make regression testing more robust, we also want to run the test with such passes disabled. The solution is to use two revisions. One with default `-Copt-level=0` passes, and one "even less optimized", with enough optimization passes disabled to keep the maximum number of lines steppable. [1]: https://github.com/rust-lang/compiler-team/issues/319
140 lines
3.4 KiB
Rust
140 lines
3.4 KiB
Rust
//! 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
|
|
// LLDB 1800+ tests were not tested in CI, broke, and now are disabled
|
|
//@ ignore-lldb
|
|
//@ min-gdb-version: 13.0
|
|
|
|
//@ aux-build:macro-stepping.rs
|
|
|
|
#![allow(unused)]
|
|
|
|
#[macro_use]
|
|
extern crate macro_stepping; // exports new_scope!()
|
|
|
|
//@ compile-flags: -g
|
|
// See explanation in `tests/debuginfo/basic-stepping.rs`.
|
|
//@ revisions: opt-level-0 maximally-steppable
|
|
//@ [maximally-steppable] compile-flags: -Zmir-enable-passes=-SingleUseConsts
|
|
|
|
// === 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
|
|
//@ [maximally-steppable] 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");
|