Search code examples
modulefortrancontainssubroutine

Is "intent" guaranteed for contained subroutines inside a module contained subroutine?


I am wondering if the following code is legal:

module my_mod

contains

  subroutine my_outer_sub(a)
    integer, intent(in) :: a
    call my_inner_sub()
  contains

    subroutine my_inner_sub()
      a=3 ! this compiles and runs!
    end subroutine my_inner_sub

  end subroutine my_outer_sub

end module my_mod

I compiled the code with PGI 17.4. I have been using contained subroutines inside module subroutines and now I wonder if this scheme is a suitable one?


Solution

  • No, the code is illegal. You cannot modify an intent(in) argument. This is an error in the compiler and should be reported to your vendor.

    Gfortran identifies it correctly

    Error: Dummy argument 'a' with INTENT(IN) in variable definition context (assignment) at (1)
    

    and so does Intel Fortran

    intent3.f90(11): error #6780: A dummy argument with the INTENT(IN) attribute shall not be defined nor become undefined.   [A]
          a=3 ! this compiles and runs!
    ------^
    compilation aborted for intent3.f90 (code 1)