<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 - Wrong optimization of a division by zero"
href="https://bugs.llvm.org/show_bug.cgi?id=46356">46356</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>Wrong optimization of a division by zero
</td>
</tr>
<tr>
<th>Product</th>
<td>clang
</td>
</tr>
<tr>
<th>Version</th>
<td>10.0
</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>release blocker
</td>
</tr>
<tr>
<th>Priority</th>
<td>P
</td>
</tr>
<tr>
<th>Component</th>
<td>C
</td>
</tr>
<tr>
<th>Assignee</th>
<td>unassignedclangbugs@nondot.org
</td>
</tr>
<tr>
<th>Reporter</th>
<td>qianjh@cn.fujitsu.com
</td>
</tr>
<tr>
<th>CC</th>
<td>blitzrakete@gmail.com, dgregor@apple.com, erik.pilkington@gmail.com, llvm-bugs@lists.llvm.org, richard-llvm@metafoo.co.uk
</td>
</tr></table>
<p>
<div>
<pre>The expression x/x is optimised to 1 when use -O1 or -O2 or -O3 option.
If x is 0, the result is not right. So this optimisation is wrong.
test case:
-----------------------------------------
#include <stdio.h>
unsigned foo(unsigned x) {
return x/x;
}
int main()
{
printf("result is %d\n", foo(0));
}
test commands:
-----------------------------------------
#clang --version
clang version 10.0.0
Target: x86_64-unknown-linux-gnu
Thread model: posix
#clang -O1 div.c
#./a.out
result is 1
#clang -O1 div.c -S
#cat div.s
.text
.file "div.c"
.globl foo # -- Begin function foo
.p2align 4, 0x90
.type foo,@function
foo: # @foo
.cfi_startproc
# %bb.0: # %entry
movl $1, %eax
retq
.Lfunc_end0:
.size foo, .Lfunc_end0-foo
......
I tested this in trunk, and get the same result.</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>