[Bug fortran/37829] ICE in resolve_symbol

mikael at gcc dot gnu dot org gcc-bugzilla@gcc.gnu.org
Sat Oct 24 22:42:00 GMT 2009



------- Comment #8 from mikael at gcc dot gnu dot org  2009-10-24 22:42 -------
(In reply to comment #7)
> It seems that the patch in comment #2 has been silently applied 
Not exactly silently. It was pr38672

> Apparently the failure of the test in comment #4 is due to the fact that
> c_funptr is not mangled the way it is defined (through different modules and an
> only clause). If I remove module 'a' and the comment in module 'b', the code
> compiles.
The whole iso_c_binding is messy because it doesn't look like normal modules.
It hijacks functions everywhere to take care of iso_c_binding cases and doesn't
benefit from the general code. Here, the derived type of the function c_funloc
is given a mangled name because it is not wanted by the user.
This seems to fix it :

Index: symbol.c
===================================================================
--- symbol.c    (revision 153473)
+++ symbol.c    (working copy)
@@ -4397,8 +4397,8 @@
                      (mod_name, s == ISOCBINDING_FUNLOC
                                 ? ISOCBINDING_FUNPTR : ISOCBINDING_PTR,
                       (const char *)(s == ISOCBINDING_FUNLOC
-                                ? "_gfortran_iso_c_binding_c_funptr"
-                               : "_gfortran_iso_c_binding_c_ptr"));
+                                ? "c_funptr"
+                               : "c_ptr"));
                     tmp_sym->ts.u.derived =
                       get_iso_c_binding_dt (s == ISOCBINDING_FUNLOC
                                             ? ISOCBINDING_FUNPTR


-- 


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



More information about the Gcc-bugs mailing list