Jakub Jelinek wrote:
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.
        /* 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);

Looks mostly okay, however, I fear that for

subroutine foo()
character(len=:), allocatable :: str
allocate(str, stat=istat)
end subroutine foo

compiled with "-fno-automatic", gfortran will still generate the non-GFC_PREFIX-mangled string.

"-fno-automatic" implies SAVE / static memory and is required by some old code. Hence, it is unlikely to be used with new code; still, gfortran should get this right. (Actually, as PR55733 shows, there are issues beyond the mangling with -fno-automatic for deferred-length strings/scalar allocatables).

Thus, I wonder whether one should always use GFC_PREFIX. On the other hand, for scan-tree-dump, it is nice to have a single mangling instead of 3 different ones. (Though, currently, no scan-tree-dump seems to be used in this case.)

Hence:

OK with either always using GFC_PREFIX – or with an additional "&& gfc_option.flag_max_stack_var_size == 0" check and a comment why the mangling is done.

Tobias

Reply via email to