diff options
| author | Ralf Jung <post@ralfj.de> | 2021-05-05 17:52:29 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-05-05 17:52:29 +0200 |
| commit | 2cbcfae6548e08fe079ae0b7db0d97ec30e006d8 (patch) | |
| tree | 02063ef4cd6cb4e64d1b16f885ed993abe663fb9 /compiler | |
| parent | 2c7bf41b97e1b2a4ad475dd8fb197ce7f0c5c805 (diff) | |
| parent | 11379f0494b6a8c81b3fb9e0411651bc749aaa06 (diff) | |
| download | rust-2cbcfae6548e08fe079ae0b7db0d97ec30e006d8.tar.gz rust-2cbcfae6548e08fe079ae0b7db0d97ec30e006d8.zip | |
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.
Diffstat (limited to 'compiler')
| -rw-r--r-- | compiler/rustc_typeck/src/collect/type_of.rs | 20 |
1 files changed, 19 insertions, 1 deletions
diff --git a/compiler/rustc_typeck/src/collect/type_of.rs b/compiler/rustc_typeck/src/collect/type_of.rs index 51d5f4ebe2b..97b6f5cf412 100644 --- a/compiler/rustc_typeck/src/collect/type_of.rs +++ b/compiler/rustc_typeck/src/collect/type_of.rs @@ -191,7 +191,25 @@ pub(super) fn opt_const_param_of(tcx: TyCtxt<'_>, def_id: LocalDefId) -> Option< Res::Def(DefKind::Ctor(..), def_id) => { 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 => { tcx.sess.delay_span_bug(tcx.def_span(def_id), "anon const with Res::Err"); return None; |
