Fix regression introduced at revision 221586.
PR fortran/64952 PR fortran/65532 fortran/ * gfortran.h (struct gfc_namespace): New field 'types_resolved'. * resolve.c (resolve_types): Return early if field 'types_resolved' is set. Set 'types_resolved' at the end. testsuite/ * gfortran.dg/data_initialized_3.f90: New. From-SVN: r221657
This commit is contained in:
parent
bbf043c2d2
commit
2b91aea838
5 changed files with 65 additions and 0 deletions
|
@ -1,3 +1,11 @@
|
|||
2015-03-25 Mikael Morin <mikael@gcc.gnu.org>
|
||||
|
||||
PR fortran/64952
|
||||
PR fortran/65532
|
||||
* gfortran.h (struct gfc_namespace): New field 'types_resolved'.
|
||||
* resolve.c (resolve_types): Return early if field 'types_resolved'
|
||||
is set. Set 'types_resolved' at the end.
|
||||
|
||||
2015-03-24 Andre Vehreschild <vehre@gmx.de>
|
||||
|
||||
PR fortran/55901
|
||||
|
|
|
@ -1691,6 +1691,9 @@ typedef struct gfc_namespace
|
|||
Holds -1 during resolution. */
|
||||
signed resolved:2;
|
||||
|
||||
/* Set when resolve_types has been called for this namespace. */
|
||||
unsigned types_resolved:1;
|
||||
|
||||
/* Set to 1 if code has been generated for this namespace. */
|
||||
unsigned translated:1;
|
||||
|
||||
|
|
|
@ -14942,6 +14942,9 @@ resolve_types (gfc_namespace *ns)
|
|||
gfc_equiv *eq;
|
||||
gfc_namespace* old_ns = gfc_current_ns;
|
||||
|
||||
if (ns->types_resolved)
|
||||
return;
|
||||
|
||||
/* Check that all IMPLICIT types are ok. */
|
||||
if (!ns->seen_implicit_none)
|
||||
{
|
||||
|
@ -15016,6 +15019,8 @@ resolve_types (gfc_namespace *ns)
|
|||
|
||||
gfc_resolve_omp_udrs (ns->omp_udr_root);
|
||||
|
||||
ns->types_resolved = 1;
|
||||
|
||||
gfc_current_ns = old_ns;
|
||||
}
|
||||
|
||||
|
|
|
@ -1,3 +1,9 @@
|
|||
2015-03-25 Mikael Morin <mikael@gcc.gnu.org>
|
||||
|
||||
PR fortran/64952
|
||||
PR fortran/65532
|
||||
* gfortran.dg/data_initialized_3.f90: New.
|
||||
|
||||
2015-03-25 Richard Biener <rguenther@suse.de>
|
||||
|
||||
PR middle-end/65519
|
||||
|
|
43
gcc/testsuite/gfortran.dg/data_initialized_3.f90
Normal file
43
gcc/testsuite/gfortran.dg/data_initialized_3.f90
Normal file
|
@ -0,0 +1,43 @@
|
|||
! { dg-do compile }
|
||||
!
|
||||
! PR fortran/65532
|
||||
! The partial initialization through data statements was producing
|
||||
! shape mismatch errors.
|
||||
!
|
||||
! Contributed by Harald Anlauf <anlauf@gmx.de>
|
||||
|
||||
module gfcbug131
|
||||
implicit none
|
||||
contains
|
||||
DOUBLE PRECISION FUNCTION d1mach(i)
|
||||
INTEGER, INTENT(IN) :: i
|
||||
|
||||
INTEGER :: small(4)
|
||||
INTEGER :: large(4)
|
||||
INTEGER :: right(4)
|
||||
INTEGER :: diver(4)
|
||||
INTEGER :: LOG10(4)
|
||||
DOUBLE PRECISION :: dmach(5)
|
||||
|
||||
EQUIVALENCE (dmach(1),small(1))
|
||||
EQUIVALENCE (dmach(2),large(1))
|
||||
EQUIVALENCE (dmach(3),right(1))
|
||||
EQUIVALENCE (dmach(4),diver(1))
|
||||
EQUIVALENCE (dmach(5),LOG10(1))
|
||||
|
||||
DATA small(1),small(2) / 0, 1048576 /
|
||||
DATA large(1),large(2) / -1, 2146435071 /
|
||||
DATA right(1),right(2) / 0, 1017118720 /
|
||||
DATA diver(1),diver(2) / 0, 1018167296 /
|
||||
DATA LOG10(1),LOG10(2) / 1352628735, 1070810131 /
|
||||
|
||||
d1mach = dmach(i)
|
||||
END FUNCTION d1mach
|
||||
|
||||
DOUBLE PRECISION FUNCTION foo (x)
|
||||
DOUBLE PRECISION, INTENT(IN) :: x
|
||||
foo = SQRT (d1mach(4))
|
||||
END FUNCTION foo
|
||||
|
||||
end module gfcbug131
|
||||
|
Loading…
Add table
Reference in a new issue