+2016-09-29 Steven G. Kargl <kargl@gcc.gnu.org>
+
+ Backport from trunk
+
+ PR fortran/77420
+ * trans-common.c: Handle array elements in equivalence when
+ the lower and upper bounds of array spec are NULL.
+
+ PR fortran/77460
+ * simplify.c (simplify_transformation_to_scalar): On error, result
+ may be NULL, simply return.
+
2016-09-29 Steven G. Kargl <kargl@gcc.gnu.org>
Backport from trunk
}
result = op (result, gfc_copy_expr (a));
+ if (!result)
+ return result;
}
return result;
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-29 Steven G. Kargl <kargl@gcc.gnu.org>
+
+ Backport from trunk
+
+ 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.
+
+ PR fortran/77460
+ * gfortran.dg/pr77460.f90: New test.
+
2016-09-29 Steven G. Kargl <kargl@gcc.gnu.org>
Backport from trunk
--- /dev/null
+! { 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
--- /dev/null
+! { 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
--- /dev/null
+! { 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" } }
--- /dev/null
+! { dg-do compile { target { ! *-*-* } } }
+!
+program bug
+ use H5GLOBAL
+ implicit none
+ integer :: i
+ i=H5P_DEFAULT_F
+end program bug
+
+
--- /dev/null
+! { dg-do compile }
+ double precision, parameter :: x = huge(1d0)
+ print*, sum((/x,-x/))
+ print*, sum((/x,x,-x,-x/)) ! { dg-error "overflow" }
+ print*, sum((/x,-x,1d0/))
+ print*, sum((/1d0,x,-x/))
+end