Commit 6b02d5f7 by Paul Thomas

re PR fortran/38765 (ICE in check_host_association)

2009-03-28  Paul Thomas  <pault@gcc.gnu.org>

	PR fortran/38765
	* parse.c (parse_derived): Do not break on finding pointer,
	allocatable or private components.

2009-03-28  Paul Thomas  <pault@gcc.gnu.org>

	PR fortran/38765
	* gfortran.dg/alloc_comp_assign_9.f90: New test.

From-SVN: r145195
parent 1de812a6
2009-03-28 Paul Thomas <pault@gcc.gnu.org>
PR fortran/38765
* parse.c (parse_derived): Do not break on finding pointer,
allocatable or private components.
2009-03-28 Tobias Burnus <burnus@net-b.de> 2009-03-28 Tobias Burnus <burnus@net-b.de>
PR fortran/32626 PR fortran/32626
......
/* Main parser. /* Main parser.
Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008,
2009
Free Software Foundation, Inc. Free Software Foundation, Inc.
Contributed by Andy Vaught Contributed by Andy Vaught
...@@ -1978,27 +1979,18 @@ endType: ...@@ -1978,27 +1979,18 @@ endType:
/* Look for allocatable components. */ /* Look for allocatable components. */
if (c->attr.allocatable if (c->attr.allocatable
|| (c->ts.type == BT_DERIVED && c->ts.derived->attr.alloc_comp)) || (c->ts.type == BT_DERIVED && c->ts.derived->attr.alloc_comp))
{ sym->attr.alloc_comp = 1;
sym->attr.alloc_comp = 1;
break;
}
/* Look for pointer components. */ /* Look for pointer components. */
if (c->attr.pointer if (c->attr.pointer
|| (c->ts.type == BT_DERIVED && c->ts.derived->attr.pointer_comp)) || (c->ts.type == BT_DERIVED && c->ts.derived->attr.pointer_comp))
{ sym->attr.pointer_comp = 1;
sym->attr.pointer_comp = 1;
break;
}
/* Look for private components. */ /* Look for private components. */
if (sym->component_access == ACCESS_PRIVATE if (sym->component_access == ACCESS_PRIVATE
|| c->attr.access == ACCESS_PRIVATE || c->attr.access == ACCESS_PRIVATE
|| (c->ts.type == BT_DERIVED && c->ts.derived->attr.private_comp)) || (c->ts.type == BT_DERIVED && c->ts.derived->attr.private_comp))
{ sym->attr.private_comp = 1;
sym->attr.private_comp = 1;
break;
}
} }
if (!seen_component) if (!seen_component)
......
2009-03-28 Paul Thomas <pault@gcc.gnu.org>
PR fortran/38765
* gfortran.dg/alloc_comp_assign_9.f90: New test.
2009-03-28 Daniel Kraft <d@domob.eu> 2009-03-28 Daniel Kraft <d@domob.eu>
* gfortran.dg/trim_1.f90: New test. * gfortran.dg/trim_1.f90: New test.
......
! { dg-do run }
! Test the fix for PR39519, where the presence of the pointer
! as the first component was preventing the second from passing
! the "alloc_comp" attribute to the derived type.
!
! Contributed by Gilbert Scott <gilbert.scott@easynet.co.uk>
!
PROGRAM X
TYPE T
INTEGER, POINTER :: P
INTEGER, ALLOCATABLE :: A(:)
END TYPE T
TYPE(T) :: T1,T2
ALLOCATE ( T1%A(1) )
ALLOCATE ( T2%A(1) )
T1%A = 23
T2 = T1
T1%A = 42
if (T2%A(1) .NE. 23) CALL ABORT
END PROGRAM X
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