]> git.lizzy.rs Git - rust.git/commitdiff
Instead of ICEing on incorrect pattern, use delay_span_bug
authorEsteban Küber <esteban@kuber.com.ar>
Wed, 8 May 2019 17:23:55 +0000 (10:23 -0700)
committerEsteban Küber <esteban@kuber.com.ar>
Wed, 8 May 2019 17:23:55 +0000 (10:23 -0700)
src/librustc/middle/mem_categorization.rs
src/test/ui/fn-in-pat.rs [new file with mode: 0644]
src/test/ui/fn-in-pat.stderr [new file with mode: 0644]

index f6caf357b393d6376e52e566c8780290eb6aeec1..7edd5c5a9de1b865f5d51b15b4d5d70c66ec0a87 100644 (file)
@@ -1300,8 +1300,16 @@ fn cat_pattern_<F>(&self, mut cmt: cmt<'tcx>, pat: &hir::Pat, op: &mut F) -> McR
                         }
                     }
                     def => {
-                        span_bug!(pat.span, "tuple struct pattern didn't resolve \
-                                             to variant or struct {:?}", def);
+                        debug!(
+                            "tuple struct pattern didn't resolve to variant or struct {:?} at {:?}",
+                            def,
+                            pat.span,
+                        );
+                        self.tcx.sess.delay_span_bug(pat.span, &format!(
+                            "tuple struct pattern didn't resolve to variant or struct {:?}",
+                            def,
+                        ));
+                        return Err(());
                     }
                 };
 
diff --git a/src/test/ui/fn-in-pat.rs b/src/test/ui/fn-in-pat.rs
new file mode 100644 (file)
index 0000000..ed76b2c
--- /dev/null
@@ -0,0 +1,16 @@
+struct A {}
+
+impl A {
+    fn new() {}
+}
+
+fn hof<F>(_: F) where F: FnMut(()) {}
+
+fn ice() {
+    hof(|c| match c {
+        A::new() => (), //~ ERROR expected tuple struct/variant, found method
+        _ => ()
+    })
+}
+
+fn main() {}
diff --git a/src/test/ui/fn-in-pat.stderr b/src/test/ui/fn-in-pat.stderr
new file mode 100644 (file)
index 0000000..eee97fe
--- /dev/null
@@ -0,0 +1,9 @@
+error[E0164]: expected tuple struct/variant, found method `<A>::new`
+  --> $DIR/fn-in-pat.rs:11:9
+   |
+LL |         A::new() => (),
+   |         ^^^^^^^^ not a tuple variant or struct
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0164`.