From bf61bb6b7f6522dc78a7100c18282282206af14a Mon Sep 17 00:00:00 2001 From: Edward Wang Date: Tue, 24 Jun 2014 01:42:13 +0800 Subject: [PATCH] Add tests for #12470 and #14285 The #14869 removed `TraitStore` from `ty_trait` and represented trait reference as regular `ty_rptr`. An old bug of the missing constraint upon lifetime parameter of trait reference then is fixed as a side effect. Adds tests for affected bugs and closes them. Closes #12470. Closes #14285. --- src/test/compile-fail/issue-14285.rs | 25 +++++++++++++++++ src/test/compile-fail/isuue-12470.rs | 42 ++++++++++++++++++++++++++++ 2 files changed, 67 insertions(+) create mode 100644 src/test/compile-fail/issue-14285.rs create mode 100644 src/test/compile-fail/isuue-12470.rs diff --git a/src/test/compile-fail/issue-14285.rs b/src/test/compile-fail/issue-14285.rs new file mode 100644 index 00000000000..d5e608ecae3 --- /dev/null +++ b/src/test/compile-fail/issue-14285.rs @@ -0,0 +1,25 @@ +// Copyright 2012-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. + +trait Foo {} + +struct A; + +impl Foo for A {} + +struct B<'a>(&'a Foo); + +fn foo<'a>(a: &Foo) -> B<'a> { + B(a) //~ ERROR cannot infer an appropriate lifetime +} + +fn main() { + let _test = foo(&A); +} diff --git a/src/test/compile-fail/isuue-12470.rs b/src/test/compile-fail/isuue-12470.rs new file mode 100644 index 00000000000..18bfb7abe6c --- /dev/null +++ b/src/test/compile-fail/isuue-12470.rs @@ -0,0 +1,42 @@ +// Copyright 2012-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. + +trait X { + fn get_i(&self) -> int; +} + + +struct B { + i: int +} + +impl X for B { + fn get_i(&self) -> int { + self.i + } +} + +struct A<'a> { + p: &'a X +} + +fn make_a<'a>(p: &'a X) -> A<'a> { + A { p: p } +} + +fn make_make_a() -> A { + let b: Box = box B {i:1}; + let bb: &B = b; //~ ERROR does not live long enough + make_a(bb) +} + +fn main() { + let _a = make_make_a(); +} -- 2.44.0