From da2a24c3f60194266096c3b807798fbc20d38a7f Mon Sep 17 00:00:00 2001 From: Paul Thomas Date: Tue, 21 Nov 2006 23:42:17 +0000 Subject: [PATCH] re PR fortran/29820 (ICE in fold_convert, at fold-const.c:2146) 2006-11-21 Paul Thomas PR fortran/29820 * trans-array.c (gfc_get_derived_type): Once done, spread the backend_decl to all identical derived types in all sibling namespaces. 2006-11-21 Paul Thomas PR fortran/29820 * gfortran.dg/used_types_13.f90: New test. From-SVN: r119073 --- gcc/fortran/ChangeLog | 7 ++++++ gcc/fortran/trans-types.c | 7 ++---- gcc/testsuite/ChangeLog | 5 ++++ gcc/testsuite/gfortran.dg/used_types_13.f90 | 28 +++++++++++++++++++++ 4 files changed, 42 insertions(+), 5 deletions(-) create mode 100644 gcc/testsuite/gfortran.dg/used_types_13.f90 diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index 4a30d00f9b7f..bfc6d6db223c 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,10 @@ +2006-11-21 Paul Thomas + + PR fortran/29820 + * trans-array.c (gfc_get_derived_type): Once done, spread the + backend_decl to all identical derived types in all sibling + namespaces. + 2006-11-20 Tobias Burnus PR fortran/27546 diff --git a/gcc/fortran/trans-types.c b/gcc/fortran/trans-types.c index f0c41bb79922..b1eeffcbbab9 100644 --- a/gcc/fortran/trans-types.c +++ b/gcc/fortran/trans-types.c @@ -1608,11 +1608,8 @@ gfc_get_derived_type (gfc_symbol * derived) other_equal_dts: /* Add this backend_decl to all the other, equal derived types and their components in this and sibling namespaces. */ - - for (dt = derived->ns->derived_types; dt; dt = dt->next) - copy_dt_decls_ifequal (derived, dt->derived); - - for (ns = derived->ns->sibling; ns; ns = ns->sibling) + ns = derived->ns->parent ? derived->ns->parent->contained : derived->ns; + for (; ns; ns = ns->sibling) for (dt = ns->derived_types; dt; dt = dt->next) copy_dt_decls_ifequal (derived, dt->derived); diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index fc8a3ed5bf16..f4e5182233b2 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2006-11-21 Paul Thomas + + PR fortran/29820 + * gfortran.dg/used_types_13.f90: New test. + 2006-11-21 Janis Johnson * gcc.dg/dfp/snan.c: Delete. diff --git a/gcc/testsuite/gfortran.dg/used_types_13.f90 b/gcc/testsuite/gfortran.dg/used_types_13.f90 new file mode 100644 index 000000000000..9208b593333f --- /dev/null +++ b/gcc/testsuite/gfortran.dg/used_types_13.f90 @@ -0,0 +1,28 @@ +! { dg-do compile } +! Tests the fix for PR29820, which was another problem with derived type +! association. Not all siblings were being searched for identical types. +! +! Contributed by Harald Anlauf +! +module geo + type geodetic + real :: h + end type geodetic +end module geo +module gfcbug44 + implicit none +contains +subroutine point ( gp) + use geo + type(geodetic), intent(out) :: gp + type(geodetic) :: gpx(1) + gp = gpx(1) +end subroutine point +subroutine plane () + use geo + type(geodetic) :: gp + call point ( gp) +end subroutine plane +end module gfcbug44 +! { dg-final { cleanup-modules "geo gfcbug44" } } +