From 742e458102ff5236ecf24a05ab94898c76d6d1cf Mon Sep 17 00:00:00 2001 From: "Felix S. Klock II" Date: Fri, 7 Mar 2014 08:43:39 +0100 Subject: Add proper support for early/late distinction for lifetime bindings. Uses newly added Vec::partition method to simplify resolve_lifetime. --- .../regions-early-bound-error-method.rs | 35 ++++++++++++++++++++++ src/test/compile-fail/regions-early-bound-error.rs | 33 ++++++++++++++++++++ 2 files changed, 68 insertions(+) create mode 100644 src/test/compile-fail/regions-early-bound-error-method.rs create mode 100644 src/test/compile-fail/regions-early-bound-error.rs (limited to 'src/test/compile-fail') diff --git a/src/test/compile-fail/regions-early-bound-error-method.rs b/src/test/compile-fail/regions-early-bound-error-method.rs new file mode 100644 index 00000000000..9c8f8f8c30c --- /dev/null +++ b/src/test/compile-fail/regions-early-bound-error-method.rs @@ -0,0 +1,35 @@ +// 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +// Tests that you can use a fn lifetime parameter as part of +// the value for a type parameter in a bound. + +trait GetRef<'a> { + fn get(&self) -> &'a int; +} + +struct Box<'a> { + t: &'a int +} + +impl<'a> GetRef<'a> for Box<'a> { + fn get(&self) -> &'a int { + self.t + } +} + +impl<'a> Box<'a> { + fn or<'b,G:GetRef<'b>>(&self, g2: G) -> &'a int { + g2.get() //~ ERROR lifetime mismatch + } +} + +fn main() { +} diff --git a/src/test/compile-fail/regions-early-bound-error.rs b/src/test/compile-fail/regions-early-bound-error.rs new file mode 100644 index 00000000000..9cff4849cbe --- /dev/null +++ b/src/test/compile-fail/regions-early-bound-error.rs @@ -0,0 +1,33 @@ +// 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +// Tests that you can use a fn lifetime parameter as part of +// the value for a type parameter in a bound. + +trait GetRef<'a, T> { + fn get(&self) -> &'a T; +} + +struct Box<'a, T> { + t: &'a T +} + +impl<'a,T:Clone> GetRef<'a,T> for Box<'a,T> { + fn get(&self) -> &'a T { + self.t + } +} + +fn get<'a,'b,G:GetRef<'a, int>>(g1: G, b: &'b int) -> &'b int { + g1.get() //~ ERROR lifetime mismatch +} + +fn main() { +} -- cgit 1.4.1-3-g733a5