On Tue, Dec 11, 2012 at 02:29:18PM +0100, Janus Weil wrote:
> 2012/12/11 Jakub Jelinek <ja...@redhat.com>:
> > On Tue, Dec 11, 2012 at 12:16:33PM +0100, Janus Weil wrote:
> >> Ok, so here is a new patch, updated according to the suggestions of
> >> David and Jakub. This now only touches the dotted variables, which are
> >> responsible for the AIX trouble. Whether the same prefixing should
> >> also be applied in other cases, we can still decide later.
> >
> > Why are you changing anything in create_function_arglist (PARM_DECLs
> > can't ever be TREE_STATIC, and it is compiler internal (plus debug info)
> > thing how they are named, no need for any kind of mangling) or
> > saved_dovar (again, doesn't seem to be TREE_STATIC)?
> >
> > Even in gfc_create_string_length you don't need to increase the length
> > of the names and obfuscate them if it isn't going to be TREE_STATIC.
> 
> Yes, you're probably right.
> 
> Anyway, I'm out. I don't have the capacities to deal with this right
> now (and, frankly, it's not my duty anyway) ...

So, what about this version instead?

Bootstrapped/regtested on x86_64-linux and i686-linux, ok for trunk?

2012-12-11  Jakub Jelinek  <ja...@redhat.com>
            Janus Weil  <ja...@gcc.gnu.org>

        PR fortran/55636
        * gfortran.h (GFC_PREFIX): Define.
        * trans-decl.c (gfc_create_string_length): For VAR_DECLs that
        will be TREE_STATIC, use GFC_PREFIX to mangle the names.

--- gcc/fortran/gfortran.h.jj   2012-12-04 14:17:30.574177056 +0100
+++ gcc/fortran/gfortran.h      2012-12-11 15:48:37.967422227 +0100
@@ -63,6 +63,15 @@ along with GCC; see the file COPYING3.
 #define PREFIX(x) "_gfortran_" x
 #define PREFIX_LEN 10
 
+/* A prefix for internal variables, which are not user-visible.  */
+#if !defined (NO_DOT_IN_LABEL)
+# define GFC_PREFIX(x) "_F." x
+#elif !defined (NO_DOLLAR_IN_LABEL)
+# define GFC_PREFIX(x) "_F$" x
+#else
+# define GFC_PREFIX(x) "_F_" x
+#endif
+
 #define BLANK_COMMON_NAME "__BLNK__"
 
 /* Macro to initialize an mstring structure.  */
--- gcc/fortran/trans-decl.c.jj 2012-12-11 09:25:18.757189184 +0100
+++ gcc/fortran/trans-decl.c    2012-12-11 15:50:13.487857146 +0100
@@ -1090,7 +1090,15 @@ gfc_create_string_length (gfc_symbol * s
       const char *name;
 
       /* Also prefix the mangled name.  */
-      if (sym->module)
+      if (sym->attr.save || sym->ns->proc_name->attr.flavor == FL_MODULE)
+       {
+         if (sym->module)
+           name = gfc_get_string (GFC_PREFIX ("%s_MOD_%s"), sym->module,
+                                  sym->name);
+         else
+           name = gfc_get_string (GFC_PREFIX ("%s"), sym->name);
+       }
+      else if (sym->module)
        name = gfc_get_string (".__%s_MOD_%s", sym->module, sym->name);
       else
        name = gfc_get_string (".%s", sym->name);

        Jakub

Reply via email to