+2015-11-14 Steven G. Kargl <kargl@gcc.gnu.org>
+
+ PR fortran/67803
+ * array.c (gfc_match_array_constructor): If array constructor included
+ a CHARACTER typespec, check array elements for compatible type.
+
2015-11-13 Steven G. Kargl <kargl@gccc.gnu.org>
PR fortran/68319
{
expr = gfc_get_array_expr (ts.type, ts.kind, &where);
expr->ts = ts;
+
+ /* If the typespec is CHARACTER, check that array elements can
+ be converted. See PR fortran/67803. */
+ if (ts.type == BT_CHARACTER)
+ {
+ gfc_constructor *c;
+
+ c = gfc_constructor_first (head);
+ for (; c; c = gfc_constructor_next (c))
+ {
+ if (gfc_numeric_ts (&c->expr->ts)
+ || c->expr->ts.type == BT_LOGICAL)
+ {
+ gfc_error ("Incompatible typespec for array element at %L",
+ &c->expr->where);
+ return MATCH_ERROR;
+ }
+
+ /* Special case null(). */
+ if (c->expr->expr_type == EXPR_FUNCTION
+ && c->expr->ts.type == BT_UNKNOWN
+ && strcmp (c->expr->symtree->name, "null") == 0)
+ {
+ gfc_error ("Incompatible typespec for array element at %L",
+ &c->expr->where);
+ return MATCH_ERROR;
+ }
+ }
+ }
}
else
expr = gfc_get_array_expr (BT_UNKNOWN, 0, &where);
expr->ts.u.cl->length_from_typespec = seen_ts;
*result = expr;
+
return MATCH_YES;
syntax:
+2015-11-14 Steven G. Kargl <kargl@gcc.gnu.org>
+
+ PR fortran/67803
+ * gfortran.dg/pr67803.f90: New test.
+
2015-11-14 David Edelsohn <dje.gcc@gmail.com>
* g++.dg/cpp/ucn-1.C: Fix typo.
--- /dev/null
+! { dg-do compile }
+! PR fortran/67803
+! Original code submitted by Gerhard Steinmetz
+! <gerhard dot steinmetz dot fortran at t-online dot de >
+!
+program p
+ character(2) :: x(1)
+ x = '0' // [character :: 1] ! { dg-error "Incompatible typespec for" }
+ x = '0' // [character :: 1.] ! { dg-error "Incompatible typespec for" }
+ x = '0' // [character :: 1d1] ! { dg-error "Incompatible typespec for" }
+ x = '0' // [character :: (0.,1.)] ! { dg-error "Incompatible typespec for" }
+ x = '0' // [character :: .true.] ! { dg-error "Incompatible typespec for" }
+ x = '0' // [character :: null()] ! { dg-error "Incompatible typespec for" }
+end