mirror of
https://github.com/rust-lang/rust.git
synced 2024-11-26 00:34:06 +00:00
Ensure [rust] debuginfo-level-std
doesn't change core's MIR
This commit is contained in:
parent
6094063c35
commit
90b4c86335
@ -699,7 +699,17 @@ impl<'tcx> Inliner<'tcx> {
|
||||
// Insert all of the (mapped) parts of the callee body into the caller.
|
||||
caller_body.local_decls.extend(callee_body.drain_vars_and_temps());
|
||||
caller_body.source_scopes.extend(&mut callee_body.source_scopes.drain(..));
|
||||
if self.tcx.sess.opts.debuginfo != DebugInfo::None {
|
||||
if self
|
||||
.tcx
|
||||
.sess
|
||||
.opts
|
||||
.unstable_opts
|
||||
.inline_mir_preserve_debug
|
||||
.unwrap_or(self.tcx.sess.opts.debuginfo != DebugInfo::None)
|
||||
{
|
||||
// Note that we need to preserve these in the standard library so that
|
||||
// people working on rust can build with or without debuginfo while
|
||||
// still getting consistent results from the mir-opt tests.
|
||||
caller_body.var_debug_info.append(&mut callee_body.var_debug_info);
|
||||
}
|
||||
caller_body.basic_blocks_mut().extend(callee_body.basic_blocks_mut().drain(..));
|
||||
|
@ -1717,6 +1717,9 @@ options! {
|
||||
"enable MIR inlining (default: no)"),
|
||||
inline_mir_hint_threshold: Option<usize> = (None, parse_opt_number, [TRACKED],
|
||||
"inlining threshold for functions with inline hint (default: 100)"),
|
||||
inline_mir_preserve_debug: Option<bool> = (None, parse_opt_bool, [TRACKED],
|
||||
"when MIR inlining, whether to preserve debug info for callee variables \
|
||||
(default: preserve for debuginfo != None, otherwise remove)"),
|
||||
inline_mir_threshold: Option<usize> = (None, parse_opt_number, [TRACKED],
|
||||
"a default MIR inlining threshold (default: 50)"),
|
||||
input_stats: bool = (false, parse_bool, [UNTRACKED],
|
||||
|
@ -2102,6 +2102,14 @@ impl<'a> Builder<'a> {
|
||||
// break when incremental compilation is enabled. So this overrides the "no inlining
|
||||
// during incremental builds" heuristic for the standard library.
|
||||
rustflags.arg("-Zinline-mir");
|
||||
|
||||
// always pass this after the next `#[cfg(bootstrap)]` update.
|
||||
if compiler.stage != 0 {
|
||||
// Similarly, we need to keep debug info for functions inlined into other std functions,
|
||||
// even if we're not going to output debuginfo for the crate we're currently building,
|
||||
// so that it'll be available when downstream consumers of std try to use it.
|
||||
rustflags.arg("-Zinline-mir-preserve-debug");
|
||||
}
|
||||
}
|
||||
|
||||
if self.config.rustc_parallel
|
||||
|
@ -16,6 +16,7 @@
|
||||
+ scope 3 (inlined Pin::<&mut {coroutine@$DIR/inline_coroutine.rs:19:5: 19:8}>::new) {
|
||||
+ debug pointer => _3;
|
||||
+ scope 4 (inlined Pin::<&mut {coroutine@$DIR/inline_coroutine.rs:19:5: 19:8}>::new_unchecked) {
|
||||
+ debug pointer => _3;
|
||||
+ }
|
||||
+ }
|
||||
+ scope 5 (inlined g::{closure#0}) {
|
||||
|
@ -16,6 +16,7 @@
|
||||
+ scope 3 (inlined Pin::<&mut {coroutine@$DIR/inline_coroutine.rs:19:5: 19:8}>::new) {
|
||||
+ debug pointer => _3;
|
||||
+ scope 4 (inlined Pin::<&mut {coroutine@$DIR/inline_coroutine.rs:19:5: 19:8}>::new_unchecked) {
|
||||
+ debug pointer => _3;
|
||||
+ }
|
||||
+ }
|
||||
+ scope 5 (inlined g::{closure#0}) {
|
||||
|
@ -13,11 +13,17 @@ fn checked_shl(_1: u32, _2: u32) -> Option<u32> {
|
||||
debug b => _5;
|
||||
}
|
||||
scope 3 (inlined core::num::<impl u32>::overflowing_shl) {
|
||||
debug self => _1;
|
||||
debug rhs => _2;
|
||||
let mut _4: u32;
|
||||
let mut _5: bool;
|
||||
scope 4 (inlined core::num::<impl u32>::wrapping_shl) {
|
||||
debug self => _1;
|
||||
debug rhs => _2;
|
||||
let mut _3: u32;
|
||||
scope 5 (inlined core::num::<impl u32>::unchecked_shl) {
|
||||
debug self => _1;
|
||||
debug rhs => _3;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -13,11 +13,17 @@ fn checked_shl(_1: u32, _2: u32) -> Option<u32> {
|
||||
debug b => _5;
|
||||
}
|
||||
scope 3 (inlined core::num::<impl u32>::overflowing_shl) {
|
||||
debug self => _1;
|
||||
debug rhs => _2;
|
||||
let mut _4: u32;
|
||||
let mut _5: bool;
|
||||
scope 4 (inlined core::num::<impl u32>::wrapping_shl) {
|
||||
debug self => _1;
|
||||
debug rhs => _2;
|
||||
let mut _3: u32;
|
||||
scope 5 (inlined core::num::<impl u32>::unchecked_shl) {
|
||||
debug self => _1;
|
||||
debug rhs => _3;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -4,89 +4,12 @@ fn step_forward(_1: u16, _2: usize) -> u16 {
|
||||
debug x => _1;
|
||||
debug n => _2;
|
||||
let mut _0: u16;
|
||||
scope 1 (inlined <u16 as Step>::forward) {
|
||||
debug start => _1;
|
||||
debug n => _2;
|
||||
let mut _8: u16;
|
||||
scope 2 {
|
||||
}
|
||||
scope 3 (inlined <u16 as Step>::forward_checked) {
|
||||
scope 4 {
|
||||
scope 6 (inlined core::num::<impl u16>::checked_add) {
|
||||
let mut _7: bool;
|
||||
scope 7 {
|
||||
}
|
||||
scope 8 (inlined core::num::<impl u16>::overflowing_add) {
|
||||
let mut _5: (u16, bool);
|
||||
let _6: bool;
|
||||
scope 9 {
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
scope 5 (inlined convert::num::ptr_try_from_impls::<impl TryFrom<usize> for u16>::try_from) {
|
||||
let mut _3: bool;
|
||||
let mut _4: u16;
|
||||
}
|
||||
}
|
||||
scope 10 (inlined Option::<u16>::is_none) {
|
||||
scope 11 (inlined Option::<u16>::is_some) {
|
||||
}
|
||||
}
|
||||
scope 12 (inlined core::num::<impl u16>::wrapping_add) {
|
||||
}
|
||||
}
|
||||
|
||||
bb0: {
|
||||
StorageLive(_4);
|
||||
StorageLive(_3);
|
||||
_3 = Gt(_2, const 65535_usize);
|
||||
switchInt(move _3) -> [0: bb1, otherwise: bb5];
|
||||
_0 = <u16 as Step>::forward(move _1, move _2) -> [return: bb1, unwind unreachable];
|
||||
}
|
||||
|
||||
bb1: {
|
||||
_4 = _2 as u16 (IntToInt);
|
||||
StorageDead(_3);
|
||||
StorageLive(_6);
|
||||
StorageLive(_5);
|
||||
_5 = CheckedAdd(_1, _4);
|
||||
_6 = (_5.1: bool);
|
||||
StorageDead(_5);
|
||||
StorageLive(_7);
|
||||
_7 = unlikely(move _6) -> [return: bb2, unwind unreachable];
|
||||
}
|
||||
|
||||
bb2: {
|
||||
switchInt(move _7) -> [0: bb3, otherwise: bb4];
|
||||
}
|
||||
|
||||
bb3: {
|
||||
StorageDead(_7);
|
||||
StorageDead(_6);
|
||||
goto -> bb7;
|
||||
}
|
||||
|
||||
bb4: {
|
||||
StorageDead(_7);
|
||||
StorageDead(_6);
|
||||
goto -> bb6;
|
||||
}
|
||||
|
||||
bb5: {
|
||||
StorageDead(_3);
|
||||
goto -> bb6;
|
||||
}
|
||||
|
||||
bb6: {
|
||||
assert(!const true, "attempt to compute `{} + {}`, which would overflow", const core::num::<impl u16>::MAX, const 1_u16) -> [success: bb7, unwind unreachable];
|
||||
}
|
||||
|
||||
bb7: {
|
||||
StorageLive(_8);
|
||||
_8 = _2 as u16 (IntToInt);
|
||||
_0 = Add(_1, _8);
|
||||
StorageDead(_8);
|
||||
StorageDead(_4);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
@ -4,89 +4,12 @@ fn step_forward(_1: u16, _2: usize) -> u16 {
|
||||
debug x => _1;
|
||||
debug n => _2;
|
||||
let mut _0: u16;
|
||||
scope 1 (inlined <u16 as Step>::forward) {
|
||||
debug start => _1;
|
||||
debug n => _2;
|
||||
let mut _8: u16;
|
||||
scope 2 {
|
||||
}
|
||||
scope 3 (inlined <u16 as Step>::forward_checked) {
|
||||
scope 4 {
|
||||
scope 6 (inlined core::num::<impl u16>::checked_add) {
|
||||
let mut _7: bool;
|
||||
scope 7 {
|
||||
}
|
||||
scope 8 (inlined core::num::<impl u16>::overflowing_add) {
|
||||
let mut _5: (u16, bool);
|
||||
let _6: bool;
|
||||
scope 9 {
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
scope 5 (inlined convert::num::ptr_try_from_impls::<impl TryFrom<usize> for u16>::try_from) {
|
||||
let mut _3: bool;
|
||||
let mut _4: u16;
|
||||
}
|
||||
}
|
||||
scope 10 (inlined Option::<u16>::is_none) {
|
||||
scope 11 (inlined Option::<u16>::is_some) {
|
||||
}
|
||||
}
|
||||
scope 12 (inlined core::num::<impl u16>::wrapping_add) {
|
||||
}
|
||||
}
|
||||
|
||||
bb0: {
|
||||
StorageLive(_4);
|
||||
StorageLive(_3);
|
||||
_3 = Gt(_2, const 65535_usize);
|
||||
switchInt(move _3) -> [0: bb1, otherwise: bb5];
|
||||
_0 = <u16 as Step>::forward(move _1, move _2) -> [return: bb1, unwind continue];
|
||||
}
|
||||
|
||||
bb1: {
|
||||
_4 = _2 as u16 (IntToInt);
|
||||
StorageDead(_3);
|
||||
StorageLive(_6);
|
||||
StorageLive(_5);
|
||||
_5 = CheckedAdd(_1, _4);
|
||||
_6 = (_5.1: bool);
|
||||
StorageDead(_5);
|
||||
StorageLive(_7);
|
||||
_7 = unlikely(move _6) -> [return: bb2, unwind unreachable];
|
||||
}
|
||||
|
||||
bb2: {
|
||||
switchInt(move _7) -> [0: bb3, otherwise: bb4];
|
||||
}
|
||||
|
||||
bb3: {
|
||||
StorageDead(_7);
|
||||
StorageDead(_6);
|
||||
goto -> bb7;
|
||||
}
|
||||
|
||||
bb4: {
|
||||
StorageDead(_7);
|
||||
StorageDead(_6);
|
||||
goto -> bb6;
|
||||
}
|
||||
|
||||
bb5: {
|
||||
StorageDead(_3);
|
||||
goto -> bb6;
|
||||
}
|
||||
|
||||
bb6: {
|
||||
assert(!const true, "attempt to compute `{} + {}`, which would overflow", const core::num::<impl u16>::MAX, const 1_u16) -> [success: bb7, unwind continue];
|
||||
}
|
||||
|
||||
bb7: {
|
||||
StorageLive(_8);
|
||||
_8 = _2 as u16 (IntToInt);
|
||||
_0 = Add(_1, _8);
|
||||
StorageDead(_8);
|
||||
StorageDead(_4);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user