re PR fortran/61968 (ICE (assembly failure) due to wrongly generating a vtable for TYPE(*) / BT_ASSUMED_TYPE)
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 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. From-SVN: r271076
This commit is contained in:
parent
93fd52fc8c
commit
15e5858fbe
5 changed files with 106 additions and 1 deletions
|
@ -1,3 +1,9 @@
|
|||
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
|
||||
|
|
|
@ -2989,7 +2989,8 @@ compare_actual_formal (gfc_actual_arglist **ap, gfc_formal_arglist *formal,
|
|||
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
|
||||
|
|
|
@ -1,3 +1,9 @@
|
|||
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
|
||||
|
|
46
gcc/testsuite/gfortran.dg/assumed_type_10.f90
Normal file
46
gcc/testsuite/gfortran.dg/assumed_type_10.f90
Normal file
|
@ -0,0 +1,46 @@
|
|||
! { 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" } }
|
46
gcc/testsuite/gfortran.dg/assumed_type_11.f90
Normal file
46
gcc/testsuite/gfortran.dg/assumed_type_11.f90
Normal file
|
@ -0,0 +1,46 @@
|
|||
! { 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" } }
|
Loading…
Add table
Reference in a new issue