@@ -3455,17 +3455,17 @@ static void initObjCClass(ClassMetadata *self,
3455
3455
for (unsigned i = 0 ; i != numFields; ++i) {
3456
3456
auto *eltLayout = fieldTypes[i];
3457
3457
3458
- ClassIvarEntry & ivar = ivars->getIvars ()[i];
3458
+ ClassIvarEntry * ivar = & ivars->getIvars ()[i];
3459
3459
3460
3460
// Fill in the field offset global, if this ivar has one.
3461
- if (ivar. Offset ) {
3462
- if (*ivar. Offset != fieldOffsets[i])
3463
- *ivar. Offset = fieldOffsets[i];
3461
+ if (ivar-> Offset ) {
3462
+ if (*ivar-> Offset != fieldOffsets[i])
3463
+ *ivar-> Offset = fieldOffsets[i];
3464
3464
}
3465
3465
3466
3466
// If the ivar's size doesn't match the field layout we
3467
3467
// computed, overwrite it and give it better type information.
3468
- if (ivar. Size != eltLayout->size ) {
3468
+ if (ivar-> Size != eltLayout->size ) {
3469
3469
// If we're going to modify the ivar list, we need to copy it first.
3470
3470
if (!copiedIvarList) {
3471
3471
auto ivarListSize = sizeof (ClassIvarList) +
@@ -3475,10 +3475,13 @@ static void initObjCClass(ClassMetadata *self,
3475
3475
memcpy (ivars, rodata->IvarList , ivarListSize);
3476
3476
rodata->IvarList = ivars;
3477
3477
copiedIvarList = true ;
3478
+
3479
+ // Update ivar to point to the newly copied list.
3480
+ ivar = &ivars->getIvars ()[i];
3478
3481
}
3479
- ivar. Size = eltLayout->size ;
3480
- ivar. Type = nullptr ;
3481
- ivar. Log2Alignment =
3482
+ ivar-> Size = eltLayout->size ;
3483
+ ivar-> Type = nullptr ;
3484
+ ivar-> Log2Alignment =
3482
3485
getLog2AlignmentFromMask (eltLayout->flags .getAlignmentMask ());
3483
3486
}
3484
3487
}
0 commit comments