@@ -1769,7 +1769,7 @@ fn check_transparent<'a, 'tcx>(tcx: TyCtxt<'a, 'tcx, 'tcx>, sp: Span, def_id: De
17691769 }
17701770
17711771 // 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| {
17731773 let ty = field. ty ( tcx, Substs :: identity_for_item ( tcx, field. did ) ) ;
17741774 let param_env = tcx. param_env ( field. did ) ;
17751775 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
17781778 let zst = layout. map ( |layout| layout. is_zst ( ) ) . unwrap_or ( false ) ;
17791779 let align1 = layout. map ( |layout| layout. align . abi ( ) == 1 ) . unwrap_or ( false ) ;
17801780 ( span, zst, align1)
1781- } ) . collect ( ) ;
1781+ } ) ;
17821782
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) ;
17841784 let non_zst_count = non_zst_fields. clone ( ) . count ( ) ;
17851785 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 ( ) ;
17871787 struct_span_err ! ( tcx. sess, sp, E0690 ,
17881788 "transparent struct needs exactly one non-zero-sized field, but has {}" ,
17891789 non_zst_count)
17901790 . span_note ( field_spans, "non-zero-sized field" )
17911791 . emit ( ) ;
17921792 }
1793- for & ( span, zst, align1) in & field_infos {
1793+ for ( span, zst, align1) in field_infos {
17941794 if zst && !align1 {
17951795 span_err ! ( tcx. sess, span, E0691 ,
17961796 "zero-sized field in transparent struct has alignment larger than 1" ) ;
0 commit comments