Fix associated type errors too
This commit is contained in:
parent
e4dfca8ac2
commit
06072468fe
5 changed files with 52 additions and 0 deletions
|
@ -620,6 +620,8 @@ hir_analysis_variances_of = {$variances}
|
||||||
hir_analysis_where_clause_on_main = `main` function is not allowed to have a `where` clause
|
hir_analysis_where_clause_on_main = `main` function is not allowed to have a `where` clause
|
||||||
.label = `main` cannot have a `where` clause
|
.label = `main` cannot have a `where` clause
|
||||||
|
|
||||||
|
hir_analysis_within_macro = due to this macro variable
|
||||||
|
|
||||||
hir_analysis_wrong_number_of_generic_arguments_to_intrinsic =
|
hir_analysis_wrong_number_of_generic_arguments_to_intrinsic =
|
||||||
intrinsic has wrong number of {$descr} parameters: found {$found}, expected {$expected}
|
intrinsic has wrong number of {$descr} parameters: found {$found}, expected {$expected}
|
||||||
.label = expected {$expected} {$descr} {$expected ->
|
.label = expected {$expected} {$descr} {$expected ->
|
||||||
|
|
|
@ -84,6 +84,8 @@ pub(crate) struct AssocItemNotFound<'a> {
|
||||||
pub label: Option<AssocItemNotFoundLabel<'a>>,
|
pub label: Option<AssocItemNotFoundLabel<'a>>,
|
||||||
#[subdiagnostic]
|
#[subdiagnostic]
|
||||||
pub sugg: Option<AssocItemNotFoundSugg<'a>>,
|
pub sugg: Option<AssocItemNotFoundSugg<'a>>,
|
||||||
|
#[label(hir_analysis_within_macro)]
|
||||||
|
pub within_macro_span: Option<Span>,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Subdiagnostic)]
|
#[derive(Subdiagnostic)]
|
||||||
|
|
|
@ -151,6 +151,9 @@ impl<'tcx> dyn HirTyLowerer<'tcx> + '_ {
|
||||||
qself: &qself_str,
|
qself: &qself_str,
|
||||||
label: None,
|
label: None,
|
||||||
sugg: None,
|
sugg: None,
|
||||||
|
// Try to get the span of the identifier within the path's syntax context
|
||||||
|
// (if that's different).
|
||||||
|
within_macro_span: assoc_name.span.within_macro(span),
|
||||||
};
|
};
|
||||||
|
|
||||||
if is_dummy {
|
if is_dummy {
|
||||||
|
|
23
tests/ui/associated-types/ident-from-macro-expansion.rs
Normal file
23
tests/ui/associated-types/ident-from-macro-expansion.rs
Normal file
|
@ -0,0 +1,23 @@
|
||||||
|
trait Trait {}
|
||||||
|
impl Trait for () {}
|
||||||
|
|
||||||
|
macro_rules! fully_qualified {
|
||||||
|
($id:ident) => {
|
||||||
|
<() as Trait>::$id
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
macro_rules! type_dependent {
|
||||||
|
($t:ident, $id:ident) => {
|
||||||
|
T::$id
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn t<T: Trait>() {
|
||||||
|
let x: fully_qualified!(Assoc);
|
||||||
|
//~^ ERROR cannot find associated type `Assoc` in trait `Trait`
|
||||||
|
let x: type_dependent!(T, Assoc);
|
||||||
|
//~^ ERROR associated type `Assoc` not found for `T`
|
||||||
|
}
|
||||||
|
|
||||||
|
fn main() {}
|
22
tests/ui/associated-types/ident-from-macro-expansion.stderr
Normal file
22
tests/ui/associated-types/ident-from-macro-expansion.stderr
Normal file
|
@ -0,0 +1,22 @@
|
||||||
|
error[E0576]: cannot find associated type `Assoc` in trait `Trait`
|
||||||
|
--> $DIR/ident-from-macro-expansion.rs:17:29
|
||||||
|
|
|
||||||
|
LL | <() as Trait>::$id
|
||||||
|
| --- due to this macro variable
|
||||||
|
...
|
||||||
|
LL | let x: fully_qualified!(Assoc);
|
||||||
|
| ^^^^^ not found in `Trait`
|
||||||
|
|
||||||
|
error[E0220]: associated type `Assoc` not found for `T`
|
||||||
|
--> $DIR/ident-from-macro-expansion.rs:19:31
|
||||||
|
|
|
||||||
|
LL | T::$id
|
||||||
|
| --- due to this macro variable
|
||||||
|
...
|
||||||
|
LL | let x: type_dependent!(T, Assoc);
|
||||||
|
| ^^^^^ associated type `Assoc` not found
|
||||||
|
|
||||||
|
error: aborting due to 2 previous errors
|
||||||
|
|
||||||
|
Some errors have detailed explanations: E0220, E0576.
|
||||||
|
For more information about an error, try `rustc --explain E0220`.
|
Loading…
Add table
Add a link
Reference in a new issue