diff options
| author | Matthias Krüger <matthias.krueger@famsik.de> | 2021-12-15 10:57:01 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-12-15 10:57:01 +0100 |
| commit | 05b65adfb60760b9121a47d57ed888d6b83adf0c (patch) | |
| tree | 8cf2c4f93d9038abb75680cedb8fa1a61ee6692e /src | |
| parent | b507174e82bf6d54e235c4fe71e8fe216f80ce9f (diff) | |
| parent | f0c0732a36f798876b855df909b98f100e541a16 (diff) | |
| download | rust-05b65adfb60760b9121a47d57ed888d6b83adf0c.tar.gz rust-05b65adfb60760b9121a47d57ed888d6b83adf0c.zip | |
Rollup merge of #91915 - jackh726:issue-91899, r=Mark-Simulacrum
Add another regression test for unnormalized fn args with Self Closes #91899
Diffstat (limited to 'src')
| -rw-r--r-- | src/test/ui/fn/implied-bounds-unnorm-associated-type-3.rs | 25 | ||||
| -rw-r--r-- | src/test/ui/fn/implied-bounds-unnorm-associated-type-3.stderr | 12 |
2 files changed, 37 insertions, 0 deletions
diff --git a/src/test/ui/fn/implied-bounds-unnorm-associated-type-3.rs b/src/test/ui/fn/implied-bounds-unnorm-associated-type-3.rs new file mode 100644 index 00000000000..dc25ac08613 --- /dev/null +++ b/src/test/ui/fn/implied-bounds-unnorm-associated-type-3.rs @@ -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() {} diff --git a/src/test/ui/fn/implied-bounds-unnorm-associated-type-3.stderr b/src/test/ui/fn/implied-bounds-unnorm-associated-type-3.stderr new file mode 100644 index 00000000000..26eecf6a21d --- /dev/null +++ b/src/test/ui/fn/implied-bounds-unnorm-associated-type-3.stderr @@ -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`. |
