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

--- Comment #3 from Paul Thomas <pault at gcc dot gnu.org> ---
Hi Neil,

Thanks for posting this bug report.

>   !x%var_ptr() = 2.0 ! THIS IS NOT REJECTED AS EXPECTED

Why do you think that this should be rejected? As I understood it, this was
permitted by the definition of 'variable' in F2008:6.2 and in F2018:9.2 C902
and the definition of assignment in 10.2.1.1.

ifort accepts it and does the same with it as gfortran. nagfor throws up a
syntax error for which I am going to file a bug report unless you come up with
a contrary interpretation.

I am just going to post a fix for this PR with the testcase:

! { dg-do compile }
!
! Contributed by Neil Carlson  <neil.n.carl...@gmail.com>
!
module mod
  type :: foo
    real, pointer :: var
  contains
    procedure :: var_ptr
  end type
contains
  function var_ptr(this) result(ref)
    class(foo) :: this
    real, pointer :: ref
    ref => this%var
  end function
end module
program main
  use mod
  type(foo) :: x
  allocate (x%var, source = 2.0)
  associate (var => x%var_ptr())
    var = 1.0
  end associate
  if (x%var .ne. 1.0) stop 1
  x%var_ptr() = 2.0
  if (x%var .ne. 2.0) stop 2
  deallocate (x%var)
end program

Regards

Paul

Reply via email to