Skip to content

Commit 0e88dc2

Browse files
committed
Initialize SerializedForPackage bit field
1 parent e632c5e commit 0e88dc2

File tree

2 files changed

+102
-15
lines changed

2 files changed

+102
-15
lines changed

lib/SIL/IR/SILFunction.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -251,6 +251,7 @@ void SILFunction::init(
251251
this->Bare = isBareSILFunction;
252252
this->Transparent = isTrans;
253253
this->Serialized = isSerialized;
254+
this->SerializedForPackage = false;
254255
this->Thunk = isThunk;
255256
this->ClassSubclassScope = unsigned(classSubclassScope);
256257
this->GlobalInitFlag = false;

test/SILOptimizer/package-cmo-resilient-mode.swift

Lines changed: 101 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -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

99136
var pub = PubStruct(1)
100137
let prevPub = pub.fooVar
@@ -111,17 +148,27 @@ let prevPkg = pkg.fooVar
111148
pkg.fooVar = 3
112149
let c = runPkg(pkg)
113150

114-
var pubKlass = PubKlass(2)
151+
var pubKlass = PubKlass(5)
115152
let prevPubData = pubKlass.data
116-
pubKlass.data = 5
153+
pubKlass.data = 7
117154
let x = runPubKlass(pubKlass)
118155

119-
var pkgKlass = PkgKlass(2)
156+
var pkgKlass = PkgKlass(7)
120157
let prevPkgData = pkgKlass.data
121-
pkgKlass.data = 5
158+
pkgKlass.data = 7
122159
let 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

126173
public 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

148193
public 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
194251
public 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+
324391
package 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

Comments
 (0)