Skip to content

Commit e00f4fb

Browse files
committed
Merge remote-tracking branch 'origin/main' into rebranch
2 parents c2a1ebb + 2a2dd73 commit e00f4fb

File tree

3 files changed

+63
-2
lines changed

3 files changed

+63
-2
lines changed

lib/ASTGen/Sources/ASTGen/DiagnosticsBridge.swift

+18
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,12 @@ fileprivate func emitDiagnosticParts(
7575
replaceEndLoc = bridgedSourceLoc(at: oldToken.endPosition)
7676
newText = newTrivia.description
7777

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+
7884
#if RESILIENT_SWIFT_SYNTAX
7985
@unknown default:
8086
fatalError()
@@ -221,6 +227,18 @@ extension SourceManager {
221227
)
222228
newText = newTrivia.description
223229

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+
224242
#if RESILIENT_SWIFT_SYNTAX
225243
@unknown default:
226244
fatalError()

lib/IRGen/GenClass.cpp

+14-1
Original file line numberDiff line numberDiff 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[] = {
@@ -2683,7 +2689,14 @@ static llvm::Constant *doEmitClassPrivateData(
26832689
}
26842690

26852691
// 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;
26872700
}
26882701

26892702
llvm::Constant *irgen::emitSpecializedGenericClassPrivateData(

test/IRGen/generic_class_rodata_list.swift

+31-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
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
@@ -30,11 +30,33 @@
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

3961
import 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+
}

0 commit comments

Comments
 (0)