Add a regression test for #112895
Signed-off-by: Yuki Okushi <jtitor@2k36.org>
This commit is contained in:
parent
e4cd161006
commit
40f2fbf61e
@ -0,0 +1,29 @@
|
|||||||
|
// This test checks that we correctly reject the following unsound code.
|
||||||
|
|
||||||
|
trait Lengthen<T> {
|
||||||
|
fn lengthen(self) -> T;
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<'a> Lengthen<&'a str> for &'a str {
|
||||||
|
fn lengthen(self) -> &'a str { self }
|
||||||
|
}
|
||||||
|
|
||||||
|
trait Gat {
|
||||||
|
type Gat<'a>: for<'b> Lengthen<Self::Gat<'b>>;
|
||||||
|
|
||||||
|
fn lengthen(s: Self::Gat<'_>) -> Self::Gat<'static> {
|
||||||
|
s.lengthen()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Gat for () {
|
||||||
|
type Gat<'a> = &'a str; //~ ERROR: implementation of `Lengthen` is not general enough
|
||||||
|
}
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
let s = "hello, garbage".to_string();
|
||||||
|
let borrow: &'static str = <() as Gat>::lengthen(&s);
|
||||||
|
drop(s);
|
||||||
|
|
||||||
|
println!("{borrow}");
|
||||||
|
}
|
@ -0,0 +1,11 @@
|
|||||||
|
error: implementation of `Lengthen` is not general enough
|
||||||
|
--> $DIR/gat-bounds-not-checked-with-right-substitutions.rs:20:20
|
||||||
|
|
|
||||||
|
LL | type Gat<'a> = &'a str;
|
||||||
|
| ^^^^^^^ implementation of `Lengthen` is not general enough
|
||||||
|
|
|
||||||
|
= note: `Lengthen<&'0 str>` would have to be implemented for the type `&'a str`, for any lifetime `'0`...
|
||||||
|
= note: ...but `Lengthen<&'1 str>` is actually implemented for the type `&'1 str`, for some specific lifetime `'1`
|
||||||
|
|
||||||
|
error: aborting due to previous error
|
||||||
|
|
Loading…
x
Reference in New Issue
Block a user