Pass by reference

This question sort of came up recently in something I’m working on, but the gist of it is (and I’m about to go read the standard very carefully to confirm), copy-in/copy-out would be a perfectly standards conforming approach. There is nothing standards conforming that can be done to observe any difference between pass-by-reference and copy-in/copy-out. I.e. aliasing of arguments is not standards conforming, so any reference to the actual argument not made through the dummy argument would not be valid until the completion of execution of the procedure. For example

program demonstrate
  integer :: x

  x = 42
  print *, "x is: ", x
  call try_it(x)
  print *, "x is: ", x
contains
  subroutine try_it(y)
    integer :: y

    print *, "y is: ", y
    ! this is not allowed when y is associated with x
    ! print *, "x is: ", x
    y = 24
    print *, "y is: ", y
    ! this is not allowed when y is associated with x
    ! print *, "x is: ", x
  end subroutine
end program