@@ -3157,7 +3157,7 @@ emitInitializeFieldOffsetVector(SILType T, llvm::Value *metadata,
3157
3157
}
3158
3158
3159
3159
// Collect the stored properties of the type.
3160
- unsigned numFields = getNumFields ( target);
3160
+ unsigned numFields = countExportableFields (IGM, target);
3161
3161
3162
3162
// Fill out an array with the field type metadata records.
3163
3163
Address fields = createAlloca (
@@ -3170,6 +3170,9 @@ emitInitializeFieldOffsetVector(SILType T, llvm::Value *metadata,
3170
3170
forEachField (IGM, target, [&](Field field) {
3171
3171
assert (field.isConcrete () &&
3172
3172
" initializing offset vector for type with missing member?" );
3173
+ if (!isExportableField (field))
3174
+ return ;
3175
+
3173
3176
SILType propTy = field.getType (IGM, T);
3174
3177
llvm::Value *fieldLayout = emitTypeLayoutRef (*this , propTy, collector);
3175
3178
Address fieldLayoutAddr =
@@ -3277,7 +3280,7 @@ static void emitInitializeFieldOffsetVectorWithLayoutString(
3277
3280
emitAddressOfFieldOffsetVector (IGF, metadata, target).getAddress ();
3278
3281
3279
3282
// Collect the stored properties of the type.
3280
- unsigned numFields = getNumFields ( target);
3283
+ unsigned numFields = countExportableFields (IGM, target);
3281
3284
3282
3285
// Ask the runtime to lay out the struct or class.
3283
3286
auto numFieldsV = IGM.getSize (Size (numFields));
@@ -3300,6 +3303,9 @@ static void emitInitializeFieldOffsetVectorWithLayoutString(
3300
3303
forEachField (IGM, target, [&](Field field) {
3301
3304
assert (field.isConcrete () &&
3302
3305
" initializing offset vector for type with missing member?" );
3306
+ if (!isExportableField (field))
3307
+ return ;
3308
+
3303
3309
SILType propTy = field.getType (IGM, T);
3304
3310
llvm::Value *fieldMetatype;
3305
3311
llvm::Value *fieldTag;
0 commit comments