Skip to content

Commit ed97617

Browse files
committed
IRGen: Move generic class dependent data to appear before the address point
1 parent 6cc4c1f commit ed97617

File tree

3 files changed

+8
-8
lines changed

3 files changed

+8
-8
lines changed

lib/IRGen/GenMeta.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2916,6 +2916,8 @@ namespace {
29162916
auto privateDataField =
29172917
B.addPlaceholderWithSize(privateDataInit->getType());
29182918

2919+
asImpl().addDependentData();
2920+
29192921
// Lay out the template data.
29202922
super::layout();
29212923

@@ -2929,8 +2931,6 @@ namespace {
29292931
asImpl().addDependentValueWitnessTablePattern();
29302932
}
29312933

2932-
asImpl().addDependentData();
2933-
29342934
// Fill in the header:
29352935

29362936
// Metadata *(*CreateFunction)(GenericMetadata *, const void*);

test/IRGen/generic_classes.sil

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -341,20 +341,20 @@ entry(%c : $RootGeneric<Int32>):
341341
// CHECK-objc: [[METADATA_ARRAY:%.*]] = bitcast %swift.type* [[METADATA]] to i8**
342342
// CHECK-objc: [[T0:%.*]] = getelementptr inbounds i8*, i8** [[METADATA_ARRAY]], i32 0
343343
// CHECK-objc: [[T1:%.*]] = bitcast i8** [[T0]] to %objc_class**
344-
// CHECK-objc: [[T0:%.*]] = getelementptr inbounds i8*, i8** [[METADATA_ARRAY]], i32 25
344+
// CHECK-objc: [[T0:%.*]] = getelementptr inbounds i8*, i8** [[METADATA_ARRAY]], i32 -25
345345
// CHECK-objc: [[METACLASS:%.*]] = bitcast i8** [[T0]] to %objc_class*
346346
// CHECK-objc: store %objc_class* [[METACLASS]], %objc_class** [[T1]], align 8
347347
// Set up the instance rodata pointer.
348348
// CHECK-objc: [[T0:%.*]] = getelementptr inbounds i8*, i8** [[METADATA_ARRAY]], i32 4
349349
// CHECK-objc: [[T1:%.*]] = bitcast i8** [[T0]] to i64*
350-
// CHECK-objc: [[RODATA:%.*]] = getelementptr inbounds i8*, i8** [[METADATA_ARRAY]], i32 30
350+
// CHECK-objc: [[RODATA:%.*]] = getelementptr inbounds i8*, i8** [[METADATA_ARRAY]], i32 -20
351351
// CHECK-objc: [[T2:%.*]] = ptrtoint i8** [[RODATA]] to i64
352352
// CHECK-objc: [[T3:%.*]] = or i64 [[T2]], 1
353353
// CHECK-objc: store i64 [[T3]], i64* [[T1]], align 8
354354
// Set up the class rodata pointer.
355-
// CHECK-objc: [[T0:%.*]] = getelementptr inbounds i8*, i8** [[METADATA_ARRAY]], i32 29
355+
// CHECK-objc: [[T0:%.*]] = getelementptr inbounds i8*, i8** [[METADATA_ARRAY]], i32 -21
356356
// CHECK-objc: [[T1:%.*]] = bitcast i8** [[T0]] to i64*
357-
// CHECK-objc: [[META_RODATA:%.*]] = getelementptr inbounds i8*, i8** [[METADATA_ARRAY]], i32 39
357+
// CHECK-objc: [[META_RODATA:%.*]] = getelementptr inbounds i8*, i8** [[METADATA_ARRAY]], i32 -11
358358
// CHECK-objc: [[T2:%.*]] = ptrtoint i8** [[META_RODATA]] to i64
359359
// CHECK-objc: store i64 [[T2]], i64* [[T1]], align 8
360360
// Initialize our own dependent field offsets.

test/IRGen/generic_types.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
// CHECK-native-SAME: i32 160,
1414
// CHECK-objc-SAME: i32 344,
1515
// CHECK-SAME: i16 1,
16-
// CHECK-SAME: i16 16,
16+
// CHECK-SAME: i16 200,
1717
// CHECK-SAME: [{{[0-9]+}} x i8*] zeroinitializer,
1818
// CHECK-SAME: void ([[A]]*)* @_T013generic_types1ACfD,
1919
// CHECK-SAME: i8** @_T0BoWV,
@@ -39,7 +39,7 @@
3939
// CHECK-native-SAME: i32 152,
4040
// CHECK-objc-SAME: i32 336,
4141
// CHECK-SAME: i16 1,
42-
// CHECK-SAME: i16 16,
42+
// CHECK-SAME: i16 200,
4343
// CHECK-SAME: [{{[0-9]+}} x i8*] zeroinitializer,
4444
// CHECK-SAME: void ([[B]]*)* @_T013generic_types1BCfD,
4545
// CHECK-SAME: i8** @_T0BoWV,

0 commit comments

Comments
 (0)