The following reduced program causes a segmentation fault at runtime. It runs correctly if the *x on line 11 is removed. From this, I would surmise that something is not right with the allocation of space for the temporary. Further simplification of the structure of the program eliminates the fault; eg. making the function public and moving the expression from the subroutine to the main program works correctly.
A quick look with -fdump-tree-original indicates that, in the faulty case, no memory is allocated to the function output and its pointer remains NULL. I have tried putting an explicit interface for generalized_hookes_law in the subroutine perdida but this has no effect. $ cat test_intr.f90 ! ! Copyright (C) 1997 by Quetzal Computational Associates, Inc. ! module perdida_m private :: generalized_hookes_law public :: perdida integer, parameter, private :: LONGreal = selected_real_kind (15, 90) contains subroutine perdida (z, x) real (kind = LONGreal), dimension (:,:), intent (inOUT) :: z real (kind = LONGreal), dimension (:,:), intent (inOUT) :: x z = generalized_hookes_law (x) * x end subroutine perdida function generalized_hookes_law (x) result (z) real (kind = LONGreal), dimension (3,3) :: z real (kind = LONGreal), dimension (:,:), intent (in) :: x z = x end function generalized_hookes_law end module perdida_m program iztaccihuatl use perdida_m integer, parameter :: LONGreal = selected_real_kind (15, 90) real (kind = LONGreal) :: x(3,3) = 42.0_LONGreal real (kind = LONGreal) :: y(3,3) call perdida (y, x) end program iztaccihuatl [EMAIL PROTECTED] /cygdrive/d/gfortran $ d:/check/bin/gfortran -std=f95 test_intr.f90 [EMAIL PROTECTED] /cygdrive/d/gfortran $ ./a Segmentation fault (core dumped) -- Summary: Segmentation fault on correct code Product: gcc Version: 4.1.0 Status: UNCONFIRMED Severity: normal Priority: P2 Component: fortran AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: paulthomas2 at wanadoo dot fr CC: Thomas dot Koenig at online dot de,gcc-bugs at gcc dot gnu dot org http://gcc.gnu.org/bugzilla/show_bug.cgi?id=21104