http://gcc.gnu.org/bugzilla/show_bug.cgi?id=58970
--- Comment #19 from Jakub Jelinek <jakub at gcc dot gnu.org> --- (In reply to Bernd Edlinger from comment #18) > Well, how about this version? > Does'nt it look like a much smaller change? > > --- expr.c.jj 2013-10-31 14:57:05.000000000 +0100 > +++ expr.c 2013-11-04 12:51:55.013931114 +0100 > @@ -4582,7 +4582,8 @@ get_bit_range (unsigned HOST_WIDE_INT *b > HOST_WIDE_INT adjust = bitoffset - *bitpos; > > gcc_assert ((adjust % BITS_PER_UNIT) == 0); > - gcc_assert (*offset != NULL_TREE); > + if (*offset == NULL_TREE) > + *offset = size_zero_node; > > *bitpos += adjust; > *offset But you then have undefined behavior if *bitpos is HOST_WIDE_INT_MIN. Or could for very small other *bitpos and not really small bitoffset, etc. And, while you save a few characters on the line, it means it is more expensive at runtime.