re PR fortran/83515 (ICE: Invalid expression in gfc_element_size)
authorHarald Anlauf <anlauf@gmx.de>
Sun, 31 Mar 2019 18:33:51 +0000 (18:33 +0000)
committerHarald Anlauf <anlauf@gcc.gnu.org>
Sun, 31 Mar 2019 18:33:51 +0000 (18:33 +0000)
2019-03-31  Harald Anlauf  <anlauf@gmx.de>

PR fortran/83515
PR fortran/85797
* trans-types.c (gfc_typenode_for_spec): Handle conversion for
procedure pointers.
* target-memory.c (gfc_element_size): Handle size determination
for procedure pointers.

PR fortran/83515
PR fortran/85797
* gfortran.dg/pr85797.f90: New test.

From-SVN: r270045

gcc/fortran/ChangeLog
gcc/fortran/target-memory.c
gcc/fortran/trans-types.c
gcc/testsuite/ChangeLog
gcc/testsuite/gfortran.dg/pr85797.f90 [new file with mode: 0644]

index e80033a7d4e4f679b1fa167968c86da382d8e190..61eb67b8b9a4ab15b8944bf9d3e907806be5d3f1 100644 (file)
@@ -1,3 +1,12 @@
+2019-03-31  Harald Anlauf  <anlauf@gmx.de>
+
+       PR fortran/83515
+       PR fortran/85797
+       * trans-types.c (gfc_typenode_for_spec): Handle conversion for
+       procedure pointers.
+       * target-memory.c (gfc_element_size): Handle size determination
+       for procedure pointers.
+
 2019-03-31  Thomas Koenig  <tkoenig@gcc.gnu.org>
 
        * dump-parse-tree.c (debug):  Add for symbol_attribute *,
index 09af2a568182ce061dd321fa26338dc61ef1cdb1..1354c577eceacfb5317f2579ea474958b954704f 100644 (file)
@@ -120,6 +120,7 @@ gfc_element_size (gfc_expr *e, size_t *siz)
     case BT_CLASS:
     case BT_VOID:
     case BT_ASSUMED:
+    case BT_PROCEDURE:
       {
        /* Determine type size without clobbering the typespec for ISO C
           binding types.  */
index 9ae516bb666417cab0a2c4537d679955c37e82ab..22410b551e6cfea065eb6ed14618ef062b1c316d 100644 (file)
@@ -1194,6 +1194,9 @@ gfc_typenode_for_spec (gfc_typespec * spec, int codim)
            basetype = pfunc_type_node;
        }
        break;
+    case BT_PROCEDURE:
+      basetype = pfunc_type_node;
+      break;
     default:
       gcc_unreachable ();
     }
index 2377b1a4cb7fdc549b394fb7c93e3613eb577de1..3c173b5b7265a2cec7c4d1781189de2f56acb6b6 100644 (file)
@@ -1,3 +1,9 @@
+2019-03-31  Harald Anlauf  <anlauf@gmx.de>
+
+       PR fortran/83515
+       PR fortran/85797
+       * gfortran.dg/pr85797.f90: New test.
+
 2019-03-31  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>
 
        * gcc.dg/attr-aligned-3.c: Enable on *-*-solaris2.*.
diff --git a/gcc/testsuite/gfortran.dg/pr85797.f90 b/gcc/testsuite/gfortran.dg/pr85797.f90
new file mode 100644 (file)
index 0000000..fe6d96d
--- /dev/null
@@ -0,0 +1,33 @@
+! { dg-do compile }
+! { dg-options "-Wall" }
+! PR fortran/83515 - ICE: Invalid expression in gfc_element_size 
+! PR fortran/85797 - ICE in gfc_element_size, at fortran/target-memory.c:126
+
+subroutine a
+  c = transfer (a, b)           ! { dg-warning "Non-RECURSIVE procedure" }
+end
+
+recursive subroutine d
+  c = transfer (d, b)
+end
+
+recursive subroutine e
+  k = transfer (transfer (e, e), 1)
+end
+
+subroutine f
+  use, intrinsic :: iso_c_binding
+  integer(c_intptr_t) :: b, c
+  c = transfer (transfer (b, a), b)
+end
+
+module m
+contains
+  function f () result (z)      ! { dg-warning "Return value" }
+    class(*), pointer :: z
+  end function f
+  recursive subroutine s (q)
+    procedure(f) :: q
+    call s (q)
+  end subroutine s
+end