+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
build the parent version and use it in the current namespace. */
if (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
through the proc_name symbol. */
ns = derived->ns->proc_name->ns;
/* 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)
for (dt = ns->derived_types; dt; dt = dt->next)
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>
PR middle-end/29726
--- /dev/null
+! { 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" } }
+