This is the mail archive of the gcc-bugs@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[Bug fortran/31144] New: Gfortran module names are not Standards compliant


Fortran Standards require that module symbol names are unique for a given
module and procedure name pair. Gfortran uses an underscore prefix to prevent
collisions with non-module procedures, but the double-underscore used to join
the module and procedure name in not sufficient to ensure a unique symbol name.
The following code snippet illustrates the problem:


module m1
contains
subroutine m2__m3()
end subroutine m2__m3
end module m1

module m1__m2
contains
subroutine m3()
end subroutine m3
end module m1__m2



Compiling this code under gfortran produces a duplicate symbol error in the
assembly code. The name pair should be joined with character(s) that cannot
occur as part of a normal fortran name, either by using upper case (i.e. G95's
_MP_) or some other character (I think one compiler uses a period).

To be fair, a conflict is unlikely, and Intel Fortran has an equally broken
system of module symbol names. But, the current Gfortran mechanism is clearly
wrong, and should be changed the next time a binary incompatibility occurs that
requires code to be recompiled anyhow.


-- 
           Summary: Gfortran module names are not Standards compliant
           Product: gcc
           Version: 4.1.1
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: fortran
        AssignedTo: unassigned at gcc dot gnu dot org
        ReportedBy: jkrahn at nc dot rr dot com


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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]