proc_macro_harness: adjust the span we use for const fn calls

This commit is contained in:
Ralf Jung 2024-10-07 17:27:37 +02:00
parent a0215d8e46
commit 3854e16fa2

View File

@ -313,14 +313,23 @@ fn mk_decls(cx: &mut ExtCtxt<'_>, macros: &[ProcMacro]) -> P<ast::Item> {
match m { match m {
ProcMacro::Derive(cd) => { ProcMacro::Derive(cd) => {
cx.resolver.declare_proc_macro(cd.id); cx.resolver.declare_proc_macro(cd.id);
cx.expr_call(span, proc_macro_ty_method_path(cx, custom_derive), thin_vec![ // The call needs to use `harness_span` so that the const stability checker
cx.expr_str(span, cd.trait_name), // accepts it.
cx.expr_array_ref( cx.expr_call(
span, harness_span,
cd.attrs.iter().map(|&s| cx.expr_str(span, s)).collect::<ThinVec<_>>(), proc_macro_ty_method_path(cx, custom_derive),
), thin_vec![
local_path(cx, cd.function_name), cx.expr_str(span, cd.trait_name),
]) cx.expr_array_ref(
span,
cd.attrs
.iter()
.map(|&s| cx.expr_str(span, s))
.collect::<ThinVec<_>>(),
),
local_path(cx, cd.function_name),
],
)
} }
ProcMacro::Attr(ca) | ProcMacro::Bang(ca) => { ProcMacro::Attr(ca) | ProcMacro::Bang(ca) => {
cx.resolver.declare_proc_macro(ca.id); cx.resolver.declare_proc_macro(ca.id);
@ -330,7 +339,9 @@ fn mk_decls(cx: &mut ExtCtxt<'_>, macros: &[ProcMacro]) -> P<ast::Item> {
ProcMacro::Derive(_) => unreachable!(), ProcMacro::Derive(_) => unreachable!(),
}; };
cx.expr_call(span, proc_macro_ty_method_path(cx, ident), thin_vec![ // The call needs to use `harness_span` so that the const stability checker
// accepts it.
cx.expr_call(harness_span, proc_macro_ty_method_path(cx, ident), thin_vec![
cx.expr_str(span, ca.function_name.name), cx.expr_str(span, ca.function_name.name),
local_path(cx, ca.function_name), local_path(cx, ca.function_name),
]) ])