Leave FIXME for wasm layout difference.
There is a distinction between running this on wasm and i686, even though they should be identical. This technically is not _incorrect_, it's just an unexpected difference, which is worth investigating, but not for correctness.
This commit is contained in:
parent
610e1a1e05
commit
15f4eec7a9
11 changed files with 297 additions and 315 deletions
|
@ -1,6 +1,6 @@
|
||||||
use crate::rustc_middle::ty::util::IntTypeExt;
|
use crate::rustc_middle::ty::util::IntTypeExt;
|
||||||
use crate::MirPass;
|
use crate::MirPass;
|
||||||
use rustc_data_structures::stable_map::FxHashMap;
|
use rustc_data_structures::fx::FxHashMap;
|
||||||
use rustc_middle::mir::interpret::AllocId;
|
use rustc_middle::mir::interpret::AllocId;
|
||||||
use rustc_middle::mir::*;
|
use rustc_middle::mir::*;
|
||||||
use rustc_middle::ty::{self, AdtDef, Const, ParamEnv, Ty, TyCtxt};
|
use rustc_middle::ty::{self, AdtDef, Const, ParamEnv, Ty, TyCtxt};
|
||||||
|
@ -19,6 +19,10 @@ use rustc_target::abi::{HasDataLayout, Size, TagEncoding, Variants};
|
||||||
/// Instead of emitting moves of the large variant,
|
/// Instead of emitting moves of the large variant,
|
||||||
/// Perform a memcpy instead.
|
/// Perform a memcpy instead.
|
||||||
/// Based off of [this HackMD](https://hackmd.io/@ft4bxUsFT5CEUBmRKYHr7w/rJM8BBPzD).
|
/// Based off of [this HackMD](https://hackmd.io/@ft4bxUsFT5CEUBmRKYHr7w/rJM8BBPzD).
|
||||||
|
///
|
||||||
|
/// In summary, what this does is at runtime determine which enum variant is active,
|
||||||
|
/// and instead of copying all the bytes of the largest possible variant,
|
||||||
|
/// copy only the bytes for the currently active variant.
|
||||||
pub struct EnumSizeOpt {
|
pub struct EnumSizeOpt {
|
||||||
pub(crate) discrepancy: u64,
|
pub(crate) discrepancy: u64,
|
||||||
}
|
}
|
||||||
|
@ -26,7 +30,10 @@ pub struct EnumSizeOpt {
|
||||||
impl<'tcx> MirPass<'tcx> for EnumSizeOpt {
|
impl<'tcx> MirPass<'tcx> for EnumSizeOpt {
|
||||||
fn run_pass(&self, tcx: TyCtxt<'tcx>, body: &mut Body<'tcx>) {
|
fn run_pass(&self, tcx: TyCtxt<'tcx>, body: &mut Body<'tcx>) {
|
||||||
let sess = tcx.sess;
|
let sess = tcx.sess;
|
||||||
if (!sess.opts.debugging_opts.unsound_mir_opts) || sess.mir_opt_level() < 3 {
|
// FIXME(julianknodt): one thing noticed while testing this mir-opt is that there is a
|
||||||
|
// different layout of large enums on wasm. It's not clear what is causing this layout
|
||||||
|
// difference, as it should be identical to i686 (32 bit).
|
||||||
|
if (!sess.opts.unstable_opts.unsound_mir_opts) || sess.mir_opt_level() < 3 {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
self.optim(tcx, body);
|
self.optim(tcx, body);
|
||||||
|
@ -56,8 +63,8 @@ impl EnumSizeOpt {
|
||||||
Variants::Multiple { variants, .. } if variants.len() <= 1 => return None,
|
Variants::Multiple { variants, .. } if variants.len() <= 1 => return None,
|
||||||
Variants::Multiple { variants, .. } => variants,
|
Variants::Multiple { variants, .. } => variants,
|
||||||
};
|
};
|
||||||
let min = variants.iter().map(|v| v.size()).min().unwrap();
|
let min = variants.iter().map(|v| v.size).min().unwrap();
|
||||||
let max = variants.iter().map(|v| v.size()).max().unwrap();
|
let max = variants.iter().map(|v| v.size).max().unwrap();
|
||||||
if max.bytes() - min.bytes() < self.discrepancy {
|
if max.bytes() - min.bytes() < self.discrepancy {
|
||||||
return None;
|
return None;
|
||||||
}
|
}
|
||||||
|
@ -92,7 +99,7 @@ impl EnumSizeOpt {
|
||||||
for (var_idx, layout) in variants.iter_enumerated() {
|
for (var_idx, layout) in variants.iter_enumerated() {
|
||||||
let curr_idx =
|
let curr_idx =
|
||||||
target_bytes * adt_def.discriminant_for_variant(tcx, var_idx).val as usize;
|
target_bytes * adt_def.discriminant_for_variant(tcx, var_idx).val as usize;
|
||||||
let sz = layout.size();
|
let sz = layout.size;
|
||||||
match ptr_sized_int {
|
match ptr_sized_int {
|
||||||
rustc_target::abi::Integer::I32 => {
|
rustc_target::abi::Integer::I32 => {
|
||||||
encode_store!(curr_idx, data_layout.endian, sz.bytes() as u32);
|
encode_store!(curr_idx, data_layout.endian, sz.bytes() as u32);
|
||||||
|
@ -115,8 +122,11 @@ impl EnumSizeOpt {
|
||||||
let mut alloc_cache = FxHashMap::default();
|
let mut alloc_cache = FxHashMap::default();
|
||||||
let body_did = body.source.def_id();
|
let body_did = body.source.def_id();
|
||||||
let param_env = tcx.param_env(body_did);
|
let param_env = tcx.param_env(body_did);
|
||||||
let (bbs, local_decls) = body.basic_blocks_and_local_decls_mut();
|
|
||||||
for bb in bbs {
|
let blocks = body.basic_blocks.as_mut();
|
||||||
|
let local_decls = &mut body.local_decls;
|
||||||
|
|
||||||
|
for bb in blocks {
|
||||||
bb.expand_statements(|st| {
|
bb.expand_statements(|st| {
|
||||||
if let StatementKind::Assign(box (
|
if let StatementKind::Assign(box (
|
||||||
lhs,
|
lhs,
|
||||||
|
@ -175,7 +185,7 @@ impl EnumSizeOpt {
|
||||||
kind: StatementKind::Assign(box (
|
kind: StatementKind::Assign(box (
|
||||||
discr_cast_place,
|
discr_cast_place,
|
||||||
Rvalue::Cast(
|
Rvalue::Cast(
|
||||||
CastKind::Misc,
|
CastKind::IntToInt,
|
||||||
Operand::Copy(discr_place),
|
Operand::Copy(discr_place),
|
||||||
tcx.types.usize,
|
tcx.types.usize,
|
||||||
),
|
),
|
||||||
|
@ -217,7 +227,7 @@ impl EnumSizeOpt {
|
||||||
source_info,
|
source_info,
|
||||||
kind: StatementKind::Assign(box (
|
kind: StatementKind::Assign(box (
|
||||||
dst_cast_place,
|
dst_cast_place,
|
||||||
Rvalue::Cast(CastKind::Misc, Operand::Copy(dst), dst_cast_ty),
|
Rvalue::Cast(CastKind::PtrToPtr, Operand::Copy(dst), dst_cast_ty),
|
||||||
)),
|
)),
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -240,17 +250,19 @@ impl EnumSizeOpt {
|
||||||
source_info,
|
source_info,
|
||||||
kind: StatementKind::Assign(box (
|
kind: StatementKind::Assign(box (
|
||||||
src_cast_place,
|
src_cast_place,
|
||||||
Rvalue::Cast(CastKind::Misc, Operand::Copy(src), src_cast_ty),
|
Rvalue::Cast(CastKind::PtrToPtr, Operand::Copy(src), src_cast_ty),
|
||||||
)),
|
)),
|
||||||
};
|
};
|
||||||
|
|
||||||
let copy_bytes = Statement {
|
let copy_bytes = Statement {
|
||||||
source_info,
|
source_info,
|
||||||
kind: StatementKind::CopyNonOverlapping(box CopyNonOverlapping {
|
kind: StatementKind::Intrinsic(
|
||||||
src: Operand::Copy(src_cast_place),
|
box NonDivergingIntrinsic::CopyNonOverlapping(CopyNonOverlapping {
|
||||||
dst: Operand::Copy(dst_cast_place),
|
src: Operand::Copy(src_cast_place),
|
||||||
count: Operand::Copy(size_place),
|
dst: Operand::Copy(dst_cast_place),
|
||||||
}),
|
count: Operand::Copy(size_place),
|
||||||
|
}),
|
||||||
|
),
|
||||||
};
|
};
|
||||||
|
|
||||||
let store_dead = Statement {
|
let store_dead = Statement {
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
#![allow(rustc::potential_query_instability)]
|
#![allow(rustc::potential_query_instability)]
|
||||||
#![feature(box_patterns)]
|
#![feature(box_patterns)]
|
||||||
#![feature(drain_filter)]
|
#![feature(drain_filter)]
|
||||||
|
#![feature(box_syntax)]
|
||||||
#![feature(let_chains)]
|
#![feature(let_chains)]
|
||||||
#![feature(let_else)]
|
|
||||||
#![feature(map_try_insert)]
|
#![feature(map_try_insert)]
|
||||||
#![feature(min_specialization)]
|
#![feature(min_specialization)]
|
||||||
#![feature(never_type)]
|
#![feature(never_type)]
|
||||||
|
|
|
@ -2,54 +2,50 @@
|
||||||
+ // MIR for `cand` after EnumSizeOpt
|
+ // MIR for `cand` after EnumSizeOpt
|
||||||
|
|
||||||
fn cand() -> () {
|
fn cand() -> () {
|
||||||
let mut _0: (); // return place in scope 0 at $DIR/enum_opt.rs:50:15: 50:15
|
let mut _0: (); // return place in scope 0 at $DIR/enum_opt.rs:+0:15: +0:15
|
||||||
let mut _1: Candidate; // in scope 0 at $DIR/enum_opt.rs:51:7: 51:12
|
let mut _1: Candidate; // in scope 0 at $DIR/enum_opt.rs:+1:7: +1:12
|
||||||
let mut _2: Candidate; // in scope 0 at $DIR/enum_opt.rs:52:7: 52:34
|
let mut _2: Candidate; // in scope 0 at $DIR/enum_opt.rs:+2:7: +2:34
|
||||||
let mut _3: [u64; 1024]; // in scope 0 at $DIR/enum_opt.rs:52:24: 52:33
|
let mut _3: [u64; 1024]; // in scope 0 at $DIR/enum_opt.rs:+2:24: +2:33
|
||||||
+ let mut _4: [usize; 2]; // in scope 0 at $DIR/enum_opt.rs:52:3: 52:34
|
+ let mut _4: [usize; 2]; // in scope 0 at $DIR/enum_opt.rs:+2:3: +2:34
|
||||||
+ let mut _5: isize; // in scope 0 at $DIR/enum_opt.rs:52:3: 52:34
|
+ let mut _5: isize; // in scope 0 at $DIR/enum_opt.rs:+2:3: +2:34
|
||||||
+ let mut _6: usize; // in scope 0 at $DIR/enum_opt.rs:52:3: 52:34
|
+ let mut _6: usize; // in scope 0 at $DIR/enum_opt.rs:+2:3: +2:34
|
||||||
+ let mut _7: usize; // in scope 0 at $DIR/enum_opt.rs:52:3: 52:34
|
+ let mut _7: usize; // in scope 0 at $DIR/enum_opt.rs:+2:3: +2:34
|
||||||
+ let mut _8: *mut Candidate; // in scope 0 at $DIR/enum_opt.rs:52:3: 52:34
|
+ let mut _8: *mut Candidate; // in scope 0 at $DIR/enum_opt.rs:+2:3: +2:34
|
||||||
+ let mut _9: *mut u8; // in scope 0 at $DIR/enum_opt.rs:52:3: 52:34
|
+ let mut _9: *mut u8; // in scope 0 at $DIR/enum_opt.rs:+2:3: +2:34
|
||||||
+ let mut _10: *const Candidate; // in scope 0 at $DIR/enum_opt.rs:52:3: 52:34
|
+ let mut _10: *const Candidate; // in scope 0 at $DIR/enum_opt.rs:+2:3: +2:34
|
||||||
+ let mut _11: *const u8; // in scope 0 at $DIR/enum_opt.rs:52:3: 52:34
|
+ let mut _11: *const u8; // in scope 0 at $DIR/enum_opt.rs:+2:3: +2:34
|
||||||
scope 1 {
|
scope 1 {
|
||||||
debug a => _1; // in scope 1 at $DIR/enum_opt.rs:51:7: 51:12
|
debug a => _1; // in scope 1 at $DIR/enum_opt.rs:+1:7: +1:12
|
||||||
}
|
}
|
||||||
|
|
||||||
bb0: {
|
bb0: {
|
||||||
StorageLive(_1); // scope 0 at $DIR/enum_opt.rs:51:7: 51:12
|
StorageLive(_1); // scope 0 at $DIR/enum_opt.rs:+1:7: +1:12
|
||||||
Deinit(_1); // scope 0 at $DIR/enum_opt.rs:51:15: 51:34
|
Deinit(_1); // scope 0 at $DIR/enum_opt.rs:+1:15: +1:34
|
||||||
((_1 as Small).0: u8) = const 1_u8; // scope 0 at $DIR/enum_opt.rs:51:15: 51:34
|
((_1 as Small).0: u8) = const 1_u8; // scope 0 at $DIR/enum_opt.rs:+1:15: +1:34
|
||||||
discriminant(_1) = 0; // scope 0 at $DIR/enum_opt.rs:51:15: 51:34
|
discriminant(_1) = 0; // scope 0 at $DIR/enum_opt.rs:+1:15: +1:34
|
||||||
StorageLive(_2); // scope 1 at $DIR/enum_opt.rs:52:7: 52:34
|
StorageLive(_2); // scope 1 at $DIR/enum_opt.rs:+2:7: +2:34
|
||||||
StorageLive(_3); // scope 1 at $DIR/enum_opt.rs:52:24: 52:33
|
StorageLive(_3); // scope 1 at $DIR/enum_opt.rs:+2:24: +2:33
|
||||||
_3 = [const 1_u64; 1024]; // scope 1 at $DIR/enum_opt.rs:52:24: 52:33
|
_3 = [const 1_u64; 1024]; // scope 1 at $DIR/enum_opt.rs:+2:24: +2:33
|
||||||
Deinit(_2); // scope 1 at $DIR/enum_opt.rs:52:7: 52:34
|
Deinit(_2); // scope 1 at $DIR/enum_opt.rs:+2:7: +2:34
|
||||||
((_2 as Large).0: [u64; 1024]) = move _3; // scope 1 at $DIR/enum_opt.rs:52:7: 52:34
|
((_2 as Large).0: [u64; 1024]) = move _3; // scope 1 at $DIR/enum_opt.rs:+2:7: +2:34
|
||||||
discriminant(_2) = 1; // scope 1 at $DIR/enum_opt.rs:52:7: 52:34
|
discriminant(_2) = 1; // scope 1 at $DIR/enum_opt.rs:+2:7: +2:34
|
||||||
StorageDead(_3); // scope 1 at $DIR/enum_opt.rs:52:33: 52:34
|
StorageDead(_3); // scope 1 at $DIR/enum_opt.rs:+2:33: +2:34
|
||||||
- _1 = move _2; // scope 1 at $DIR/enum_opt.rs:52:3: 52:34
|
- _1 = move _2; // scope 1 at $DIR/enum_opt.rs:+2:3: +2:34
|
||||||
+ StorageLive(_4); // scope 1 at $DIR/enum_opt.rs:52:3: 52:34
|
+ StorageLive(_4); // scope 1 at $DIR/enum_opt.rs:+2:3: +2:34
|
||||||
+ _4 = const [2_usize, 8196_usize]; // scope 1 at $DIR/enum_opt.rs:52:3: 52:34
|
+ _4 = const [2_usize, 8196_usize]; // scope 1 at $DIR/enum_opt.rs:+2:3: +2:34
|
||||||
+ _5 = discriminant(_2); // scope 1 at $DIR/enum_opt.rs:52:3: 52:34
|
+ _5 = discriminant(_2); // scope 1 at $DIR/enum_opt.rs:+2:3: +2:34
|
||||||
+ _6 = _5 as usize (Misc); // scope 1 at $DIR/enum_opt.rs:52:3: 52:34
|
+ _6 = _5 as usize (IntToInt); // scope 1 at $DIR/enum_opt.rs:+2:3: +2:34
|
||||||
+ _7 = _4[_6]; // scope 1 at $DIR/enum_opt.rs:52:3: 52:34
|
+ _7 = _4[_6]; // scope 1 at $DIR/enum_opt.rs:+2:3: +2:34
|
||||||
+ _8 = &raw mut _1; // scope 1 at $DIR/enum_opt.rs:52:3: 52:34
|
+ _8 = &raw mut _1; // scope 1 at $DIR/enum_opt.rs:+2:3: +2:34
|
||||||
+ _9 = _8 as *mut u8 (Misc); // scope 1 at $DIR/enum_opt.rs:52:3: 52:34
|
+ _9 = _8 as *mut u8 (PtrToPtr); // scope 1 at $DIR/enum_opt.rs:+2:3: +2:34
|
||||||
+ _10 = &raw const _2; // scope 1 at $DIR/enum_opt.rs:52:3: 52:34
|
+ _10 = &raw const _2; // scope 1 at $DIR/enum_opt.rs:+2:3: +2:34
|
||||||
+ _11 = _10 as *const u8 (Misc); // scope 1 at $DIR/enum_opt.rs:52:3: 52:34
|
+ _11 = _10 as *const u8 (PtrToPtr); // scope 1 at $DIR/enum_opt.rs:+2:3: +2:34
|
||||||
+ copy_nonoverlapping(src=_11, dst=_9, count=_7); // scope 1 at $DIR/enum_opt.rs:52:3: 52:34
|
+ copy_nonoverlapping(dst = _9, src = _11, count = _7); // scope 1 at $DIR/enum_opt.rs:+2:3: +2:34
|
||||||
+ StorageDead(_4); // scope 1 at $DIR/enum_opt.rs:52:3: 52:34
|
+ StorageDead(_4); // scope 1 at $DIR/enum_opt.rs:+2:3: +2:34
|
||||||
StorageDead(_2); // scope 1 at $DIR/enum_opt.rs:52:33: 52:34
|
StorageDead(_2); // scope 1 at $DIR/enum_opt.rs:+2:33: +2:34
|
||||||
_0 = const (); // scope 0 at $DIR/enum_opt.rs:50:15: 53:2
|
_0 = const (); // scope 0 at $DIR/enum_opt.rs:+0:15: +3:2
|
||||||
StorageDead(_1); // scope 0 at $DIR/enum_opt.rs:53:1: 53:2
|
StorageDead(_1); // scope 0 at $DIR/enum_opt.rs:+3:1: +3:2
|
||||||
return; // scope 0 at $DIR/enum_opt.rs:53:2: 53:2
|
return; // scope 0 at $DIR/enum_opt.rs:+3:2: +3:2
|
||||||
}
|
|
||||||
|
|
||||||
bb1 (cleanup): {
|
|
||||||
resume; // scope 0 at $DIR/enum_opt.rs:50:1: 53:2
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -2,54 +2,50 @@
|
||||||
+ // MIR for `cand` after EnumSizeOpt
|
+ // MIR for `cand` after EnumSizeOpt
|
||||||
|
|
||||||
fn cand() -> () {
|
fn cand() -> () {
|
||||||
let mut _0: (); // return place in scope 0 at $DIR/enum_opt.rs:50:15: 50:15
|
let mut _0: (); // return place in scope 0 at $DIR/enum_opt.rs:+0:15: +0:15
|
||||||
let mut _1: Candidate; // in scope 0 at $DIR/enum_opt.rs:51:7: 51:12
|
let mut _1: Candidate; // in scope 0 at $DIR/enum_opt.rs:+1:7: +1:12
|
||||||
let mut _2: Candidate; // in scope 0 at $DIR/enum_opt.rs:52:7: 52:34
|
let mut _2: Candidate; // in scope 0 at $DIR/enum_opt.rs:+2:7: +2:34
|
||||||
let mut _3: [u64; 1024]; // in scope 0 at $DIR/enum_opt.rs:52:24: 52:33
|
let mut _3: [u64; 1024]; // in scope 0 at $DIR/enum_opt.rs:+2:24: +2:33
|
||||||
+ let mut _4: [usize; 2]; // in scope 0 at $DIR/enum_opt.rs:52:3: 52:34
|
+ let mut _4: [usize; 2]; // in scope 0 at $DIR/enum_opt.rs:+2:3: +2:34
|
||||||
+ let mut _5: isize; // in scope 0 at $DIR/enum_opt.rs:52:3: 52:34
|
+ let mut _5: isize; // in scope 0 at $DIR/enum_opt.rs:+2:3: +2:34
|
||||||
+ let mut _6: usize; // in scope 0 at $DIR/enum_opt.rs:52:3: 52:34
|
+ let mut _6: usize; // in scope 0 at $DIR/enum_opt.rs:+2:3: +2:34
|
||||||
+ let mut _7: usize; // in scope 0 at $DIR/enum_opt.rs:52:3: 52:34
|
+ let mut _7: usize; // in scope 0 at $DIR/enum_opt.rs:+2:3: +2:34
|
||||||
+ let mut _8: *mut Candidate; // in scope 0 at $DIR/enum_opt.rs:52:3: 52:34
|
+ let mut _8: *mut Candidate; // in scope 0 at $DIR/enum_opt.rs:+2:3: +2:34
|
||||||
+ let mut _9: *mut u8; // in scope 0 at $DIR/enum_opt.rs:52:3: 52:34
|
+ let mut _9: *mut u8; // in scope 0 at $DIR/enum_opt.rs:+2:3: +2:34
|
||||||
+ let mut _10: *const Candidate; // in scope 0 at $DIR/enum_opt.rs:52:3: 52:34
|
+ let mut _10: *const Candidate; // in scope 0 at $DIR/enum_opt.rs:+2:3: +2:34
|
||||||
+ let mut _11: *const u8; // in scope 0 at $DIR/enum_opt.rs:52:3: 52:34
|
+ let mut _11: *const u8; // in scope 0 at $DIR/enum_opt.rs:+2:3: +2:34
|
||||||
scope 1 {
|
scope 1 {
|
||||||
debug a => _1; // in scope 1 at $DIR/enum_opt.rs:51:7: 51:12
|
debug a => _1; // in scope 1 at $DIR/enum_opt.rs:+1:7: +1:12
|
||||||
}
|
}
|
||||||
|
|
||||||
bb0: {
|
bb0: {
|
||||||
StorageLive(_1); // scope 0 at $DIR/enum_opt.rs:51:7: 51:12
|
StorageLive(_1); // scope 0 at $DIR/enum_opt.rs:+1:7: +1:12
|
||||||
Deinit(_1); // scope 0 at $DIR/enum_opt.rs:51:15: 51:34
|
Deinit(_1); // scope 0 at $DIR/enum_opt.rs:+1:15: +1:34
|
||||||
((_1 as Small).0: u8) = const 1_u8; // scope 0 at $DIR/enum_opt.rs:51:15: 51:34
|
((_1 as Small).0: u8) = const 1_u8; // scope 0 at $DIR/enum_opt.rs:+1:15: +1:34
|
||||||
discriminant(_1) = 0; // scope 0 at $DIR/enum_opt.rs:51:15: 51:34
|
discriminant(_1) = 0; // scope 0 at $DIR/enum_opt.rs:+1:15: +1:34
|
||||||
StorageLive(_2); // scope 1 at $DIR/enum_opt.rs:52:7: 52:34
|
StorageLive(_2); // scope 1 at $DIR/enum_opt.rs:+2:7: +2:34
|
||||||
StorageLive(_3); // scope 1 at $DIR/enum_opt.rs:52:24: 52:33
|
StorageLive(_3); // scope 1 at $DIR/enum_opt.rs:+2:24: +2:33
|
||||||
_3 = [const 1_u64; 1024]; // scope 1 at $DIR/enum_opt.rs:52:24: 52:33
|
_3 = [const 1_u64; 1024]; // scope 1 at $DIR/enum_opt.rs:+2:24: +2:33
|
||||||
Deinit(_2); // scope 1 at $DIR/enum_opt.rs:52:7: 52:34
|
Deinit(_2); // scope 1 at $DIR/enum_opt.rs:+2:7: +2:34
|
||||||
((_2 as Large).0: [u64; 1024]) = move _3; // scope 1 at $DIR/enum_opt.rs:52:7: 52:34
|
((_2 as Large).0: [u64; 1024]) = move _3; // scope 1 at $DIR/enum_opt.rs:+2:7: +2:34
|
||||||
discriminant(_2) = 1; // scope 1 at $DIR/enum_opt.rs:52:7: 52:34
|
discriminant(_2) = 1; // scope 1 at $DIR/enum_opt.rs:+2:7: +2:34
|
||||||
StorageDead(_3); // scope 1 at $DIR/enum_opt.rs:52:33: 52:34
|
StorageDead(_3); // scope 1 at $DIR/enum_opt.rs:+2:33: +2:34
|
||||||
- _1 = move _2; // scope 1 at $DIR/enum_opt.rs:52:3: 52:34
|
- _1 = move _2; // scope 1 at $DIR/enum_opt.rs:+2:3: +2:34
|
||||||
+ StorageLive(_4); // scope 1 at $DIR/enum_opt.rs:52:3: 52:34
|
+ StorageLive(_4); // scope 1 at $DIR/enum_opt.rs:+2:3: +2:34
|
||||||
+ _4 = const [2_usize, 8200_usize]; // scope 1 at $DIR/enum_opt.rs:52:3: 52:34
|
+ _4 = const [2_usize, 8200_usize]; // scope 1 at $DIR/enum_opt.rs:+2:3: +2:34
|
||||||
+ _5 = discriminant(_2); // scope 1 at $DIR/enum_opt.rs:52:3: 52:34
|
+ _5 = discriminant(_2); // scope 1 at $DIR/enum_opt.rs:+2:3: +2:34
|
||||||
+ _6 = _5 as usize (Misc); // scope 1 at $DIR/enum_opt.rs:52:3: 52:34
|
+ _6 = _5 as usize (IntToInt); // scope 1 at $DIR/enum_opt.rs:+2:3: +2:34
|
||||||
+ _7 = _4[_6]; // scope 1 at $DIR/enum_opt.rs:52:3: 52:34
|
+ _7 = _4[_6]; // scope 1 at $DIR/enum_opt.rs:+2:3: +2:34
|
||||||
+ _8 = &raw mut _1; // scope 1 at $DIR/enum_opt.rs:52:3: 52:34
|
+ _8 = &raw mut _1; // scope 1 at $DIR/enum_opt.rs:+2:3: +2:34
|
||||||
+ _9 = _8 as *mut u8 (Misc); // scope 1 at $DIR/enum_opt.rs:52:3: 52:34
|
+ _9 = _8 as *mut u8 (PtrToPtr); // scope 1 at $DIR/enum_opt.rs:+2:3: +2:34
|
||||||
+ _10 = &raw const _2; // scope 1 at $DIR/enum_opt.rs:52:3: 52:34
|
+ _10 = &raw const _2; // scope 1 at $DIR/enum_opt.rs:+2:3: +2:34
|
||||||
+ _11 = _10 as *const u8 (Misc); // scope 1 at $DIR/enum_opt.rs:52:3: 52:34
|
+ _11 = _10 as *const u8 (PtrToPtr); // scope 1 at $DIR/enum_opt.rs:+2:3: +2:34
|
||||||
+ copy_nonoverlapping(src=_11, dst=_9, count=_7); // scope 1 at $DIR/enum_opt.rs:52:3: 52:34
|
+ copy_nonoverlapping(dst = _9, src = _11, count = _7); // scope 1 at $DIR/enum_opt.rs:+2:3: +2:34
|
||||||
+ StorageDead(_4); // scope 1 at $DIR/enum_opt.rs:52:3: 52:34
|
+ StorageDead(_4); // scope 1 at $DIR/enum_opt.rs:+2:3: +2:34
|
||||||
StorageDead(_2); // scope 1 at $DIR/enum_opt.rs:52:33: 52:34
|
StorageDead(_2); // scope 1 at $DIR/enum_opt.rs:+2:33: +2:34
|
||||||
_0 = const (); // scope 0 at $DIR/enum_opt.rs:50:15: 53:2
|
_0 = const (); // scope 0 at $DIR/enum_opt.rs:+0:15: +3:2
|
||||||
StorageDead(_1); // scope 0 at $DIR/enum_opt.rs:53:1: 53:2
|
StorageDead(_1); // scope 0 at $DIR/enum_opt.rs:+3:1: +3:2
|
||||||
return; // scope 0 at $DIR/enum_opt.rs:53:2: 53:2
|
return; // scope 0 at $DIR/enum_opt.rs:+3:2: +3:2
|
||||||
}
|
|
||||||
|
|
||||||
bb1 (cleanup): {
|
|
||||||
resume; // scope 0 at $DIR/enum_opt.rs:50:1: 53:2
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -2,34 +2,30 @@
|
||||||
+ // MIR for `invalid` after EnumSizeOpt
|
+ // MIR for `invalid` after EnumSizeOpt
|
||||||
|
|
||||||
fn invalid() -> () {
|
fn invalid() -> () {
|
||||||
let mut _0: (); // return place in scope 0 at $DIR/enum_opt.rs:56:18: 56:18
|
let mut _0: (); // return place in scope 0 at $DIR/enum_opt.rs:+0:18: +0:18
|
||||||
let mut _1: InvalidIdxs; // in scope 0 at $DIR/enum_opt.rs:57:7: 57:12
|
let mut _1: InvalidIdxs; // in scope 0 at $DIR/enum_opt.rs:+1:7: +1:12
|
||||||
let mut _2: InvalidIdxs; // in scope 0 at $DIR/enum_opt.rs:58:7: 58:36
|
let mut _2: InvalidIdxs; // in scope 0 at $DIR/enum_opt.rs:+2:7: +2:36
|
||||||
let mut _3: [u64; 1024]; // in scope 0 at $DIR/enum_opt.rs:58:26: 58:35
|
let mut _3: [u64; 1024]; // in scope 0 at $DIR/enum_opt.rs:+2:26: +2:35
|
||||||
scope 1 {
|
scope 1 {
|
||||||
debug a => _1; // in scope 1 at $DIR/enum_opt.rs:57:7: 57:12
|
debug a => _1; // in scope 1 at $DIR/enum_opt.rs:+1:7: +1:12
|
||||||
}
|
}
|
||||||
|
|
||||||
bb0: {
|
bb0: {
|
||||||
StorageLive(_1); // scope 0 at $DIR/enum_opt.rs:57:7: 57:12
|
StorageLive(_1); // scope 0 at $DIR/enum_opt.rs:+1:7: +1:12
|
||||||
Deinit(_1); // scope 0 at $DIR/enum_opt.rs:57:15: 57:29
|
Deinit(_1); // scope 0 at $DIR/enum_opt.rs:+1:15: +1:29
|
||||||
discriminant(_1) = 0; // scope 0 at $DIR/enum_opt.rs:57:15: 57:29
|
discriminant(_1) = 0; // scope 0 at $DIR/enum_opt.rs:+1:15: +1:29
|
||||||
StorageLive(_2); // scope 1 at $DIR/enum_opt.rs:58:7: 58:36
|
StorageLive(_2); // scope 1 at $DIR/enum_opt.rs:+2:7: +2:36
|
||||||
StorageLive(_3); // scope 1 at $DIR/enum_opt.rs:58:26: 58:35
|
StorageLive(_3); // scope 1 at $DIR/enum_opt.rs:+2:26: +2:35
|
||||||
_3 = [const 0_u64; 1024]; // scope 1 at $DIR/enum_opt.rs:58:26: 58:35
|
_3 = [const 0_u64; 1024]; // scope 1 at $DIR/enum_opt.rs:+2:26: +2:35
|
||||||
Deinit(_2); // scope 1 at $DIR/enum_opt.rs:58:7: 58:36
|
Deinit(_2); // scope 1 at $DIR/enum_opt.rs:+2:7: +2:36
|
||||||
((_2 as Large).0: [u64; 1024]) = move _3; // scope 1 at $DIR/enum_opt.rs:58:7: 58:36
|
((_2 as Large).0: [u64; 1024]) = move _3; // scope 1 at $DIR/enum_opt.rs:+2:7: +2:36
|
||||||
discriminant(_2) = 1; // scope 1 at $DIR/enum_opt.rs:58:7: 58:36
|
discriminant(_2) = 1; // scope 1 at $DIR/enum_opt.rs:+2:7: +2:36
|
||||||
StorageDead(_3); // scope 1 at $DIR/enum_opt.rs:58:35: 58:36
|
StorageDead(_3); // scope 1 at $DIR/enum_opt.rs:+2:35: +2:36
|
||||||
_1 = move _2; // scope 1 at $DIR/enum_opt.rs:58:3: 58:36
|
_1 = move _2; // scope 1 at $DIR/enum_opt.rs:+2:3: +2:36
|
||||||
StorageDead(_2); // scope 1 at $DIR/enum_opt.rs:58:35: 58:36
|
StorageDead(_2); // scope 1 at $DIR/enum_opt.rs:+2:35: +2:36
|
||||||
_0 = const (); // scope 0 at $DIR/enum_opt.rs:56:18: 59:2
|
_0 = const (); // scope 0 at $DIR/enum_opt.rs:+0:18: +3:2
|
||||||
StorageDead(_1); // scope 0 at $DIR/enum_opt.rs:59:1: 59:2
|
StorageDead(_1); // scope 0 at $DIR/enum_opt.rs:+3:1: +3:2
|
||||||
return; // scope 0 at $DIR/enum_opt.rs:59:2: 59:2
|
return; // scope 0 at $DIR/enum_opt.rs:+3:2: +3:2
|
||||||
}
|
|
||||||
|
|
||||||
bb1 (cleanup): {
|
|
||||||
resume; // scope 0 at $DIR/enum_opt.rs:56:1: 59:2
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -2,34 +2,30 @@
|
||||||
+ // MIR for `invalid` after EnumSizeOpt
|
+ // MIR for `invalid` after EnumSizeOpt
|
||||||
|
|
||||||
fn invalid() -> () {
|
fn invalid() -> () {
|
||||||
let mut _0: (); // return place in scope 0 at $DIR/enum_opt.rs:56:18: 56:18
|
let mut _0: (); // return place in scope 0 at $DIR/enum_opt.rs:+0:18: +0:18
|
||||||
let mut _1: InvalidIdxs; // in scope 0 at $DIR/enum_opt.rs:57:7: 57:12
|
let mut _1: InvalidIdxs; // in scope 0 at $DIR/enum_opt.rs:+1:7: +1:12
|
||||||
let mut _2: InvalidIdxs; // in scope 0 at $DIR/enum_opt.rs:58:7: 58:36
|
let mut _2: InvalidIdxs; // in scope 0 at $DIR/enum_opt.rs:+2:7: +2:36
|
||||||
let mut _3: [u64; 1024]; // in scope 0 at $DIR/enum_opt.rs:58:26: 58:35
|
let mut _3: [u64; 1024]; // in scope 0 at $DIR/enum_opt.rs:+2:26: +2:35
|
||||||
scope 1 {
|
scope 1 {
|
||||||
debug a => _1; // in scope 1 at $DIR/enum_opt.rs:57:7: 57:12
|
debug a => _1; // in scope 1 at $DIR/enum_opt.rs:+1:7: +1:12
|
||||||
}
|
}
|
||||||
|
|
||||||
bb0: {
|
bb0: {
|
||||||
StorageLive(_1); // scope 0 at $DIR/enum_opt.rs:57:7: 57:12
|
StorageLive(_1); // scope 0 at $DIR/enum_opt.rs:+1:7: +1:12
|
||||||
Deinit(_1); // scope 0 at $DIR/enum_opt.rs:57:15: 57:29
|
Deinit(_1); // scope 0 at $DIR/enum_opt.rs:+1:15: +1:29
|
||||||
discriminant(_1) = 0; // scope 0 at $DIR/enum_opt.rs:57:15: 57:29
|
discriminant(_1) = 0; // scope 0 at $DIR/enum_opt.rs:+1:15: +1:29
|
||||||
StorageLive(_2); // scope 1 at $DIR/enum_opt.rs:58:7: 58:36
|
StorageLive(_2); // scope 1 at $DIR/enum_opt.rs:+2:7: +2:36
|
||||||
StorageLive(_3); // scope 1 at $DIR/enum_opt.rs:58:26: 58:35
|
StorageLive(_3); // scope 1 at $DIR/enum_opt.rs:+2:26: +2:35
|
||||||
_3 = [const 0_u64; 1024]; // scope 1 at $DIR/enum_opt.rs:58:26: 58:35
|
_3 = [const 0_u64; 1024]; // scope 1 at $DIR/enum_opt.rs:+2:26: +2:35
|
||||||
Deinit(_2); // scope 1 at $DIR/enum_opt.rs:58:7: 58:36
|
Deinit(_2); // scope 1 at $DIR/enum_opt.rs:+2:7: +2:36
|
||||||
((_2 as Large).0: [u64; 1024]) = move _3; // scope 1 at $DIR/enum_opt.rs:58:7: 58:36
|
((_2 as Large).0: [u64; 1024]) = move _3; // scope 1 at $DIR/enum_opt.rs:+2:7: +2:36
|
||||||
discriminant(_2) = 1; // scope 1 at $DIR/enum_opt.rs:58:7: 58:36
|
discriminant(_2) = 1; // scope 1 at $DIR/enum_opt.rs:+2:7: +2:36
|
||||||
StorageDead(_3); // scope 1 at $DIR/enum_opt.rs:58:35: 58:36
|
StorageDead(_3); // scope 1 at $DIR/enum_opt.rs:+2:35: +2:36
|
||||||
_1 = move _2; // scope 1 at $DIR/enum_opt.rs:58:3: 58:36
|
_1 = move _2; // scope 1 at $DIR/enum_opt.rs:+2:3: +2:36
|
||||||
StorageDead(_2); // scope 1 at $DIR/enum_opt.rs:58:35: 58:36
|
StorageDead(_2); // scope 1 at $DIR/enum_opt.rs:+2:35: +2:36
|
||||||
_0 = const (); // scope 0 at $DIR/enum_opt.rs:56:18: 59:2
|
_0 = const (); // scope 0 at $DIR/enum_opt.rs:+0:18: +3:2
|
||||||
StorageDead(_1); // scope 0 at $DIR/enum_opt.rs:59:1: 59:2
|
StorageDead(_1); // scope 0 at $DIR/enum_opt.rs:+3:1: +3:2
|
||||||
return; // scope 0 at $DIR/enum_opt.rs:59:2: 59:2
|
return; // scope 0 at $DIR/enum_opt.rs:+3:2: +3:2
|
||||||
}
|
|
||||||
|
|
||||||
bb1 (cleanup): {
|
|
||||||
resume; // scope 0 at $DIR/enum_opt.rs:56:1: 59:2
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,12 +1,14 @@
|
||||||
// EMIT_MIR_FOR_EACH_BIT_WIDTH
|
// EMIT_MIR_FOR_EACH_BIT_WIDTH
|
||||||
// compile-flags: -Zunsound-mir-opts -Zmir-opt-level=3
|
// compile-flags: -Zunsound-mir-opts -Zmir-opt-level=3
|
||||||
// ignore-wasm32-bare compiled with panic=abort by default
|
// ignore-wasm32
|
||||||
|
|
||||||
#![feature(arbitrary_enum_discriminant, repr128)]
|
#![feature(arbitrary_enum_discriminant, repr128)]
|
||||||
|
|
||||||
// Tests that an enum with a variant with no data gets correctly transformed.
|
// Tests that an enum with a variant with no data gets correctly transformed.
|
||||||
|
#[repr(C)]
|
||||||
pub enum NoData {
|
pub enum NoData {
|
||||||
|
Large([u8; 8192]),
|
||||||
None,
|
None,
|
||||||
Large([u64; 1024]),
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Tests that an enum with a variant with data that is a valid candidate gets transformed.
|
// Tests that an enum with a variant with data that is a valid candidate gets transformed.
|
||||||
|
@ -26,7 +28,7 @@ pub enum InvalidIdxs {
|
||||||
// Tests that an enum with too high of a discriminant index (not in bounds of usize) does not
|
// Tests that an enum with too high of a discriminant index (not in bounds of usize) does not
|
||||||
// get tformed.
|
// get tformed.
|
||||||
#[repr(u128)]
|
#[repr(u128)]
|
||||||
pub enum Truncatable {
|
pub enum NotTrunctable {
|
||||||
A = 0,
|
A = 0,
|
||||||
B([u8; 1024]) = 1,
|
B([u8; 1024]) = 1,
|
||||||
C([u8; 4096]) = 0x10000000000000001,
|
C([u8; 4096]) = 0x10000000000000001,
|
||||||
|
@ -43,7 +45,7 @@ pub enum RandOrderDiscr {
|
||||||
// EMIT_MIR enum_opt.unin.EnumSizeOpt.diff
|
// EMIT_MIR enum_opt.unin.EnumSizeOpt.diff
|
||||||
pub fn unin() {
|
pub fn unin() {
|
||||||
let mut a = NoData::None;
|
let mut a = NoData::None;
|
||||||
a = NoData::Large([1; 1024]);
|
a = NoData::Large([1; 8192]);
|
||||||
}
|
}
|
||||||
|
|
||||||
// EMIT_MIR enum_opt.cand.EnumSizeOpt.diff
|
// EMIT_MIR enum_opt.cand.EnumSizeOpt.diff
|
||||||
|
@ -60,9 +62,9 @@ pub fn invalid() {
|
||||||
|
|
||||||
// EMIT_MIR enum_opt.trunc.EnumSizeOpt.diff
|
// EMIT_MIR enum_opt.trunc.EnumSizeOpt.diff
|
||||||
pub fn trunc() {
|
pub fn trunc() {
|
||||||
let mut a = Truncatable::A;
|
let mut a = NotTrunctable::A;
|
||||||
a = Truncatable::B([0; 1024]);
|
a = NotTrunctable::B([0; 1024]);
|
||||||
a = Truncatable::C([0; 4096]);
|
a = NotTrunctable::C([0; 4096]);
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn rand_order() {
|
pub fn rand_order() {
|
||||||
|
|
|
@ -2,45 +2,41 @@
|
||||||
+ // MIR for `trunc` after EnumSizeOpt
|
+ // MIR for `trunc` after EnumSizeOpt
|
||||||
|
|
||||||
fn trunc() -> () {
|
fn trunc() -> () {
|
||||||
let mut _0: (); // return place in scope 0 at $DIR/enum_opt.rs:62:16: 62:16
|
let mut _0: (); // return place in scope 0 at $DIR/enum_opt.rs:+0:16: +0:16
|
||||||
let mut _1: Truncatable; // in scope 0 at $DIR/enum_opt.rs:63:7: 63:12
|
let mut _1: NotTrunctable; // in scope 0 at $DIR/enum_opt.rs:+1:7: +1:12
|
||||||
let mut _2: Truncatable; // in scope 0 at $DIR/enum_opt.rs:64:7: 64:32
|
let mut _2: NotTrunctable; // in scope 0 at $DIR/enum_opt.rs:+2:7: +2:34
|
||||||
let mut _3: [u8; 1024]; // in scope 0 at $DIR/enum_opt.rs:64:22: 64:31
|
let mut _3: [u8; 1024]; // in scope 0 at $DIR/enum_opt.rs:+2:24: +2:33
|
||||||
let mut _4: Truncatable; // in scope 0 at $DIR/enum_opt.rs:65:7: 65:32
|
let mut _4: NotTrunctable; // in scope 0 at $DIR/enum_opt.rs:+3:7: +3:34
|
||||||
let mut _5: [u8; 4096]; // in scope 0 at $DIR/enum_opt.rs:65:22: 65:31
|
let mut _5: [u8; 4096]; // in scope 0 at $DIR/enum_opt.rs:+3:24: +3:33
|
||||||
scope 1 {
|
scope 1 {
|
||||||
debug a => _1; // in scope 1 at $DIR/enum_opt.rs:63:7: 63:12
|
debug a => _1; // in scope 1 at $DIR/enum_opt.rs:+1:7: +1:12
|
||||||
}
|
}
|
||||||
|
|
||||||
bb0: {
|
bb0: {
|
||||||
StorageLive(_1); // scope 0 at $DIR/enum_opt.rs:63:7: 63:12
|
StorageLive(_1); // scope 0 at $DIR/enum_opt.rs:+1:7: +1:12
|
||||||
Deinit(_1); // scope 0 at $DIR/enum_opt.rs:63:15: 63:29
|
Deinit(_1); // scope 0 at $DIR/enum_opt.rs:+1:15: +1:31
|
||||||
discriminant(_1) = 0; // scope 0 at $DIR/enum_opt.rs:63:15: 63:29
|
discriminant(_1) = 0; // scope 0 at $DIR/enum_opt.rs:+1:15: +1:31
|
||||||
StorageLive(_2); // scope 1 at $DIR/enum_opt.rs:64:7: 64:32
|
StorageLive(_2); // scope 1 at $DIR/enum_opt.rs:+2:7: +2:34
|
||||||
StorageLive(_3); // scope 1 at $DIR/enum_opt.rs:64:22: 64:31
|
StorageLive(_3); // scope 1 at $DIR/enum_opt.rs:+2:24: +2:33
|
||||||
_3 = [const 0_u8; 1024]; // scope 1 at $DIR/enum_opt.rs:64:22: 64:31
|
_3 = [const 0_u8; 1024]; // scope 1 at $DIR/enum_opt.rs:+2:24: +2:33
|
||||||
Deinit(_2); // scope 1 at $DIR/enum_opt.rs:64:7: 64:32
|
Deinit(_2); // scope 1 at $DIR/enum_opt.rs:+2:7: +2:34
|
||||||
((_2 as B).0: [u8; 1024]) = move _3; // scope 1 at $DIR/enum_opt.rs:64:7: 64:32
|
((_2 as B).0: [u8; 1024]) = move _3; // scope 1 at $DIR/enum_opt.rs:+2:7: +2:34
|
||||||
discriminant(_2) = 1; // scope 1 at $DIR/enum_opt.rs:64:7: 64:32
|
discriminant(_2) = 1; // scope 1 at $DIR/enum_opt.rs:+2:7: +2:34
|
||||||
StorageDead(_3); // scope 1 at $DIR/enum_opt.rs:64:31: 64:32
|
StorageDead(_3); // scope 1 at $DIR/enum_opt.rs:+2:33: +2:34
|
||||||
_1 = move _2; // scope 1 at $DIR/enum_opt.rs:64:3: 64:32
|
_1 = move _2; // scope 1 at $DIR/enum_opt.rs:+2:3: +2:34
|
||||||
StorageDead(_2); // scope 1 at $DIR/enum_opt.rs:64:31: 64:32
|
StorageDead(_2); // scope 1 at $DIR/enum_opt.rs:+2:33: +2:34
|
||||||
StorageLive(_4); // scope 1 at $DIR/enum_opt.rs:65:7: 65:32
|
StorageLive(_4); // scope 1 at $DIR/enum_opt.rs:+3:7: +3:34
|
||||||
StorageLive(_5); // scope 1 at $DIR/enum_opt.rs:65:22: 65:31
|
StorageLive(_5); // scope 1 at $DIR/enum_opt.rs:+3:24: +3:33
|
||||||
_5 = [const 0_u8; 4096]; // scope 1 at $DIR/enum_opt.rs:65:22: 65:31
|
_5 = [const 0_u8; 4096]; // scope 1 at $DIR/enum_opt.rs:+3:24: +3:33
|
||||||
Deinit(_4); // scope 1 at $DIR/enum_opt.rs:65:7: 65:32
|
Deinit(_4); // scope 1 at $DIR/enum_opt.rs:+3:7: +3:34
|
||||||
((_4 as C).0: [u8; 4096]) = move _5; // scope 1 at $DIR/enum_opt.rs:65:7: 65:32
|
((_4 as C).0: [u8; 4096]) = move _5; // scope 1 at $DIR/enum_opt.rs:+3:7: +3:34
|
||||||
discriminant(_4) = 2; // scope 1 at $DIR/enum_opt.rs:65:7: 65:32
|
discriminant(_4) = 2; // scope 1 at $DIR/enum_opt.rs:+3:7: +3:34
|
||||||
StorageDead(_5); // scope 1 at $DIR/enum_opt.rs:65:31: 65:32
|
StorageDead(_5); // scope 1 at $DIR/enum_opt.rs:+3:33: +3:34
|
||||||
_1 = move _4; // scope 1 at $DIR/enum_opt.rs:65:3: 65:32
|
_1 = move _4; // scope 1 at $DIR/enum_opt.rs:+3:3: +3:34
|
||||||
StorageDead(_4); // scope 1 at $DIR/enum_opt.rs:65:31: 65:32
|
StorageDead(_4); // scope 1 at $DIR/enum_opt.rs:+3:33: +3:34
|
||||||
_0 = const (); // scope 0 at $DIR/enum_opt.rs:62:16: 66:2
|
_0 = const (); // scope 0 at $DIR/enum_opt.rs:+0:16: +4:2
|
||||||
StorageDead(_1); // scope 0 at $DIR/enum_opt.rs:66:1: 66:2
|
StorageDead(_1); // scope 0 at $DIR/enum_opt.rs:+4:1: +4:2
|
||||||
return; // scope 0 at $DIR/enum_opt.rs:66:2: 66:2
|
return; // scope 0 at $DIR/enum_opt.rs:+4:2: +4:2
|
||||||
}
|
|
||||||
|
|
||||||
bb1 (cleanup): {
|
|
||||||
resume; // scope 0 at $DIR/enum_opt.rs:62:1: 66:2
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -2,45 +2,41 @@
|
||||||
+ // MIR for `trunc` after EnumSizeOpt
|
+ // MIR for `trunc` after EnumSizeOpt
|
||||||
|
|
||||||
fn trunc() -> () {
|
fn trunc() -> () {
|
||||||
let mut _0: (); // return place in scope 0 at $DIR/enum_opt.rs:62:16: 62:16
|
let mut _0: (); // return place in scope 0 at $DIR/enum_opt.rs:+0:16: +0:16
|
||||||
let mut _1: Truncatable; // in scope 0 at $DIR/enum_opt.rs:63:7: 63:12
|
let mut _1: NotTrunctable; // in scope 0 at $DIR/enum_opt.rs:+1:7: +1:12
|
||||||
let mut _2: Truncatable; // in scope 0 at $DIR/enum_opt.rs:64:7: 64:32
|
let mut _2: NotTrunctable; // in scope 0 at $DIR/enum_opt.rs:+2:7: +2:34
|
||||||
let mut _3: [u8; 1024]; // in scope 0 at $DIR/enum_opt.rs:64:22: 64:31
|
let mut _3: [u8; 1024]; // in scope 0 at $DIR/enum_opt.rs:+2:24: +2:33
|
||||||
let mut _4: Truncatable; // in scope 0 at $DIR/enum_opt.rs:65:7: 65:32
|
let mut _4: NotTrunctable; // in scope 0 at $DIR/enum_opt.rs:+3:7: +3:34
|
||||||
let mut _5: [u8; 4096]; // in scope 0 at $DIR/enum_opt.rs:65:22: 65:31
|
let mut _5: [u8; 4096]; // in scope 0 at $DIR/enum_opt.rs:+3:24: +3:33
|
||||||
scope 1 {
|
scope 1 {
|
||||||
debug a => _1; // in scope 1 at $DIR/enum_opt.rs:63:7: 63:12
|
debug a => _1; // in scope 1 at $DIR/enum_opt.rs:+1:7: +1:12
|
||||||
}
|
}
|
||||||
|
|
||||||
bb0: {
|
bb0: {
|
||||||
StorageLive(_1); // scope 0 at $DIR/enum_opt.rs:63:7: 63:12
|
StorageLive(_1); // scope 0 at $DIR/enum_opt.rs:+1:7: +1:12
|
||||||
Deinit(_1); // scope 0 at $DIR/enum_opt.rs:63:15: 63:29
|
Deinit(_1); // scope 0 at $DIR/enum_opt.rs:+1:15: +1:31
|
||||||
discriminant(_1) = 0; // scope 0 at $DIR/enum_opt.rs:63:15: 63:29
|
discriminant(_1) = 0; // scope 0 at $DIR/enum_opt.rs:+1:15: +1:31
|
||||||
StorageLive(_2); // scope 1 at $DIR/enum_opt.rs:64:7: 64:32
|
StorageLive(_2); // scope 1 at $DIR/enum_opt.rs:+2:7: +2:34
|
||||||
StorageLive(_3); // scope 1 at $DIR/enum_opt.rs:64:22: 64:31
|
StorageLive(_3); // scope 1 at $DIR/enum_opt.rs:+2:24: +2:33
|
||||||
_3 = [const 0_u8; 1024]; // scope 1 at $DIR/enum_opt.rs:64:22: 64:31
|
_3 = [const 0_u8; 1024]; // scope 1 at $DIR/enum_opt.rs:+2:24: +2:33
|
||||||
Deinit(_2); // scope 1 at $DIR/enum_opt.rs:64:7: 64:32
|
Deinit(_2); // scope 1 at $DIR/enum_opt.rs:+2:7: +2:34
|
||||||
((_2 as B).0: [u8; 1024]) = move _3; // scope 1 at $DIR/enum_opt.rs:64:7: 64:32
|
((_2 as B).0: [u8; 1024]) = move _3; // scope 1 at $DIR/enum_opt.rs:+2:7: +2:34
|
||||||
discriminant(_2) = 1; // scope 1 at $DIR/enum_opt.rs:64:7: 64:32
|
discriminant(_2) = 1; // scope 1 at $DIR/enum_opt.rs:+2:7: +2:34
|
||||||
StorageDead(_3); // scope 1 at $DIR/enum_opt.rs:64:31: 64:32
|
StorageDead(_3); // scope 1 at $DIR/enum_opt.rs:+2:33: +2:34
|
||||||
_1 = move _2; // scope 1 at $DIR/enum_opt.rs:64:3: 64:32
|
_1 = move _2; // scope 1 at $DIR/enum_opt.rs:+2:3: +2:34
|
||||||
StorageDead(_2); // scope 1 at $DIR/enum_opt.rs:64:31: 64:32
|
StorageDead(_2); // scope 1 at $DIR/enum_opt.rs:+2:33: +2:34
|
||||||
StorageLive(_4); // scope 1 at $DIR/enum_opt.rs:65:7: 65:32
|
StorageLive(_4); // scope 1 at $DIR/enum_opt.rs:+3:7: +3:34
|
||||||
StorageLive(_5); // scope 1 at $DIR/enum_opt.rs:65:22: 65:31
|
StorageLive(_5); // scope 1 at $DIR/enum_opt.rs:+3:24: +3:33
|
||||||
_5 = [const 0_u8; 4096]; // scope 1 at $DIR/enum_opt.rs:65:22: 65:31
|
_5 = [const 0_u8; 4096]; // scope 1 at $DIR/enum_opt.rs:+3:24: +3:33
|
||||||
Deinit(_4); // scope 1 at $DIR/enum_opt.rs:65:7: 65:32
|
Deinit(_4); // scope 1 at $DIR/enum_opt.rs:+3:7: +3:34
|
||||||
((_4 as C).0: [u8; 4096]) = move _5; // scope 1 at $DIR/enum_opt.rs:65:7: 65:32
|
((_4 as C).0: [u8; 4096]) = move _5; // scope 1 at $DIR/enum_opt.rs:+3:7: +3:34
|
||||||
discriminant(_4) = 2; // scope 1 at $DIR/enum_opt.rs:65:7: 65:32
|
discriminant(_4) = 2; // scope 1 at $DIR/enum_opt.rs:+3:7: +3:34
|
||||||
StorageDead(_5); // scope 1 at $DIR/enum_opt.rs:65:31: 65:32
|
StorageDead(_5); // scope 1 at $DIR/enum_opt.rs:+3:33: +3:34
|
||||||
_1 = move _4; // scope 1 at $DIR/enum_opt.rs:65:3: 65:32
|
_1 = move _4; // scope 1 at $DIR/enum_opt.rs:+3:3: +3:34
|
||||||
StorageDead(_4); // scope 1 at $DIR/enum_opt.rs:65:31: 65:32
|
StorageDead(_4); // scope 1 at $DIR/enum_opt.rs:+3:33: +3:34
|
||||||
_0 = const (); // scope 0 at $DIR/enum_opt.rs:62:16: 66:2
|
_0 = const (); // scope 0 at $DIR/enum_opt.rs:+0:16: +4:2
|
||||||
StorageDead(_1); // scope 0 at $DIR/enum_opt.rs:66:1: 66:2
|
StorageDead(_1); // scope 0 at $DIR/enum_opt.rs:+4:1: +4:2
|
||||||
return; // scope 0 at $DIR/enum_opt.rs:66:2: 66:2
|
return; // scope 0 at $DIR/enum_opt.rs:+4:2: +4:2
|
||||||
}
|
|
||||||
|
|
||||||
bb1 (cleanup): {
|
|
||||||
resume; // scope 0 at $DIR/enum_opt.rs:62:1: 66:2
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -2,53 +2,49 @@
|
||||||
+ // MIR for `unin` after EnumSizeOpt
|
+ // MIR for `unin` after EnumSizeOpt
|
||||||
|
|
||||||
fn unin() -> () {
|
fn unin() -> () {
|
||||||
let mut _0: (); // return place in scope 0 at $DIR/enum_opt.rs:44:15: 44:15
|
let mut _0: (); // return place in scope 0 at $DIR/enum_opt.rs:+0:15: +0:15
|
||||||
let mut _1: NoData; // in scope 0 at $DIR/enum_opt.rs:45:7: 45:12
|
let mut _1: NoData; // in scope 0 at $DIR/enum_opt.rs:+1:7: +1:12
|
||||||
let mut _2: NoData; // in scope 0 at $DIR/enum_opt.rs:46:7: 46:31
|
let mut _2: NoData; // in scope 0 at $DIR/enum_opt.rs:+2:7: +2:31
|
||||||
let mut _3: [u64; 1024]; // in scope 0 at $DIR/enum_opt.rs:46:21: 46:30
|
let mut _3: [u8; 8192]; // in scope 0 at $DIR/enum_opt.rs:+2:21: +2:30
|
||||||
+ let mut _4: [usize; 2]; // in scope 0 at $DIR/enum_opt.rs:46:3: 46:31
|
+ let mut _4: [usize; 2]; // in scope 0 at $DIR/enum_opt.rs:+2:3: +2:31
|
||||||
+ let mut _5: isize; // in scope 0 at $DIR/enum_opt.rs:46:3: 46:31
|
+ let mut _5: isize; // in scope 0 at $DIR/enum_opt.rs:+2:3: +2:31
|
||||||
+ let mut _6: usize; // in scope 0 at $DIR/enum_opt.rs:46:3: 46:31
|
+ let mut _6: usize; // in scope 0 at $DIR/enum_opt.rs:+2:3: +2:31
|
||||||
+ let mut _7: usize; // in scope 0 at $DIR/enum_opt.rs:46:3: 46:31
|
+ let mut _7: usize; // in scope 0 at $DIR/enum_opt.rs:+2:3: +2:31
|
||||||
+ let mut _8: *mut NoData; // in scope 0 at $DIR/enum_opt.rs:46:3: 46:31
|
+ let mut _8: *mut NoData; // in scope 0 at $DIR/enum_opt.rs:+2:3: +2:31
|
||||||
+ let mut _9: *mut u8; // in scope 0 at $DIR/enum_opt.rs:46:3: 46:31
|
+ let mut _9: *mut u8; // in scope 0 at $DIR/enum_opt.rs:+2:3: +2:31
|
||||||
+ let mut _10: *const NoData; // in scope 0 at $DIR/enum_opt.rs:46:3: 46:31
|
+ let mut _10: *const NoData; // in scope 0 at $DIR/enum_opt.rs:+2:3: +2:31
|
||||||
+ let mut _11: *const u8; // in scope 0 at $DIR/enum_opt.rs:46:3: 46:31
|
+ let mut _11: *const u8; // in scope 0 at $DIR/enum_opt.rs:+2:3: +2:31
|
||||||
scope 1 {
|
scope 1 {
|
||||||
debug a => _1; // in scope 1 at $DIR/enum_opt.rs:45:7: 45:12
|
debug a => _1; // in scope 1 at $DIR/enum_opt.rs:+1:7: +1:12
|
||||||
}
|
}
|
||||||
|
|
||||||
bb0: {
|
bb0: {
|
||||||
StorageLive(_1); // scope 0 at $DIR/enum_opt.rs:45:7: 45:12
|
StorageLive(_1); // scope 0 at $DIR/enum_opt.rs:+1:7: +1:12
|
||||||
Deinit(_1); // scope 0 at $DIR/enum_opt.rs:45:15: 45:27
|
Deinit(_1); // scope 0 at $DIR/enum_opt.rs:+1:15: +1:27
|
||||||
discriminant(_1) = 0; // scope 0 at $DIR/enum_opt.rs:45:15: 45:27
|
discriminant(_1) = 1; // scope 0 at $DIR/enum_opt.rs:+1:15: +1:27
|
||||||
StorageLive(_2); // scope 1 at $DIR/enum_opt.rs:46:7: 46:31
|
StorageLive(_2); // scope 1 at $DIR/enum_opt.rs:+2:7: +2:31
|
||||||
StorageLive(_3); // scope 1 at $DIR/enum_opt.rs:46:21: 46:30
|
StorageLive(_3); // scope 1 at $DIR/enum_opt.rs:+2:21: +2:30
|
||||||
_3 = [const 1_u64; 1024]; // scope 1 at $DIR/enum_opt.rs:46:21: 46:30
|
_3 = [const 1_u8; 8192]; // scope 1 at $DIR/enum_opt.rs:+2:21: +2:30
|
||||||
Deinit(_2); // scope 1 at $DIR/enum_opt.rs:46:7: 46:31
|
Deinit(_2); // scope 1 at $DIR/enum_opt.rs:+2:7: +2:31
|
||||||
((_2 as Large).0: [u64; 1024]) = move _3; // scope 1 at $DIR/enum_opt.rs:46:7: 46:31
|
((_2 as Large).0: [u8; 8192]) = move _3; // scope 1 at $DIR/enum_opt.rs:+2:7: +2:31
|
||||||
discriminant(_2) = 1; // scope 1 at $DIR/enum_opt.rs:46:7: 46:31
|
discriminant(_2) = 0; // scope 1 at $DIR/enum_opt.rs:+2:7: +2:31
|
||||||
StorageDead(_3); // scope 1 at $DIR/enum_opt.rs:46:30: 46:31
|
StorageDead(_3); // scope 1 at $DIR/enum_opt.rs:+2:30: +2:31
|
||||||
- _1 = move _2; // scope 1 at $DIR/enum_opt.rs:46:3: 46:31
|
- _1 = move _2; // scope 1 at $DIR/enum_opt.rs:+2:3: +2:31
|
||||||
+ StorageLive(_4); // scope 1 at $DIR/enum_opt.rs:46:3: 46:31
|
+ StorageLive(_4); // scope 1 at $DIR/enum_opt.rs:+2:3: +2:31
|
||||||
+ _4 = const [4_usize, 8196_usize]; // scope 1 at $DIR/enum_opt.rs:46:3: 46:31
|
+ _4 = const [8196_usize, 4_usize]; // scope 1 at $DIR/enum_opt.rs:+2:3: +2:31
|
||||||
+ _5 = discriminant(_2); // scope 1 at $DIR/enum_opt.rs:46:3: 46:31
|
+ _5 = discriminant(_2); // scope 1 at $DIR/enum_opt.rs:+2:3: +2:31
|
||||||
+ _6 = _5 as usize (Misc); // scope 1 at $DIR/enum_opt.rs:46:3: 46:31
|
+ _6 = _5 as usize (IntToInt); // scope 1 at $DIR/enum_opt.rs:+2:3: +2:31
|
||||||
+ _7 = _4[_6]; // scope 1 at $DIR/enum_opt.rs:46:3: 46:31
|
+ _7 = _4[_6]; // scope 1 at $DIR/enum_opt.rs:+2:3: +2:31
|
||||||
+ _8 = &raw mut _1; // scope 1 at $DIR/enum_opt.rs:46:3: 46:31
|
+ _8 = &raw mut _1; // scope 1 at $DIR/enum_opt.rs:+2:3: +2:31
|
||||||
+ _9 = _8 as *mut u8 (Misc); // scope 1 at $DIR/enum_opt.rs:46:3: 46:31
|
+ _9 = _8 as *mut u8 (PtrToPtr); // scope 1 at $DIR/enum_opt.rs:+2:3: +2:31
|
||||||
+ _10 = &raw const _2; // scope 1 at $DIR/enum_opt.rs:46:3: 46:31
|
+ _10 = &raw const _2; // scope 1 at $DIR/enum_opt.rs:+2:3: +2:31
|
||||||
+ _11 = _10 as *const u8 (Misc); // scope 1 at $DIR/enum_opt.rs:46:3: 46:31
|
+ _11 = _10 as *const u8 (PtrToPtr); // scope 1 at $DIR/enum_opt.rs:+2:3: +2:31
|
||||||
+ copy_nonoverlapping(src=_11, dst=_9, count=_7); // scope 1 at $DIR/enum_opt.rs:46:3: 46:31
|
+ copy_nonoverlapping(dst = _9, src = _11, count = _7); // scope 1 at $DIR/enum_opt.rs:+2:3: +2:31
|
||||||
+ StorageDead(_4); // scope 1 at $DIR/enum_opt.rs:46:3: 46:31
|
+ StorageDead(_4); // scope 1 at $DIR/enum_opt.rs:+2:3: +2:31
|
||||||
StorageDead(_2); // scope 1 at $DIR/enum_opt.rs:46:30: 46:31
|
StorageDead(_2); // scope 1 at $DIR/enum_opt.rs:+2:30: +2:31
|
||||||
_0 = const (); // scope 0 at $DIR/enum_opt.rs:44:15: 47:2
|
_0 = const (); // scope 0 at $DIR/enum_opt.rs:+0:15: +3:2
|
||||||
StorageDead(_1); // scope 0 at $DIR/enum_opt.rs:47:1: 47:2
|
StorageDead(_1); // scope 0 at $DIR/enum_opt.rs:+3:1: +3:2
|
||||||
return; // scope 0 at $DIR/enum_opt.rs:47:2: 47:2
|
return; // scope 0 at $DIR/enum_opt.rs:+3:2: +3:2
|
||||||
}
|
|
||||||
|
|
||||||
bb1 (cleanup): {
|
|
||||||
resume; // scope 0 at $DIR/enum_opt.rs:44:1: 47:2
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -2,53 +2,49 @@
|
||||||
+ // MIR for `unin` after EnumSizeOpt
|
+ // MIR for `unin` after EnumSizeOpt
|
||||||
|
|
||||||
fn unin() -> () {
|
fn unin() -> () {
|
||||||
let mut _0: (); // return place in scope 0 at $DIR/enum_opt.rs:44:15: 44:15
|
let mut _0: (); // return place in scope 0 at $DIR/enum_opt.rs:+0:15: +0:15
|
||||||
let mut _1: NoData; // in scope 0 at $DIR/enum_opt.rs:45:7: 45:12
|
let mut _1: NoData; // in scope 0 at $DIR/enum_opt.rs:+1:7: +1:12
|
||||||
let mut _2: NoData; // in scope 0 at $DIR/enum_opt.rs:46:7: 46:31
|
let mut _2: NoData; // in scope 0 at $DIR/enum_opt.rs:+2:7: +2:31
|
||||||
let mut _3: [u64; 1024]; // in scope 0 at $DIR/enum_opt.rs:46:21: 46:30
|
let mut _3: [u8; 8192]; // in scope 0 at $DIR/enum_opt.rs:+2:21: +2:30
|
||||||
+ let mut _4: [usize; 2]; // in scope 0 at $DIR/enum_opt.rs:46:3: 46:31
|
+ let mut _4: [usize; 2]; // in scope 0 at $DIR/enum_opt.rs:+2:3: +2:31
|
||||||
+ let mut _5: isize; // in scope 0 at $DIR/enum_opt.rs:46:3: 46:31
|
+ let mut _5: isize; // in scope 0 at $DIR/enum_opt.rs:+2:3: +2:31
|
||||||
+ let mut _6: usize; // in scope 0 at $DIR/enum_opt.rs:46:3: 46:31
|
+ let mut _6: usize; // in scope 0 at $DIR/enum_opt.rs:+2:3: +2:31
|
||||||
+ let mut _7: usize; // in scope 0 at $DIR/enum_opt.rs:46:3: 46:31
|
+ let mut _7: usize; // in scope 0 at $DIR/enum_opt.rs:+2:3: +2:31
|
||||||
+ let mut _8: *mut NoData; // in scope 0 at $DIR/enum_opt.rs:46:3: 46:31
|
+ let mut _8: *mut NoData; // in scope 0 at $DIR/enum_opt.rs:+2:3: +2:31
|
||||||
+ let mut _9: *mut u8; // in scope 0 at $DIR/enum_opt.rs:46:3: 46:31
|
+ let mut _9: *mut u8; // in scope 0 at $DIR/enum_opt.rs:+2:3: +2:31
|
||||||
+ let mut _10: *const NoData; // in scope 0 at $DIR/enum_opt.rs:46:3: 46:31
|
+ let mut _10: *const NoData; // in scope 0 at $DIR/enum_opt.rs:+2:3: +2:31
|
||||||
+ let mut _11: *const u8; // in scope 0 at $DIR/enum_opt.rs:46:3: 46:31
|
+ let mut _11: *const u8; // in scope 0 at $DIR/enum_opt.rs:+2:3: +2:31
|
||||||
scope 1 {
|
scope 1 {
|
||||||
debug a => _1; // in scope 1 at $DIR/enum_opt.rs:45:7: 45:12
|
debug a => _1; // in scope 1 at $DIR/enum_opt.rs:+1:7: +1:12
|
||||||
}
|
}
|
||||||
|
|
||||||
bb0: {
|
bb0: {
|
||||||
StorageLive(_1); // scope 0 at $DIR/enum_opt.rs:45:7: 45:12
|
StorageLive(_1); // scope 0 at $DIR/enum_opt.rs:+1:7: +1:12
|
||||||
Deinit(_1); // scope 0 at $DIR/enum_opt.rs:45:15: 45:27
|
Deinit(_1); // scope 0 at $DIR/enum_opt.rs:+1:15: +1:27
|
||||||
discriminant(_1) = 0; // scope 0 at $DIR/enum_opt.rs:45:15: 45:27
|
discriminant(_1) = 1; // scope 0 at $DIR/enum_opt.rs:+1:15: +1:27
|
||||||
StorageLive(_2); // scope 1 at $DIR/enum_opt.rs:46:7: 46:31
|
StorageLive(_2); // scope 1 at $DIR/enum_opt.rs:+2:7: +2:31
|
||||||
StorageLive(_3); // scope 1 at $DIR/enum_opt.rs:46:21: 46:30
|
StorageLive(_3); // scope 1 at $DIR/enum_opt.rs:+2:21: +2:30
|
||||||
_3 = [const 1_u64; 1024]; // scope 1 at $DIR/enum_opt.rs:46:21: 46:30
|
_3 = [const 1_u8; 8192]; // scope 1 at $DIR/enum_opt.rs:+2:21: +2:30
|
||||||
Deinit(_2); // scope 1 at $DIR/enum_opt.rs:46:7: 46:31
|
Deinit(_2); // scope 1 at $DIR/enum_opt.rs:+2:7: +2:31
|
||||||
((_2 as Large).0: [u64; 1024]) = move _3; // scope 1 at $DIR/enum_opt.rs:46:7: 46:31
|
((_2 as Large).0: [u8; 8192]) = move _3; // scope 1 at $DIR/enum_opt.rs:+2:7: +2:31
|
||||||
discriminant(_2) = 1; // scope 1 at $DIR/enum_opt.rs:46:7: 46:31
|
discriminant(_2) = 0; // scope 1 at $DIR/enum_opt.rs:+2:7: +2:31
|
||||||
StorageDead(_3); // scope 1 at $DIR/enum_opt.rs:46:30: 46:31
|
StorageDead(_3); // scope 1 at $DIR/enum_opt.rs:+2:30: +2:31
|
||||||
- _1 = move _2; // scope 1 at $DIR/enum_opt.rs:46:3: 46:31
|
- _1 = move _2; // scope 1 at $DIR/enum_opt.rs:+2:3: +2:31
|
||||||
+ StorageLive(_4); // scope 1 at $DIR/enum_opt.rs:46:3: 46:31
|
+ StorageLive(_4); // scope 1 at $DIR/enum_opt.rs:+2:3: +2:31
|
||||||
+ _4 = const [8_usize, 8200_usize]; // scope 1 at $DIR/enum_opt.rs:46:3: 46:31
|
+ _4 = const [8196_usize, 4_usize]; // scope 1 at $DIR/enum_opt.rs:+2:3: +2:31
|
||||||
+ _5 = discriminant(_2); // scope 1 at $DIR/enum_opt.rs:46:3: 46:31
|
+ _5 = discriminant(_2); // scope 1 at $DIR/enum_opt.rs:+2:3: +2:31
|
||||||
+ _6 = _5 as usize (Misc); // scope 1 at $DIR/enum_opt.rs:46:3: 46:31
|
+ _6 = _5 as usize (IntToInt); // scope 1 at $DIR/enum_opt.rs:+2:3: +2:31
|
||||||
+ _7 = _4[_6]; // scope 1 at $DIR/enum_opt.rs:46:3: 46:31
|
+ _7 = _4[_6]; // scope 1 at $DIR/enum_opt.rs:+2:3: +2:31
|
||||||
+ _8 = &raw mut _1; // scope 1 at $DIR/enum_opt.rs:46:3: 46:31
|
+ _8 = &raw mut _1; // scope 1 at $DIR/enum_opt.rs:+2:3: +2:31
|
||||||
+ _9 = _8 as *mut u8 (Misc); // scope 1 at $DIR/enum_opt.rs:46:3: 46:31
|
+ _9 = _8 as *mut u8 (PtrToPtr); // scope 1 at $DIR/enum_opt.rs:+2:3: +2:31
|
||||||
+ _10 = &raw const _2; // scope 1 at $DIR/enum_opt.rs:46:3: 46:31
|
+ _10 = &raw const _2; // scope 1 at $DIR/enum_opt.rs:+2:3: +2:31
|
||||||
+ _11 = _10 as *const u8 (Misc); // scope 1 at $DIR/enum_opt.rs:46:3: 46:31
|
+ _11 = _10 as *const u8 (PtrToPtr); // scope 1 at $DIR/enum_opt.rs:+2:3: +2:31
|
||||||
+ copy_nonoverlapping(src=_11, dst=_9, count=_7); // scope 1 at $DIR/enum_opt.rs:46:3: 46:31
|
+ copy_nonoverlapping(dst = _9, src = _11, count = _7); // scope 1 at $DIR/enum_opt.rs:+2:3: +2:31
|
||||||
+ StorageDead(_4); // scope 1 at $DIR/enum_opt.rs:46:3: 46:31
|
+ StorageDead(_4); // scope 1 at $DIR/enum_opt.rs:+2:3: +2:31
|
||||||
StorageDead(_2); // scope 1 at $DIR/enum_opt.rs:46:30: 46:31
|
StorageDead(_2); // scope 1 at $DIR/enum_opt.rs:+2:30: +2:31
|
||||||
_0 = const (); // scope 0 at $DIR/enum_opt.rs:44:15: 47:2
|
_0 = const (); // scope 0 at $DIR/enum_opt.rs:+0:15: +3:2
|
||||||
StorageDead(_1); // scope 0 at $DIR/enum_opt.rs:47:1: 47:2
|
StorageDead(_1); // scope 0 at $DIR/enum_opt.rs:+3:1: +3:2
|
||||||
return; // scope 0 at $DIR/enum_opt.rs:47:2: 47:2
|
return; // scope 0 at $DIR/enum_opt.rs:+3:2: +3:2
|
||||||
}
|
|
||||||
|
|
||||||
bb1 (cleanup): {
|
|
||||||
resume; // scope 0 at $DIR/enum_opt.rs:44:1: 47:2
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue