diff --git a/src/librustc/middle/typeck/check/vtable.rs b/src/librustc/middle/typeck/check/vtable.rs index f2d6171cc639265465f6ef6efc15d72c29585efd..b6d7cddda474587fd2688b75fca2d8b84c967ea0 100644 --- a/src/librustc/middle/typeck/check/vtable.rs +++ b/src/librustc/middle/typeck/check/vtable.rs @@ -733,7 +733,8 @@ fn mutability_allowed(a_mutbl: ast::Mutability, pub fn resolve_impl(tcx: &ty::ctxt, impl_item: &ast::Item, impl_generics: &ty::Generics, - impl_trait_ref: &ty::TraitRef) { + impl_trait_ref: &ty::TraitRef) +{ let param_env = ty::construct_parameter_environment( tcx, None, @@ -774,6 +775,7 @@ pub fn resolve_impl(tcx: &ty::ctxt, lookup_vtables_for_param(&vcx, impl_item.span, None, ¶m_bounds, t, false); + infcx.resolve_regions_and_report_errors(); let res = impl_res { trait_vtables: vtbls, diff --git a/src/test/compile-fail/trait-impl-of-supertrait-has-wrong-lifetime-parameters.rs b/src/test/compile-fail/trait-impl-of-supertrait-has-wrong-lifetime-parameters.rs new file mode 100644 index 0000000000000000000000000000000000000000..716362415a64a716e04df833290cb45ea5cbfe08 --- /dev/null +++ b/src/test/compile-fail/trait-impl-of-supertrait-has-wrong-lifetime-parameters.rs @@ -0,0 +1,41 @@ +// Copyright 2014 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +// Check that when we test the supertrait we ensure consistent use of +// lifetime parameters. In this case, implementing T2<'a,'b> requires +// an impl of T1<'a>, but we have an impl of T1<'b>. + +trait T1<'x> { + fn x(&self) -> &'x int; +} + +trait T2<'x, 'y> : T1<'x> { + fn y(&self) -> &'y int; +} + +struct S<'a, 'b> { + a: &'a int, + b: &'b int +} + +impl<'a,'b> T1<'b> for S<'a, 'b> { + fn x(&self) -> &'b int { + self.b + } +} + +impl<'a,'b> T2<'a, 'b> for S<'a, 'b> { //~ ERROR cannot infer an appropriate lifetime + fn y(&self) -> &'b int { + self.b + } +} + +pub fn main() { +}