re PR fortran/54189 (ICE (segfault) with invalid assumed-size dummy)
authorJanus Weil <janus@gcc.gnu.org>
Thu, 30 May 2013 10:19:16 +0000 (12:19 +0200)
committerJanus Weil <janus@gcc.gnu.org>
Thu, 30 May 2013 10:19:16 +0000 (12:19 +0200)
2013-05-30  Janus Weil  <janus@gcc.gnu.org>

PR fortran/54189
* resolve.c (check_assumed_size_reference): Check for e->ref.

2013-05-30  Janus Weil  <janus@gcc.gnu.org>

PR fortran/54189
* gfortran.dg/assumed_size_1.f90: New.

From-SVN: r199445

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

index 87aa9bce433b91951504806b7912564ab3963794..af467b6b2a4e1afbffc757964b811f988ea7d74d 100644 (file)
@@ -1,3 +1,8 @@
+2013-05-30  Janus Weil  <janus@gcc.gnu.org>
+
+       PR fortran/54189
+       * resolve.c (check_assumed_size_reference): Check for e->ref.
+
 2013-05-30  Tobias Burnus  <burnus@net-b.de>
 
        PR fortran/57458
index 4cfc858b7c48262ff10884afeb4f675bac3b043c..b2e8fdc1bb95ccdbb4840e99991253b1a446e276 100644 (file)
@@ -1459,7 +1459,7 @@ check_assumed_size_reference (gfc_symbol *sym, gfc_expr *e)
 
   /* FIXME: The comparison "e->ref->u.ar.type == AR_FULL" is wrong.
      What should it be?  */
-  if ((e->ref->u.ar.end[e->ref->u.ar.as->rank - 1] == NULL)
+  if (e->ref && (e->ref->u.ar.end[e->ref->u.ar.as->rank - 1] == NULL)
          && (e->ref->u.ar.as->type == AS_ASSUMED_SIZE)
               && (e->ref->u.ar.type == AR_FULL))
     {
index 6af715564c9a54cd7c1358a61da21a37c7c4653a..479c602ef6b4a90a7e0a64ddd4064150348f9b7b 100644 (file)
@@ -1,3 +1,8 @@
+2013-05-30  Janus Weil  <janus@gcc.gnu.org>
+
+       PR fortran/54189
+       * gfortran.dg/assumed_size_1.f90: New.
+
 2013-05-30  Zhenqiang Chen  <zhenqiang.chen@linaro.org>
 
        * gcc.dg/shrink-wrap-alloca.c: New added.
diff --git a/gcc/testsuite/gfortran.dg/assumed_size_1.f90 b/gcc/testsuite/gfortran.dg/assumed_size_1.f90
new file mode 100644 (file)
index 0000000..1ad1ae8
--- /dev/null
@@ -0,0 +1,17 @@
+! { dg-do compile }
+!
+! PR 54189: ICE (segfault) with invalid assumed-size dummy
+!
+! Contributed by Tobias Burnus <burnus@gcc.gnu.org>
+
+  implicit none
+  procedure(g), pointer :: x  ! { dg-error "must be a dummy argument" }
+  x => g
+
+contains
+
+  function g()        ! { dg-error "must be a dummy argument" }
+    integer :: g(*)
+  end function
+
+end