Fortran: generate error message for negative elements in SHAPE array
authorHarald Anlauf <anlauf@gmx.de>
Thu, 14 Oct 2021 18:19:50 +0000 (20:19 +0200)
committerHarald Anlauf <anlauf@gmx.de>
Thu, 14 Oct 2021 18:19:50 +0000 (20:19 +0200)
gcc/fortran/ChangeLog:

PR fortran/102717
* simplify.c (gfc_simplify_reshape): Replace assert by error
message for negative elements in SHAPE array.

gcc/testsuite/ChangeLog:

PR fortran/102717
* gfortran.dg/reshape_shape_2.f90: New test.

gcc/fortran/simplify.c
gcc/testsuite/gfortran.dg/reshape_shape_2.f90 [new file with mode: 0644]

index f40e493..d675f2c 100644 (file)
@@ -6840,7 +6840,13 @@ gfc_simplify_reshape (gfc_expr *source, gfc_expr *shape_exp,
       gfc_extract_int (e, &shape[rank]);
 
       gcc_assert (rank >= 0 && rank < GFC_MAX_DIMENSIONS);
-      gcc_assert (shape[rank] >= 0);
+      if (shape[rank] < 0)
+       {
+         gfc_error ("The SHAPE array for the RESHAPE intrinsic at %L has a "
+                    "negative value %d for dimension %d",
+                    &shape_exp->where, shape[rank], rank+1);
+         return &gfc_bad_expr;
+       }
 
       rank++;
     }
diff --git a/gcc/testsuite/gfortran.dg/reshape_shape_2.f90 b/gcc/testsuite/gfortran.dg/reshape_shape_2.f90
new file mode 100644 (file)
index 0000000..8f17576
--- /dev/null
@@ -0,0 +1,7 @@
+! { dg-do compile }
+! PR fortran/102717
+
+program p
+  integer, parameter :: a(1) = 2
+  integer, parameter :: b(2) = reshape([3,4], -[a]) ! { dg-error "negative" }
+end