about summary refs log tree commit diff
diff options
context:
space:
mode:
authorMartin Nordholts <martin.nordholts@codetale.se>2024-06-07 20:59:31 +0200
committerMartin Nordholts <martin.nordholts@codetale.se>2024-06-08 17:48:21 +0200
commit1293ef735e251f8062d0a34a737fc675486afb74 (patch)
tree4e62a7b5cfeab25597b70f385fd6e565c6c3021b
parent2d28b6384e5e0a2c9d1500a1f65e35423453fbf6 (diff)
downloadrust-1293ef735e251f8062d0a34a737fc675486afb74.tar.gz
rust-1293ef735e251f8062d0a34a737fc675486afb74.zip
tests: Add ui/higher-ranked/trait-bounds/normalize-generic-arg.rs
-rw-r--r--tests/ui/higher-ranked/trait-bounds/rigid-equate-projections-in-higher-ranked-fn-signature.next.stderr9
-rw-r--r--tests/ui/higher-ranked/trait-bounds/rigid-equate-projections-in-higher-ranked-fn-signature.rs30
2 files changed, 39 insertions, 0 deletions
diff --git a/tests/ui/higher-ranked/trait-bounds/rigid-equate-projections-in-higher-ranked-fn-signature.next.stderr b/tests/ui/higher-ranked/trait-bounds/rigid-equate-projections-in-higher-ranked-fn-signature.next.stderr
new file mode 100644
index 00000000000..14a3d5e178d
--- /dev/null
+++ b/tests/ui/higher-ranked/trait-bounds/rigid-equate-projections-in-higher-ranked-fn-signature.next.stderr
@@ -0,0 +1,9 @@
+error[E0284]: type annotations needed: cannot satisfy `for<'a> <_ as Trait<'a>>::Assoc <: <T as Trait<'_>>::Assoc`
+  --> $DIR/rigid-equate-projections-in-higher-ranked-fn-signature.rs:27:50
+   |
+LL |     let _: for<'a> fn(<_ as Trait<'a>>::Assoc) = foo::<T>();
+   |                                                  ^^^^^^^^^^ cannot satisfy `for<'a> <_ as Trait<'a>>::Assoc <: <T as Trait<'_>>::Assoc`
+
+error: aborting due to 1 previous error
+
+For more information about this error, try `rustc --explain E0284`.
diff --git a/tests/ui/higher-ranked/trait-bounds/rigid-equate-projections-in-higher-ranked-fn-signature.rs b/tests/ui/higher-ranked/trait-bounds/rigid-equate-projections-in-higher-ranked-fn-signature.rs
new file mode 100644
index 00000000000..10dbc2a4a82
--- /dev/null
+++ b/tests/ui/higher-ranked/trait-bounds/rigid-equate-projections-in-higher-ranked-fn-signature.rs
@@ -0,0 +1,30 @@
+//@ revisions: current next
+//@[current] check-pass
+//@[next] compile-flags: -Znext-solver
+//@[next] check-fail
+//@ ignore-compare-mode-next-solver (explicit revisions)
+
+/// This triggers an ICE with (and without) `--emit metadata` using the old
+/// trait solver:
+/// ```
+/// rustc +nightly-2023-01-09 \
+///   tests/ui/higher-ranked/trait-bounds/rigid-equate-projections-in-higher-ranked-fn-signature.rs
+/// ```
+/// The ICE was unknowingly fixed by
+/// <https://github.com/rust-lang/rust/pull/101947> in `nightly-2023-01-10`.
+/// This is a regression test for that fixed ICE. For the next solver we simply
+/// make sure there is a compiler error.
+
+trait Trait<'a> {
+    type Assoc;
+}
+
+fn foo<T: for<'a> Trait<'a>>() -> for<'a> fn(<T as Trait<'a>>::Assoc) {
+    todo!()
+}
+
+fn bar<T: for<'a> Trait<'a>>() {
+    let _: for<'a> fn(<_ as Trait<'a>>::Assoc) = foo::<T>(); //[next]~ ERROR type annotations needed
+}
+
+fn main() {}