Commit a184e37f by Steven G. Kargl

re PR fortran/77420 (gfortran and equivalence produces internal compiler error)

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.

From-SVN: r240506
parent 8be59d19
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 Paul Thomas <pault@gcc.gnu.org>
PR fortran/48298
......
......@@ -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);
......
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.
2016-09-26 Kugan Vivekanandarajah <kuganv@linaro.org>
PR middle-end/77719
......
! { 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
! { 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
! { 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" } }
! { dg-do compile { target { ! *-*-* } } }
!
program bug
use H5GLOBAL
implicit none
integer :: i
i=H5P_DEFAULT_F
end program bug
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment