Hello world, the attached patch fixes a missing check for eoshift.
If you're wondering what the "else" belongs to - it is if (boundary != NULL) Regression-tested. OK for trunk? Regards Thomas 2018-01-03 Thomas Koenig <tkoe...@gcc.gnu.org> PR fortran/83664 * check.c (gfc_check_eoshift): Error for missing boundary if array is not one of the standard types. 2018-01-03 Thomas Koenig <tkoe...@gcc.gnu.org> PR fortran/83664 * gfortran.dg/eoshift_7.f90: New test.
Index: check.c =================================================================== --- check.c (Revision 255788) +++ check.c (Arbeitskopie) @@ -2270,6 +2270,26 @@ gfc_check_eoshift (gfc_expr *array, gfc_expr *shif return false; } } + else + { + switch (array->ts.type) + { + case BT_INTEGER: + case BT_LOGICAL: + case BT_REAL: + case BT_COMPLEX: + case BT_CHARACTER: + break; + + default: + gfc_error ("Missing %qs argument to %qs intrinsic at %L for %qs " + "of type %qs", gfc_current_intrinsic_arg[2]->name, + gfc_current_intrinsic, &array->where, + gfc_current_intrinsic_arg[0]->name, + gfc_typename (&array->ts)); + return false; + } + } return true; }
! { dg-do compile } program main type t integer :: x end type t type(t), dimension(2) :: a, b a(1)%x = 1 a(2)%x = 2 b = eoshift(a,1) ! { dg-error "Missing 'boundary' argument to 'eoshift' intrinsic" } print *,b%x end program main