Amir
Amir

Reputation: 345

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?

Upvotes: 1

Views: 97

Answers (1)

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)

Upvotes: 1

Related Questions