//! 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");
