re PR fortran/31144 (gfortran module symbol names are not standard compliant)
authorTobias Schlüter <tobi@gcc.gnu.org>
Tue, 17 Apr 2007 00:09:34 +0000 (02:09 +0200)
committerTobias Schlüter <tobi@gcc.gnu.org>
Tue, 17 Apr 2007 00:09:34 +0000 (02:09 +0200)
PR fortran/31144
fortran/
* decl.c (gfc_sym_mangled_identifier): Use capital letters in name
mangling.
(gfc_sym_mangled_function_id): Likewise.
testsuite/
* gfortran.dg/module_naming_1.f90: New.

From-SVN: r123904

gcc/fortran/ChangeLog
gcc/fortran/trans-decl.c
gcc/testsuite/ChangeLog
gcc/testsuite/gfortran.dg/module_naming_1.f90 [new file with mode: 0644]

index cb5666b8c5d95212410f1d246e27ceb0c5a47704..d9cfc3f70a1f0b684b4e8b0d1fc62d4673b7e25a 100644 (file)
@@ -1,3 +1,10 @@
+2007-04-17  Tobias Schlüter  <tobi@gcc.gnu.org>
+
+       PR fortran/31144
+       * decl.c (gfc_sym_mangled_identifier): Use capital letters in name
+       mangling.
+       (gfc_sym_mangled_function_id): Likewise.
+
 2007-04-15  Paul Thomas  <pault@gcc.gnu.org>
 
        PR fortran/31204
index fa75260d00b8e867d00a3e8921c0f39d68b65581..15cf6aa313fa9098dfe435ec6174a027852153db 100644 (file)
@@ -299,7 +299,7 @@ gfc_sym_mangled_identifier (gfc_symbol * sym)
     return gfc_sym_identifier (sym);
   else
     {
-      snprintf (name, sizeof name, "__%s__%s", sym->module, sym->name);
+      snprintf (name, sizeof name, "__%s_MOD_%s", sym->module, sym->name);
       return get_identifier (name);
     }
 }
@@ -335,7 +335,7 @@ gfc_sym_mangled_function_id (gfc_symbol * sym)
     }
   else
     {
-      snprintf (name, sizeof name, "__%s__%s", sym->module, sym->name);
+      snprintf (name, sizeof name, "__%s_MOD_%s", sym->module, sym->name);
       return get_identifier (name);
     }
 }
index be2334ab4080642b48c90b4243bde271031ea974..8b844f7948f6ae77f4c096488bb5c4da5eab95b1 100644 (file)
@@ -1,3 +1,8 @@
+2007-04-17  Tobias Schlüter  <tobi@gcc.gnu.org>
+
+       PR fortran/31144
+       * gfortran.dg/module_naming_1.f90: New.
+
 2007-04-16  Richard Sandiford  <richard@codesourcery.com>
 
        * lib/target-supports.exp (check_profiling_available): Return
diff --git a/gcc/testsuite/gfortran.dg/module_naming_1.f90 b/gcc/testsuite/gfortran.dg/module_naming_1.f90
new file mode 100644 (file)
index 0000000..2a2d00b
--- /dev/null
@@ -0,0 +1,31 @@
+! { dg-do assemble }
+! PR 31144
+! Makes sure that our name mangling scheme can't be outwitted
+
+! old scheme
+module m1
+contains
+  subroutine m2__m3()
+  end subroutine m2__m3
+end module m1
+
+module m1__m2
+contains
+  subroutine m3()
+  end subroutine m3
+end module m1__m2
+
+! New scheme, relies on capitalization
+module m2
+contains
+  subroutine m2_MOD_m3()
+    ! mangled to __m2_MOD_m2_mod_m3
+  end subroutine m2_MOD_m3
+end module m2
+
+module m2_MOD_m2
+contains
+  subroutine m3()
+    ! mangled to __m2_mod_m2_MOD_m3
+  end subroutine m3
+end module m2_MOD_m2