Skip to content

Commit 15eccf2

Browse files
committed
Fix missing unsafe block for the nightly change
Fix #10022
1 parent 793389b commit 15eccf2

File tree

1 file changed

+9
-3
lines changed

1 file changed

+9
-3
lines changed

crates/hir_expand/src/builtin_macro.rs

+9-3
Original file line numberDiff line numberDiff line change
@@ -256,7 +256,13 @@ fn format_args_expand(
256256
quote! { std::fmt::ArgumentV1::new(&(#arg), std::fmt::Display::fmt), }
257257
}.token_trees);
258258
let expanded = quote! {
259-
std::fmt::Arguments::new_v1(&[], &[##arg_tts])
259+
// It's unsafe since https://github.com/rust-lang/rust/pull/83302
260+
// Wrap an unsafe block to avoid false-positive `missing-unsafe` lint.
261+
// FIXME: Currently we don't have `unused_unsafe` lint so an extra unsafe block won't cause issues on early
262+
// stable rust-src.
263+
unsafe {
264+
std::fmt::Arguments::new_v1(&[], &[##arg_tts])
265+
}
260266
};
261267
ExpandResult::ok(expanded)
262268
}
@@ -762,7 +768,7 @@ mod tests {
762768
format_args!("{} {:?}", arg1(a, b, c), arg2);
763769
"#,
764770
expect![[
765-
r#"std::fmt::Arguments::new_v1(&[], &[std::fmt::ArgumentV1::new(&(arg1(a,b,c)),std::fmt::Display::fmt),std::fmt::ArgumentV1::new(&(arg2),std::fmt::Display::fmt),])"#
771+
r#"unsafe{std::fmt::Arguments::new_v1(&[], &[std::fmt::ArgumentV1::new(&(arg1(a,b,c)),std::fmt::Display::fmt),std::fmt::ArgumentV1::new(&(arg2),std::fmt::Display::fmt),])}"#
766772
]],
767773
);
768774
}
@@ -779,7 +785,7 @@ mod tests {
779785
format_args!("{} {:?}", a::<A,B>(), b);
780786
"#,
781787
expect![[
782-
r#"std::fmt::Arguments::new_v1(&[], &[std::fmt::ArgumentV1::new(&(a::<A,B>()),std::fmt::Display::fmt),std::fmt::ArgumentV1::new(&(b),std::fmt::Display::fmt),])"#
788+
r#"unsafe{std::fmt::Arguments::new_v1(&[], &[std::fmt::ArgumentV1::new(&(a::<A,B>()),std::fmt::Display::fmt),std::fmt::ArgumentV1::new(&(b),std::fmt::Display::fmt),])}"#
783789
]],
784790
);
785791
}

0 commit comments

Comments
 (0)