@@ -2299,16 +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- #if false
2311- func fieldSensitiveTestReinitFieldMultiBlock1 ( ) {
2310+ func fieldSensitiveTestReinitFieldMultiBlock1( ) {
23122311 var a = NonTrivialStruct ( )
23132312 a = NonTrivialStruct ( )
23142313 classConsume ( a. k)
@@ -2318,9 +2317,8 @@ func fieldSensitiveTestReinitFieldMultiBlock1 () {
23182317 classUseMoveOnlyWithoutEscaping ( a. k)
23192318 }
23202319}
2321- #endif
23222320
2323- func fieldSensitiveTestReinitFieldMultiBlock2 ( ) {
2321+ func fieldSensitiveTestReinitFieldMultiBlock2( ) {
23242322 var a = NonTrivialStruct ( ) // expected-error {{'a' used after consume. Lifetime extension of variable requires a copy}}
23252323 a = NonTrivialStruct ( )
23262324 classConsume ( a. k) // expected-note {{consuming use}}
@@ -2332,8 +2330,7 @@ func fieldSensitiveTestReinitFieldMultiBlock2 () {
23322330 classUseMoveOnlyWithoutEscaping ( a. k) // expected-note {{non-consuming use}}
23332331}
23342332
2335- #if false
2336- func fieldSensitiveTestReinitFieldMultiBlock3 ( ) {
2333+ func fieldSensitiveTestReinitFieldMultiBlock3( ) {
23372334 var a = NonTrivialStruct ( )
23382335 a = NonTrivialStruct ( )
23392336 classConsume ( a. k)
@@ -2346,10 +2343,10 @@ func fieldSensitiveTestReinitFieldMultiBlock3 () {
23462343
23472344 classUseMoveOnlyWithoutEscaping ( a. k)
23482345}
2349- #endif
23502346
2351- #if false
2352- 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( ) {
23532350 var a = NonTrivialStruct ( )
23542351 a = NonTrivialStruct ( )
23552352 classConsume ( a. k)
@@ -2362,4 +2359,43 @@ func fieldSensitiveTestReinitFieldMultiBlock4 () {
23622359
23632360 classUseMoveOnlyWithoutEscaping ( a. k)
23642361}
2365- #endif
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