Skip to content

Commit

Permalink
[move-only-addr] Add some more enum switch tests that test reiniting.
Browse files Browse the repository at this point in the history
  • Loading branch information
gottesmm committed Jan 9, 2023
1 parent 1f389d7 commit 8356a1d
Showing 1 changed file with 47 additions and 5 deletions.
52 changes: 47 additions & 5 deletions test/SILOptimizer/moveonly_addresschecker_diagnostics.swift
Original file line number Diff line number Diff line change
Expand Up @@ -2299,15 +2299,15 @@ func copyableStructsInMoveOnlyStructNonConsuming() {
// Field Sensitive Tests //
///////////////////////////

func fieldSensitiveTestReinitField () {
func fieldSensitiveTestReinitField() {
var a = NonTrivialStruct()
a = NonTrivialStruct()
classConsume(a.k)
a.k = Klass()
classUseMoveOnlyWithoutEscaping(a.k)
}

func fieldSensitiveTestReinitFieldMultiBlock1 () {
func fieldSensitiveTestReinitFieldMultiBlock1() {
var a = NonTrivialStruct()
a = NonTrivialStruct()
classConsume(a.k)
Expand All @@ -2318,7 +2318,7 @@ func fieldSensitiveTestReinitFieldMultiBlock1 () {
}
}

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

func fieldSensitiveTestReinitFieldMultiBlock3 () {
func fieldSensitiveTestReinitFieldMultiBlock3() {
var a = NonTrivialStruct()
a = NonTrivialStruct()
classConsume(a.k)
Expand All @@ -2344,7 +2344,9 @@ func fieldSensitiveTestReinitFieldMultiBlock3 () {
classUseMoveOnlyWithoutEscaping(a.k)
}

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

classUseMoveOnlyWithoutEscaping(a.k)
}

func fieldSensitiveTestReinitEnumMultiBlock() {
var e = NonTrivialEnum.first // expected-error {{'e' used after consume. Lifetime extension of variable requires a copy}}
e = NonTrivialEnum.second(Klass())
switch e { // expected-note {{consuming use}}
case .second:
e = NonTrivialEnum.third(NonTrivialStruct())
default:
break
}
nonConsumingUseNonTrivialEnum(e) // expected-note {{non-consuming use}}
}

func fieldSensitiveTestReinitEnumMultiBlock1() {
var e = NonTrivialEnum.first
e = NonTrivialEnum.second(Klass())
switch e {
case .second:
e = NonTrivialEnum.third(NonTrivialStruct())
default:
e = NonTrivialEnum.fourth(CopyableKlass())
}
nonConsumingUseNonTrivialEnum(e)
}

func fieldSensitiveTestReinitEnumMultiBlock2() {
var e = NonTrivialEnum.first
e = NonTrivialEnum.second(Klass())
if boolValue {
switch e {
case .second:
e = NonTrivialEnum.third(NonTrivialStruct())
default:
e = NonTrivialEnum.fourth(CopyableKlass())
}
} else {
e = NonTrivialEnum.third(NonTrivialStruct())
}
nonConsumingUseNonTrivialEnum(e)
}

0 comments on commit 8356a1d

Please sign in to comment.