From a40cbf2b28db7824740ff1cff3eaffcd768fe456 Mon Sep 17 00:00:00 2001
From: Harald Anlauf <anlauf@gmx.de>
Date: Tue, 9 Nov 2021 21:02:44 +0100
Subject: [PATCH] Fortran: avoid NULL pointer dereferences
gcc/fortran/ChangeLog:
PR fortran/103137
PR fortran/103138
* check.c (gfc_check_shape): Avoid NULL pointer dereference on
missing ref.
* simplify.c (gfc_simplify_cshift): Avoid NULL pointer dereference
when shape not set.
(gfc_simplify_transpose): Likewise.
---
gcc/fortran/check.c | 3 +++
gcc/fortran/simplify.c | 6 ++++++
2 files changed, 9 insertions(+)
@@ -5096,6 +5096,9 @@ gfc_check_shape (gfc_expr *source, gfc_expr *kind)
if (source->rank == 0 || source->expr_type != EXPR_VARIABLE)
return true;
+ if (source->ref == NULL)
+ return false;
+
ar = gfc_find_array_ref (source);
if (ar->as && ar->as->type == AS_ASSUMED_SIZE && ar->type == AR_FULL)
@@ -2109,6 +2109,9 @@ gfc_simplify_cshift (gfc_expr *array, gfc_expr *shift, gfc_expr *dim)
else
which = 0;
+ if (array->shape == NULL)
+ return NULL;
+
gfc_array_size (array, &size);
arraysize = mpz_get_ui (size);
mpz_clear (size);
@@ -8174,6 +8177,9 @@ gfc_simplify_transpose (gfc_expr *matrix)
gcc_assert (matrix->rank == 2);
+ if (matrix->shape == NULL)
+ return NULL;
+
result = gfc_get_array_expr (matrix->ts.type, matrix->ts.kind,
&matrix->where);
result->rank = 2;
--
2.26.2