[LLVMbugs] [Bug 11393] New: Wrong code produced by -O or -O2 optimization

bugzilla-daemon at llvm.org bugzilla-daemon at llvm.org
Wed Nov 16 10:31:31 PST 2011


             Bug #: 11393
           Summary: Wrong code produced by -O or -O2 optimization
           Product: clang
           Version: trunk
          Platform: Macintosh
        OS/Version: MacOS X
            Status: NEW
          Severity: release blocker
          Priority: P
         Component: C++
        AssignedTo: unassignedclangbugs at nondot.org
        ReportedBy: michael at jarvis.net
                CC: dgregor at apple.com, llvmbugs at cs.uiuc.edu
    Classification: Unclassified

Created attachment 7620
  --> http://llvm.org/bugs/attachment.cgi?id=7620
Code exhibiting bug.

I have come across a very strange bug in clang++ where it produces wrong code
when compiled with -O or -O2, but gets the right answer for -O0, -O1 or -O3.

See the attached code for a small test case exhibiting the problem.  I think
the bug happens in the line RT d = REAL(a)*REAL(b) - NORM(c);  It seems to do
something strange with the a and b variables at that point.

I've marked a number of changes to the code that manage to avoid the problem
with comments marked // NB...

Command line to reproduce bug:

$ /Users/Mike/clang/build/Release+Asserts/bin/clang++ -O2 clangbug.cpp -o cb;
Done: a,b,c,d => (0.1875,0),(0.1875,0),(0.3125,0),-16
Correct answers are (0.0967742,0),(-0.0645161,-0),(0.16129,0),-31

Expected output achieved if -O2 is omitted or replaced by -O0, -O1, or -O3:

$ /Users/Mike/clang/build/Release+Asserts/bin/clang++ clangbug.cpp -o cb; cb
Done: a,b,c,d => (0.0967742,0),(-0.0645161,-0),(0.16129,0),-31
Correct answers are (0.0967742,0),(-0.0645161,-0),(0.16129,0),-31

System details:

MacOsX 10.6.8, 2.66 GHz Intel Core i7

$ /Users/Mike/clang/build/Release+Asserts/bin/clang++ --version
clang version 3.1 (trunk 144613)
Target: x86_64-apple-darwin10.8.0
Thread model: posix

(The bug happens with a Debug+Asserts build of clang++ as well.)

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