about summary refs log tree commit diff
diff options
context:
space:
mode:
authorbors <bors@rust-lang.org>2021-08-23 02:25:36 +0000
committerbors <bors@rust-lang.org>2021-08-23 02:25:36 +0000
commit49967357c5b369aca21fdb4d44c48df3bfdaa4a3 (patch)
tree55addd987f140ddc82f726b6756702eaceb67c64
parent558553272d5f80ca6484ed3de961fe4f1a9d411d (diff)
parent10b3325d2689c2108c788f2633fd9970c8cb7890 (diff)
Auto merge of #88210 - spastorino:diff-lifetimes-def-use-test, r=oli-obk
Test TAITs different lifetimes in defining uses fail

r? `@oli-obk`

Related to #86727
-rw-r--r--src/test/ui/type-alias-impl-trait/different_lifetimes_defining_uses.rs15
-rw-r--r--src/test/ui/type-alias-impl-trait/different_lifetimes_defining_uses.stderr14
2 files changed, 29 insertions, 0 deletions
diff --git a/src/test/ui/type-alias-impl-trait/different_lifetimes_defining_uses.rs b/src/test/ui/type-alias-impl-trait/different_lifetimes_defining_uses.rs
new file mode 100644
index 00000000000..d0001976d65
--- /dev/null
+++ b/src/test/ui/type-alias-impl-trait/different_lifetimes_defining_uses.rs
@@ -0,0 +1,15 @@
+#![feature(type_alias_impl_trait)]
+#![allow(dead_code)]
+
+type OneLifetime<'a, 'b> = impl std::fmt::Debug;
+
+fn foo<'a, 'b>(a: &'a u32, b: &'b u32) -> OneLifetime<'a, 'b> {
+    a
+}
+
+fn bar<'a, 'b>(a: &'a u32, b: &'b u32) -> OneLifetime<'a, 'b> {
+    //~^ ERROR: concrete type differs from previous defining opaque type use
+    b
+}
+
+fn main() {}
diff --git a/src/test/ui/type-alias-impl-trait/different_lifetimes_defining_uses.stderr b/src/test/ui/type-alias-impl-trait/different_lifetimes_defining_uses.stderr
new file mode 100644
index 00000000000..9493a59cf1e
--- /dev/null
+++ b/src/test/ui/type-alias-impl-trait/different_lifetimes_defining_uses.stderr
@@ -0,0 +1,14 @@
+error: concrete type differs from previous defining opaque type use
+  --> $DIR/different_lifetimes_defining_uses.rs:10:1
+   |
+LL | fn bar<'a, 'b>(a: &'a u32, b: &'b u32) -> OneLifetime<'a, 'b> {
+   | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ expected `&'a u32`, got `&'b u32`
+   |
+note: previous use here
+  --> $DIR/different_lifetimes_defining_uses.rs:6:1
+   |
+LL | fn foo<'a, 'b>(a: &'a u32, b: &'b u32) -> OneLifetime<'a, 'b> {
+   | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+error: aborting due to previous error
+