@@ -329,7 +329,7 @@ func checkDiagnosticMinimality(x: Runcible?) {
329
329
case ( . hat, . spoon) :
330
330
break
331
331
}
332
-
332
+
333
333
switch ( x!, x!) { // expected-error {{switch must be exhaustive}}
334
334
// expected-note@-1 {{add missing case: '(.fork, _)'}}
335
335
// expected-note@-2 {{add missing case: '(.hat, .spoon)'}}
@@ -343,3 +343,158 @@ func checkDiagnosticMinimality(x: Runcible?) {
343
343
break
344
344
}
345
345
}
346
+
347
+ enum LargeSpaceEnum {
348
+ case case0
349
+ case case1
350
+ case case2
351
+ case case3
352
+ case case4
353
+ case case5
354
+ case case6
355
+ case case7
356
+ case case8
357
+ case case9
358
+ case case10
359
+ }
360
+
361
+ func notQuiteBigEnough( ) -> Bool {
362
+ switch ( LargeSpaceEnum . case1, LargeSpaceEnum . case2) { // expected-error {{switch must be exhaustive}}
363
+ // expected-note@-1 110 {{add missing case:}}
364
+ case ( . case0, . case0) : return true
365
+ case ( . case1, . case1) : return true
366
+ case ( . case2, . case2) : return true
367
+ case ( . case3, . case3) : return true
368
+ case ( . case4, . case4) : return true
369
+ case ( . case5, . case5) : return true
370
+ case ( . case6, . case6) : return true
371
+ case ( . case7, . case7) : return true
372
+ case ( . case8, . case8) : return true
373
+ case ( . case9, . case9) : return true
374
+ case ( . case10, . case10) : return true
375
+ }
376
+ }
377
+
378
+ enum OverlyLargeSpaceEnum {
379
+ case case0
380
+ case case1
381
+ case case2
382
+ case case3
383
+ case case4
384
+ case case5
385
+ case case6
386
+ case case7
387
+ case case8
388
+ case case9
389
+ case case10
390
+ case case11
391
+ }
392
+
393
+ func quiteBigEnough( ) -> Bool {
394
+ switch ( OverlyLargeSpaceEnum . case1, OverlyLargeSpaceEnum . case2) { // expected-error {{switch must be exhaustive}}
395
+ // expected-note@-1 {{do you want to add a default clause?}}
396
+ case ( . case0, . case0) : return true
397
+ case ( . case1, . case1) : return true
398
+ case ( . case2, . case2) : return true
399
+ case ( . case3, . case3) : return true
400
+ case ( . case4, . case4) : return true
401
+ case ( . case5, . case5) : return true
402
+ case ( . case6, . case6) : return true
403
+ case ( . case7, . case7) : return true
404
+ case ( . case8, . case8) : return true
405
+ case ( . case9, . case9) : return true
406
+ case ( . case10, . case10) : return true
407
+ case ( . case11, . case11) : return true
408
+ }
409
+
410
+ // No diagnostic
411
+ switch ( OverlyLargeSpaceEnum . case1, OverlyLargeSpaceEnum . case2) { // expected-error {{switch must be exhaustive}}
412
+ // expected-note@-1 {{do you want to add a default clause?}}
413
+ case ( . case0, _) : return true
414
+ case ( . case1, _) : return true
415
+ case ( . case2, _) : return true
416
+ case ( . case3, _) : return true
417
+ case ( . case4, _) : return true
418
+ case ( . case5, _) : return true
419
+ case ( . case6, _) : return true
420
+ case ( . case7, _) : return true
421
+ case ( . case8, _) : return true
422
+ case ( . case9, _) : return true
423
+ case ( . case10, _) : return true
424
+ }
425
+
426
+
427
+ // No diagnostic
428
+ switch ( OverlyLargeSpaceEnum . case1, OverlyLargeSpaceEnum . case2) {
429
+ case ( . case0, _) : return true
430
+ case ( . case1, _) : return true
431
+ case ( . case2, _) : return true
432
+ case ( . case3, _) : return true
433
+ case ( . case4, _) : return true
434
+ case ( . case5, _) : return true
435
+ case ( . case6, _) : return true
436
+ case ( . case7, _) : return true
437
+ case ( . case8, _) : return true
438
+ case ( . case9, _) : return true
439
+ case ( . case10, _) : return true
440
+ case ( . case11, _) : return true
441
+ }
442
+
443
+ // No diagnostic
444
+ switch ( OverlyLargeSpaceEnum . case1, OverlyLargeSpaceEnum . case2) {
445
+ case ( _, . case0) : return true
446
+ case ( _, . case1) : return true
447
+ case ( _, . case2) : return true
448
+ case ( _, . case3) : return true
449
+ case ( _, . case4) : return true
450
+ case ( _, . case5) : return true
451
+ case ( _, . case6) : return true
452
+ case ( _, . case7) : return true
453
+ case ( _, . case8) : return true
454
+ case ( _, . case9) : return true
455
+ case ( _, . case10) : return true
456
+ case ( _, . case11) : return true
457
+ }
458
+
459
+ // No diagnostic
460
+ switch ( OverlyLargeSpaceEnum . case1, OverlyLargeSpaceEnum . case2) {
461
+ case ( _, _) : return true
462
+ }
463
+
464
+ // No diagnostic
465
+ switch ( OverlyLargeSpaceEnum . case1, OverlyLargeSpaceEnum . case2) {
466
+ case ( . case0, . case0) : return true
467
+ case ( . case1, . case1) : return true
468
+ case ( . case2, . case2) : return true
469
+ case ( . case3, . case3) : return true
470
+ case _: return true
471
+ }
472
+ }
473
+
474
+ indirect enum InfinitelySized {
475
+ case one
476
+ case two
477
+ case recur( InfinitelySized )
478
+ case mutualRecur( MutuallyRecursive , InfinitelySized )
479
+ }
480
+
481
+ indirect enum MutuallyRecursive {
482
+ case one
483
+ case two
484
+ case recur( MutuallyRecursive )
485
+ case mutualRecur( InfinitelySized , MutuallyRecursive )
486
+ }
487
+
488
+ func infinitelySized( ) -> Bool {
489
+ switch ( InfinitelySized . one, InfinitelySized . one) { // expected-error {{switch must be exhaustive}}
490
+ // expected-note@-1 10 {{add missing case:}}
491
+ case ( . one, . one) : return true
492
+ case ( . two, . two) : return true
493
+ }
494
+
495
+ switch ( MutuallyRecursive . one, MutuallyRecursive . one) { // expected-error {{switch must be exhaustive}}
496
+ // expected-note@-1 10 {{add missing case:}}
497
+ case ( . one, . one) : return true
498
+ case ( . two, . two) : return true
499
+ }
500
+ }
0 commit comments