Commit bce71376 by Paul Thomas

[multiple changes]

2005-10-12  Paul Thomas  <pault@gcc.gnu.org>

	PR fortran/24092
	* trans-types.c (gfc_get_derived_type): Insert code to obtain backend
	declaration for derived types, building if necessary.  Return the
	derived type if the fields have been built by this process.  Otherwise,
	continue as before but using the already obtained backend_decls for the
	derived type components.  Change the gcc_assert to act on the field.

2005-10-10  Paul Thomas  <pault@gcc.gnu.org>

	PR fortran/24092
	* gfortran.dg/derived_pointer_recursion.f90: New test.

From-SVN: r105331
parent 8adac335
2005-10-12 Paul Thomas <pault@gcc.gnu.org>
PR fortran/24092
* trans-types.c (gfc_get_derived_type): Insert code to obtain backend
declaration for derived types, building if necessary. Return the
derived type if the fields have been built by this process. Otherwise,
continue as before but using the already obtained backend_decls for the
derived type components. Change the gcc_assert to act on the field.
2005-10-12 Paul Thomas <pault@gcc.gnu.org>
PR fortran/18082
* decl.c (variable_decl): Make a new copy of the character
length for each variable, when the expression is not a
......
......@@ -1415,21 +1415,30 @@ gfc_get_derived_type (gfc_symbol * derived)
derived->backend_decl = typenode;
}
/* Go through the derived type components, building them as
necessary. The reason for doing this now is that it is
possible to recurse back to this derived type through a
pointer component (PR24092). If this happens, the fields
will be built and so we can return the type. */
for (c = derived->components; c; c = c->next)
{
if (c->ts.type != BT_DERIVED)
continue;
if (!c->pointer || c->ts.derived->backend_decl == NULL)
c->ts.derived->backend_decl = gfc_get_derived_type (c->ts.derived);
}
if (TYPE_FIELDS (derived->backend_decl))
return derived->backend_decl;
/* Build the type member list. Install the newly created RECORD_TYPE
node as DECL_CONTEXT of each FIELD_DECL. */
fieldlist = NULL_TREE;
for (c = derived->components; c; c = c->next)
{
if (c->ts.type == BT_DERIVED && c->pointer)
{
if (c->ts.derived->backend_decl)
/* We already saw this derived type so use the exiting type.
It doesn't matter if it is incomplete. */
field_type = c->ts.derived->backend_decl;
else
/* Recurse into the type. */
field_type = gfc_get_derived_type (c->ts.derived);
}
if (c->ts.type == BT_DERIVED)
field_type = c->ts.derived->backend_decl;
else
{
if (c->ts.type == BT_CHARACTER)
......@@ -1464,8 +1473,9 @@ gfc_get_derived_type (gfc_symbol * derived)
DECL_PACKED (field) |= TYPE_PACKED (typenode);
gcc_assert (!c->backend_decl);
c->backend_decl = field;
gcc_assert (field);
if (!c->backend_decl)
c->backend_decl = field;
}
/* Now we have the final fieldlist. Record it, then lay out the
......
2005-10-10 Paul Thomas <pault@gcc.gnu.org>
PR fortran/24092
* gfortran.dg/derived_pointer_recursion.f90: New test.
2005-10-12 Adrian Straetling <straetling@de.ibm.com>
* gcc.c-torture/execute/20051012-1.c: New test.
......@@ -5,15 +10,15 @@
2005-10-12 Paul Thomas <pault@gcc.gnu.org>
PR fortran/18082
gfortran.dg/automatic_char_len_1.f90: New test.
* gfortran.dg/automatic_char_len_1.f90: New test.
2005-10-12 Paul Thomas <pault@gcc.gnu.org>
PR fortran/20847
gfortran.dg/save_common.f90: New test.
* gfortran.dg/save_common.f90: New test.
PR fortran/20856
gfortran.dg/save_result.f90: New test.
* gfortran.dg/save_result.f90: New test.
2005-10-12 Nathan Sidwell <nathan@codesourcery.com>
......@@ -50,7 +55,7 @@
2005-10-12 Paul Thomas <pault@gcc.gnu.org>
PR fortran/24207
gfortran.dg/private_type_3.f90: New test.
* gfortran.dg/private_type_3.f90: New test.
2005-10-11 Steven G. Kargl <kargls@comcast.net>
! { dg-do compile }
! { dg-options "-O0" }
! Tests patch for PR24092 - This would ICE because of the loop in the
! derived type definitions.
!
module llo
type :: it
character*10 :: k
integer :: c(2)
end type it
type :: bt
type (nt), pointer :: p
end type bt
type :: nt
type (it) :: i
type (bt) :: b
end type nt
type (bt), pointer :: ptr
end module llo
! copyright 1996 Loren P. Meissner -- May be distributed if this line is included.
! Linked List operations with Pointer to Pointer
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