@@ -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