1
+ // RUN: %empty-directory(%t/src)
2
+ // RUN: split-file %s %t/src
3
+
4
+ /// Build the fake actor systems lib
5
+ // RUN: %target-build-swift \
6
+ // RUN: -target %target-swift-6.0-abi-triple \
7
+ // RUN: -parse-as-library -emit-library \
8
+ // RUN: -emit-module-path %t/FakeDistributedActorSystems.swiftmodule \
9
+ // RUN: -module-name FakeDistributedActorSystems \
10
+ // RUN: %S/../Inputs/FakeDistributedActorSystems.swift \
11
+ // RUN: -enable-library-evolution \
12
+ // RUN: -Xfrontend -validate-tbd-against-ir=all \
13
+ // RUN: -o %t/%target-library-name(FakeDistributedActorSystems)
14
+
15
+ /// Build the ResilientAPILib
16
+ // RUN: %target-build-swift \
17
+ // RUN: -target %target-swift-6.0-abi-triple \
18
+ // RUN: -parse-as-library -emit-library \
19
+ // RUN: -emit-module-path %t/ResilientAPILib.swiftmodule \
20
+ // RUN: -module-name ResilientAPILib \
21
+ // RUN: -I %t \
22
+ // RUN: -L %t \
23
+ // RUN: -plugin-path %swift-plugin-dir \
24
+ // RUN: %t/src/ResilientAPILib.swift \
25
+ // RUN: %t/src/ResilientAPILibFile2.swift \
26
+ // RUN: -lFakeDistributedActorSystems \
27
+ // RUN: -enable-library-evolution \
28
+ // RUN: -Xfrontend -validate-tbd-against-ir=all \
29
+ // RUN: -o %t/%target-library-name(ResilientAPILib)
30
+
31
+ /// Build the ResilientImplLib
32
+ // RUN: %target-build-swift \
33
+ // RUN: -target %target-swift-6.0-abi-triple \
34
+ // RUN: -parse-as-library -emit-library \
35
+ // RUN: -module-name ResilientImplLib \
36
+ // RUN: -I %t \
37
+ // RUN: -L %t \
38
+ // RUN: -plugin-path %swift-plugin-dir \
39
+ // RUN: %t/src/ResilientImplLib.swift \
40
+ // RUN: -lFakeDistributedActorSystems \
41
+ // RUN: -lResilientAPILib \
42
+ // RUN: -enable-library-evolution \
43
+ // RUN: -Xfrontend -validate-tbd-against-ir=all \
44
+ // RUN: -emit-irgen \
45
+ // RUN: | %FileCheck %s --color --dump-input=always
46
+
47
+ // REQUIRES: executable_test
48
+ // REQUIRES: concurrency
49
+ // REQUIRES: distributed
50
+
51
+ // Locating the built libraries failed on Linux (construction of test case),
52
+ // but we primarily care about macOS in this test
53
+ // UNSUPPORTED: OS=linux-gnu
54
+
55
+ // %env does not seem to work on Windows
56
+ // UNSUPPORTED: OS=windows-msvc
57
+
58
+ // UNSUPPORTED: use_os_stdlib
59
+ // UNSUPPORTED: back_deployment_runtime
60
+ // UNSUPPORTED: remote_run || device_run
61
+
62
+ //--- ResilientAPILib.swift
63
+
64
+ import Distributed
65
+ import FakeDistributedActorSystems
66
+
67
+ @available ( macOS 15 . 0 , iOS 18 . 0 , watchOS 11 . 0 , tvOS 18 . 0 , visionOS 2 . 0 , * )
68
+ public struct Response : Codable { }
69
+
70
+ @Resolvable
71
+ @available ( macOS 15 . 0 , iOS 18 . 0 , watchOS 11 . 0 , tvOS 18 . 0 , visionOS 2 . 0 , * )
72
+ public protocol DistributedNotificationService : DistributedActor where ActorSystem == FakeRoundtripActorSystem {
73
+ distributed func getArray( a1: [ Int ] , a2: String ? ) -> [ Response ]
74
+ }
75
+
76
+ public protocol IdentifiableActor {
77
+ static var actorID : FakeRoundtripActorSystem . ActorID { get }
78
+ }
79
+
80
+ //--- ResilientAPILibFile2.swift
81
+
82
+ final class Another { }
83
+
84
+ //--- ResilientImplLib.swift
85
+
86
+ import ResilientAPILib
87
+
88
+ import Distributed
89
+ import FakeDistributedActorSystems
90
+
91
+ @available ( macOS 15 . 0 , iOS 18 . 0 , watchOS 11 . 0 , tvOS 18 . 0 , visionOS 2 . 0 , * )
92
+ public distributed actor ServiceImpl : DistributedNotificationService , IdentifiableActor {
93
+ public typealias ActorSystem = FakeRoundtripActorSystem
94
+
95
+ public static var actorID : FakeRoundtripActorSystem . ActorID {
96
+ . init( parse: " test " )
97
+ }
98
+
99
+ public distributed func getArray( a1: [ Int ] , a2: String ? ) -> [ Response ] {
100
+ [ ]
101
+ }
102
+ }
103
+
104
+ extension ServiceImpl { }
105
+
106
+ //--- ResilientImplLibFile2.swift
107
+
108
+ class AnotherImpl { }
109
+
110
+
111
+ // @"protocol conformance descriptor for ResilientImplLib.ServiceImpl : ResilientAPILib.DistributedNotificationService in ResilientImplLib" = constant {
112
+ // CHECK: @"$s16ResilientImplLib07ServiceB0C0A6APILib023DistributedNotificationD0AAMc" = constant {
113
+ // CHECK-SAME: i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i16, i16, i32, i32
114
+ // CHECK-SAME: } {
115
+ // CHECK-SAME: i32 add (
116
+ // CHECK-SAME: i32 trunc (
117
+ // CHECK-SAME: i64 sub (
118
+ // i64 ptrtoint (ptr @"got.protocol descriptor for ResilientAPILib.DistributedNotificationService" to i64),
119
+ // CHECK-SAME: i64 ptrtoint (ptr @"got.$s15ResilientAPILib30DistributedNotificationServiceMp" to i64),
120
+ // i64 ptrtoint (ptr @"protocol conformance descriptor for ResilientImplLib.ServiceImpl : ResilientAPILib.DistributedNotificationService in ResilientImplLib" to i64)
121
+ // CHECK-SAME: i64 ptrtoint (ptr @"$s16ResilientImplLib07ServiceB0C0A6APILib023DistributedNotificationD0AAMc" to i64)
122
+ // CHECK-SAME: ) to i32
123
+ // CHECK-SAME: ),
124
+ // CHECK-SAME: i32 1
125
+ // CHECK-SAME: ),
126
+ //
127
+ // CHECK-SAME: i32 trunc (
128
+ // CHECK-SAME: i64 sub (
129
+ // i64 ptrtoint (ptr @"nominal type descriptor for ResilientImplLib.ServiceImpl" to i64),
130
+ // CHECK-SAME: i64 ptrtoint (ptr @"$s16ResilientImplLib07ServiceB0CMn" to i64),
131
+ // CHECK-SAME: i64 ptrtoint (ptr getelementptr inbounds (
132
+ // CHECK-SAME: { i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i16, i16, i32, i32 },
133
+ // CHECK-SAME: ptr @"$s16ResilientImplLib07ServiceB0C0A6APILib023DistributedNotificationD0AAMc",
134
+ // CHECK-SAME: i32 0, i32 1
135
+ // CHECK-SAME: ) to i64)
136
+ // CHECK-SAME: ) to i32
137
+ // CHECK-SAME: ),
138
+ //
139
+ // CHECK-SAME: i32 0,
140
+ // CHECK-SAME: i32 196608,
141
+ // CHECK-SAME: i32 3,
142
+ //
143
+ // CHECK-SAME: i32 add (
144
+ // CHECK-SAME: i32 trunc (
145
+ // CHECK-SAME: i64 sub (
146
+ // i64 ptrtoint (ptr @"got.base conformance descriptor for ResilientAPILib.DistributedNotificationService: Distributed.DistributedActor" to i64),
147
+ // CHECK-SAME: i64 ptrtoint (ptr @"got.$s15ResilientAPILib30DistributedNotificationServiceP0C00C5ActorTb" to i64),
148
+ // CHECK-SAME: i64 ptrtoint (ptr getelementptr inbounds (
149
+ // CHECK-SAME: { i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i16, i16, i32, i32 },
150
+ // CHECK-SAME: ptr @"$s16ResilientImplLib07ServiceB0C0A6APILib023DistributedNotificationD0AAMc",
151
+ // CHECK-SAME: i32 0, i32 5
152
+ // CHECK-SAME: ) to i64)
153
+ // CHECK-SAME: ) to i32
154
+ // CHECK-SAME: ),
155
+ // CHECK-SAME: i32 1
156
+ // CHECK-SAME: ),
157
+ //
158
+ // CHECK-SAME: i32 trunc (
159
+ // CHECK-SAME: i64 sub (
160
+ // CHECK-SAME: i64 ptrtoint (ptr getelementptr (
161
+ // CHECK-SAME: i8, ptr @"associated conformance 16ResilientImplLib07ServiceB0C0A6APILib023DistributedNotificationD0AA0F00F5Actor",
162
+ // CHECK-SAME: i64 1
163
+ // CHECK-SAME: ) to i64),
164
+ // CHECK-SAME: i64 ptrtoint (ptr getelementptr inbounds (
165
+ // CHECK-SAME: { i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i16, i16, i32, i32 },
166
+ // CHECK-SAME: ptr @"$s16ResilientImplLib07ServiceB0C0A6APILib023DistributedNotificationD0AAMc",
167
+ // CHECK-SAME: i32 0, i32 6
168
+ // CHECK-SAME: ) to i64)
169
+ // CHECK-SAME: ) to i32
170
+ // CHECK-SAME: ),
171
+ //
172
+ // CHECK-SAME: i32 add (
173
+ // CHECK-SAME: i32 trunc (
174
+ // CHECK-SAME: i64 sub (
175
+ // i64 ptrtoint (ptr @"got.method descriptor for ResilientAPILib.DistributedNotificationService.getArray(a1: [Swift.Int], a2: Swift.String?) -> [ResilientAPILib.Response]" to i64),
176
+ // CHECK-SAME: i64 ptrtoint (ptr @"got.$s15ResilientAPILib30DistributedNotificationServiceP8getArray2a12a2SayAA8ResponseVGSaySiG_SSSgtFTq" to i64),
177
+ // CHECK-SAME: i64 ptrtoint (ptr getelementptr inbounds (
178
+ // CHECK-SAME: { i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i16, i16, i32, i32 },
179
+ // CHECK-SAME: ptr @"$s16ResilientImplLib07ServiceB0C0A6APILib023DistributedNotificationD0AAMc",
180
+ // CHECK-SAME: i32 0, i32 7
181
+ // CHECK-SAME: ) to i64)
182
+ // CHECK-SAME: ) to i32
183
+ // CHECK-SAME: ),
184
+ // CHECK-SAME: i32 1
185
+ // CHECK-SAME: ),
186
+ //
187
+ // CHECK-SAME: i32 trunc (
188
+ // CHECK-SAME: i64 sub (
189
+ // i64 ptrtoint (ptr @"protocol witness for ResilientAPILib.DistributedNotificationService.getArray(a1: [Swift.Int], a2: Swift.String?) -> [ResilientAPILib.Response] in conformance ResilientImplLib.ServiceImpl : ResilientAPILib.DistributedNotificationService in ResilientImplLib" to i64),
190
+ // CHECK-SAME: i64 ptrtoint (ptr @"$s16ResilientImplLib07ServiceB0C0A6APILib023DistributedNotificationD0AadEP8getArray2a12a2SayAD8ResponseVGSaySiG_SSSgtFTW" to i64),
191
+ // CHECK-SAME: i64 ptrtoint (ptr getelementptr inbounds (
192
+ // CHECK-SAME: { i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i16, i16, i32, i32 },
193
+ // ptr @"protocol conformance descriptor for ResilientImplLib.ServiceImpl : ResilientAPILib.DistributedNotificationService in ResilientImplLib",
194
+ // CHECK-SAME: ptr @"$s16ResilientImplLib07ServiceB0C0A6APILib023DistributedNotificationD0AAMc",
195
+ // CHECK-SAME: i32 0, i32 8
196
+ // CHECK-SAME: ) to i64)
197
+ // CHECK-SAME: ) to i32
198
+ // CHECK-SAME: ),
199
+ //
200
+ // THIS ONE HAS .7 IN OUR REAL EXAMPLE >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
201
+ // CHECK-SAME: i32 add (
202
+ // CHECK-SAME: i32 trunc (
203
+ // CHECK-SAME: i64 sub (
204
+ // i64 ptrtoint (ptr @"got.method descriptor for ResilientAPILib.DistributedNotificationService.getArray(a1: [Swift.Int], a2: Swift.String?) async throws -> [ResilientAPILib.Response]" to i64),
205
+ // CHECK-SAME: i64 ptrtoint (ptr @"got.$s15ResilientAPILib30DistributedNotificationServiceP8getArray2a12a2SayAA8ResponseVGSaySiG_SSSgtYaKFTqTE" to i64),
206
+ // CHECK-SAME: i64 ptrtoint (ptr getelementptr inbounds (
207
+ // CHECK-SAME: { i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i16, i16, i32, i32 },
208
+ // ptr @"protocol conformance descriptor for ResilientImplLib.ServiceImpl : ResilientAPILib.DistributedNotificationService in ResilientImplLib",
209
+ // CHECK-SAME: ptr @"$s16ResilientImplLib07ServiceB0C0A6APILib023DistributedNotificationD0AAMc",
210
+ // CHECK-SAME: i32 0, i32 9
211
+ // CHECK-SAME: ) to i64)
212
+ // CHECK-SAME: ) to i32
213
+ // CHECK-SAME: ),
214
+ // CHECK-SAME: i32 1
215
+ // CHECK-SAME: ),
216
+ // <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
217
+ //
218
+ // CHECK-SAME: i32 trunc (
219
+ // CHECK-SAME: i64 sub (
220
+ // i64 ptrtoint (ptr @"async function pointer to distributed thunk protocol witness for ResilientAPILib.DistributedNotificationService.getArray(a1: [Swift.Int], a2: Swift.String?) async throws -> [ResilientAPILib.Response] in conformance ResilientImplLib.ServiceImpl : ResilientAPILib.DistributedNotificationService in ResilientImplLib" to i64),
221
+ // CHECK-SAME: i64 ptrtoint (ptr @"$s16ResilientImplLib07ServiceB0C0A6APILib023DistributedNotificationD0AadEP8getArray2a12a2SayAD8ResponseVGSaySiG_SSSgtYaKFTWTETu" to i64),
222
+ // CHECK-SAME: i64 ptrtoint (ptr getelementptr inbounds (
223
+ // CHECK-SAME: { i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i16, i16, i32, i32 },
224
+ // ptr @"protocol conformance descriptor for ResilientImplLib.ServiceImpl : ResilientAPILib.DistributedNotificationService in ResilientImplLib",
225
+ // CHECK-SAME: ptr @"$s16ResilientImplLib07ServiceB0C0A6APILib023DistributedNotificationD0AAMc",
226
+ // CHECK-SAME: i32 0, i32 10
227
+ // CHECK-SAME: ) to i64)
228
+ // CHECK-SAME: ) to i32
229
+ // CHECK-SAME: ),
230
+ //
231
+ // CHECK-SAME: i16 0,
232
+ // CHECK-SAME: i16 1,
233
+ // CHECK-SAME: i32 0,
234
+ //
235
+ // CHECK-SAME: i32 trunc (
236
+ // CHECK-SAME: i64 sub (
237
+ // i64 ptrtoint (ptr @"metadata instantiation cache for protocol conformance descriptor for ResilientImplLib.ServiceImpl : ResilientAPILib.DistributedNotificationService in ResilientImplLib" to i64),
238
+ // CHECK-SAME: i64 ptrtoint (ptr @"$s16ResilientImplLib07ServiceB0C0A6APILib023DistributedNotificationD0AAMcMK" to i64),
239
+ // CHECK-SAME: i64 ptrtoint (ptr getelementptr inbounds (
240
+ // CHECK-SAME: { i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i16, i16, i32, i32 },
241
+ // ptr @"protocol conformance descriptor for ResilientImplLib.ServiceImpl : ResilientAPILib.DistributedNotificationService in ResilientImplLib",
242
+ // CHECK-SAME: ptr @"$s16ResilientImplLib07ServiceB0C0A6APILib023DistributedNotificationD0AAMc",
243
+ // CHECK-SAME: i32 0, i32 14
244
+ // CHECK-SAME: ) to i64)
245
+ // CHECK-SAME: ) to i32
246
+ // CHECK-SAME: )
247
+ // CHECK-SAME: }, section "__TEXT,__const", no_sanitize_address, align 4
0 commit comments