This is the mail archive of the
fortran@gcc.gnu.org
mailing list for the GNU Fortran project.
Re: [Patch, fortran] PR28660 - Spurious warning: 'ubound.6' is used uninitialized in this function
- From: Erik Edelmann <erik dot edelmann at iki dot fi>
- To: Paul Thomas <paulthomas2 at wanadoo dot fr>
- Cc: "'fortran at gcc dot gnu dot org'" <fortran at gcc dot gnu dot org>, patch <gcc-patches at gcc dot gnu dot org>
- Date: Wed, 16 Aug 2006 21:02:48 +0300
- Subject: Re: [Patch, fortran] PR28660 - Spurious warning: 'ubound.6' is used uninitialized in this function
- References: <44DCE04A.1040604@wanadoo.fr> <20060814203503.GA8058@acclab.helsinki.fi> <44E2F5AC.3020808@wanadoo.fr>
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