about summary refs log tree commit diff
diff options
context:
space:
mode:
authormark <markm@cs.wisc.edu>2020-11-09 12:19:34 -0600
committermark <markm@cs.wisc.edu>2020-11-09 12:19:34 -0600
commit43e4783ce3d833af82d76f6be12f3f4863b0638c (patch)
tree7d88019d1687a37e43ec4d7ef5465532182534d9
parent459dae94a1c5ea658e78dbe99d88108d9cacc51d (diff)
downloadrust-43e4783ce3d833af82d76f6be12f3f4863b0638c.tar.gz
rust-43e4783ce3d833af82d76f6be12f3f4863b0638c.zip
address reviewer comments
-rw-r--r--compiler/rustc_mir_build/src/build/matches/test.rs11
-rw-r--r--src/test/ui/match/issue-72680.rs46
2 files changed, 29 insertions, 28 deletions
diff --git a/compiler/rustc_mir_build/src/build/matches/test.rs b/compiler/rustc_mir_build/src/build/matches/test.rs
index e4bc4c07432..07173f41cd6 100644
--- a/compiler/rustc_mir_build/src/build/matches/test.rs
+++ b/compiler/rustc_mir_build/src/build/matches/test.rs
@@ -671,12 +671,13 @@ impl<'a, 'tcx> Builder<'a, 'tcx> {
             (&TestKind::Range { .. }, _) => None,
 
             (&TestKind::Eq { .. } | &TestKind::Len { .. }, _) => {
-                // We do call `test()` below to see what kind of test `match_pair` would require.
-                // If it is the same test as `test`, then we can just use `test`.
+                // The call to `self.test(&match_pair)` below is not actually used to generate any
+                // MIR. Instead, we just want to compare with `test` (the parameter of the method)
+                // to see if it is the same.
                 //
-                // However, `test()` assumes that there won't be any or-patterns, so we need to
-                // specially handle that here and return `None` (since the `test` clearly doesn't
-                // apply to an or-pattern).
+                // However, at this point we can still encounter or-patterns that were extracted
+                // from previous calls to `sort_candidate`, so we need to manually address that
+                // case to avoid panicking in `self.test()`.
                 if let PatKind::Or { .. } = &*match_pair.pattern.kind {
                     return None;
                 }
diff --git a/src/test/ui/match/issue-72680.rs b/src/test/ui/match/issue-72680.rs
index 3e8febb63ad..e6a723a6609 100644
--- a/src/test/ui/match/issue-72680.rs
+++ b/src/test/ui/match/issue-72680.rs
@@ -3,39 +3,39 @@
 #![feature(or_patterns)]
 
 fn main() {
-    assert_eq!(f("", 0), true);
-    assert_eq!(f("a", 1), true);
-    assert_eq!(f("b", 1), true);
+    assert!(f("", 0));
+    assert!(f("a", 1));
+    assert!(f("b", 1));
 
-    assert_eq!(f("", 1), false);
-    assert_eq!(f("a", 0), false);
-    assert_eq!(f("b", 0), false);
+    assert!(!f("", 1));
+    assert!(!f("a", 0));
+    assert!(!f("b", 0));
 
-    assert_eq!(f("asdf", 032), false);
+    assert!(!f("asdf", 032));
 
     ////
 
-    assert_eq!(g(true, true, true), false);
-    assert_eq!(g(false, true, true), false);
-    assert_eq!(g(true, false, true), false);
-    assert_eq!(g(false, false, true), false);
-    assert_eq!(g(true, true, false), false);
+    assert!(!g(true, true, true));
+    assert!(!g(false, true, true));
+    assert!(!g(true, false, true));
+    assert!(!g(false, false, true));
+    assert!(!g(true, true, false));
 
-    assert_eq!(g(false, true, false), true);
-    assert_eq!(g(true, false, false), true);
-    assert_eq!(g(false, false, false), true);
+    assert!(g(false, true, false));
+    assert!(g(true, false, false));
+    assert!(g(false, false, false));
 
     ////
 
-    assert_eq!(h(true, true, true), false);
-    assert_eq!(h(false, true, true), false);
-    assert_eq!(h(true, false, true), false);
-    assert_eq!(h(false, false, true), false);
-    assert_eq!(h(true, true, false), false);
+    assert!(!h(true, true, true));
+    assert!(!h(false, true, true));
+    assert!(!h(true, false, true));
+    assert!(!h(false, false, true));
+    assert!(!h(true, true, false));
 
-    assert_eq!(h(false, true, false), true);
-    assert_eq!(h(true, false, false), true);
-    assert_eq!(h(false, false, false), true);
+    assert!(h(false, true, false));
+    assert!(h(true, false, false));
+    assert!(h(false, false, false));
 }
 
 fn f(s: &str, num: usize) -> bool {