Stop chopping off args for no reason

This commit is contained in:
Michael Goulet 2024-03-30 12:03:29 -04:00
parent ceab6128fa
commit e3025d6a55
3 changed files with 19 additions and 3 deletions

View File

@ -381,8 +381,6 @@ fn check_args_compatible_inner<'tcx>(
} }
let generics = tcx.generics_of(assoc_item.def_id); let generics = tcx.generics_of(assoc_item.def_id);
// Chop off any additional args (RPITIT) args
let args = &args[0..generics.count().min(args.len())];
check_args_compatible_inner(tcx, generics, args) check_args_compatible_inner(tcx, generics, args)
} }

View File

@ -14,6 +14,7 @@ fn iter(&self) -> impl for<'missing> Iterator<Item = Self::Item<'missing>> {}
//~^ ERROR binding for associated type `Item` references lifetime `'missing` //~^ ERROR binding for associated type `Item` references lifetime `'missing`
//~| ERROR binding for associated type `Item` references lifetime `'missing` //~| ERROR binding for associated type `Item` references lifetime `'missing`
//~| ERROR `()` is not an iterator //~| ERROR `()` is not an iterator
//~| WARNING impl trait in impl method signature does not match trait method signature
} }
fn main() {} fn main() {}

View File

@ -32,7 +32,24 @@ LL | fn iter(&self) -> impl for<'missing> Iterator<Item = Self::Item<'missin
| |
= help: the trait `Iterator` is not implemented for `()` = help: the trait `Iterator` is not implemented for `()`
error: aborting due to 4 previous errors warning: impl trait in impl method signature does not match trait method signature
--> $DIR/span-bug-issue-121457.rs:13:51
|
LL | fn iter(&self) -> impl Iterator;
| ------------- return type from trait method defined here
...
LL | fn iter(&self) -> impl for<'missing> Iterator<Item = Self::Item<'missing>> {}
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^ this bound is stronger than that defined on the trait
|
= note: add `#[allow(refining_impl_trait)]` if it is intended for this to be part of the public API of this crate
= note: we are soliciting feedback, see issue #121718 <https://github.com/rust-lang/rust/issues/121718> for more information
= note: `#[warn(refining_impl_trait_reachable)]` on by default
help: replace the return type so that it matches the trait
|
LL | fn iter(&self) -> impl Iterator {}
| ~~~~~~~~~~~~~
error: aborting due to 4 previous errors; 1 warning emitted
Some errors have detailed explanations: E0195, E0277, E0582. Some errors have detailed explanations: E0195, E0277, E0582.
For more information about an error, try `rustc --explain E0195`. For more information about an error, try `rustc --explain E0195`.