@@ -2522,6 +2522,7 @@ fn codegen_fn_attrs(tcx: TyCtxt<'_>, id: DefId) -> CodegenFnAttrs {
2522
2522
let whitelist = tcx. target_features_whitelist ( LOCAL_CRATE ) ;
2523
2523
2524
2524
let mut inline_span = None ;
2525
+ let mut link_ordinal_span = None ;
2525
2526
for attr in attrs. iter ( ) {
2526
2527
if attr. check_name ( sym:: cold) {
2527
2528
codegen_fn_attrs. flags |= CodegenFnAttrFlags :: COLD ;
@@ -2604,6 +2605,7 @@ fn codegen_fn_attrs(tcx: TyCtxt<'_>, id: DefId) -> CodegenFnAttrs {
2604
2605
} else if attr. check_name ( sym:: link_name) {
2605
2606
codegen_fn_attrs. link_name = attr. value_str ( ) ;
2606
2607
} else if attr. check_name ( sym:: link_ordinal) {
2608
+ link_ordinal_span = Some ( attr. span ) ;
2607
2609
if let ordinal @ Some ( _) = check_link_ordinal ( tcx, attr) {
2608
2610
codegen_fn_attrs. link_ordinal = ordinal;
2609
2611
}
@@ -2709,7 +2711,7 @@ fn codegen_fn_attrs(tcx: TyCtxt<'_>, id: DefId) -> CodegenFnAttrs {
2709
2711
codegen_fn_attrs. export_name = Some ( name) ;
2710
2712
codegen_fn_attrs. link_name = Some ( name) ;
2711
2713
}
2712
- check_link_name_xor_ordinal ( tcx, & codegen_fn_attrs, inline_span ) ;
2714
+ check_link_name_xor_ordinal ( tcx, & codegen_fn_attrs, link_ordinal_span ) ;
2713
2715
2714
2716
// Internal symbols to the standard library all have no_mangle semantics in
2715
2717
// that they have defined symbol names present in the function name. This
@@ -2734,14 +2736,18 @@ fn check_link_ordinal(tcx: TyCtxt<'_>, attr: &ast::Attribute) -> Option<usize> {
2734
2736
Some ( * ordinal as usize )
2735
2737
} else {
2736
2738
let msg = format ! (
2737
- "too large ordinal value in link_ordinal value : `{}`" ,
2739
+ "ordinal value in ` link_ordinal` is too large : `{}`" ,
2738
2740
& ordinal
2739
2741
) ;
2740
- tcx. sess . span_err ( attr. span , & msg) ;
2742
+ tcx. sess . struct_span_err ( attr. span , & msg)
2743
+ . note ( "the value may not exceed `std::usize::MAX`" )
2744
+ . emit ( ) ;
2741
2745
None
2742
2746
}
2743
2747
} else {
2744
- tcx. sess . span_err ( attr. span , "illegal ordinal format in link_ordinal" ) ;
2748
+ tcx. sess . struct_span_err ( attr. span , "illegal ordinal format in `link_ordinal`" )
2749
+ . note ( "an unsuffixed integer value, e.g., `1`, is expected" )
2750
+ . emit ( ) ;
2745
2751
None
2746
2752
}
2747
2753
}
0 commit comments