The following program fails to recognize that the equivalence between qla1 and
qla2 causes a dependency in the assignment.  Using qla1 on the right (ie
resolving the dependency by hand) makes the problem go away.  It occurs for
both explicit constant subscripts and variable subscripts.

Dick Hendrickson


! fails on Windows XP
! gcc version 4.4.0 20080603 (experimental) [trunk revision136333] (GCC)
!apparently, the EQUIVALENCE between QLA1 and QLA2 isn't recognized
!and the left-right overlap isn't recognized
      module stuff
      integer nf1, nf2
      integer, parameter :: r4_kv = 4
      contains

      SUBROUTINE CF0004
!  COPYRIGHT 1999   SPACKMAN & HENDRICKSON, INC.
!     CALL CF0004
      REAL(R4_KV) QLA1(100)
      REAL(R4_KV) QLA2(100)
      REAL(R4_KV) QLA3(100)
      REAL(R4_KV) QCA(100)
      EQUIVALENCE (QLA1, QLA2)

      do I = 1,100
      qca(i) = i
      enddo

      QLA1 = QCA
      QLA3 = QCA

      QLA3(  2:100:3) = QCA (  1:65:2) + 1
      QLA1(  2:100:3) = QLA2(  1:65:2) + 1            !fails
!      QLA1(NF2:100:3) = QLA2(NF1:65:2) + 1            !fails
!      QLA1(NF2:100:3) = QLA1(NF1:65:2) + 1            !works
!      QLA1(  2:100:3) = QLA1(  1:65:2) + 1            !works

      DO J1 = 1,100
      if (qla1(j1) .ne. qla3(j1)) print *, j1, qla1(j1), qla3(j1)
  100 ENDDO;

      END SUBROUTINE
      end module
      program try_cf004
      use stuff
      nf1 = 1
      nf2 = 2
      call cf0004
      end

C:\g_experiments\gfortran>gfortran cf0004_2.f

C:\g_experiments\gfortran>a
           8   5.0000000       6.0000000
          17   9.0000000       12.000000
          26  10.0000000       18.000000
          35   17.000000       24.000000
          44   21.000000       30.000000
          53   18.000000       36.000000
          62   29.000000       42.000000
          71   33.000000       48.000000
          80   19.000000       54.000000
          89   41.000000       60.000000
          98   45.000000       66.000000


-- 
           Summary: right-left hand side overlap not recognized with
                    EQUIVALENCEd array assignment
           Product: gcc
           Version: 4.4.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: fortran
        AssignedTo: unassigned at gcc dot gnu dot org
        ReportedBy: dick dot hendrickson at gmail dot com


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=37787

Reply via email to