Skip to content

Commit fe1b75f

Browse files
Merge pull request #21223 from aschwaighofer/irgen_dont_hoist_weakly_linked_types
IRGen: Don't hoist metadata for weakly linked types
2 parents 1159223 + 0c01906 commit fe1b75f

File tree

5 files changed

+153
-90
lines changed

5 files changed

+153
-90
lines changed

lib/IRGen/AllocStackHoisting.cpp

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,18 @@ static bool isHoistable(AllocStackInst *Inst, irgen::IRGenModule &Mod) {
5757
if (TI.isFixedSize())
5858
return false;
5959

60+
// Don't hoist weakly imported (weakly linked) types.
61+
bool foundWeaklyImported =
62+
SILTy.getASTType().findIf([&Mod](CanType type) -> bool {
63+
if (auto nominal = type->getNominalOrBoundGenericNominal())
64+
if (nominal->isWeakImported(Mod.getSILModule().getSwiftModule())) {
65+
return true;
66+
}
67+
return false;
68+
});
69+
if (foundWeaklyImported)
70+
return false;
71+
6072
// Don't hoist generics with opened archetypes. We would have to hoist the
6173
// open archetype instruction which might not be possible.
6274
return Inst->getTypeDependentOperands().empty();

test/IRGen/Inputs/weak_import_native_helper.swift

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -121,3 +121,15 @@ extension ProtocolWithWeakMembers {
121121

122122
public protocol BaseP {}
123123
@_weakLinked extension S : BaseP {}
124+
125+
126+
public func getVersion() -> Int {
127+
// Used to return 0.
128+
return 1
129+
}
130+
131+
@_weakLinked public struct ResilientStruct {
132+
public init() {}
133+
134+
public func fn(_ x: Int) {}
135+
}

test/IRGen/weak_import_native.swift

Lines changed: 110 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -5,100 +5,100 @@
55

66
import weak_import_native_helper
77

8-
// CHECK-DAG: @"$s25weak_import_native_helper23ProtocolWithWeakMembersP1TAC_AA05OtherE0Tn" = extern_weak global %swift.protocol_requirement
9-
// CHECK-DAG: @"$s1T25weak_import_native_helper23ProtocolWithWeakMembersPTl" = extern_weak global %swift.protocol_requirement
10-
// CHECK-DAG: @"$s25weak_import_native_helper23ProtocolWithWeakMembersP1fyyFTq" = extern_weak global %swift.method_descriptor
11-
// CHECK-DAG: declare extern_weak swiftcc void @"$s25weak_import_native_helper23ProtocolWithWeakMembersPAAE1fyyF"(%swift.type*, i8**, %swift.opaque* noalias nocapture swiftself)
8+
// CHECK-DAG-LABEL: @"$s25weak_import_native_helper23ProtocolWithWeakMembersP1TAC_AA05OtherE0Tn" = extern_weak global %swift.protocol_requirement
9+
// CHECK-DAG-LABEL: @"$s1T25weak_import_native_helper23ProtocolWithWeakMembersPTl" = extern_weak global %swift.protocol_requirement
10+
// CHECK-DAG-LABEL: @"$s25weak_import_native_helper23ProtocolWithWeakMembersP1fyyFTq" = extern_weak global %swift.method_descriptor
11+
// CHECK-DAG-LABEL: declare extern_weak swiftcc void @"$s25weak_import_native_helper23ProtocolWithWeakMembersPAAE1fyyF"(%swift.type*, i8**, %swift.opaque* noalias nocapture swiftself)
1212
struct ConformsToProtocolWithWeakMembers : ProtocolWithWeakMembers {}
1313

1414
func testTopLevel() {
15-
// CHECK-DAG: declare extern_weak {{.+}} @"$s25weak_import_native_helper2fnyyF"()
15+
// CHECK-DAG-LABEL: declare extern_weak {{.+}} @"$s25weak_import_native_helper2fnyyF"()
1616
fn()
1717

18-
// CHECK-DAG: declare extern_weak {{.+}} @"$s25weak_import_native_helper12globalStoredSivg"
19-
// CHECK-DAG: declare extern_weak {{.+}} @"$s25weak_import_native_helper12globalStoredSivs"
18+
// CHECK-DAG-LABEL: declare extern_weak {{.+}} @"$s25weak_import_native_helper12globalStoredSivg"
19+
// CHECK-DAG-LABEL: declare extern_weak {{.+}} @"$s25weak_import_native_helper12globalStoredSivs"
2020
let x = globalStored
2121
globalStored = x
2222
globalStored += 1
2323

24-
// CHECK-DAG: declare extern_weak {{.+}} @"$s25weak_import_native_helper14globalComputedSivg"
25-
// CHECK-DAG: declare extern_weak {{.+}} @"$s25weak_import_native_helper14globalComputedSivs"
24+
// CHECK-DAG-LABEL: declare extern_weak {{.+}} @"$s25weak_import_native_helper14globalComputedSivg"
25+
// CHECK-DAG-LABEL: declare extern_weak {{.+}} @"$s25weak_import_native_helper14globalComputedSivs"
2626
let y = globalComputed
2727
globalComputed = y
2828
globalComputed += 1
2929
}
3030

3131
func testStruct() {
32-
// CHECK-DAG: declare extern_weak {{.+}} @"$s25weak_import_native_helper1SVACycfC"
32+
// CHECK-DAG-LABEL: declare extern_weak {{.+}} @"$s25weak_import_native_helper1SVACycfC"
3333
var s = S()
3434

35-
// CHECK-DAG: declare extern_weak {{.+}} @"$s25weak_import_native_helper1SV2fnyyF"
35+
// CHECK-DAG-LABEL: declare extern_weak {{.+}} @"$s25weak_import_native_helper1SV2fnyyF"
3636
s.fn()
3737

38-
// CHECK-DAG: declare extern_weak {{.+}} @"$s25weak_import_native_helper1SV10storedPropSivg"
39-
// CHECK-DAG: declare extern_weak {{.+}} @"$s25weak_import_native_helper1SV10storedPropSivs"
40-
// CHECK-DAG: declare extern_weak {{.+}} @"$s25weak_import_native_helper1SV10storedPropSivM"
38+
// CHECK-DAG-LABEL: declare extern_weak {{.+}} @"$s25weak_import_native_helper1SV10storedPropSivg"
39+
// CHECK-DAG-LABEL: declare extern_weak {{.+}} @"$s25weak_import_native_helper1SV10storedPropSivs"
40+
// CHECK-DAG-LABEL: declare extern_weak {{.+}} @"$s25weak_import_native_helper1SV10storedPropSivM"
4141
let x = s.storedProp
4242
s.storedProp = x
4343
s.storedProp += 1
4444

45-
// CHECK-DAG: declare extern_weak {{.+}} @"$s25weak_import_native_helper1SV12computedPropSivg"
46-
// CHECK-DAG: declare extern_weak {{.+}} @"$s25weak_import_native_helper1SV12computedPropSivs"
47-
// CHECK-DAG: declare extern_weak {{.+}} @"$s25weak_import_native_helper1SV12computedPropSivM"
45+
// CHECK-DAG-LABEL: declare extern_weak {{.+}} @"$s25weak_import_native_helper1SV12computedPropSivg"
46+
// CHECK-DAG-LABEL: declare extern_weak {{.+}} @"$s25weak_import_native_helper1SV12computedPropSivs"
47+
// CHECK-DAG-LABEL: declare extern_weak {{.+}} @"$s25weak_import_native_helper1SV12computedPropSivM"
4848
let y = s.computedProp
4949
s.computedProp = y
5050
s.computedProp += 1
5151

52-
// CHECK-DAG: declare extern_weak {{.+}} @"$s25weak_import_native_helper1SVyS2icig"
53-
// CHECK-DAG: declare extern_weak {{.+}} @"$s25weak_import_native_helper1SVyS2icis"
54-
// CHECK-DAG: declare extern_weak {{.+}} @"$s25weak_import_native_helper1SVyS2iciM"
52+
// CHECK-DAG-LABEL: declare extern_weak {{.+}} @"$s25weak_import_native_helper1SVyS2icig"
53+
// CHECK-DAG-LABEL: declare extern_weak {{.+}} @"$s25weak_import_native_helper1SVyS2icis"
54+
// CHECK-DAG-LABEL: declare extern_weak {{.+}} @"$s25weak_import_native_helper1SVyS2iciM"
5555
let z = s[0]
5656
s[0] = z
5757
s[0] += 1
5858

59-
// CHECK-DAG: declare extern_weak {{.+}} @"$s25weak_import_native_helper5WeakSV0A6MemberyyF"
59+
// CHECK-DAG-LABEL: declare extern_weak {{.+}} @"$s25weak_import_native_helper5WeakSV0A6MemberyyF"
6060
let w = WeakS()
6161
w.weakMember()
6262
}
6363

6464
func testEnum() {
65-
// CHECK-DAG: @"$s25weak_import_native_helper1EO6strongyA2CmFWC" = external constant i32
65+
// CHECK-DAG-LABEL: @"$s25weak_import_native_helper1EO6strongyA2CmFWC" = external constant i32
6666
_ = E.strong
6767

68-
// CHECK-DAG: @"$s25weak_import_native_helper1EO0A0yA2CmFWC" = extern_weak constant i32
68+
// CHECK-DAG-LABEL: @"$s25weak_import_native_helper1EO0A0yA2CmFWC" = extern_weak constant i32
6969
_ = E.weak
7070

71-
// CHECK-DAG: @"$s25weak_import_native_helper1EO11strongAssocyACSicACmFWC" = external constant i32
71+
// CHECK-DAG-LABEL: @"$s25weak_import_native_helper1EO11strongAssocyACSicACmFWC" = external constant i32
7272
_ = E.strongAssoc(0)
7373

74-
// CHECK-DAG: @"$s25weak_import_native_helper1EO0A5AssocyACSicACmFWC" = extern_weak constant i32
74+
// CHECK-DAG-LABEL: @"$s25weak_import_native_helper1EO0A5AssocyACSicACmFWC" = extern_weak constant i32
7575
_ = E.weakAssoc(0)
7676
}
7777

7878
func testClass() {
79-
// CHECK-DAG: declare extern_weak {{.+}} @"$s25weak_import_native_helper1CCACycfC"
79+
// CHECK-DAG-LABEL: declare extern_weak {{.+}} @"$s25weak_import_native_helper1CCACycfC"
8080
let c = C()
8181

82-
// CHECK-DAG: declare extern_weak {{.+}} @"$s25weak_import_native_helper1CC2fnyyFTj"
82+
// CHECK-DAG-LABEL: declare extern_weak {{.+}} @"$s25weak_import_native_helper1CC2fnyyFTj"
8383
c.fn()
8484

85-
// CHECK-DAG: declare extern_weak swiftcc {{.+}} @"$s25weak_import_native_helper1CC10storedPropSivgTj"
86-
// CHECK-DAG: declare extern_weak swiftcc {{.+}} @"$s25weak_import_native_helper1CC10storedPropSivsTj"
87-
// CHECK-DAG: declare extern_weak swiftcc {{.+}} @"$s25weak_import_native_helper1CC10storedPropSivMTj"
85+
// CHECK-DAG-LABEL: declare extern_weak swiftcc {{.+}} @"$s25weak_import_native_helper1CC10storedPropSivgTj"
86+
// CHECK-DAG-LABEL: declare extern_weak swiftcc {{.+}} @"$s25weak_import_native_helper1CC10storedPropSivsTj"
87+
// CHECK-DAG-LABEL: declare extern_weak swiftcc {{.+}} @"$s25weak_import_native_helper1CC10storedPropSivMTj"
8888
let x = c.storedProp
8989
c.storedProp = x
9090
c.storedProp += 1
9191

92-
// CHECK-DAG: declare extern_weak swiftcc {{.+}} @"$s25weak_import_native_helper1CC12computedPropSivgTj"
93-
// CHECK-DAG: declare extern_weak swiftcc {{.+}} @"$s25weak_import_native_helper1CC12computedPropSivsTj"
94-
// CHECK-DAG: declare extern_weak swiftcc {{.+}} @"$s25weak_import_native_helper1CC12computedPropSivMTj"
92+
// CHECK-DAG-LABEL: declare extern_weak swiftcc {{.+}} @"$s25weak_import_native_helper1CC12computedPropSivgTj"
93+
// CHECK-DAG-LABEL: declare extern_weak swiftcc {{.+}} @"$s25weak_import_native_helper1CC12computedPropSivsTj"
94+
// CHECK-DAG-LABEL: declare extern_weak swiftcc {{.+}} @"$s25weak_import_native_helper1CC12computedPropSivMTj"
9595
let y = c.computedProp
9696
c.computedProp = y
9797
c.computedProp += 1
9898

99-
// CHECK-DAG: declare extern_weak swiftcc {{.+}} @"$s25weak_import_native_helper1CCyS2icigTj"
100-
// CHECK-DAG: declare extern_weak swiftcc {{.+}} @"$s25weak_import_native_helper1CCyS2icisTj"
101-
// CHECK-DAG: declare extern_weak swiftcc {{.+}} @"$s25weak_import_native_helper1CCyS2iciMTj"
99+
// CHECK-DAG-LABEL: declare extern_weak swiftcc {{.+}} @"$s25weak_import_native_helper1CCyS2icigTj"
100+
// CHECK-DAG-LABEL: declare extern_weak swiftcc {{.+}} @"$s25weak_import_native_helper1CCyS2icisTj"
101+
// CHECK-DAG-LABEL: declare extern_weak swiftcc {{.+}} @"$s25weak_import_native_helper1CCyS2iciMTj"
102102
let z = c[0]
103103
c[0] = z
104104
c[0] += 1
@@ -108,33 +108,33 @@ class Sub : C {
108108
deinit {
109109
// This is correctly a strong symbol reference; the class is not declared
110110
// weak.
111-
// CHECK-DAG: declare swiftcc {{.+}} @"$s25weak_import_native_helper1CCfd"
111+
// CHECK-DAG-LABEL: declare swiftcc {{.+}} @"$s25weak_import_native_helper1CCfd"
112112
}
113113
}
114114

115115
func testProtocolExistential(_ p: P) {
116116
var mutP = p
117117

118-
// CHECK-DAG: declare extern_weak {{.+}} @"$s25weak_import_native_helper1PP2fnyyFTj"
118+
// CHECK-DAG-LABEL: declare extern_weak {{.+}} @"$s25weak_import_native_helper1PP2fnyyFTj"
119119
p.fn()
120120

121-
// CHECK-DAG: declare extern_weak swiftcc {{.+}} @"$s25weak_import_native_helper1PP4propSivgTj"
122-
// CHECK-DAG: declare extern_weak swiftcc {{.+}} @"$s25weak_import_native_helper1PP4propSivsTj"
123-
// CHECK-DAG: declare extern_weak swiftcc {{.+}} @"$s25weak_import_native_helper1PP4propSivMTj"
121+
// CHECK-DAG-LABEL: declare extern_weak swiftcc {{.+}} @"$s25weak_import_native_helper1PP4propSivgTj"
122+
// CHECK-DAG-LABEL: declare extern_weak swiftcc {{.+}} @"$s25weak_import_native_helper1PP4propSivsTj"
123+
// CHECK-DAG-LABEL: declare extern_weak swiftcc {{.+}} @"$s25weak_import_native_helper1PP4propSivMTj"
124124
let x = p.prop
125125
mutP.prop = x
126126
mutP.prop += 1
127127

128-
// CHECK-DAG: declare extern_weak swiftcc {{.+}} @"$s25weak_import_native_helper1PPyS2icigTj"
129-
// CHECK-DAG: declare extern_weak swiftcc {{.+}} @"$s25weak_import_native_helper1PPyS2icisTj"
130-
// CHECK-DAG: declare extern_weak swiftcc {{.+}} @"$s25weak_import_native_helper1PPyS2iciMTj"
128+
// CHECK-DAG-LABEL: declare extern_weak swiftcc {{.+}} @"$s25weak_import_native_helper1PPyS2icigTj"
129+
// CHECK-DAG-LABEL: declare extern_weak swiftcc {{.+}} @"$s25weak_import_native_helper1PPyS2icisTj"
130+
// CHECK-DAG-LABEL: declare extern_weak swiftcc {{.+}} @"$s25weak_import_native_helper1PPyS2iciMTj"
131131
let z = p[0]
132132
mutP[0] = z
133133
mutP[0] += 1
134134
}
135135

136136
func testProtocolGeneric<Impl: P>(_ type: Impl.Type) {
137-
// CHECK-DAG: declare extern_weak {{.+}} @"$s25weak_import_native_helper1PPxycfCTj"
137+
// CHECK-DAG-LABEL: declare extern_weak {{.+}} @"$s25weak_import_native_helper1PPxycfCTj"
138138
var mutP = type.init()
139139

140140
mutP.fn()
@@ -149,29 +149,84 @@ func testProtocolGeneric<Impl: P>(_ type: Impl.Type) {
149149
}
150150

151151
func testWeakTypes() -> [Any.Type] {
152-
// CHECK-DAG: declare extern_weak swiftcc %swift.metadata_response @"$s25weak_import_native_helper5WeakSVMa"
153-
// CHECK-DAG: declare extern_weak swiftcc %swift.metadata_response @"$s25weak_import_native_helper5WeakEOMa"
154-
// CHECK-DAG: declare extern_weak swiftcc %swift.metadata_response @"$s25weak_import_native_helper5WeakCCMa"
155-
// CHECK-DAG: @"$s25weak_import_native_helper5WeakPMp" = extern_weak global %swift.protocol
156-
// CHECK-DAG: declare extern_weak swiftcc %swift.metadata_response @"$s25weak_import_native_helper8GenericSVMa"
157-
// CHECK-DAG: declare extern_weak swiftcc %swift.metadata_response @"$s25weak_import_native_helper8GenericEOMa"
158-
// CHECK-DAG: declare extern_weak swiftcc %swift.metadata_response @"$s25weak_import_native_helper8GenericCCMa"
152+
// CHECK-DAG-LABEL: declare extern_weak swiftcc %swift.metadata_response @"$s25weak_import_native_helper5WeakSVMa"
153+
// CHECK-DAG-LABEL: declare extern_weak swiftcc %swift.metadata_response @"$s25weak_import_native_helper5WeakEOMa"
154+
// CHECK-DAG-LABEL: declare extern_weak swiftcc %swift.metadata_response @"$s25weak_import_native_helper5WeakCCMa"
155+
// CHECK-DAG-LABEL: @"$s25weak_import_native_helper5WeakPMp" = extern_weak global %swift.protocol
156+
// CHECK-DAG-LABEL: declare extern_weak swiftcc %swift.metadata_response @"$s25weak_import_native_helper8GenericSVMa"
157+
// CHECK-DAG-LABEL: declare extern_weak swiftcc %swift.metadata_response @"$s25weak_import_native_helper8GenericEOMa"
158+
// CHECK-DAG-LABEL: declare extern_weak swiftcc %swift.metadata_response @"$s25weak_import_native_helper8GenericCCMa"
159159
return [WeakS.self, WeakE.self, WeakC.self, WeakP.self, GenericS<Int>.self, GenericE<Int>.self, GenericC<Int>.self]
160160
}
161161

162162
class WeakSub: WeakC {
163163
deinit {
164-
// CHECK-DAG: declare extern_weak swiftcc {{.+}} @"$s25weak_import_native_helper5WeakCCfd"
164+
// CHECK-DAG-LABEL: declare extern_weak swiftcc {{.+}} @"$s25weak_import_native_helper5WeakCCfd"
165165
}
166166
}
167167

168168
class WeakGenericSub: GenericC<Int> {
169169
deinit {
170-
// CHECK-DAG: declare extern_weak swiftcc {{.+}} @"$s25weak_import_native_helper8GenericCCfd"
170+
// CHECK-DAG-LABEL: declare extern_weak swiftcc {{.+}} @"$s25weak_import_native_helper8GenericCCfd"
171171
}
172172
}
173173

174174
protocol RefinesP : BaseP {}
175175

176-
// CHECK-DAG: @"$s25weak_import_native_helper1SVAA5BasePAAWP" = extern_weak global i8*
176+
// CHECK-DAG-LABEL: @"$s25weak_import_native_helper1SVAA5BasePAAWP" = extern_weak global i8*
177177
extension S : RefinesP {}
178+
179+
// We should not hoist the metadata accessor accross the version check.
180+
181+
// CHECK-DAG-LABEL: define{{.*}} void @"$s18weak_import_native28test_not_hoist_weakly_linkedyyF"()
182+
// CHECK-NOT: 15ResilientStructVMa
183+
// CHECK: getVersion
184+
// CHECK: br
185+
// CHECK: 15ResilientStructVMa
186+
// CHECK: ret
187+
188+
public func test_not_hoist_weakly_linked() {
189+
if getVersion() == 1 {
190+
var _ = ResilientStruct()
191+
}
192+
}
193+
194+
// CHECK-DAG-LABEL: define{{.*}} void @"$s18weak_import_native29test_not_hoist_weakly_linked2yyF"()
195+
// CHECK-NOT: 15ResilientStructVMa
196+
// CHECK: getVersion
197+
// CHECK: br
198+
// CHECK: 15ResilientStructVMa
199+
// CHECK: ret
200+
public func test_not_hoist_weakly_linked2() {
201+
if getVersion() == 1 {
202+
var _ = (ResilientStruct(), 1)
203+
}
204+
}
205+
206+
struct One<T> {
207+
var elt : T?
208+
}
209+
210+
// CHECK-DAG-LABEL: define{{.*}} void @"$s18weak_import_native29test_not_hoist_weakly_linked3yyF"()
211+
// CHECK-NOT: 15ResilientStructVMa
212+
// CHECK: getVersion
213+
// CHECK: br
214+
// CHECK: 15ResilientStructVMa
215+
// CHECK: ret
216+
public func test_not_hoist_weakly_linked3() {
217+
if getVersion() == 1 {
218+
var _ = One(elt:ResilientStruct())
219+
}
220+
}
221+
222+
// CHECK-DAG-LABEL: define{{.*}} void @"$s18weak_import_native29test_not_hoist_weakly_linked4yyF"()
223+
// CHECK-NOT: 15ResilientStructVMa
224+
// CHECK: getVersion
225+
// CHECK: br
226+
// CHECK: 15ResilientStructVMa
227+
// CHECK: ret
228+
public func test_not_hoist_weakly_linked4() {
229+
if getVersion() == 1 {
230+
var _ = One(elt:(ResilientStruct(), 1))
231+
}
232+
}

validation-test/Evolution/test_backward_deploy_protocol.swift

Lines changed: 9 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -16,14 +16,8 @@ struct ConformsToOldWithNonDefault : OldProtocol {
1616

1717
BackwardDeployProtocolTest.test("OldProtocol") {
1818
if getVersion() == 1 {
19-
// FIXME: IRGen inserts the metadata load outside the version check
20-
// apparently. Work around that here. <rdar://problem/46438608>
21-
@inline(never) func helper() {
22-
_ = ConformsToOldWithDefault().newMethod()
23-
_ = ConformsToOldWithNonDefault().newMethod()
24-
}
25-
26-
helper()
19+
_ = ConformsToOldWithDefault().newMethod()
20+
_ = ConformsToOldWithNonDefault().newMethod()
2721
}
2822
}
2923

@@ -76,17 +70,13 @@ BackwardDeployProtocolTest.test("RefinedProtocol") {
7670
// Witness tables that are weak-linked for various reasons
7771
BackwardDeployProtocolTest.test("WeakWitnessTables") {
7872
if getVersion() == 1 {
79-
// FIXME: IRGen inserts the metadata load outside the version check
80-
// apparently. Work around that here. <rdar://problem/46438608>
81-
@inline(never) func helper() {
82-
func f1<T : OtherProtocol>(_: T) {}
83-
func f2<T : NewProtocol>(_: T) {}
84-
func f3<T : NewConformanceProtocol>(_: T) {}
85-
86-
f1(OtherConforms())
87-
f2(NewConforms())
88-
f3(NewConformanceConforms())
89-
}
73+
func f1<T : OtherProtocol>(_: T) {}
74+
func f2<T : NewProtocol>(_: T) {}
75+
func f3<T : NewConformanceProtocol>(_: T) {}
76+
77+
f1(OtherConforms())
78+
f2(NewConforms())
79+
f3(NewConformanceConforms())
9080
}
9181
}
9282

validation-test/Evolution/test_backward_deploy_struct.swift

Lines changed: 10 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -9,25 +9,19 @@ var BackwardDeployStructTest = TestSuite("BackwardDeployStruct")
99

1010
BackwardDeployStructTest.test("ResilientStruct") {
1111
if getVersion() == 1 {
12-
// FIXME: IRGen inserts the metadata load outside the version check
13-
// apparently. Work around that here. <rdar://problem/46438608>
14-
@inline(never) func helper() {
15-
var s = ResilientStruct()
12+
var s = ResilientStruct()
1613

17-
s.fn(s.storedProp)
18-
s.storedProp = 1
19-
s.storedProp += 1
20-
21-
s.fn(s.computedProp)
22-
s.computedProp = 1
23-
s.computedProp += 1
14+
s.fn(s.storedProp)
15+
s.storedProp = 1
16+
s.storedProp += 1
2417

25-
s.fn(s[0])
26-
s[0] = 1
27-
s[0] += 1
28-
}
18+
s.fn(s.computedProp)
19+
s.computedProp = 1
20+
s.computedProp += 1
2921

30-
helper()
22+
s.fn(s[0])
23+
s[0] = 1
24+
s[0] += 1
3125
}
3226
}
3327

0 commit comments

Comments
 (0)