]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
Fortran: error recovery with references of bad array constructors [PR105633]
authorHarald Anlauf <anlauf@gmx.de>
Wed, 19 Oct 2022 20:37:56 +0000 (22:37 +0200)
committerHarald Anlauf <anlauf@gmx.de>
Thu, 20 Oct 2022 20:19:01 +0000 (22:19 +0200)
gcc/fortran/ChangeLog:

PR fortran/105633
* expr.cc (find_array_section): Move check for NULL pointers so
that both subscript triplets and vector subscripts are covered.

gcc/testsuite/ChangeLog:

PR fortran/105633
* gfortran.dg/pr105633.f90: New test.

Co-authored-by: Steven G. Kargl <kargl@gcc.gnu.org>
gcc/fortran/expr.cc
gcc/testsuite/gfortran.dg/pr105633.f90 [new file with mode: 0644]

index 290ddf360c8d8615bc22832b23a5d863cea2b1a8..69d0b57c688350a01cca156dcb2bb4caf2434c52 100644 (file)
@@ -1552,6 +1552,12 @@ find_array_section (gfc_expr *expr, gfc_ref *ref)
       lower = ref->u.ar.as->lower[d];
       upper = ref->u.ar.as->upper[d];
 
+      if (!lower || !upper)
+       {
+         t = false;
+         goto cleanup;
+       }
+
       if (ref->u.ar.dimen_type[d] == DIMEN_VECTOR)  /* Vector subscript.  */
        {
          gfc_constructor *ci;
@@ -1594,9 +1600,7 @@ find_array_section (gfc_expr *expr, gfc_ref *ref)
        {
          if ((begin && begin->expr_type != EXPR_CONSTANT)
              || (finish && finish->expr_type != EXPR_CONSTANT)
-             || (step && step->expr_type != EXPR_CONSTANT)
-             || !lower
-             || !upper)
+             || (step && step->expr_type != EXPR_CONSTANT))
            {
              t = false;
              goto cleanup;
diff --git a/gcc/testsuite/gfortran.dg/pr105633.f90 b/gcc/testsuite/gfortran.dg/pr105633.f90
new file mode 100644 (file)
index 0000000..f2dbc5e
--- /dev/null
@@ -0,0 +1,8 @@
+! { dg-do compile }
+! PR fortran/105633 - ICE in find_array_section
+! Contributed by G.Steinmetz
+
+program p
+  integer, parameter :: a(:) = [1,2] ! { dg-error "deferred shape" }
+  print *, [a([1,2])]
+end