]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
backport: re PR fortran/45187 (ICE with CRAY pointer in module)
authorFrancois-Xavier Coudert <fxcoudert@gcc.gnu.org>
Sun, 15 Jun 2014 19:35:11 +0000 (19:35 +0000)
committerFrançois-Xavier Coudert <fxcoudert@gcc.gnu.org>
Sun, 15 Jun 2014 19:35:11 +0000 (19:35 +0000)
Backport from trunk
PR fortran/45187

* trans-decl.c (gfc_create_module_variable): Don't create
Cray-pointee decls twice.

* gfortran.dg/cray_pointers_10.f90: New file.

From-SVN: r211688

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

index 4fbaf80e2cf8038dc66a06b8d1d8c625e29fa2b6..8033c7a5cc294cb2a2ab9095500d9cc945754e1d 100644 (file)
@@ -1,3 +1,10 @@
+2014-06-15  Francois-Xavier Coudert  <fxcoudert@gcc.gnu.org>
+
+       Backport from trunk.
+       PR fortran/45187
+       * trans-decl.c (gfc_create_module_variable): Don't create
+       Cray-pointee decls twice.
+
 2014-05-26  Janne Blomqvist  <jb@gcc.gnu.org>
 
        Backport from mainline
index 7d23561872b1db0db619e550d82e85e10c7fdbd7..b4b0fc536b014d2ec998a43df7fd60056adfb622 100644 (file)
@@ -4084,8 +4084,8 @@ gfc_create_module_variable (gfc_symbol * sym)
     }
 
   /* Don't generate variables from other modules. Variables from
-     COMMONs will already have been generated.  */
-  if (sym->attr.use_assoc || sym->attr.in_common)
+     COMMONs and Cray pointees will already have been generated.  */
+  if (sym->attr.use_assoc || sym->attr.in_common || sym->attr.cray_pointee)
     return;
 
   /* Equivalenced variables arrive here after creation.  */
index b58c46f208a1829fbb65f99929b2594f63a17a8d..4fd2ef0b81b5cf8b2967ac5b31d55c1db5206550 100644 (file)
@@ -1,3 +1,9 @@
+2014-06-15  Francois-Xavier Coudert  <fxcoudert@gcc.gnu.org>
+
+       Backport from trunk.
+       PR fortran/45187
+       * gfortran.dg/cray_pointers_10.f90: New file.
+
 2014-06-13  Peter Bergner  <bergner@vnet.ibm.com>
 
        Backport from mainline
diff --git a/gcc/testsuite/gfortran.dg/cray_pointers_10.f90 b/gcc/testsuite/gfortran.dg/cray_pointers_10.f90
new file mode 100644 (file)
index 0000000..1ac98f3
--- /dev/null
@@ -0,0 +1,18 @@
+! { dg-do run }
+! { dg-options "-fcray-pointer" }
+!
+! PR fortran/45187
+!
+module foo
+  implicit none
+  real :: a
+  pointer(c_a, a)
+end module foo
+
+program test
+  use foo
+  real :: z
+  c_a = loc(z)
+  a = 42
+  if (z /= 42) call abort
+end program test