Rollup merge of #137298 - compiler-errors:mir-wf, r=lcnr
Check signature WF when lowering MIR body Alternative to #137233. https://github.com/rust-lang/rust/pull/137233#issuecomment-2667879143 Fixes https://github.com/rust-lang/rust/issues/137186 We do this check in `mir_drops_elaborated_and_const_checked` and not during `mir_promoted` because that may result in borrowck cycles if WF requires looking into an opaque hidden type. This causes some TAIT tests to fail unnecessarily. r? lcnr try-job: test-various
This commit is contained in:
commit
5df9a9f45c
33 changed files with 176 additions and 76 deletions
|
@ -513,6 +513,24 @@ fn mir_drops_elaborated_and_const_checked(tcx: TyCtxt<'_>, def: LocalDefId) -> &
|
|||
body.tainted_by_errors = Some(error_reported);
|
||||
}
|
||||
|
||||
// Also taint the body if it's within a top-level item that is not well formed.
|
||||
//
|
||||
// We do this check here and not during `mir_promoted` because that may result
|
||||
// in borrowck cycles if WF requires looking into an opaque hidden type.
|
||||
let root = tcx.typeck_root_def_id(def.to_def_id());
|
||||
match tcx.def_kind(root) {
|
||||
DefKind::Fn
|
||||
| DefKind::AssocFn
|
||||
| DefKind::Static { .. }
|
||||
| DefKind::Const
|
||||
| DefKind::AssocConst => {
|
||||
if let Err(guar) = tcx.check_well_formed(root.expect_local()) {
|
||||
body.tainted_by_errors = Some(guar);
|
||||
}
|
||||
}
|
||||
_ => {}
|
||||
}
|
||||
|
||||
run_analysis_to_runtime_passes(tcx, &mut body);
|
||||
|
||||
tcx.alloc_steal_mir(body)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue