[patch, fortran] PR93461 - Bogus "symbol is already defined" with long subroutine names in submodule

Tobias Burnus tobias@codesourcery.com
Tue Jan 28 08:21:00 GMT 2020


Hi Andrew,

On 1/27/20 9:57 PM, Andrew Benson wrote:
> The problem occurs because GFC_MAX_MANGLED_SYMBOL_LEN is set to
> GFC_MAX_SYMBOL_LEN*2+4, which is sufficient for a module name plus function name
> (plus the additional "_"'s that get prepended), but insufficient if a submodule
> name is included. The name then gets truncated and can lead to two different
> functions having the same (truncated) symbol name.
>
> The fix is to increase this length to GFC_MAX_SYMBOL_LEN*3+5 - which allows for
> the submodule name plus the "." added between module and submodule names.
>
> I've attached a patch for this which includes a new test case for this PR. The
> patch regression tests cleanly.
>
> OK to commit?

Can you also update the comment before the #define? It currently has:

  /* Mangled symbols take the form __module__name.  */
-#define GFC_MAX_MANGLED_SYMBOL_LEN  (GFC_MAX_SYMBOL_LEN*2+4)
+#define GFC_MAX_MANGLED_SYMBOL_LEN  (GFC_MAX_SYMBOL_LEN*3+5)

Otherweise, it LGTM.

Tobias

PS: I wonder whether there are relevant systems which will fail because they
do not handle that long symbol names...



More information about the Fortran mailing list