------- Comment #23 from rakdver at atrey dot karlin dot mff dot cuni dot cz 2007-01-09 23:49 ------- Subject: Re: gfortran miscompiled
> So I'm wondering, does: > > Doing diffs in .: > --- ./tree-ssa-address.c.~1~ 2006-12-22 21:07:11.000000000 -0800 > +++ ./tree-ssa-address.c 2007-01-09 15:30:42.000000000 -0800 > @@ -483,7 +483,7 @@ addr_to_parts (aff_tree *addr, tree type > { > part = fold_convert (type, addr->elts[i].val); > if (!double_int_one_p (addr->elts[i].coef)) > - part = fold_build2 (MULT_EXPR, type, part, > + part = fold_build2 (MULT_EXPR, type, convert (sizetype, part), > double_int_to_tree (type, addr->elts[i].coef)); > add_to_parts (parts, type, part); > } > -------------- > > fix this bug? If so, why is that not the right patch? With it, I get: no, it does not, you still have > D.1696_2 = (long unsigned int) n_28; > D.1697_3 = D.1696_2 * 4294967292B; this multiplication by a pointer constant. There are several more places where such a MULT_EXPR's can be created. -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=29516