// gate-test-custom_inner_attributes
// compile-flags: -Z span-debug --error-format human
// aux-build:test-macros.rs
// edition:2018

#![feature(custom_inner_attributes)]
#![feature(proc_macro_hygiene)]
#![feature(stmt_expr_attributes)]
#![feature(rustc_attrs)]

#![no_std] // Don't load unnecessary hygiene information from std
extern crate std;

#[macro_use]
extern crate test_macros;

#[print_target_and_args(first)]
#[print_target_and_args(second)]
fn foo() {
    #![print_target_and_args(third)]
    #![print_target_and_args(fourth)]
}

#[print_target_and_args(mod_first)]
#[print_target_and_args(mod_second)]
mod inline_mod {
    #![print_target_and_args(mod_third)]
    #![print_target_and_args(mod_fourth)]
}

struct MyStruct {
    field: bool
}

#[derive(Print)]
struct MyDerivePrint {
    field: [u8; {
        match true {
            _ => {
                #![cfg_attr(not(FALSE), rustc_dummy(third))]
                true
            }
        };
        0
    }]
}

fn bar() {
    #[print_target_and_args(tuple_attrs)] (
        3, 4, {
            #![cfg_attr(not(FALSE), rustc_dummy(innermost))]
            5
        }
    );

    #[print_target_and_args(tuple_attrs)] (
        3, 4, {
            #![cfg_attr(not(FALSE), rustc_dummy(innermost))]
            5
        }
    );

    for _ in &[true] {
        #![print_attr] //~ ERROR expected non-macro inner attribute
    }

    let _ = {
        #![print_attr] //~ ERROR expected non-macro inner attribute
    };

    let _ = async {
        #![print_attr] //~ ERROR expected non-macro inner attribute
    };

    {
        #![print_attr] //~ ERROR expected non-macro inner attribute
    };
}


extern {
    fn weird_extern() {
        #![print_target_and_args_consume(tenth)]
    }
}

fn main() {}
