test implied bounds + nested proj oblig
This commit is contained in:
parent
f25cb83296
commit
8691b96eee
2 changed files with 42 additions and 0 deletions
|
@ -0,0 +1,27 @@
|
||||||
|
// Test for a less than ideal interaction of implied bounds and normalization.
|
||||||
|
trait Tr {
|
||||||
|
type Ty;
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<T: 'static> Tr for T {
|
||||||
|
type Ty = &'static T;
|
||||||
|
}
|
||||||
|
|
||||||
|
// `<&'a u8 as Tr>::Ty` should cause an error because `&'a u8: Tr` doesn't hold for
|
||||||
|
// all possible 'a. However, we consider normalized types for implied bounds.
|
||||||
|
//
|
||||||
|
// We normalize this projection to `&'static &'a u8` and add a nested `&'a u8: 'static`
|
||||||
|
// bound. This bound is then proven using the implied bounds for `&'static &'a u8` which
|
||||||
|
// we only get by normalizing in the first place.
|
||||||
|
fn test<'a>(x: &'a u8, _wf: <&'a u8 as Tr>::Ty) -> &'static u8 { x }
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
// This works as we have 'static references due to promotion.
|
||||||
|
let _: &'static u8 = test(&3, &&3);
|
||||||
|
// This causes an error because the projection requires 'a to be 'static.
|
||||||
|
// It would be unsound if this compiled.
|
||||||
|
let x: u8 = 3;
|
||||||
|
let _: &'static u8 = test(&x, &&3);
|
||||||
|
//~^ ERROR `x` does not live long enough
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,15 @@
|
||||||
|
error[E0597]: `x` does not live long enough
|
||||||
|
--> $DIR/assoc-ty-wf-used-to-get-assoc-ty.rs:24:31
|
||||||
|
|
|
||||||
|
LL | let _: &'static u8 = test(&x, &&3);
|
||||||
|
| -----^^------
|
||||||
|
| | |
|
||||||
|
| | borrowed value does not live long enough
|
||||||
|
| argument requires that `x` is borrowed for `'static`
|
||||||
|
...
|
||||||
|
LL | }
|
||||||
|
| - `x` dropped here while still borrowed
|
||||||
|
|
||||||
|
error: aborting due to previous error
|
||||||
|
|
||||||
|
For more information about this error, try `rustc --explain E0597`.
|
Loading…
Add table
Reference in a new issue