diff options
author | Paul Thomas <pault@gcc.gnu.org> | 2006-10-04 04:48:35 +0000 |
---|---|---|
committer | Paul Thomas <pault@gcc.gnu.org> | 2006-10-04 04:48:35 +0000 |
commit | 404d84017e5ff32987ec19d70e57fd20d15beea5 (patch) | |
tree | e9a1fd6e762da7974311f4c34cb790b81b47d6c2 /gcc | |
parent | ee1d3dc013ba01f325df8029b4ba23c2e1229df0 (diff) | |
download | gcc-404d84017e5ff32987ec19d70e57fd20d15beea5.zip gcc-404d84017e5ff32987ec19d70e57fd20d15beea5.tar.gz gcc-404d84017e5ff32987ec19d70e57fd20d15beea5.tar.bz2 |
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
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/fortran/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/fortran/resolve.c | 5 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gfortran.dg/default_initialization_2.f90 | 36 |
4 files changed, 48 insertions, 4 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index ea011dc..548a3d9 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -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 diff --git a/gcc/fortran/resolve.c b/gcc/fortran/resolve.c index 7639eb7..e28a93c 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 ea575ee..7cc0dd2 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -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 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 0000000..cc7ecdc --- /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 <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" } } |