@@ -4160,13 +4160,18 @@ namespace {
4160
4160
ConstantStructBuilder &B)
4161
4161
: super(IGM, theStruct, B) {}
4162
4162
4163
+ Size getExtraDataSize (StructMetadataLayout &layout) {
4164
+ auto extraSize = layout.getSize ().getOffsetToEnd () -
4165
+ IGM.getOffsetOfStructTypeSpecificMetadataMembers ();
4166
+ return extraSize;
4167
+ }
4168
+
4163
4169
llvm::Value *emitAllocateMetadata (IRGenFunction &IGF,
4164
4170
llvm::Value *descriptor,
4165
4171
llvm::Value *arguments,
4166
4172
llvm::Value *templatePointer) {
4167
4173
auto &layout = IGM.getMetadataLayout (Target);
4168
- auto extraSize = layout.getSize ().getOffsetToEnd ()
4169
- - IGM.getOffsetOfStructTypeSpecificMetadataMembers ();
4174
+ auto extraSize = getExtraDataSize (layout);
4170
4175
auto extraSizeV = IGM.getSize (extraSize);
4171
4176
4172
4177
// Sign the descriptor.
@@ -4279,10 +4284,9 @@ namespace {
4279
4284
Offset zeroingEnd = offsetUpToTrailingFlags
4280
4285
? layout.getTrailingFlagsOffset ()
4281
4286
: layout.getFieldOffsetVectorOffset ();
4282
- return { global,
4283
- zeroingEnd.getStatic ()
4284
- - zeroingStart,
4285
- structSize };
4287
+ auto offset = zeroingEnd.getStatic () - zeroingStart;
4288
+ assert ((offset + structSize) == getExtraDataSize (layout));
4289
+ return {global, offset, structSize};
4286
4290
}
4287
4291
4288
4292
bool hasCompletionFunction () {
@@ -4558,13 +4562,18 @@ namespace {
4558
4562
ConstantStructBuilder &B)
4559
4563
: super(IGM, theEnum, B) {}
4560
4564
4565
+ Size getExtraDataSize (EnumMetadataLayout &layout) {
4566
+ auto size = layout.getSize ().getOffsetToEnd () -
4567
+ IGM.getOffsetOfEnumTypeSpecificMetadataMembers ();
4568
+ return size;
4569
+ }
4570
+
4561
4571
llvm::Value *emitAllocateMetadata (IRGenFunction &IGF,
4562
4572
llvm::Value *descriptor,
4563
4573
llvm::Value *arguments,
4564
4574
llvm::Value *templatePointer) {
4565
4575
auto &layout = IGM.getMetadataLayout (Target);
4566
- auto extraSize = layout.getSize ().getOffsetToEnd ()
4567
- - IGM.getOffsetOfEnumTypeSpecificMetadataMembers ();
4576
+ auto extraSize = getExtraDataSize (layout);
4568
4577
auto extraSizeV = IGM.getSize (extraSize);
4569
4578
4570
4579
// Sign the descriptor.
@@ -4625,10 +4634,9 @@ namespace {
4625
4634
Offset zeroingEnd = offsetUpToTrailingFlags
4626
4635
? layout.getTrailingFlagsOffset ()
4627
4636
: layout.getPayloadSizeOffset ();
4628
- return { global,
4629
- zeroingEnd.getStatic ()
4630
- - zeroingStart,
4631
- structSize };
4637
+ auto offset = zeroingEnd.getStatic () - zeroingStart;
4638
+ assert ((offset + structSize) == getExtraDataSize (layout));
4639
+ return {global, offset, structSize};
4632
4640
}
4633
4641
4634
4642
llvm::Constant *emitNominalTypeDescriptor () {
0 commit comments