Skip to content

Commit

Permalink
Rollup merge of rust-lang#91915 - jackh726:issue-91899, r=Mark-Simula…
Browse files Browse the repository at this point in the history
…crum

Add another regression test for unnormalized fn args with Self

Closes rust-lang#91899
  • Loading branch information
matthiaskrgr authored Dec 14, 2021
2 parents 719eb55 + f0c0732 commit 9a08578
Show file tree
Hide file tree
Showing 2 changed files with 37 additions and 0 deletions.
25 changes: 25 additions & 0 deletions src/test/ui/fn/implied-bounds-unnorm-associated-type-3.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
// check-fail
// See issue #91899. If we treat unnormalized args as WF, `Self` can also be a
// source of unsoundness.

pub trait Yokeable<'a>: 'static {
type Output: 'a;
}

impl<'a, T: 'static + ?Sized> Yokeable<'a> for &'static T {
type Output = &'a T;
}

pub trait ZeroCopyFrom<C: ?Sized>: for<'a> Yokeable<'a> {
/// Clone the cart `C` into a [`Yokeable`] struct, which may retain references into `C`.
fn zero_copy_from<'b>(cart: &'b C) -> <Self as Yokeable<'b>>::Output;
}

impl<T> ZeroCopyFrom<[T]> for &'static [T] {
fn zero_copy_from<'b>(cart: &'b [T]) -> &'b [T] {
//~^ the parameter
cart
}
}

fn main() {}
12 changes: 12 additions & 0 deletions src/test/ui/fn/implied-bounds-unnorm-associated-type-3.stderr
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
error[E0310]: the parameter type `T` may not live long enough
--> $DIR/implied-bounds-unnorm-associated-type-3.rs:19:5
|
LL | fn zero_copy_from<'b>(cart: &'b [T]) -> &'b [T] {
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
= help: consider adding an explicit lifetime bound `T: 'static`...
= note: ...so that the type `[T]` will meet its required lifetime bounds

error: aborting due to previous error

For more information about this error, try `rustc --explain E0310`.

0 comments on commit 9a08578

Please sign in to comment.