------- Additional Comments From rguenth at gcc dot gnu dot org 2005-02-10 13:18 ------- Actually, exchanging loc_test for
int loc_test(void) { const Loc<2> k(0, 1); return k[0].first(); } shows the same problem: <bb 0>: D.2541 = (struct Loc<1> *) &k.D.2190.D.2155.domain_m.buffer; # k_160 = V_MAY_DEF <k_150>; *&(&D.2541->D.2101)->D.2064.domain_m = 0; # k_63 = V_MAY_DEF <k_160>; *&(&(D.2541 + 4B)->D.2101)->D.2064.domain_m = 1; D.2628 = (struct Loc<1> *) &k.D.2190.D.2155.domain_m.buffer; return (&D.2628->D.2101)->D.2064.domain_m; One problem might be, that PRE does not recognize the redundant (struct Loc<1>D.1872 *) &kD.1965.D.2190.D.2155.domain_mD.2002.bufferD.2015 in <L0>:; currIndex_114 = 1; D.2554_122 = (struct Loc<1> *) &k.D.2190.D.2155.domain_m.buffer; n.6_123 = 0; D.2556_124 = 0; D.2557_125 = 0B; D.2548_126 = D.2554_122; this_130 = &D.2548_126->D.2101; dom_133 = &this_130->D.2064.domain_m; # k_160 = V_MAY_DEF <k_150>; *dom_133 = 0; D.2540_141 = 1; <L29>:; currIndex_79 = 2; n.6_88 = 1; D.2604_89 = 4; D.2605_90 = 4B; D.2596_91 = D.2554_122 + 4B; this_95 = &D.2596_91->D.2101; dom_98 = &this_95->D.2064.domain_m; # k_63 = V_MAY_DEF <k_160>; *dom_98 = 1; D.2588_106 = 1; D.2641_47 = (struct Loc<1> *) &k.D.2190.D.2155.domain_m.buffer; this_55 = &D.2641_47->D.2101; # VUSE <TMT.12_38>; # VUSE <k_63>; d_57 = this_55->D.2064.domain_m; return d_57; -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=19626