Skip to content

Commit 7720a62

Browse files
committed
Modify to catch issue
1 parent e19f40a commit 7720a62

File tree

1 file changed

+14
-1
lines changed

1 file changed

+14
-1
lines changed

lib/IRGen/GenStruct.cpp

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -417,7 +417,20 @@ namespace {
417417
IGF.IGM.getMetadataLayout(TheStruct.getStructOrBoundGenericStruct());
418418
auto offset =
419419
structLayout.getFieldOffsetVectorOffset().offsetBy(IGF, Size(index));
420-
return offset.getAsValue(IGF);
420+
421+
llvm::Value *metadata = IGF.emitTypeMetadataRefForLayout(TheStruct);
422+
Address fieldVector = emitAddressOfFieldOffsetVector(IGF, metadata,
423+
TheStruct.getStructOrBoundGenericStruct());
424+
fieldVector = IGF.Builder.CreateConstArrayGEP(fieldVector, index,
425+
IGF.IGM.getPointerSize());
426+
auto oldRet = IGF.Builder.CreateLoad(fieldVector);
427+
auto newRet = offset.getAsValue(IGF);
428+
429+
auto assertEq = IGF.IGM.Module.getFunction("__swift_assert_equal");
430+
IGF.Builder.CreateCall(assertEq->getFunctionType(),
431+
assertEq, {oldRet, newRet});
432+
433+
return newRet;
421434
}
422435

423436
MemberAccessStrategy getFieldAccessStrategy(IRGenModule &IGM,

0 commit comments

Comments
 (0)