// Regression tests for issue #55414, expansion happens in the value of a key-value attribute,
// and the expanded expression is more complex than simply a macro call.

//@ proc-macro: key-value-expansion.rs

#![feature(rustc_attrs)]

extern crate key_value_expansion;

// Minimized test case.

macro_rules! bug {
    ($expr:expr) => {
        #[rustc_dummy = $expr] // Any key-value attribute, not necessarily `doc`
        struct S;
    };
}

// Any expressions containing macro call `X` that's more complex than `X` itself.
// Parentheses will work.
bug!((column!())); //~ ERROR attribute value must be a literal

// Original test case.

macro_rules! bug {
    () => {
        bug!("bug" + stringify!(found)); //~ ERROR attribute value must be a literal
    };
    ($test:expr) => {
        #[doc = $test]
        struct Test {}
    };
}

bug!();

// Test case from #66804.

macro_rules! doc_comment {
    ($x:expr) => {
        #[doc = $x]
        extern "C" {}
    };
}

macro_rules! some_macro {
    ($t1: ty) => {
        doc_comment! {format!("{coor}", coor = stringify!($t1)).as_str()}
        //~^ ERROR attribute value must be a literal
    };
}

some_macro!(u8);

fn main() {}
