about summary refs log tree commit diff
diff options
context:
space:
mode:
authorVytautas Astrauskas <vastrauskas@gmail.com>2018-05-28 15:21:47 +0200
committerVytautas Astrauskas <vastrauskas@gmail.com>2018-06-27 18:13:43 +0200
commit612eeb1df7a2fb062a7bbfe23fb95b72b92de286 (patch)
tree7464c218c6cd4540488ef69312c9a75ab95497a6
parent142c98dd5a9fbd60c13e62a5c1358a40ee622dbb (diff)
downloadrust-612eeb1df7a2fb062a7bbfe23fb95b72b92de286.tar.gz
rust-612eeb1df7a2fb062a7bbfe23fb95b72b92de286.zip
Fix NLL issue 50716 and add a regression test.
-rw-r--r--src/librustc_mir/borrow_check/nll/type_check/mod.rs5
-rw-r--r--src/test/compile-fail/nll/issue-50716.rs26
2 files changed, 31 insertions, 0 deletions
diff --git a/src/librustc_mir/borrow_check/nll/type_check/mod.rs b/src/librustc_mir/borrow_check/nll/type_check/mod.rs
index d25cec79791..0c5e4f40531 100644
--- a/src/librustc_mir/borrow_check/nll/type_check/mod.rs
+++ b/src/librustc_mir/borrow_check/nll/type_check/mod.rs
@@ -873,6 +873,11 @@ impl<'a, 'gcx, 'tcx> TypeChecker<'a, 'gcx, 'tcx> {
                     );
                 }
                 self.check_rvalue(mir, rv, location);
+                let trait_ref = ty::TraitRef {
+                    def_id: tcx.lang_items().sized_trait().unwrap(),
+                    substs: tcx.mk_substs_trait(place_ty, &[]),
+                };
+                self.prove_trait_ref(trait_ref, location);
             }
             StatementKind::SetDiscriminant {
                 ref place,
diff --git a/src/test/compile-fail/nll/issue-50716.rs b/src/test/compile-fail/nll/issue-50716.rs
new file mode 100644
index 00000000000..7e3e98a851b
--- /dev/null
+++ b/src/test/compile-fail/nll/issue-50716.rs
@@ -0,0 +1,26 @@
+// Copyright 2012 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.
+//
+// Regression test for the issue #50716: NLL ignores lifetimes bounds
+// derived from `Sized` requirements
+
+trait A {
+    type X: ?Sized;
+}
+
+fn foo<'a, T: 'static>(s: Box<<&'a T as A>::X>)
+where
+    for<'b> &'b T: A,
+    <&'static T as A>::X: Sized
+{
+    let _x = *s; //~ ERROR mismatched types [E0308]
+}
+
+fn main() {}