http://gcc.gnu.org/bugzilla/show_bug.cgi?id=51945

--- Comment #7 from janus at gcc dot gnu.org ---
(In reply to janus from comment #6)
> Btw, here is a variant which triggers an internal error similar to comment
> 3, but already with a clean trunk:

I guess one could just get rid of the internal error like this:


Index: gcc/fortran/intrinsic.c
===================================================================
--- gcc/fortran/intrinsic.c    (revision 201631)
+++ gcc/fortran/intrinsic.c    (working copy)
@@ -4430,7 +4430,7 @@ gfc_convert_type (gfc_expr *expr, gfc_typespec *ts
    The possible values are:

      1 Generate a gfc_error()
-     2 Generate a gfc_internal_error().
+     2 No error.

    'wflag' controls the warning related to conversion.  */

@@ -4574,27 +4574,16 @@ gfc_convert_type_warn (gfc_expr *expr, gfc_typespe

   if (gfc_is_constant_expr (expr->value.function.actual->expr)
       && !do_simplify (sym, expr))
-    {
+    return false;        /* Error already generated in do_simplify() */

-      if (eflag == 2)
-    goto bad;
-      return false;        /* Error already generated in do_simplify() */
-    }
-
   return true;

 bad:
   if (eflag == 1)
-    {
-      gfc_error ("Can't convert %s to %s at %L",
-         gfc_typename (&from_ts), gfc_typename (ts), &expr->where);
-      return false;
-    }
+    gfc_error ("Can't convert %s to %s at %L",
+           gfc_typename (&from_ts), gfc_typename (ts), &expr->where);

-  gfc_internal_error ("Can't convert %s to %s at %L",
-              gfc_typename (&from_ts), gfc_typename (ts),
-              &expr->where);
-  /* Not reached */
+  return false;
 }

Reply via email to