about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorMatthias Krüger <matthias.krueger@famsik.de>2021-12-15 10:57:01 +0100
committerGitHub <noreply@github.com>2021-12-15 10:57:01 +0100
commit05b65adfb60760b9121a47d57ed888d6b83adf0c (patch)
tree8cf2c4f93d9038abb75680cedb8fa1a61ee6692e /src
parentb507174e82bf6d54e235c4fe71e8fe216f80ce9f (diff)
parentf0c0732a36f798876b855df909b98f100e541a16 (diff)
downloadrust-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.rs25
-rw-r--r--src/test/ui/fn/implied-bounds-unnorm-associated-type-3.stderr12
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`.