From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 19914 invoked by alias); 5 Oct 2007 23:14:40 -0000 Received: (qmail 19842 invoked by uid 48); 5 Oct 2007 23:14:31 -0000 Date: Fri, 05 Oct 2007 23:14:00 -0000 Message-ID: <20071005231431.19841.qmail@sourceware.org> X-Bugzilla-Reason: CC References: Subject: [Bug rtl-optimization/33669] [4.3 Regression] Revision 128957 miscompiles 481.wrf In-Reply-To: Reply-To: gcc-bugzilla@gcc.gnu.org To: gcc-bugs@gcc.gnu.org From: "hjl at lucon dot org" Mailing-List: contact gcc-bugs-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-bugs-owner@gcc.gnu.org X-SW-Source: 2007-10/txt/msg00489.txt.bz2 ------- Comment #4 from hjl at lucon dot org 2007-10-05 23:14 ------- #include #include 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