diff options
| author | Esteban Küber <esteban@kuber.com.ar> | 2019-05-08 10:23:55 -0700 |
|---|---|---|
| committer | Esteban Küber <esteban@kuber.com.ar> | 2019-05-08 10:23:55 -0700 |
| commit | cc40f41ee5baefa0dc1845dd9d794abe90511161 (patch) | |
| tree | fb6be736659941028d131ed16b539e1791f9927e /src | |
| parent | 33cde4aac2ec1b0a493d0acaa4c4fb45de0c6e94 (diff) | |
| download | rust-cc40f41ee5baefa0dc1845dd9d794abe90511161.tar.gz rust-cc40f41ee5baefa0dc1845dd9d794abe90511161.zip | |
Instead of ICEing on incorrect pattern, use delay_span_bug
Diffstat (limited to 'src')
| -rw-r--r-- | src/librustc/middle/mem_categorization.rs | 12 | ||||
| -rw-r--r-- | src/test/ui/fn-in-pat.rs | 16 | ||||
| -rw-r--r-- | src/test/ui/fn-in-pat.stderr | 9 |
3 files changed, 35 insertions, 2 deletions
diff --git a/src/librustc/middle/mem_categorization.rs b/src/librustc/middle/mem_categorization.rs index f6caf357b39..7edd5c5a9de 100644 --- a/src/librustc/middle/mem_categorization.rs +++ b/src/librustc/middle/mem_categorization.rs @@ -1300,8 +1300,16 @@ impl<'a, 'gcx, 'tcx> MemCategorizationContext<'a, 'gcx, 'tcx> { } } 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 index 00000000000..ed76b2c5db0 --- /dev/null +++ b/src/test/ui/fn-in-pat.rs @@ -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 index 00000000000..eee97fe9587 --- /dev/null +++ b/src/test/ui/fn-in-pat.stderr @@ -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`. |
