diff options
-rw-r--r-- | gcc/fortran/ChangeLog | 8 | ||||
-rw-r--r-- | gcc/fortran/array.c | 5 | ||||
-rw-r--r-- | gcc/fortran/gfortran.h | 2 |
3 files changed, 15 insertions, 0 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index fb68245..174e3b4 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,11 @@ +2015-05-12 Thomas Koenig <tkoenig@gcc.gnu.org> + + PR fortran/66041 + PR fortran/37131 + * gfortran.h (gfc_array_spec): Add field resolved. + * array.c (gfc_resolve_array_spec): Resolve array spec + only once. + 2015-05-11 Mikael Morin <mikael@gcc.gnu.org> PR fortran/66100 diff --git a/gcc/fortran/array.c b/gcc/fortran/array.c index 64d0abf..1ab3cd0 100644 --- a/gcc/fortran/array.c +++ b/gcc/fortran/array.c @@ -338,6 +338,9 @@ gfc_resolve_array_spec (gfc_array_spec *as, int check_constant) if (as == NULL) return true; + if (as->resolved) + return true; + for (i = 0; i < as->rank + as->corank; i++) { e = as->lower[i]; @@ -364,6 +367,8 @@ gfc_resolve_array_spec (gfc_array_spec *as, int check_constant) } } + as->resolved = true; + return true; } diff --git a/gcc/fortran/gfortran.h b/gcc/fortran/gfortran.h index 6c54da8..514e93f 100644 --- a/gcc/fortran/gfortran.h +++ b/gcc/fortran/gfortran.h @@ -1002,6 +1002,8 @@ typedef struct bool cp_was_assumed; /* AS_ASSUMED_SIZE cp arrays are converted to AS_EXPLICIT, but we want to remember that we did this. */ + + bool resolved; } gfc_array_spec; |