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() {}