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 {
14011401 }
14021402
14031403 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+
14041410 dataPtr = llvm::ConstantExpr::getPtrToInt (dataPtr, IGM.IntPtrTy );
14051411
14061412 llvm::Constant *fields[] = {
@@ -2684,7 +2690,14 @@ static llvm::Constant *doEmitClassPrivateData(
26842690 }
26852691
26862692 // 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;
26882701}
26892702
26902703llvm::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
22// REQUIRES: objc_interop
33// REQUIRES: CPU=x86_64 || CPU=arm64
44// REQUIRES: OS=macosx
3030// CHECK: .quad 0
3131// CHECK: .quad __CLASS_METHODS__TtC25generic_class_rodata_list9Somethin
3232
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+
3353// CHECK: .section __DATA,__objc_clsrolist
3454// CHECK: .p2align 3
3555// CHECK:_generic_ro_datas:
3656// CHECK: .quad ___unnamed_1+40
3757// CHECK: .quad ___unnamed_1+112
58+ // CHECK: .quad __METACLASS_DATA_$s25generic_class_rodata_list9SomethingCySuGMf
59+ // CHECK: .quad __DATA_$s25generic_class_rodata_list9SomethingCySuGMf
3860
3961import Foundation
4062
@@ -44,3 +66,11 @@ public class Something<T> {
4466 @objc
4567 public static func myStaticMethod( ) { print ( " static " ) }
4668}
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