@@ -539,7 +539,7 @@ impl Matrix {
539
539
if let Some ( Pat :: Or ( pat_ids) ) = row. get_head ( ) . map ( |pat_id| pat_id. as_pat ( cx) ) {
540
540
// Or patterns are expanded here
541
541
for pat_id in pat_ids {
542
- self . 0 . push ( PatStack :: from_pattern ( pat_id) ) ;
542
+ self . 0 . push ( row . replace_head_with ( [ pat_id] . iter ( ) ) ) ;
543
543
}
544
544
} else {
545
545
self . 0 . push ( row) ;
@@ -1084,6 +1084,20 @@ fn main() {
1084
1084
) ;
1085
1085
}
1086
1086
1087
+ #[ test]
1088
+ fn or_pattern_no_diagnostic ( ) {
1089
+ check_diagnostics (
1090
+ r#"
1091
+ enum Either {A, B}
1092
+
1093
+ fn main() {
1094
+ match (Either::A, Either::B) {
1095
+ (Either::A | Either::B, _) => (),
1096
+ }
1097
+ }"# ,
1098
+ )
1099
+ }
1100
+
1087
1101
#[ test]
1088
1102
fn mismatched_types ( ) {
1089
1103
// Match statements with arms that don't match the
@@ -1335,30 +1349,6 @@ fn bang(never: !) {
1335
1349
) ;
1336
1350
}
1337
1351
1338
- #[ test]
1339
- fn or_pattern_panic ( ) {
1340
- check_diagnostics (
1341
- r#"
1342
- pub enum Category { Infinity, Zero }
1343
-
1344
- fn panic(a: Category, b: Category) {
1345
- match (a, b) {
1346
- (Category::Zero | Category::Infinity, _) => (),
1347
- (_, Category::Zero | Category::Infinity) => (),
1348
- }
1349
-
1350
- // FIXME: This is a false positive, but the code used to cause a panic in the match checker,
1351
- // so this acts as a regression test for that.
1352
- match (a, b) {
1353
- //^^^^^^ Missing match arm
1354
- (Category::Infinity, Category::Infinity) | (Category::Zero, Category::Zero) => (),
1355
- (Category::Infinity | Category::Zero, _) => (),
1356
- }
1357
- }
1358
- "# ,
1359
- ) ;
1360
- }
1361
-
1362
1352
#[ test]
1363
1353
fn unknown_type ( ) {
1364
1354
check_diagnostics (
0 commit comments