diff options
| author | Niko Matsakis <niko@alum.mit.edu> | 2018-01-10 10:14:20 -0500 |
|---|---|---|
| committer | Niko Matsakis <niko@alum.mit.edu> | 2018-01-10 10:15:08 -0500 |
| commit | 00ce7eed7d03b63a91c90d1fc5736b1f6450e239 (patch) | |
| tree | ee44b811d2b2af9500bdfca8eb5fab28e2c091aa /src | |
| parent | 27ede55414e01f13c6869a8763da207e544cc6ad (diff) | |
| download | rust-00ce7eed7d03b63a91c90d1fc5736b1f6450e239.tar.gz rust-00ce7eed7d03b63a91c90d1fc5736b1f6450e239.zip | |
resolve type and region variables in "NLL dropck"
Fixes #47022.
Diffstat (limited to 'src')
| -rw-r--r-- | src/librustc_mir/borrow_check/nll/type_check/liveness.rs | 1 | ||||
| -rw-r--r-- | src/test/ui/nll/issue-47022.rs | 47 |
2 files changed, 48 insertions, 0 deletions
diff --git a/src/librustc_mir/borrow_check/nll/type_check/liveness.rs b/src/librustc_mir/borrow_check/nll/type_check/liveness.rs index 50b38f9b46b..8a0578ae4d4 100644 --- a/src/librustc_mir/borrow_check/nll/type_check/liveness.rs +++ b/src/librustc_mir/borrow_check/nll/type_check/liveness.rs @@ -214,6 +214,7 @@ impl<'gen, 'typeck, 'flow, 'gcx, 'tcx> TypeLivenessGenerator<'gen, 'typeck, 'flo // associated types here and possibly recursively process. for ty in dtorck_types { let ty = self.cx.normalize(&ty, location); + let ty = self.cx.infcx.resolve_type_and_region_vars_if_possible(&ty); match ty.sty { ty::TyParam(..) | ty::TyProjection(..) | ty::TyAnon(..) => { let cause = Cause::DropVar(dropped_local, location); diff --git a/src/test/ui/nll/issue-47022.rs b/src/test/ui/nll/issue-47022.rs new file mode 100644 index 00000000000..a7362c34c17 --- /dev/null +++ b/src/test/ui/nll/issue-47022.rs @@ -0,0 +1,47 @@ +// Copyright 2017 The Rust Project Developers. See the COPYRIGHT +// file at the top-level directory of this distribution and at +// http://rust-lang.org/COPYRIGHT. +// +// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or +// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license +// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +// must-compile-successfully + +#![allow(warnings)] +#![feature(nll)] + +struct LoadedObject { + bodies: Vec<Body>, + color: Color, +} + +struct Body; + +#[derive(Clone)] +struct Color; + +struct Graphic { + color: Color, +} + +fn convert(objects: Vec<LoadedObject>) -> (Vec<Body>, Vec<Graphic>) { + objects + .into_iter() + .flat_map(|LoadedObject { bodies, color, .. }| { + bodies.into_iter().map(move |body| { + ( + body, + Graphic { + color: color.clone(), + }, + ) + }) + }) + .unzip() +} + +fn main() {} + |
