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

Reply via email to