@@ -2299,16 +2299,15 @@ func copyableStructsInMoveOnlyStructNonConsuming() {
2299
2299
// Field Sensitive Tests //
2300
2300
///////////////////////////
2301
2301
2302
- func fieldSensitiveTestReinitField ( ) {
2302
+ func fieldSensitiveTestReinitField( ) {
2303
2303
var a = NonTrivialStruct ( )
2304
2304
a = NonTrivialStruct ( )
2305
2305
classConsume ( a. k)
2306
2306
a. k = Klass ( )
2307
2307
classUseMoveOnlyWithoutEscaping ( a. k)
2308
2308
}
2309
2309
2310
- #if false
2311
- func fieldSensitiveTestReinitFieldMultiBlock1 ( ) {
2310
+ func fieldSensitiveTestReinitFieldMultiBlock1( ) {
2312
2311
var a = NonTrivialStruct ( )
2313
2312
a = NonTrivialStruct ( )
2314
2313
classConsume ( a. k)
@@ -2318,9 +2317,8 @@ func fieldSensitiveTestReinitFieldMultiBlock1 () {
2318
2317
classUseMoveOnlyWithoutEscaping ( a. k)
2319
2318
}
2320
2319
}
2321
- #endif
2322
2320
2323
- func fieldSensitiveTestReinitFieldMultiBlock2 ( ) {
2321
+ func fieldSensitiveTestReinitFieldMultiBlock2( ) {
2324
2322
var a = NonTrivialStruct ( ) // expected-error {{'a' used after consume. Lifetime extension of variable requires a copy}}
2325
2323
a = NonTrivialStruct ( )
2326
2324
classConsume ( a. k) // expected-note {{consuming use}}
@@ -2332,8 +2330,7 @@ func fieldSensitiveTestReinitFieldMultiBlock2 () {
2332
2330
classUseMoveOnlyWithoutEscaping ( a. k) // expected-note {{non-consuming use}}
2333
2331
}
2334
2332
2335
- #if false
2336
- func fieldSensitiveTestReinitFieldMultiBlock3 ( ) {
2333
+ func fieldSensitiveTestReinitFieldMultiBlock3( ) {
2337
2334
var a = NonTrivialStruct ( )
2338
2335
a = NonTrivialStruct ( )
2339
2336
classConsume ( a. k)
@@ -2346,10 +2343,10 @@ func fieldSensitiveTestReinitFieldMultiBlock3 () {
2346
2343
2347
2344
classUseMoveOnlyWithoutEscaping ( a. k)
2348
2345
}
2349
- #endif
2350
2346
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( ) {
2353
2350
var a = NonTrivialStruct ( )
2354
2351
a = NonTrivialStruct ( )
2355
2352
classConsume ( a. k)
@@ -2362,4 +2359,43 @@ func fieldSensitiveTestReinitFieldMultiBlock4 () {
2362
2359
2363
2360
classUseMoveOnlyWithoutEscaping ( a. k)
2364
2361
}
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