diff options
| author | Vytautas Astrauskas <vastrauskas@gmail.com> | 2018-05-28 15:21:47 +0200 |
|---|---|---|
| committer | Vytautas Astrauskas <vastrauskas@gmail.com> | 2018-06-27 18:13:43 +0200 |
| commit | 612eeb1df7a2fb062a7bbfe23fb95b72b92de286 (patch) | |
| tree | 7464c218c6cd4540488ef69312c9a75ab95497a6 | |
| parent | 142c98dd5a9fbd60c13e62a5c1358a40ee622dbb (diff) | |
| download | rust-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.rs | 5 | ||||
| -rw-r--r-- | src/test/compile-fail/nll/issue-50716.rs | 26 |
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() {} |
