diff options
author | Harald Anlauf <anlauf@gmx.de> | 2023-05-24 21:04:43 +0200 |
---|---|---|
committer | Harald Anlauf <anlauf@gmx.de> | 2023-05-24 21:51:02 +0200 |
commit | ec2e86274427a402d2de2199ba550f7295ea9b5f (patch) | |
tree | a44088e4ba18acde8d556987a9b38a025140ea1e /gcc/fortran/simplify.cc | |
parent | 5fd5d8fb744fd9251d04e4b17d04f2340e6a283b (diff) | |
download | gcc-ec2e86274427a402d2de2199ba550f7295ea9b5f.zip gcc-ec2e86274427a402d2de2199ba550f7295ea9b5f.tar.gz gcc-ec2e86274427a402d2de2199ba550f7295ea9b5f.tar.bz2 |
Fortran: reject bad DIM argument of SIZE intrinsic in simplification [PR104350]
gcc/fortran/ChangeLog:
PR fortran/104350
* simplify.cc (simplify_size): Reject DIM argument of intrinsic SIZE
with error when out of valid range.
gcc/testsuite/ChangeLog:
PR fortran/104350
* gfortran.dg/size_dim_2.f90: New test.
Diffstat (limited to 'gcc/fortran/simplify.cc')
-rw-r--r-- | gcc/fortran/simplify.cc | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/gcc/fortran/simplify.cc b/gcc/fortran/simplify.cc index 3f77203..8168011 100644 --- a/gcc/fortran/simplify.cc +++ b/gcc/fortran/simplify.cc @@ -7594,7 +7594,17 @@ simplify_size (gfc_expr *array, gfc_expr *dim, int k) if (dim->expr_type != EXPR_CONSTANT) return NULL; - d = mpz_get_ui (dim->value.integer) - 1; + if (array->rank == -1) + return NULL; + + d = mpz_get_si (dim->value.integer) - 1; + if (d < 0 || d > array->rank - 1) + { + gfc_error ("DIM argument (%d) to intrinsic SIZE at %L out of range " + "(1:%d)", d+1, &array->where, array->rank); + return &gfc_bad_expr; + } + if (!gfc_array_dimen_size (array, d, &size)) return NULL; } |