This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
g77 -fno-automatic default
- To: egcs-bugs at egcs dot cygnus dot com
- Subject: g77 -fno-automatic default
- From: <nks at het3 dot physics dot umass dot edu>
- Date: Tue, 5 Oct 1999 20:07:36 -0400 (EDT)
Hi,
I really don't know that much about fortran but I pulled the LASO
subdirectory off of www.netlib.org and when I compiled it with g77
(without setting the -fno-automatic option) I found errors because
some of the local variables were on the stack when the code assumed
they were SAVEd. The code works with other fortran compilers
including f2c which makes all the local variables static. As I said,
I really don't know which is the correct default but I wanted to let
you know of my experience.
In case you are interested the code follows and the variables in
question are MIC, IA, IC and S.
With the -fno-automatic option the code works fine. Thanks,
Nathan Salwen
(413) 256-6463
C XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
REAL FUNCTION URAND(IY)
INTEGER IY
C
C URAND IS A UNIFORM RANDOM NUMBER GENERATOR BASED ON THEORY AND
C SUGGESTIONS GIVEN IN D.E. KNUTH (1969), VOL 2. THE INTEGER IY
C SHOULD BE INITIALIZED TO AN ARBITRARY INTEGER PRIOR TO THE FIRST CALL
C TO URAND. THE CALLING PROGRAM SHOULD NOT ALTER THE VALUE OF IY
C BETWEEN SUBSEQUENT CALLS TO URAND. VALUES OF URAND WILL BE RETURNED
C IN THE INTERVAL (0,1).
C
INTEGER IA,IC,ITWO,M2,M,MIC
DOUBLE PRECISION HALFM
REAL S
REAL URANDSUB
REAL FOO
DOUBLE PRECISION DATAN,DSQRT
DATA M2/0/,ITWO/2/
IF (M2 .NE. 0) GO TO 20
C
C IF FIRST ENTRY, COMPUTE MACHINE INTEGER WORD LENGTH
C
URAND = FOO(IY,IA,IC,MIC,M2,S)
M = 1
10 M2 = M
M = ITWO*M2
IF (M .GT. M2) GO TO 10
HALFM = M2
C
C COMPUTE MULTIPLIER AND INCREMENT FOR LINEAR CONGRUENTIAL METHOD
C
IA = 8*IDINT(HALFM*DATAN(1.D0)/8.D0) + 5
IC = 2*IDINT(HALFM*(0.5D0-DSQRT(3.D0)/6.D0)) + 1
MIC = (M2 - IC) + M2
C
C S IS THE SCALE FACTOR FOR CONVERTING TO FLOATING POINT
C
S = 0.5/HALFM
C
C COMPUTE NEXT RANDOM NUMBER
C
20 URAND = URANDSUB(IY,IA,IC,MIC,M2,S)
RETURN
END