mirror of git://gcc.gnu.org/git/gcc.git
re PR fortran/85798 (ICE in get_array_index, at fortran/data.c:69)
2018-12-22 Steven G . Kargl <kargl@gcc.gnu.org> PR fortran/85798 * decl.c (gfc_match_data): If a component of a derived type entity appears in data statement, check that does not have the allocatable attribute. 2018-12-22 Steven G . Kargl <kargl@gcc.gnu.org> PR fortran/85798 * gfortran.dg/pr85798.f90: New test. From-SVN: r267356
This commit is contained in:
parent
73f5d219bb
commit
02543f0263
|
|
@ -1,3 +1,10 @@
|
||||||
|
2018-12-22 Steven G . Kargl <kargl@gcc.gnu.org>
|
||||||
|
|
||||||
|
PR fortran/85798
|
||||||
|
* decl.c (gfc_match_data): If a component of a derived type entity
|
||||||
|
appears in data statement, check that does not have the allocatable
|
||||||
|
attribute.
|
||||||
|
|
||||||
2018-12-22 Steven G. Kargl <kargl@gcc.gnu.org>
|
2018-12-22 Steven G. Kargl <kargl@gcc.gnu.org>
|
||||||
|
|
||||||
PR fortran/88169
|
PR fortran/88169
|
||||||
|
|
|
||||||
|
|
@ -596,6 +596,7 @@ match
|
||||||
gfc_match_data (void)
|
gfc_match_data (void)
|
||||||
{
|
{
|
||||||
gfc_data *new_data;
|
gfc_data *new_data;
|
||||||
|
gfc_expr *e;
|
||||||
match m;
|
match m;
|
||||||
|
|
||||||
/* Before parsing the rest of a DATA statement, check F2008:c1206. */
|
/* Before parsing the rest of a DATA statement, check F2008:c1206. */
|
||||||
|
|
@ -632,6 +633,30 @@ gfc_match_data (void)
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Check for an entity with an allocatable component, which is not
|
||||||
|
allowed. */
|
||||||
|
e = new_data->var->expr;
|
||||||
|
if (e)
|
||||||
|
{
|
||||||
|
bool invalid;
|
||||||
|
|
||||||
|
invalid = false;
|
||||||
|
for (gfc_ref *ref = e->ref; ref; ref = ref->next)
|
||||||
|
if ((ref->type == REF_COMPONENT
|
||||||
|
&& ref->u.c.component->attr.allocatable)
|
||||||
|
|| (ref->type == REF_ARRAY
|
||||||
|
&& e->symtree->n.sym->attr.pointer != 1
|
||||||
|
&& ref->u.ar.as && ref->u.ar.as->type == AS_DEFERRED))
|
||||||
|
invalid = true;
|
||||||
|
|
||||||
|
if (invalid)
|
||||||
|
{
|
||||||
|
gfc_error ("Allocatable component or deferred-shaped array "
|
||||||
|
"near %C in DATA statement");
|
||||||
|
goto cleanup;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
m = top_val_list (new_data);
|
m = top_val_list (new_data);
|
||||||
if (m != MATCH_YES)
|
if (m != MATCH_YES)
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,8 @@
|
||||||
|
2018-12-26 Steven G . Kargl <kargl@gcc.gnu.org>
|
||||||
|
|
||||||
|
PR fortran/85798
|
||||||
|
* gfortran.dg/pr85798.f90: New test.
|
||||||
|
|
||||||
2018-12-21 Steven G. Kargl <kargl@gcc.gnu.org>
|
2018-12-21 Steven G. Kargl <kargl@gcc.gnu.org>
|
||||||
|
|
||||||
PR fortran/88169
|
PR fortran/88169
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,14 @@
|
||||||
|
! { dg-do compile }
|
||||||
|
program p
|
||||||
|
type t
|
||||||
|
integer, allocatable :: a(:)
|
||||||
|
end type
|
||||||
|
type u
|
||||||
|
real x
|
||||||
|
type(t) y
|
||||||
|
end type
|
||||||
|
type(t) :: z
|
||||||
|
type(u) :: q
|
||||||
|
data z%a(1) / 789 / ! { dg-error "Allocatable component" }
|
||||||
|
data q%y%a(1) / 789 / ! { dg-error "Allocatable component" }
|
||||||
|
end
|
||||||
Loading…
Reference in New Issue