[Bug c/36613] New: likely codegen bug

regehr at cs dot utah dot edu gcc-bugzilla@gcc.gnu.org
Tue Jun 24 04:15:00 GMT 2008


This is seen on svn 137045.

[regehr@babel tmp27]$ current-gcc -O -fwrapv small.c -o small
[regehr@babel tmp27]$ ./small
0
[regehr@babel tmp27]$ current-gcc -Os -fwrapv small.c -o small
[regehr@babel tmp27]$ ./small
2

[regehr@babel gcc-current]$ current-gcc -v       
Using built-in specs.
Target: i686-pc-linux-gnu
Configured with: ../configure --program-prefix=current-
--enable-languages=c,c++ --prefix=/home/regehr
Thread model: posix
gcc version 4.4.0 20080623 (experimental) (GCC) 





#include <limits.h>
#include <stdio.h>

static inline int
lshift_s_s(int left, int right)
{
        if ((left < 0)
                || (right < 0)
                || (right >= sizeof(int)*CHAR_BIT)
                || (left > (INT_MAX >> right))) {
                /* Avoid undefined behavior. */
                return left;
        }
        return left << right;
}

static inline unsigned int
lshift_u_u(unsigned int left, unsigned int right)
{
        if ((right >= sizeof(unsigned int)*CHAR_BIT)
                || (left > (UINT_MAX >> right))) {
                /* Avoid undefined behavior. */
                return left;
        }
        return left << right;
}

static inline int
rshift_s_u(int left, unsigned int right)
{
        if ((left < 0)
                || (right >= sizeof(int)*CHAR_BIT)) {
                /* Avoid implementation-defined and undefined behavior. */
                return left;
        }
        return left >> right;
}

int func_47(unsigned int p_48 ) ;
int func_47(unsigned int p_48 ) 
{ 
  int tmp = lshift_u_u(p_48, p_48);
  int tmp___0 = lshift_s_s(tmp, 1);
  int tmp___1 = rshift_s_u(1 + p_48, tmp___0);
  return (tmp___1);
}

int main(void) 
{ 
  int x = func_47(1);
  printf("%d\n", x);
  return 0;
}


-- 
           Summary: likely codegen bug
           Product: gcc
           Version: 4.4.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c
        AssignedTo: unassigned at gcc dot gnu dot org
        ReportedBy: regehr at cs dot utah dot edu
 GCC build triplet: i686-pc-linux-gnu
  GCC host triplet: i686-pc-linux-gnu
GCC target triplet: i686-pc-linux-gnu


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



More information about the Gcc-bugs mailing list