re PR fortran/29098 (allocation of a pointer to a derived type crashes)

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

	PR fortran/29098
	* resolve.c (resolve_structure_cons): Do not return FAILURE if
	component expression is NULL.

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

	PR fortran/29098
	* gfortran.dg/default_initialization_2.f90: New test.

From-SVN: r117424
This commit is contained in:
Paul Thomas 2006-10-04 04:48:35 +00:00
parent ee1d3dc013
commit 404d84017e
4 changed files with 48 additions and 4 deletions

View File

@ -1,3 +1,9 @@
2006-10-04 Paul Thomas <pault@gcc.gnu.org>
PR fortran/29098
* resolve.c (resolve_structure_cons): Do not return FAILURE if
component expression is NULL.
2006-10-03 Paul Thomas <pault@gcc.gnu.org>
PR fortran/20779

View File

@ -607,10 +607,7 @@ resolve_structure_cons (gfc_expr * expr)
for (; comp; comp = comp->next, cons = cons->next)
{
if (! cons->expr)
{
t = FAILURE;
continue;
}
continue;
if (gfc_resolve_expr (cons->expr) == FAILURE)
{

View File

@ -1,3 +1,8 @@
2006-10-04 Paul Thomas <pault@gcc.gnu.org>
PR fortran/29098
* gfortran.dg/default_initialization_2.f90: New test.
2006-10-03 Paul Thomas <pault@gcc.gnu.org>
PR fortran/20779

View File

@ -0,0 +1,36 @@
! { dg-do compile }
! This tests the patch for PR29098, in which the presence of the default
! initializer would cause allocate to fail because the latter uses
! the interface assignment. This, in its turn was failing because
! no expressions were found for the other components; and a FAILURE
! was returned from resolve_structure_cons.
!
! Contributed by Olav Vahtras <vahtras@pdc.kth.se>
!
MODULE MAT
TYPE BAS
INTEGER :: R = 0,C = 0
END TYPE BAS
TYPE BLOCK
INTEGER, DIMENSION(:), POINTER :: R,C
TYPE(BAS), POINTER, DIMENSION(:) :: NO => NULL()
END TYPE BLOCK
INTERFACE ASSIGNMENT(=)
MODULE PROCEDURE BLASSIGN
END INTERFACE
CONTAINS
SUBROUTINE BLASSIGN(A,B)
TYPE(BLOCK), INTENT(IN) :: B
TYPE(BLOCK), INTENT(INOUT) :: A
INTEGER I,N
! ...
END SUBROUTINE BLASSIGN
END MODULE MAT
PROGRAM TEST
USE MAT
TYPE(BLOCK) MATRIX
POINTER MATRIX
ALLOCATE(MATRIX)
END
! { dg-final { cleanup-modules "mat" } }