diff options
| author | kennytm <kennytm@gmail.com> | 2018-05-23 00:26:08 +0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2018-05-23 00:26:08 +0800 |
| commit | eb92280287ff15e6683a7a32cd1c52f4a0493501 (patch) | |
| tree | f4c5708a514a96443dd8511860983fa45a58c05d /src | |
| parent | 20298a93ab4a886960313d056932ac16a29901fb (diff) | |
| parent | 7ad9ef3c450e538be87a8be90bfcc5b6c9928791 (diff) | |
| download | rust-eb92280287ff15e6683a7a32cd1c52f4a0493501.tar.gz rust-eb92280287ff15e6683a7a32cd1c52f4a0493501.zip | |
Rollup merge of #50849 - est31:visit_closure_args, r=michaelwoerister
CheckLoopVisitor: also visit closure arguments
This turns the ICE #50581 in this code:
```rust
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 an ICE as well but at a later stage during compilation and most importantly
fixes of bug #50576 will fix this as well.
As this "only" moves an ICE to a later stage, I didn't add any tests.
Now I have manually verified the default impls of the visitor trait to check whether we have missed any other opportunity to visit more stuff and coudln't find anything (except the missing `break` visit I've fixed in #50829 but that one was already r+'d so I didn't want to push more commits).
Diffstat (limited to 'src')
| -rw-r--r-- | src/librustc_passes/loops.rs | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/src/librustc_passes/loops.rs b/src/librustc_passes/loops.rs index ac37937509e..4719f00b4d2 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)) => { |
