@@ -139,8 +139,8 @@ class EmptySubobjectMap {
139139 }
140140
141141 CharUnits
142- getFieldOffset (const ASTRecordLayout &Layout, unsigned FieldNo ) const {
143- uint64_t FieldOffset = Layout.getFieldOffset (FieldNo );
142+ getFieldOffset (const ASTRecordLayout &Layout, const FieldDecl *Field ) const {
143+ uint64_t FieldOffset = Layout.getFieldOffset (Field-> getFieldIndex () );
144144 assert (FieldOffset % CharWidth == 0 &&
145145 " Field offset not at char boundary!" );
146146
@@ -298,14 +298,12 @@ EmptySubobjectMap::CanPlaceBaseSubobjectAtOffset(const BaseSubobjectInfo *Info,
298298 }
299299
300300 // Traverse all member variables.
301- unsigned FieldNo = 0 ;
302- for (CXXRecordDecl::field_iterator I = Info->Class ->field_begin (),
303- E = Info->Class ->field_end (); I != E; ++I, ++FieldNo) {
304- if (I->isBitField ())
301+ for (const FieldDecl *Field : Info->Class ->fields ()) {
302+ if (Field->isBitField ())
305303 continue ;
306304
307- CharUnits FieldOffset = Offset + getFieldOffset (Layout, FieldNo );
308- if (!CanPlaceFieldSubobjectAtOffset (*I , FieldOffset))
305+ CharUnits FieldOffset = Offset + getFieldOffset (Layout, Field );
306+ if (!CanPlaceFieldSubobjectAtOffset (Field , FieldOffset))
309307 return false ;
310308 }
311309
@@ -345,14 +343,12 @@ void EmptySubobjectMap::UpdateEmptyBaseSubobjects(const BaseSubobjectInfo *Info,
345343 }
346344
347345 // Traverse all member variables.
348- unsigned FieldNo = 0 ;
349- for (CXXRecordDecl::field_iterator I = Info->Class ->field_begin (),
350- E = Info->Class ->field_end (); I != E; ++I, ++FieldNo) {
351- if (I->isBitField ())
346+ for (const FieldDecl *Field : Info->Class ->fields ()) {
347+ if (Field->isBitField ())
352348 continue ;
353349
354- CharUnits FieldOffset = Offset + getFieldOffset (Layout, FieldNo );
355- UpdateEmptyFieldSubobjects (*I , FieldOffset, PlacingEmptyBase);
350+ CharUnits FieldOffset = Offset + getFieldOffset (Layout, Field );
351+ UpdateEmptyFieldSubobjects (Field , FieldOffset, PlacingEmptyBase);
356352 }
357353}
358354
@@ -410,15 +406,12 @@ EmptySubobjectMap::CanPlaceFieldSubobjectAtOffset(const CXXRecordDecl *RD,
410406 }
411407
412408 // Traverse all member variables.
413- unsigned FieldNo = 0 ;
414- for (CXXRecordDecl::field_iterator I = RD->field_begin (), E = RD->field_end ();
415- I != E; ++I, ++FieldNo) {
416- if (I->isBitField ())
409+ for (const FieldDecl *Field : RD->fields ()) {
410+ if (Field->isBitField ())
417411 continue ;
418412
419- CharUnits FieldOffset = Offset + getFieldOffset (Layout, FieldNo);
420-
421- if (!CanPlaceFieldSubobjectAtOffset (*I, FieldOffset))
413+ CharUnits FieldOffset = Offset + getFieldOffset (Layout, Field);
414+ if (!CanPlaceFieldSubobjectAtOffset (Field, FieldOffset))
422415 return false ;
423416 }
424417
@@ -521,15 +514,12 @@ void EmptySubobjectMap::UpdateEmptyFieldSubobjects(
521514 }
522515
523516 // Traverse all member variables.
524- unsigned FieldNo = 0 ;
525- for (CXXRecordDecl::field_iterator I = RD->field_begin (), E = RD->field_end ();
526- I != E; ++I, ++FieldNo) {
527- if (I->isBitField ())
517+ for (const FieldDecl *Field : RD->fields ()) {
518+ if (Field->isBitField ())
528519 continue ;
529520
530- CharUnits FieldOffset = Offset + getFieldOffset (Layout, FieldNo);
531-
532- UpdateEmptyFieldSubobjects (*I, FieldOffset, PlacingOverlappingField);
521+ CharUnits FieldOffset = Offset + getFieldOffset (Layout, Field);
522+ UpdateEmptyFieldSubobjects (Field, FieldOffset, PlacingOverlappingField);
533523 }
534524}
535525
@@ -1455,10 +1445,8 @@ void ItaniumRecordLayoutBuilder::LayoutFields(const RecordDecl *D) {
14551445 bool InsertExtraPadding = D->mayInsertExtraPadding (/* EmitRemark=*/ true );
14561446 bool HasFlexibleArrayMember = D->hasFlexibleArrayMember ();
14571447 for (auto I = D->field_begin (), End = D->field_end (); I != End; ++I) {
1458- auto Next (I);
1459- ++Next;
1460- LayoutField (*I,
1461- InsertExtraPadding && (Next != End || !HasFlexibleArrayMember));
1448+ LayoutField (*I, InsertExtraPadding &&
1449+ (std::next (I) != End || !HasFlexibleArrayMember));
14621450 }
14631451}
14641452
@@ -3672,35 +3660,32 @@ static void DumpRecordLayout(raw_ostream &OS, const RecordDecl *RD,
36723660 }
36733661
36743662 // Dump fields.
3675- uint64_t FieldNo = 0 ;
3676- for (RecordDecl::field_iterator I = RD->field_begin (),
3677- E = RD->field_end (); I != E; ++I, ++FieldNo) {
3678- const FieldDecl &Field = **I;
3679- uint64_t LocalFieldOffsetInBits = Layout.getFieldOffset (FieldNo);
3663+ for (const FieldDecl *Field : RD->fields ()) {
3664+ uint64_t LocalFieldOffsetInBits = Layout.getFieldOffset (Field->getFieldIndex ());
36803665 CharUnits FieldOffset =
36813666 Offset + C.toCharUnitsFromBits (LocalFieldOffsetInBits);
36823667
36833668 // Recursively dump fields of record type.
3684- if (auto RT = Field. getType ()->getAs <RecordType>()) {
3669+ if (auto RT = Field-> getType ()->getAs <RecordType>()) {
36853670 DumpRecordLayout (OS, RT->getDecl (), C, FieldOffset, IndentLevel,
3686- Field. getName ().data (),
3671+ Field-> getName ().data (),
36873672 /* PrintSizeInfo=*/ false ,
36883673 /* IncludeVirtualBases=*/ true );
36893674 continue ;
36903675 }
36913676
3692- if (Field. isBitField ()) {
3677+ if (Field-> isBitField ()) {
36933678 uint64_t LocalFieldByteOffsetInBits = C.toBits (FieldOffset - Offset);
36943679 unsigned Begin = LocalFieldOffsetInBits - LocalFieldByteOffsetInBits;
3695- unsigned Width = Field. getBitWidthValue (C);
3680+ unsigned Width = Field-> getBitWidthValue (C);
36963681 PrintBitFieldOffset (OS, FieldOffset, Begin, Width, IndentLevel);
36973682 } else {
36983683 PrintOffset (OS, FieldOffset, IndentLevel);
36993684 }
37003685 const QualType &FieldType = C.getLangOpts ().DumpRecordLayoutsCanonical
3701- ? Field. getType ().getCanonicalType ()
3702- : Field. getType ();
3703- OS << FieldType << ' ' << Field << ' \n ' ;
3686+ ? Field-> getType ().getCanonicalType ()
3687+ : Field-> getType ();
3688+ OS << FieldType << ' ' << * Field << ' \n ' ;
37043689 }
37053690
37063691 // Dump virtual bases.
0 commit comments