+2016-07-04 Jerry DeLisle <jvdelisle@gcc.gnu.org>
+ Steven G. Kargl <kargl@gcc.gnu.org>
+
+ PR fortran/35849
+ * simplify.c (gfc_simplify_ishftc): Check that absolute value of
+ SHIFT is less than or equal to SIZE.
+
2016-07-01 Jakub Jelinek <jakub@redhat.com>
PR fortran/71687
return NULL;
gfc_extract_int (sz, &ssize);
-
}
else
ssize = isize;
{
if (sz == NULL)
gfc_error ("Magnitude of second argument of ISHFTC exceeds "
- "BIT_SIZE of first argument at %L", &s->where);
+ "BIT_SIZE of first argument at %C");
+ else
+ gfc_error ("Absolute value of SHIFT shall be less than or equal "
+ "to SIZE at %C");
return &gfc_bad_expr;
}
--- /dev/null
+! { dg-do compile }
+! PR35849
+INTEGER, PARAMETER :: j = 15
+INTEGER, PARAMETER, DIMENSION(10) :: A = [(i, i = 1,10)]
+INTEGER, PARAMETER, DIMENSION(10) :: B = ISHFTC(j, A, -20) ! { dg-error "must be positive" }
+INTEGER, PARAMETER, DIMENSION(10) :: C = ISHFTC(1_1, A, j) ! { dg-error "less than or equal to BIT_SIZE" }
+INTEGER, PARAMETER, DIMENSION(10) :: D = ISHFTC(3, A, 5) ! { dg-error "Absolute value of SHIFT shall be less than or equal" }
+INTEGER, PARAMETER, DIMENSION(10) :: E = ISHFTC(3_1, A) ! { dg-error "second argument of ISHFTC exceeds BIT_SIZE of first argument" }
+end