summaryrefslogtreecommitdiff
path: root/gcc/fortran/array.c
diff options
context:
space:
mode:
authorpault <pault@138bc75d-0d04-0410-961f-82ee72b054a4>2007-02-03 13:38:42 +0000
committerpault <pault@138bc75d-0d04-0410-961f-82ee72b054a4>2007-02-03 13:38:42 +0000
commit77423564f03fc083bace33d597b48ce2213b1166 (patch)
tree3f6806872e565af6ccf3b61138274516caa9cd46 /gcc/fortran/array.c
parenta15a1b518debb23e76370968264408fd2277c4d1 (diff)
downloadgcc-77423564f03fc083bace33d597b48ce2213b1166.tar.gz
2007-02-03 Paul Thomas <pault@gcc.gnu.org>
PR fortran/30514 * array.c (match_array_element_spec): If the length of an array is negative, adjust the upper limit to make it zero length. PR fortran/30660 * resolve.c (pure_function, resolve_function): Initialize name to null to clear up build warnings. (resolve_fl_variable): Look at components explicitly to check for default initializer, rather than using gfc_default_initializer. 2007-02-03 Paul Thomas <pault@gcc.gnu.org> PR fortran/30514 * gfortran.dg/zero_sized_2.f90: New test. PR fortran/30660 * gfortran.dg/alloc_comp_basics_4.f90: New test. PR fortran/29820 * gfortran.dg/actual_array_interface_1.f90: Copy source to empty file. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@121541 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/fortran/array.c')
-rw-r--r--gcc/fortran/array.c9
1 files changed, 9 insertions, 0 deletions
diff --git a/gcc/fortran/array.c b/gcc/fortran/array.c
index 76dee508404..895bccc14d1 100644
--- a/gcc/fortran/array.c
+++ b/gcc/fortran/array.c
@@ -319,6 +319,15 @@ match_array_element_spec (gfc_array_spec *as)
if (m == MATCH_NO)
return AS_ASSUMED_SHAPE;
+ /* If the size is negative in this dimension, set it to zero. */
+ if ((*lower)->expr_type == EXPR_CONSTANT
+ && (*upper)->expr_type == EXPR_CONSTANT
+ && mpz_cmp ((*upper)->value.integer, (*lower)->value.integer) < 0)
+ {
+ gfc_free_expr (*upper);
+ *upper = gfc_copy_expr (*lower);
+ mpz_sub_ui ((*upper)->value.integer, (*upper)->value.integer, 1);
+ }
return AS_EXPLICIT;
}