The following code calls is_digit with a constant radix:
|
pub fn num_to_digit(num: char) -> u32 { |
|
// CHECK-NOT: panic |
|
if num.is_digit(8) { num.to_digit(8).unwrap() } else { 0 } |
|
} |
The MIR inliner preserves a local variable that's "holding" the value
|
let mut _3: u32; // in scope 0 at $DIR/issue_59352.rs:+2:12: +2:23 |
|
scope 1 (inlined char::methods::<impl char>::is_digit) { // at $DIR/issue_59352.rs:15:12: 15:23 |
|
debug self => _1; // in scope 1 at $SRC_DIR/core/src/char/methods.rs:LL:COL |
|
debug radix => _3; // in scope 1 at $SRC_DIR/core/src/char/methods.rs:LL:COL |
But it's actually dead -- nothing sets _3 to anything, so that debug info node is useless.
(I'm working on a PR that will remove always-uninitialized debug info like that _3, which is how I noticed this. So I opened this in case the debuginfo folks want this to work instead of just being dropped.)
The following code calls
is_digitwith a constant radix:rust/tests/mir-opt/issues/issue_59352.rs
Lines 13 to 16 in 37b22cf
The MIR inliner preserves a local variable that's "holding" the value
rust/tests/mir-opt/issues/issue_59352.num_to_digit.PreCodegen.after.mir
Lines 7 to 10 in 37b22cf
But it's actually dead -- nothing sets
_3to anything, so that debug info node is useless.(I'm working on a PR that will remove always-uninitialized debug info like that
_3, which is how I noticed this. So I opened this in case the debuginfo folks want this to work instead of just being dropped.)