<html>
<head>
<base href="https://bugs.llvm.org/">
</head>
<body><table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Bug ID</th>
<td><a class="bz_bug_link
bz_status_NEW "
title="NEW - [DebugInfo@O2] Poor coverage for frame index variable locations"
href="https://bugs.llvm.org/show_bug.cgi?id=50285">50285</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>[DebugInfo@O2] Poor coverage for frame index variable locations
</td>
</tr>
<tr>
<th>Product</th>
<td>libraries
</td>
</tr>
<tr>
<th>Version</th>
<td>trunk
</td>
</tr>
<tr>
<th>Hardware</th>
<td>PC
</td>
</tr>
<tr>
<th>OS</th>
<td>Linux
</td>
</tr>
<tr>
<th>Status</th>
<td>NEW
</td>
</tr>
<tr>
<th>Severity</th>
<td>enhancement
</td>
</tr>
<tr>
<th>Priority</th>
<td>P
</td>
</tr>
<tr>
<th>Component</th>
<td>Common Code Generator Code
</td>
</tr>
<tr>
<th>Assignee</th>
<td>unassignedbugs@nondot.org
</td>
</tr>
<tr>
<th>Reporter</th>
<td>orlando.hyams@sony.com
</td>
</tr>
<tr>
<th>CC</th>
<td>llvm-bugs@lists.llvm.org
</td>
</tr></table>
<p>
<div>
<pre>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, ...).</pre>
</div>
</p>
<hr>
<span>You are receiving this mail because:</span>
<ul>
<li>You are on the CC list for the bug.</li>
</ul>
</body>
</html>