view gcc/testsuite/gfortran.dg/dec_union_6.f90 @ 158:494b0b89df80 default tip

...
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Mon, 25 May 2020 18:13:55 +0900
parents 04ced10e8804
children
line wrap: on
line source

! { dg-do run }
! { dg-options "-fdec-structure" }
!
! sub0 and sub1 test a regression where calling gfc_use_derived from
! gfc_find_component on the structure type symbol being parsed caused the
! symbol to be freed and swapped for the previously seen type symbol, leaving
! dangling pointers and causing all sorts of mayhem.
!

subroutine sub0 (u)
  structure /s/
    union ! U0
      map ! M0
        integer i
      end map
    end union
  end structure
  record /s/ u
  u.i = 0
end subroutine sub0

subroutine sub1 ()
  structure /s/
    union ! U1
      map ! M1
        integer i
      end map
    end union
  end structure
  record /s/ u
  interface ! matches the declaration of sub0 above
    subroutine sub0 (u)
      structure /s/
        union ! U2
          map ! M2
            integer i ! gfc_find_component should not call gfc_use_derived
          end map     ! here, otherwise this structure's type symbol is freed
        end union     ! out from under it
      end structure
      record /s/ u
    end subroutine sub0
  end interface
  call sub0(u)
end subroutine

! If sub0 and sub1 aren't used they may be omitted
structure /s/
  union ! U1
    map ! M3
      integer i
    end map
  end union
end structure
record /s/ u

call sub0(u)
call sub1()

end