This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
[patch, fortran] Fix PR 83664, missing check on boundary argument for eoshift
- From: Thomas Koenig <tkoenig at netcologne dot de>
- To: "fortran at gcc dot gnu dot org" <fortran at gcc dot gnu dot org>, gcc-patches <gcc-patches at gcc dot gnu dot org>
- Date: Wed, 3 Jan 2018 12:13:53 +0100
- Subject: [patch, fortran] Fix PR 83664, missing check on boundary argument for eoshift
- Authentication-results: sourceware.org; auth=none
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 <tkoenig@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 <tkoenig@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