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:
Paul Thomas 2006-09-10 17:17:57 +00:00
parent c71d6a561e
commit 380bfbbd61
4 changed files with 90 additions and 2 deletions

View File

@ -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

View File

@ -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)
{

View File

@ -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.

View 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" } }