@@ -2560,6 +2560,7 @@ fn codegen_fn_attrs(tcx: TyCtxt<'_>, id: DefId) -> CodegenFnAttrs {
2560
2560
let whitelist = tcx. target_features_whitelist ( LOCAL_CRATE ) ;
2561
2561
2562
2562
let mut inline_span = None ;
2563
+ let mut link_ordinal_span = None ;
2563
2564
for attr in attrs. iter ( ) {
2564
2565
if attr. check_name ( sym:: cold) {
2565
2566
codegen_fn_attrs. flags |= CodegenFnAttrFlags :: COLD ;
@@ -2642,6 +2643,7 @@ fn codegen_fn_attrs(tcx: TyCtxt<'_>, id: DefId) -> CodegenFnAttrs {
2642
2643
} else if attr. check_name ( sym:: link_name) {
2643
2644
codegen_fn_attrs. link_name = attr. value_str ( ) ;
2644
2645
} else if attr. check_name ( sym:: link_ordinal) {
2646
+ link_ordinal_span = Some ( attr. span ) ;
2645
2647
if let ordinal @ Some ( _) = check_link_ordinal ( tcx, attr) {
2646
2648
codegen_fn_attrs. link_ordinal = ordinal;
2647
2649
}
@@ -2747,7 +2749,7 @@ fn codegen_fn_attrs(tcx: TyCtxt<'_>, id: DefId) -> CodegenFnAttrs {
2747
2749
codegen_fn_attrs. export_name = Some ( name) ;
2748
2750
codegen_fn_attrs. link_name = Some ( name) ;
2749
2751
}
2750
- check_link_name_xor_ordinal ( tcx, & codegen_fn_attrs, inline_span ) ;
2752
+ check_link_name_xor_ordinal ( tcx, & codegen_fn_attrs, link_ordinal_span ) ;
2751
2753
2752
2754
// Internal symbols to the standard library all have no_mangle semantics in
2753
2755
// that they have defined symbol names present in the function name. This
@@ -2772,14 +2774,18 @@ fn check_link_ordinal(tcx: TyCtxt<'_>, attr: &ast::Attribute) -> Option<usize> {
2772
2774
Some ( * ordinal as usize )
2773
2775
} else {
2774
2776
let msg = format ! (
2775
- "too large ordinal value in link_ordinal value : `{}`" ,
2777
+ "ordinal value in ` link_ordinal` is too large : `{}`" ,
2776
2778
& ordinal
2777
2779
) ;
2778
- tcx. sess . span_err ( attr. span , & msg) ;
2780
+ tcx. sess . struct_span_err ( attr. span , & msg)
2781
+ . note ( "the value may not exceed `std::usize::MAX`" )
2782
+ . emit ( ) ;
2779
2783
None
2780
2784
}
2781
2785
} else {
2782
- tcx. sess . span_err ( attr. span , "illegal ordinal format in link_ordinal" ) ;
2786
+ tcx. sess . struct_span_err ( attr. span , "illegal ordinal format in `link_ordinal`" )
2787
+ . note ( "an unsuffixed integer value, e.g., `1`, is expected" )
2788
+ . emit ( ) ;
2783
2789
None
2784
2790
}
2785
2791
}
0 commit comments