message: Use constant eval to do strict validity checks
diff: use rustc_middle::ty::print::with_no_trimmed_paths;
  use rustc_middle::ty::subst::SubstsRef;
  use rustc_span::symbol::{kw, sym, Symbol};
  -use rustc_target::abi::InitKind;
  use crate::prelude::*;
  use cranelift_codegen::ir::AtomicRmwOp;
  @@ -672,12 +671,7 @@ fn swap(bcx: &mut FunctionBuilder<'_>, v: Value) -> Value {
  return;
  }
  - if intrinsic == sym::assert_zero_valid
  - && !layout.might_permit_raw_init(
  - fx,
  - InitKind::Zero,
  - fx.tcx.sess.opts.unstable_opts.strict_init_checks) {
  -
  + if intrinsic == sym::assert_zero_valid && !fx.tcx.permits_zero_init(layout) {
  with_no_trimmed_paths!({
  crate::base::codegen_panic(
  fx,
  @@ -688,12 +682,7 @@ fn swap(bcx: &mut FunctionBuilder<'_>, v: Value) -> Value {
  return;
  }
  - if intrinsic == sym::assert_uninit_valid
  - && !layout.might_permit_raw_init(
  - fx,
  - InitKind::Uninit,
  - fx.tcx.sess.opts.unstable_opts.strict_init_checks) {
  -
  + if intrinsic == sym::assert_uninit_valid && !fx.tcx.permits_uninit_init(layout) {
  with_no_trimmed_paths!({
  crate::base::codegen_panic(
  fx,
  