aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorMartin Liska <mliska@suse.cz>2019-10-24 10:49:02 +0200
committerMartin Liska <marxin@gcc.gnu.org>2019-10-24 08:49:02 +0000
commitd136595df77f75bc6e5132e26f09cad031f38c71 (patch)
tree26803e010c153593fe9cf23c845d7eae3e88e346 /gcc
parent0214d31a48f867b9b00134cea7223d35ed7865aa (diff)
downloadgcc-d136595df77f75bc6e5132e26f09cad031f38c71.zip
gcc-d136595df77f75bc6e5132e26f09cad031f38c71.tar.gz
gcc-d136595df77f75bc6e5132e26f09cad031f38c71.tar.bz2
Fix another UBSAN in Fortran coarray.
2019-10-24 Martin Liska <mliska@suse.cz> PR fortran/92174 * array.c (gfc_resolve_array_spec): Break the loop for out of bounds index. * resolve.c (is_non_constant_shape_array): Likewise. From-SVN: r277367
Diffstat (limited to 'gcc')
-rw-r--r--gcc/fortran/ChangeLog7
-rw-r--r--gcc/fortran/array.c3
-rw-r--r--gcc/fortran/resolve.c3
3 files changed, 13 insertions, 0 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog
index 5bb04d7..4e39102 100644
--- a/gcc/fortran/ChangeLog
+++ b/gcc/fortran/ChangeLog
@@ -1,3 +1,10 @@
+2019-10-24 Martin Liska <mliska@suse.cz>
+
+ PR fortran/92174
+ * array.c (gfc_resolve_array_spec): Break the loop
+ for out of bounds index.
+ * resolve.c (is_non_constant_shape_array): Likewise.
+
2019-10-23 Steven G. Kargl <kargl@gcc.gnu.org>
dump-parse-tree.c (show_expr): Add dumping of BT_BOZ constants.
diff --git a/gcc/fortran/array.c b/gcc/fortran/array.c
index f0980dd..36223d2 100644
--- a/gcc/fortran/array.c
+++ b/gcc/fortran/array.c
@@ -410,6 +410,9 @@ gfc_resolve_array_spec (gfc_array_spec *as, int check_constant)
for (i = 0; i < as->rank + as->corank; i++)
{
+ if (i == GFC_MAX_DIMENSIONS)
+ return false;
+
e = as->lower[i];
if (!resolve_array_bound (e, check_constant))
return false;
diff --git a/gcc/fortran/resolve.c b/gcc/fortran/resolve.c
index 93f2d0a..5deeb4f 100644
--- a/gcc/fortran/resolve.c
+++ b/gcc/fortran/resolve.c
@@ -12266,6 +12266,9 @@ is_non_constant_shape_array (gfc_symbol *sym)
simplification now. */
for (i = 0; i < sym->as->rank + sym->as->corank; i++)
{
+ if (i == GFC_MAX_DIMENSIONS)
+ break;
+
e = sym->as->lower[i];
if (e && (!resolve_index_expr(e)
|| !gfc_is_constant_expr (e)))