Fortran: error recovery simplifying UNPACK for insufficient FIELD [PR107922]
gcc/fortran/ChangeLog: PR fortran/107922 * simplify.cc (gfc_simplify_unpack): Terminate simplification when array-valued argument FIELD does not provide enough elements. gcc/testsuite/ChangeLog: PR fortran/107922 * gfortran.dg/unpack_field_1.f90: New test.
This commit is contained in:
parent
98d6e4b6f1
commit
24b9337d1f
2 changed files with 25 additions and 1 deletions
|
@ -8485,7 +8485,16 @@ gfc_simplify_unpack (gfc_expr *vector, gfc_expr *mask, gfc_expr *field)
|
|||
}
|
||||
}
|
||||
else if (field->expr_type == EXPR_ARRAY)
|
||||
e = gfc_copy_expr (field_ctor->expr);
|
||||
{
|
||||
if (field_ctor)
|
||||
e = gfc_copy_expr (field_ctor->expr);
|
||||
else
|
||||
{
|
||||
/* Not enough elements in array FIELD. */
|
||||
gfc_free_expr (result);
|
||||
return &gfc_bad_expr;
|
||||
}
|
||||
}
|
||||
else
|
||||
e = gfc_copy_expr (field);
|
||||
|
||||
|
|
15
gcc/testsuite/gfortran.dg/unpack_field_1.f90
Normal file
15
gcc/testsuite/gfortran.dg/unpack_field_1.f90
Normal file
|
@ -0,0 +1,15 @@
|
|||
! { dg-do compile }
|
||||
! PR fortran/107922 - ICE in gfc_simplify_unpack
|
||||
! Test error recovery when shapes of FIELD and MASK do not match
|
||||
! Contributed by G.Steinmetz
|
||||
|
||||
program p
|
||||
integer, parameter :: a(2) = 1
|
||||
integer, parameter :: d(3) = 1
|
||||
logical, parameter :: mask(3) = [.false.,.true.,.false.]
|
||||
integer, parameter :: b(2) = unpack(a,mask,a) ! { dg-error "must have identical shape" }
|
||||
integer :: c(3) = unpack(a,[.false.,.true.,.false.],a) ! { dg-error "must have identical shape" }
|
||||
print *, unpack(a,mask,a) ! { dg-error "must have identical shape" }
|
||||
print *, unpack(a,mask,d) ! OK
|
||||
print *, unpack(a,mask,3) ! OK
|
||||
end
|
Loading…
Add table
Reference in a new issue