https://gcc.gnu.org/bugzilla/show_bug.cgi?id=107000
--- Comment #5 from anlauf at gcc dot gnu.org ---
(In reply to kargl from comment #4)
> I think we need to expand the checking in array.cc
>
> /* Convert components of an array constructor to the type in ts. */
>
> static match
> walk_array_constructor (gfc_typespec *ts, gfc_constructor_base head)
>
> I haven't had time to look deeper, but this function should be comparing
> the typespecs of REAL and -'1' or +'1'. That should fail. I suspect that
> the EXPR_OP of type_expr is allowing the array constructor walk to succeed.
You mean sth. like:
diff --git a/gcc/fortran/array.cc b/gcc/fortran/array.cc
index bbdb5b392fc..78a15917cec 100644
--- a/gcc/fortran/array.cc
+++ b/gcc/fortran/array.cc
@@ -1213,7 +1213,7 @@ walk_array_constructor (gfc_typespec *ts,
gfc_constructor_base head)
return m;
}
else if (!gfc_convert_type_warn (e, ts, 1, 1, true)
- && e->ts.type != BT_UNKNOWN)
+ && (e->ts.type != BT_UNKNOWN || e->expr_type == EXPR_OP))
return MATCH_ERROR;
}
return MATCH_YES;
in addition to the fix from comment#2? This works and regtests ok.