Commit b450b08d by Thomas Koenig

re PR fortran/72714 ([Coarray] ICE in gfc_array_init_size, at fortran/trans-array.c:5235)

2019-03-03  Thomas Koenig  <tkoenig@gcc.gnu.org>

	PR fortran/72714
	* resolve.c (resolve_allocate_expr): Add some tests for coarrays.

2019-03-03  Thomas Koenig  <tkoenig@gcc.gnu.org>

	PR fortran/72714
	* gfortran.dg/coarray_allocate_11.f90: New test.

From-SVN: r269352
parent 4a1a6fd7
2019-03-03 Thomas Koenig <tkoenig@gcc.gnu.org>
PR fortran/72714
* resolve.c (resolve_allocate_expr): Add some tests for coarrays.
2019-03-02 Harald Anlauf <anlauf@gmx.de> 2019-03-02 Harald Anlauf <anlauf@gmx.de>
PR fortran/89516 PR fortran/89516
......
...@@ -7766,13 +7766,54 @@ resolve_allocate_expr (gfc_expr *e, gfc_code *code, bool *array_alloc_wo_spec) ...@@ -7766,13 +7766,54 @@ resolve_allocate_expr (gfc_expr *e, gfc_code *code, bool *array_alloc_wo_spec)
if (codimension) if (codimension)
for (i = ar->dimen; i < ar->dimen + ar->codimen; i++) for (i = ar->dimen; i < ar->dimen + ar->codimen; i++)
if (ar->dimen_type[i] == DIMEN_THIS_IMAGE)
{ {
switch (ar->dimen_type[i])
{
case DIMEN_THIS_IMAGE:
gfc_error ("Coarray specification required in ALLOCATE statement " gfc_error ("Coarray specification required in ALLOCATE statement "
"at %L", &e->where); "at %L", &e->where);
goto failure; goto failure;
case DIMEN_RANGE:
if (ar->start[i] == 0 || ar->end[i] == 0)
{
/* If ar->stride[i] is NULL, we issued a previous error. */
if (ar->stride[i] == NULL)
gfc_error ("Bad array specification in ALLOCATE statement "
"at %L", &e->where);
goto failure;
}
else if (gfc_dep_compare_expr (ar->start[i], ar->end[i]) == 1)
{
gfc_error ("Upper cobound is less than lower cobound at %L",
&ar->start[i]->where);
goto failure;
}
break;
case DIMEN_ELEMENT:
if (ar->start[i]->expr_type == EXPR_CONSTANT)
{
gcc_assert (ar->start[i]->ts.type == BT_INTEGER);
if (mpz_cmp_si (ar->start[i]->value.integer, 1) < 0)
{
gfc_error ("Upper cobound is less than lower cobound "
" of 1 at %L", &ar->start[i]->where);
goto failure;
}
} }
break;
case DIMEN_STAR:
break;
default:
gfc_error ("Bad array specification in ALLOCATE statement at %L",
&e->where);
goto failure;
}
}
for (i = 0; i < ar->dimen; i++) for (i = 0; i < ar->dimen; i++)
{ {
if (ar->type == AR_ELEMENT || ar->type == AR_FULL) if (ar->type == AR_ELEMENT || ar->type == AR_FULL)
......
2019-03-03 Thomas Koenig <tkoenig@gcc.gnu.org>
PR fortran/72714
* gfortran.dg/coarray_allocate_11.f90: New test.
2019-03-02 Harald Anlauf <anlauf@gmx.de> 2019-03-02 Harald Anlauf <anlauf@gmx.de>
PR fortran/89516 PR fortran/89516
......
! { dg-do compile }
! { dg-additional-options -fcoarray=single }
program p
integer, allocatable :: z[:,:]
integer :: i
allocate (z[1:,*]) ! { dg-error "Bad array specification in ALLOCATE statement" }
allocate (z[:2,*]) ! { dg-error "Bad array specification in ALLOCATE statement" }
allocate (z[2:1,*]) ! { dg-error "Upper cobound is less than lower cobound" }
allocate (z[:0,*]) ! { dg-error "Bad array specification in ALLOCATE statement" }
allocate (z[0,*]) ! { dg-error "Upper cobound is less than lower cobound" }
allocate (z[1,*]) ! This is OK
allocate (z[1:1,*]) ! This is OK
allocate (z[i:i,*]) ! This is OK
allocate (z[i:i-1,*]) ! { dg-error "Upper cobound is less than lower cobound" }
end
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment