This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug rtl-optimization/33669] [4.3 Regression] Revision 128957 miscompiles 481.wrf
- From: "hjl at lucon dot org" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: 5 Oct 2007 23:14:31 -0000
- Subject: [Bug rtl-optimization/33669] [4.3 Regression] Revision 128957 miscompiles 481.wrf
- References: <bug-33669-682@http.gcc.gnu.org/bugzilla/>
- Reply-to: gcc-bugzilla at gcc dot gnu dot org
------- 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