@@ -4160,13 +4160,18 @@ namespace {
41604160 ConstantStructBuilder &B)
41614161 : super(IGM, theStruct, B) {}
41624162
4163+ Size getExtraDataSize (StructMetadataLayout &layout) {
4164+ auto extraSize = layout.getSize ().getOffsetToEnd () -
4165+ IGM.getOffsetOfStructTypeSpecificMetadataMembers ();
4166+ return extraSize;
4167+ }
4168+
41634169 llvm::Value *emitAllocateMetadata (IRGenFunction &IGF,
41644170 llvm::Value *descriptor,
41654171 llvm::Value *arguments,
41664172 llvm::Value *templatePointer) {
41674173 auto &layout = IGM.getMetadataLayout (Target);
4168- auto extraSize = layout.getSize ().getOffsetToEnd ()
4169- - IGM.getOffsetOfStructTypeSpecificMetadataMembers ();
4174+ auto extraSize = getExtraDataSize (layout);
41704175 auto extraSizeV = IGM.getSize (extraSize);
41714176
41724177 // Sign the descriptor.
@@ -4279,10 +4284,9 @@ namespace {
42794284 Offset zeroingEnd = offsetUpToTrailingFlags
42804285 ? layout.getTrailingFlagsOffset ()
42814286 : 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};
42864290 }
42874291
42884292 bool hasCompletionFunction () {
@@ -4558,13 +4562,18 @@ namespace {
45584562 ConstantStructBuilder &B)
45594563 : super(IGM, theEnum, B) {}
45604564
4565+ Size getExtraDataSize (EnumMetadataLayout &layout) {
4566+ auto size = layout.getSize ().getOffsetToEnd () -
4567+ IGM.getOffsetOfEnumTypeSpecificMetadataMembers ();
4568+ return size;
4569+ }
4570+
45614571 llvm::Value *emitAllocateMetadata (IRGenFunction &IGF,
45624572 llvm::Value *descriptor,
45634573 llvm::Value *arguments,
45644574 llvm::Value *templatePointer) {
45654575 auto &layout = IGM.getMetadataLayout (Target);
4566- auto extraSize = layout.getSize ().getOffsetToEnd ()
4567- - IGM.getOffsetOfEnumTypeSpecificMetadataMembers ();
4576+ auto extraSize = getExtraDataSize (layout);
45684577 auto extraSizeV = IGM.getSize (extraSize);
45694578
45704579 // Sign the descriptor.
@@ -4625,10 +4634,9 @@ namespace {
46254634 Offset zeroingEnd = offsetUpToTrailingFlags
46264635 ? layout.getTrailingFlagsOffset ()
46274636 : 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};
46324640 }
46334641
46344642 llvm::Constant *emitNominalTypeDescriptor () {
0 commit comments