Skip to content

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

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

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

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