------- Comment #1 from mueller at gcc dot gnu dot org 2007-03-06 15:22 ------- after prefetch-loop-arrays run, vrp2 looks like this:
<L81>:; D.1885_87 = &r_4(D)->sig[i_13]; D.1886_88 = D.1885_87 + 160B; __builtin_prefetch (D.1886_88, 1); r_4(D)->sig[i_13] = 0; i_8 = i_13 + 1; i_26 = i_8; r_4(D)->sig[i_26] = 0; i_28 = i_26 + 1; i_30 = i_28; r_4(D)->sig[i_30] = 0; i_32 = i_30 + 1; i_34 = i_32; r_4(D)->sig[i_34] = 0; i_36 = i_34 + 1; i_38 = i_36; r_4(D)->sig[i_38] = 0; i_40 = i_38 + 1; i_42 = i_40; r_4(D)->sig[i_42] = 0; i_44 = i_42 + 1; i_46 = i_44; r_4(D)->sig[i_46] = 0; i_48 = i_46 + 1; i_50 = i_48; r_4(D)->sig[i_50] = 0; i_52 = i_50 + 1; i_54 = i_52; r_4(D)->sig[i_54] = 0; i_56 = i_54 + 1; i_58 = i_56; r_4(D)->sig[i_58] = 0; i_60 = i_58 + 1; i_62 = i_60; r_4(D)->sig[i_62] = 0; i_64 = i_62 + 1; i_66 = i_64; r_4(D)->sig[i_66] = 0; i_68 = i_66 + 1; i_70 = i_68; r_4(D)->sig[i_70] = 0; i_72 = i_70 + 1; i_74 = i_72; r_4(D)->sig[i_74] = 0; i_76 = i_74 + 1; i_78 = i_76; r_4(D)->sig[i_78] = 0; [...] and so on. since it definitely writes more than 5 ints, I don't see how it should *not* overflow the array. -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=31058