+2019-05-10 Thomas Koenig <tkoenig@gcc.gnu.org>
+
+ PR fortran/61968
+ * interface.c (compare_actual_formal): Do not create a vtab if
+ the actual argument is assumed type.
+
2019-05-10 Paul Thomas <pault@gcc.gnu.org>
PR fortran/90093
polymorphic formal arguments. */
if (UNLIMITED_POLY (f->sym)
&& a->expr->ts.type != BT_DERIVED
- && a->expr->ts.type != BT_CLASS)
+ && a->expr->ts.type != BT_CLASS
+ && a->expr->ts.type != BT_ASSUMED)
gfc_find_vtab (&a->expr->ts);
if (a->expr->expr_type == EXPR_NULL
+2019-05-10 Thomas Koenig <tkoenig@gcc.gnu.org>
+
+ PR fortran/61968
+ * gfortran.dg/assumed_type_10.f90: New test case.
+ * gfortran.dg/assumed_type_11.f90: New test case.
+
2019-05-10 Iain Sandoe <iain@sandoe.co.uk>
* gcc.target/x86_64/abi/avx512f/abi-avx512f.exp: Darwin is
--- /dev/null
+! { dg-do compile }
+! { dg-options "-O0 -fdump-tree-original" }
+! PR 61968 - this used to generate invalid assembler containing
+! TYPE(*).
+
+module testmod
+ use iso_c_binding, only: c_size_t, c_int32_t, c_int64_t
+ implicit none
+
+ interface test
+ procedure :: test_32
+ procedure :: test_array
+ end interface test
+
+ interface
+ subroutine test_lib (a, len) bind(C, name="xxx")
+ use iso_c_binding, only: c_size_t
+ type(*), dimension(*) :: a
+ integer(c_size_t), value :: len
+ end subroutine
+ end interface
+
+contains
+
+ subroutine test_32 (a, len)
+ type(*), dimension(*) :: a
+ integer(c_int32_t), value :: len
+ call test_lib (a, int (len, kind=c_size_t))
+ end subroutine
+
+ subroutine test_array (a)
+ use iso_c_binding, only: c_size_t
+ class(*), dimension(..), target :: a
+ call test_lib (a, int (sizeof (a), kind=c_size_t))
+ end subroutine
+
+end module
+
+ subroutine test_32_ (a, len)
+ use iso_c_binding, only: c_int32_t
+ use testmod
+ type(*), dimension(*) :: a
+ integer(c_int32_t), value :: len
+ call test (a, len)
+ end subroutine
+! { dg-final { scan-tree-dump-not "! __vtype_TYPE\\(*\\)" "original" } }
--- /dev/null
+! { dg-do compile }
+! { dg-options "-O3 -fdump-tree-original" }
+! PR 61968 - this used to generate invalid assembler containing
+! TYPE(*).
+
+module testmod
+ use iso_c_binding, only: c_size_t, c_int32_t, c_int64_t
+ implicit none
+
+ interface test
+ procedure :: test_32
+ procedure :: test_array
+ end interface test
+
+ interface
+ subroutine test_lib (a, len) bind(C, name="xxx")
+ use iso_c_binding, only: c_size_t
+ type(*), dimension(*) :: a
+ integer(c_size_t), value :: len
+ end subroutine
+ end interface
+
+contains
+
+ subroutine test_32 (a, len)
+ type(*), dimension(*) :: a
+ integer(c_int32_t), value :: len
+ call test_lib (a, int (len, kind=c_size_t))
+ end subroutine
+
+ subroutine test_array (a)
+ use iso_c_binding, only: c_size_t
+ class(*), dimension(..), target :: a
+ call test_lib (a, int (sizeof (a), kind=c_size_t))
+ end subroutine
+
+end module
+
+ subroutine test_32_ (a, len)
+ use iso_c_binding, only: c_int32_t
+ use testmod
+ type(*), dimension(*) :: a
+ integer(c_int32_t), value :: len
+ call test (a, len)
+ end subroutine
+! { dg-final { scan-tree-dump-not "! __vtype_TYPE\\(*\\)" "original" } }