trans-decl.c (gfc_build_qualified_array): Fix coarray tokens for module coarrays...
authorTobias Burnus <burnus@gcc.gnu.org>
Fri, 2 Jan 2015 13:34:58 +0000 (14:34 +0100)
committerTobias Burnus <burnus@gcc.gnu.org>
Fri, 2 Jan 2015 13:34:58 +0000 (14:34 +0100)
2015-01-02  Tobias Burnus  <burnus@net-b.de>

        * trans-decl.c (gfc_build_qualified_array): Fix coarray tokens
        for module coarrays with -fcoarray=lib.

2015-01-02  Tobias Burnus  <burnus@net-b.de>

        * gfortran.dg/coarray/codimension_2.f90: New.
        * gfortran.dg/coarray/codimension_2a.f90: New.
        * gfortran.dg/coarray_35.f90: New.
        * gfortran.dg/coarray_35a.f90: New.

From-SVN: r219142

gcc/fortran/ChangeLog
gcc/fortran/trans-decl.c
gcc/testsuite/ChangeLog
gcc/testsuite/gfortran.dg/coarray/codimension_2.f90 [new file with mode: 0644]
gcc/testsuite/gfortran.dg/coarray/codimension_2a.f90 [new file with mode: 0644]
gcc/testsuite/gfortran.dg/coarray_35.f90 [new file with mode: 0644]
gcc/testsuite/gfortran.dg/coarray_35a.f90 [new file with mode: 0644]

index e45269e0845d03e8f27395d456c3dc8e86f1839d..ea72687383f63db8481967d5eb5d78df0ea89277 100644 (file)
@@ -1,3 +1,8 @@
+2015-01-02  Tobias Burnus  <burnus@net-b.de>
+
+       * trans-decl.c (gfc_build_qualified_array): Fix coarray tokens
+       for module coarrays with -fcoarray=lib.
+
 2015-01-02  Janus Weil  <janus@gcc.gnu.org>
 
        PR fortran/60507
@@ -5,7 +10,7 @@
        expression is a procedure-pointer result.
        (compare_actual_formal): Use it.
 
-Copyright (C) 2014 Free Software Foundation, Inc.
+Copyright (C) 2015 Free Software Foundation, Inc.
 
 Copying and distribution of this file, with or without modification,
 are permitted in any medium without royalty provided the copyright
index 75b84f1495bb68a340035b25da6b01b588b7f6dc..9ef6bfcda80806645f2744c147053ec028be09d2 100644 (file)
@@ -819,10 +819,22 @@ gfc_build_qualified_array (tree decl, gfc_symbol * sym)
       && GFC_TYPE_ARRAY_CAF_TOKEN (type) == NULL_TREE)
     {
       tree token;
+      tree token_type = build_qualified_type (pvoid_type_node,
+                                             TYPE_QUAL_RESTRICT);
+
+      if (sym->module && (sym->attr.use_assoc
+                         || sym->ns->proc_name->attr.flavor == FL_MODULE))
+       {
+         tree token_name
+               = get_identifier (gfc_get_string (GFC_PREFIX ("caf_token%s"),
+                       IDENTIFIER_POINTER (gfc_sym_mangled_identifier (sym))));
+         token = build_decl (DECL_SOURCE_LOCATION (decl), VAR_DECL, token_name,
+                             token_type);
+         TREE_PUBLIC (token) = 1;
+       }
+      else
+       token = gfc_create_var_np (token_type, "caf_token");
 
-      token = gfc_create_var_np (build_qualified_type (pvoid_type_node,
-                                                      TYPE_QUAL_RESTRICT),
-                                "caf_token");
       GFC_TYPE_ARRAY_CAF_TOKEN (type) = token;
       DECL_ARTIFICIAL (token) = 1;
       TREE_STATIC (token) = 1;
index 44bc6f2dd3f1051bdbef3c8e8d4205950addae7b..543cec61e1a6cc20e0950cdcaead29fc5f536534 100644 (file)
@@ -1,9 +1,16 @@
+2015-01-02  Tobias Burnus  <burnus@net-b.de>
+
+       * gfortran.dg/coarray/codimension_2.f90: New.
+       * gfortran.dg/coarray/codimension_2a.f90: New.
+       * gfortran.dg/coarray_35.f90: New.
+       * gfortran.dg/coarray_35a.f90: New.
+
 2015-01-02  Janus Weil  <janus@gcc.gnu.org>
 
        PR fortran/60507
        * gfortran.dg/dummy_procedure_11: New.
 
-Copyright (C) 2014 Free Software Foundation, Inc.
+Copyright (C) 2015 Free Software Foundation, Inc.
 
 Copying and distribution of this file, with or without modification,
 are permitted in any medium without royalty provided the copyright
diff --git a/gcc/testsuite/gfortran.dg/coarray/codimension_2.f90 b/gcc/testsuite/gfortran.dg/coarray/codimension_2.f90
new file mode 100644 (file)
index 0000000..b211f9b
--- /dev/null
@@ -0,0 +1,14 @@
+! { dg-do link }
+! { dg-additional-sources codimension_2a.f90 }
+!
+! To be used with codimension_2a.f90
+! Check that the coarray declared in the module is accessible
+! by doing a link test
+!
+! Contributed by Alessandro Fanfarillo.
+!
+module global_coarrays
+  implicit none
+  integer,parameter :: n=10
+  integer :: b(10)[*]
+end module global_coarrays
diff --git a/gcc/testsuite/gfortran.dg/coarray/codimension_2a.f90 b/gcc/testsuite/gfortran.dg/coarray/codimension_2a.f90
new file mode 100644 (file)
index 0000000..8eb472c
--- /dev/null
@@ -0,0 +1,26 @@
+! { dg-do compile { target { ! *-*-* } } }
+! SKIP THIS FILE
+!
+! Used by codimension_2.f90
+!
+! Check that the coarray declared in the module is accessible
+! by doing a link test
+!
+! Contributed by Alessandro Fanfarillo.
+!
+program testmod
+  use global_coarrays
+  implicit none
+  
+  integer :: me
+
+  me = this_image()
+
+  b = me
+
+  if(me==1) then
+     b(:) = b(:)[2]
+     write(*,*) b
+  end if
+
+end program testmod
diff --git a/gcc/testsuite/gfortran.dg/coarray_35.f90 b/gcc/testsuite/gfortran.dg/coarray_35.f90
new file mode 100644 (file)
index 0000000..e65f8fe
--- /dev/null
@@ -0,0 +1,17 @@
+! { dg-do compile }
+! { dg-options "-fcoarray=lib" }
+!
+! To be used with coarray_35a.f90
+! Check that the coarray declared in the module is accessible
+! by checking the assembler name
+!
+! Contributed by Alessandro Fanfarillo.
+!
+module global_coarrays
+  implicit none
+  integer,parameter :: n=10
+  integer :: b(10)[*]
+end module global_coarrays
+
+! Check for the symbol of the coarray token (w/o system-dependend prefix)
+! { dg-final { scan-assembler "caf_token__global_coarrays_MOD_b" } }
diff --git a/gcc/testsuite/gfortran.dg/coarray_35a.f90 b/gcc/testsuite/gfortran.dg/coarray_35a.f90
new file mode 100644 (file)
index 0000000..eeeb289
--- /dev/null
@@ -0,0 +1,28 @@
+! { dg-do compile }
+! { dg-options "-fcoarray=lib" }
+! { dg-compile-aux-modules "coarray_35.f90" }
+!
+! Check that the coarray declared in the module is accessible
+! by checking the assembler name
+!
+! Contributed by Alessandro Fanfarillo.
+!
+program testmod
+  use global_coarrays
+  implicit none
+  
+  integer :: me
+
+  me = this_image()
+
+  b = me
+
+  if(me==1) then
+     b(:) = b(:)[2]
+     write(*,*) b
+  end if
+
+end program testmod
+
+! Check for the symbol of the coarray token (w/o system-dependend prefix)
+! { dg-final { scan-assembler "caf_token__global_coarrays_MOD_b" } }