Rollup merge of #84913 - estebank:issue-84831, r=varkor
Do not ICE on invalid const param When encountering a path that can't have generics, do not call `generics_of`. This would happen when writing something like `path::this_is_a_mod<const_val>`. Fix #84831.
This commit is contained in:
commit
2cbcfae654
3 changed files with 54 additions and 1 deletions
|
@ -191,7 +191,25 @@ pub(super) fn opt_const_param_of(tcx: TyCtxt<'_>, def_id: LocalDefId) -> Option<
|
||||||
Res::Def(DefKind::Ctor(..), def_id) => {
|
Res::Def(DefKind::Ctor(..), def_id) => {
|
||||||
tcx.generics_of(tcx.parent(def_id).unwrap())
|
tcx.generics_of(tcx.parent(def_id).unwrap())
|
||||||
}
|
}
|
||||||
Res::Def(_, def_id) => tcx.generics_of(def_id),
|
// Other `DefKind`s don't have generics and would ICE when calling
|
||||||
|
// `generics_of`.
|
||||||
|
Res::Def(
|
||||||
|
DefKind::Struct
|
||||||
|
| DefKind::Union
|
||||||
|
| DefKind::Enum
|
||||||
|
| DefKind::Variant
|
||||||
|
| DefKind::Trait
|
||||||
|
| DefKind::OpaqueTy
|
||||||
|
| DefKind::TyAlias
|
||||||
|
| DefKind::ForeignTy
|
||||||
|
| DefKind::TraitAlias
|
||||||
|
| DefKind::AssocTy
|
||||||
|
| DefKind::Fn
|
||||||
|
| DefKind::AssocFn
|
||||||
|
| DefKind::AssocConst
|
||||||
|
| DefKind::Impl,
|
||||||
|
def_id,
|
||||||
|
) => tcx.generics_of(def_id),
|
||||||
Res::Err => {
|
Res::Err => {
|
||||||
tcx.sess.delay_span_bug(tcx.def_span(def_id), "anon const with Res::Err");
|
tcx.sess.delay_span_bug(tcx.def_span(def_id), "anon const with Res::Err");
|
||||||
return None;
|
return None;
|
||||||
|
|
9
src/test/ui/typeck/issue-84831.rs
Normal file
9
src/test/ui/typeck/issue-84831.rs
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
fn f() {
|
||||||
|
std::<0>; //~ ERROR expected value
|
||||||
|
}
|
||||||
|
fn j() {
|
||||||
|
std::<_ as _>; //~ ERROR expected value
|
||||||
|
//~^ ERROR expected one of `,` or `>`, found keyword `as`
|
||||||
|
}
|
||||||
|
|
||||||
|
fn main () {}
|
26
src/test/ui/typeck/issue-84831.stderr
Normal file
26
src/test/ui/typeck/issue-84831.stderr
Normal file
|
@ -0,0 +1,26 @@
|
||||||
|
error: expected one of `,` or `>`, found keyword `as`
|
||||||
|
--> $DIR/issue-84831.rs:5:13
|
||||||
|
|
|
||||||
|
LL | std::<_ as _>;
|
||||||
|
| ^^ expected one of `,` or `>`
|
||||||
|
|
|
||||||
|
help: expressions must be enclosed in braces to be used as const generic arguments
|
||||||
|
|
|
||||||
|
LL | std::<{ _ as _ }>;
|
||||||
|
| ^ ^
|
||||||
|
|
||||||
|
error[E0423]: expected value, found crate `std`
|
||||||
|
--> $DIR/issue-84831.rs:2:5
|
||||||
|
|
|
||||||
|
LL | std::<0>;
|
||||||
|
| ^^^^^^^^ not a value
|
||||||
|
|
||||||
|
error[E0423]: expected value, found crate `std`
|
||||||
|
--> $DIR/issue-84831.rs:5:5
|
||||||
|
|
|
||||||
|
LL | std::<_ as _>;
|
||||||
|
| ^^^^^^^^^^^^^ not a value
|
||||||
|
|
||||||
|
error: aborting due to 3 previous errors
|
||||||
|
|
||||||
|
For more information about this error, try `rustc --explain E0423`.
|
Loading…
Add table
Add a link
Reference in a new issue