[LLVMbugs] [Bug 19500] New: Right-shift operator returns incorrect and inconsistent values

bugzilla-daemon at llvm.org bugzilla-daemon at llvm.org
Mon Apr 21 09:36:56 PDT 2014


http://llvm.org/bugs/show_bug.cgi?id=19500

            Bug ID: 19500
           Summary: Right-shift operator returns incorrect and
                    inconsistent values
           Product: clang
           Version: 3.4
          Hardware: Macintosh
                OS: MacOS X
            Status: NEW
          Severity: normal
          Priority: P
         Component: C++
          Assignee: unassignedclangbugs at nondot.org
          Reporter: chris.cooper at veranmedical.com
                CC: dgregor at apple.com, llvmbugs at cs.uiuc.edu
    Classification: Unclassified

Created attachment 12416
  --> http://llvm.org/bugs/attachment.cgi?id=12416&action=edit
Short source code showing the problem

Compiling the attached test program with no flags (just "clang++ shift.cpp")
shows several problems with the right-shift operator.

Right-shifting by a large value should always return zero (according to my
reading of the C++ ISO spec, section 5.8.3).

1) Executing the program "as is" gives this output:

Main: 48271 >> 1291394886 = 754; rx=0=0x0=long:0; (lx>>ix)=long:754
Test: 48271 >> 1291394886; (lx>>ix)=754; rx=754=0x2f2=long:754;
(lx>>ix)=long:754
lx (8 bits) = 48271 =  = bc8f
ix (4 bits) = 1291394886 =  = 4cf91f46

1a) In the main() function, storing the result of the shift in a variable (rx)
results in the correct zero value, but passing the result of the shift either
to std::cout or to a simple print_value() function gives a non-zero result
(754).

1b) When the exact same values are passed to a function for evaluation, the
right-shift operator returns the same invalid value whether the result is
stored first or not.

Perhaps more disturbing:

Commenting out the last two lines of the main() function results in a
drastically wrong value being stored and reported:

Main: 48271 >> 1291394886 = 754;
rx=140734645460120=0x7fff568cdc98=long:140734645460120; (lx>>ix)=long:754

-- 
You are receiving this mail because:
You are on the CC list for the bug.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-bugs/attachments/20140421/3e768d41/attachment.html>


More information about the llvm-bugs mailing list