// This checks the behavior of how nested macro_rules definitions are handled // with regards to edition spans. Prior to https://github.com/rust-lang/rust/pull/133274, // the compiler would compile the inner macro with the edition of the local crate. // Afterwards, it uses the edition where the macro was *defined*. // // Unfortunately macro_rules compiler discards the edition of any *input* that // was used to generate the macro. This is possibly not the behavior that we // want. If we want to keep with the philosophy that code should follow the // edition rules of the crate where it is written, then presumably we would // want the input tokens to retain the edition of where they were written. // // See https://github.com/rust-lang/rust/issues/135669 for more. // // This has two revisions, one where local=2021 and the dep=2024. The other // revision is vice-versa. //@ revisions: e2021 e2024 //@[e2021] edition:2021 //@[e2024] edition:2024 //@[e2021] aux-crate: nested_macro_rules_dep=nested_macro_rules_dep_2024.rs //@[e2024] aux-crate: nested_macro_rules_dep=nested_macro_rules_dep_2021.rs //@[e2024] check-pass mod with_input { // If we change the macro_rules input behavior, then this should pass when // local edition is 2021 because `gen` is written in a context with 2021 // behavior. For local edition 2024, the reverse would be true and this // should fail. nested_macro_rules_dep::make_macro_with_input!{gen} macro_inner_input!{} //[e2021]~^ ERROR found reserved keyword } mod no_input { nested_macro_rules_dep::make_macro!{} macro_inner!{} //[e2021]~^ ERROR found reserved keyword } fn main() {}