------- Comment #1 from pault at gcc dot gnu dot org 2007-01-12 20:59 -------
Steve,
I am a bit surprised by what you say:
On an ia64/FC5, the pair of programs work fine. The code around the call to
f_to_f is:
.....
real4 a;
.....
a = 4.2e+1;
b = 0.0;
c = a;
c.1 = &c;
f_to_f (&b, a, &c, &c.1);
D.1355 = a * 2.0e+0;
b.2 = b;
if (D.1355 != b.2)
{
_gfortran_abort ();
}
so that a appears to be passed as a float, aka real4
and for the function itself:
f_to_f__ (retval, a1, a2, a3)
{
float D.1993;
float * D.1994;
float D.1995;
float D.1996;
float D.1997;
D.1993 = *a2;
if (D.1993 != a1)
{
abort ();
}
else
{
}
D.1994 = *a3;
D.1995 = *D.1994;
if (D.1995 != a1)
{
abort ();
}
else
{
}
a1 = 0.0;
D.1996 = *a2;
D.1997 = D.1996 * 2.0e+0;
*retval = D.1997;
return;
}
and, similarly, f_to_f treats it as a float.
Unflummox me!
Paul
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=30432