1
Fork 0

Rollup merge of #111501 - WaffleLapkin:drivebycleanupuwu, r=oli-obk

MIR drive-by cleanups

Some random drive-by cleanups I did while working with MIR/THIR.
This commit is contained in:
Dylan DPC 2023-05-23 00:32:17 +05:30 committed by GitHub
commit df86200965
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
21 changed files with 124 additions and 179 deletions

View file

@ -749,6 +749,29 @@ pub enum TerminatorKind<'tcx> {
}, },
} }
impl TerminatorKind<'_> {
/// Returns a simple string representation of a `TerminatorKind` variant, independent of any
/// values it might hold (e.g. `TerminatorKind::Call` always returns `"Call"`).
pub const fn name(&self) -> &'static str {
match self {
TerminatorKind::Goto { .. } => "Goto",
TerminatorKind::SwitchInt { .. } => "SwitchInt",
TerminatorKind::Resume => "Resume",
TerminatorKind::Terminate => "Terminate",
TerminatorKind::Return => "Return",
TerminatorKind::Unreachable => "Unreachable",
TerminatorKind::Drop { .. } => "Drop",
TerminatorKind::Call { .. } => "Call",
TerminatorKind::Assert { .. } => "Assert",
TerminatorKind::Yield { .. } => "Yield",
TerminatorKind::GeneratorDrop => "GeneratorDrop",
TerminatorKind::FalseEdge { .. } => "FalseEdge",
TerminatorKind::FalseUnwind { .. } => "FalseUnwind",
TerminatorKind::InlineAsm { .. } => "InlineAsm",
}
}
}
/// Action to be taken when a stack unwind happens. /// Action to be taken when a stack unwind happens.
#[derive(Copy, Clone, Debug, PartialEq, Eq, TyEncodable, TyDecodable, Hash, HashStable)] #[derive(Copy, Clone, Debug, PartialEq, Eq, TyEncodable, TyDecodable, Hash, HashStable)]
#[derive(TypeFoldable, TypeVisitable)] #[derive(TypeFoldable, TypeVisitable)]

View file

@ -644,24 +644,27 @@ impl<'a, 'tcx> Builder<'a, 'tcx> {
} }
}; };
if let Some(destination) = destination { match (destination, value) {
if let Some(value) = value { (Some(destination), Some(value)) => {
debug!("stmt_expr Break val block_context.push(SubExpr)"); debug!("stmt_expr Break val block_context.push(SubExpr)");
self.block_context.push(BlockFrame::SubExpr); self.block_context.push(BlockFrame::SubExpr);
unpack!(block = self.expr_into_dest(destination, block, value)); unpack!(block = self.expr_into_dest(destination, block, value));
self.block_context.pop(); self.block_context.pop();
} else { }
(Some(destination), None) => {
self.cfg.push_assign_unit(block, source_info, destination, self.tcx) self.cfg.push_assign_unit(block, source_info, destination, self.tcx)
} }
} else { (None, Some(_)) => {
assert!(value.is_none(), "`return` and `break` should have a destination"); panic!("`return`, `become` and `break` with value and must have a destination")
if self.tcx.sess.instrument_coverage() { }
(None, None) if self.tcx.sess.instrument_coverage() => {
// Unlike `break` and `return`, which push an `Assign` statement to MIR, from which // Unlike `break` and `return`, which push an `Assign` statement to MIR, from which
// a Coverage code region can be generated, `continue` needs no `Assign`; but // a Coverage code region can be generated, `continue` needs no `Assign`; but
// without one, the `InstrumentCoverage` MIR pass cannot generate a code region for // without one, the `InstrumentCoverage` MIR pass cannot generate a code region for
// `continue`. Coverage will be missing unless we add a dummy `Assign` to MIR. // `continue`. Coverage will be missing unless we add a dummy `Assign` to MIR.
self.add_dummy_assignment(span, block, source_info); self.add_dummy_assignment(span, block, source_info);
} }
(None, None) => {}
} }
let region_scope = self.scopes.breakable_scopes[break_index].region_scope; let region_scope = self.scopes.breakable_scopes[break_index].region_scope;
@ -671,12 +674,12 @@ impl<'a, 'tcx> Builder<'a, 'tcx> {
} else { } else {
self.scopes.breakable_scopes[break_index].continue_drops.as_mut().unwrap() self.scopes.breakable_scopes[break_index].continue_drops.as_mut().unwrap()
}; };
let mut drop_idx = ROOT_NODE;
for scope in &self.scopes.scopes[scope_index + 1..] { let drop_idx = self.scopes.scopes[scope_index + 1..]
for drop in &scope.drops { .iter()
drop_idx = drops.add_drop(*drop, drop_idx); .flat_map(|scope| &scope.drops)
} .fold(ROOT_NODE, |drop_idx, &drop| drops.add_drop(drop, drop_idx));
}
drops.add_entry(block, drop_idx); drops.add_entry(block, drop_idx);
// `build_drop_trees` doesn't have access to our source_info, so we // `build_drop_trees` doesn't have access to our source_info, so we

View file

@ -130,6 +130,7 @@ impl<'tcx> Cx<'tcx> {
ExprKind::Pointer { cast: PointerCast::Unsize, source: self.thir.exprs.push(expr) } ExprKind::Pointer { cast: PointerCast::Unsize, source: self.thir.exprs.push(expr) }
} }
Adjust::Pointer(cast) => ExprKind::Pointer { cast, source: self.thir.exprs.push(expr) }, Adjust::Pointer(cast) => ExprKind::Pointer { cast, source: self.thir.exprs.push(expr) },
Adjust::NeverToAny if adjustment.target.is_never() => return expr,
Adjust::NeverToAny => ExprKind::NeverToAny { source: self.thir.exprs.push(expr) }, Adjust::NeverToAny => ExprKind::NeverToAny { source: self.thir.exprs.push(expr) },
Adjust::Deref(None) => { Adjust::Deref(None) => {
adjust_span(&mut expr); adjust_span(&mut expr);

View file

@ -118,7 +118,7 @@ use rustc_middle::mir::spanview::{self, SpanViewable};
use rustc_data_structures::fx::FxHashMap; use rustc_data_structures::fx::FxHashMap;
use rustc_middle::mir::coverage::*; use rustc_middle::mir::coverage::*;
use rustc_middle::mir::{self, BasicBlock, TerminatorKind}; use rustc_middle::mir::{self, BasicBlock};
use rustc_middle::ty::TyCtxt; use rustc_middle::ty::TyCtxt;
use rustc_span::Span; use rustc_span::Span;
@ -796,7 +796,7 @@ fn bcb_to_string_sections<'tcx>(
} }
let non_term_blocks = bcb_data.basic_blocks[0..len - 1] let non_term_blocks = bcb_data.basic_blocks[0..len - 1]
.iter() .iter()
.map(|&bb| format!("{:?}: {}", bb, term_type(&mir_body[bb].terminator().kind))) .map(|&bb| format!("{:?}: {}", bb, mir_body[bb].terminator().kind.name()))
.collect::<Vec<_>>(); .collect::<Vec<_>>();
if non_term_blocks.len() > 0 { if non_term_blocks.len() > 0 {
sections.push(non_term_blocks.join("\n")); sections.push(non_term_blocks.join("\n"));
@ -804,28 +804,7 @@ fn bcb_to_string_sections<'tcx>(
sections.push(format!( sections.push(format!(
"{:?}: {}", "{:?}: {}",
bcb_data.basic_blocks.last().unwrap(), bcb_data.basic_blocks.last().unwrap(),
term_type(&bcb_data.terminator(mir_body).kind) bcb_data.terminator(mir_body).kind.name(),
)); ));
sections sections
} }
/// Returns a simple string representation of a `TerminatorKind` variant, independent of any
/// values it might hold.
pub(super) fn term_type(kind: &TerminatorKind<'_>) -> &'static str {
match kind {
TerminatorKind::Goto { .. } => "Goto",
TerminatorKind::SwitchInt { .. } => "SwitchInt",
TerminatorKind::Resume => "Resume",
TerminatorKind::Terminate => "Terminate",
TerminatorKind::Return => "Return",
TerminatorKind::Unreachable => "Unreachable",
TerminatorKind::Drop { .. } => "Drop",
TerminatorKind::Call { .. } => "Call",
TerminatorKind::Assert { .. } => "Assert",
TerminatorKind::Yield { .. } => "Yield",
TerminatorKind::GeneratorDrop => "GeneratorDrop",
TerminatorKind::FalseEdge { .. } => "FalseEdge",
TerminatorKind::FalseUnwind { .. } => "FalseUnwind",
TerminatorKind::InlineAsm { .. } => "InlineAsm",
}
}

View file

@ -1,4 +1,3 @@
use super::debug::term_type;
use super::graph::{BasicCoverageBlock, BasicCoverageBlockData, CoverageGraph, START_BCB}; use super::graph::{BasicCoverageBlock, BasicCoverageBlockData, CoverageGraph, START_BCB};
use itertools::Itertools; use itertools::Itertools;
@ -40,7 +39,7 @@ impl CoverageStatement {
"{}: @{}.{}: {:?}", "{}: @{}.{}: {:?}",
source_range_no_file(tcx, span), source_range_no_file(tcx, span),
bb.index(), bb.index(),
term_type(&term.kind), term.kind.name(),
term.kind term.kind
) )
} }

View file

@ -25,7 +25,6 @@
//! to: `rustc_span::create_default_session_globals_then(|| { test_here(); })`. //! to: `rustc_span::create_default_session_globals_then(|| { test_here(); })`.
use super::counters; use super::counters;
use super::debug;
use super::graph; use super::graph;
use super::spans; use super::spans;
@ -188,12 +187,12 @@ fn debug_basic_blocks(mir_body: &Body<'_>) -> String {
| TerminatorKind::Goto { target } | TerminatorKind::Goto { target }
| TerminatorKind::InlineAsm { destination: Some(target), .. } | TerminatorKind::InlineAsm { destination: Some(target), .. }
| TerminatorKind::Yield { resume: target, .. } => { | TerminatorKind::Yield { resume: target, .. } => {
format!("{}{:?}:{} -> {:?}", sp, bb, debug::term_type(kind), target) format!("{}{:?}:{} -> {:?}", sp, bb, kind.name(), target)
} }
TerminatorKind::SwitchInt { targets, .. } => { TerminatorKind::SwitchInt { targets, .. } => {
format!("{}{:?}:{} -> {:?}", sp, bb, debug::term_type(kind), targets) format!("{}{:?}:{} -> {:?}", sp, bb, kind.name(), targets)
} }
_ => format!("{}{:?}:{}", sp, bb, debug::term_type(kind)), _ => format!("{}{:?}:{}", sp, bb, kind.name()),
} }
}) })
.collect::<Vec<_>>() .collect::<Vec<_>>()
@ -215,7 +214,7 @@ fn print_mir_graphviz(name: &str, mir_body: &Body<'_>) {
" {:?} [label=\"{:?}: {}\"];\n{}", " {:?} [label=\"{:?}: {}\"];\n{}",
bb, bb,
bb, bb,
debug::term_type(&data.terminator().kind), data.terminator().kind.name(),
mir_body mir_body
.basic_blocks .basic_blocks
.successors(bb) .successors(bb)
@ -244,7 +243,7 @@ fn print_coverage_graphviz(
" {:?} [label=\"{:?}: {}\"];\n{}", " {:?} [label=\"{:?}: {}\"];\n{}",
bcb, bcb,
bcb, bcb,
debug::term_type(&bcb_data.terminator(mir_body).kind), bcb_data.terminator(mir_body).kind.name(),
basic_coverage_blocks basic_coverage_blocks
.successors(bcb) .successors(bcb)
.map(|successor| { format!(" {:?} -> {:?};", bcb, successor) }) .map(|successor| { format!(" {:?} -> {:?};", bcb, successor) })

View file

@ -6,10 +6,8 @@
fn main() { fn main() {
let y = &5; let y = &5;
let x: ! = unsafe { let x: ! = unsafe { *(y as *const _ as *const !) };
*(y as *const _ as *const !) //~ ERROR: entering unreachable code f(x) //~ ERROR: entering unreachable code
};
f(x)
} }
fn f(x: !) -> ! { fn f(x: !) -> ! {

View file

@ -1,8 +1,8 @@
error: Undefined Behavior: entering unreachable code error: Undefined Behavior: entering unreachable code
--> $DIR/never_say_never.rs:LL:CC --> $DIR/never_say_never.rs:LL:CC
| |
LL | *(y as *const _ as *const !) LL | f(x)
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ entering unreachable code | ^^^^ entering unreachable code
| |
= help: this indicates a bug in the program: it performed an invalid operation, and caused Undefined Behavior = help: this indicates a bug in the program: it performed an invalid operation, and caused Undefined Behavior
= help: see https://doc.rust-lang.org/nightly/reference/behavior-considered-undefined.html for further information = help: see https://doc.rust-lang.org/nightly/reference/behavior-considered-undefined.html for further information

View file

@ -3,24 +3,20 @@
fn unreachable_box() -> ! { fn unreachable_box() -> ! {
let mut _0: !; // return place in scope 0 at $DIR/transmute.rs:+0:36: +0:37 let mut _0: !; // return place in scope 0 at $DIR/transmute.rs:+0:36: +0:37
let mut _1: !; // in scope 0 at $DIR/transmute.rs:+0:38: +3:2 let _1: std::boxed::Box<Never>; // in scope 0 at $DIR/transmute.rs:+1:9: +1:10
let _2: std::boxed::Box<Never>; // in scope 0 at $DIR/transmute.rs:+1:9: +1:10
let mut _3: !; // in scope 0 at $DIR/transmute.rs:+2:5: +2:16
scope 1 { scope 1 {
debug x => _2; // in scope 1 at $DIR/transmute.rs:+1:9: +1:10 debug x => _1; // in scope 1 at $DIR/transmute.rs:+1:9: +1:10
} }
scope 2 { scope 2 {
} }
bb0: { bb0: {
StorageLive(_1); // scope 0 at $DIR/transmute.rs:+0:38: +3:2 StorageLive(_1); // scope 0 at $DIR/transmute.rs:+1:9: +1:10
StorageLive(_2); // scope 0 at $DIR/transmute.rs:+1:9: +1:10 - _1 = const 1_usize as std::boxed::Box<Never> (Transmute); // scope 2 at $DIR/transmute.rs:+1:34: +1:52
- _2 = const 1_usize as std::boxed::Box<Never> (Transmute); // scope 2 at $DIR/transmute.rs:+1:34: +1:52 + _1 = const Box::<Never>(Unique::<Never> {{ pointer: NonNull::<Never> {{ pointer: {0x1 as *const Never} }}, _marker: PhantomData::<Never> }}, std::alloc::Global); // scope 2 at $DIR/transmute.rs:+1:34: +1:52
+ _2 = const Box::<Never>(Unique::<Never> {{ pointer: NonNull::<Never> {{ pointer: {0x1 as *const Never} }}, _marker: PhantomData::<Never> }}, std::alloc::Global); // scope 2 at $DIR/transmute.rs:+1:34: +1:52
+ // mir::Constant + // mir::Constant
+ // + span: no-location + // + span: no-location
+ // + literal: Const { ty: Box<Never>, val: Value(Scalar(0x00000001)) } + // + literal: Const { ty: Box<Never>, val: Value(Scalar(0x00000001)) }
StorageLive(_3); // scope 1 at $DIR/transmute.rs:+2:5: +2:16
unreachable; // scope 1 at $DIR/transmute.rs:+2:11: +2:13 unreachable; // scope 1 at $DIR/transmute.rs:+2:11: +2:13
} }
} }

View file

@ -3,24 +3,20 @@
fn unreachable_box() -> ! { fn unreachable_box() -> ! {
let mut _0: !; // return place in scope 0 at $DIR/transmute.rs:+0:36: +0:37 let mut _0: !; // return place in scope 0 at $DIR/transmute.rs:+0:36: +0:37
let mut _1: !; // in scope 0 at $DIR/transmute.rs:+0:38: +3:2 let _1: std::boxed::Box<Never>; // in scope 0 at $DIR/transmute.rs:+1:9: +1:10
let _2: std::boxed::Box<Never>; // in scope 0 at $DIR/transmute.rs:+1:9: +1:10
let mut _3: !; // in scope 0 at $DIR/transmute.rs:+2:5: +2:16
scope 1 { scope 1 {
debug x => _2; // in scope 1 at $DIR/transmute.rs:+1:9: +1:10 debug x => _1; // in scope 1 at $DIR/transmute.rs:+1:9: +1:10
} }
scope 2 { scope 2 {
} }
bb0: { bb0: {
StorageLive(_1); // scope 0 at $DIR/transmute.rs:+0:38: +3:2 StorageLive(_1); // scope 0 at $DIR/transmute.rs:+1:9: +1:10
StorageLive(_2); // scope 0 at $DIR/transmute.rs:+1:9: +1:10 - _1 = const 1_usize as std::boxed::Box<Never> (Transmute); // scope 2 at $DIR/transmute.rs:+1:34: +1:52
- _2 = const 1_usize as std::boxed::Box<Never> (Transmute); // scope 2 at $DIR/transmute.rs:+1:34: +1:52 + _1 = const Box::<Never>(Unique::<Never> {{ pointer: NonNull::<Never> {{ pointer: {0x1 as *const Never} }}, _marker: PhantomData::<Never> }}, std::alloc::Global); // scope 2 at $DIR/transmute.rs:+1:34: +1:52
+ _2 = const Box::<Never>(Unique::<Never> {{ pointer: NonNull::<Never> {{ pointer: {0x1 as *const Never} }}, _marker: PhantomData::<Never> }}, std::alloc::Global); // scope 2 at $DIR/transmute.rs:+1:34: +1:52
+ // mir::Constant + // mir::Constant
+ // + span: no-location + // + span: no-location
+ // + literal: Const { ty: Box<Never>, val: Value(Scalar(0x0000000000000001)) } + // + literal: Const { ty: Box<Never>, val: Value(Scalar(0x0000000000000001)) }
StorageLive(_3); // scope 1 at $DIR/transmute.rs:+2:5: +2:16
unreachable; // scope 1 at $DIR/transmute.rs:+2:11: +2:13 unreachable; // scope 1 at $DIR/transmute.rs:+2:11: +2:13
} }
} }

View file

@ -3,22 +3,19 @@
fn unreachable_direct() -> ! { fn unreachable_direct() -> ! {
let mut _0: !; // return place in scope 0 at $DIR/transmute.rs:+0:39: +0:40 let mut _0: !; // return place in scope 0 at $DIR/transmute.rs:+0:39: +0:40
let mut _1: !; // in scope 0 at $DIR/transmute.rs:+0:41: +3:2 let _1: Never; // in scope 0 at $DIR/transmute.rs:+1:9: +1:10
let _2: Never; // in scope 0 at $DIR/transmute.rs:+1:9: +1:10 let mut _2: (); // in scope 0 at $DIR/transmute.rs:+1:39: +1:41
let mut _3: (); // in scope 0 at $DIR/transmute.rs:+1:39: +1:41
let mut _4: !; // in scope 0 at $DIR/transmute.rs:+2:5: +2:15
scope 1 { scope 1 {
debug x => _2; // in scope 1 at $DIR/transmute.rs:+1:9: +1:10 debug x => _1; // in scope 1 at $DIR/transmute.rs:+1:9: +1:10
} }
scope 2 { scope 2 {
} }
bb0: { bb0: {
StorageLive(_1); // scope 0 at $DIR/transmute.rs:+0:41: +3:2 StorageLive(_1); // scope 0 at $DIR/transmute.rs:+1:9: +1:10
StorageLive(_2); // scope 0 at $DIR/transmute.rs:+1:9: +1:10 StorageLive(_2); // scope 2 at $DIR/transmute.rs:+1:39: +1:41
StorageLive(_3); // scope 2 at $DIR/transmute.rs:+1:39: +1:41 _2 = (); // scope 2 at $DIR/transmute.rs:+1:39: +1:41
_3 = (); // scope 2 at $DIR/transmute.rs:+1:39: +1:41 _1 = move _2 as Never (Transmute); // scope 2 at $DIR/transmute.rs:+1:29: +1:42
_2 = move _3 as Never (Transmute); // scope 2 at $DIR/transmute.rs:+1:29: +1:42
unreachable; // scope 2 at $DIR/transmute.rs:+1:29: +1:42 unreachable; // scope 2 at $DIR/transmute.rs:+1:29: +1:42
} }
} }

View file

@ -3,22 +3,19 @@
fn unreachable_direct() -> ! { fn unreachable_direct() -> ! {
let mut _0: !; // return place in scope 0 at $DIR/transmute.rs:+0:39: +0:40 let mut _0: !; // return place in scope 0 at $DIR/transmute.rs:+0:39: +0:40
let mut _1: !; // in scope 0 at $DIR/transmute.rs:+0:41: +3:2 let _1: Never; // in scope 0 at $DIR/transmute.rs:+1:9: +1:10
let _2: Never; // in scope 0 at $DIR/transmute.rs:+1:9: +1:10 let mut _2: (); // in scope 0 at $DIR/transmute.rs:+1:39: +1:41
let mut _3: (); // in scope 0 at $DIR/transmute.rs:+1:39: +1:41
let mut _4: !; // in scope 0 at $DIR/transmute.rs:+2:5: +2:15
scope 1 { scope 1 {
debug x => _2; // in scope 1 at $DIR/transmute.rs:+1:9: +1:10 debug x => _1; // in scope 1 at $DIR/transmute.rs:+1:9: +1:10
} }
scope 2 { scope 2 {
} }
bb0: { bb0: {
StorageLive(_1); // scope 0 at $DIR/transmute.rs:+0:41: +3:2 StorageLive(_1); // scope 0 at $DIR/transmute.rs:+1:9: +1:10
StorageLive(_2); // scope 0 at $DIR/transmute.rs:+1:9: +1:10 StorageLive(_2); // scope 2 at $DIR/transmute.rs:+1:39: +1:41
StorageLive(_3); // scope 2 at $DIR/transmute.rs:+1:39: +1:41 _2 = (); // scope 2 at $DIR/transmute.rs:+1:39: +1:41
_3 = (); // scope 2 at $DIR/transmute.rs:+1:39: +1:41 _1 = move _2 as Never (Transmute); // scope 2 at $DIR/transmute.rs:+1:29: +1:42
_2 = move _3 as Never (Transmute); // scope 2 at $DIR/transmute.rs:+1:29: +1:42
unreachable; // scope 2 at $DIR/transmute.rs:+1:29: +1:42 unreachable; // scope 2 at $DIR/transmute.rs:+1:29: +1:42
} }
} }

View file

@ -3,28 +3,24 @@
fn unreachable_mut() -> ! { fn unreachable_mut() -> ! {
let mut _0: !; // return place in scope 0 at $DIR/transmute.rs:+0:36: +0:37 let mut _0: !; // return place in scope 0 at $DIR/transmute.rs:+0:36: +0:37
let mut _1: !; // in scope 0 at $DIR/transmute.rs:+0:38: +3:2 let _1: &mut Never; // in scope 0 at $DIR/transmute.rs:+1:9: +1:10
let _2: &mut Never; // in scope 0 at $DIR/transmute.rs:+1:9: +1:10 let mut _2: &mut Never; // in scope 0 at $DIR/transmute.rs:+1:34: +1:52
let mut _3: &mut Never; // in scope 0 at $DIR/transmute.rs:+1:34: +1:52
let mut _4: !; // in scope 0 at $DIR/transmute.rs:+2:5: +2:16
scope 1 { scope 1 {
debug x => _2; // in scope 1 at $DIR/transmute.rs:+1:9: +1:10 debug x => _1; // in scope 1 at $DIR/transmute.rs:+1:9: +1:10
} }
scope 2 { scope 2 {
} }
bb0: { bb0: {
StorageLive(_1); // scope 0 at $DIR/transmute.rs:+0:38: +3:2 StorageLive(_1); // scope 0 at $DIR/transmute.rs:+1:9: +1:10
StorageLive(_2); // scope 0 at $DIR/transmute.rs:+1:9: +1:10 StorageLive(_2); // scope 0 at $DIR/transmute.rs:+1:34: +1:52
StorageLive(_3); // scope 0 at $DIR/transmute.rs:+1:34: +1:52 - _2 = const 1_usize as &mut Never (Transmute); // scope 2 at $DIR/transmute.rs:+1:34: +1:52
- _3 = const 1_usize as &mut Never (Transmute); // scope 2 at $DIR/transmute.rs:+1:34: +1:52 + _2 = const {0x1 as &mut Never}; // scope 2 at $DIR/transmute.rs:+1:34: +1:52
+ _3 = const {0x1 as &mut Never}; // scope 2 at $DIR/transmute.rs:+1:34: +1:52
+ // mir::Constant + // mir::Constant
+ // + span: no-location + // + span: no-location
+ // + literal: Const { ty: &mut Never, val: Value(Scalar(0x00000001)) } + // + literal: Const { ty: &mut Never, val: Value(Scalar(0x00000001)) }
_2 = &mut (*_3); // scope 0 at $DIR/transmute.rs:+1:34: +1:52 _1 = &mut (*_2); // scope 0 at $DIR/transmute.rs:+1:34: +1:52
StorageDead(_3); // scope 0 at $DIR/transmute.rs:+1:54: +1:55 StorageDead(_2); // scope 0 at $DIR/transmute.rs:+1:54: +1:55
StorageLive(_4); // scope 1 at $DIR/transmute.rs:+2:5: +2:16
unreachable; // scope 1 at $DIR/transmute.rs:+2:11: +2:13 unreachable; // scope 1 at $DIR/transmute.rs:+2:11: +2:13
} }
} }

View file

@ -3,28 +3,24 @@
fn unreachable_mut() -> ! { fn unreachable_mut() -> ! {
let mut _0: !; // return place in scope 0 at $DIR/transmute.rs:+0:36: +0:37 let mut _0: !; // return place in scope 0 at $DIR/transmute.rs:+0:36: +0:37
let mut _1: !; // in scope 0 at $DIR/transmute.rs:+0:38: +3:2 let _1: &mut Never; // in scope 0 at $DIR/transmute.rs:+1:9: +1:10
let _2: &mut Never; // in scope 0 at $DIR/transmute.rs:+1:9: +1:10 let mut _2: &mut Never; // in scope 0 at $DIR/transmute.rs:+1:34: +1:52
let mut _3: &mut Never; // in scope 0 at $DIR/transmute.rs:+1:34: +1:52
let mut _4: !; // in scope 0 at $DIR/transmute.rs:+2:5: +2:16
scope 1 { scope 1 {
debug x => _2; // in scope 1 at $DIR/transmute.rs:+1:9: +1:10 debug x => _1; // in scope 1 at $DIR/transmute.rs:+1:9: +1:10
} }
scope 2 { scope 2 {
} }
bb0: { bb0: {
StorageLive(_1); // scope 0 at $DIR/transmute.rs:+0:38: +3:2 StorageLive(_1); // scope 0 at $DIR/transmute.rs:+1:9: +1:10
StorageLive(_2); // scope 0 at $DIR/transmute.rs:+1:9: +1:10 StorageLive(_2); // scope 0 at $DIR/transmute.rs:+1:34: +1:52
StorageLive(_3); // scope 0 at $DIR/transmute.rs:+1:34: +1:52 - _2 = const 1_usize as &mut Never (Transmute); // scope 2 at $DIR/transmute.rs:+1:34: +1:52
- _3 = const 1_usize as &mut Never (Transmute); // scope 2 at $DIR/transmute.rs:+1:34: +1:52 + _2 = const {0x1 as &mut Never}; // scope 2 at $DIR/transmute.rs:+1:34: +1:52
+ _3 = const {0x1 as &mut Never}; // scope 2 at $DIR/transmute.rs:+1:34: +1:52
+ // mir::Constant + // mir::Constant
+ // + span: no-location + // + span: no-location
+ // + literal: Const { ty: &mut Never, val: Value(Scalar(0x0000000000000001)) } + // + literal: Const { ty: &mut Never, val: Value(Scalar(0x0000000000000001)) }
_2 = &mut (*_3); // scope 0 at $DIR/transmute.rs:+1:34: +1:52 _1 = &mut (*_2); // scope 0 at $DIR/transmute.rs:+1:34: +1:52
StorageDead(_3); // scope 0 at $DIR/transmute.rs:+1:54: +1:55 StorageDead(_2); // scope 0 at $DIR/transmute.rs:+1:54: +1:55
StorageLive(_4); // scope 1 at $DIR/transmute.rs:+2:5: +2:16
unreachable; // scope 1 at $DIR/transmute.rs:+2:11: +2:13 unreachable; // scope 1 at $DIR/transmute.rs:+2:11: +2:13
} }
} }

View file

@ -3,24 +3,20 @@
fn unreachable_ref() -> ! { fn unreachable_ref() -> ! {
let mut _0: !; // return place in scope 0 at $DIR/transmute.rs:+0:36: +0:37 let mut _0: !; // return place in scope 0 at $DIR/transmute.rs:+0:36: +0:37
let mut _1: !; // in scope 0 at $DIR/transmute.rs:+0:38: +3:2 let _1: &Never; // in scope 0 at $DIR/transmute.rs:+1:9: +1:10
let _2: &Never; // in scope 0 at $DIR/transmute.rs:+1:9: +1:10
let mut _3: !; // in scope 0 at $DIR/transmute.rs:+2:5: +2:16
scope 1 { scope 1 {
debug x => _2; // in scope 1 at $DIR/transmute.rs:+1:9: +1:10 debug x => _1; // in scope 1 at $DIR/transmute.rs:+1:9: +1:10
} }
scope 2 { scope 2 {
} }
bb0: { bb0: {
StorageLive(_1); // scope 0 at $DIR/transmute.rs:+0:38: +3:2 StorageLive(_1); // scope 0 at $DIR/transmute.rs:+1:9: +1:10
StorageLive(_2); // scope 0 at $DIR/transmute.rs:+1:9: +1:10 - _1 = const 1_usize as &Never (Transmute); // scope 2 at $DIR/transmute.rs:+1:30: +1:48
- _2 = const 1_usize as &Never (Transmute); // scope 2 at $DIR/transmute.rs:+1:30: +1:48 + _1 = const {0x1 as &Never}; // scope 2 at $DIR/transmute.rs:+1:30: +1:48
+ _2 = const {0x1 as &Never}; // scope 2 at $DIR/transmute.rs:+1:30: +1:48
+ // mir::Constant + // mir::Constant
+ // + span: no-location + // + span: no-location
+ // + literal: Const { ty: &Never, val: Value(Scalar(0x00000001)) } + // + literal: Const { ty: &Never, val: Value(Scalar(0x00000001)) }
StorageLive(_3); // scope 1 at $DIR/transmute.rs:+2:5: +2:16
unreachable; // scope 1 at $DIR/transmute.rs:+2:11: +2:13 unreachable; // scope 1 at $DIR/transmute.rs:+2:11: +2:13
} }
} }

View file

@ -3,24 +3,20 @@
fn unreachable_ref() -> ! { fn unreachable_ref() -> ! {
let mut _0: !; // return place in scope 0 at $DIR/transmute.rs:+0:36: +0:37 let mut _0: !; // return place in scope 0 at $DIR/transmute.rs:+0:36: +0:37
let mut _1: !; // in scope 0 at $DIR/transmute.rs:+0:38: +3:2 let _1: &Never; // in scope 0 at $DIR/transmute.rs:+1:9: +1:10
let _2: &Never; // in scope 0 at $DIR/transmute.rs:+1:9: +1:10
let mut _3: !; // in scope 0 at $DIR/transmute.rs:+2:5: +2:16
scope 1 { scope 1 {
debug x => _2; // in scope 1 at $DIR/transmute.rs:+1:9: +1:10 debug x => _1; // in scope 1 at $DIR/transmute.rs:+1:9: +1:10
} }
scope 2 { scope 2 {
} }
bb0: { bb0: {
StorageLive(_1); // scope 0 at $DIR/transmute.rs:+0:38: +3:2 StorageLive(_1); // scope 0 at $DIR/transmute.rs:+1:9: +1:10
StorageLive(_2); // scope 0 at $DIR/transmute.rs:+1:9: +1:10 - _1 = const 1_usize as &Never (Transmute); // scope 2 at $DIR/transmute.rs:+1:30: +1:48
- _2 = const 1_usize as &Never (Transmute); // scope 2 at $DIR/transmute.rs:+1:30: +1:48 + _1 = const {0x1 as &Never}; // scope 2 at $DIR/transmute.rs:+1:30: +1:48
+ _2 = const {0x1 as &Never}; // scope 2 at $DIR/transmute.rs:+1:30: +1:48
+ // mir::Constant + // mir::Constant
+ // + span: no-location + // + span: no-location
+ // + literal: Const { ty: &Never, val: Value(Scalar(0x0000000000000001)) } + // + literal: Const { ty: &Never, val: Value(Scalar(0x0000000000000001)) }
StorageLive(_3); // scope 1 at $DIR/transmute.rs:+2:5: +2:16
unreachable; // scope 1 at $DIR/transmute.rs:+2:11: +2:13 unreachable; // scope 1 at $DIR/transmute.rs:+2:11: +2:13
} }
} }

View file

@ -3,27 +3,13 @@
fn f(_1: Void) -> ! { fn f(_1: Void) -> ! {
debug v => _1; // in scope 0 at $DIR/issue_72181_1.rs:+0:6: +0:7 debug v => _1; // in scope 0 at $DIR/issue_72181_1.rs:+0:6: +0:7
let mut _0: !; // return place in scope 0 at $DIR/issue_72181_1.rs:+0:18: +0:19 let mut _0: !; // return place in scope 0 at $DIR/issue_72181_1.rs:+0:18: +0:19
let mut _2: !; // in scope 0 at $DIR/issue_72181_1.rs:+0:20: +2:2
let mut _3: !; // in scope 0 at $DIR/issue_72181_1.rs:+1:5: +1:15
bb0: { bb0: {
StorageLive(_2); // scope 0 at $DIR/issue_72181_1.rs:+0:20: +2:2
StorageLive(_3); // scope 0 at $DIR/issue_72181_1.rs:+1:5: +1:15
FakeRead(ForMatchedPlace(None), _1); // scope 0 at $DIR/issue_72181_1.rs:+1:11: +1:12 FakeRead(ForMatchedPlace(None), _1); // scope 0 at $DIR/issue_72181_1.rs:+1:11: +1:12
unreachable; // scope 0 at $DIR/issue_72181_1.rs:+1:11: +1:12 unreachable; // scope 0 at $DIR/issue_72181_1.rs:+1:11: +1:12
} }
bb1: { bb1: {
unreachable; // scope 0 at $DIR/issue_72181_1.rs:+1:5: +1:15
}
bb2: {
StorageDead(_3); // scope 0 at $DIR/issue_72181_1.rs:+1:14: +1:15
unreachable; // scope 0 at $DIR/issue_72181_1.rs:+0:20: +2:2
}
bb3: {
StorageDead(_2); // scope 0 at $DIR/issue_72181_1.rs:+2:1: +2:2
return; // scope 0 at $DIR/issue_72181_1.rs:+2:2: +2:2 return; // scope 0 at $DIR/issue_72181_1.rs:+2:2: +2:2
} }
} }

View file

@ -3,26 +3,22 @@
fn transmute_to_box_uninhabited() -> ! { fn transmute_to_box_uninhabited() -> ! {
let mut _0: !; // return place in scope 0 at $DIR/lower_intrinsics.rs:+0:49: +0:50 let mut _0: !; // return place in scope 0 at $DIR/lower_intrinsics.rs:+0:49: +0:50
let mut _1: !; // in scope 0 at $DIR/lower_intrinsics.rs:+0:51: +3:2 let _1: std::boxed::Box<Never>; // in scope 0 at $DIR/lower_intrinsics.rs:+1:9: +1:10
let _2: std::boxed::Box<Never>; // in scope 0 at $DIR/lower_intrinsics.rs:+1:9: +1:10
let mut _3: !; // in scope 0 at $DIR/lower_intrinsics.rs:+2:5: +2:16
scope 1 { scope 1 {
debug x => _2; // in scope 1 at $DIR/lower_intrinsics.rs:+1:9: +1:10 debug x => _1; // in scope 1 at $DIR/lower_intrinsics.rs:+1:9: +1:10
} }
bb0: { bb0: {
StorageLive(_1); // scope 0 at $DIR/lower_intrinsics.rs:+0:51: +3:2 StorageLive(_1); // scope 0 at $DIR/lower_intrinsics.rs:+1:9: +1:10
StorageLive(_2); // scope 0 at $DIR/lower_intrinsics.rs:+1:9: +1:10 - _1 = transmute::<usize, Box<Never>>(const 1_usize) -> [return: bb1, unwind unreachable]; // scope 0 at $DIR/lower_intrinsics.rs:+1:25: +1:52
- _2 = transmute::<usize, Box<Never>>(const 1_usize) -> [return: bb1, unwind unreachable]; // scope 0 at $DIR/lower_intrinsics.rs:+1:25: +1:52
- // mir::Constant - // mir::Constant
- // + span: $DIR/lower_intrinsics.rs:70:25: 70:44 - // + span: $DIR/lower_intrinsics.rs:70:25: 70:44
- // + literal: Const { ty: unsafe extern "rust-intrinsic" fn(usize) -> Box<Never> {transmute::<usize, Box<Never>>}, val: Value(<ZST>) } - // + literal: Const { ty: unsafe extern "rust-intrinsic" fn(usize) -> Box<Never> {transmute::<usize, Box<Never>>}, val: Value(<ZST>) }
+ _2 = const 1_usize as std::boxed::Box<Never> (Transmute); // scope 0 at $DIR/lower_intrinsics.rs:+1:25: +1:52 + _1 = const 1_usize as std::boxed::Box<Never> (Transmute); // scope 0 at $DIR/lower_intrinsics.rs:+1:25: +1:52
+ goto -> bb1; // scope 0 at $DIR/lower_intrinsics.rs:+1:25: +1:52 + goto -> bb1; // scope 0 at $DIR/lower_intrinsics.rs:+1:25: +1:52
} }
bb1: { bb1: {
StorageLive(_3); // scope 1 at $DIR/lower_intrinsics.rs:+2:5: +2:16
unreachable; // scope 1 at $DIR/lower_intrinsics.rs:+2:11: +2:13 unreachable; // scope 1 at $DIR/lower_intrinsics.rs:+2:11: +2:13
} }
} }

View file

@ -3,26 +3,22 @@
fn transmute_to_mut_uninhabited() -> ! { fn transmute_to_mut_uninhabited() -> ! {
let mut _0: !; // return place in scope 0 at $DIR/lower_intrinsics.rs:+0:49: +0:50 let mut _0: !; // return place in scope 0 at $DIR/lower_intrinsics.rs:+0:49: +0:50
let mut _1: !; // in scope 0 at $DIR/lower_intrinsics.rs:+0:51: +3:2 let _1: &mut Never; // in scope 0 at $DIR/lower_intrinsics.rs:+1:9: +1:10
let _2: &mut Never; // in scope 0 at $DIR/lower_intrinsics.rs:+1:9: +1:10
let mut _3: !; // in scope 0 at $DIR/lower_intrinsics.rs:+2:5: +2:16
scope 1 { scope 1 {
debug x => _2; // in scope 1 at $DIR/lower_intrinsics.rs:+1:9: +1:10 debug x => _1; // in scope 1 at $DIR/lower_intrinsics.rs:+1:9: +1:10
} }
bb0: { bb0: {
StorageLive(_1); // scope 0 at $DIR/lower_intrinsics.rs:+0:51: +3:2 StorageLive(_1); // scope 0 at $DIR/lower_intrinsics.rs:+1:9: +1:10
StorageLive(_2); // scope 0 at $DIR/lower_intrinsics.rs:+1:9: +1:10 - _1 = transmute::<usize, &mut Never>(const 1_usize) -> [return: bb1, unwind unreachable]; // scope 0 at $DIR/lower_intrinsics.rs:+1:25: +1:52
- _2 = transmute::<usize, &mut Never>(const 1_usize) -> [return: bb1, unwind unreachable]; // scope 0 at $DIR/lower_intrinsics.rs:+1:25: +1:52
- // mir::Constant - // mir::Constant
- // + span: $DIR/lower_intrinsics.rs:64:25: 64:44 - // + span: $DIR/lower_intrinsics.rs:64:25: 64:44
- // + literal: Const { ty: unsafe extern "rust-intrinsic" fn(usize) -> &mut Never {transmute::<usize, &mut Never>}, val: Value(<ZST>) } - // + literal: Const { ty: unsafe extern "rust-intrinsic" fn(usize) -> &mut Never {transmute::<usize, &mut Never>}, val: Value(<ZST>) }
+ _2 = const 1_usize as &mut Never (Transmute); // scope 0 at $DIR/lower_intrinsics.rs:+1:25: +1:52 + _1 = const 1_usize as &mut Never (Transmute); // scope 0 at $DIR/lower_intrinsics.rs:+1:25: +1:52
+ goto -> bb1; // scope 0 at $DIR/lower_intrinsics.rs:+1:25: +1:52 + goto -> bb1; // scope 0 at $DIR/lower_intrinsics.rs:+1:25: +1:52
} }
bb1: { bb1: {
StorageLive(_3); // scope 1 at $DIR/lower_intrinsics.rs:+2:5: +2:16
unreachable; // scope 1 at $DIR/lower_intrinsics.rs:+2:11: +2:13 unreachable; // scope 1 at $DIR/lower_intrinsics.rs:+2:11: +2:13
} }
} }

View file

@ -3,26 +3,22 @@
fn transmute_to_ref_uninhabited() -> ! { fn transmute_to_ref_uninhabited() -> ! {
let mut _0: !; // return place in scope 0 at $DIR/lower_intrinsics.rs:+0:49: +0:50 let mut _0: !; // return place in scope 0 at $DIR/lower_intrinsics.rs:+0:49: +0:50
let mut _1: !; // in scope 0 at $DIR/lower_intrinsics.rs:+0:51: +3:2 let _1: &Never; // in scope 0 at $DIR/lower_intrinsics.rs:+1:9: +1:10
let _2: &Never; // in scope 0 at $DIR/lower_intrinsics.rs:+1:9: +1:10
let mut _3: !; // in scope 0 at $DIR/lower_intrinsics.rs:+2:5: +2:16
scope 1 { scope 1 {
debug x => _2; // in scope 1 at $DIR/lower_intrinsics.rs:+1:9: +1:10 debug x => _1; // in scope 1 at $DIR/lower_intrinsics.rs:+1:9: +1:10
} }
bb0: { bb0: {
StorageLive(_1); // scope 0 at $DIR/lower_intrinsics.rs:+0:51: +3:2 StorageLive(_1); // scope 0 at $DIR/lower_intrinsics.rs:+1:9: +1:10
StorageLive(_2); // scope 0 at $DIR/lower_intrinsics.rs:+1:9: +1:10 - _1 = transmute::<usize, &Never>(const 1_usize) -> [return: bb1, unwind unreachable]; // scope 0 at $DIR/lower_intrinsics.rs:+1:21: +1:48
- _2 = transmute::<usize, &Never>(const 1_usize) -> [return: bb1, unwind unreachable]; // scope 0 at $DIR/lower_intrinsics.rs:+1:21: +1:48
- // mir::Constant - // mir::Constant
- // + span: $DIR/lower_intrinsics.rs:58:21: 58:40 - // + span: $DIR/lower_intrinsics.rs:58:21: 58:40
- // + literal: Const { ty: unsafe extern "rust-intrinsic" fn(usize) -> &Never {transmute::<usize, &Never>}, val: Value(<ZST>) } - // + literal: Const { ty: unsafe extern "rust-intrinsic" fn(usize) -> &Never {transmute::<usize, &Never>}, val: Value(<ZST>) }
+ _2 = const 1_usize as &Never (Transmute); // scope 0 at $DIR/lower_intrinsics.rs:+1:21: +1:48 + _1 = const 1_usize as &Never (Transmute); // scope 0 at $DIR/lower_intrinsics.rs:+1:21: +1:48
+ goto -> bb1; // scope 0 at $DIR/lower_intrinsics.rs:+1:21: +1:48 + goto -> bb1; // scope 0 at $DIR/lower_intrinsics.rs:+1:21: +1:48
} }
bb1: { bb1: {
StorageLive(_3); // scope 1 at $DIR/lower_intrinsics.rs:+2:5: +2:16
unreachable; // scope 1 at $DIR/lower_intrinsics.rs:+2:11: +2:13 unreachable; // scope 1 at $DIR/lower_intrinsics.rs:+2:11: +2:13
} }
} }

View file

@ -3,16 +3,15 @@
fn unreachable() -> ! { fn unreachable() -> ! {
let mut _0: !; // return place in scope 0 at $DIR/lower_intrinsics.rs:+0:25: +0:26 let mut _0: !; // return place in scope 0 at $DIR/lower_intrinsics.rs:+0:25: +0:26
let mut _1: !; // in scope 0 at $DIR/lower_intrinsics.rs:+0:27: +2:2 let _1: (); // in scope 0 at $DIR/lower_intrinsics.rs:+1:14: +1:45
let _2: (); // in scope 0 at $DIR/lower_intrinsics.rs:+1:14: +1:45 let mut _2: !; // in scope 0 at $DIR/lower_intrinsics.rs:+1:14: +1:45
let mut _3: !; // in scope 0 at $DIR/lower_intrinsics.rs:+1:14: +1:45
scope 1 { scope 1 {
} }
bb0: { bb0: {
StorageLive(_2); // scope 0 at $DIR/lower_intrinsics.rs:+1:5: +1:47 StorageLive(_1); // scope 0 at $DIR/lower_intrinsics.rs:+1:5: +1:47
StorageLive(_3); // scope 1 at $DIR/lower_intrinsics.rs:+1:14: +1:45 StorageLive(_2); // scope 1 at $DIR/lower_intrinsics.rs:+1:14: +1:45
- _3 = std::intrinsics::unreachable() -> unwind unreachable; // scope 1 at $DIR/lower_intrinsics.rs:+1:14: +1:45 - _2 = std::intrinsics::unreachable() -> unwind unreachable; // scope 1 at $DIR/lower_intrinsics.rs:+1:14: +1:45
- // mir::Constant - // mir::Constant
- // + span: $DIR/lower_intrinsics.rs:31:14: 31:43 - // + span: $DIR/lower_intrinsics.rs:31:14: 31:43
- // + literal: Const { ty: unsafe extern "rust-intrinsic" fn() -> ! {std::intrinsics::unreachable}, val: Value(<ZST>) } - // + literal: Const { ty: unsafe extern "rust-intrinsic" fn() -> ! {std::intrinsics::unreachable}, val: Value(<ZST>) }