------- Comment #3 from rguenth at gcc dot gnu dot org 2008-03-16 12:20 ------- This invariantness of (unsigned int) D.1189_5 in
__fini_array_end.0_2 = (int) &__fini_array_end; __fini_array_start.1_3 = (int) &__fini_array_start; D.1188_4 = __fini_array_end.0_2 - __fini_array_start.1_3; D.1189_5 = D.1188_4 /[ex] 4; i_6 = (unsigned int) D.1189_5; which is then substituted into the array reference __fini_array_start[i_25] and turned into an address induction variable is there since gimplification. Because gimplification preserves the invariantness of what originally was unsigned int i = (unsigned int) (((int) &__fini_array_end - (int) &__fini_array_start) /[ex] 4); that is, gimplification does _not_ re-set TREE_INVARIANT on anything that had it set before. Which is, err, bogus - sort of. -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=35607