//! 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
// FIXME(#128945): SingleUseConsts shouldn't need to be disabled.
//@ revisions: default-mir-passes no-SingleUseConsts-mir-pass
//@ [no-SingleUseConsts-mir-pass] 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
//@ [no-SingleUseConsts-mir-pass] 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");
