Make def_key and HIR parenting consistent.

This commit is contained in:
Camille GILLOT 2021-02-13 20:41:02 +01:00
parent 17a07d71bf
commit 445b4e379c
11 changed files with 177 additions and 54 deletions

View file

@ -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() {}

View file

@ -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`.

View file

@ -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() {}