40 lines
1.6 KiB
Rust
40 lines
1.6 KiB
Rust
|
|
// 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() {}
|