On Sun, Mar 14, 2021 at 08:22:58AM -0700, Jerry DeLisle wrote:
> > > > 
> > > > FAIL: gfortran.dg/pr87907.f90   -O  (internal compiler error)
> > > > FAIL: gfortran.dg/pr87907.f90   -O  (test for excess errors)
> > > > FAIL: gfortran.dg/pr96013.f90   -O  (test for excess errors)
> > > > FAIL: gfortran.dg/pr96025.f90   -O  (internal compiler error)
> > > > FAIL: gfortran.dg/pr96025.f90   -O   (test for errors, line 5)
> > > > FAIL: gfortran.dg/pr96025.f90   -O  (test for excess errors)
> > > 

No idea why I don't see the above.  This patch on top of
the previous patch might fix the last 3 FAILs.  (Watch
for copy-n-paste whitespace corruption.)

diff --git a/gcc/fortran/expr.c b/gcc/fortran/expr.c
index e1acc2db000..081487a45e6 100644
--- a/gcc/fortran/expr.c
+++ b/gcc/fortran/expr.c
@@ -3476,7 +3476,6 @@ gfc_specification_expr (gfc_expr *e)
     {
       gfc_error ("Expression at %L must be of INTEGER type, found %s",
                 &e->where, gfc_basic_typename (e->ts.type));
-      gfc_clear_ts (&e->ts);
       return false;
     }
 
@@ -5246,11 +5245,12 @@ gfc_traverse_expr (gfc_expr *expr, gfc_symbol *sym,
   if ((*func) (expr, sym, &f))
     return true;
 
-  if (expr->ts.type == BT_CHARACTER
-       && expr->ts.u.cl
-       && expr->ts.u.cl->length
-       && expr->ts.u.cl->length->expr_type != EXPR_CONSTANT
-       && gfc_traverse_expr (expr->ts.u.cl->length, sym, func, f))
+  if (expr->expr_type != EXPR_CONSTANT
+      && expr->ts.type == BT_CHARACTER
+      && expr->ts.u.cl
+      && expr->ts.u.cl->length
+      && expr->ts.u.cl->length->expr_type != EXPR_CONSTANT
+      && gfc_traverse_expr (expr->ts.u.cl->length, sym, func, f))
     return true;
 
   switch (expr->expr_type)

-- 
steve

Reply via email to