From 7ad9ef3c450e538be87a8be90bfcc5b6c9928791 Mon Sep 17 00:00:00 2001 From: est31 Date: Thu, 17 May 2018 23:50:27 +0200 Subject: [PATCH] CheckLoopVisitor: also visit closure arguments This turns an ICE on this code: fn main() { |_: [u8; break]| (); } from 'assertion failed: self.tcx.sess.err_count() > 0', librustc_typeck/check/mod.rs to librustc_mir/hair/cx/expr.rs:543: invalid loop id for break: not inside loop scope which is at a later stage during compilation and most importantly fixes of bug #50576 will fix this as well. --- src/librustc_passes/loops.rs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/librustc_passes/loops.rs b/src/librustc_passes/loops.rs index 2368b1aca6948..670097e3a4856 100644 --- a/src/librustc_passes/loops.rs +++ b/src/librustc_passes/loops.rs @@ -82,7 +82,8 @@ impl<'a, 'hir> Visitor<'hir> for CheckLoopVisitor<'a, 'hir> { hir::ExprLoop(ref b, _, source) => { self.with_context(Loop(LoopKind::Loop(source)), |v| v.visit_block(&b)); } - hir::ExprClosure(.., b, _, _) => { + hir::ExprClosure(_, ref function_decl, b, _, _) => { + self.visit_fn_decl(&function_decl); self.with_context(Closure, |v| v.visit_nested_body(b)); } hir::ExprBlock(ref b, Some(_label)) => {