about summary refs log tree commit diff
path: root/compiler
diff options
context:
space:
mode:
authorRalf Jung <post@ralfj.de>2021-05-05 17:52:29 +0200
committerGitHub <noreply@github.com>2021-05-05 17:52:29 +0200
commit2cbcfae6548e08fe079ae0b7db0d97ec30e006d8 (patch)
tree02063ef4cd6cb4e64d1b16f885ed993abe663fb9 /compiler
parent2c7bf41b97e1b2a4ad475dd8fb197ce7f0c5c805 (diff)
parent11379f0494b6a8c81b3fb9e0411651bc749aaa06 (diff)
downloadrust-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.rs20
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;