@@ -45,6 +45,7 @@ use rustc_trait_selection::infer::{TyCtxtInferExt, ValuePairs};
4545use rustc_trait_selection:: traits:: ObligationCtxt ;
4646use tracing:: debug;
4747
48+ use crate :: errors:: AlignOnFields ;
4849use crate :: { errors, fluent_generated as fluent} ;
4950
5051#[ derive( LintDiagnostic ) ]
@@ -199,8 +200,8 @@ impl<'tcx> CheckAttrVisitor<'tcx> {
199200 Attribute :: Parsed ( AttributeKind :: ExportName { span : attr_span, .. } ) => {
200201 self . check_export_name ( hir_id, * attr_span, span, target)
201202 }
202- Attribute :: Parsed ( AttributeKind :: Align { align, span : repr_span } ) => {
203- self . check_align ( span, target, * align, * repr_span )
203+ Attribute :: Parsed ( AttributeKind :: Align { align, span : attr_span } ) => {
204+ self . check_align ( span, hir_id , target, * align, * attr_span )
204205 }
205206 Attribute :: Parsed ( AttributeKind :: LinkSection { span : attr_span, .. } ) => {
206207 self . check_link_section ( hir_id, * attr_span, span, target)
@@ -1948,22 +1949,37 @@ impl<'tcx> CheckAttrVisitor<'tcx> {
19481949 }
19491950
19501951 /// Checks if the `#[align]` attributes on `item` are valid.
1951- fn check_align ( & self , span : Span , target : Target , align : Align , repr_span : Span ) {
1952+ fn check_align (
1953+ & self ,
1954+ span : Span ,
1955+ hir_id : HirId ,
1956+ target : Target ,
1957+ align : Align ,
1958+ attr_span : Span ,
1959+ ) {
19521960 match target {
19531961 Target :: Fn | Target :: Method ( _) | Target :: ForeignFn => { }
1962+ Target :: Field => {
1963+ self . tcx . emit_node_span_lint (
1964+ UNUSED_ATTRIBUTES ,
1965+ hir_id,
1966+ attr_span,
1967+ AlignOnFields { span } ,
1968+ ) ;
1969+ }
19541970 Target :: Struct | Target :: Union | Target :: Enum => {
19551971 self . dcx ( ) . emit_err ( errors:: AlignShouldBeReprAlign {
1956- span : repr_span ,
1972+ span : attr_span ,
19571973 item : target. name ( ) ,
19581974 align_bytes : align. bytes ( ) ,
19591975 } ) ;
19601976 }
19611977 _ => {
1962- self . dcx ( ) . emit_err ( errors:: AlignAttrApplication { hint_span : repr_span , span } ) ;
1978+ self . dcx ( ) . emit_err ( errors:: AlignAttrApplication { hint_span : attr_span , span } ) ;
19631979 }
19641980 }
19651981
1966- self . check_align_value ( align, repr_span ) ;
1982+ self . check_align_value ( align, attr_span ) ;
19671983 }
19681984
19691985 /// Checks if the `#[repr]` attributes on `item` are valid.
0 commit comments