diff options
| author | varkor <github@varkor.com> | 2018-07-01 17:23:48 +0100 |
|---|---|---|
| committer | varkor <github@varkor.com> | 2018-07-02 19:43:16 +0100 |
| commit | c6bbee802abb174243fac490782baa680e4f67b4 (patch) | |
| tree | 9ae26e560151fe6dab94d8b64250c6e19df0455d | |
| parent | b58b7219218f1862219e5d4d720174896f184989 (diff) | |
| download | rust-c6bbee802abb174243fac490782baa680e4f67b4.tar.gz rust-c6bbee802abb174243fac490782baa680e4f67b4.zip | |
Fix a bug with return in anonymous consts
| -rw-r--r-- | src/librustc_typeck/check/writeback.rs | 12 | ||||
| -rw-r--r-- | src/test/ui/issue-51714.rs | 5 | ||||
| -rw-r--r-- | src/test/ui/issue-51714.stderr | 8 |
3 files changed, 17 insertions, 8 deletions
diff --git a/src/librustc_typeck/check/writeback.rs b/src/librustc_typeck/check/writeback.rs index f7d1e407945..2445cae9860 100644 --- a/src/librustc_typeck/check/writeback.rs +++ b/src/librustc_typeck/check/writeback.rs @@ -257,13 +257,11 @@ impl<'cx, 'gcx, 'tcx> Visitor<'gcx> for WritebackCx<'cx, 'gcx, 'tcx> { fn visit_pat(&mut self, p: &'gcx hir::Pat) { match p.node { hir::PatKind::Binding(..) => { - let bm = *self.fcx - .tables - .borrow() - .pat_binding_modes() - .get(p.hir_id) - .expect("missing binding mode"); - self.tables.pat_binding_modes_mut().insert(p.hir_id, bm); + if let Some(&bm) = self.fcx.tables.borrow().pat_binding_modes().get(p.hir_id) { + self.tables.pat_binding_modes_mut().insert(p.hir_id, bm); + } else { + self.tcx().sess.delay_span_bug(p.span, "missing binding mode"); + } } hir::PatKind::Struct(_, ref fields, _) => { for field in fields { diff --git a/src/test/ui/issue-51714.rs b/src/test/ui/issue-51714.rs index 96c5b92ddfd..c0e62dcc9ce 100644 --- a/src/test/ui/issue-51714.rs +++ b/src/test/ui/issue-51714.rs @@ -17,3 +17,8 @@ fn foo() { [(); return || {}]; //~^ ERROR return statement outside of function body } + +fn bar() { + [(); return |ice| {}]; + //~^ ERROR return statement outside of function body +} diff --git a/src/test/ui/issue-51714.stderr b/src/test/ui/issue-51714.stderr index 746adea6b7e..3e61df8062d 100644 --- a/src/test/ui/issue-51714.stderr +++ b/src/test/ui/issue-51714.stderr @@ -10,6 +10,12 @@ error[E0572]: return statement outside of function body LL | [(); return || {}]; | ^^^^^^^^^^^^ -error: aborting due to 2 previous errors +error[E0572]: return statement outside of function body + --> $DIR/issue-51714.rs:22:10 + | +LL | [(); return |ice| {}]; + | ^^^^^^^^^^^^^^^ + +error: aborting due to 3 previous errors For more information about this error, try `rustc --explain E0572`. |
