Hi!

While trying to implement folding of &a +- cst to &a[c] I came
along the C frontend, which for

   int a[4];
   int *p = &a[-1];

produces

   p = &a + (int *)-4;

so my new transformation gets

<integer_cst 0x401b5738 type <pointer_type 0x401559b4> constant invariant
4294967292>

as (int *)-4.

But of course trying to fold the index back into an ARRAY_REF, thereby
adjusting for the element size does not preserve the unsigned pointer
overflow behavior and I get

   &a[-4U/4] from &a[-1]

which is of course not the same.

Any idea how to avoid this kind of mess and still fold &a + cst
to an ARRAY_REF if appropriate?

Thanks,
Richard.

--
Richard Guenther <richard dot guenther at uni-tuebingen dot de>
WWW: http://www.tat.physik.uni-tuebingen.de/~rguenth/

Reply via email to