[multiple changes]
authorJanus Weil <janus@gcc.gnu.org>
Wed, 9 Nov 2016 20:33:24 +0000 (21:33 +0100)
committerJanus Weil <janus@gcc.gnu.org>
Wed, 9 Nov 2016 20:33:24 +0000 (21:33 +0100)
2016-11-09  Mikael Morin  <mikael@gcc.gnu.org>
    Janus Weil  <janus@gcc.gnu.org>

PR fortran/46459
* interface.c (compare_actual_formal): Add safety checks to avoid ICE.

2016-11-09  Janus Weil  <janus@gcc.gnu.org>

PR fortran/46459
* gfortran.dg/volatile14.f90: New test.

From-SVN: r242020

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

index ab59584852c7cad3863481b88016c8551df0f820..9c0db269f1ddb2438d8d7e2d81c09817eb8e89ba 100644 (file)
@@ -1,10 +1,16 @@
+2016-11-09  Mikael Morin  <mikael@gcc.gnu.org>
+           Janus Weil  <janus@gcc.gnu.org>
+
+       PR fortran/46459
+       * interface.c (compare_actual_formal): Add safety checks to avoid ICE.
+
 2016-11-09  Fritz O. Reese <fritzoreese@gmail.com>
 
        PR fortran/78259
        * trans-expr.c (gfc_trans_subcomponent_assign): Guard against NULL
        values.
 
-2016-11-09  Steve Kargl <kargl@gcc.gnu.org>
+2016-11-09  Steven G. Kargl  <kargl@gcc.gnu.org>
            Janus Weil  <janus@gcc.gnu.org>
 
        PR fortran/60777
index 4dd432ef23d21fc145432ab0cb581ab4eadbc54b..98a61dfe3bc3f69588bd59711842d92b0c5b71f7 100644 (file)
@@ -3190,6 +3190,7 @@ compare_actual_formal (gfc_actual_arglist **ap, gfc_formal_arglist *formal,
         shape array, if the dummy argument has the VOLATILE attribute.  */
 
       if (f->sym->attr.volatile_
+         && a->expr->expr_type == EXPR_VARIABLE
          && a->expr->symtree->n.sym->as
          && a->expr->symtree->n.sym->as->type == AS_ASSUMED_SHAPE
          && !(f->sym->as && f->sym->as->type == AS_ASSUMED_SHAPE))
@@ -3219,6 +3220,7 @@ compare_actual_formal (gfc_actual_arglist **ap, gfc_formal_arglist *formal,
         dummy argument has the VOLATILE attribute.  */
 
       if (f->sym->attr.volatile_
+         && a->expr->expr_type == EXPR_VARIABLE
          && a->expr->symtree->n.sym->attr.pointer
          && a->expr->symtree->n.sym->as
          && !(f->sym->as
index bc80499f3d017adb7be43fae75ca73f7c5afb188..f295754706f04625ac76bda4d0138c67df054de7 100644 (file)
@@ -1,3 +1,8 @@
+2016-11-09  Janus Weil  <janus@gcc.gnu.org>
+
+       PR fortran/46459
+       * gfortran.dg/volatile14.f90: New test.
+
 2016-11-09  Uros Bizjak  <ubizjak@gmail.com>
 
        PR target/78262
diff --git a/gcc/testsuite/gfortran.dg/volatile14.f90 b/gcc/testsuite/gfortran.dg/volatile14.f90
new file mode 100644 (file)
index 0000000..15730c8
--- /dev/null
@@ -0,0 +1,29 @@
+! { dg-do compile }
+!
+! PR 46459: ICE (segfault): Invalid read in compare_actual_formal [error recovery]
+!
+! Contributed by Harald Anlauf <anlauf@gmx.de>
+
+  call sub (1)
+contains
+  subroutine sub (j)
+    integer, volatile :: j
+  end subroutine
+end
+
+subroutine sub1 ()
+  call sub2 (1)         ! { dg-error "Explicit interface required" }
+end subroutine
+
+subroutine sub2 (j)
+  integer, volatile :: j
+end subroutine
+
+subroutine sub3 ()
+  interface
+     subroutine sub2 (j)
+       integer, volatile :: j
+     end subroutine
+  end interface
+  call sub2 (1)
+end subroutine