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:
parent
ee1d3dc013
commit
404d84017e
@ -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
|
||||
|
@ -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)
|
||||
{
|
||||
|
@ -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
|
||||
|
36
gcc/testsuite/gfortran.dg/default_initialization_2.f90
Normal file
36
gcc/testsuite/gfortran.dg/default_initialization_2.f90
Normal 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" } }
|
Loading…
Reference in New Issue
Block a user