Don't use item name to look up associated item from trait item

This commit is contained in:
Michael Goulet 2025-04-25 01:53:05 +00:00
parent d7ea436a02
commit 1d0b3be659
3 changed files with 54 additions and 7 deletions

View File

@ -1523,19 +1523,17 @@ impl<'a, 'tcx> TypeErrCtxt<'a, 'tcx> {
return None;
};
let trait_assoc_item = self.tcx.opt_associated_item(proj.projection_term.def_id)?;
let trait_assoc_ident = trait_assoc_item.ident(self.tcx);
let mut associated_items = vec![];
self.tcx.for_each_relevant_impl(
self.tcx.trait_of_item(proj.projection_term.def_id)?,
proj.projection_term.self_ty(),
|impl_def_id| {
associated_items.extend(
self.tcx
.associated_items(impl_def_id)
.in_definition_order()
.find(|assoc| assoc.ident(self.tcx) == trait_assoc_ident),
self.tcx.associated_items(impl_def_id).in_definition_order().find(
|assoc| {
assoc.trait_item_def_id == Some(proj.projection_term.def_id)
},
),
);
},
);

View File

@ -0,0 +1,23 @@
trait ServerFn {
type Output;
fn run_body() -> impl Sized;
}
struct MyServerFn {}
macro_rules! f {
() => {
impl ServerFn for MyServerFn {
type Output = ();
fn run_body() -> impl Sized {}
}
};
}
f! {}
fn problem<T: ServerFn<Output = i64>>(_: T) {}
fn main() {
problem(MyServerFn {});
//~^ ERROR type mismatch resolving `<MyServerFn as ServerFn>::Output == i64`
}

View File

@ -0,0 +1,26 @@
error[E0271]: type mismatch resolving `<MyServerFn as ServerFn>::Output == i64`
--> $DIR/dont-probe-missing-item-name-4.rs:21:13
|
LL | problem(MyServerFn {});
| ------- ^^^^^^^^^^^^^ type mismatch resolving `<MyServerFn as ServerFn>::Output == i64`
| |
| required by a bound introduced by this call
|
note: expected this to be `i64`
--> $DIR/dont-probe-missing-item-name-4.rs:10:27
|
LL | type Output = ();
| ^^
...
LL | f! {}
| ----- in this macro invocation
note: required by a bound in `problem`
--> $DIR/dont-probe-missing-item-name-4.rs:18:24
|
LL | fn problem<T: ServerFn<Output = i64>>(_: T) {}
| ^^^^^^^^^^^^ required by this bound in `problem`
= note: this error originates in the macro `f` (in Nightly builds, run with -Z macro-backtrace for more info)
error: aborting due to 1 previous error
For more information about this error, try `rustc --explain E0271`.