diff options
| author | Eduard-Mihai Burtescu <edy.burt@gmail.com> | 2016-03-19 12:30:01 +0200 |
|---|---|---|
| committer | Eduard-Mihai Burtescu <edy.burt@gmail.com> | 2016-03-19 12:30:01 +0200 |
| commit | 34bd8f3a20cde10bb94aac7a4aca5c06f05d2b01 (patch) | |
| tree | a7d809ac70f4e0880e76856f31b8e962769b20e7 /src | |
| parent | b29e299c180ca62403595b7b25f23545943d38b1 (diff) | |
| parent | fcaefcfdb0489e86d9ba7ad6ab75b41ae33bc6c3 (diff) | |
| download | rust-34bd8f3a20cde10bb94aac7a4aca5c06f05d2b01.tar.gz rust-34bd8f3a20cde10bb94aac7a4aca5c06f05d2b01.zip | |
Rollup merge of #32332 - jonas-schievink:issue32323, r=arielb1
liveness: substitute bound regions with free ones before normalizing the return type Fixes #32323 r? @arielb1
Diffstat (limited to 'src')
| -rw-r--r-- | src/librustc/middle/liveness.rs | 4 | ||||
| -rw-r--r-- | src/test/compile-fail/issue-32323.rs | 18 |
2 files changed, 21 insertions, 1 deletions
diff --git a/src/librustc/middle/liveness.rs b/src/librustc/middle/liveness.rs index d78e0ca79aa..d5c0980b280 100644 --- a/src/librustc/middle/liveness.rs +++ b/src/librustc/middle/liveness.rs @@ -115,6 +115,7 @@ use middle::pat_util; use middle::ty::{self, TyCtxt, ParameterEnvironment}; use middle::traits::{self, ProjectionMode}; use middle::infer; +use middle::subst::Subst; use lint; use util::nodemap::NodeMap; @@ -1491,6 +1492,7 @@ impl<'a, 'tcx> Liveness<'a, 'tcx> { if self.live_on_entry(entry_ln, self.s.no_ret_var).is_some() => { let param_env = ParameterEnvironment::for_item(&self.ir.tcx, id); + let t_ret_subst = t_ret.subst(&self.ir.tcx, ¶m_env.free_substs); let infcx = infer::new_infer_ctxt(&self.ir.tcx, &self.ir.tcx.tables, Some(param_env), @@ -1498,7 +1500,7 @@ impl<'a, 'tcx> Liveness<'a, 'tcx> { let cause = traits::ObligationCause::dummy(); let norm = traits::fully_normalize(&infcx, cause, - &t_ret); + &t_ret_subst); if norm.unwrap().is_nil() { // for nil return types, it is ok to not return a value expl. diff --git a/src/test/compile-fail/issue-32323.rs b/src/test/compile-fail/issue-32323.rs new file mode 100644 index 00000000000..e3461e52e1c --- /dev/null +++ b/src/test/compile-fail/issue-32323.rs @@ -0,0 +1,18 @@ +// Copyright 2016 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. + +pub trait Tr<'a> { + type Out; +} + +pub fn f<'a, T: Tr<'a>>() -> <T as Tr<'a>>::Out {} +//~^ ERROR not all control paths return a value + +pub fn main() {} |
