[PATCH] Fix PR24851 (2nd version)
Ian Lance Taylor
ian@airs.com
Wed Nov 16 03:38:00 GMT 2005
Richard Guenther <rguenther@suse.de> writes:
> On Tue, 15 Nov 2005, Richard Guenther wrote:
>
> > I have a patch along Andrews that fixes both testcases. I'll post it as
> > soon as testing finishes.
>
> Here it is. It fixes fold and fold_stmt to use signed division in
> recombining pointer + offset to an ARRAY_REF. I'm not sure this is
> a correct fix, but it passes bootstrap and regtesting (32 and 64 bit)
> on x86_64-unknown-linux-gnu for all default languages.
It seems to me that this is a small problem with our representation.
p[-1] where p is a pointer ought to be represented as a pointer plus a
signed value. p[0xffffffff] ought to be represented as a pointer plus
an unsigned value. Right now both cases are represented as a pointer
plus an unsigned value, because we want PLUS_EXPR to use the same type
for both operands, and pointers are treated as an unsigned type.
> 2005-11-15 Richard Guenther <rguenther@suse.de>
>
> PR middle-end/24851
> * fold-const.c (try_move_mult_to_index): Make sure to
> use a signed division for ptr-offset / element-size.
> * tree-ssa-ccp.c (maybe_fold_offset_to_array_ref): Likewise.
>
> * gcc.c-torture/execute/pr24851.c: New testcase.
I think this is OK. It basically assumes that pointer offsets are
signed, which seems like a reasonable assumption.
Please give it 24 hours to see if anybody else has a comment.
Thakns.
Ian
More information about the Gcc-patches
mailing list