mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-03-25 01:30:44 +08:00
re PR fortran/28959 (ICE on derived type with host association)
2006-09-10 Paul Thomas <pault@gcc.gnu.org> PR fortran/28959 trans-types.c (gfc_get_derived_type): Use the parent namespace of the procedure if the type's own namespace does not have a parent. 2006-09-10 Paul Thomas <pault@gcc.gnu.org> PR fortran/28959 gfortran.dg/used_types_10: New test. From-SVN: r116816
This commit is contained in:
parent
c71d6a561e
commit
380bfbbd61
@ -1,3 +1,9 @@
|
||||
2006-09-10 Paul Thomas <pault@gcc.gnu.org>
|
||||
|
||||
PR fortran/28959
|
||||
trans-types.c (gfc_get_derived_type): Use the parent namespace of
|
||||
the procedure if the type's own namespace does not have a parent.
|
||||
|
||||
2006-09-10 Paul Thomas <pault@gcc.gnu.org>
|
||||
|
||||
PR fortran/28923
|
||||
|
@ -1483,7 +1483,12 @@ gfc_get_derived_type (gfc_symbol * derived)
|
||||
same TREE_TYPE. If an equal type is found without a backend_decl,
|
||||
build the parent version and use it in the current namespace. */
|
||||
|
||||
for (ns = derived->ns->parent; ns; ns = ns->parent)
|
||||
/* Derived types in an interface body obtain their parent reference
|
||||
through the proc_name symbol. */
|
||||
ns = derived->ns->parent ? derived->ns->parent
|
||||
: derived->ns->proc_name->ns->parent;
|
||||
|
||||
for (; ns; ns = ns->parent)
|
||||
{
|
||||
for (dt = ns->derived_types; dt; dt = dt->next)
|
||||
{
|
||||
|
@ -1,4 +1,9 @@
|
||||
2006-09-09 Paul Thomas <pault@gcc.gnu.org>
|
||||
2006-09-10 Paul Thomas <pault@gcc.gnu.org>
|
||||
|
||||
PR fortran/28959
|
||||
gfortran.dg/used_types_10: New test.
|
||||
|
||||
2006-09-10 Paul Thomas <pault@gcc.gnu.org>
|
||||
|
||||
PR libfortran/28923
|
||||
gfortran.dg/array_initializer_2.f90: Fill in missing index start value.
|
||||
|
72
gcc/testsuite/gfortran.dg/used_types_10.f90
Normal file
72
gcc/testsuite/gfortran.dg/used_types_10.f90
Normal file
@ -0,0 +1,72 @@
|
||||
! { dg-do compile }
|
||||
! Tests the fix for PR28959 in which interface derived types were
|
||||
! not always being associated.
|
||||
!
|
||||
! Contributed by Salvatore Filippone <sfilippone@uniroma2.it>
|
||||
!
|
||||
module derived_type_mod
|
||||
|
||||
type foo_dtype
|
||||
integer, pointer :: v1(:)=>null()
|
||||
end type foo_dtype
|
||||
|
||||
|
||||
end module derived_type_mod
|
||||
|
||||
|
||||
Module tools
|
||||
|
||||
interface foo_d_sub
|
||||
subroutine cdalv(m, v, i, desc_a, info, flag)
|
||||
use derived_type_mod
|
||||
Integer, intent(in) :: m,i, v(:)
|
||||
integer, intent(in), optional :: flag
|
||||
integer, intent(out) :: info
|
||||
Type(foo_dtype), intent(out) :: desc_a
|
||||
end subroutine cdalv
|
||||
end interface
|
||||
|
||||
end module tools
|
||||
|
||||
|
||||
|
||||
subroutine foo_bar(a,p,info)
|
||||
use derived_type_mod
|
||||
implicit none
|
||||
|
||||
type(foo_dtype), intent(in) :: a
|
||||
type(foo_dtype), intent(inout) :: p
|
||||
integer, intent(out) :: info
|
||||
|
||||
info=0
|
||||
|
||||
call inner_sub(info)
|
||||
|
||||
|
||||
return
|
||||
|
||||
|
||||
contains
|
||||
|
||||
subroutine inner_sub(info)
|
||||
use tools
|
||||
implicit none
|
||||
|
||||
integer, intent(out) :: info
|
||||
|
||||
integer :: i, nt,iv(10)
|
||||
|
||||
i = 0
|
||||
nt = 1
|
||||
|
||||
call foo_d_sub(nt,iv,i,p,info,flag=1)
|
||||
|
||||
return
|
||||
|
||||
|
||||
end subroutine inner_sub
|
||||
|
||||
|
||||
|
||||
end subroutine foo_bar
|
||||
! { dg-final { cleanup-modules "derived_type_mod tools" } }
|
Loading…
x
Reference in New Issue
Block a user