Skip to content

Commit 8356a1d

Browse files
committed
[move-only-addr] Add some more enum switch tests that test reiniting.
1 parent 1f389d7 commit 8356a1d

File tree

1 file changed

+47
-5
lines changed

1 file changed

+47
-5
lines changed

test/SILOptimizer/moveonly_addresschecker_diagnostics.swift

Lines changed: 47 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2299,15 +2299,15 @@ func copyableStructsInMoveOnlyStructNonConsuming() {
22992299
// Field Sensitive Tests //
23002300
///////////////////////////
23012301

2302-
func fieldSensitiveTestReinitField () {
2302+
func fieldSensitiveTestReinitField() {
23032303
var a = NonTrivialStruct()
23042304
a = NonTrivialStruct()
23052305
classConsume(a.k)
23062306
a.k = Klass()
23072307
classUseMoveOnlyWithoutEscaping(a.k)
23082308
}
23092309

2310-
func fieldSensitiveTestReinitFieldMultiBlock1 () {
2310+
func fieldSensitiveTestReinitFieldMultiBlock1() {
23112311
var a = NonTrivialStruct()
23122312
a = NonTrivialStruct()
23132313
classConsume(a.k)
@@ -2318,7 +2318,7 @@ func fieldSensitiveTestReinitFieldMultiBlock1 () {
23182318
}
23192319
}
23202320

2321-
func fieldSensitiveTestReinitFieldMultiBlock2 () {
2321+
func fieldSensitiveTestReinitFieldMultiBlock2() {
23222322
var a = NonTrivialStruct() // expected-error {{'a' used after consume. Lifetime extension of variable requires a copy}}
23232323
a = NonTrivialStruct()
23242324
classConsume(a.k) // expected-note {{consuming use}}
@@ -2330,7 +2330,7 @@ func fieldSensitiveTestReinitFieldMultiBlock2 () {
23302330
classUseMoveOnlyWithoutEscaping(a.k) // expected-note {{non-consuming use}}
23312331
}
23322332

2333-
func fieldSensitiveTestReinitFieldMultiBlock3 () {
2333+
func fieldSensitiveTestReinitFieldMultiBlock3() {
23342334
var a = NonTrivialStruct()
23352335
a = NonTrivialStruct()
23362336
classConsume(a.k)
@@ -2344,7 +2344,9 @@ func fieldSensitiveTestReinitFieldMultiBlock3 () {
23442344
classUseMoveOnlyWithoutEscaping(a.k)
23452345
}
23462346

2347-
func fieldSensitiveTestReinitFieldMultiBlock4 () {
2347+
// This test sees what happens if we partially reinit along one path and do a
2348+
// full reinit along another path.
2349+
func fieldSensitiveTestReinitFieldMultiBlock4() {
23482350
var a = NonTrivialStruct()
23492351
a = NonTrivialStruct()
23502352
classConsume(a.k)
@@ -2357,3 +2359,43 @@ func fieldSensitiveTestReinitFieldMultiBlock4 () {
23572359

23582360
classUseMoveOnlyWithoutEscaping(a.k)
23592361
}
2362+
2363+
func fieldSensitiveTestReinitEnumMultiBlock() {
2364+
var e = NonTrivialEnum.first // expected-error {{'e' used after consume. Lifetime extension of variable requires a copy}}
2365+
e = NonTrivialEnum.second(Klass())
2366+
switch e { // expected-note {{consuming use}}
2367+
case .second:
2368+
e = NonTrivialEnum.third(NonTrivialStruct())
2369+
default:
2370+
break
2371+
}
2372+
nonConsumingUseNonTrivialEnum(e) // expected-note {{non-consuming use}}
2373+
}
2374+
2375+
func fieldSensitiveTestReinitEnumMultiBlock1() {
2376+
var e = NonTrivialEnum.first
2377+
e = NonTrivialEnum.second(Klass())
2378+
switch e {
2379+
case .second:
2380+
e = NonTrivialEnum.third(NonTrivialStruct())
2381+
default:
2382+
e = NonTrivialEnum.fourth(CopyableKlass())
2383+
}
2384+
nonConsumingUseNonTrivialEnum(e)
2385+
}
2386+
2387+
func fieldSensitiveTestReinitEnumMultiBlock2() {
2388+
var e = NonTrivialEnum.first
2389+
e = NonTrivialEnum.second(Klass())
2390+
if boolValue {
2391+
switch e {
2392+
case .second:
2393+
e = NonTrivialEnum.third(NonTrivialStruct())
2394+
default:
2395+
e = NonTrivialEnum.fourth(CopyableKlass())
2396+
}
2397+
} else {
2398+
e = NonTrivialEnum.third(NonTrivialStruct())
2399+
}
2400+
nonConsumingUseNonTrivialEnum(e)
2401+
}

0 commit comments

Comments
 (0)