mirror of
https://github.com/rust-lang/rust.git
synced 2026-04-27 18:57:42 +03:00
Rollup merge of #154182 - Unique-Usman:ua/constnotype2, r=estebank
diagnostics: avoid ICE for undeclared generic parameter in impl
Avoid an ICE for:
struct A;
impl A<B> {}
The compiler no longer panics and can proceed to emit existing diagnostics.
Adds `tests/ui/missing/undeclared-generic-parameter.rs`.
Fixes rust-lang/rust#154165 and introduced by rust-lang/rust#152913
This commit is contained in:
@@ -3381,7 +3381,7 @@ pub(crate) fn detect_and_suggest_const_parameter_error(
|
||||
&& def_id.is_local()
|
||||
&& let Some(local_def_id) = def_id.as_local()
|
||||
&& let Some(struct_generics) = self.r.struct_generics.get(&local_def_id)
|
||||
&& let target_param = &struct_generics.params[idx]
|
||||
&& let Some(target_param) = &struct_generics.params.get(idx)
|
||||
&& let GenericParamKind::Const { ty, .. } = &target_param.kind
|
||||
&& let TyKind::Path(_, path) = &ty.kind
|
||||
{
|
||||
|
||||
@@ -0,0 +1,5 @@
|
||||
struct A;
|
||||
impl A<B> {}
|
||||
//~^ ERROR cannot find type `B` in this scope
|
||||
//~| ERROR struct takes 0 generic arguments but 1 generic argument was supplied
|
||||
fn main() {}
|
||||
@@ -0,0 +1,36 @@
|
||||
error[E0425]: cannot find type `B` in this scope
|
||||
--> $DIR/undeclared-generic-parameter.rs:2:8
|
||||
|
|
||||
LL | struct A;
|
||||
| --------- similarly named struct `A` defined here
|
||||
LL | impl A<B> {}
|
||||
| ^
|
||||
|
|
||||
help: a struct with a similar name exists
|
||||
|
|
||||
LL - impl A<B> {}
|
||||
LL + impl A<A> {}
|
||||
|
|
||||
help: you might be missing a type parameter
|
||||
|
|
||||
LL | impl<B> A<B> {}
|
||||
| +++
|
||||
|
||||
error[E0107]: struct takes 0 generic arguments but 1 generic argument was supplied
|
||||
--> $DIR/undeclared-generic-parameter.rs:2:6
|
||||
|
|
||||
LL | impl A<B> {}
|
||||
| ^--- help: remove the unnecessary generics
|
||||
| |
|
||||
| expected 0 generic arguments
|
||||
|
|
||||
note: struct defined here, with 0 generic parameters
|
||||
--> $DIR/undeclared-generic-parameter.rs:1:8
|
||||
|
|
||||
LL | struct A;
|
||||
| ^
|
||||
|
||||
error: aborting due to 2 previous errors
|
||||
|
||||
Some errors have detailed explanations: E0107, E0425.
|
||||
For more information about an error, try `rustc --explain E0107`.
|
||||
Reference in New Issue
Block a user