Skip to content

Commit bf61bb6

Browse files
edwardwalexcrichton
authored andcommitted
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.
1 parent d58412b commit bf61bb6

File tree

2 files changed

+67
-0
lines changed

2 files changed

+67
-0
lines changed

src/test/compile-fail/issue-14285.rs

+25
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
// Copyright 2012-2014 The Rust Project Developers. See the COPYRIGHT
2+
// file at the top-level directory of this distribution and at
3+
// http://rust-lang.org/COPYRIGHT.
4+
//
5+
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
6+
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
7+
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
8+
// option. This file may not be copied, modified, or distributed
9+
// except according to those terms.
10+
11+
trait Foo {}
12+
13+
struct A;
14+
15+
impl Foo for A {}
16+
17+
struct B<'a>(&'a Foo);
18+
19+
fn foo<'a>(a: &Foo) -> B<'a> {
20+
B(a) //~ ERROR cannot infer an appropriate lifetime
21+
}
22+
23+
fn main() {
24+
let _test = foo(&A);
25+
}

src/test/compile-fail/isuue-12470.rs

+42
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
// Copyright 2012-2014 The Rust Project Developers. See the COPYRIGHT
2+
// file at the top-level directory of this distribution and at
3+
// http://rust-lang.org/COPYRIGHT.
4+
//
5+
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
6+
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
7+
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
8+
// option. This file may not be copied, modified, or distributed
9+
// except according to those terms.
10+
11+
trait X {
12+
fn get_i(&self) -> int;
13+
}
14+
15+
16+
struct B {
17+
i: int
18+
}
19+
20+
impl X for B {
21+
fn get_i(&self) -> int {
22+
self.i
23+
}
24+
}
25+
26+
struct A<'a> {
27+
p: &'a X
28+
}
29+
30+
fn make_a<'a>(p: &'a X) -> A<'a> {
31+
A { p: p }
32+
}
33+
34+
fn make_make_a() -> A {
35+
let b: Box<B> = box B {i:1};
36+
let bb: &B = b; //~ ERROR does not live long enough
37+
make_a(bb)
38+
}
39+
40+
fn main() {
41+
let _a = make_make_a();
42+
}

0 commit comments

Comments
 (0)