[LLVMbugs] [Bug 12133] New: if overflow is required to exit a loop clang will emit an infinite loop
bugzilla-daemon at llvm.org
bugzilla-daemon at llvm.org
Wed Feb 29 07:32:16 PST 2012
http://llvm.org/bugs/show_bug.cgi?id=12133
Bug #: 12133
Summary: if overflow is required to exit a loop clang will emit
an infinite loop
Product: clang
Version: 3.0
Platform: PC
OS/Version: Linux
Status: NEW
Severity: normal
Priority: P
Component: -New Bugs
AssignedTo: unassignedclangbugs at nondot.org
ReportedBy: kretz at kde.org
CC: llvmbugs at cs.uiuc.edu
Classification: Unclassified
Created attachment 8119
--> http://llvm.org/bugs/attachment.cgi?id=8119
testcase
The following loop (see also the attached source file) only ends because i
overflows and thus finally reaches the required 0x7fffffff:
for (int i = -0x80000000; i < 0x7fffffff; i += 0x1fffff)
clang translates this into an unconditional infinite loop. If the loop body is
empty, though, clang removes the infinite loop, which is inconsistent. :)
Here's what GCC makes of it:
1: bb 01 00 20 00 mov $0x200001,%ebx
6: 66 2e 0f 1f 84 00 00 nopw %cs:0x0(%rax,%rax,1)
d: 00 00 00
10: e8 00 00 00 00 callq 15 <bar()+0x15>
15: 83 eb 01 sub $0x1,%ebx
18: 75 f6 jne 10 <bar()+0x10>
And clang's infinite loop:
0: 55 push %rbp
1: 48 89 e5 mov %rsp,%rbp
4: 66 66 66 2e 0f 1f 84 data32 data32 nopw %cs:0x0(%rax,%rax,1)
b: 00 00 00 00 00
10: e8 00 00 00 00 callq 15 <bar()+0x15>
15: eb f9 jmp 10 <bar()+0x10>
I would appreciate a compiler that translates the overflow correctly, but also
warns me about it. This was really a bug in my code, and thanks to this bug in
clang I found it... :)
--
Configure bugmail: http://llvm.org/bugs/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are on the CC list for the bug.
More information about the llvm-bugs
mailing list