| // 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() {} |