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

            Bug ID: 71565
           Summary: INTENT(IN) polymorphic argument with pointer
                    components - reject valid code
           Product: gcc
           Version: 7.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: fortran
          Assignee: unassigned at gcc dot gnu.org
          Reporter: mrestelli at gmail dot com
  Target Milestone: ---

(This was also discussed on comp.lang.fortran:
https://groups.google.com/forum/#!topic/comp.lang.fortran/dPaOv53SGeA )

gfortran refuses to compile s1 in the attached code (while accepting
s2 and s3 which do essentially the same thing):


$ gfortran -c test.f90 -o test.o
test.f90:17:3:

    select type(var); class is(t_b)
               2
    var%i = 3
   1
Error: Associate-name »var« can not appear in a variable definition context at
(1) because its target at (2) can not, either

$ gfortran --version
GNU Fortran (GCC) 7.0.0 20160615 (experimental)


This seems a bug in gfortran, since the assignment defines the target
of the pointer, not the pointer itself.

Here is the code


module m

 implicit none

 type, abstract :: t_a
 end type t_a

 type, extends(t_a), abstract :: t_b
  integer, pointer :: i => null()
 end type t_b

contains

 subroutine s1(var)
  class(t_a), intent(in) :: var
   select type(var); class is(t_b)
   var%i = 3
   end select
 end subroutine s1

 subroutine s2(var)
  class(t_b), intent(in) :: var
   var%i = 3
 end subroutine s2

 subroutine s3(var)
  class(t_a), intent(in) :: var
  integer, pointer :: tmp
   select type(var); class is(t_b)
   tmp => var%i
   tmp = 3
   end select
 end subroutine s3

end module m

Reply via email to