about summary refs log tree commit diff
diff options
context:
space:
mode:
authorSantiago Pastorino <spastorino@gmail.com>2021-08-24 22:10:38 -0300
committerSantiago Pastorino <spastorino@gmail.com>2021-08-24 22:10:38 -0300
commit08e20d9b28685d438839bd695a9309a8947a61fa (patch)
tree9ede1c7b44b5064957e8a9d588880f10a0c8acd3
parent47ab5f7ce27397310bd8359b8db1504fbf8a9b59 (diff)
Add type of a let tait test
-rw-r--r--src/test/ui/type-alias-impl-trait/type_of_a_let.rs29
-rw-r--r--src/test/ui/type-alias-impl-trait/type_of_a_let.stderr67
2 files changed, 96 insertions, 0 deletions
diff --git a/src/test/ui/type-alias-impl-trait/type_of_a_let.rs b/src/test/ui/type-alias-impl-trait/type_of_a_let.rs
new file mode 100644
index 00000000000..7f8e6127cca
--- /dev/null
+++ b/src/test/ui/type-alias-impl-trait/type_of_a_let.rs
@@ -0,0 +1,29 @@
+#![feature(type_alias_impl_trait)]
+#![allow(dead_code)]
+
+// FIXME This should compile, but it currently doesn't
+
+use std::fmt::Debug;
+
+type Foo = impl Debug;
+//~^ ERROR: could not find defining uses
+
+fn foo1() -> u32 {
+    let x: Foo = 22_u32;
+    //~^ ERROR: mismatched types [E0308]
+    x
+    //~^ ERROR: mismatched types [E0308]
+}
+
+fn foo2() -> u32 {
+    let x: Foo = 22_u32;
+    //~^ ERROR: mismatched types [E0308]
+    let y: Foo = x;
+    same_type((x, y));
+    y
+    //~^ ERROR: mismatched types [E0308]
+}
+
+fn same_type<T>(x: (T, T)) {}
+
+fn main() {}
diff --git a/src/test/ui/type-alias-impl-trait/type_of_a_let.stderr b/src/test/ui/type-alias-impl-trait/type_of_a_let.stderr
new file mode 100644
index 00000000000..cac8d6841af
--- /dev/null
+++ b/src/test/ui/type-alias-impl-trait/type_of_a_let.stderr
@@ -0,0 +1,67 @@
+error[E0308]: mismatched types
+  --> $DIR/type_of_a_let.rs:12:18
+   |
+LL | type Foo = impl Debug;
+   |            ---------- the expected opaque type
+...
+LL |     let x: Foo = 22_u32;
+   |            ---   ^^^^^^ expected opaque type, found `u32`
+   |            |
+   |            expected due to this
+   |
+   = note: expected opaque type `impl Debug`
+                     found type `u32`
+
+error[E0308]: mismatched types
+  --> $DIR/type_of_a_let.rs:14:5
+   |
+LL | type Foo = impl Debug;
+   |            ---------- the found opaque type
+...
+LL | fn foo1() -> u32 {
+   |              --- expected `u32` because of return type
+...
+LL |     x
+   |     ^ expected `u32`, found opaque type
+   |
+   = note:     expected type `u32`
+           found opaque type `impl Debug`
+
+error[E0308]: mismatched types
+  --> $DIR/type_of_a_let.rs:19:18
+   |
+LL | type Foo = impl Debug;
+   |            ---------- the expected opaque type
+...
+LL |     let x: Foo = 22_u32;
+   |            ---   ^^^^^^ expected opaque type, found `u32`
+   |            |
+   |            expected due to this
+   |
+   = note: expected opaque type `impl Debug`
+                     found type `u32`
+
+error[E0308]: mismatched types
+  --> $DIR/type_of_a_let.rs:23:5
+   |
+LL | type Foo = impl Debug;
+   |            ---------- the found opaque type
+...
+LL | fn foo2() -> u32 {
+   |              --- expected `u32` because of return type
+...
+LL |     y
+   |     ^ expected `u32`, found opaque type
+   |
+   = note:     expected type `u32`
+           found opaque type `impl Debug`
+
+error: could not find defining uses
+  --> $DIR/type_of_a_let.rs:8:12
+   |
+LL | type Foo = impl Debug;
+   |            ^^^^^^^^^^
+
+error: aborting due to 5 previous errors
+
+For more information about this error, try `rustc --explain E0308`.