Skip to content

MIR-inlined functions called with constants should put the constant in debug info #110675

Closed
@scottmcm

Description

@scottmcm

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.)

Metadata

Metadata

Assignees

No one assigned

    Labels

    A-debuginfoArea: Debugging information in compiled programs (DWARF, PDB, etc.)C-bugCategory: This is a bug.

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions