re PR fortran/80766 ([OOP] ICE with type-bound procedure returning an array)
authorJanus Weil <janus@gcc.gnu.org>
Mon, 22 May 2017 17:08:24 +0000 (19:08 +0200)
committerJanus Weil <janus@gcc.gnu.org>
Mon, 22 May 2017 17:08:24 +0000 (19:08 +0200)
2017-05-22  Janus Weil  <janus@gcc.gnu.org>

PR fortran/80766
* resolve.c (resolve_fl_derived): Make sure that vtype symbols are
properly resolved.

2017-05-22  Janus Weil  <janus@gcc.gnu.org>

PR fortran/80766
* gfortran.dg/typebound_call_28.f90: New test.

From-SVN: r248341

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

index 76418d94948b34a5c78995cea8ddf8efe4960d30..6977bd1372a96d3b650b017445cc54deb17425fa 100644 (file)
@@ -1,3 +1,9 @@
+2017-05-22  Janus Weil  <janus@gcc.gnu.org>
+
+       PR fortran/80766
+       * resolve.c (resolve_fl_derived): Make sure that vtype symbols are
+       properly resolved.
+
 2017-05-19  Paul Thomas  <pault@gcc.gnu.org>
 
        PR fortran/80333
index d50ffdb826ae3df56e4f63b05543689e717d912f..a5f4874d513bf7e772ee586fe1537192e57089d3 100644 (file)
@@ -13832,6 +13832,8 @@ resolve_fl_derived (gfc_symbol *sym)
          gfc_symbol *vtab = gfc_find_derived_vtab (data->ts.u.derived);
          gcc_assert (vtab);
          vptr->ts.u.derived = vtab->ts.u.derived;
+         if (!resolve_fl_derived0 (vptr->ts.u.derived))
+           return false;
        }
     }
 
index e162c862e43aad4d2e1983da464cab78b66375c8..d9a1e1c264d4bcdb36b095e93369d61bb3332dbd 100644 (file)
@@ -1,3 +1,8 @@
+2017-05-22  Janus Weil  <janus@gcc.gnu.org>
+
+       PR fortran/80766
+       * gfortran.dg/typebound_call_28.f90: New test.
+
 2017-05-22  Nathan Sidwell  <nathan@acm.org>
 
        * g++.dg/lookup/strong-using.C: New.
diff --git a/gcc/testsuite/gfortran.dg/typebound_call_28.f90 b/gcc/testsuite/gfortran.dg/typebound_call_28.f90
new file mode 100644 (file)
index 0000000..376c4c4
--- /dev/null
@@ -0,0 +1,37 @@
+! { dg-do compile }
+!
+! PR 80766: [7/8 Regression] [OOP] ICE with type-bound procedure returning an array
+!
+! Contributed by Vladimir Fuka <vladimir.fuka@gmail.com>
+
+module m1
+
+  type :: base
+  contains
+     procedure :: fun
+  end type
+
+  type, extends(base) :: child
+  end type
+
+contains
+
+  function fun(o) result(res)
+    real :: res(3)
+    class(base) :: o
+    res = 0
+  end function
+end module
+
+
+module m2
+contains
+
+  subroutine sub(o)
+    use m1
+    class(child) :: o
+    real :: res(3)
+
+    res = o%fun()
+  end subroutine
+end module