http://llvm.org/bugs/show_bug.cgi?id=22432

            Bug ID: 22432
           Summary: Invalid location was generated for variable when
                    passing its address to other function
           Product: libraries
           Version: trunk
          Hardware: PC
                OS: Linux
            Status: NEW
          Severity: normal
          Priority: P
         Component: Common Code Generator Code
          Assignee: [email protected]
          Reporter: [email protected]
                CC: [email protected]
    Classification: Unclassified

Created attachment 13791
  --> http://llvm.org/bugs/attachment.cgi?id=13791&action=edit
LIT test that fails due to the described bug

A LIT test that fails due to this bug is attached.

Source:
--------
int foo(int *x);

int main()
{
    int c = 5;
    foo(&c);
    return c;
}

Assembly (x86_64-pc-linux):
----------------------------
test.o:    file format ELF64-x86-64

Disassembly of section .text:
main:
       0:       pushq   %rax
       1:       movl    $5, 4(%rsp)
       9:       leaq    4(%rsp), %rdi
       e:       callq   0
      13:       movl    4(%rsp), %eax
      17:       popq    %rdx
      18:       retq

Debug Info of "c" variable:
---------------------------
0x0000003f:     DW_TAG_variable [3]
                  DW_AT_location [DW_FORM_sec_offset]   (0x00000000)
                  DW_AT_name [DW_FORM_strp]     ( .debug_str[0x00000047] = "c")
                  DW_AT_decl_file [DW_FORM_data1]       ("test.c")
                  DW_AT_decl_line [DW_FORM_data1]       (5)
                  DW_AT_type [DW_FORM_ref4]     (cu + 0x004f => {0x0000004f})


.debug_loc contents:
0x00000000: Beginning address offset: 0x0000000000000001
               Ending address offset: 0x000000000000000e
                Location description: 11 05 9f

            Beginning address offset: 0x000000000000000e
               Ending address offset: 0x0000000000000019
                Location description: 75 00


Location: 75 00 ==> (DW_OP_breg5 (rdi): 0)
However, %rdi is a scratch register according to Linux-64 calling convention
and thus could change its value once return from the called function.

Notice that this bug is different from 22316, as in this case the called
function receives the address of the variable and not the variable itself.

-- 
You are receiving this mail because:
You are on the CC list for the bug.
_______________________________________________
LLVMbugs mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/llvmbugs

Reply via email to