@@ -79,27 +79,25 @@ impl<'tcx> ExprVisitor<'tcx> {
7979 // Special-case transmuting from `typeof(function)` and
8080 // `Option<typeof(function)>` to present a clearer error.
8181 let from = unpack_option_like ( self . tcx , from) ;
82- if let ( & ty:: FnDef ( ..) , SizeSkeleton :: Known ( size_to) ) = ( from. kind ( ) , sk_to) {
83- if size_to == Pointer . size ( & self . tcx ) {
84- struct_span_err ! ( self . tcx. sess, span, E0591 , "can't transmute zero-sized type" )
85- . note ( & format ! ( "source type: {}" , from) )
86- . note ( & format ! ( "target type: {}" , to) )
87- . help ( "cast with `as` to a pointer instead" )
88- . emit ( ) ;
89- return ;
90- }
82+ if let ( & ty:: FnDef ( ..) , SizeSkeleton :: Known ( size_to) ) = ( from. kind ( ) , sk_to) && size_to == Pointer . size ( & self . tcx ) {
83+ struct_span_err ! ( self . tcx. sess, span, E0591 , "can't transmute zero-sized type" )
84+ . note ( & format ! ( "source type: {from}" ) )
85+ . note ( & format ! ( "target type: {to}" ) )
86+ . help ( "cast with `as` to a pointer instead" )
87+ . emit ( ) ;
88+ return ;
9189 }
9290 }
9391
9492 // Try to display a sensible error with as much information as possible.
9593 let skeleton_string = |ty : Ty < ' tcx > , sk| match sk {
9694 Ok ( SizeSkeleton :: Known ( size) ) => format ! ( "{} bits" , size. bits( ) ) ,
97- Ok ( SizeSkeleton :: Pointer { tail, .. } ) => format ! ( "pointer to `{}`" , tail ) ,
95+ Ok ( SizeSkeleton :: Pointer { tail, .. } ) => format ! ( "pointer to `{tail }`" ) ,
9896 Err ( LayoutError :: Unknown ( bad) ) => {
9997 if bad == ty {
10098 "this type does not have a fixed size" . to_owned ( )
10199 } else {
102- format ! ( "size can vary because of {}" , bad )
100+ format ! ( "size can vary because of {bad}" )
103101 }
104102 }
105103 Err ( err) => err. to_string ( ) ,
@@ -113,7 +111,7 @@ impl<'tcx> ExprVisitor<'tcx> {
113111 or dependently-sized types"
114112 ) ;
115113 if from == to {
116- err. note ( & format ! ( "`{}` does not have a fixed size" , from ) ) ;
114+ err. note ( & format ! ( "`{from }` does not have a fixed size" ) ) ;
117115 } else {
118116 err. note ( & format ! ( "source type: `{}` ({})" , from, skeleton_string( from, sk_from) ) )
119117 . note ( & format ! ( "target type: `{}` ({})" , to, skeleton_string( to, sk_to) ) ) ;
@@ -201,7 +199,7 @@ impl<'tcx> ExprVisitor<'tcx> {
201199 _ => None ,
202200 } ;
203201 let Some ( asm_ty) = asm_ty else {
204- let msg = & format ! ( "cannot use value of type `{}` for inline assembly" , ty ) ;
202+ let msg = & format ! ( "cannot use value of type `{ty }` for inline assembly" ) ;
205203 let mut err = self . tcx . sess . struct_span_err ( expr. span , msg) ;
206204 err. note (
207205 "only integers, floats, SIMD vectors, pointers and function pointers \
@@ -216,7 +214,7 @@ impl<'tcx> ExprVisitor<'tcx> {
216214 if !ty. is_copy_modulo_regions ( self . tcx . at ( DUMMY_SP ) , self . param_env ) {
217215 let msg = "arguments for inline assembly must be copyable" ;
218216 let mut err = self . tcx . sess . struct_span_err ( expr. span , msg) ;
219- err. note ( & format ! ( "`{}` does not implement the Copy trait" , ty ) ) ;
217+ err. note ( & format ! ( "`{ty }` does not implement the Copy trait" ) ) ;
220218 err. emit ( ) ;
221219 }
222220
@@ -237,7 +235,7 @@ impl<'tcx> ExprVisitor<'tcx> {
237235 in_expr. span ,
238236 & format ! ( "type `{}`" , self . typeck_results. expr_ty_adjusted( in_expr) ) ,
239237 ) ;
240- err. span_label ( expr. span , & format ! ( "type `{}`" , ty ) ) ;
238+ err. span_label ( expr. span , & format ! ( "type `{ty }`" ) ) ;
241239 err. note (
242240 "asm inout arguments must have the same type, \
243241 unless they are both pointers or integers of the same size",
@@ -256,7 +254,7 @@ impl<'tcx> ExprVisitor<'tcx> {
256254 let reg_class = reg. reg_class ( ) ;
257255 let supported_tys = reg_class. supported_types ( asm_arch) ;
258256 let Some ( ( _, feature) ) = supported_tys. iter ( ) . find ( |& & ( t, _) | t == asm_ty) else {
259- let msg = & format ! ( "type `{}` cannot be used with this register class" , ty ) ;
257+ let msg = & format ! ( "type `{ty }` cannot be used with this register class" ) ;
260258 let mut err = self . tcx . sess . struct_span_err ( expr. span , msg) ;
261259 let supported_tys: Vec < _ > =
262260 supported_tys. iter ( ) . map ( |( t, _) | t. to_string ( ) ) . collect ( ) ;
@@ -326,12 +324,10 @@ impl<'tcx> ExprVisitor<'tcx> {
326324 let mut err = lint. build ( msg) ;
327325 err. span_label ( expr. span , "for this argument" ) ;
328326 err. help ( & format ! (
329- "use the `{}` modifier to have the register formatted as `{}`" ,
330- suggested_modifier, suggested_result,
327+ "use the `{suggested_modifier}` modifier to have the register formatted as `{suggested_result}`" ,
331328 ) ) ;
332329 err. help ( & format ! (
333- "or use the `{}` modifier to keep the default formatting of `{}`" ,
334- default_modifier, default_result,
330+ "or use the `{default_modifier}` modifier to keep the default formatting of `{default_result}`" ,
335331 ) ) ;
336332 err. emit ( ) ;
337333 } ,
@@ -509,14 +505,14 @@ impl<'tcx> Visitor<'tcx> for ExprVisitor<'tcx> {
509505 match expr. kind {
510506 hir:: ExprKind :: Path ( ref qpath) => {
511507 let res = self . typeck_results . qpath_res ( qpath, expr. hir_id ) ;
512- if let Res :: Def ( DefKind :: Fn , did) = res {
513- if self . def_id_is_transmute ( did) {
514- let typ = self . typeck_results . node_type ( expr . hir_id ) ;
515- let sig = typ . fn_sig ( self . tcx ) ;
516- let from = sig . inputs ( ) . skip_binder ( ) [ 0 ] ;
517- let to = sig. output ( ) . skip_binder ( ) ;
518- self . check_transmute ( expr . span , from , to ) ;
519- }
508+ if let Res :: Def ( DefKind :: Fn , did) = res
509+ && self . def_id_is_transmute ( did)
510+ {
511+ let typ = self . typeck_results . node_type ( expr . hir_id ) ;
512+ let sig = typ . fn_sig ( self . tcx ) ;
513+ let from = sig. inputs ( ) . skip_binder ( ) [ 0 ] ;
514+ let to = sig . output ( ) . skip_binder ( ) ;
515+ self . check_transmute ( expr . span , from , to ) ;
520516 }
521517 }
522518
0 commit comments