File tree 3 files changed +63
-2
lines changed
3 files changed +63
-2
lines changed Original file line number Diff line number Diff line change @@ -75,6 +75,12 @@ fileprivate func emitDiagnosticParts(
75
75
replaceEndLoc = bridgedSourceLoc ( at: oldToken. endPosition)
76
76
newText = newTrivia. description
77
77
78
+ case . replaceChild( let replacingChildData) :
79
+ let replacementRange = replacingChildData. replacementRange
80
+ replaceStartLoc = bridgedSourceLoc ( at: replacementRange. lowerBound)
81
+ replaceEndLoc = bridgedSourceLoc ( at: replacementRange. upperBound)
82
+ newText = replacingChildData. newChild. description
83
+
78
84
#if RESILIENT_SWIFT_SYNTAX
79
85
@unknown default :
80
86
fatalError ( )
@@ -221,6 +227,18 @@ extension SourceManager {
221
227
)
222
228
newText = newTrivia. description
223
229
230
+ case . replaceChild( let replacingChildData) :
231
+ let replacementRange = replacingChildData. replacementRange
232
+ replaceStartLoc = bridgedSourceLoc (
233
+ for: replacingChildData. parent,
234
+ at: replacementRange. lowerBound
235
+ )
236
+ replaceEndLoc = bridgedSourceLoc (
237
+ for: replacingChildData. parent,
238
+ at: replacementRange. upperBound
239
+ )
240
+ newText = replacingChildData. newChild. description
241
+
224
242
#if RESILIENT_SWIFT_SYNTAX
225
243
@unknown default :
226
244
fatalError ( )
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[] = {
@@ -2683,7 +2689,14 @@ static llvm::Constant *doEmitClassPrivateData(
2683
2689
}
2684
2690
2685
2691
// Then build the class RO-data.
2686
- return builder.emitROData (ForClass, hasUpdater);
2692
+ auto res = builder.emitROData (ForClass, hasUpdater);
2693
+
2694
+ // Record the ro-data globals if this is a pre-specialized class.
2695
+ if (classUnion.isa <std::pair<ClassDecl*, CanType>>()) {
2696
+ IGM.addGenericROData (res);
2697
+ }
2698
+
2699
+ return res;
2687
2700
}
2688
2701
2689
2702
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