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 rtl-optimization/33669] [4.3 Regression] Revision 128957 miscompiles 481.wrf



------- Comment #4 from hjl at lucon dot org  2007-10-05 23:14 -------
#include <string.h>
#include <stdlib.h>

typedef struct foo_t { 
          size_t blksz;
          size_t  bf_extent;
         size_t  bf_cnt; 
          void    *bf_base;
} foo_t;


#define _RNDUP(x, unit)  ((((x) + (unit) - 1) / (unit)) \
        * (unit))
#define _RNDDOWN(x, unit)  ((x) - ((x)%(unit)))

long long
foo(foo_t *const pxp,  long long offset, size_t extent)
{
        const long long blkoffset = _RNDDOWN(offset,
                                             (long long )pxp->blksz);
        size_t diff = (size_t)(offset - blkoffset);
        size_t blkextent = _RNDUP(diff + extent, pxp->blksz);

        if(pxp->blksz < blkextent)
                return -1;
        {
                void *const middle = pxp->bf_base;
                if(pxp->bf_cnt > pxp->blksz)
                {
                        pxp->bf_extent = pxp->blksz;
                }
                if(pxp->bf_cnt > 0)
                {
                        /* copy lower half into upper half */
                        (void) memcpy(middle, pxp->bf_base, pxp->blksz);
                }
        }

        return  blkoffset;
}

int
main ()
{
  foo_t x;
  char buffer [8192];
  long long xx;

  x.blksz = 8192;
  x.bf_extent = 0;
  x.bf_cnt = 0;
  x.bf_base = buffer;
  xx = foo (&x, 0, 4096);
  if (xx != 0LL)
    abort ();
  return 0;
}
[hjl@gnu-27 pr33669]$ /export/gnu/import/rrs/128957/usr/bin/gcc  foo.c -m32 -O
[hjl@gnu-27 pr33669]$ ./a.out 
Aborted
[hjl@gnu-27 pr33669]$ 


-- 


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


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