------- 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

Reply via email to