re PR fortran/52909 ([F03] Procedure pointers not private to modules)
authorJanus Weil <janus@gcc.gnu.org>
Mon, 10 Dec 2012 23:17:43 +0000 (00:17 +0100)
committerJanus Weil <janus@gcc.gnu.org>
Mon, 10 Dec 2012 23:17:43 +0000 (00:17 +0100)
2012-12-10  Janus Weil  <janus@gcc.gnu.org>

PR fortran/52909
* trans-decl.c (get_proc_pointer_decl): Apply name mangling.

2012-12-10  Janus Weil  <janus@gcc.gnu.org>

PR fortran/52909
* gfortran.dg/proc_ptr_39.f90: New test case.

From-SVN: r194375

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

index aa9eb9f6de78a97a37945e48837032f546ae095c..a0677870baaa85b62d6636ba38f820025a04967d 100644 (file)
@@ -1,3 +1,8 @@
+2012-12-10  Janus Weil  <janus@gcc.gnu.org>
+
+       PR fortran/52909
+       * trans-decl.c (get_proc_pointer_decl): Apply name mangling.
+
 2012-12-09  Tobias Burnus  <burnus@net-b.de>
 
        * trans-array.c (gfc_deallocate_scalar_with_status): Use
index b23605058d0f5fb5a9966007bc93b75c46c66a64..dbc5a10ea25b8da268718dc2667ce36e56e531eb 100644 (file)
@@ -1531,6 +1531,14 @@ get_proc_pointer_decl (gfc_symbol *sym)
                     VAR_DECL, get_identifier (sym->name),
                     build_pointer_type (gfc_get_function_type (sym)));
 
+  if (sym->module)
+    {
+      /* Apply name mangling.  */
+      gfc_set_decl_assembler_name (decl, gfc_sym_mangled_identifier (sym));
+      if (sym->attr.use_assoc)
+       DECL_IGNORED_P (decl) = 1;
+    }
+  
   if ((sym->ns->proc_name
       && sym->ns->proc_name->backend_decl == current_function_decl)
       || sym->attr.contained)
index ab9459980a82f974fe306bd154fe748b37047c4a..481bbaa7083886b7a38a5a243978fa11bf7adb7c 100644 (file)
@@ -1,3 +1,8 @@
+2012-12-10  Janus Weil  <janus@gcc.gnu.org>
+
+       PR fortran/52909
+       * gfortran.dg/proc_ptr_39.f90: New test case.
+
 2012-12-10  Richard Sandiford  <rdsandiford@googlemail.com>
 
        * gcc.target/mips/octeon-bbit-2.c: Restructure loops so that no
diff --git a/gcc/testsuite/gfortran.dg/proc_ptr_39.f90 b/gcc/testsuite/gfortran.dg/proc_ptr_39.f90
new file mode 100644 (file)
index 0000000..6eb0f15
--- /dev/null
@@ -0,0 +1,20 @@
+! { dg-do compile }
+!
+! PR 52909: [F03] Procedure pointers not private to modules
+!
+! Contributed by Andrew Benson <abenson@caltech.edu>
+
+module Module1
+  procedure(), pointer, private :: procPtr => null()
+end module
+
+module Module2
+  procedure(), pointer, private :: procPtr => null()
+end module
+
+program Test
+  use Module1
+  use Module2
+end program
+
+! { dg-final { cleanup-modules "Module1 Module2" } }