http://gcc.gnu.org/bugzilla/show_bug.cgi?id=58970
--- Comment #8 from Jakub Jelinek <jakub at gcc dot gnu.org> --- (In reply to Bernd Edlinger from comment #7) > (In reply to Jakub Jelinek from comment #6) > > That doesn't look safe, negative rbitpos is not necessarily undefined > > behavior. > > Can't you get the same with say > > struct S { unsigned char s : 1; }; > > > > ... > > void function(struct S *p) > > { > > p[-1].s = 0; > > } > > no. I checked that. This is folded quite differently: > > MEM[(struct S *)p_1(D) + -1B].s = 0; > > and there is no ICE in this case. But this is really nothing the expansion code should rely on to detect if the code is undefined behavior or not.