https://bugs.llvm.org/show_bug.cgi?id=46356
Bug ID: 46356
Summary: Wrong optimization of a division by zero
Product: clang
Version: 10.0
Hardware: PC
OS: Linux
Status: NEW
Severity: release blocker
Priority: P
Component: C
Assignee: unassignedclangb...@nondot.org
Reporter: qia...@cn.fujitsu.com
CC: blitzrak...@gmail.com, dgre...@apple.com,
erik.pilking...@gmail.com, llvm-bugs@lists.llvm.org,
richard-l...@metafoo.co.uk
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.
--
You are receiving this mail because:
You are on the CC list for the bug.
_______________________________________________
llvm-bugs mailing list
llvm-bugs@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-bugs