@@ -472,45 +472,51 @@ fn codegen_fn_attrs(tcx: TyCtxt<'_>, did: LocalDefId) -> CodegenFnAttrs {
472472 let mut prefix = None ;
473473 let mut entry = None ;
474474 for item in l {
475- let Some ( metaitem) = item. meta_item ( ) else {
475+ let Some ( meta_item) = item. meta_item ( ) else {
476+ tcx. dcx ( ) . span_err ( item. span ( ) , "Expected name value pair." ) ;
476477 continue ;
477478 } ;
478479
479- let [ single_segment] = & metaitem. path . segments [ ..] else {
480+ let Some ( name_value_lit) = meta_item. name_value_literal ( ) else {
481+ tcx. dcx ( ) . span_err ( item. span ( ) , "Expected name value pair." ) ;
480482 continue ;
481483 } ;
482484
483- let attrib_to_write = match single_segment . ident . name {
485+ let attrib_to_write = match meta_item . name_or_empty ( ) {
484486 sym:: prefix_nops => & mut prefix,
485- sym:: entry_nops => & mut entry,
486- _ => {
487- tcx. dcx ( ) . span_err ( metaitem. span , "Unexpected parameter." ) ;
488- continue ;
489- }
490- } ;
491-
492- if let Some ( metaitem) =
493- item. meta_item ( ) . map ( |e| e. name_value_literal ( ) ) . flatten ( )
494- {
495- let rustc_ast:: LitKind :: Int ( val, _) = metaitem. kind else {
487+ sym:: entry_nops => & mut entry,
488+ _ => {
496489 tcx. dcx ( ) . span_err (
497- metaitem. span ,
498- "Expected integer value between 0 and 255" ,
490+ item. span ( ) ,
491+ format ! (
492+ "Unexpected name. Allowed names: {}, {}" ,
493+ sym:: prefix_nops,
494+ sym:: entry_nops
495+ ) ,
499496 ) ;
500497 continue ;
501- } ;
498+ }
499+ } ;
502500
503- let Ok ( val) = val . get ( ) . try_into ( ) else {
504- tcx. dcx ( ) . span_err (
505- metaitem . span ,
506- "Integer value outside range between 0 and 255.",
507- ) ;
508- continue ;
509- } ;
501+ let rustc_ast :: LitKind :: Int ( val, _ ) = name_value_lit . kind else {
502+ tcx. dcx ( ) . span_err (
503+ name_value_lit . span ,
504+ "Expected integer value between 0 and 255.",
505+ ) ;
506+ continue ;
507+ } ;
510508
511- * attrib_to_write = Some ( val) ;
512- }
509+ let Ok ( val) = val. get ( ) . try_into ( ) else {
510+ tcx. dcx ( ) . span_err (
511+ name_value_lit. span ,
512+ "Integer value outside range between 0 and 255." ,
513+ ) ;
514+ continue ;
515+ } ;
516+
517+ * attrib_to_write = Some ( val) ;
513518 }
519+
514520 if let ( None , None ) = ( prefix, entry) {
515521 tcx. dcx ( ) . span_err ( attr. span , "Must specify at least one parameter." ) ;
516522 }
0 commit comments