diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index ea011dca7e4..548a3d9cf98 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,9 @@ +2006-10-04 Paul Thomas + + PR fortran/29098 + * resolve.c (resolve_structure_cons): Do not return FAILURE if + component expression is NULL. + 2006-10-03 Paul Thomas PR fortran/20779 diff --git a/gcc/fortran/resolve.c b/gcc/fortran/resolve.c index 7639eb737e1..e28a93cbcdf 100644 --- a/gcc/fortran/resolve.c +++ b/gcc/fortran/resolve.c @@ -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) { diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index ea575ee0d18..7cc0dd29aa7 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2006-10-04 Paul Thomas + + PR fortran/29098 + * gfortran.dg/default_initialization_2.f90: New test. + 2006-10-03 Paul Thomas PR fortran/20779 diff --git a/gcc/testsuite/gfortran.dg/default_initialization_2.f90 b/gcc/testsuite/gfortran.dg/default_initialization_2.f90 new file mode 100644 index 00000000000..cc7ecdc4061 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/default_initialization_2.f90 @@ -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 +! + 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" } }