@@ -2299,15 +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
- func fieldSensitiveTestReinitFieldMultiBlock1 ( ) {
2310
+ func fieldSensitiveTestReinitFieldMultiBlock1( ) {
2311
2311
var a = NonTrivialStruct ( )
2312
2312
a = NonTrivialStruct ( )
2313
2313
classConsume ( a. k)
@@ -2318,7 +2318,7 @@ func fieldSensitiveTestReinitFieldMultiBlock1 () {
2318
2318
}
2319
2319
}
2320
2320
2321
- func fieldSensitiveTestReinitFieldMultiBlock2 ( ) {
2321
+ func fieldSensitiveTestReinitFieldMultiBlock2( ) {
2322
2322
var a = NonTrivialStruct ( ) // expected-error {{'a' used after consume. Lifetime extension of variable requires a copy}}
2323
2323
a = NonTrivialStruct ( )
2324
2324
classConsume ( a. k) // expected-note {{consuming use}}
@@ -2330,7 +2330,7 @@ func fieldSensitiveTestReinitFieldMultiBlock2 () {
2330
2330
classUseMoveOnlyWithoutEscaping ( a. k) // expected-note {{non-consuming use}}
2331
2331
}
2332
2332
2333
- func fieldSensitiveTestReinitFieldMultiBlock3 ( ) {
2333
+ func fieldSensitiveTestReinitFieldMultiBlock3( ) {
2334
2334
var a = NonTrivialStruct ( )
2335
2335
a = NonTrivialStruct ( )
2336
2336
classConsume ( a. k)
@@ -2344,7 +2344,9 @@ func fieldSensitiveTestReinitFieldMultiBlock3 () {
2344
2344
classUseMoveOnlyWithoutEscaping ( a. k)
2345
2345
}
2346
2346
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( ) {
2348
2350
var a = NonTrivialStruct ( )
2349
2351
a = NonTrivialStruct ( )
2350
2352
classConsume ( a. k)
@@ -2357,3 +2359,43 @@ func fieldSensitiveTestReinitFieldMultiBlock4 () {
2357
2359
2358
2360
classUseMoveOnlyWithoutEscaping ( a. k)
2359
2361
}
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