summary refs log tree commit diff
path: root/src/test/ui/impl-trait
diff options
context:
space:
mode:
authorCamille GILLOT <gillot.camille@gmail.com>2021-02-13 20:41:02 +0100
committerCamille GILLOT <gillot.camille@gmail.com>2021-03-12 22:48:32 +0100
commit445b4e379ca487b268ff6360b193feb28106b5ac (patch)
tree563a7f91bec7cda5ffcad5cbfd6a5c57d96dbd26 /src/test/ui/impl-trait
parent17a07d71bfd692f9b2dad2a566aff52bf3d4bfe2 (diff)
downloadrust-445b4e379ca487b268ff6360b193feb28106b5ac.tar.gz
rust-445b4e379ca487b268ff6360b193feb28106b5ac.zip
Make def_key and HIR parenting consistent.
Diffstat (limited to 'src/test/ui/impl-trait')
-rw-r--r--src/test/ui/impl-trait/impl-trait-in-macro.rs20
-rw-r--r--src/test/ui/impl-trait/impl-trait-in-macro.stderr20
-rw-r--r--src/test/ui/impl-trait/universal-two-impl-traits.rs9
3 files changed, 48 insertions, 1 deletions
diff --git a/src/test/ui/impl-trait/impl-trait-in-macro.rs b/src/test/ui/impl-trait/impl-trait-in-macro.rs
new file mode 100644
index 00000000000..3165c9b9915
--- /dev/null
+++ b/src/test/ui/impl-trait/impl-trait-in-macro.rs
@@ -0,0 +1,20 @@
+use std::fmt::Debug;
+
+macro_rules! i {
+    ($($tr:tt)*) => { impl $($tr)* };
+}
+
+fn foo(x: i!(Debug), y: i!(Debug)) -> String {
+    let mut a = x;
+    a = y; //~ ERROR mismatched
+    format!("{:?}", a)
+}
+
+trait S<T> {}
+
+fn much_universe<T: S<i!(Debug)>, U: IntoIterator<Item = i!(Iterator<Item = i!(Clone)>)>>(
+    _: i!(Debug + Clone),
+) {
+}
+
+fn main() {}
diff --git a/src/test/ui/impl-trait/impl-trait-in-macro.stderr b/src/test/ui/impl-trait/impl-trait-in-macro.stderr
new file mode 100644
index 00000000000..b5f9986ce40
--- /dev/null
+++ b/src/test/ui/impl-trait/impl-trait-in-macro.stderr
@@ -0,0 +1,20 @@
+error[E0308]: mismatched types
+  --> $DIR/impl-trait-in-macro.rs:9:9
+   |
+LL |     ($($tr:tt)*) => { impl $($tr)* };
+   |                       ----
+   |                       |
+   |                       expected type parameter
+   |                       found type parameter
+...
+LL |     a = y;
+   |         ^ expected type parameter `impl Debug`, found a different type parameter `impl Debug`
+   |
+   = note: expected type parameter `impl Debug` (type parameter `impl Debug`)
+              found type parameter `impl Debug` (type parameter `impl Debug`)
+   = note: a type parameter was expected, but a different one was found; you might be missing a type parameter or trait bound
+   = note: for more information, visit https://doc.rust-lang.org/book/ch10-02-traits.html#traits-as-parameters
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0308`.
diff --git a/src/test/ui/impl-trait/universal-two-impl-traits.rs b/src/test/ui/impl-trait/universal-two-impl-traits.rs
index 1ed47d8f49e..689c240128d 100644
--- a/src/test/ui/impl-trait/universal-two-impl-traits.rs
+++ b/src/test/ui/impl-trait/universal-two-impl-traits.rs
@@ -6,4 +6,11 @@ fn foo(x: impl Debug, y: impl Debug) -> String {
     format!("{:?}", a)
 }
 
-fn main() { }
+trait S<T> {}
+
+fn much_universe<T: S<impl Debug>, U: IntoIterator<Item = impl Iterator<Item = impl Clone>>>(
+    _: impl Debug + Clone,
+) {
+}
+
+fn main() {}