File tree Expand file tree Collapse file tree 2 files changed +45
-2
lines changed Expand file tree Collapse file tree 2 files changed +45
-2
lines changed Original file line number Diff line number Diff line change @@ -1401,6 +1401,12 @@ namespace {
1401
1401
}
1402
1402
1403
1403
auto dataPtr = emitROData (ForMetaClass, DoesNotHaveUpdateCallback);
1404
+
1405
+ // Record the ro-data globals if this is a pre-specialized class.
1406
+ if (specializedGenericType) {
1407
+ IGM.addGenericROData (dataPtr);
1408
+ }
1409
+
1404
1410
dataPtr = llvm::ConstantExpr::getPtrToInt (dataPtr, IGM.IntPtrTy );
1405
1411
1406
1412
llvm::Constant *fields[] = {
@@ -2684,7 +2690,14 @@ static llvm::Constant *doEmitClassPrivateData(
2684
2690
}
2685
2691
2686
2692
// Then build the class RO-data.
2687
- return builder.emitROData (ForClass, hasUpdater);
2693
+ auto res = builder.emitROData (ForClass, hasUpdater);
2694
+
2695
+ // Record the ro-data globals if this is a pre-specialized class.
2696
+ if (classUnion.isa <std::pair<ClassDecl*, CanType>>()) {
2697
+ IGM.addGenericROData (res);
2698
+ }
2699
+
2700
+ return res;
2688
2701
}
2689
2702
2690
2703
llvm::Constant *irgen::emitSpecializedGenericClassPrivateData (
Original file line number Diff line number Diff line change 1
- // RUN: %target-swift-frontend -enable-emit-generic-class-ro_t-list -S %s -o - | %FileCheck %s
1
+ // RUN: %target-swift-frontend -prespecialize-generic-metadata -target %target-cpu-apple-macosx12.0 - enable-emit-generic-class-ro_t-list -S %s -o - | %FileCheck %s
2
2
// REQUIRES: objc_interop
3
3
// REQUIRES: CPU=x86_64 || CPU=arm64
4
4
// REQUIRES: OS=macosx
30
30
// CHECK: .quad 0
31
31
// CHECK: .quad __CLASS_METHODS__TtC25generic_class_rodata_list9Somethin
32
32
33
+
34
+ // CHECK: __METACLASS_DATA_$s25generic_class_rodata_list9SomethingCySuGMf:
35
+ // CHECK: .long 129
36
+ // CHECK: .long 40
37
+ // CHECK: .long 40
38
+ // CHECK: .long 0
39
+ // CHECK: .quad _$s25generic_class_rodata_list9SomethingCySuGMf+24
40
+ // CHECK: .quad 0
41
+ // CHECK: .quad __CLASS_METHODS_$s25generic_class_rodata_list9SomethingCySuGMf
42
+
43
+ // CHECK: __DATA_$s25generic_class_rodata_list9SomethingCySuGMf:
44
+ // CHECK: .long 128
45
+ // CHECK: .long 16
46
+ // CHECK: .long 16
47
+ // CHECK: .long 0
48
+ // CHECK: .quad 0
49
+ // CHECK: .quad 0
50
+ // CHECK: .quad __INSTANCE_METHODS_$s25generic_class_rodata_list9SomethingCySuGMf
51
+
52
+
33
53
// CHECK: .section __DATA,__objc_clsrolist
34
54
// CHECK: .p2align 3
35
55
// CHECK:_generic_ro_datas:
36
56
// CHECK: .quad ___unnamed_1+40
37
57
// CHECK: .quad ___unnamed_1+112
58
+ // CHECK: .quad __METACLASS_DATA_$s25generic_class_rodata_list9SomethingCySuGMf
59
+ // CHECK: .quad __DATA_$s25generic_class_rodata_list9SomethingCySuGMf
38
60
39
61
import Foundation
40
62
@@ -44,3 +66,11 @@ public class Something<T> {
44
66
@objc
45
67
public static func myStaticMethod( ) { print ( " static " ) }
46
68
}
69
+
70
+ public protocol P {
71
+ func t< T> ( _ t: T )
72
+ }
73
+
74
+ public func some( _ arr : Something < UInt > , p: P ) {
75
+ p. t ( arr)
76
+ }
You can’t perform that action at this time.
0 commit comments