@@ -44,10 +44,6 @@ import Lib
44
44
// CHECK-MAIN-COMMON-NOT: s3Lib9PkgStructV6fooVarSivg
45
45
// CHECK-MAIN-COMMON-NOT: s3Lib9PkgStructV6fooVarSivs
46
46
// CHECK-MAIN-COMMON-NOT: s3Lib6runPkgySiAA0C6StructVF
47
- // CHECK-MAIN-COMMON-NOT: s3Lib8PubKlassC4dataSivg
48
- // CHECK-MAIN-COMMON-NOT: s3Lib8PubKlassC4dataSivs
49
- // CHECK-MAIN-COMMON-NOT: s3Lib8PkgKlassC4dataSivg
50
- // CHECK-MAIN-COMMON-NOT: s3Lib8PkgKlassC4dataSivs
51
47
52
48
// CHECK-MAIN-COMMON: [[PUB_INIT:%.*]] = struct $PubStruct
53
49
// CHECK-MAIN-COMMON: store [[PUB_INIT]] to {{.*}} : $*PubStruct
@@ -90,11 +86,52 @@ import Lib
90
86
// CHECK-MAIN-COMMON: [[PKGK_SET:%.*]] = load {{.*}} : $*PkgKlass
91
87
// CHECK-MAIN-COMMON: class_method [[PKGK_SET]] : $PkgKlass, #PkgKlass.data!setter : (PkgKlass) -> (Int) -> (), $@convention(method) (Int, @guaranteed PkgKlass) -> ()
92
88
93
- // CHECK-MAIN-RES: sil public_external [serialized_for_package] @$s3Lib8PubKlassCyACSicfC : $@convention(method) (Int, @thick PubKlass.Type) -> @owned PubKlass {
94
- // CHECK-MAIN-NONRES: sil public_external @$s3Lib8PubKlassCyACSicfC : $@convention(method) (Int, @thick PubKlass.Type) -> @owned PubKlass {
89
+ // CHECK-MAIN-COMMON: [[FNL_PUB_ALLOC:%.*]] = alloc_ref $FinalPubKlass
90
+ // CHECK-MAIN-COMMON-NEXT: [[FNL_PUB_INIT:%.*]] = end_init_let_ref [[FNL_PUB_ALLOC]] : $FinalPubKlass
91
+ // CHECK-MAIN-COMMON-NEXT: [[FNL_PUB_REF_ELEM_ADDR:%.*]] = ref_element_addr [[FNL_PUB_INIT]] : $FinalPubKlass, #FinalPubKlass.data
92
+ // CHECK-MAIN-COMMON-NEXT: store {{.*}} to [[FNL_PUB_REF_ELEM_ADDR]] : $*Int
93
+ // CHECK-MAIN-COMMON: store [[FNL_PUB_INIT]] to {{.*}} : $*FinalPubKlass
94
+
95
+ // CHECK-MAIN-COMMON: [[FNL_PUB_GET:%.*]] = load {{.*}} : $*FinalPubKlass
96
+ // CHECK-MAIN-COMMON: [[FNL_PUB_REF:%.*]] = ref_element_addr [[FNL_PUB_GET]] : $FinalPubKlass, #FinalPubKlass.data
97
+ // CHECK-MAIN-COMMON-NEXT: [[FNL_PUB_ACCESS:%.*]] = begin_access {{.*}} [[FNL_PUB_REF]] : $*Int
98
+ // CHECK-MAIN-COMMON-NEXT: [[FNL_PUB_LOAD:%.*]] = load [[FNL_PUB_ACCESS]] : $*Int
99
+ // CHECK-MAIN-COMMON-NEXT: store [[FNL_PUB_LOAD]] to {{.*}} : $*Int
100
+
101
+ // CHECK-MAIN-COMMON: [[FNL_PKG_ALLOC:%.*]] = alloc_ref $FinalPkgKlass
102
+ // CHECK-MAIN-COMMON-NEXT: [[FNL_PKG_INIT:%.*]] = end_init_let_ref [[FNL_PKG_ALLOC]] : $FinalPkgKlass
103
+ // CHECK-MAIN-COMMON-NEXT: [[FNL_PKG_REF_ELEM_ADDR:%.*]] = ref_element_addr [[FNL_PKG_INIT]] : $FinalPkgKlass, #FinalPkgKlass.data
104
+ // CHECK-MAIN-COMMON-NEXT: store {{.*}} to [[FNL_PKG_REF_ELEM_ADDR]] : $*Int
105
+ // CHECK-MAIN-COMMON: store [[FNL_PKG_INIT]] to {{.*}} : $*FinalPkgKlass
106
+
107
+ // CHECK-MAIN-COMMON: [[FNL_PKG_GET:%.*]] = load {{.*}} : $*FinalPkgKlass
108
+ // CHECK-MAIN-COMMON: [[FNL_PKG_REF:%.*]] = ref_element_addr [[FNL_PKG_GET]] : $FinalPkgKlass, #FinalPkgKlass.data
109
+ // CHECK-MAIN-COMMON-NEXT: [[FNL_PKG_ACCESS:%.*]] = begin_access {{.*}} [[FNL_PKG_REF]] : $*Int
110
+ // CHECK-MAIN-COMMON-NEXT: [[FNL_PKG_LOAD:%.*]] = load [[FNL_PKG_ACCESS]] : $*Int
111
+ // CHECK-MAIN-COMMON-NEXT: store [[FNL_PKG_LOAD]] to {{.*}} : $*Int
112
+
113
+ // CHECK-MAIN-RES-DAG: sil public_external [serialized_for_package] @$s3Lib8PubKlassCyACSicfC : $@convention(method) (Int, @thick PubKlass.Type) -> @owned PubKlass {
114
+ // CHECK-MAIN-NONRES-DAG: sil public_external @$s3Lib8PubKlassCyACSicfC : $@convention(method) (Int, @thick PubKlass.Type) -> @owned PubKlass {
115
+
116
+ // CHECK-MAIN-RES-DAG: sil package_external [serialized_for_package] @$s3Lib8PkgKlassCyACSicfC : $@convention(method) (Int, @thick PkgKlass.Type) -> @owned PkgKlass {
117
+ // CHECK-MAIN-NONRES-DAG: sil package_external @$s3Lib8PkgKlassCyACSicfC : $@convention(method) (Int, @thick PkgKlass.Type) -> @owned PkgKlass {
118
+
119
+ // CHECK-MAIN-RES-DAG: sil public_external [serialized_for_package] @$s3Lib13FinalPubKlassCyACSicfC : $@convention(method) (Int, @thick FinalPubKlass.Type) -> @owned FinalPubKlass {
120
+ // CHECK-MAIN-NONRES-DAG: sil public_external @$s3Lib13FinalPubKlassCyACSicfC : $@convention(method) (Int, @thick FinalPubKlass.Type) -> @owned FinalPubKlass {
121
+
122
+ // CHECK-MAIN-RES-DAG: sil public_external [serialized_for_package] @$s3Lib8PubKlassC4dataSivs : $@convention(method) (Int, @guaranteed PubKlass) -> () {
123
+ // CHECK-MAIN-NONRES-DAG: sil public_external [transparent] @$s3Lib8PubKlassC4dataSivs : $@convention(method) (Int, @guaranteed PubKlass) -> () {
124
+
125
+ // CHECK-MAIN-RES-DAG: sil package_external [serialized_for_package] @$s3Lib13FinalPkgKlassCyACSicfC : $@convention(method) (Int, @thick FinalPkgKlass.Type) -> @owned FinalPkgKlass {
126
+ // CHECK-MAIN-NONRES-DAG: sil package_external @$s3Lib13FinalPkgKlassCyACSicfC : $@convention(method) (Int, @thick FinalPkgKlass.Type) -> @owned FinalPkgKlass {
95
127
96
- // CHECK-MAIN-RES: sil package_external [serialized_for_package] @$s3Lib8PkgKlassCyACSicfC : $@convention(method) (Int, @thick PkgKlass.Type) -> @owned PkgKlass {
97
- // CHECK-MAIN-NONRES: sil package_external @$s3Lib8PkgKlassCyACSicfC : $@convention(method) (Int, @thick PkgKlass.Type) -> @owned PkgKlass {
128
+ // CHECK-MAIN-RES-DAG: sil package_external [serialized_for_package] @$s3Lib8PkgKlassC4dataSivs : $@convention(method) (Int, @guaranteed PkgKlass) -> () {
129
+ // CHECK-MAIN-NONRES-DAG: sil package_external [transparent] @$s3Lib8PkgKlassC4dataSivs : $@convention(method) (Int, @guaranteed PkgKlass) -> () {
130
+
131
+ // CHECK-MAIN-COMMON: sil_vtable PubKlass {
132
+ // CHECK-MAIN-COMMON: sil_vtable PkgKlass {
133
+ // CHECK-MAIN-COMMON: sil_vtable FinalPubKlass {
134
+ // CHECK-MAIN-COMMON: sil_vtable FinalPkgKlass {
98
135
99
136
var pub = PubStruct ( 1 )
100
137
let prevPub = pub. fooVar
@@ -111,17 +148,27 @@ let prevPkg = pkg.fooVar
111
148
pkg. fooVar = 3
112
149
let c = runPkg ( pkg)
113
150
114
- var pubKlass = PubKlass ( 2 )
151
+ var pubKlass = PubKlass ( 5 )
115
152
let prevPubData = pubKlass. data
116
- pubKlass. data = 5
153
+ pubKlass. data = 7
117
154
let x = runPubKlass ( pubKlass)
118
155
119
- var pkgKlass = PkgKlass ( 2 )
156
+ var pkgKlass = PkgKlass ( 7 )
120
157
let prevPkgData = pkgKlass. data
121
- pkgKlass. data = 5
158
+ pkgKlass. data = 7
122
159
let y = runPkgKlass ( pkgKlass)
123
160
124
- print ( a, b, c, x, y, prevPub, prevFrPub, prevPkg, prevPubData, prevPkgData)
161
+ var fnlPubKlass = FinalPubKlass ( 9 )
162
+ let prevPubDataFnl = fnlPubKlass. data
163
+ fnlPubKlass. data = 11
164
+
165
+ var fnlPkgKlass = FinalPkgKlass ( 9 )
166
+ let prevPkgDataFnl = fnlPkgKlass. data
167
+ fnlPkgKlass. data = 11
168
+
169
+ print ( a, b, c, x, y,
170
+ prevPub, prevFrPub, prevPkg, prevPubData,
171
+ prevPkgData, prevPubDataFnl, prevPkgDataFnl)
125
172
126
173
public func mainPub( ) {
127
174
print ( PubStruct ( 1 ) )
@@ -141,8 +188,6 @@ public func mainPubArgRetInlinable(_ arg: PubKlass) -> PubStruct {
141
188
return PubStruct ( arg. data)
142
189
}
143
190
144
-
145
-
146
191
//--- Lib.swift
147
192
148
193
public struct PubStruct {
@@ -190,6 +235,18 @@ public func runPub(_ arg: PubStruct) -> Int {
190
235
return arg. f ( ) > arg. fooVar ? arg. f ( ) : arg. fooVar
191
236
}
192
237
238
+ @inlinable
239
+ public func runPubInlinable( _ arg: Int ) -> PubStruct {
240
+ // CHECK-RES-DAG: sil [serialized] [serialized_for_package] [canonical] @$s3Lib15runPubInlinableyAA0C6StructVSiF : $@convention(thin) (Int) -> @out PubStruct {
241
+ // CHECK-NONRES-DAG: sil [serialized] [canonical] @$s3Lib15runPubInlinableyAA0C6StructVSiF : $@convention(thin) (Int) -> PubStruct {
242
+ // CHECK-RES-DAG: alloc_stack [var_decl] $PubStruct
243
+ // CHECK-RES-DAG: function_ref @$s3Lib9PubStructVyACSicfC : $@convention(method) (Int, @thin PubStruct.Type) -> @out PubStruct
244
+ // CHECK-NONRES-DAG: function_ref @$s3Lib9PubStructVyACSicfC : $@convention(method) (Int, @thin PubStruct.Type) -> PubStruct
245
+ var x = PubStruct ( 1 )
246
+ x. fooVar = arg > 11 ? arg + 13 : arg + 17
247
+ return x
248
+ }
249
+
193
250
@frozen
194
251
public struct FrPubStruct {
195
252
// FrPubStruct.fooVar.getter
@@ -321,6 +378,16 @@ public func runPubKlass(_ arg: PubKlass) -> Int {
321
378
return arg. pubfunc ( 31 )
322
379
}
323
380
381
+ final public class FinalPubKlass {
382
+ public var data = 1
383
+ public init ( _ arg: Int ) {
384
+ data = arg
385
+ }
386
+ public func fnlPubFunc( _ arg: Int ) -> Int {
387
+ data + arg
388
+ }
389
+ }
390
+
324
391
package protocol PkgProto {
325
392
var data : Int { get set }
326
393
func pkgfunc( _ arg: Int ) -> Int
@@ -372,6 +439,17 @@ package func runPkgKlass(_ arg: PkgKlass) -> Int {
372
439
return arg. pkgfunc ( 41 )
373
440
}
374
441
442
+
443
+ final package class FinalPkgKlass {
444
+ package var data = 1
445
+ package init ( _ arg: Int ) {
446
+ data = arg
447
+ }
448
+ package func fnlPkgFunc( _ arg: Int ) -> Int {
449
+ data + arg
450
+ }
451
+ }
452
+
375
453
// CHECK-COMMON-LABEL: sil_vtable [serialized] PubKlass {
376
454
// CHECK-COMMON-NEXT: #PubKlass.data!getter: (PubKlass) -> () -> Int : @$s3Lib8PubKlassC4dataSivg
377
455
// CHECK-COMMON-NEXT: #PubKlass.data!setter: (PubKlass) -> (Int) -> () : @$s3Lib8PubKlassC4dataSivs
@@ -380,6 +458,10 @@ package func runPkgKlass(_ arg: PkgKlass) -> Int {
380
458
// CHECK-COMMON-NEXT: #PubKlass.pubfunc: (PubKlass) -> (Int) -> Int : @$s3Lib8PubKlassC7pubfuncyS2iF
381
459
// CHECK-COMMON-NEXT: #PubKlass.deinit!deallocator: @$s3Lib8PubKlassCfD
382
460
461
+ // CHECK-COMMON-LABEL: sil_vtable [serialized] FinalPubKlass {
462
+ // CHECK-COMMON-NEXT: #FinalPubKlass.init!allocator: (FinalPubKlass.Type) -> (Int) -> FinalPubKlass : @$s3Lib13FinalPubKlassCyACSicfC
463
+ // CHECK-COMMON-NEXT: #FinalPubKlass.deinit!deallocator: @$s3Lib13FinalPubKlassCfD
464
+
383
465
// CHECK-COMMON-LABEL: sil_vtable [serialized] PkgKlass {
384
466
// CHECK-COMMON-NEXT: #PkgKlass.data!getter: (PkgKlass) -> () -> Int : @$s3Lib8PkgKlassC4dataSivg
385
467
// CHECK-COMMON-NEXT: #PkgKlass.data!setter: (PkgKlass) -> (Int) -> () : @$s3Lib8PkgKlassC4dataSivs
@@ -388,6 +470,10 @@ package func runPkgKlass(_ arg: PkgKlass) -> Int {
388
470
// CHECK-COMMON-NEXT: #PkgKlass.pkgfunc: (PkgKlass) -> (Int) -> Int : @$s3Lib8PkgKlassC7pkgfuncyS2iF
389
471
// CHECK-COMMON-NEXT: #PkgKlass.deinit!deallocator: @$s3Lib8PkgKlassCfD
390
472
473
+ // CHECK-COMMON-LABEL: sil_vtable [serialized] FinalPkgKlass {
474
+ // CHECK-COMMON-NEXT: #FinalPkgKlass.init!allocator: (FinalPkgKlass.Type) -> (Int) -> FinalPkgKlass : @$s3Lib13FinalPkgKlassCyACSicfC
475
+ // CHECK-COMMON-NEXT: #FinalPkgKlass.deinit!deallocator: @$s3Lib13FinalPkgKlassCfD
476
+
391
477
// CHECK-COMMON-LABEL: sil_witness_table [serialized] PubKlass: PubProto module Lib {
392
478
// CHECK-COMMON-NEXT: method #PubProto.data!getter: <Self where Self : PubProto> (Self) -> () -> Int : @$s3Lib8PubKlassCAA0B5ProtoA2aDP4dataSivgTW
393
479
// CHECK-COMMON-NEXT: method #PubProto.data!setter: <Self where Self : PubProto> (inout Self) -> (Int) -> () : @$s3Lib8PubKlassCAA0B5ProtoA2aDP4dataSivsTW
0 commit comments