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