@@ -298,11 +298,9 @@ fn check_item<'tcx>(tcx: TyCtxt<'tcx>, item: &'tcx hir::Item<'tcx>) -> Result<()
298298 check_item_fn ( tcx, def_id, ident, item. span , sig. decl )
299299 }
300300 hir:: ItemKind :: Static ( _, ty, ..) => {
301- check_item_type ( tcx, def_id, ty. span , UnsizedHandling :: Forbid )
302- }
303- hir:: ItemKind :: Const ( _, ty, ..) => {
304- check_item_type ( tcx, def_id, ty. span , UnsizedHandling :: Forbid )
301+ check_static_item ( tcx, def_id, ty. span , UnsizedHandling :: Forbid )
305302 }
303+ hir:: ItemKind :: Const ( _, ty, ..) => check_const_item ( tcx, def_id, ty. span , item. span ) ,
306304 hir:: ItemKind :: Struct ( _, _, hir_generics) => {
307305 let res = check_type_defn ( tcx, item, false ) ;
308306 check_variances_for_type_defn ( tcx, item, hir_generics) ;
@@ -366,7 +364,7 @@ fn check_foreign_item<'tcx>(
366364 check_item_fn ( tcx, def_id, item. ident , item. span , sig. decl )
367365 }
368366 hir:: ForeignItemKind :: Static ( ty, ..) => {
369- check_item_type ( tcx, def_id, ty. span , UnsizedHandling :: AllowIfForeignTail )
367+ check_static_item ( tcx, def_id, ty. span , UnsizedHandling :: AllowIfForeignTail )
370368 }
371369 hir:: ForeignItemKind :: Type => Ok ( ( ) ) ,
372370 }
@@ -1331,14 +1329,13 @@ enum UnsizedHandling {
13311329 AllowIfForeignTail ,
13321330}
13331331
1334- fn check_item_type (
1332+ #[ instrument( level = "debug" , skip( tcx, ty_span, unsized_handling) ) ]
1333+ fn check_static_item (
13351334 tcx : TyCtxt < ' _ > ,
13361335 item_id : LocalDefId ,
13371336 ty_span : Span ,
13381337 unsized_handling : UnsizedHandling ,
13391338) -> Result < ( ) , ErrorGuaranteed > {
1340- debug ! ( "check_item_type: {:?}" , item_id) ;
1341-
13421339 enter_wf_checking_ctxt ( tcx, ty_span, item_id, |wfcx| {
13431340 let ty = tcx. type_of ( item_id) . instantiate_identity ( ) ;
13441341 let item_ty = wfcx. deeply_normalize ( ty_span, Some ( WellFormedLoc :: Ty ( item_id) ) , ty) ;
@@ -1388,6 +1385,34 @@ fn check_item_type(
13881385 } )
13891386}
13901387
1388+ fn check_const_item (
1389+ tcx : TyCtxt < ' _ > ,
1390+ def_id : LocalDefId ,
1391+ ty_span : Span ,
1392+ item_span : Span ,
1393+ ) -> Result < ( ) , ErrorGuaranteed > {
1394+ enter_wf_checking_ctxt ( tcx, ty_span, def_id, |wfcx| {
1395+ let ty = tcx. type_of ( def_id) . instantiate_identity ( ) ;
1396+ let ty = wfcx. deeply_normalize ( ty_span, Some ( WellFormedLoc :: Ty ( def_id) ) , ty) ;
1397+
1398+ wfcx. register_wf_obligation ( ty_span, Some ( WellFormedLoc :: Ty ( def_id) ) , ty. into ( ) ) ;
1399+ wfcx. register_bound (
1400+ traits:: ObligationCause :: new (
1401+ ty_span,
1402+ wfcx. body_def_id ,
1403+ ObligationCauseCode :: SizedConstOrStatic ,
1404+ ) ,
1405+ wfcx. param_env ,
1406+ ty,
1407+ tcx. require_lang_item ( LangItem :: Sized , None ) ,
1408+ ) ;
1409+
1410+ check_where_clauses ( wfcx, item_span, def_id) ;
1411+
1412+ Ok ( ( ) )
1413+ } )
1414+ }
1415+
13911416#[ instrument( level = "debug" , skip( tcx, hir_self_ty, hir_trait_ref) ) ]
13921417fn check_impl < ' tcx > (
13931418 tcx : TyCtxt < ' tcx > ,
0 commit comments