------- Comment #2 from sgk at troutmask dot apl dot washington dot edu
2007-07-31 18:40 -------
Subject: Re: Wrong code with with -fdefault-integer-8
On Tue, Jul 31, 2007 at 06:04:02PM -0000, kargl at gcc dot gnu dot org wrote:
>
> > I have reduced the failure for intrinsic_rrspacing.f90 to:
> >
> > integer i
> > real x
> > x = 3.0
> > print *, exponent (x)
> > i = exponent (x)
> > print *, i
> > end
> >
> > which gives with -fdefault-integer-8
> >
> > 8589934720
> > 2
>
> trans-types.c(gfc_get_int_type) is used to build the
> gfc_int4_type_node in trans-io.h. -fdefault-integer-8
> is probably causing gfc_int4_type_node to be set to 8
> instead of 4.
>
Ugh! It's worse than the above. In iresolve.c, we have
void
gfc_resolve_exponent (gfc_expr *f, gfc_expr *x)
{
f->ts.type = BT_INTEGER;
f->ts.kind = gfc_default_integer_kind;
f->value.function.name = gfc_get_string ("__exponent_%d", x->ts.kind);
}
If I change gfc_default_integer_kind to 4, gfortran produces the right
result. So, we need to review every unilateral use of gfc_default_integer_kind
in the frontend to determine if the promotion of 4 to 8 via -fdefault-integer-8
is correct.
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=32942