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