This is the mail archive of the fortran@gcc.gnu.org mailing list for the GNU Fortran 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] PR28660 - Spurious warning: 'ubound.6' is used uninitialized in this function


On Wed, Aug 16, 2006 at 12:38:36PM +0200, Paul Thomas wrote:
> Erik,
> 
> >
> >The testcase I can't judge, becasue you forgot to attach it ;-)
> >
> Here it is
> 
> ! { dg-do run }
> ! Tests the fix for pr28660 in which the order of dependent declarations
> ! would get scrambled in the compiled code.
> !
> ! Contributed by Erik Edelmann  <erik.edelmann@iki.fi>
> !
> program bar
>    implicit none
>    real :: x(10)
>    call foo1 (x)
>    call foo2 (x)
>    call foo3 (x)
> contains
>    subroutine foo1 (xmin)
>        real, intent(inout) :: xmin(:)
>        real :: x(size(xmin)+1)           ! The declaration for r would 
> be added
>        real :: r(size(x)-2)              ! to the function before that of x
>        xmin = r
>        if (size(r) .ne. 9) call abort ()
>        if (size(x) .ne. 11) call abort ()
>    end subroutine foo1
>    subroutine foo2 (xmin)                ! This version was OK because 
> of the
>        real, intent(inout) :: xmin(:)    ! renaming of r which pushed it up
>        real :: x(size(xmin)+3)           ! the symtree.
>        real :: zr(size(x)-6)
>        xmin = zr
>        if (size(zr) .ne. 7) call abort ()
>        if (size(x) .ne. 13) call abort ()
>    end subroutine foo2
>    subroutine foo3 (xmin)
>        real, intent(inout) :: xmin(:)
>        character(size(x)+2) :: y         ! host associated x
>        character(len(y)+3) :: z          ! This did not work for any 
> combination
>        real :: r(len(z)-10)              ! of names.
>        xmin = r
>        if (size(r) .ne. 5) call abort ()
>        if (len(z) .ne. 15) call abort ()
>    end subroutine foo3
> end program bar

Ok, except that this looks more like the extended testcase you made
based on mine.  Thats's perfectly fine, but I don't think I should be
the only contributor named there :-).

> >
> >>*************** generate_local_decl (gfc_symbol * sym)
> >>*** 2760,2765 ****
> >>--- 2866,2879 ----
> >> {
> >>   if (sym->attr.flavor == FL_VARIABLE)
> >>     {
> >>+       /* Check for dependencies in the array specification and needed 
> >>have
> >>+ 	 already been added to the function.  We mark the symbol now, as
> >>+ 	 well as in traverse_ns, to prevent getting stuck in a circular
> >>+ 	 dependency.  */
> >>
> This is what was intended:
> 
>      /* Check for dependencies in the array specification and string
>    length, adding the necessary declarations to the function.  We
>    mark the symbol now, as well as in traverse_ns, to prevent
>    getting stuck in a circular dependency.  */

Yes, this makes more sense.


        Erik


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