This is the mail archive of the gcc-patches@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]

Re: [Patch, fortran] PR30410 - Host association bug w/EXTERNAL


I know that it's a bit soon but I have some time tomorrow morning for gfortran - say I give it Ping**0.5?

Paul
:ADDPATCH fortran:

Yes, I know, I know... but I could not resist this one-liner. It is
entirely self-explanatory - the testcase is the reporter's.

The strange thing is that nobody can have tried referencing a
use-associated, external procedure before.  As far as I know, this
patch of code has not been touched for ~1 year.

Regtests on IA64/FC5 - OK for trunk and, after a week, for 4.1?

Paul

2007-01-09 Paul Thomas <pault@gcc.gnu.org>

    PR fortran/30410
    * trans-decl.c (gfc_sym_mangled_function_id): Module, external
    symbols must not have the module name prepended.

2007-01-09 Paul Thomas <pault@gcc.gnu.org>

    PR fortran/30410
    * gfortran.dg/external_procedures_2.f90: New test.
------------------------------------------------------------------------

Index: gcc/fortran/trans-decl.c
===================================================================
*** gcc/fortran/trans-decl.c (revision 120396)
--- gcc/fortran/trans-decl.c (working copy)
*************** gfc_sym_mangled_function_id (gfc_symbol *** 315,321 ****
char name[GFC_MAX_MANGLED_SYMBOL_LEN + 1];
if (sym->module == NULL || sym->attr.proc == PROC_EXTERNAL
! || (sym->module != NULL && sym->attr.if_source == IFSRC_IFBODY))
{
if (strcmp (sym->name, "MAIN__") == 0
|| sym->attr.proc == PROC_INTRINSIC)
--- 315,322 ----
char name[GFC_MAX_MANGLED_SYMBOL_LEN + 1];
if (sym->module == NULL || sym->attr.proc == PROC_EXTERNAL
! || (sym->module != NULL && (sym->attr.external
! || sym->attr.if_source == IFSRC_IFBODY)))
{
if (strcmp (sym->name, "MAIN__") == 0
|| sym->attr.proc == PROC_INTRINSIC)
Index: gcc/testsuite/gfortran.dg/external_procedures_2.f90
===================================================================
*** gcc/testsuite/gfortran.dg/external_procedures_2.f90 (revision 0)
--- gcc/testsuite/gfortran.dg/external_procedures_2.f90 (revision 0)
***************
*** 0 ****
--- 1,41 ----
+ ! { dg-do compile }
+ ! Tests the for PR30410, in which the reference to extfunc would
+ ! be incorrectly made to the module namespace.
+ !
+ ! Contributed by Harald Anlauf <anlauf@gmx.de>
+ !
+ module mod1
+ contains
+ function eval (func, x1)
+ real :: eval, func, x1
+ external :: func
+ eval = func (x1)
+ end function eval
+ end module mod1
+ !-------------------------------
+ module mod2
+ use mod1, only : eval
+ real, external :: extfunc ! This was referenced as __mod2__extfunc__
+ contains
+ + subroutine foo (x0)
+ real :: x0, x1
+ x1 = 42
+ x0 = eval (extfunc, x1)
+ end subroutine foo
+ + end module mod2
+ !-------------------------------
+ function extfunc (x)
+ real, intent(in) :: x
+ real :: extfunc
+ extfunc = x
+ end function extfunc
+ !-------------------------------
+ program gfcbug53
+ use mod2, only : foo
+ real :: x0 = 0
+ call foo (x0)
+ print *, x0
+ end program gfcbug53
+ ! { dg-final { cleanup-modules "mod1 mod2" } }



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