@@ -1059,43 +1059,6 @@ fn should_encode_const(def_kind: DefKind) -> bool {
10591059 }
10601060}
10611061
1062- fn should_encode_constness ( def_kind : DefKind ) -> bool {
1063- match def_kind {
1064- DefKind :: Struct
1065- | DefKind :: Union
1066- | DefKind :: Enum
1067- | DefKind :: Trait
1068- | DefKind :: AssocTy
1069- | DefKind :: Fn
1070- | DefKind :: Const
1071- | DefKind :: Static ( ..)
1072- | DefKind :: Ctor ( ..)
1073- | DefKind :: AssocFn
1074- | DefKind :: AssocConst
1075- | DefKind :: AnonConst
1076- | DefKind :: InlineConst
1077- | DefKind :: OpaqueTy
1078- | DefKind :: ImplTraitPlaceholder
1079- | DefKind :: Impl
1080- | DefKind :: Closure
1081- | DefKind :: Generator
1082- | DefKind :: TyAlias => true ,
1083- DefKind :: Variant
1084- | DefKind :: TraitAlias
1085- | DefKind :: ForeignTy
1086- | DefKind :: Field
1087- | DefKind :: TyParam
1088- | DefKind :: Mod
1089- | DefKind :: ForeignMod
1090- | DefKind :: ConstParam
1091- | DefKind :: Macro ( ..)
1092- | DefKind :: Use
1093- | DefKind :: LifetimeParam
1094- | DefKind :: GlobalAsm
1095- | DefKind :: ExternCrate => false ,
1096- }
1097- }
1098-
10991062fn should_encode_trait_impl_trait_tys < ' tcx > ( tcx : TyCtxt < ' tcx > , def_id : DefId ) -> bool {
11001063 if tcx. def_kind ( def_id) != DefKind :: AssocFn {
11011064 return false ;
@@ -1202,9 +1165,6 @@ impl<'a, 'tcx> EncodeContext<'a, 'tcx> {
12021165 {
12031166 record ! ( self . tables. trait_impl_trait_tys[ def_id] <- table) ;
12041167 }
1205- if should_encode_constness ( def_kind) {
1206- self . tables . constness . set ( def_id. index , tcx. constness ( def_id) ) ;
1207- }
12081168 }
12091169 let inherent_impls = tcx. crate_inherent_impls ( ( ) ) ;
12101170 for ( def_id, implementations) in inherent_impls. inherent_impls . iter ( ) {
@@ -1232,6 +1192,7 @@ impl<'a, 'tcx> EncodeContext<'a, 'tcx> {
12321192 } ;
12331193
12341194 record ! ( self . tables. variant_data[ def_id] <- data) ;
1195+ self . tables . constness . set ( def_id. index , hir:: Constness :: Const ) ;
12351196 record_array ! ( self . tables. children[ def_id] <- variant. fields. iter( ) . map( |f| {
12361197 assert!( f. did. is_local( ) ) ;
12371198 f. did. index
@@ -1259,6 +1220,7 @@ impl<'a, 'tcx> EncodeContext<'a, 'tcx> {
12591220 } ;
12601221
12611222 record ! ( self . tables. variant_data[ def_id] <- data) ;
1223+ self . tables . constness . set ( def_id. index , hir:: Constness :: Const ) ;
12621224 if variant. ctor_kind == CtorKind :: Fn {
12631225 record ! ( self . tables. fn_sig[ def_id] <- tcx. fn_sig( def_id) ) ;
12641226 }
@@ -1322,6 +1284,7 @@ impl<'a, 'tcx> EncodeContext<'a, 'tcx> {
13221284
13231285 record ! ( self . tables. repr_options[ def_id] <- adt_def. repr( ) ) ;
13241286 record ! ( self . tables. variant_data[ def_id] <- data) ;
1287+ self . tables . constness . set ( def_id. index , hir:: Constness :: Const ) ;
13251288 if variant. ctor_kind == CtorKind :: Fn {
13261289 record ! ( self . tables. fn_sig[ def_id] <- tcx. fn_sig( def_id) ) ;
13271290 }
@@ -1357,6 +1320,7 @@ impl<'a, 'tcx> EncodeContext<'a, 'tcx> {
13571320 }
13581321 } ;
13591322 self . tables . asyncness . set ( def_id. index , m_sig. header . asyncness ) ;
1323+ self . tables . constness . set ( def_id. index , hir:: Constness :: NotConst ) ;
13601324 }
13611325 ty:: AssocKind :: Type => {
13621326 self . encode_explicit_item_bounds ( def_id) ;
@@ -1381,6 +1345,13 @@ impl<'a, 'tcx> EncodeContext<'a, 'tcx> {
13811345 let hir:: ImplItemKind :: Fn ( ref sig, body) = ast_item. kind else { bug ! ( ) } ;
13821346 self . tables . asyncness . set ( def_id. index , sig. header . asyncness ) ;
13831347 record_array ! ( self . tables. fn_arg_names[ def_id] <- self . tcx. hir( ) . body_param_names( body) ) ;
1348+ // Can be inside `impl const Trait`, so using sig.header.constness is not reliable
1349+ let constness = if self . tcx . is_const_fn_raw ( def_id) {
1350+ hir:: Constness :: Const
1351+ } else {
1352+ hir:: Constness :: NotConst
1353+ } ;
1354+ self . tables . constness . set ( def_id. index , constness) ;
13841355 }
13851356 ty:: AssocKind :: Const | ty:: AssocKind :: Type => { }
13861357 }
@@ -1503,6 +1474,7 @@ impl<'a, 'tcx> EncodeContext<'a, 'tcx> {
15031474 hir:: ItemKind :: Fn ( ref sig, .., body) => {
15041475 self . tables . asyncness . set ( def_id. index , sig. header . asyncness ) ;
15051476 record_array ! ( self . tables. fn_arg_names[ def_id] <- self . tcx. hir( ) . body_param_names( body) ) ;
1477+ self . tables . constness . set ( def_id. index , sig. header . constness ) ;
15061478 }
15071479 hir:: ItemKind :: Macro ( ref macro_def, _) => {
15081480 if macro_def. macro_rules {
@@ -1523,6 +1495,7 @@ impl<'a, 'tcx> EncodeContext<'a, 'tcx> {
15231495 hir:: ItemKind :: Struct ( ref struct_def, _) => {
15241496 let adt_def = self . tcx . adt_def ( def_id) ;
15251497 record ! ( self . tables. repr_options[ def_id] <- adt_def. repr( ) ) ;
1498+ self . tables . constness . set ( def_id. index , hir:: Constness :: Const ) ;
15261499
15271500 // Encode def_ids for each field and method
15281501 // for methods, write all the stuff get_trait_method
@@ -1551,8 +1524,9 @@ impl<'a, 'tcx> EncodeContext<'a, 'tcx> {
15511524 is_non_exhaustive: variant. is_field_list_non_exhaustive( ) ,
15521525 } ) ;
15531526 }
1554- hir:: ItemKind :: Impl ( hir:: Impl { defaultness, .. } ) => {
1527+ hir:: ItemKind :: Impl ( hir:: Impl { defaultness, constness , .. } ) => {
15551528 self . tables . impl_defaultness . set ( def_id. index , * defaultness) ;
1529+ self . tables . constness . set ( def_id. index , * constness) ;
15561530
15571531 let trait_ref = self . tcx . impl_trait_ref ( def_id) ;
15581532 if let Some ( trait_ref) = trait_ref {
0 commit comments