@@ -3455,17 +3455,17 @@ static void initObjCClass(ClassMetadata *self,
34553455 for (unsigned i = 0 ; i != numFields; ++i) {
34563456 auto *eltLayout = fieldTypes[i];
34573457
3458- ClassIvarEntry & ivar = ivars->getIvars ()[i];
3458+ ClassIvarEntry * ivar = & ivars->getIvars ()[i];
34593459
34603460 // 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];
34643464 }
34653465
34663466 // If the ivar's size doesn't match the field layout we
34673467 // computed, overwrite it and give it better type information.
3468- if (ivar. Size != eltLayout->size ) {
3468+ if (ivar-> Size != eltLayout->size ) {
34693469 // If we're going to modify the ivar list, we need to copy it first.
34703470 if (!copiedIvarList) {
34713471 auto ivarListSize = sizeof (ClassIvarList) +
@@ -3475,10 +3475,13 @@ static void initObjCClass(ClassMetadata *self,
34753475 memcpy (ivars, rodata->IvarList , ivarListSize);
34763476 rodata->IvarList = ivars;
34773477 copiedIvarList = true ;
3478+
3479+ // Update ivar to point to the newly copied list.
3480+ ivar = &ivars->getIvars ()[i];
34783481 }
3479- ivar. Size = eltLayout->size ;
3480- ivar. Type = nullptr ;
3481- ivar. Log2Alignment =
3482+ ivar-> Size = eltLayout->size ;
3483+ ivar-> Type = nullptr ;
3484+ ivar-> Log2Alignment =
34823485 getLog2AlignmentFromMask (eltLayout->flags .getAlignmentMask ());
34833486 }
34843487 }
0 commit comments