@@ -1769,7 +1769,7 @@ fn check_transparent<'a, 'tcx>(tcx: TyCtxt<'a, 'tcx, 'tcx>, sp: Span, def_id: De
1769
1769
}
1770
1770
1771
1771
// For each field, figure out if it's known to be a ZST and align(1)
1772
- let field_infos: Vec < _ > = adt. non_enum_variant ( ) . fields . iter ( ) . map ( |field| {
1772
+ let field_infos = adt. non_enum_variant ( ) . fields . iter ( ) . map ( |field| {
1773
1773
let ty = field. ty ( tcx, Substs :: identity_for_item ( tcx, field. did ) ) ;
1774
1774
let param_env = tcx. param_env ( field. did ) ;
1775
1775
let layout = tcx. layout_of ( param_env. and ( ty) ) ;
@@ -1778,19 +1778,19 @@ fn check_transparent<'a, 'tcx>(tcx: TyCtxt<'a, 'tcx, 'tcx>, sp: Span, def_id: De
1778
1778
let zst = layout. map ( |layout| layout. is_zst ( ) ) . unwrap_or ( false ) ;
1779
1779
let align1 = layout. map ( |layout| layout. align . abi ( ) == 1 ) . unwrap_or ( false ) ;
1780
1780
( span, zst, align1)
1781
- } ) . collect ( ) ;
1781
+ } ) ;
1782
1782
1783
- let non_zst_fields = field_infos. iter ( ) . filter ( |( _span, zst, _align1) | !* zst) ;
1783
+ let non_zst_fields = field_infos. clone ( ) . filter ( |( _span, zst, _align1) | !* zst) ;
1784
1784
let non_zst_count = non_zst_fields. clone ( ) . count ( ) ;
1785
1785
if non_zst_count != 1 {
1786
- let field_spans: Vec < _ > = non_zst_fields. map ( |( span, _zst, _align1) | * span) . collect ( ) ;
1786
+ let field_spans: Vec < _ > = non_zst_fields. map ( |( span, _zst, _align1) | span) . collect ( ) ;
1787
1787
struct_span_err ! ( tcx. sess, sp, E0690 ,
1788
1788
"transparent struct needs exactly one non-zero-sized field, but has {}" ,
1789
1789
non_zst_count)
1790
1790
. span_note ( field_spans, "non-zero-sized field" )
1791
1791
. emit ( ) ;
1792
1792
}
1793
- for & ( span, zst, align1) in & field_infos {
1793
+ for ( span, zst, align1) in field_infos {
1794
1794
if zst && !align1 {
1795
1795
span_err ! ( tcx. sess, span, E0691 ,
1796
1796
"zero-sized field in transparent struct has alignment larger than 1" ) ;
0 commit comments