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

            Bug ID: 64555
           Summary: Fail to compile array pointer to derived-type
                    components
           Product: gcc
           Version: 4.9.2
            Status: UNCONFIRMED
          Severity: blocker
          Priority: P3
         Component: fortran
          Assignee: unassigned at gcc dot gnu.org
          Reporter: thfanning at gmail dot com

When assigning an array pointer to a scalar component of an array of a derived
type, compilation fails with undefined "span.n".

Given the following code, test.f90:

module mod_abc

  type a
    integer :: item
  end type

  type(a), pointer :: array(:)
  integer, pointer :: item(:) => NULL()

contains

  subroutine init(n)
    integer :: n
    allocate(array(n))
    item => array%item ! problem occurs here
  end subroutine

end module

program test
  use mod_abc
  integer, parameter :: n = 10
  integer :: i

  print *, "Hello, World!"
  call init(n)

  do i = 1,n
    array(i)%item = i
  enddo

  do i = 1,n
    print "(i6,': ',i6)", i, item(i)
  enddo

end program

On an Intel architecture...

gfortran -m32 test.f90:
/var/folders/l9/qcd__g594cv5qn_nc1nwyvvrd6xjn9/T//ccmNxERg.s:209:non-relocatable
subtraction expression, "_span.0" minus "L2$pb"
/var/folders/l9/qcd__g594cv5qn_nc1nwyvvrd6xjn9/T//ccmNxERg.s:209:symbol:
"_span.0" can't be undefined in a subtraction expression
/var/folders/l9/qcd__g594cv5qn_nc1nwyvvrd6xjn9/T//ccmNxERg.s:93:non-relocatable
subtraction expression, "_span.0" minus "L1$pb"
/var/folders/l9/qcd__g594cv5qn_nc1nwyvvrd6xjn9/T//ccmNxERg.s:93:symbol:
"_span.0" can't be undefined in a subtraction expression

gfortran -m64 test.f90:
Undefined symbols for architecture x86_64:
  "_span.0", referenced from:
      ___mod_abc_MOD_init in ccyXTbtG.o
      _MAIN__ in ccyXTbtG.o
ld: symbol(s) not found for architecture x86_64
collect2: error: ld returned 1 exit status

On an embedded ARM architecture:

gfortran test.f90:
/tmp/cccNTntp.o: In function `__mod_abc_MOD_init':
span.f90:(.text+0x1b4): undefined reference to `span.0'
/tmp/cccNTntp.o: In function `MAIN__':
span.f90:(.text+0x38c): undefined reference to `span.0'
collect2: ld returned 1 exit status

HOWEVER, if optimization is used on the ARM, then the code compiles correctly:

gfortran -O test.f90
./a.out
 Hello, World!
     1:      1
     2:      2
     3:      3
     4:      4
     5:      5
     6:      6
     7:      7
     8:      8
     9:      9
    10:     10

Reply via email to