diff --git a/compiler/rustc_errors/src/lib.rs b/compiler/rustc_errors/src/lib.rs index 7fc3e4a45d0a..1db50df6ccbb 100644 --- a/compiler/rustc_errors/src/lib.rs +++ b/compiler/rustc_errors/src/lib.rs @@ -66,7 +66,7 @@ use tracing::debug; use crate::emitter::TimingEvent; -use crate::formatting::format_diag_message; +pub use crate::formatting::format_diag_message; use crate::timings::TimingRecord; pub mod annotate_snippet_emitter_writer; diff --git a/compiler/rustc_macros/src/diagnostics/subdiagnostic.rs b/compiler/rustc_macros/src/diagnostics/subdiagnostic.rs index 623742132208..3e094ee8d42b 100644 --- a/compiler/rustc_macros/src/diagnostics/subdiagnostic.rs +++ b/compiler/rustc_macros/src/diagnostics/subdiagnostic.rs @@ -227,9 +227,9 @@ fn generate_field_arg(&mut self, binding_info: &BindingInfo<'_>) -> TokenStream let ident = format_ident!("{}", ident); // strip `r#` prefix, if present quote! { - #diag.arg( - stringify!(#ident), - #field_binding + sub_args.insert( + stringify!(#ident).into(), + rustc_errors::IntoDiagArg::into_diag_arg(#field_binding, &mut #diag.long_ty_path) ); } } @@ -529,14 +529,25 @@ pub(crate) fn into_tokens(&mut self) -> Result Result Result