Auto merge of #136429 - fmease:gci-fix-def-site-checks, r= · rust-lang/rust@3f34812 (original) (raw)

`@@ -268,11 +268,9 @@ fn check_item<'tcx>(tcx: TyCtxt<'tcx>, item: &'tcx hir::Item<'tcx>) -> Result<()

`

268

268

`check_item_fn(tcx, def_id, ident, item.span, sig.decl)

`

269

269

`}

`

270

270

` hir::ItemKind::Static(_, ty, ..) => {

`

271

``

`-

check_item_type(tcx, def_id, ty.span, UnsizedHandling::Forbid)

`

272

``

`-

}

`

273

``

`-

hir::ItemKind::Const(_, ty, ..) => {

`

274

``

`-

check_item_type(tcx, def_id, ty.span, UnsizedHandling::Forbid)

`

``

271

`+

check_static_item(tcx, def_id, ty.span, UnsizedHandling::Forbid)

`

275

272

`}

`

``

273

`+

hir::ItemKind::Const(_, ty, ..) => check_const_item(tcx, def_id, ty.span, item.span),

`

276

274

` hir::ItemKind::Struct(_, _, hir_generics) => {

`

277

275

`let res = check_type_defn(tcx, item, false);

`

278

276

`check_variances_for_type_defn(tcx, item, hir_generics);

`

`@@ -335,7 +333,7 @@ fn check_foreign_item<'tcx>(

`

335

333

`check_item_fn(tcx, def_id, item.ident, item.span, sig.decl)

`

336

334

`}

`

337

335

` hir::ForeignItemKind::Static(ty, ..) => {

`

338

``

`-

check_item_type(tcx, def_id, ty.span, UnsizedHandling::AllowIfForeignTail)

`

``

336

`+

check_static_item(tcx, def_id, ty.span, UnsizedHandling::AllowIfForeignTail)

`

339

337

`}

`

340

338

` hir::ForeignItemKind::Type => Ok(()),

`

341

339

`}

`

`@@ -1300,14 +1298,13 @@ enum UnsizedHandling {

`

1300

1298

`AllowIfForeignTail,

`

1301

1299

`}

`

1302

1300

``

1303

``

`-

fn check_item_type(

`

``

1301

`+

#[instrument(level = "debug", skip(tcx, ty_span, unsized_handling))]

`

``

1302

`+

fn check_static_item(

`

1304

1303

`tcx: TyCtxt<'_>,

`

1305

1304

`item_id: LocalDefId,

`

1306

1305

`ty_span: Span,

`

1307

1306

`unsized_handling: UnsizedHandling,

`

1308

1307

`) -> Result<(), ErrorGuaranteed> {

`

1309

``

`-

debug!("check_item_type: {:?}", item_id);

`

1310

``

-

1311

1308

`enter_wf_checking_ctxt(tcx, ty_span, item_id, |wfcx| {

`

1312

1309

`let ty = tcx.type_of(item_id).instantiate_identity();

`

1313

1310

`let item_ty = wfcx.normalize(ty_span, Some(WellFormedLoc::Ty(item_id)), ty);

`

`@@ -1357,6 +1354,34 @@ fn check_item_type(

`

1357

1354

`})

`

1358

1355

`}

`

1359

1356

``

``

1357

`+

fn check_const_item(

`

``

1358

`+

tcx: TyCtxt<'_>,

`

``

1359

`+

def_id: LocalDefId,

`

``

1360

`+

ty_span: Span,

`

``

1361

`+

item_span: Span,

`

``

1362

`+

) -> Result<(), ErrorGuaranteed> {

`

``

1363

`+

enter_wf_checking_ctxt(tcx, ty_span, def_id, |wfcx| {

`

``

1364

`+

let ty = tcx.type_of(def_id).instantiate_identity();

`

``

1365

`+

let ty = wfcx.normalize(ty_span, Some(WellFormedLoc::Ty(def_id)), ty);

`

``

1366

+

``

1367

`+

wfcx.register_wf_obligation(ty_span, Some(WellFormedLoc::Ty(def_id)), ty.into());

`

``

1368

`+

wfcx.register_bound(

`

``

1369

`+

traits::ObligationCause::new(

`

``

1370

`+

ty_span,

`

``

1371

`+

wfcx.body_def_id,

`

``

1372

`+

ObligationCauseCode::SizedConstOrStatic,

`

``

1373

`+

),

`

``

1374

`+

wfcx.param_env,

`

``

1375

`+

ty,

`

``

1376

`+

tcx.require_lang_item(LangItem::Sized, None),

`

``

1377

`+

);

`

``

1378

+

``

1379

`+

check_where_clauses(wfcx, item_span, def_id);

`

``

1380

+

``

1381

`+

Ok(())

`

``

1382

`+

})

`

``

1383

`+

}

`

``

1384

+

1360

1385

`#[instrument(level = "debug", skip(tcx, hir_self_ty, hir_trait_ref))]

`

1361

1386

`fn check_impl<'tcx>(

`

1362

1387

`tcx: TyCtxt<'tcx>,

`