diff options
| author | Nilstrieb <48135649+Nilstrieb@users.noreply.github.com> | 2023-02-26 21:50:19 +0000 |
|---|---|---|
| committer | Nilstrieb <48135649+Nilstrieb@users.noreply.github.com> | 2023-02-27 13:30:44 +0000 |
| commit | 5f593da4e6976fe27f7cd31ce0fb9a9293b3a00b (patch) | |
| tree | 72a1620a46caf8b13f65c543190f3481584082ba /compiler/rustc_mir_transform/src | |
| parent | 49b9cc5139dd4d11ef78dc08c1f9170de5b1ca39 (diff) | |
| download | rust-5f593da4e6976fe27f7cd31ce0fb9a9293b3a00b.tar.gz rust-5f593da4e6976fe27f7cd31ce0fb9a9293b3a00b.zip | |
Unify all validity check intrinsics
Also merges the inhabitedness check into the query to further unify the code paths.
Diffstat (limited to 'compiler/rustc_mir_transform/src')
| -rw-r--r-- | compiler/rustc_mir_transform/src/instcombine.rs | 16 |
1 files changed, 4 insertions, 12 deletions
diff --git a/compiler/rustc_mir_transform/src/instcombine.rs b/compiler/rustc_mir_transform/src/instcombine.rs index 05286b71d47..4182da1957e 100644 --- a/compiler/rustc_mir_transform/src/instcombine.rs +++ b/compiler/rustc_mir_transform/src/instcombine.rs @@ -6,9 +6,9 @@ use rustc_middle::mir::{ BinOp, Body, Constant, ConstantKind, LocalDecls, Operand, Place, ProjectionElem, Rvalue, SourceInfo, Statement, StatementKind, Terminator, TerminatorKind, UnOp, }; -use rustc_middle::ty::layout::InitKind; +use rustc_middle::ty::layout::ValidityRequirement; use rustc_middle::ty::{self, ParamEnv, SubstsRef, Ty, TyCtxt}; -use rustc_span::symbol::{sym, Symbol}; +use rustc_span::symbol::Symbol; pub struct InstCombine; @@ -256,16 +256,8 @@ fn intrinsic_assert_panics<'tcx>( ty: Ty<'tcx>, intrinsic_name: Symbol, ) -> Option<bool> { - Some(match intrinsic_name { - sym::assert_inhabited => tcx.layout_of(param_env.and(ty)).ok()?.abi.is_uninhabited(), - sym::assert_zero_valid => { - !tcx.check_validity_of_init((InitKind::Zero, param_env.and(ty))).ok()? - } - sym::assert_mem_uninitialized_valid => !tcx - .check_validity_of_init((InitKind::UninitMitigated0x01Fill, param_env.and(ty))) - .ok()?, - _ => return None, - }) + let requirement = ValidityRequirement::from_intrinsic(intrinsic_name)?; + Some(!tcx.check_validity_requirement((requirement, param_env.and(ty))).ok()?) } fn resolve_rust_intrinsic<'tcx>( |
