[Bug fortran/33152] Initialization/declaration problems in block data

kargl at gcc dot gnu dot org gcc-bugzilla@gcc.gnu.org
Thu Aug 23 00:09:00 GMT 2007

------- Comment #1 from kargl at gcc dot gnu dot org  2007-08-23 00:09 -------
It's much worse than you've indicated. :(

gfortran compiles 

  subroutine y
  data emname/'bar'/
  character(len=3) :: emname
  end subroutine y

which violates "A variable that appears in a DATA statement and has not
been typed previously may appear in a subsequent type declaration only if
that declaration confirms the implicit typing."  See 5.2.10.

The ICE in your Var. 3 occurs in this simplified code

  subroutine z
  integer, parameter :: nmin=2
  data emname/'bar','baz'/
  character(len=3) :: emname(nmin)
  end subroutine z

so the fact that we've changed to an array of strings isn't
handled correctly.  I think an error should occur here because
"An array name, array section, or array element that appears in a
DATA statement shall have had its array properties established by
a previous specification statement." See 5.2.10. That is, the order
of the statements is wrong.

Your variations 1 and 2 should be legal via "A data object
in a named common block may be initially defined by means of a DATA
statement or type declaration statement in a block data program unit 
(11.4), but objects in blank common shall not be initially defined."

It seems gfortran is ignoring the "block data program unit" part of
the above.


kargl at gcc dot gnu dot org changed:

           What    |Removed                     |Added
                 CC|                            |kargl at gcc dot gnu dot org


More information about the Gcc-bugs mailing list