This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [Patch, fortran] PR29098 - allocation of a pointer to a derived type crashes


OK.


--bud


--- Paul Thomas <paulthomas2@wanadoo.fr> wrote:

> Ping**2, or if your prefer Ping^2
> 
> Please note the remark below about the relevance to
> the allocatable 
> component patch. I would prefer this to be committed
> in advance.  There 
> is two more patches in, or partially in, this
> category that I will 
> submit tomorrow - PR29211 and PR29115.
> 
> Paul
> 
> >
> >
>
http://gcc.gnu.org/ml/gcc-patches/2006-09/msg00671.html
> >
> > This is required for the allocatable components
> patch - if you look 
> > carefully at the last version, posted on PR20541,
> you will see that it 
> > is there.  I would rather that this is OK'd in its
> own right.
> >
> > Paul
> >
> >> :ADDPATCH fortran:
> >>
> >> In the end, I took a third option to fix this PR:
> >>
> >> Ultimately, the failure to resolve the actual
> argument list was 
> >> occurring in resolve.c(resolve_structure_cons). 
> This was returning 
> >> FAILURE on finding a NULL  expression.  I have
> been unable to think 
> >> of any situation where this is warranted, nor I
> have generated bad 
> >> code that gets clobbered by this.  Also, in
> translation, empty 
> >> expressions are correctly treated, by the same
> continuation to the 
> >> next component.  The testcase is that provided by
> the reporter.
> >>
> >> It should be noted that in trying to break this
> patch, I generated 
> >> PR29115. *sigh*
> >>
> >> Regtested on FC5/Athlon - OK for trunk and 4.1?
> >>
> >> Paul
> >>
> >> 2006-09-17  Paul Thomas  <pault@gcc.gnu.org>
> >>
> >>    PR fortran/29098
> >>    * resolve.c (resolve_structure_cons): Do not
> return FAILURE if
> >>    component expression is NULL.
> >>
> >> 2006-09-17  Paul Thomas  <pault@gcc.gnu.org>
> >>
> >>    PR fortran/29098
> >>    * gfortran.dg/default_initialization_2.f90:
> New test.
> >>
> >>
> >>
> >>
> >>
>
------------------------------------------------------------------------
> >>
> >> Index: gcc/fortran/resolve.c
> >>
>
===================================================================
> >> *** gcc/fortran/resolve.c (revision 116991)
> >> --- gcc/fortran/resolve.c (working copy)
> >> *************** resolve_structure_cons (gfc_expr
> * expr)
> >> *** 597,606 ****
> >> for (; comp; comp = comp->next, cons =
> cons->next)
> >> {
> >> if (! cons->expr)
> >> ! {
> >> ! t = FAILURE;
> >> ! continue;
> >> ! }
> >>
> >> if (gfc_resolve_expr (cons->expr) == FAILURE)
> >> {
> >> --- 597,603 ----
> >> for (; comp; comp = comp->next, cons =
> cons->next)
> >> {
> >> if (! cons->expr)
> >> ! continue;
> >>
> >> if (gfc_resolve_expr (cons->expr) == FAILURE)
> >> {
> >> Index:
>
gcc/testsuite/gfortran.dg/default_initialization_2.f90
> >>
>
===================================================================
> >> ***
>
gcc/testsuite/gfortran.dg/default_initialization_2.f90
> (revision 0)
> >> ---
>
gcc/testsuite/gfortran.dg/default_initialization_2.f90
> (revision 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" } }
> >>
> >>
> >>
>
------------------------------------------------------------------------
> >>
> >> 2006-09-17 Paul Thomas <pault@gcc.gnu.org>
> >>
> >> PR fortran/29098
> >> * resolve.c (resolve_structure_cons): Do not
> return FAILURE if
> >> component expression is NULL.
> >>
> >> 2006-09-17 Paul Thomas <pault@gcc.gnu.org>
> >>
> >> PR fortran/29098
> >> * gfortran.dg/default_initialization_2.f90: New
> test.
> >
> >
> >
> >
> >
> 
> 


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]