Fix generics mismatch errors for RPITITs on -Zlower-impl-trait-in-trait-to-assoc-ty
This commit is contained in:
parent
03b01c5bec
commit
c7cc1c7442
4 changed files with 27 additions and 1 deletions
|
@ -1205,6 +1205,17 @@ fn compare_number_of_generics<'tcx>(
|
||||||
return Ok(());
|
return Ok(());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// We never need to emit a separate error for RPITITs, since if an RPITIT
|
||||||
|
// has mismatched type or const generic arguments, then the method that it's
|
||||||
|
// inheriting the generics from will also have mismatched arguments, and
|
||||||
|
// we'll report an error for that instead. Delay a bug for safety, though.
|
||||||
|
if tcx.opt_rpitit_info(trait_.def_id).is_some() {
|
||||||
|
return Err(tcx.sess.delay_span_bug(
|
||||||
|
rustc_span::DUMMY_SP,
|
||||||
|
"errors comparing numbers of generics of trait/impl functions were not emitted",
|
||||||
|
));
|
||||||
|
}
|
||||||
|
|
||||||
let matchings = [
|
let matchings = [
|
||||||
("type", trait_own_counts.types, impl_own_counts.types),
|
("type", trait_own_counts.types, impl_own_counts.types),
|
||||||
("const", trait_own_counts.consts, impl_own_counts.consts),
|
("const", trait_own_counts.consts, impl_own_counts.consts),
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
error[E0049]: method `bar` has 1 type parameter but its trait declaration has 0 type parameters
|
error[E0049]: method `bar` has 1 type parameter but its trait declaration has 0 type parameters
|
||||||
--> $DIR/generics-mismatch.rs:11:12
|
--> $DIR/generics-mismatch.rs:14:12
|
||||||
|
|
|
|
||||||
LL | fn bar(&self) -> impl Sized;
|
LL | fn bar(&self) -> impl Sized;
|
||||||
| - expected 0 type parameters
|
| - expected 0 type parameters
|
12
tests/ui/impl-trait/in-trait/generics-mismatch.next.stderr
Normal file
12
tests/ui/impl-trait/in-trait/generics-mismatch.next.stderr
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
error[E0049]: method `bar` has 1 type parameter but its trait declaration has 0 type parameters
|
||||||
|
--> $DIR/generics-mismatch.rs:14:12
|
||||||
|
|
|
||||||
|
LL | fn bar(&self) -> impl Sized;
|
||||||
|
| - expected 0 type parameters
|
||||||
|
...
|
||||||
|
LL | fn bar<T>(&self) {}
|
||||||
|
| ^ found 1 type parameter
|
||||||
|
|
||||||
|
error: aborting due to previous error
|
||||||
|
|
||||||
|
For more information about this error, try `rustc --explain E0049`.
|
|
@ -1,3 +1,6 @@
|
||||||
|
// [next] compile-flags: -Zlower-impl-trait-in-trait-to-assoc-ty
|
||||||
|
// revisions: current next
|
||||||
|
|
||||||
#![feature(return_position_impl_trait_in_trait)]
|
#![feature(return_position_impl_trait_in_trait)]
|
||||||
#![allow(incomplete_features)]
|
#![allow(incomplete_features)]
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue