Fix a bug with return in anonymous consts

This commit is contained in:
varkor 2018-07-01 17:23:48 +01:00
parent b58b721921
commit c6bbee802a
3 changed files with 17 additions and 8 deletions

View File

@ -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 {

View File

@ -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
}

View File

@ -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`.