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.