gfortran 12, 13, 14, and 15 all reject the source allocation of a pure
function result object's allocatable component with the message "Bad
allocate-object at (1) for a PURE procedure".  Removing "pure"
eliminates the error.  Alternatively, removing the separate procedure
interface also eliminates the error.  Eliminating the explicit
"result" clause generates a different error shown below.

% cat source-allocate-pure-function-result-component.f90
module test_m
  implicit none

  type test_t
    integer, allocatable :: i
  end type

  interface
    pure module function construct_test() result(test)
      implicit none
      type(test_t) test
    end function
  end interface

contains
  module procedure construct_test
    allocate(test%i, source = 0)
  end procedure
end module

% gfortran -c source-allocate-pure-function-result-component.f90
source-allocate-pure-function-result.f90:17:20:

   17 |     allocate(test%i, source = 0)
      |                    1
Error: Bad allocate-object at (1) for a PURE procedure


% gfortran --version
GNU Fortran (GCC) 15.0.1 20250412 (experimental)

If the separate "result" clause is eliminated and the procedure name
is therefore the result name ("test"), then the error message changes
to

   17 |     allocate(test%i, source = 0)
      |                  1
Error: ‘test’ at (1) is not a variable

Reply via email to