re PR fortran/67803 (ICE on concatenating wrong character array constructor)
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-14 Steven G. Kargl <kargl@gcc.gnu.org> PR fortran/67803 * gfortran.dg/pr67803.f90: New test. From-SVN: r230379
This commit is contained in:
parent
230b4edeee
commit
67f0527a22
|
@ -1,3 +1,9 @@
|
|||
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
|
||||
|
|
|
@ -1162,6 +1162,35 @@ done:
|
|||
{
|
||||
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);
|
||||
|
@ -1171,6 +1200,7 @@ done:
|
|||
expr->ts.u.cl->length_from_typespec = seen_ts;
|
||||
|
||||
*result = expr;
|
||||
|
||||
return MATCH_YES;
|
||||
|
||||
syntax:
|
||||
|
|
|
@ -1,3 +1,8 @@
|
|||
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.
|
||||
|
|
|
@ -0,0 +1,14 @@
|
|||
! { 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
|
Loading…
Reference in New Issue