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

             Bug #: 55444
           Summary: Rejects valid code with USE ISO_C_BINDING in BLOCK
                    DATA
    Classification: Unclassified
           Product: gcc
           Version: 4.8.0
            Status: UNCONFIRMED
          Keywords: rejects-valid
          Severity: normal
          Priority: P3
         Component: fortran
        AssignedTo: unassig...@gcc.gnu.org
        ReportedBy: bur...@gcc.gnu.org


Reported by at Henrik Holst
athttps://groups.google.com/forum/?fromgroups=#!topic/comp.lang.fortran/aOMi2iZ-2c8


The following program prints bogus errors of the form:

        USE ISO_C_BINDING  ! FAILS
            1
Error: INTENT attribute not allowed in BLOCK DATA program unit at (1)
Error: EXTERNAL attribute not allowed in BLOCK DATA program unit at (1)


      BLOCKDATA
!       USE ISO_C_BINDING, ONLY: C_INT, C_FLOAT ! WORKS
        USE :: ISO_C_BINDING  ! FAILS
        INTEGER(C_INT) X
        REAL(C_FLOAT) Y
        COMMON /FOO/ X,Y
        BIND(C,NAME='fortranStuff') /FOO/
        DATA X /1/
        DATA Y /2.0/
      END BLOCKDATA


 * * *

The message is printed in check_conflict where the following is true:

  if (gfc_current_state () == COMP_BLOCK_DATA)

The caller is resolve_contained_functions – the question is why the symbols end
up there (seemingly also "functions" like "c_backspace" of flavour parameter)?

The message is printed for the SHAPE= argument of c_f_pointer.

Reply via email to