! Copyright 2008-2013 Free Software Foundation, Inc.
!
! This program is free software; you can redistribute it and/or modify
! it under the terms of the GNU General Public License as published by
! the Free Software Foundation; either version 3 of the License, or
! (at your option) any later version.
!
! This program is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY; without even the implied warranty of
! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
! GNU General Public License for more details.
!
! You should have received a copy of the GNU General Public License
! along with this program; if not, write to the Free Software
! Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
!
! Ihis file is the Fortran source file for dynamic.exp.
! Original file written by Jakub Jelinek <jakub@redhat.com>.
! Modified for the GDB testcase by Jan Kratochvil <jan.kratochvil@redhat.com>.

subroutine in

   INTEGER*4            ix
   REAL*4               iy2
   REAL*8               iz

   INTEGER*4            ix_x
   REAL*4               iy_y
   REAL*8               iz_z2

   common /fo_o/ix,iy2,iz
   common /foo/ix_x,iy_y,iz_z2

   iy = 5
   iz_z = 55

   if (ix .ne. 11 .or. iy2 .ne. 22.0 .or. iz .ne. 33.0) call abort
   if (ix_x .ne. 1 .or. iy_y .ne. 2.0 .or. iz_z2 .ne. 3.0) call abort

   ix = 0					! stop-here-in

end subroutine in

program common_test

   INTEGER*4            ix
   REAL*4               iy
   REAL*8               iz

   INTEGER*4            ix_x
   REAL*4               iy_y
   REAL*8               iz_z

   common /foo/ix,iy,iz
   common /fo_o/ix_x,iy_y,iz_z

   ix = 1
   iy = 2.0
   iz = 3.0

   ix_x = 11
   iy_y = 22.0
   iz_z = 33.0

   call in					! stop-here-out

end program common_test
