about summary refs log tree commit diff
diff options
context:
space:
mode:
authorDylan DPC <99973273+Dylan-DPC@users.noreply.github.com>2022-07-15 10:39:47 +0530
committerGitHub <noreply@github.com>2022-07-15 10:39:47 +0530
commit7976cd6eb05fc63228398b65ebe9227678c43cc9 (patch)
treec5ca9faabd087992a99dd9968699804286fdfa6f
parent6dae197afadd3d7bf532ebbfd6e9acbc6f16be2f (diff)
parent62edbbecb7f8bc5637cda78febdd5cf3b15d7d45 (diff)
Rollup merge of #99257 - Manishearth:regression, r=jackh726
Add regression test for #89436

I never got around to adding such a test.

In general I think the `yoke` crate has a bunch of interesting testcases that exercise various edges of the algorithms here, it would be nice if we could simply depend on the crate and add some tests that exercise it, but I don't think that's possible. Do you or `@eddyb` think there's any use trying to upstream a bunch of common yoke minimal working example code to the testsuite and having a ton of yoke tests?
-rw-r--r--src/test/ui/higher-rank-trait-bounds/normalize-under-binder/issue-89436.rs44
1 files changed, 44 insertions, 0 deletions
diff --git a/src/test/ui/higher-rank-trait-bounds/normalize-under-binder/issue-89436.rs b/src/test/ui/higher-rank-trait-bounds/normalize-under-binder/issue-89436.rs
new file mode 100644
index 00000000000..f7e467b3786
--- /dev/null
+++ b/src/test/ui/higher-rank-trait-bounds/normalize-under-binder/issue-89436.rs
@@ -0,0 +1,44 @@
+// check-pass
+
+#![allow(unused)]
+
+trait MiniYokeable<'a> {
+    type Output;
+}
+
+struct MiniYoke<Y: for<'a> MiniYokeable<'a>> {
+    pub yokeable: Y,
+}
+
+fn map_project_broken<Y, P>(
+    source: MiniYoke<Y>,
+    f: impl for<'a> FnOnce(
+        <Y as MiniYokeable<'a>>::Output,
+        core::marker::PhantomData<&'a ()>,
+    ) -> <P as MiniYokeable<'a>>::Output,
+) -> MiniYoke<P>
+where
+    Y: for<'a> MiniYokeable<'a>,
+    P: for<'a> MiniYokeable<'a>
+{
+    unimplemented!()
+}
+
+struct Bar<'a> {
+    string_1: &'a str,
+    string_2: &'a str,
+}
+
+impl<'a> MiniYokeable<'a> for Bar<'static> {
+    type Output = Bar<'a>;
+}
+
+impl<'a> MiniYokeable<'a> for &'static str {
+    type Output = &'a str;
+}
+
+fn demo_broken(bar: MiniYoke<Bar<'static>>) -> MiniYoke<&'static str> {
+    map_project_broken(bar, |bar, _| bar.string_1)
+}
+
+fn main() {}