about summary refs log tree commit diff
path: root/tests
diff options
context:
space:
mode:
authorMuhammad Mominul Huque <mominul2082@gmail.com>2025-06-24 19:55:42 +0600
committerMuhammad Mominul Huque <mominul2082@gmail.com>2025-06-24 19:55:42 +0600
commit2973939f7a2d3840b2cbbfe5b9177538c126dea3 (patch)
tree1da3ed217f1aadc9b184b92fdfb9995c57cf618e /tests
parenta30f1783fe136d92545423dd30b12eb619973cdb (diff)
downloadrust-2973939f7a2d3840b2cbbfe5b9177538c126dea3.tar.gz
rust-2973939f7a2d3840b2cbbfe5b9177538c126dea3.zip
Add impl_trait_in_bindings tests
Diffstat (limited to 'tests')
-rw-r--r--tests/ui/impl-trait/in-bindings/lifetime-equality.rs19
-rw-r--r--tests/ui/impl-trait/in-bindings/region-lifetimes.rs17
2 files changed, 36 insertions, 0 deletions
diff --git a/tests/ui/impl-trait/in-bindings/lifetime-equality.rs b/tests/ui/impl-trait/in-bindings/lifetime-equality.rs
new file mode 100644
index 00000000000..6cf48dccc7d
--- /dev/null
+++ b/tests/ui/impl-trait/in-bindings/lifetime-equality.rs
@@ -0,0 +1,19 @@
+//@ check-pass
+
+#![feature(impl_trait_in_bindings)]
+
+// A test for #61773 which would have been difficult to support if we
+// were to represent `impl_trait_in_bindings` using opaque types.
+
+trait Trait<'a, 'b> { }
+impl<T> Trait<'_, '_> for T { }
+
+
+fn bar<'a, 'b>(data0: &'a u32, data1: &'b u32) {
+  let x: impl Trait<'_, '_> = (data0, data1);
+  force_equal(x);
+}
+
+fn force_equal<'a>(t: impl Trait<'a, 'a>) { }
+
+fn main() { }
diff --git a/tests/ui/impl-trait/in-bindings/region-lifetimes.rs b/tests/ui/impl-trait/in-bindings/region-lifetimes.rs
new file mode 100644
index 00000000000..189ab85a276
--- /dev/null
+++ b/tests/ui/impl-trait/in-bindings/region-lifetimes.rs
@@ -0,0 +1,17 @@
+//@ check-pass
+
+#![feature(impl_trait_in_bindings)]
+
+// A test for #61773 which would have been difficult to support if we
+// were to represent `impl_trait_in_bindings` using opaque types.
+
+trait Foo<'a> { }
+impl Foo<'_> for &u32 { }
+
+fn bar<'a>(data: &'a u32) {
+  let x: impl Foo<'_> = data;
+}
+
+fn main() {
+  let _: impl Foo<'_> = &44;
+}