Commit ff883a95 by Paul Thomas

re PR fortran/29744 (Type renaming crashes gfortran with excessive memory usage)

2006-11-09 Paul Thomas <pault@gcc.gnu.org>

	PR fortran/29744
	* trans-types.c (gfc_get_derived_type): Ensure that the
	proc_name namespace is not the same as the owner namespace and
	that identical derived types in the same namespace share the
	same backend_decl.

2006-11-09 Paul Thomas <pault@gcc.gnu.org>

	PR fortran/29744
	* gfortran.dg/used_types_12.f90: New test.

From-SVN: r118627
parent 6acf0b38
2006-11-09 Paul Thomas <pault@gcc.gnu.org> 2006-11-09 Paul Thomas <pault@gcc.gnu.org>
PR fortran/29744
* trans-types.c (gfc_get_derived_type): Ensure that the
proc_name namespace is not the same as the owner namespace and
that identical derived types in the same namespace share the
same backend_decl.
2006-11-09 Paul Thomas <pault@gcc.gnu.org>
PR fortran/29699 PR fortran/29699
* trans-array.c (structure_alloc_comps): Detect pointers to * trans-array.c (structure_alloc_comps): Detect pointers to
arrays and use indirect reference to declaration. arrays and use indirect reference to declaration.
......
...@@ -1484,7 +1484,8 @@ gfc_get_derived_type (gfc_symbol * derived) ...@@ -1484,7 +1484,8 @@ gfc_get_derived_type (gfc_symbol * derived)
build the parent version and use it in the current namespace. */ build the parent version and use it in the current namespace. */
if (derived->ns->parent) if (derived->ns->parent)
ns = derived->ns->parent; ns = derived->ns->parent;
else if (derived->ns->proc_name) else if (derived->ns->proc_name
&& derived->ns->proc_name->ns != derived->ns)
/* Derived types in an interface body obtain their parent reference /* Derived types in an interface body obtain their parent reference
through the proc_name symbol. */ through the proc_name symbol. */
ns = derived->ns->proc_name->ns; ns = derived->ns->proc_name->ns;
...@@ -1592,6 +1593,9 @@ other_equal_dts: ...@@ -1592,6 +1593,9 @@ other_equal_dts:
/* Add this backend_decl to all the other, equal derived types and /* Add this backend_decl to all the other, equal derived types and
their components in this and sibling namespaces. */ 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) for (ns = derived->ns->sibling; ns; ns = ns->sibling)
for (dt = ns->derived_types; dt; dt = dt->next) for (dt = ns->derived_types; dt; dt = dt->next)
copy_dt_decls_ifequal (derived, dt->derived); copy_dt_decls_ifequal (derived, dt->derived);
......
2006-11-09 Paul Thomas <pault@gcc.gnu.org>
PR fortran/29744
* gfortran.dg/used_types_12.f90: New test.
2006-11-09 Serge Belyshev <belyshev@depni.sinp.msu.ru> 2006-11-09 Serge Belyshev <belyshev@depni.sinp.msu.ru>
PR middle-end/29726 PR middle-end/29726
! { dg-do compile }
! Tests the fix PR29744, which is really a repeat of PR19362.
! The problem came about because the test for PR19362 shifted
! the fix to a subroutine, rather than the main program that
! it originally occurred in. Fixes for subsequent PRs introduced
! a difference between the main program and a contained procedure
! that resulted in the compiler going into an infinite loop.
!
! Contributed by Harald Anlauf <anlauf@gmx.de>
! and originally by Francois-Xavier Coudert <fxcoudert@gcc.gnu.org>
!
MODULE M
TYPE T0
SEQUENCE
INTEGER I
END TYPE
END
PROGRAM MAIN
USE M, T1 => T0
TYPE T0
SEQUENCE
INTEGER I
END TYPE
TYPE(T0) :: BAR
TYPE(T1) :: BAZ
BAZ = BAR
END
! { dg-final { cleanup-modules "M" } }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment