summaryrefslogtreecommitdiffstats
path: root/src/test/ui/fn/implied-bounds-unnorm-associated-type-3.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/test/ui/fn/implied-bounds-unnorm-associated-type-3.rs')
-rw-r--r--src/test/ui/fn/implied-bounds-unnorm-associated-type-3.rs25
1 files changed, 25 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 000000000..dc25ac086
--- /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() {}