re PR fortran/77420 (gfortran and equivalence produces internal compiler error)
authorSteven G. Kargl <kargl@gcc.gnu.org>
Sat, 10 Sep 2016 00:52:45 +0000 (00:52 +0000)
committerSteven G. Kargl <kargl@gcc.gnu.org>
Sat, 10 Sep 2016 00:52:45 +0000 (00:52 +0000)
2016-09-09  Steven G. Kargl  <kargl@gcc.gnu.org>

PR fortran/77420
* module.c (load_equiv): If the current namespace has a list of
equivalence statements, initialize duplicate to false and then
look for duplicates; otherwise, initialize it to true.

2016-09-09  Steven G. Kargl  <kargl@gcc.gnu.org>

PR fortran/77420
* gfortran.dg/pr77420.f90: New test.

From-SVN: r240063

gcc/fortran/module.c
gcc/testsuite/ChangeLog
gcc/testsuite/gfortran.dg/pr77420.f90 [new file with mode: 0644]

index 4d664f079f5a9c4e71c0af14f3bc8415a5cd2190..18e1ceeff9ef7fca8b531a45f2787ca18ef2ef32 100644 (file)
@@ -4647,7 +4647,7 @@ load_equiv (void)
       }
 
     /* Check for duplicate equivalences being loaded from different modules */
-    duplicate = false;
+    duplicate = gfc_current_ns->equiv ? false:true;
     for (equiv = gfc_current_ns->equiv; equiv; equiv = equiv->next)
       {
        if (equiv->module && head->module
index 3b934a03a904a04b3b93d2f09e4dacb9773479be..93c2826a09345aa86c0c442a254d0e6e9b71ea80 100644 (file)
@@ -1,3 +1,10 @@
+2016-09-09  Steven G. Kargl  <kargl@gcc.gnu.org>
+
+       PR fortran/77420
+       * module.c (load_equiv): If the current namespace has a list of
+       equivalence statements, initialize duplicate to false and then
+       look for duplicates; otherwise, initialize it to true.
+
 2016-09-09  Martin Sebor  <msebor@redhat.com>
 
        PR c/77520
@@ -5,6 +12,11 @@
        * gcc.dg/pr77520.c: New test.
        * gcc.dg/pr77521.c: New test.
 
+2016-09-09  Steven G. Kargl  <kargl@gcc.gnu.org>
+
+       PR fortran/77420
+       * gfortran.dg/pr77420.f90: New test.
+
 2016-09-09  Steven G. Kargl  <kargl@gcc.gnu.org>
 
        PR fortran/77506
diff --git a/gcc/testsuite/gfortran.dg/pr77420.f90 b/gcc/testsuite/gfortran.dg/pr77420.f90
new file mode 100644 (file)
index 0000000..89abe71
--- /dev/null
@@ -0,0 +1,18 @@
+! { dg-do compile }
+MODULE test_equivalence
+  REAL, PRIVATE, DIMENSION(100) :: array1
+  REAL, PRIVATE, DIMENSION(100) :: array2
+  EQUIVALENCE(array1(1),array2(1))
+END MODULE test_equivalence
+
+MODULE mymodule
+  USE test_equivalence
+  ! declare a local variable with the same name as the (private!)
+  ! variable in module test_equivalence:
+  REAL, DIMENSION(:), ALLOCATABLE :: array1
+END MODULE mymodule
+
+PROGRAM test
+  USE mymodule
+END PROGRAM test
+