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

            Bug ID: 84386
           Summary: Implicitly declared variables in BLOCK have scope of
                    including program unit
           Product: gcc
           Version: 8.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: fortran
          Assignee: unassigned at gcc dot gnu.org
          Reporter: kargl at gcc dot gnu.org
  Target Milestone: ---

See 

https://groups.google.com/forum/#!topic/comp.lang.fortran/62PqdmItLeI

for details of the problem.  The following code should execute
without hitting a 'STOP 1'.

program foo
   call block1
   print *
   call block2
end program foo
!
! For an implicitly declared variable (e.g., i and j here), the
! scope of the variable is from the inclusive scoping unit.  That
! is, 'j = 1' in block1 is implicitly declared to be in the 
! namespace of block1.  In addition, the implicitly declared 'i'
! in block bah is also in the namespace of block1. 
! 
subroutine block1
   j = 1
   bah: block
      i = 42
      j = 42
   end block bah
   if (i /= 42) stop 1  ! i should be 42
   if (j /= 42) stop 1
end subroutine block1
!
! In the following 'i' has an implicit declaration in the scope
! of block2.  The explicit declaration of 'i' in block bah means
! that this 'i' has the scope of bah.
!
subroutine block2
   i = 1
   j = 1
   bah: block
      integer i
      i = 42
      j = 42
      if (i /= 42) stop 1
      if (j /= 42) stop 1
   end block bah
   if (i /= 1) stop 1
   if (j /= 42) stop 1
end subroutine block2

Reply via email to