http://gcc.gnu.org/bugzilla/show_bug.cgi?id=52469
Tobias Burnus <burnus at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Keywords| |rejects-valid, wrong-code Target Milestone|--- |4.8.0 Summary|[4.6/4.7/4.8 Regression] |[4.6/4.7/4.8 Regression] |Defining function pointer |-fwhole-file bug: Wrong |interface |backend_decl for result of | |PPC function --- Comment #3 from Tobias Burnus <burnus at gcc dot gnu.org> 2012-03-05 08:19:15 UTC --- The following is mishandled: write (6, *) NewType(2) % my_f_ptr (3.0) That generates the following code (dump of the internal format: -fdump-tree-original): real(kind=4) <T4aa> (real(kind=4) & restrict) D.1870; static real(kind=4) C.1869 = 3.0e+0; D.1870 = newtype[1].my_f_ptr (&C.1869); _gfortran_transfer_real_write (&dt_parm.0, &D.1870, 4); The problem is that the temporary variable "D.1870" is a function pointer instead of a "real(kind=4)". That seems to be one bug in the -fwhole-file handling. Seemingly, for the result the backend_decl of the symbol and not its result value is pulled in.