mirror of
https://github.com/rust-lang/rust.git
synced 2025-10-05 03:36:21 +00:00

This fixes a problem where code generated by an external macro with an RPIT would end up using the call-site edition instead of the macro's edition for the RPIT. When used from a 2024 crate, this caused the code to change behavior to the 2024 capturing rules, which we don't want. This was caused by the impl-trait lowering code would replace the span with one marked with `DesugaringKind::OpaqueTy` desugaring. However, it was also overriding the edition of the span with the edition of the local crate. Instead it should be using the edition of the span itself. Fixes https://github.com/rust-lang/rust/issues/132917
27 lines
595 B
Rust
27 lines
595 B
Rust
// Tests that code generated from an external macro (MBE and proc-macro) that
|
|
// has an RPIT will not fail when the call-site is 2024.
|
|
// https://github.com/rust-lang/rust/issues/132917
|
|
|
|
//@ aux-crate: no_use_pm=no-use-pm.rs
|
|
//@ aux-crate: no_use_macro=no-use-macro.rs
|
|
//@ edition: 2024
|
|
//@ compile-flags:-Z unstable-options
|
|
//@ check-pass
|
|
|
|
no_use_pm::pm_rpit!{}
|
|
|
|
no_use_macro::macro_rpit!{}
|
|
|
|
fn main() {
|
|
let mut x = vec![];
|
|
x.push(1);
|
|
|
|
let element = test_pm(&x);
|
|
x.push(2);
|
|
println!("{element}");
|
|
|
|
let element = test_mbe(&x);
|
|
x.push(2);
|
|
println!("{element}");
|
|
}
|