@@ -460,45 +460,51 @@ fn codegen_fn_attrs(tcx: TyCtxt<'_>, did: LocalDefId) -> CodegenFnAttrs {
460460 let mut prefix = None ;
461461 let mut entry = None ;
462462 for item in l {
463- let Some ( metaitem) = item. meta_item ( ) else {
463+ let Some ( meta_item) = item. meta_item ( ) else {
464+ tcx. dcx ( ) . span_err ( item. span ( ) , "Expected name value pair." ) ;
464465 continue ;
465466 } ;
466467
467- let [ single_segment] = & metaitem. path . segments [ ..] else {
468+ let Some ( name_value_lit) = meta_item. name_value_literal ( ) else {
469+ tcx. dcx ( ) . span_err ( item. span ( ) , "Expected name value pair." ) ;
468470 continue ;
469471 } ;
470472
471- let attrib_to_write = match single_segment . ident . name {
473+ let attrib_to_write = match meta_item . name_or_empty ( ) {
472474 sym:: prefix_nops => & mut prefix,
473- sym:: entry_nops => & mut entry,
474- _ => {
475- tcx. dcx ( ) . span_err ( metaitem. span , "Unexpected parameter." ) ;
476- continue ;
477- }
478- } ;
479-
480- if let Some ( metaitem) =
481- item. meta_item ( ) . map ( |e| e. name_value_literal ( ) ) . flatten ( )
482- {
483- let rustc_ast:: LitKind :: Int ( val, _) = metaitem. kind else {
475+ sym:: entry_nops => & mut entry,
476+ _ => {
484477 tcx. dcx ( ) . span_err (
485- metaitem. span ,
486- "Expected integer value between 0 and 255" ,
478+ item. span ( ) ,
479+ format ! (
480+ "Unexpected name. Allowed names: {}, {}" ,
481+ sym:: prefix_nops,
482+ sym:: entry_nops
483+ ) ,
487484 ) ;
488485 continue ;
489- } ;
486+ }
487+ } ;
490488
491- let Ok ( val) = val . get ( ) . try_into ( ) else {
492- tcx. dcx ( ) . span_err (
493- metaitem . span ,
494- "Integer value outside range between 0 and 255.",
495- ) ;
496- continue ;
497- } ;
489+ let rustc_ast :: LitKind :: Int ( val, _ ) = name_value_lit . kind else {
490+ tcx. dcx ( ) . span_err (
491+ name_value_lit . span ,
492+ "Expected integer value between 0 and 255.",
493+ ) ;
494+ continue ;
495+ } ;
498496
499- * attrib_to_write = Some ( val) ;
500- }
497+ let Ok ( val) = val. get ( ) . try_into ( ) else {
498+ tcx. dcx ( ) . span_err (
499+ name_value_lit. span ,
500+ "Integer value outside range between 0 and 255." ,
501+ ) ;
502+ continue ;
503+ } ;
504+
505+ * attrib_to_write = Some ( val) ;
501506 }
507+
502508 if let ( None , None ) = ( prefix, entry) {
503509 tcx. dcx ( ) . span_err ( attr. span , "Must specify at least one parameter." ) ;
504510 }
0 commit comments