[llvm-bugs] [Bug 50285] New: [DebugInfo at O2] Poor coverage for frame index variable locations

via llvm-bugs llvm-bugs at lists.llvm.org
Mon May 10 02:10:39 PDT 2021


https://bugs.llvm.org/show_bug.cgi?id=50285

            Bug ID: 50285
           Summary: [DebugInfo at O2] Poor coverage for frame index variable
                    locations
           Product: libraries
           Version: trunk
          Hardware: PC
                OS: Linux
            Status: NEW
          Severity: enhancement
          Priority: P
         Component: Common Code Generator Code
          Assignee: unassignedbugs at nondot.org
          Reporter: orlando.hyams at sony.com
                CC: llvm-bugs at lists.llvm.org

In the reproducer below, the variable 'local' has no location around the call
to 'ext' when built with "-O2 -g -c" (targeting x86_64-unknown-linux-gnu):

clang built at 71597d40e878.

$ cat test.cpp
void ext(int, int, int, int, int, int, int, int, int, int);
void escape(int*);
int example() {
  int local = 0;
  escape(&local);
  ext(0, 1, 2, 3, 4, 5, 6, 7, 8, 9);
  local += 2;
  return local;
}

$ clang -O2 -g -c test.cpp -o test.o

$ llvm-objdump -d test.o
test.o: file format elf64-x86-64
Disassembly of section .text:
0000000000000000 <_Z7examplev>:
       0: 50                            pushq   %rax
       1: c7 44 24 04 00 00 00 00       movl    $0, 4(%rsp)
       9: 48 8d 7c 24 04                leaq    4(%rsp), %rdi
       e: e8 00 00 00 00                callq   0x13 <_Z7examplev+0x13>
      13: 31 ff                         xorl    %edi, %edi
      15: be 01 00 00 00                movl    $1, %esi
      1a: ba 02 00 00 00                movl    $2, %edx
      1f: b9 03 00 00 00                movl    $3, %ecx
      24: 41 b8 04 00 00 00             movl    $4, %r8d
      2a: 41 b9 05 00 00 00             movl    $5, %r9d
      30: 6a 09                         pushq   $9
      32: 6a 08                         pushq   $8
      34: 6a 07                         pushq   $7
      36: 6a 06                         pushq   $6
      38: e8 00 00 00 00                callq   0x3d <_Z7examplev+0x3d>
      3d: 48 83 c4 20                   addq    $32, %rsp
      41: 8b 44 24 04                   movl    4(%rsp), %eax
      45: 83 c0 02                      addl    $2, %eax
      48: 59                            popq    %rcx
      49: c3                            retq

$ llvm-dwarfdump test.o --name local
test.o: file format elf64-x86-64
0x00000047: DW_TAG_variable
              DW_AT_location    (0x00000000: 
                 [0x0000000000000001, 0x0000000000000009): DW_OP_consts +0,
DW_OP_stack_value
                 [0x0000000000000009, 0x0000000000000032): DW_OP_breg7 RSP+4
                 [0x0000000000000045, 0x000000000000004a): DW_OP_reg0 RAX)
              DW_AT_name        ("local")
              DW_AT_decl_file   ("test.cpp")
              DW_AT_decl_line   (4)

The variable 'local' is not given a location over the interval [32, 45) even
though its stack home is still valid here (RSP+8, RSP+12, ...).

-- 
You are receiving this mail because:
You are on the CC list for the bug.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-bugs/attachments/20210510/7b8ca80e/attachment.html>


More information about the llvm-bugs mailing list