mirror of git://gcc.gnu.org/git/gcc.git
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>
|
2015-11-13 Steven G. Kargl <kargl@gccc.gnu.org>
|
||||||
|
|
||||||
PR fortran/68319
|
PR fortran/68319
|
||||||
|
|
|
||||||
|
|
@ -1162,6 +1162,35 @@ done:
|
||||||
{
|
{
|
||||||
expr = gfc_get_array_expr (ts.type, ts.kind, &where);
|
expr = gfc_get_array_expr (ts.type, ts.kind, &where);
|
||||||
expr->ts = ts;
|
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
|
else
|
||||||
expr = gfc_get_array_expr (BT_UNKNOWN, 0, &where);
|
expr = gfc_get_array_expr (BT_UNKNOWN, 0, &where);
|
||||||
|
|
@ -1171,6 +1200,7 @@ done:
|
||||||
expr->ts.u.cl->length_from_typespec = seen_ts;
|
expr->ts.u.cl->length_from_typespec = seen_ts;
|
||||||
|
|
||||||
*result = expr;
|
*result = expr;
|
||||||
|
|
||||||
return MATCH_YES;
|
return MATCH_YES;
|
||||||
|
|
||||||
syntax:
|
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>
|
2015-11-14 David Edelsohn <dje.gcc@gmail.com>
|
||||||
|
|
||||||
* g++.dg/cpp/ucn-1.C: Fix typo.
|
* 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