------- 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

Reply via email to