This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug tree-optimization/29516] gfortran miscompiled
- From: "rakdver at atrey dot karlin dot mff dot cuni dot cz" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: 9 Jan 2007 23:49:57 -0000
- Subject: [Bug tree-optimization/29516] gfortran miscompiled
- References: <bug-29516-10259@http.gcc.gnu.org/bugzilla/>
- Reply-to: gcc-bugzilla at gcc dot gnu dot org
------- 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