public inbox for gcc-patches@gcc.gnu.org
 help / color / mirror / Atom feed
* [Committed] PR fortran/77420
@ 2016-09-26 19:09 Steve Kargl
  0 siblings, 0 replies; 2+ messages in thread
From: Steve Kargl @ 2016-09-26 19:09 UTC (permalink / raw)
  To: fortran, gcc-patches

[-- Attachment #1: Type: text/plain, Size: 577 bytes --]

This is a follow-up commit to really fix PR fortran/77420.
The code has been in my tree for 2 weeks and has passed
numerous regression tests.

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

	PR fortran/77420
	* trans-common.c:  Handle array elements in equivalence when
	the lower and upper bounds of array spec are NULL.
 
2016-09-26  Steven G. Kargl  <kargl@gcc.gnu.org>

	PR fortran/77420
	* gfortran.dg/pr77420_1.f90: New test.
	* gfortran.dg/pr77420_2.f90: Ditto.
	* gfortran.dg/pr77420_3.f90: New test. Requires ...
	* gfortran.dg/pr77420_4.f90: this file.

-- 
Steve

[-- Attachment #2: pr77420.diff --]
[-- Type: text/x-diff, Size: 3110 bytes --]

Index: gcc/fortran/trans-common.c
===================================================================
--- gcc/fortran/trans-common.c	(revision 240140)
+++ gcc/fortran/trans-common.c	(working copy)
@@ -805,13 +805,21 @@ element_number (gfc_array_ref *ar)
       if (ar->dimen_type[i] != DIMEN_ELEMENT)
         gfc_internal_error ("element_number(): Bad dimension type");
 
-      mpz_sub (n, *get_mpz (ar->start[i]), *get_mpz (as->lower[i]));
+      if (as && as->lower[i])
+	mpz_sub (n, *get_mpz (ar->start[i]), *get_mpz (as->lower[i]));
+      else
+	mpz_sub_ui (n, *get_mpz (ar->start[i]), 1);
  
       mpz_mul (n, n, multiplier);
       mpz_add (offset, offset, n);
  
-      mpz_sub (extent, *get_mpz (as->upper[i]), *get_mpz (as->lower[i]));
-      mpz_add_ui (extent, extent, 1);
+      if (as && as->upper[i] && as->lower[i])
+	{
+	  mpz_sub (extent, *get_mpz (as->upper[i]), *get_mpz (as->lower[i]));
+	  mpz_add_ui (extent, extent, 1);
+	}
+      else
+	mpz_set_ui (extent, 0);
  
       if (mpz_sgn (extent) < 0)
         mpz_set_ui (extent, 0);
Index: gcc/testsuite/gfortran.dg/pr77420_1.f90
===================================================================
--- gcc/testsuite/gfortran.dg/pr77420_1.f90	(nonexistent)
+++ gcc/testsuite/gfortran.dg/pr77420_1.f90	(working copy)
@@ -0,0 +1,15 @@
+! { dg-do compile }
+module test_equivalence
+  real, private :: array1(100)
+  real, private :: array2(100)
+  equivalence(array1(3),array2(3))
+end module test_equivalence
+
+module mymodule
+  use test_equivalence
+  real, dimension(:), allocatable :: array1
+end module mymodule
+
+program test
+  use mymodule
+end program test
Index: gcc/testsuite/gfortran.dg/pr77420_2.f90
===================================================================
--- gcc/testsuite/gfortran.dg/pr77420_2.f90	(nonexistent)
+++ gcc/testsuite/gfortran.dg/pr77420_2.f90	(working copy)
@@ -0,0 +1,15 @@
+! { dg-do compile }
+module test_equivalence
+  real, private :: array1(100)
+  real, private :: array2(100)
+  equivalence(array1,array2)
+end module test_equivalence
+
+module mymodule
+  use test_equivalence
+  real, dimension(:), allocatable :: array1
+end module mymodule
+
+program test
+  use mymodule
+end program test
Index: gcc/testsuite/gfortran.dg/pr77420_3.f90
===================================================================
--- gcc/testsuite/gfortran.dg/pr77420_3.f90	(nonexistent)
+++ gcc/testsuite/gfortran.dg/pr77420_3.f90	(working copy)
@@ -0,0 +1,9 @@
+! { dg-do link }
+! { dg-additional-sources pr77420_4.f90 }
+!
+module h5global
+  implicit none
+  integer :: h5p_default_f, h5p_flags
+  equivalence(h5p_flags, h5p_default_f)
+end module h5global
+! { dg-final { cleanup-modules "h5global" } }
Index: gcc/testsuite/gfortran.dg/pr77420_4.f90
===================================================================
--- gcc/testsuite/gfortran.dg/pr77420_4.f90	(nonexistent)
+++ gcc/testsuite/gfortran.dg/pr77420_4.f90	(working copy)
@@ -0,0 +1,10 @@
+! { dg-do compile { target { ! *-*-* } } }
+!
+program bug
+  use H5GLOBAL
+  implicit none
+  integer :: i
+  i=H5P_DEFAULT_F
+end program bug
+
+

^ permalink raw reply	[flat|nested] 2+ messages in thread

* [Committed] PR fortran/77420
@ 2016-09-10  1:38 Steve Kargl
  0 siblings, 0 replies; 2+ messages in thread
From: Steve Kargl @ 2016-09-10  1:38 UTC (permalink / raw)
  To: fortran, gcc-patches

I've committed the following patch.  It restores gfortran's
behavior prior to my commit r224159 if the current namespace
has an empty equivalent list.

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.


Index: gcc/fortran/module.c
===================================================================
--- gcc/fortran/module.c	(revision 240057)
+++ gcc/fortran/module.c	(working copy)
@@ -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: gcc/testsuite/gfortran.dg/pr77420.f90
===================================================================
--- gcc/testsuite/gfortran.dg/pr77420.f90	(nonexistent)
+++ gcc/testsuite/gfortran.dg/pr77420.f90	(working copy)
@@ -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
+
-- 
Steve

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2016-09-26 18:48 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-09-26 19:09 [Committed] PR fortran/77420 Steve Kargl
  -- strict thread matches above, loose matches on Subject: below --
2016-09-10  1:38 Steve Kargl

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).