diff --git a/src/librustc/cfg/construct.rs b/src/librustc/cfg/construct.rs index d8cf147e3ee4b..7e03288f57284 100644 --- a/src/librustc/cfg/construct.rs +++ b/src/librustc/cfg/construct.rs @@ -179,7 +179,7 @@ impl<'a, 'tcx> CFGBuilder<'a, 'tcx> { fn expr(&mut self, expr: &hir::Expr, pred: CFGIndex) -> CFGIndex { match expr.node { - hir::ExprBlock(ref blk) => { + hir::ExprBlock(ref blk, _) => { let blk_exit = self.block(&blk, pred); self.add_ast_node(expr.hir_id.local_id, &[blk_exit]) } diff --git a/src/librustc/hir/intravisit.rs b/src/librustc/hir/intravisit.rs index 1fb496cca629e..59b058e98611c 100644 --- a/src/librustc/hir/intravisit.rs +++ b/src/librustc/hir/intravisit.rs @@ -1015,7 +1015,10 @@ pub fn walk_expr<'v, V: Visitor<'v>>(visitor: &mut V, expression: &'v Expr) { expression.span, expression.id) } - ExprBlock(ref block) => visitor.visit_block(block), + ExprBlock(ref block, ref opt_label) => { + walk_list!(visitor, visit_label, opt_label); + visitor.visit_block(block); + } ExprAssign(ref left_hand_expression, ref right_hand_expression) => { visitor.visit_expr(right_hand_expression); visitor.visit_expr(left_hand_expression) diff --git a/src/librustc/hir/lowering.rs b/src/librustc/hir/lowering.rs index 7a360f7ee43d4..09fff64094f59 100644 --- a/src/librustc/hir/lowering.rs +++ b/src/librustc/hir/lowering.rs @@ -3048,7 +3048,7 @@ impl<'a> LoweringContext<'a> { ); block.expr = Some(this.wrap_in_try_constructor( "from_ok", tail, unstable_span)); - hir::ExprBlock(P(block)) + hir::ExprBlock(P(block), None) }) } ExprKind::Match(ref expr, ref arms) => hir::ExprMatch( @@ -3100,7 +3100,9 @@ impl<'a> LoweringContext<'a> { }) }) } - ExprKind::Block(ref blk) => hir::ExprBlock(self.lower_block(blk, false)), + ExprKind::Block(ref blk, opt_label) => { + hir::ExprBlock(self.lower_block(blk, false), self.lower_label(opt_label)) + } ExprKind::Assign(ref el, ref er) => { hir::ExprAssign(P(self.lower_expr(el)), P(self.lower_expr(er))) } @@ -3843,7 +3845,7 @@ impl<'a> LoweringContext<'a> { } fn expr_block(&mut self, b: P, attrs: ThinVec) -> hir::Expr { - self.expr(b.span, hir::ExprBlock(b), attrs) + self.expr(b.span, hir::ExprBlock(b, None), attrs) } fn expr_tuple(&mut self, sp: Span, exprs: hir::HirVec) -> P { diff --git a/src/librustc/hir/mod.rs b/src/librustc/hir/mod.rs index 3f49e0bfd1983..722a920d91c68 100644 --- a/src/librustc/hir/mod.rs +++ b/src/librustc/hir/mod.rs @@ -1381,8 +1381,8 @@ pub enum Expr_ { /// This may also be a generator literal, indicated by the final boolean, /// in that case there is an GeneratorClause. ExprClosure(CaptureClause, P, BodyId, Span, Option), - /// A block (`{ ... }`) - ExprBlock(P), + /// A block (`'label: { ... }`) + ExprBlock(P, Option