Skip to content

Commit 0fa7440

Browse files
committed
IRGen/Runtime: Remove old class metadata relocation mechanism
1 parent 1b24d23 commit 0fa7440

File tree

10 files changed

+50
-116
lines changed

10 files changed

+50
-116
lines changed

include/swift/Runtime/Metadata.h

Lines changed: 4 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2869,16 +2869,11 @@ void swift_initStructMetadata_UniversalStrategy(size_t numFields,
28692869

28702870
/// Initialize the field offset vector for a dependent-layout class, using the
28712871
/// "Universal" layout strategy.
2872-
///
2873-
/// This will relocate the metadata if it doesn't have enough space
2874-
/// for its superclass. Note that swift_allocateGenericClassMetadata will
2875-
/// never produce a metadata that requires relocation.
28762872
SWIFT_RUNTIME_EXPORT
2877-
ClassMetadata *
2878-
swift_initClassMetadata_UniversalStrategy(ClassMetadata *self,
2879-
size_t numFields,
2880-
const TypeLayout * const *fieldTypes,
2881-
size_t *fieldOffsets);
2873+
void swift_initClassMetadata_UniversalStrategy(ClassMetadata *self,
2874+
size_t numFields,
2875+
const TypeLayout * const *fieldTypes,
2876+
size_t *fieldOffsets);
28822877

28832878
/// \brief Fetch a uniqued metadata for a metatype type.
28842879
SWIFT_RUNTIME_EXPORT

include/swift/Runtime/RuntimeFunctions.def

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -946,13 +946,13 @@ FUNCTION(GetExistentialMetadata,
946946
ATTRS(NoUnwind, ReadOnly))
947947

948948
// struct FieldInfo { size_t Size; size_t AlignMask; };
949-
// Metadata *swift_initClassMetadata_UniversalStrategy(Metadata *self,
950-
// size_t numFields,
951-
// TypeLayout * const *fieldTypes,
952-
// size_t *fieldOffsets);
949+
// void swift_initClassMetadata_UniversalStrategy(Metadata *self,
950+
// size_t numFields,
951+
// TypeLayout * const *fieldTypes,
952+
// size_t *fieldOffsets);
953953
FUNCTION(InitClassMetadataUniversal,
954954
swift_initClassMetadata_UniversalStrategy, DefaultCC,
955-
RETURNS(TypeMetadataPtrTy),
955+
RETURNS(VoidTy),
956956
ARGS(TypeMetadataPtrTy, SizeTy,
957957
Int8PtrPtrTy->getPointerTo(),
958958
SizeTy->getPointerTo()),

lib/IRGen/GenMeta.cpp

Lines changed: 12 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -3021,11 +3021,10 @@ namespace {
30213021
};
30223022
} // end anonymous namespace
30233023

3024-
llvm::Value *
3025-
irgen::emitInitializeFieldOffsetVector(IRGenFunction &IGF,
3026-
SILType T,
3027-
llvm::Value *metadata,
3028-
llvm::Value *vwtable) {
3024+
void irgen::emitInitializeFieldOffsetVector(IRGenFunction &IGF,
3025+
SILType T,
3026+
llvm::Value *metadata,
3027+
llvm::Value *vwtable) {
30293028
auto *target = T.getNominalOrBoundGenericNominal();
30303029
llvm::Value *fieldVector
30313030
= emitAddressOfFieldOffsetVector(IGF, metadata, target)
@@ -3062,9 +3061,9 @@ irgen::emitInitializeFieldOffsetVector(IRGenFunction &IGF,
30623061

30633062
if (isa<ClassDecl>(target)) {
30643063
assert(vwtable == nullptr);
3065-
metadata = IGF.Builder.CreateCall(IGF.IGM.getInitClassMetadataUniversalFn(),
3066-
{metadata, numFields,
3067-
fields.getAddress(), fieldVector});
3064+
IGF.Builder.CreateCall(IGF.IGM.getInitClassMetadataUniversalFn(),
3065+
{metadata, numFields,
3066+
fields.getAddress(), fieldVector});
30683067
} else {
30693068
assert(isa<StructDecl>(target));
30703069
IGF.Builder.CreateCall(IGF.IGM.getInitStructMetadataUniversalFn(),
@@ -3074,8 +3073,6 @@ irgen::emitInitializeFieldOffsetVector(IRGenFunction &IGF,
30743073

30753074
IGF.Builder.CreateLifetimeEnd(fields,
30763075
IGF.IGM.getPointerSize() * storedProperties.size());
3077-
3078-
return metadata;
30793076
}
30803077

30813078
// Classes
@@ -3489,11 +3486,9 @@ namespace {
34893486
}
34903487

34913488
llvm::Value *emitFinishInitializationOfClassMetadata(IRGenFunction &IGF,
3492-
llvm::Value *metadata) {
3489+
llvm::Value *metadata) {
34933490
// We assume that we've already filled in the class's generic arguments.
34943491
// We need to:
3495-
// - relocate the metadata to accommodate the superclass,
3496-
// if something in our hierarchy is resilient to us;
34973492
// - fill out the subclass's field offset vector, if its layout
34983493
// wasn't fixed;
34993494
// - copy field offsets and generic arguments from higher in the
@@ -3508,9 +3503,9 @@ namespace {
35083503
if (doesClassMetadataRequireDynamicInitialization(IGF.IGM, Target)) {
35093504
auto classTy = Target->getDeclaredTypeInContext()->getCanonicalType();
35103505
auto loweredClassTy = IGF.IGM.getLoweredType(classTy);
3511-
metadata = emitInitializeFieldOffsetVector(IGF, loweredClassTy,
3512-
metadata,
3513-
/*vwtable=*/nullptr);
3506+
emitInitializeFieldOffsetVector(IGF, loweredClassTy,
3507+
metadata,
3508+
/*vwtable=*/nullptr);
35143509

35153510
// Realizing the class with the ObjC runtime will copy back to the
35163511
// field offset globals for us; but if ObjC interop is disabled, we
@@ -3742,9 +3737,7 @@ namespace {
37423737
IGF.Builder.CreateStore(superclassMetadata, superField);
37433738
}
37443739

3745-
metadata = emitFinishInitializationOfClassMetadata(IGF, metadata);
3746-
3747-
return metadata;
3740+
return emitFinishInitializationOfClassMetadata(IGF, metadata);
37483741
}
37493742
};
37503743

lib/IRGen/GenMeta.h

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -255,10 +255,10 @@ namespace irgen {
255255

256256
/// \brief Initialize the field offset vector within the given class or struct
257257
/// metadata.
258-
llvm::Value *emitInitializeFieldOffsetVector(IRGenFunction &IGF,
259-
SILType T,
260-
llvm::Value *metadata,
261-
llvm::Value *vwtable);
258+
void emitInitializeFieldOffsetVector(IRGenFunction &IGF,
259+
SILType T,
260+
llvm::Value *metadata,
261+
llvm::Value *vwtable);
262262

263263
/// Adjustment indices for the address points of various metadata.
264264
/// Size is in words.

stdlib/public/runtime/Metadata.cpp

Lines changed: 5 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -1381,11 +1381,7 @@ static void _swift_initGenericClassObjCName(ClassMetadata *theClass) {
13811381

13821382
/// Initialize the invariant superclass components of a class metadata,
13831383
/// such as the generic type arguments, field offsets, and so on.
1384-
///
1385-
/// This may also relocate the metadata object if it wasn't allocated
1386-
/// with enough space.
1387-
static ClassMetadata *_swift_initializeSuperclass(ClassMetadata *theClass,
1388-
bool copyFieldOffsetVectors) {
1384+
static void _swift_initializeSuperclass(ClassMetadata *theClass) {
13891385
#if SWIFT_OBJC_INTEROP
13901386
// If the class is generic, we need to give it a name for Objective-C.
13911387
if (theClass->getDescription()->GenericParams.isGeneric())
@@ -1394,44 +1390,6 @@ static ClassMetadata *_swift_initializeSuperclass(ClassMetadata *theClass,
13941390

13951391
const ClassMetadata *theSuperclass = theClass->SuperClass;
13961392

1397-
// Relocate the metadata if necessary.
1398-
//
1399-
// For now, we assume that relocation is only required when the parent
1400-
// class has prefix matter we didn't know about. This isn't consistent
1401-
// with general class resilience, however.
1402-
//
1403-
// FIXME: This part isn't used right now.
1404-
if (theSuperclass && theSuperclass->isTypeMetadata()) {
1405-
auto superAP = theSuperclass->getClassAddressPoint();
1406-
auto oldClassAP = theClass->getClassAddressPoint();
1407-
if (superAP > oldClassAP) {
1408-
size_t extraPrefixSize = superAP - oldClassAP;
1409-
size_t oldClassSize = theClass->getClassSize();
1410-
1411-
// Allocate a new metadata object.
1412-
auto rawNewClass = (char*) malloc(extraPrefixSize + oldClassSize);
1413-
auto rawOldClass = (const char*) theClass;
1414-
auto rawSuperclass = (const char*) theSuperclass;
1415-
1416-
// Copy the extra prefix from the superclass.
1417-
memcpy((void**) (rawNewClass),
1418-
(void* const *) (rawSuperclass - superAP),
1419-
extraPrefixSize);
1420-
// Copy the rest of the data from the derived class.
1421-
memcpy((void**) (rawNewClass + extraPrefixSize),
1422-
(void* const *) (rawOldClass - oldClassAP),
1423-
oldClassSize);
1424-
1425-
// Update the class extents on the new metadata object.
1426-
theClass = reinterpret_cast<ClassMetadata*>(rawNewClass + oldClassAP);
1427-
theClass->setClassAddressPoint(superAP);
1428-
theClass->setClassSize(extraPrefixSize + oldClassSize);
1429-
1430-
// The previous metadata should be global data, so we have no real
1431-
// choice but to drop it on the floor.
1432-
}
1433-
}
1434-
14351393
// Copy the class's immediate methods from the nominal type descriptor
14361394
// to the class metadata.
14371395
{
@@ -1449,7 +1407,7 @@ static ClassMetadata *_swift_initializeSuperclass(ClassMetadata *theClass,
14491407
}
14501408

14511409
if (theSuperclass == nullptr)
1452-
return theClass;
1410+
return;
14531411

14541412
// If any ancestor classes have generic parameters, field offset vectors
14551413
// or virtual methods, inherit them.
@@ -1480,8 +1438,7 @@ static ClassMetadata *_swift_initializeSuperclass(ClassMetadata *theClass,
14801438
}
14811439

14821440
// Copy the field offsets.
1483-
if (copyFieldOffsetVectors &&
1484-
description->Class.hasFieldOffsetVector()) {
1441+
if (description->Class.hasFieldOffsetVector()) {
14851442
unsigned fieldOffsetVector = description->Class.FieldOffsetVectorOffset;
14861443
memcpy(classWords + fieldOffsetVector,
14871444
superWords + fieldOffsetVector,
@@ -1498,8 +1455,6 @@ static ClassMetadata *_swift_initializeSuperclass(ClassMetadata *theClass,
14981455
= (const ClassMetadata *)object_getClass(id_const_cast(theSuperclass));
14991456
theMetaclass->SuperClass = theSuperMetaclass;
15001457
#endif
1501-
1502-
return theClass;
15031458
}
15041459

15051460
#if SWIFT_OBJC_INTEROP
@@ -1512,12 +1467,12 @@ static MetadataAllocator &getResilientMetadataAllocator() {
15121467

15131468
/// Initialize the field offset vector for a dependent-layout class, using the
15141469
/// "Universal" layout strategy.
1515-
ClassMetadata *
1470+
void
15161471
swift::swift_initClassMetadata_UniversalStrategy(ClassMetadata *self,
15171472
size_t numFields,
15181473
const TypeLayout * const *fieldTypes,
15191474
size_t *fieldOffsets) {
1520-
self = _swift_initializeSuperclass(self, /*copyFieldOffsetVectors=*/true);
1475+
_swift_initializeSuperclass(self);
15211476

15221477
// Start layout by appending to a standard heap object header.
15231478
size_t size, alignMask;
@@ -1689,8 +1644,6 @@ swift::swift_initClassMetadata_UniversalStrategy(ClassMetadata *self,
16891644
}
16901645
}
16911646
#endif
1692-
1693-
return self;
16941647
}
16951648

16961649
/***************************************************************************/

test/IRGen/class_resilience.swift

Lines changed: 8 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -242,32 +242,28 @@ public class MyResilientChild : MyResilientParent {
242242

243243
// CHECK-LABEL: define{{( protected)?}} private void @initialize_metadata_ClassWithResilientProperty
244244
// CHECK: [[SIZE_METADATA:%.*]] = call %swift.type* @_T016resilient_struct4SizeVMa()
245-
// CHECK: [[METADATA:%.*]] = call %swift.type* @swift_initClassMetadata_UniversalStrategy(
246-
// CHECK-native: [[METADATA_PTR:%.*]] = bitcast %swift.type* [[METADATA]] to [[INT]]*
247-
// CHECK-native-NEXT: [[FIELD_OFFSET_PTR:%.*]] = getelementptr inbounds [[INT]], [[INT]]* [[METADATA_PTR]], [[INT]] {{12|15}}
245+
// CHECK: call void @swift_initClassMetadata_UniversalStrategy(
246+
// CHECK-native: [[FIELD_OFFSET_PTR:%.*]] = getelementptr inbounds [[INT]], [[INT]]* {{.*}}, [[INT]] {{12|15}}
248247
// CHECK-native-NEXT: [[FIELD_OFFSET:%.*]] = load [[INT]], [[INT]]* [[FIELD_OFFSET_PTR]]
249248
// CHECK-native-NEXT: store [[INT]] [[FIELD_OFFSET]], [[INT]]* @_T016class_resilience26ClassWithResilientPropertyC1s16resilient_struct4SizeVvWvd
250-
// CHECK-native-NEXT: [[METADATA_PTR:%.*]] = bitcast %swift.type* [[METADATA]] to [[INT]]*
251-
// CHECK-native-NEXT: [[FIELD_OFFSET_PTR:%.*]] = getelementptr inbounds [[INT]], [[INT]]* [[METADATA_PTR]], [[INT]] {{13|16}}
249+
// CHECK-native-NEXT: [[FIELD_OFFSET_PTR:%.*]] = getelementptr inbounds [[INT]], [[INT]]* {{.*}}, [[INT]] {{13|16}}
252250
// CHECK-native-NEXT: [[FIELD_OFFSET:%.*]] = load [[INT]], [[INT]]* [[FIELD_OFFSET_PTR]]
253251
// CHECK-native-NEXT: store [[INT]] [[FIELD_OFFSET]], [[INT]]* @_T016class_resilience26ClassWithResilientPropertyC5colors5Int32VvWvd
254-
// CHECK: store atomic %swift.type* [[METADATA]], %swift.type** @_T016class_resilience26ClassWithResilientPropertyCML release,
252+
// CHECK: store atomic %swift.type* {{.*}}, %swift.type** @_T016class_resilience26ClassWithResilientPropertyCML release,
255253
// CHECK: ret void
256254

257255

258256
// ClassWithResilientlySizedProperty metadata initialization function
259257

260258
// CHECK-LABEL: define{{( protected)?}} private void @initialize_metadata_ClassWithResilientlySizedProperty
261259
// CHECK: [[RECTANGLE_METADATA:%.*]] = call %swift.type* @_T016resilient_struct9RectangleVMa()
262-
// CHECK: [[METADATA:%.*]] = call %swift.type* @swift_initClassMetadata_UniversalStrategy(
263-
// CHECK-native: [[METADATA_PTR:%.*]] = bitcast %swift.type* [[METADATA]] to [[INT]]*
264-
// CHECK-native-NEXT: [[FIELD_OFFSET_PTR:%.*]] = getelementptr inbounds [[INT]], [[INT]]* [[METADATA_PTR]], [[INT]] {{11|14}}
260+
// CHECK: call void @swift_initClassMetadata_UniversalStrategy(
261+
// CHECK-native-NEXT: [[FIELD_OFFSET_PTR:%.*]] = getelementptr inbounds [[INT]], [[INT]]* {{.*}}, [[INT]] {{11|14}}
265262
// CHECK-native-NEXT: [[FIELD_OFFSET:%.*]] = load [[INT]], [[INT]]* [[FIELD_OFFSET_PTR]]
266263
// CHECK-native-NEXT: store [[INT]] [[FIELD_OFFSET]], [[INT]]* @_T016class_resilience33ClassWithResilientlySizedPropertyC1r16resilient_struct9RectangleVvWvd
267-
// CHECK-native-NEXT: [[METADATA_PTR:%.*]] = bitcast %swift.type* [[METADATA]] to [[INT]]*
268-
// CHECK-native-NEXT: [[FIELD_OFFSET_PTR:%.*]] = getelementptr inbounds [[INT]], [[INT]]* [[METADATA_PTR]], [[INT]] {{12|15}}
264+
// CHECK-native-NEXT: [[FIELD_OFFSET_PTR:%.*]] = getelementptr inbounds [[INT]], [[INT]]* {{.*}}, [[INT]] {{12|15}}
269265
// CHECK-native-NEXT: [[FIELD_OFFSET:%.*]] = load [[INT]], [[INT]]* [[FIELD_OFFSET_PTR]]
270266
// CHECK-native-NEXT: store [[INT]] [[FIELD_OFFSET]], [[INT]]* @_T016class_resilience33ClassWithResilientlySizedPropertyC5colors5Int32VvWvd
271-
// CHECK: store atomic %swift.type* [[METADATA]], %swift.type** @_T016class_resilience33ClassWithResilientlySizedPropertyCML release,
267+
// CHECK: store atomic %swift.type* {{.*}}, %swift.type** @_T016class_resilience33ClassWithResilientlySizedPropertyCML release,
272268
// CHECK: ret void
273269

test/IRGen/concrete_inherits_generic_base.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,6 @@ presentBase(Base(x: 2))
7474
// CHECK-LABEL: define{{( protected)?}} private void @initialize_metadata_SuperDerived(i8*)
7575
// CHECK: [[TMP:%.*]] = call %swift.type* @_T03foo7DerivedCMa()
7676
// CHECK-NEXT: store %swift.type* [[TMP]], %swift.type** getelementptr inbounds ({{.*}} @_T03foo12SuperDerivedCMf{{.*}}, i32 1), align
77-
// CHECK: [[METADATA:%.*]] = call %swift.type* @swift_initClassMetadata_UniversalStrategy(
78-
// CHECK: store atomic %swift.type* [[METADATA]], %swift.type** @_T03foo12SuperDerivedCML release,
77+
// CHECK: call void @swift_initClassMetadata_UniversalStrategy(
78+
// CHECK: store atomic %swift.type* {{.*}}, %swift.type** @_T03foo12SuperDerivedCML release,
7979
// CHECK: ret void

test/IRGen/generic_classes.sil

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -312,11 +312,11 @@ entry(%c : $RootGeneric<Int32>):
312312

313313
// CHECK: define{{( protected)?}} private %swift.type* @create_generic_metadata_RootGeneric(%swift.type_pattern*, i8**) {{.*}} {
314314
// -- initialize the dependent field offsets
315-
// CHECK: call %swift.type* @swift_initClassMetadata_UniversalStrategy(%swift.type* {{%.*}}, i64 3, i8*** {{%.*}}, i64* {{%.*}})
315+
// CHECK: call void @swift_initClassMetadata_UniversalStrategy(%swift.type* {{%.*}}, i64 3, i8*** {{%.*}}, i64* {{%.*}})
316316
// CHECK: }
317317

318318
// CHECK: define{{( protected)?}} private %swift.type* @create_generic_metadata_RootGenericFixedLayout(%swift.type_pattern*, i8**) {{.*}} {
319-
// CHECK: call %swift.type* @swift_initClassMetadata_UniversalStrategy(%swift.type* {{%.*}}, i64 3, i8*** {{%.*}}, i64* {{%.*}})
319+
// CHECK: call void @swift_initClassMetadata_UniversalStrategy(%swift.type* {{%.*}}, i64 3, i8*** {{%.*}}, i64* {{%.*}})
320320
// CHECK: }
321321

322322
// CHECK: define{{( protected)?}} private %swift.type* @create_generic_metadata_GenericInheritsGeneric(%swift.type_pattern*, i8**) {{.*}} {
@@ -367,7 +367,7 @@ entry(%c : $RootGeneric<Int32>):
367367
// CHECK: [[T0:%.*]] = getelementptr inbounds i8*, i8** [[VWT]], i32 9
368368
// CHECK: [[T1:%.*]] = getelementptr inbounds i8**, i8*** [[FIELDS_ADDR]], i32 0
369369
// CHECK: store i8** [[T0]], i8*** [[T1]], align 8
370-
// CHECK: call %swift.type* @swift_initClassMetadata_UniversalStrategy(%swift.type* [[METADATA]], i64 1, i8*** [[FIELDS_ADDR]], i64* [[OFFSETS]])
370+
// CHECK: call void @swift_initClassMetadata_UniversalStrategy(%swift.type* [[METADATA]], i64 1, i8*** [[FIELDS_ADDR]], i64* [[OFFSETS]])
371371
// CHECK: ret %swift.type* [[METADATA]]
372372
// CHECK: }
373373

test/IRGen/generic_vtable.swift

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -122,9 +122,9 @@ public class Concrete : Derived<Int> {
122122

123123
// CHECK-LABEL: define private %swift.type* @create_generic_metadata_Derived(%swift.type_pattern*, i8**)
124124
// CHECK: [[METADATA:%.*]] = call %swift.type* @swift_allocateGenericClassMetadata({{.*}})
125-
// CHECK: [[METADATA2:%.*]] = call %swift.type* @swift_initClassMetadata_UniversalStrategy({{.*}})
125+
// CHECK: call void @swift_initClassMetadata_UniversalStrategy({{.*}})
126126
// -- method override for 'm2()'
127-
// CHECK: [[WORDS:%.*]] = bitcast %swift.type* [[METADATA2]] to i8**
127+
// CHECK: [[WORDS:%.*]] = bitcast %swift.type* [[METADATA]] to i8**
128128
// CHECK: [[VTABLE0:%.*]] = getelementptr inbounds i8*, i8** [[WORDS]], i32 11
129129
// CHECK: store i8* bitcast (void (%T14generic_vtable7DerivedC*)* @_T014generic_vtable7DerivedC2m2yyF to i8*), i8** [[VTABLE0]], align 8
130130
// -- method override for 'init()'
@@ -139,12 +139,9 @@ public class Concrete : Derived<Int> {
139139
// CHECK-LABEL: define private void @initialize_metadata_Concrete(i8*)
140140
// CHECK: [[SUPERCLASS:%.*]] = call %swift.type* @_T014generic_vtable7DerivedCySiGMa()
141141
// CHECK: store %swift.type* [[SUPERCLASS]], %swift.type** getelementptr inbounds {{.*}} @_T014generic_vtable8ConcreteCMf
142-
// CHECK: [[METADATA:%.*]] = call %swift.type* @swift_initClassMetadata_UniversalStrategy({{.*}})
143-
// CHECK: [[WORDS:%.*]] = bitcast %swift.type* [[METADATA]] to i8**
142+
// CHECK: call void @swift_initClassMetadata_UniversalStrategy({{.*}})
144143
// -- method override for 'init()'
145-
// CHECK: [[VTABLE0:%.*]] = getelementptr inbounds i8*, i8** [[WORDS]], i32 12
146-
// CHECK: store i8* bitcast (%T14generic_vtable8ConcreteC* (%T14generic_vtable8ConcreteC*)* @_T014generic_vtable8ConcreteCACycfc to i8*), i8** [[VTABLE0]], align 8
144+
// CHECK: store i8* bitcast (%T14generic_vtable8ConcreteC* (%T14generic_vtable8ConcreteC*)* @_T014generic_vtable8ConcreteCACycfc to i8*), i8**
147145
// -- method override for 'm3()'
148-
// CHECK: [[VTABLE1:%.*]] = getelementptr inbounds i8*, i8** [[WORDS]], i32 14
149-
// CHECK: store i8* bitcast (void (%T14generic_vtable8ConcreteC*)* @_T014generic_vtable8ConcreteC2m3yyF to i8*), i8** [[VTABLE1]], align 8
146+
// CHECK: store i8* bitcast (void (%T14generic_vtable8ConcreteC*)* @_T014generic_vtable8ConcreteC2m3yyF to i8*), i8**
150147
// CHECK: ret void

test/IRGen/mixed_mode_class_with_unimportable_fields.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -68,8 +68,8 @@ public func invokeMethod(on holder: SubButtHolder) {
6868
}
6969

7070
// CHECK-V3-LABEL: define private void @initialize_metadata_SubButtHolder
71-
// CHECK-V3: call %swift.type* @swift_initClassMetadata_UniversalStrategy
71+
// CHECK-V3: call void @swift_initClassMetadata_UniversalStrategy
7272

7373
// CHECK-V3-LABEL: define private void @initialize_metadata_SubSubButtHolder
74-
// CHECK-V3: call %swift.type* @swift_initClassMetadata_UniversalStrategy
74+
// CHECK-V3: call void @swift_initClassMetadata_UniversalStrategy
7575

0 commit comments

Comments
 (0)