@@ -256,7 +256,13 @@ fn format_args_expand(
256
256
quote ! { std:: fmt:: ArgumentV1 :: new( & ( #arg) , std:: fmt:: Display :: fmt) , }
257
257
} . token_trees ) ;
258
258
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
+ }
260
266
} ;
261
267
ExpandResult :: ok ( expanded)
262
268
}
@@ -762,7 +768,7 @@ mod tests {
762
768
format_args!("{} {:?}", arg1(a, b, c), arg2);
763
769
"# ,
764
770
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),])} "#
766
772
] ] ,
767
773
) ;
768
774
}
@@ -779,7 +785,7 @@ mod tests {
779
785
format_args!("{} {:?}", a::<A,B>(), b);
780
786
"# ,
781
787
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),])} "#
783
789
] ] ,
784
790
) ;
785
791
}
0 commit comments