https://gcc.gnu.org/bugzilla/show_bug.cgi?id=105813

kargl at gcc dot gnu.org changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
   Last reconfirmed|                            |2022-06-02
     Ever confirmed|0                           |1
           Priority|P3                          |P4
                 CC|                            |kargl at gcc dot gnu.org
             Status|UNCONFIRMED                 |NEW

--- Comment #1 from kargl at gcc dot gnu.org ---
Instead of an ICE on a user's invalid code, issue an actual error message.

diff --git a/gcc/fortran/simplify.cc b/gcc/fortran/simplify.cc
index 233cc42137f..a962de2249a 100644
--- a/gcc/fortran/simplify.cc
+++ b/gcc/fortran/simplify.cc
@@ -8478,16 +8460,22 @@ gfc_simplify_unpack (gfc_expr *vector, gfc_expr *mask,
gfc_expr *field)

   vector_ctor = gfc_constructor_first (vector->value.constructor);
   mask_ctor = gfc_constructor_first (mask->value.constructor);
-  field_ctor
-    = field->expr_type == EXPR_ARRAY
-                           ? gfc_constructor_first (field->value.constructor)
-                           : NULL;
+  if (field->expr_type == EXPR_ARRAY)
+    field_ctor = gfc_constructor_first (field->value.constructor);
+  else
+    field_ctor = NULL;

   while (mask_ctor)
     {
       if (mask_ctor->expr->value.logical)
        {
-         gcc_assert (vector_ctor);
+         if (!vector_ctor)
+           {
+              gfc_error ("Size of vector at %L must be as large as the count "
+                         "of .true. values in mask at %L", &vector->where,
+                         &mask->where);
+              return NULL;
+           }
          e = gfc_copy_expr (vector_ctor->expr);
          vector_ctor = gfc_constructor_next (vector_ctor);
        }

Reply via email to