On Wed, Jan 03, 2018 at 11:45:55AM -0500, Nathan Sidwell wrote: > On 01/03/2018 11:31 AM, Marek Polacek wrote: > > Here we are crashing because cxx_fold_indirect_ref got a POINTER_PLUS_EXPR > > with offset > signed HOST_WIDE_INT and we tried to convert it to sHWI. > > > > The matching code in fold_indirect_ref_1 uses uHWIs so I've followed suit. > > But that code now also uses poly_uint64 and I'm not sure if any of the > > constexpr.c code should use it, too. But this patch fixes the ICE. > > This doesn't look right to me, but it doesn't help that the test case > invokes UB.
Hmm, like I said, I just followed fold_indirect_ref_1 so I was pretty confident that this is not a totally wrong thing to do ;). > > +typedef int V __attribute__ ((__vector_size__ (16))); > > +V a; > > + > > +int > > +main () > > +{ > > + reinterpret_cast <int *> (&a)[-1] += 1; > > +} > > one could make this code well formed with (I think) > > typedef int V __attribute__ ((__vector_size__ (16))); > V a[2]; > > int main () > { > return reinterpret_cast <int *> (&a[1])[-1]; > } > > That should access the final element of the a[0] vector. Unfortunately, this doesn't trigger the ICE. Marek