http://gcc.gnu.org/bugzilla/show_bug.cgi?id=59320
--- Comment #10 from Joost VandeVondele <Joost.VandeVondele at mat dot ethz.ch> --- (In reply to David Kaufmann from comment #9) > (In reply to Joost VandeVondele from comment #7) > > (In reply to David Kaufmann from comment #5) > > > Created attachment 31320 [details] > > > preprocessor output > > > the buggy function is on line 18136, but it does not seem to have been > > > changed. > > > > static unsigned char dash_list[16][2] > > static int ndash_dot = 4; > > nd=ndash_dot; > > for (il =0; il<nd; il ++){ > > dash_list[op][il] = ... > > } > > so clearly il<nd == 1 > > i am not sure, that probably is another bug. (as dash_list[op]-size is only > two, but dash_list[op][0], dash_list[op][1] and dash_list[op][3] get set.) no weird behavior of vrp. given the size of dash_list (2) it correctly establishes the range on the value, i.e. that il must be either 0 or 1 (any other value would trigger out-of-bounds, which can't happen in a valid C program). All the rest is a consequence of this. So, the bug is in the C program, not the compiler.