Hello,
The DATA implies SAVE rule was fairly standard f77 behavior
which was standardized by f90.
In 04-007.pdf (the committee draft of the f03 standard),
this on page 74 at lines 35-39, in section 5.1 (a rather
large section).
Catherine Moroney wrote:
> Hi,
>
> I've encountered a "feature" in the SGI MipsPro F90
> compiler and would like to know what other compilers
> make of this, and whether the behaviour of the SGI
> compiler conforms to the standard.
>
> Attached find a short test program that tests the
> behaviour of a variable initialized at declaration time,
> vs. one initialized in a separate statement (itest1 and
> itest2 respectively). The variable that's initialized
> at declaration time behaves exactly like a "saved"
> variable even though there's no save statement in the code.
> Is this expected behaviour? It seems counter-intuitive
> to me. I've spent the last two weeks tracking this
> one down, looking for a non-existent memory stomp. Grrrr.
>
> A colleague of mine found the following statement in
> the SGI documentation which clearly points out this
> feature so it's not a bug per se. I don't find this
> behaviour obvious though.
>
> "Initialization of a variable in a type declaration
> statement or any part of a variable in a DATA statement
> implies that the variable has the SAVE attribute unless
> the variable is in a named common block."
>
> Test Code:
>
> SUBROUTINE SUB1(INDX)
>
> IMPLICIT NONE
>
> INTEGER, INTENT(IN) :: INDX
> LOGICAL :: ITEST1 = .TRUE.
> LOGICAL :: ITEST2
>
> itest2 = .true.
>
> if (mod(indx,5) == 0) then
> itest1 = .false.
> itest2 = .false.
> endif
>
> write(*,'(a,i,l,l)') 'indx, itest1, itest2 = ',indx,itest1,itest2
>
> RETURN
> END SUBROUTINE SUB1
>
> PROGRAM TEST
>
> INTEGER :: INDX
>
> do indx = 1,10
> call sub1(indx)
> end do
>
> STOP
> END PROGRAM
>
>
> Test Output:
>
> indx, itest1, itest2 = 1 T T
> indx, itest1, itest2 = 2 T T
> indx, itest1, itest2 = 3 T T
> indx, itest1, itest2 = 4 T T
> indx, itest1, itest2 = 5 F F
> indx, itest1, itest2 = 6 F T
> indx, itest1, itest2 = 7 F T
> indx, itest1, itest2 = 8 F T
> indx, itest1, itest2 = 9 F T
> indx, itest1, itest2 = 10 F F
>
> Thanks for any enlightenment,
>
> Catherine
>
> --
> -------------------------------------------------------------------------
>
> Catherine Moroney phone : (818) 393-3392
> Jet Propulsion Laboratory fax : (818) 393-3134
> MailStop 168-414 email : [log in to unmask]
> 4800 Oak Grove Drive
> Pasadena, CA 91109-8099
>
--
Cheers!
Dan Nagle
Purple Sage Computing Solutions, Inc.
|