@@ -1059,43 +1059,6 @@ fn should_encode_const(def_kind: DefKind) -> bool {
1059
1059
}
1060
1060
}
1061
1061
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
-
1099
1062
fn should_encode_trait_impl_trait_tys < ' tcx > ( tcx : TyCtxt < ' tcx > , def_id : DefId ) -> bool {
1100
1063
if tcx. def_kind ( def_id) != DefKind :: AssocFn {
1101
1064
return false ;
@@ -1202,9 +1165,6 @@ impl<'a, 'tcx> EncodeContext<'a, 'tcx> {
1202
1165
{
1203
1166
record ! ( self . tables. trait_impl_trait_tys[ def_id] <- table) ;
1204
1167
}
1205
- if should_encode_constness ( def_kind) {
1206
- self . tables . constness . set ( def_id. index , tcx. constness ( def_id) ) ;
1207
- }
1208
1168
}
1209
1169
let inherent_impls = tcx. crate_inherent_impls ( ( ) ) ;
1210
1170
for ( def_id, implementations) in inherent_impls. inherent_impls . iter ( ) {
@@ -1232,6 +1192,7 @@ impl<'a, 'tcx> EncodeContext<'a, 'tcx> {
1232
1192
} ;
1233
1193
1234
1194
record ! ( self . tables. variant_data[ def_id] <- data) ;
1195
+ self . tables . constness . set ( def_id. index , hir:: Constness :: Const ) ;
1235
1196
record_array ! ( self . tables. children[ def_id] <- variant. fields. iter( ) . map( |f| {
1236
1197
assert!( f. did. is_local( ) ) ;
1237
1198
f. did. index
@@ -1259,6 +1220,7 @@ impl<'a, 'tcx> EncodeContext<'a, 'tcx> {
1259
1220
} ;
1260
1221
1261
1222
record ! ( self . tables. variant_data[ def_id] <- data) ;
1223
+ self . tables . constness . set ( def_id. index , hir:: Constness :: Const ) ;
1262
1224
if variant. ctor_kind == CtorKind :: Fn {
1263
1225
record ! ( self . tables. fn_sig[ def_id] <- tcx. fn_sig( def_id) ) ;
1264
1226
}
@@ -1322,6 +1284,7 @@ impl<'a, 'tcx> EncodeContext<'a, 'tcx> {
1322
1284
1323
1285
record ! ( self . tables. repr_options[ def_id] <- adt_def. repr( ) ) ;
1324
1286
record ! ( self . tables. variant_data[ def_id] <- data) ;
1287
+ self . tables . constness . set ( def_id. index , hir:: Constness :: Const ) ;
1325
1288
if variant. ctor_kind == CtorKind :: Fn {
1326
1289
record ! ( self . tables. fn_sig[ def_id] <- tcx. fn_sig( def_id) ) ;
1327
1290
}
@@ -1357,6 +1320,7 @@ impl<'a, 'tcx> EncodeContext<'a, 'tcx> {
1357
1320
}
1358
1321
} ;
1359
1322
self . tables . asyncness . set ( def_id. index , m_sig. header . asyncness ) ;
1323
+ self . tables . constness . set ( def_id. index , hir:: Constness :: NotConst ) ;
1360
1324
}
1361
1325
ty:: AssocKind :: Type => {
1362
1326
self . encode_explicit_item_bounds ( def_id) ;
@@ -1381,6 +1345,13 @@ impl<'a, 'tcx> EncodeContext<'a, 'tcx> {
1381
1345
let hir:: ImplItemKind :: Fn ( ref sig, body) = ast_item. kind else { bug ! ( ) } ;
1382
1346
self . tables . asyncness . set ( def_id. index , sig. header . asyncness ) ;
1383
1347
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) ;
1384
1355
}
1385
1356
ty:: AssocKind :: Const | ty:: AssocKind :: Type => { }
1386
1357
}
@@ -1503,6 +1474,7 @@ impl<'a, 'tcx> EncodeContext<'a, 'tcx> {
1503
1474
hir:: ItemKind :: Fn ( ref sig, .., body) => {
1504
1475
self . tables . asyncness . set ( def_id. index , sig. header . asyncness ) ;
1505
1476
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 ) ;
1506
1478
}
1507
1479
hir:: ItemKind :: Macro ( ref macro_def, _) => {
1508
1480
if macro_def. macro_rules {
@@ -1523,6 +1495,7 @@ impl<'a, 'tcx> EncodeContext<'a, 'tcx> {
1523
1495
hir:: ItemKind :: Struct ( ref struct_def, _) => {
1524
1496
let adt_def = self . tcx . adt_def ( def_id) ;
1525
1497
record ! ( self . tables. repr_options[ def_id] <- adt_def. repr( ) ) ;
1498
+ self . tables . constness . set ( def_id. index , hir:: Constness :: Const ) ;
1526
1499
1527
1500
// Encode def_ids for each field and method
1528
1501
// for methods, write all the stuff get_trait_method
@@ -1551,8 +1524,9 @@ impl<'a, 'tcx> EncodeContext<'a, 'tcx> {
1551
1524
is_non_exhaustive: variant. is_field_list_non_exhaustive( ) ,
1552
1525
} ) ;
1553
1526
}
1554
- hir:: ItemKind :: Impl ( hir:: Impl { defaultness, .. } ) => {
1527
+ hir:: ItemKind :: Impl ( hir:: Impl { defaultness, constness , .. } ) => {
1555
1528
self . tables . impl_defaultness . set ( def_id. index , * defaultness) ;
1529
+ self . tables . constness . set ( def_id. index , * constness) ;
1556
1530
1557
1531
let trait_ref = self . tcx . impl_trait_ref ( def_id) ;
1558
1532
if let Some ( trait_ref) = trait_ref {
0 commit comments