https://gcc.gnu.org/bugzilla/show_bug.cgi?id=96320

--- Comment #23 from Damian Rouson <damian at sourceryinstitute dot org> ---
A related issue arises if the procedure in question is a pure function as
demonstrated below.  The code compiles cleanly if either
1. The result-spec is absent and the procedure is renamed new_foo in both the
interface body and in the procedure definition, or
2. The interface body is repeated in the procedure definition instead the
"module procedure" syntax.

± cat pure-shape-mismatch.f90 
module foobar
  implicit none

  type foo
    integer bar
  end type

  interface
    pure module function create() result(new_foo)
      implicit none
      type(foo) new_foo
    end function
  end interface

contains
  module procedure create
    new_foo%bar = 1
  end procedure
end module 

± gfortran -c pure-shape-mismatch.f90 
pure-shape-mismatch.f90:17:4:

   17 |     new_foo%bar = 1
      |    1
Error: Variable ‘new_foo’ cannot appear in a variable definition context
(assignment) at (1) in PURE procedure

± gfortran --version
GNU Fortran (GCC) 11.0.0 20200804 (experimental)

Reply via email to