]> git.lizzy.rs Git - rust.git/commitdiff
Auto merge of #47322 - nikomatsakis:nll-ice, r=pnkfelix
authorbors <bors@rust-lang.org>
Sun, 14 Jan 2018 14:11:59 +0000 (14:11 +0000)
committerbors <bors@rust-lang.org>
Sun, 14 Jan 2018 14:11:59 +0000 (14:11 +0000)
resolve type and region variables in "NLL dropck"

Fixes #47022.

r? @pnkfelix

src/librustc_mir/borrow_check/nll/type_check/liveness.rs
src/test/ui/nll/issue-47022.rs [new file with mode: 0644]

index 50b38f9b46b618b4b2a03ef43198fee253e71e9d..8a0578ae4d45c302f36c5c4a791c63fa99de9a2c 100644 (file)
@@ -214,6 +214,7 @@ fn add_drop_live_constraint(
             // 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 (file)
index 0000000..a7362c3
--- /dev/null
@@ -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() {}
+