re PR fortran/35849 ("wrong" line shown in error message for parameter)
authorJerry DeLisle <jvdelisle@gcc.gnu.org>
Mon, 4 Jul 2016 19:14:54 +0000 (19:14 +0000)
committerJerry DeLisle <jvdelisle@gcc.gnu.org>
Mon, 4 Jul 2016 19:14:54 +0000 (19:14 +0000)
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.

* gfortran.dg: pr35849.f90: New test.

Co-Authored-By: Steven G. Kargl <kargl@gcc.gnu.org>
From-SVN: r237993

gcc/fortran/ChangeLog
gcc/fortran/simplify.c
gcc/testsuite/ChangeLog
gcc/testsuite/gfortran.dg/pr35849.f90 [new file with mode: 0644]

index 9ecdc82e45511a13f9c183c8fac733f9d7d2ff61..37481e566cfb56b4dca8d5ce62b55bfeac25f4db 100644 (file)
@@ -1,3 +1,10 @@
+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
index a63101072f1389ab72d59a32d6dc217a51daa000..4c8bb830808aa8722ffa79291a4d4cab8770b54e 100644 (file)
@@ -3280,7 +3280,6 @@ gfc_simplify_ishftc (gfc_expr *e, gfc_expr *s, gfc_expr *sz)
        return NULL;
 
       gfc_extract_int (sz, &ssize);
-
     }
   else
     ssize = isize;
@@ -3294,7 +3293,10 @@ gfc_simplify_ishftc (gfc_expr *e, gfc_expr *s, gfc_expr *sz)
     {
       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;
     }
 
index 9e819ac4ed25c6a1dadbc697f0794e0f618c07c8..1c6ff51c4e8b33f6d371a9ae5e4e744424dc6c24 100644 (file)
@@ -1,3 +1,8 @@
+2016-07-04  Jerry DeLisle  <jvdelisle@gcc.gnu.org>
+
+       PR fortran/35849
+       * gfortran.dg: pr35849.f90: New test.
+
 2016-07-04  Jakub Jelinek  <jakub@redhat.com>
 
        PR c++/71739
diff --git a/gcc/testsuite/gfortran.dg/pr35849.f90 b/gcc/testsuite/gfortran.dg/pr35849.f90
new file mode 100644 (file)
index 0000000..39ba48c
--- /dev/null
@@ -0,0 +1,9 @@
+! { 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