<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 - Missing debug line information for some cases"
href="https://bugs.llvm.org/show_bug.cgi?id=47232">47232</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>Missing debug line information for some cases
</td>
</tr>
<tr>
<th>Product</th>
<td>clang
</td>
</tr>
<tr>
<th>Version</th>
<td>unspecified
</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>-New Bugs
</td>
</tr>
<tr>
<th>Assignee</th>
<td>unassignedclangbugs@nondot.org
</td>
</tr>
<tr>
<th>Reporter</th>
<td>i@i-m.dev
</td>
</tr>
<tr>
<th>CC</th>
<td>htmldeveloper@gmail.com, llvm-bugs@lists.llvm.org, neeilans@live.com, richard-llvm@metafoo.co.uk
</td>
</tr></table>
<p>
<div>
<pre>Look at this simple code, we compile it with `clang -O0 -g main.c`
int main() {
int v = -42;
do {
if (v <= 0) {
v = 1024 - v;
} else if (v % 2) {
v = v * 3 + 1;
} else {
v = v / 2;
} // here the debug becomes 0
} while (1 != v);
}
However, clang generate wrong debug line information for the `}` line of second
else statement. line of address `0x000000000040116d` is zero. I tried on
Linux/macOS for various versions of clang, the problem reproduced.
Address Line Column File ISA Discriminator Flags
------------------ ------ ------ ------ --- ------------- -------------
0x0000000000401110 1 0 1 0 0 is_stmt
0x000000000040111b 2 9 1 0 0 is_stmt prologue_end
0x0000000000401122 4 15 1 0 0 is_stmt
0x0000000000401126 4 13 1 0 0
0x000000000040112c 5 22 1 0 0 is_stmt
0x0000000000401134 5 15 1 0 0
0x0000000000401137 6 9 1 0 0 is_stmt
0x000000000040113c 6 20 1 0 0
0x000000000040113f 6 22 1 0 0
0x000000000040114a 6 20 1 0 0
0x0000000000401150 7 19 1 0 0 is_stmt
0x0000000000401154 7 23 1 0 0
0x0000000000401157 7 15 1 0 0
0x000000000040115a 8 9 1 0 0 is_stmt
0x000000000040115f 9 17 1 0 0 is_stmt
0x0000000000401162 9 19 1 0 0
0x000000000040116a 9 15 1 0 0
0x000000000040116d 0 15 1 0 0
0x0000000000401172 11 5 1 0 0 is_stmt
0x0000000000401177 11 16 1 0 0
0x000000000040117f 11 5 1 0 0
0x0000000000401185 12 1 1 0 0 is_stmt
0x000000000040118a 12 1 1 0 0 is_stmt end_sequence
0000000000401110 <main>:
401110: 55 push %rbp
401111: 48 89 e5 mov %rsp,%rbp
401114: c7 45 fc 00 00 00 00 movl $0x0,-0x4(%rbp)
40111b: c7 45 f8 d6 ff ff ff movl $0xffffffd6,-0x8(%rbp)
401122: 83 7d f8 00 cmpl $0x0,-0x8(%rbp)
401126: 0f 8f 10 00 00 00 jg 40113c <main+0x2c>
40112c: b8 00 04 00 00 mov $0x400,%eax
401131: 2b 45 f8 sub -0x8(%rbp),%eax
401134: 89 45 f8 mov %eax,-0x8(%rbp)
401137: e9 36 00 00 00 jmpq 401172 <main+0x62>
40113c: 8b 45 f8 mov -0x8(%rbp),%eax
40113f: 99 cltd
401140: b9 02 00 00 00 mov $0x2,%ecx
401145: f7 f9 idiv %ecx
401147: 83 fa 00 cmp $0x0,%edx
40114a: 0f 84 0f 00 00 00 je 40115f <main+0x4f>
401150: 6b 45 f8 03 imul $0x3,-0x8(%rbp),%eax
401154: 83 c0 01 add $0x1,%eax
401157: 89 45 f8 mov %eax,-0x8(%rbp)
40115a: e9 0e 00 00 00 jmpq 40116d <main+0x5d>
40115f: 8b 45 f8 mov -0x8(%rbp),%eax
401162: 99 cltd
401163: b9 02 00 00 00 mov $0x2,%ecx
401168: f7 f9 idiv %ecx
40116a: 89 45 f8 mov %eax,-0x8(%rbp)
40116d: e9 00 00 00 00 jmpq 401172 <main+0x62>
401172: e9 00 00 00 00 jmpq 401177 <main+0x67>
401177: b8 01 00 00 00 mov $0x1,%eax
40117c: 3b 45 f8 cmp -0x8(%rbp),%eax
40117f: 0f 85 9d ff ff ff jne 401122 <main+0x12>
401185: 8b 45 fc mov -0x4(%rbp),%eax
401188: 5d pop %rbp
401189: c3 retq</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>