@@ -44,10 +44,6 @@ import Lib
4444// CHECK-MAIN-COMMON-NOT: s3Lib9PkgStructV6fooVarSivg
4545// CHECK-MAIN-COMMON-NOT: s3Lib9PkgStructV6fooVarSivs
4646// 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
5147
5248// CHECK-MAIN-COMMON: [[PUB_INIT:%.*]] = struct $PubStruct
5349// CHECK-MAIN-COMMON: store [[PUB_INIT]] to {{.*}} : $*PubStruct
@@ -90,11 +86,52 @@ import Lib
9086// CHECK-MAIN-COMMON: [[PKGK_SET:%.*]] = load {{.*}} : $*PkgKlass
9187// CHECK-MAIN-COMMON: class_method [[PKGK_SET]] : $PkgKlass, #PkgKlass.data!setter : (PkgKlass) -> (Int) -> (), $@convention(method) (Int, @guaranteed PkgKlass) -> ()
9288
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 {
95127
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 {
98135
99136var pub = PubStruct ( 1 )
100137let prevPub = pub. fooVar
@@ -111,17 +148,27 @@ let prevPkg = pkg.fooVar
111148pkg. fooVar = 3
112149let c = runPkg ( pkg)
113150
114- var pubKlass = PubKlass ( 2 )
151+ var pubKlass = PubKlass ( 5 )
115152let prevPubData = pubKlass. data
116- pubKlass. data = 5
153+ pubKlass. data = 7
117154let x = runPubKlass ( pubKlass)
118155
119- var pkgKlass = PkgKlass ( 2 )
156+ var pkgKlass = PkgKlass ( 7 )
120157let prevPkgData = pkgKlass. data
121- pkgKlass. data = 5
158+ pkgKlass. data = 7
122159let y = runPkgKlass ( pkgKlass)
123160
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)
125172
126173public func mainPub( ) {
127174 print ( PubStruct ( 1 ) )
@@ -141,8 +188,6 @@ public func mainPubArgRetInlinable(_ arg: PubKlass) -> PubStruct {
141188 return PubStruct ( arg. data)
142189}
143190
144-
145-
146191//--- Lib.swift
147192
148193public struct PubStruct {
@@ -190,6 +235,18 @@ public func runPub(_ arg: PubStruct) -> Int {
190235 return arg. f ( ) > arg. fooVar ? arg. f ( ) : arg. fooVar
191236}
192237
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+
193250@frozen
194251public struct FrPubStruct {
195252 // FrPubStruct.fooVar.getter
@@ -321,6 +378,16 @@ public func runPubKlass(_ arg: PubKlass) -> Int {
321378 return arg. pubfunc ( 31 )
322379}
323380
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+
324391package protocol PkgProto {
325392 var data : Int { get set }
326393 func pkgfunc( _ arg: Int ) -> Int
@@ -372,6 +439,17 @@ package func runPkgKlass(_ arg: PkgKlass) -> Int {
372439 return arg. pkgfunc ( 41 )
373440}
374441
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+
375453// CHECK-COMMON-LABEL: sil_vtable [serialized] PubKlass {
376454// CHECK-COMMON-NEXT: #PubKlass.data!getter: (PubKlass) -> () -> Int : @$s3Lib8PubKlassC4dataSivg
377455// CHECK-COMMON-NEXT: #PubKlass.data!setter: (PubKlass) -> (Int) -> () : @$s3Lib8PubKlassC4dataSivs
@@ -380,6 +458,10 @@ package func runPkgKlass(_ arg: PkgKlass) -> Int {
380458// CHECK-COMMON-NEXT: #PubKlass.pubfunc: (PubKlass) -> (Int) -> Int : @$s3Lib8PubKlassC7pubfuncyS2iF
381459// CHECK-COMMON-NEXT: #PubKlass.deinit!deallocator: @$s3Lib8PubKlassCfD
382460
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+
383465// CHECK-COMMON-LABEL: sil_vtable [serialized] PkgKlass {
384466// CHECK-COMMON-NEXT: #PkgKlass.data!getter: (PkgKlass) -> () -> Int : @$s3Lib8PkgKlassC4dataSivg
385467// CHECK-COMMON-NEXT: #PkgKlass.data!setter: (PkgKlass) -> (Int) -> () : @$s3Lib8PkgKlassC4dataSivs
@@ -388,6 +470,10 @@ package func runPkgKlass(_ arg: PkgKlass) -> Int {
388470// CHECK-COMMON-NEXT: #PkgKlass.pkgfunc: (PkgKlass) -> (Int) -> Int : @$s3Lib8PkgKlassC7pkgfuncyS2iF
389471// CHECK-COMMON-NEXT: #PkgKlass.deinit!deallocator: @$s3Lib8PkgKlassCfD
390472
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+
391477// CHECK-COMMON-LABEL: sil_witness_table [serialized] PubKlass: PubProto module Lib {
392478// CHECK-COMMON-NEXT: method #PubProto.data!getter: <Self where Self : PubProto> (Self) -> () -> Int : @$s3Lib8PubKlassCAA0B5ProtoA2aDP4dataSivgTW
393479// CHECK-COMMON-NEXT: method #PubProto.data!setter: <Self where Self : PubProto> (inout Self) -> (Int) -> () : @$s3Lib8PubKlassCAA0B5ProtoA2aDP4dataSivsTW
0 commit comments