This is the mail archive of the gcc-bugs@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[Bug c/34235] New: short variable cast to unsigned int fails to right shift as unsigned


Shifting the result of a cast does not produce the same results as when using
an intermediate variable.

        short x = -1;
        unsigned a = ((unsigned)(short)-1) >> 1;
        unsigned tmp = (unsigned)x;
        unsigned b = tmp >> 1;
        unsigned c = ((unsigned)x) >> 1;
        printf("a:%x b:%x c:%x",a,b,c);

produces
a:7fffffff b:7fffffff c:ffffffff

while I'd expect the result for c to be the same as the other two.

Similar behavior appears to occur with other types, as long as the source type
is shorter than the target type and the target type is int or longer.


-- 
           Summary: short variable cast to unsigned int fails to right shift
                    as unsigned
           Product: gcc
           Version: 4.1.2
            Status: UNCONFIRMED
          Severity: major
          Priority: P3
         Component: c
        AssignedTo: unassigned at gcc dot gnu dot org
        ReportedBy: fgccbz1 at greynode dot net
  GCC host triplet: x86_64-redhat-linux
GCC target triplet: x86_64-redhat-linux


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=34235


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]