Update to Aug 26 g77 front end and runtime.

From-SVN: r14985
This commit is contained in:
Jeff Law 1997-08-27 21:21:05 -06:00
parent d995a6dc49
commit 795232f720
36 changed files with 681 additions and 2632 deletions

View File

@ -1,3 +1,92 @@
Tue Aug 26 05:59:21 1997 Craig Burley <burley@gnu.ai.mit.edu>
* ansify.c (main): Make sure readers of stdout know
it's derived from stdin; omit comment text; get source
line numbers in future stderr output to be correct.
Tue Aug 26 01:36:01 1997 Craig Burley <burley@gnu.ai.mit.edu>
Fix 970825-0.f:
* stb.c (ffestb_R5284_): Allow OPEN_PAREN after closing
SLASH as well as NAME.
Mon Aug 25 23:48:17 1997 Craig Burley <burley@gnu.ai.mit.edu>
Changes to allow g77 docs to be built entirely from scratch
using any ANSI C compiler, not requiring GNU C:
* Make-lang.in ($(srcdir)/f/intdoc.texi): "Pipe" new
location of intrinsic documentation data base, f/intdoc.in,
through new `ansify' program to append `\n\' to quoted
newlines, into f/intdoc.h0. Do appropriate cleanups. Explain.
(f77.mostlyclean): Add f/ansify and f/intdoc.h0 to cleanups.
* f/ansify.c: New program.
* f/intdoc.c: Fix so it conforms to ANSI C.
#include f/intdoc.h0 instead of f/intdoc.h.
Avoid some warnings.
* f/intdoc.h, f/intdoc.in: Rename the former to the latter; no
changes made to the content in this patch!
* f/intrin.h (ffeintrinFamily): Fix to conform to ANSI C.
Sun Aug 24 06:52:48 1997 Craig Burley <burley@gnu.ai.mit.edu>
Fix up g77 compiler data base for libf2c routines:
* com-rt.def (FFECOM_gfrtSIGNAL): Change return type to
FTNINT to match actual code.
* com.c (ffecomRttype_): Replace FFECOM_rttypeINT_ with
FFECOM_rttypeFTNINT_.
Add and fix up comments.
(ffecom_make_gfrt_, ffecom_gfrt_basictype,
ffecom_gfrt_kindtype): Replace FFECOM_rttypeINT_ with
FFECOM_rttypeFTNINT_; add FFECOM_rttypeDOUBLEREAL_.
Wed Aug 20 17:18:40 1997 Craig Burley <burley@gnu.ai.mit.edu>
* global.c (ffeglobal_ref_progunit_): It's okay to have
a different CHARACTER*n length for a reference if the
existing length is for another reference, not a definition.
Mon Aug 18 14:27:18 1997 Craig Burley <burley@gnu.ai.mit.edu>
Fix 970814-0.f:
* global.c (ffeglobal_new_progunit_): Distinguish
between previously defined, versus inferred, filewide
when it comes to diagnostics.
Fix 970816-1.f:
* global.c (ffeglobal_ref_progunit_): Change BDATA into EXT
right at the beginning, so EXTERNAL FOO followed later
by SUBROUTINE FOO is not diagnosed.
Fix 970813-0.f:
* com-rt.def (FFECOM_gfrtALARM): Returns `integer', not
`void'.
Sun Aug 17 03:32:44 1997 Craig Burley <burley@gnu.ai.mit.edu>
Fix up problems when virtual memory exhausted:
* malloc.c (malloc_new_): Use gcc's xmalloc(), so we
print a nicer message when malloc returns no memory.
(malloc_resize_): Ditto for xrealloc().
* Make-lang.in, Makefile.in: Comment out lines containing
just formfeeds.
Sat Aug 16 19:41:33 1997 Craig Burley <burley@gnu.ai.mit.edu>
* com.c (ffecom_make_gfrt_): For rttypeREAL_F2C_, return
double_type_node; for rttypeREAL_GNU_, return
_real_type_node.
1997-08-13 Dave Love <d.love@dl.ac.uk>
* config-lang.in (diff_excludes): Add some hints about known
problematic platforms.
1997-08-13 Dave Love <d.love@dl.ac.uk>
* intdoc.h: Document `alarm'.
Mon Aug 11 21:19:22 1997 Craig Burley <burley@gnu.ai.mit.edu>
* Make-lang.in ($(RUNTIMESTAGESTUFF)): Add

View File

@ -1,3 +1,8 @@
Wed Aug 27 20:32:03 1997 Jeffrey A Law (law@cygnus.com)
* top.c (ffe_decode_option): Turn on flag_move_all_moveables
and flag_reduce_all_givs.
Mon Aug 25 23:24:32 1997 H.J. Lu (hjl@gnu.ai.mit.edu)
* Make-lang.in ($(srcdir)/f/runtime/configure,
@ -42,11 +47,6 @@ Sun Aug 17 08:35:11 1997 Jeffrey A Law (law@cygnus.com)
* intdoc.texi: Remove generated file from distribution.
Fri Aug 15 13:44:14 1997 Jeffrey A Law (law@cygnus.com)
* Makefile.in, Make-lang.in: Remove "^L" at the beginning
of lines.
Tue Aug 12 10:23:02 1997 Jeffrey A Law (law@cygnus.com)
* config-lang.in: Don't demand the backend patch.

View File

@ -332,11 +332,33 @@ $(srcdir)/f/g77.info: f/g77.texi f/bugs.texi f/install.texi f/news.texi f/intdoc
$(srcdir)/f/g77.dvi: f/g77.texi f/bugs.texi f/install.texi f/news.texi f/intdoc.texi
cd $(srcdir)/f; $(TEXI2DVI) g77.texi
$(srcdir)/f/intdoc.texi: f/intdoc.c f/intdoc.h f/intrin.def f/intrin.h
# This dance is all about producing accurate documentation for g77's
# intrinsics with minimum fuss. f/ansify appends "\n\" to C strings
# so ANSI C compilers can compile f/intdoc.h -- gcc can compile f/intdoc.in
# directly, if f/intdoc.c #include'd that, but we don't want to force
# people to install gcc just to build the documentation. We use the
# C format for f/intdoc.in in the first place to allow a fairly "free",
# but widely known format for documentation -- basically anyone who knows
# how to write texinfo source and enclose it in C constants can handle
# it, and f/ansify allows them to not even end lines with "\n\". So,
# essentially, the C preprocessor and compiler are used to enter the
# document snippets into a data base via name lookup, rather than duplicating
# that kind of code here. And we use f/intdoc.c instead of straight
# texinfo in the first place so that as much information as possible
# contained in f/intrin.def can be inserted directly and reliably into
# the documentation. That's better than replicating it, because it
# reduces the likelihood of discrepancies between the docs and the compiler
# itself, which uses f/intrin.def; in fact, many bugs in f/intrin.def have
# been found only upon reading the documentation that was automatically
# produced from it.
$(srcdir)/f/intdoc.texi: f/intdoc.c f/intdoc.in f/ansify.c f/intrin.def f/intrin.h
$(HOST_CC) $(HOST_CFLAGS) $(HOST_LDFLAGS) \
`echo $(srcdir)/f/ansify.c | sed 's,^\./,,'` -o f/ansify
f/ansify < $(srcdir)/f/intdoc.in > f/intdoc.h0 $(srcdir)/f/intdoc.in
$(HOST_CC) $(HOST_CFLAGS) $(HOST_LDFLAGS) -I./f \
`echo $(srcdir)/f/intdoc.c | sed 's,^\./,,'` -o f/intdoc
f/intdoc > $(srcdir)/f/intdoc.texi
rm f/intdoc
rm f/intdoc f/ansify f/intdoc.h0
$(srcdir)/f/BUGS: f/bugs0.texi f/bugs.texi
cd $(srcdir)/f; $(MAKEINFO) -D BUGSONLY --no-header --no-split \
@ -503,7 +525,7 @@ f77.uninstall:
f77.mostlyclean:
-rm -f f/*$(objext)
-rm -f f/fini f/f771 f/stamp-str f/str-*.h f/str-*.j f/intdoc
-rm -f f/fini f/f771 f/stamp-str f/str-*.h f/str-*.j f/intdoc f/ansify f/intdoc.h0
-case $(srcdir) in \
/*) cd f/runtime; $(MAKE) -f $(srcdir)/f/runtime/Makefile.in mostlyclean;; \
*) cd f/runtime; $(MAKE) -f ../../$(srcdir)/f/runtime/Makefile.in mostlyclean;; \

View File

@ -5,7 +5,7 @@
@c The text of this file appears in the file BUGS
@c in the G77 distribution, as well as in the G77 manual.
@c 1996-06-24
@c 1996-08-19
@ifclear BUGSONLY
@node Actual Bugs
@ -25,6 +25,34 @@ configure, port, build, and install @code{g77},
@ref{Problems Installing}.
@itemize @bullet
@cindex DNRM2 miscompiled
@item
An old version of the BLAS function @code{DNRM2} is miscompiled
on ix86 machines when @samp{-O2} (or higher, probably) is
used.
The bug is in the @code{gcc} back end, as proven using
a C translation of a simplified version of @code{DRNM2}
that illustrates the bug.
(The code in @file{gcc/reg-stack.c} fails to recognize that,
after an initial load of @samp{XMAX}, a subsequent load
must be preceded by a stack pop, or @samp{fstp %st(0)} in
assembler, to avoid ultimately overflowing the floating-point
stack.)
@cindex Alpha
@item
@code{g77}'s version of @code{gcc}, and probably @code{g77}
itself, cannot be reliably used with the @samp{-O2} option
(or higher) on Digital Semiconductor Alpha AXP machines.
The problem is most immediately noticed in differences
discovered by @kbd{make compare} following a bootstrap
build using @samp{-O2}.
It also manifests itself as a failure to compile
@samp{DATA} statements such as @samp{DATA R/7./} correctly;
in this case, @samp{R} might be initialized to @samp{4.0}.
Until this bug is fixed, use only @samp{-O1} or no optimization.
@cindex SIGNAL() intrinsic
@cindex intrinsics, SIGNAL()
@item

View File

@ -117,7 +117,7 @@ DEFGFRT (FFECOM_gfrtACCESS, "G77_access_0", FFECOM_rttypeINTEGER_, "&a&a", FALSE
DEFGFRT (FFECOM_gfrtACOS, "r_acos", FFECOM_rttypeREAL_F2C_, "&f", FALSE, FALSE)
DEFGFRT (FFECOM_gfrtAIMAG, "r_imag", FFECOM_rttypeREAL_F2C_, "&f", FALSE, FALSE)
DEFGFRT (FFECOM_gfrtAINT, "r_int", FFECOM_rttypeREAL_F2C_, "&f", FALSE, FALSE)
DEFGFRT (FFECOM_gfrtALARM, "G77_alarm_0", FFECOM_rttypeVOID_, "&i0", FALSE, FALSE)
DEFGFRT (FFECOM_gfrtALARM, "G77_alarm_0", FFECOM_rttypeINTEGER_, "&i0", FALSE, FALSE)
DEFGFRT (FFECOM_gfrtALOG, "r_log", FFECOM_rttypeREAL_F2C_, "&f", FALSE, FALSE)
DEFGFRT (FFECOM_gfrtALOG10, "r_lg10", FFECOM_rttypeREAL_F2C_, "&f", FALSE, FALSE)
DEFGFRT (FFECOM_gfrtAMOD, "r_mod", FFECOM_rttypeREAL_F2C_, "&f", FALSE, FALSE)
@ -225,7 +225,7 @@ DEFGFRT (FFECOM_gfrtRENAME, "G77_rename_0", FFECOM_rttypeINTEGER_, "&a&a", FALSE
DEFGFRT (FFECOM_gfrtSECNDS, "G77_secnds_0", FFECOM_rttypeREAL_F2C_, "&f", FALSE, FALSE)
DEFGFRT (FFECOM_gfrtSECOND, "G77_second_0", FFECOM_rttypeREAL_F2C_, 0, FALSE, FALSE)
DEFGFRT (FFECOM_gfrtSIGN, "r_sign", FFECOM_rttypeREAL_F2C_, "&f", FALSE, FALSE)
DEFGFRT (FFECOM_gfrtL_SIGNAL, "G77_signal_0", FFECOM_rttypeINTEGER_, "&i0", FALSE, FALSE)
DEFGFRT (FFECOM_gfrtL_SIGNAL, "G77_signal_0", FFECOM_rttypeFTNINT_, "&i0", FALSE, FALSE)
DEFGFRT (FFECOM_gfrtSIN, "r_sin", FFECOM_rttypeREAL_F2C_, "&f", FALSE, FALSE)
DEFGFRT (FFECOM_gfrtSINH, "r_sinh", FFECOM_rttypeREAL_F2C_, "&f", FALSE, FALSE)
DEFGFRT (FFECOM_gfrtSLEEP, "G77_sleep_0", FFECOM_rttypeVOID_, "&i", FALSE, FALSE)

View File

@ -345,18 +345,18 @@ tree ffecom_f2c_ptr_to_ftnint_type_node;
typedef enum
{
FFECOM_rttypeVOID_,
FFECOM_rttypeINT_, /* C's `int' type, for libF77/system_.c? */
FFECOM_rttypeINTEGER_,
FFECOM_rttypeLONGINT_, /* C's `long long int' type. */
FFECOM_rttypeLOGICAL_,
FFECOM_rttypeREAL_F2C_, /* f2c's `float' returned as `double'. */
FFECOM_rttypeREAL_GNU_, /* `float' returned as such. */
FFECOM_rttypeFTNINT_, /* f2c's `ftnint' type. */
FFECOM_rttypeINTEGER_, /* f2c's `integer' type. */
FFECOM_rttypeLONGINT_, /* f2c's `longint' type. */
FFECOM_rttypeLOGICAL_, /* f2c's `logical' type. */
FFECOM_rttypeREAL_F2C_, /* f2c's `real' returned as `double'. */
FFECOM_rttypeREAL_GNU_, /* `real' returned as such. */
FFECOM_rttypeCOMPLEX_F2C_, /* f2c's `complex' returned via 1st arg. */
FFECOM_rttypeCOMPLEX_GNU_, /* gcc's `complex float' returned as such. */
FFECOM_rttypeCOMPLEX_GNU_, /* f2c's `complex' returned directly. */
FFECOM_rttypeDOUBLE_, /* C's `double' type. */
FFECOM_rttypeDOUBLEREAL_,
FFECOM_rttypeDOUBLEREAL_, /* f2c's `doublereal' type. */
FFECOM_rttypeDBLCMPLX_F2C_, /* f2c's `doublecomplex' returned via 1st arg. */
FFECOM_rttypeDBLCMPLX_GNU_, /* gcc's `complex double' returned as such. */
FFECOM_rttypeDBLCMPLX_GNU_, /* f2c's `doublecomplex' returned directly. */
FFECOM_rttypeCHARACTER_, /* f2c `char *'/`ftnlen' pair. */
FFECOM_rttype_
} ffecomRttype_;
@ -7423,8 +7423,8 @@ ffecom_make_gfrt_ (ffecomGfrt ix)
ttype = void_type_node;
break;
case FFECOM_rttypeINT_:
ttype = integer_type_node;
case FFECOM_rttypeFTNINT_:
ttype = ffecom_f2c_ftnint_type_node;
break;
case FFECOM_rttypeINTEGER_:
@ -7440,11 +7440,11 @@ ffecom_make_gfrt_ (ffecomGfrt ix)
break;
case FFECOM_rttypeREAL_F2C_:
ttype = ffecom_f2c_real_type_node;
ttype = double_type_node;
break;
case FFECOM_rttypeREAL_GNU_:
ttype = ffecom_tree_type[FFEINFO_basictypeREAL][FFEINFO_kindtypeREAL1];
ttype = float_type_node;
break;
case FFECOM_rttypeCOMPLEX_F2C_:
@ -7459,6 +7459,10 @@ ffecom_make_gfrt_ (ffecomGfrt ix)
ttype = double_type_node;
break;
case FFECOM_rttypeDOUBLEREAL_:
ttype = ffecom_f2c_doublereal_type_node;
break;
case FFECOM_rttypeDBLCMPLX_F2C_:
ttype = void_type_node;
break;
@ -11601,7 +11605,7 @@ ffecom_gfrt_basictype (ffecomGfrt gfrt)
case FFECOM_rttypeVOID_:
return FFEINFO_basictypeNONE;
case FFECOM_rttypeINT_:
case FFECOM_rttypeFTNINT_:
return FFEINFO_basictypeINTEGER;
case FFECOM_rttypeINTEGER_:
@ -11622,6 +11626,7 @@ ffecom_gfrt_basictype (ffecomGfrt gfrt)
return FFEINFO_basictypeCOMPLEX;
case FFECOM_rttypeDOUBLE_:
case FFECOM_rttypeDOUBLEREAL_:
return FFEINFO_basictypeREAL;
case FFECOM_rttypeDBLCMPLX_F2C_:
@ -11646,7 +11651,7 @@ ffecom_gfrt_kindtype (ffecomGfrt gfrt)
case FFECOM_rttypeVOID_:
return FFEINFO_kindtypeNONE;
case FFECOM_rttypeINT_:
case FFECOM_rttypeFTNINT_:
return FFEINFO_kindtypeINTEGER1;
case FFECOM_rttypeINTEGER_:
@ -11667,6 +11672,7 @@ ffecom_gfrt_kindtype (ffecomGfrt gfrt)
return FFEINFO_kindtypeREAL1;
case FFECOM_rttypeDOUBLE_:
case FFECOM_rttypeDOUBLEREAL_:
return FFEINFO_kindtypeREAL2;
case FFECOM_rttypeDBLCMPLX_F2C_:

View File

@ -98,3 +98,33 @@ case "$srcdir" in
echo "unless you are using GNU make or a compatible VPATH mechanism."
echo ;;
esac
case "$host" in
hppa*-*-hpux10)
echo
echo "The GCC \`fixincludes' step (which involves running a sed script)"
echo "typically fails on HP-UX 10 because of a bug in the vendor's"
echo "implementation of sed. Currently the only known workaround is to"
echo "install GNU sed before building gcc. The file sed-2.05.bin.hpux10"
echo "in mirrors of the GNU distribution is a suitable precompiled"
echo "binary."
echo ;;
rs6000-ibm-aix4.1*)
echo
echo "G77 has been observed to not build on (at least) the configuration"
echo "rs6000-ibm-aix4.1.4.0 with the native linker -- it crashes. There"
echo "may be an IBM bug fix for this (we don't know) but the build should"
echo "work if you add \`-mminimal-toc' to the compilation flags, i.e. add"
echo "something like \`BOOT_CFLAGS=\"-O2 -mminimal-toc -g\"' to the \`make"
echo "bootstrap' command line. Probably building with the GNU linker (from"
echo "the binutils package) installed and configuring \`--with-gnu-ld' will work."
echo ;;
mips-sgi-irix6*)
echo
echo Consult
echo "<URL:http://reality.sgi.com/knobi/gcc-2.7.2.x-on-irix-6.2-6.3>"
echo "regarding building under IRIX-6.2/6.3/6.4. Note that you *must*"
echo "have the SGI IDO bought and installed (sigh)."
echo ;;
*) ;;
esac

View File

@ -102,7 +102,7 @@ was contributed to Craig by David Ronis (@email{ronis@@onsager.chem.mcgill.ca}).
@sp 2
@center James Craig Burley
@sp 3
@center Last updated 1997-08-11
@center Last updated 1997-08-24
@sp 1
@c The version number appears some more times in this file.
@ -1513,6 +1513,18 @@ These problems result, primarily, from differences between the way
such constants are interpreted by the C preprocessor and by a Fortran
compiler.
Another example of a problem that results from using the C preprocessor
is that a Fortran comment line that happens to contain any
characters ``interesting'' to the C preprocessor,
such as a backslash at the end of the line,
is not recognized by the preprocessor as a comment line,
so instead of being passed through ``raw'',
the line is edited according to the rules for the preprocessor.
For example, the backslash at the end of the line is removed,
along with the subsequent newline, resulting in the next
line being effectively commented out---unfortunate if that
line is a non-comment line of important code!
@emph{Note:} The @samp{-traditional} and @samp{-undef} flags are supplied
to @code{cpp} by default, to avoid unpleasant surprises.
@xref{Preprocessor Options,,Options Controlling the Preprocessor,
@ -2573,10 +2585,9 @@ and data sets.
this option does not apply, generally speaking, to Fortran
code compiled by @code{g77}.
@emph{Also note:} Apparently due to a @code{gcc} backend bug,
@samp{-malign-double} does not align stack-allocated data (such as
local variables neither @code{SAVE}d nor reckoned to take up too
much space to put on the stack).
@emph{Also note:} @code{g77} fixes a @code{gcc} backend bug to allow
@samp{-malign-double} to work generally, not just with
statically-allocated data.
@emph{Also also note:} The negative form of @samp{-malign-double}
is @samp{-mno-align-double}, not @samp{-benign-double}.
@ -5004,6 +5015,7 @@ These are not necessarily supported by every GNU Fortran
implementation.
@item KIND=7
@cindex pointers
This is valid only as @code{INTEGER(KIND=7)} and
denotes the @code{INTEGER} type that has the smallest
storage size that holds a pointer on the system.
@ -7909,7 +7921,8 @@ the return type of a @code{REAL} @code{FUNCTION}.)
@samp{-P} option to generate C prototypes appropriate for calling the
Fortran.@footnote{The files generated like this can also be used for
inter-unit consistency checking of dummy and actual arguments, although
the @samp{ftnchek} tool from @url{ftp://ftp.netlib.org/fortran} is
the @samp{ftnchek} tool from @url{ftp://ftp.netlib.org/fortran}
or @url{ftp://ftp.dsm.fordham.edu} is
probably better for this purpose.}
If the Fortran code containing any
routines to be called from C is in file @file{joe.f}, use the command
@ -9982,12 +9995,16 @@ The Intel x86 architecture generally ensures that these programs will
work on all its implementations,
but particular implementations (such as Pentium Pro)
perform better with more strict alignment.
(Such behavior isn't unique to the Intel x86 architecture.)
Other architectures might @emph{demand} 64-bit alignment
of 64-bit data.
There are a variety of approaches to use to address this problem,
in any combination:
There are a variety of approaches to use to address this problem:
@itemize @bullet
@item
@cindex COMMON, layout
@cindex layout of common blocks
Order your @code{COMMON} and @code{EQUIVALENCE} areas such
that the variables and arrays with the widest alignment
guidelines come first.
@ -10017,67 +10034,44 @@ avoid having to carefully count the number of bytes
occupied by each entity to determine whether the
actual alignment of each subsequent entity meets the
alignment guidelines for the type of that entity.
If you don't ensure correct alignment of @code{COMMON} elements, the
compiler may be forced by some systems to violate the Fortran semantics by
adding padding to get @code{DOUBLE PRECISION} data properly aligned.
If the unfortunate practice is employed of overlaying different types of
data in the @code{COMMON} block, the different variants
of this block may become misaligned with respect to each other.
Even if your platform doesn't require strict alignment,
@code{COMMON} should be laid out as above for portability.
(Unfortunately the FORTRAN 77 standard didn't anticipate this
possible requirement, which is compiler-independent on a given platform.)
@item
@cindex -malign-double option
@cindex options, -malign-double
Use the (x86-specific) @samp{-malign-double} option when compiling
programs.
This will align only static data (entities in @code{COMMON} or
local entities with the @code{SAVE} attribute),
but it should probably always be
used with Fortran code on the 586 and 686 architectures for best
performance.
This feature of @samp{-malign-double} means it may actually be best to
use it with @samp{-fno-automatic} even though the latter usually
produces worse code; at least, doing so will tend to produce more
consistent run times.
Using @samp{-malign-double} and @samp{-fno-automatic} together is
apparently the only way to ensure that all doubles are correctly aligned
on GNU x86 systems without having to change @code{g77} itself as
described in the next item.
(Note that the @code{gcc} C extension @samp{__attribute__ ((aligned (8))}
also won't double-align the datum to which it is applied if that is allocated
on the stack.)
It isn't clear whether this deficiency also applies to
non-GNU based x86 systems (Solaris, DGUX et al), but it probably does.
@item
Change the definition of the @samp{STACK_BOUNDARY} macro in
@file{gcc/config/i386/i386.h} from @samp{32} to
@samp{(TARGET_ALIGN_DOUBLE ? 64 : 32)}, and rebuild
@code{g77}.
@xref{Installation,,Installing GNU Fortran}, for more information.
programs for the Pentium and Pentium Pro architectures (called 586
and 686 in the @code{gcc} configuration subsystem).
The warning about this in the @code{gcc} manual isn't
generally relevant to Fortran,
but using it will force @code{COMMON} to be padded if necessary to align
@code{DOUBLE PRECISION} data.
@item
Ensure that @file{crt0.o} or @file{crt1.o}
on your system guarantees a 64-bit
aligned stack for @code{main()}.
Some experimentation might be needed to determine this, and
access to source code to fix this.
While arranging this may typically
get more data properly aligned, it won't, by itself,
ensure they all are.
One approach to testing this is to write a @code{main()} program
in C or assembler that outputs the address of the stack pointer
(and/or frame pointer), and visually inspect the output to see
if the stack is 64-bit aligned.
If it is, try renaming the executable to longer and shorter names
and running the program again.
If the name of the executable is placed on the stack by @file{crt0.o}
or @file{crt1.o},
the location of the stack should move, and this might help determine
whether it is kept on a 64-bit boundary.
The recent one from GNU (@code{glibc2}) will do this on x86 systems,
but we don't know of any other x86 setups where it will be right.
Read your system's documentation to determine if
it is appropriate to upgrade to a more recent version
to obtain the optimal alignment.
@end itemize
Yes, this is all more complicated than it should be.
The problems are best solved in @code{gcc} and the
libraries for the operating systems on such systems,
which need to be continuously updated to provide the
best alignment for newly released processors.
Managing this while remaining compatible with ABIs
on various systems can be challenging.
Progress is being made on making this work
``out of the box'' on future versions of @code{g77},
@code{gcc}, and some of the relevant operating systems
(such as GNU/Linux).
@node Prefer Automatic Uninitialized Variables
@subsection Prefer Automatic Uninitialized Variables
@ -10951,6 +10945,18 @@ probably considered just behind intrinsics
in @code{PARAMETER} statements on the list of large,
important things to add to @code{g77}.
In the meantime, consider using the @code{INTEGER(KIND=7)}
declaration to specify that a variable must be
able to hold a pointer.
This construct is not portable to other non-GNU compilers,
but it is portable to all machines GNU Fortran supports
when @code{g77} is used.
@xref{Functions and Subroutines}, for information on
@code{%VAL()}, @code{%REF()}, and @code{%DESCR()}
constructs, which are useful for passing pointers to
procedures written in languages other than Fortran.
@node Sensible Non-standard Constructs
@subsection Sensible Non-standard Constructs
@ -12224,6 +12230,63 @@ If you are an experienced user of Fortran compilers, your suggestions
for improvement of GNU Fortran are welcome in any case.
@end itemize
Many, perhaps most, bug reports against @code{g77} turn out to
be bugs in the user's code.
While we find such bug reports educational, they sometimes take
a considerable amount of time to track down or at least respond
to---time we could be spending making @code{g77}, not some user's
code, better.
Some steps you can take to verify that the bug is not certainly
in the code you're compiling with @code{g77}:
@itemize @bullet
@item
Compile your code using the @code{g77} options @samp{-W -Wall -O}.
These options enable many useful warning; the @samp{-O} option
enables flow analysis that enables the uninitialized-variable
warning.
If you investigate the warnings and find evidence of possible bugs
in your code, fix them first and retry @code{g77}.
@item
Compile your code using the @code{g77} options @samp{-finit-local-zero},
@samp{-fno-automatic}, @samp{-ffloat-store}, and various
combinations thereof.
If your code works with any of these combinations, that is not
proof that the bug isn't in @code{g77}---a @code{g77} bug exposed
by your code might simply be avoided, or have a different, more subtle
effect, when different options are used---but it can be a
strong indicator that your code is making unawarranted assumptions
about the Fortran dialect and/or underlying machine it is
being compiled and run on.
@xref{Overly Convenient Options,,Overly Convenient Command-Line Options},
for information on the @samp{-fno-automatic} and
@samp{-finit-local-zero} options and how to convert
their use into selective changes in your own code.
@item
@pindex ftncheck
Validate your code with @code{ftnchek} or a similar code-checking
tool.
@code{ftncheck} can be found at @url{ftp://ftp.netlib.org/fortran}
or @url{ftp://ftp.dsm.fordham.edu}.
@item
Try your code out using other Fortran compilers, such as @code{f2c}.
If it does not work on at least one other compiler (assuming the
compiler supports the features the code needs), that is a strong
indicator of a bug in the code.
However, even if your code works on many compilers @emph{except}
@code{g77}, that does @emph{not} mean the bug is in @code{g77}.
It might mean the bug is in your code, and that @code{g77} simply
exposes it more readily than other compilers.
@end itemize
@node Bug Lists
@section Where to Report Bugs
@cindex bug report mailing lists

View File

@ -302,10 +302,11 @@ ffeglobal_new_progunit_ (ffesymbol s, ffelexToken t, ffeglobalType type)
return;
if ((g != NULL)
&& (g->type != FFEGLOBAL_typeNONE)
&& (g->type != FFEGLOBAL_typeEXT)
&& ((g->type != type)
|| (g->u.proc.defined)))
&& ((g->type == FFEGLOBAL_typeMAIN)
|| (g->type == FFEGLOBAL_typeSUBR)
|| (g->type == FFEGLOBAL_typeFUNC)
|| (g->type == FFEGLOBAL_typeBDATA))
&& g->u.proc.defined)
{
if (ffe_is_globals () || ffe_is_warn_globals ())
{
@ -321,6 +322,27 @@ ffeglobal_new_progunit_ (ffesymbol s, ffelexToken t, ffeglobalType type)
}
g->type = FFEGLOBAL_typeANY;
}
else if ((g != NULL)
&& (g->type != FFEGLOBAL_typeNONE)
&& (g->type != FFEGLOBAL_typeEXT)
&& (g->type != type))
{
if (ffe_is_globals () || ffe_is_warn_globals ())
{
ffebad_start (ffe_is_globals ()
? FFEBAD_FILEWIDE_DISAGREEMENT
: FFEBAD_FILEWIDE_DISAGREEMENT_W);
ffebad_string (ffelex_token_text (t));
ffebad_string (ffeglobal_type_string_[type]);
ffebad_string (ffeglobal_type_string_[g->type]);
ffebad_here (0, ffelex_token_where_line (t),
ffelex_token_where_column (t));
ffebad_here (1, ffelex_token_where_line (g->t),
ffelex_token_where_column (g->t));
ffebad_finish ();
}
g->type = FFEGLOBAL_typeANY;
}
else
{
if (g == NULL)
@ -1180,6 +1202,12 @@ ffeglobal_ref_progunit_ (ffesymbol s, ffelexToken t, ffeglobalType type)
ffename n = NULL;
ffeglobal g;
/* It is never really _known_ that an EXTERNAL statement
names a BLOCK DATA by just looking at the program unit,
so override a different notion here. */
if (type == FFEGLOBAL_typeBDATA)
type = FFEGLOBAL_typeEXT;
g = ffesymbol_global (s);
if (g == NULL)
{
@ -1218,11 +1246,6 @@ ffeglobal_ref_progunit_ (ffesymbol s, ffelexToken t, ffeglobalType type)
ffebad_finish ();
}
#endif
/* It is never really _known_ that an EXTERNAL statement
names a BLOCK DATA by just looking at the program unit,
so don't override a different notion. */
if (type == FFEGLOBAL_typeBDATA)
type = FFEGLOBAL_typeEXT;
}
else if (ffe_is_globals ())
{
@ -1272,6 +1295,7 @@ ffeglobal_ref_progunit_ (ffesymbol s, ffelexToken t, ffeglobalType type)
&& ((ffesymbol_basictype (s) != g->u.proc.bt)
|| (ffesymbol_kindtype (s) != g->u.proc.kt)
|| ((ffesymbol_size (s) != g->u.proc.sz)
&& g->u.proc.defined
&& (g->u.proc.sz != FFETARGET_charactersizeNONE))))
{
if (ffe_is_globals ())

View File

@ -5,7 +5,7 @@
@c The text of this file appears in the file INSTALL
@c in the G77 distribution, as well as in the G77 manual.
@c 1997-08-11
@c 1997-08-17
@ifclear INSTALLONLY
@node Installation
@ -61,12 +61,17 @@ There are GNU versions of all these available---in fact,
a complete GNU UNIX system can be put together on
most systems, if desired.
The version of GNU @code{gzip} used to package this release
is 1.24.
(The version of GNU @code{tar} used to package this release
is 1.11.2.)
@item @file{gcc-2.7.2.2.tar.gz}
You need to have this, or some other applicable, version
of @code{gcc} on your system.
The version should be an exact copy of a distribution
from the FSF.
It is approximately 7MB large.
Its size is approximately 7.1MB.
If you've already unpacked @file{gcc-2.7.2.2.tar.gz} into a
directory (named @file{gcc-2.7.2.2}) called the @dfn{source tree}
@ -79,31 +84,107 @@ build @code{g77}.
You can obtain an FSF distribution of @code{gcc} from the FSF.
@item @file{g77-0.5.21.tar.gz}
You probably have already unpacked this distribution,
or you are reading an advanced copy of this manual,
which is contained in this distribution.
This distribution approximately 1MB large.
You probably have already unpacked this package,
or you are reading an advance copy of these installation instructions,
which are contained in this distribution.
The size of this package is approximately 1.5MB.
You can obtain an FSF distribution of @code{g77} from the FSF,
the same way you obtained @code{gcc}.
@item 100MB disk space
For a complete @dfn{bootstrap} build, about 100MB
of disk space is required for @code{g77} by the author's
current GNU/Linux system.
@item Enough disk space
The amount of disk space needed to unpack, build, install,
and use @code{g77} depends on the type of system you're
using, how you build @code{g77}, and how much of it you
install (primarily, which languages you install).
Some juggling can reduce the amount of space needed;
during the bootstrap process, once Stage 3 starts,
during which the version of @code{gcc} that has been copied
into the @file{stage2/} directory is used to rebuild the
system, you can delete the @file{stage1/} directory
to free up some space.
The sizes shown below assume all languages distributed
in @code{gcc-2.7.2.2}, plus @code{g77}, will be built
and installed.
These sizes are indicative of GNU/Linux systems on
Intel x86 running COFF and on Digital Alpha (AXP) systems
running ELF.
These should be fairly representative of 32-bit and 64-bit
systems, respectively.
It is likely that many systems don't require the complete
bootstrap build, as they already have a recent version of
@code{gcc} installed.
Such systems might be able to build @code{g77} with only
about 75MB of free space.
Note that all sizes are approximate and subject to change without
notice!
They are based on preliminary releases of g77 made shortly
before the public beta release.
@itemize ---
@item
@code{gcc} and @code{g77} distributions occupy 8.6MB
packed, 35MB unpacked.
These consist of the source code and documentation,
plus some derived files (mostly documentation), for
@code{gcc} and @code{g77}.
Any deviations from these numbers for different
kinds of systems are likely to be very minor.
@item
A ``bootstrap'' build requires an additional 67.3MB
for a total of 102MB on an ix86, and an additional
98MB for a total of 165MB on an Alpha.
@item
Removing @file{gcc/stage1} after the build recovers
10.7MB for a total of 91MB on an ix86, and recovers
??MB for a total of ??MB on an Alpha.
After doing this, the integrity of the build can
still be verified via @samp{make compare}, and the
@code{gcc} compiler modified and used to build itself for
testing fairly quickly, using the copy of the compiler
kept in @code{gcc/stage2}.
@item
Removing @file{gcc/stage2} after the build further
recovers 27.3MB for a total of 64.3MB, and recovers
??MB for a total of ??MB on an Alpha.
After doing this, the compiler can still be installed,
especially if GNU @code{make} is used to avoid
gratuitous rebuilds (or, the installation can be done
by hand).
@item
Installing @code{gcc} and @code{g77} copies
14.9MB onto the @samp{--prefix} disk for a total of 79.2MB
on an ix86, and copies ??MB onto the @samp{--prefix}
disk for a total of ??MB on an Alpha.
@end itemize
After installation, if no further modifications and
builds of @code{gcc} or @code{g77} are planned, the
source and build directory may be removed, leaving
the total impact on a system's disk storage as
that of the amount copied during installation.
Systems with the appropriate version of @code{gcc}
installed don't require the complete
bootstrap build.
Doing a ``straight build'' requires about as much
space as does a bootstrap build followed by removing
both the @file{gcc/stage1} and @file{gcc/stage2}
directories.
Installing @code{gcc} and @code{g77} over existing
versions might require less @emph{new} disk space,
but note that, unlike many products, @code{gcc}
installs itself in a way that avoids overwriting other
installed versions of itself, so that other versions may
easily be invoked (via @samp{gcc -V @var{version}}).
So, the amount of space saved as a result of having
an existing version of @code{gcc} and @code{g77}
already installed is not much---typically only the
command drivers (@code{gcc}, @code{g77}, @code{g++},
and so on, which are small) and the documentation
is overwritten by the new installation.
The rest of the new installation is done without
replacing existing installed versions (assuming
they have different version numbers).
@item @code{patch}
Although you can do everything @code{patch} does yourself,
@ -116,11 +197,17 @@ You can obtain @code{patch} the same way you obtained
In any case, you can apply patches by hand---patch files
are designed for humans to read them.
The version of GNU @code{patch} used to develop this release
is 2.4.
@item @code{make}
Your system must have @code{make}, and you will probably save
yourself a lot of trouble if it is GNU @code{make} (sometimes
referred to as @code{gmake}).
The version of GNU @code{make} used to develop this release
is 3.73.
@item @code{cc}
Your system must have a working C compiler.
@ -135,6 +222,9 @@ generated by running it in its distribution.
You can obtain @code{bison} the same way you obtained
@code{gcc} and @code{g77}.
The version of GNU @code{bison} used to develop this release
is 1.25.
@xref{Missing bison?},
for information on how to work around not having @code{bison}.
@ -144,13 +234,29 @@ around any need for it.
You can obtain @code{makeinfo} the same way you obtained
@code{gcc} and @code{g77}.
The version of GNU @code{makeinfo} used to develop this release
is 1.68, from GNU @code{texinfo} version 3.11.
@xref{Missing makeinfo?},
for information on getting around the lack of @code{makeinfo}.
@item @code{root} access
@item @code{sed}
All UNIX systems have @code{sed}, but some have a broken
version that cannot handle configuring, building, or
installing @code{gcc} or @code{g77}.
The version of GNU @code{sed} used to develop this release
is 2.05.
(Note that GNU @code{sed} version 3.0 was withdrawn by the
FSF---if you happen to have this version installed, replace
it with version 2.05 immediately.
See a GNU distribution site for further explanation.)
@item @code{root} access or equivalent
To perform the complete installation procedures on a system,
you need to have @code{root} access to that system, or
equivalent access.
equivalent access to the @samp{--prefix} directory tree
specified on the @code{configure} command line.
Portions of the procedure (such as configuring and building
@code{g77}) can be performed by any user with enough disk
@ -384,7 +490,7 @@ constants.
@item
Improvements to the way @code{libf2c} is built could make
building @code{g77} as a cross-compiler easier---for example,
passing and using @samp{LD} and @samp{AR} in the appropriate
passing and using @samp{$(LD)} and @samp{$(AR)} in the appropriate
ways.
@item
@ -410,10 +516,13 @@ be pertinent in future versions of @code{g77}.
@menu
* Larger File Unit Numbers:: Raising @samp{MXUNIT}.
* Always Flush Output:: Synchronizing write errors.
* Maximum Stackable Size:: Large arrays are forced off the stack frame.
* Floating-point Bit Patterns:: Possible programs building cross-compiler.
* Large Initialization:: Large arrays with @code{DATA} initialization.
* Alpha Problems Fixed:: Problems 64-bit systems like Alphas now fixed?
* Maximum Stackable Size:: Large arrays forced off the stack.
* Floating-point Bit Patterns:: Possible programs building @code{g77}
as a cross-compiler.
* Large Initialization:: Large arrays with @code{DATA}
initialization.
* Alpha Problems Fixed:: Problems with 64-bit systems like
Alphas now fixed?
@end menu
@node Larger File Unit Numbers
@ -996,8 +1105,8 @@ and @code{g77} is:
@example
sh# @kbd{cd /usr/src}
sh# @kbd{gunzip -d < /usr/FSF/gcc-2.7.2.2.tar.gz | tar xf -}
sh# @kbd{gunzip -d < /usr/FSF/g77-0.5.21.tar.gz | tar xf -}
sh# @kbd{gunzip -c /usr/FSF/gcc-2.7.2.2.tar.gz | tar xf -}
sh# @kbd{gunzip -c /usr/FSF/g77-0.5.21.tar.gz | tar xf -}
sh# @kbd{ln -s gcc-2.7.2.2 gcc}
sh# @kbd{ln -s g77-0.5.21 g77}
sh# @kbd{mv -i g77/* gcc}

View File

@ -72,8 +72,8 @@ main (int argc, char **argv __attribute__ ((unused)))
if (argc != 1)
{
fprintf (stderr, "\
Usage: intdoc > intdoc.texi
Collects and dumps documentation on g77 intrinsics
Usage: intdoc > intdoc.texi\n\
Collects and dumps documentation on g77 intrinsics\n\
to the file named intdoc.texi.\n");
exit (1);
}
@ -179,14 +179,14 @@ struct cc_pair { ffeintrinImp imp; char *text; };
static char *descriptions[FFEINTRIN_imp] = { 0 };
static struct cc_pair cc_descriptions[] = {
#define DEFDOC(IMP,SUMMARY,DESCRIPTION) { FFEINTRIN_imp ## IMP, DESCRIPTION },
#include "intdoc.h"
#include "intdoc.h0"
#undef DEFDOC
};
static char *summaries[FFEINTRIN_imp] = { 0 };
static struct cc_pair cc_summaries[] = {
#define DEFDOC(IMP,SUMMARY,DESCRIPTION) { FFEINTRIN_imp ## IMP, SUMMARY },
#include "intdoc.h"
#include "intdoc.h0"
#undef DEFDOC
};
@ -312,11 +312,11 @@ static void
dumpgen (int menu, char *name, char *name_uc, ffeintrinGen gen)
{
size_t i;
int total;
int total = 0;
if (!menu)
{
for (total = 0, i = 0; i < ARRAY_SIZE (gens[gen].specs); ++i)
for (i = 0; i < ARRAY_SIZE (gens[gen].specs); ++i)
{
if (gens[gen].specs[i] != FFEINTRIN_specNONE)
++total;
@ -457,12 +457,12 @@ dumpimp (int menu, char *name, char *name_uc, size_t genno, ffeintrinFamily fami
if (imp == FFEINTRIN_impNONE)
{
printf ("
This intrinsic is not yet implemented.
The name is, however, reserved as an intrinsic.
Use @samp{EXTERNAL %s} to use this name for an
external procedure.
printf ("\n\
This intrinsic is not yet implemented.\n\
The name is, however, reserved as an intrinsic.\n\
Use @samp{EXTERNAL %s} to use this name for an\n\
external procedure.\n\
\n\
",
name);
return;
@ -472,9 +472,9 @@ external procedure.
subr = (c[0] == '-');
colon = (c[2] == ':') ? 2 : 3;
printf ("
@noindent
@example
printf ("\n\
@noindent\n\
@example\n\
%s%s(",
(subr ? "CALL " : ""), name);
@ -497,8 +497,9 @@ external procedure.
argc, argc);
}
printf (")
@end example\n
printf (")\n\
@end example\n\
\n\
");
if (!subr)
@ -522,7 +523,7 @@ external procedure.
}
printf ("\
@noindent
@noindent\n\
%s: ", name);
print_type_string (c);
printf (" function");
@ -536,20 +537,20 @@ external procedure.
|| (arg_info[0] == '*') || (arg_info[0] == 'n') || (arg_info[0] == 'p'))
++arg_info;
if ((arg_info[0] == 'F') || (arg_info[0] == 'N'))
printf (".
The exact type is @samp{REAL(KIND=1)} when argument @var{%s} is
any type other than @code{COMPLEX}, or when it is @code{COMPLEX(KIND=1)}.
When @var{%s} is any @code{COMPLEX} type other than @code{COMPLEX(KIND=1)},
this intrinsic is valid only when used as the argument to
printf (".\n\
The exact type is @samp{REAL(KIND=1)} when argument @var{%s} is\n\
any type other than @code{COMPLEX}, or when it is @code{COMPLEX(KIND=1)}.\n\
When @var{%s} is any @code{COMPLEX} type other than @code{COMPLEX(KIND=1)},\n\
this intrinsic is valid only when used as the argument to\n\
@code{REAL()}, as explained below.\n\n",
arg_string,
arg_string);
else
printf (".
This intrinsic is valid when argument @var{%s} is
@code{COMPLEX(KIND=1)}.
When @var{%s} is any other @code{COMPLEX} type,
this intrinsic is valid only when used as the argument to
printf (".\n\
This intrinsic is valid when argument @var{%s} is\n\
@code{COMPLEX(KIND=1)}.\n\
When @var{%s} is any other @code{COMPLEX} type,\n\
this intrinsic is valid only when used as the argument to\n\
@code{REAL()}, as explained below.\n\n",
arg_string,
arg_string);
@ -557,7 +558,7 @@ this intrinsic is valid only when used as the argument to
#if 0
else if ((c[0] == 'I')
&& (c[1] == 'p'))
printf (", the exact type being wide enough to hold a pointer
printf (", the exact type being wide enough to hold a pointer\n\
on the target system (typically @code{INTEGER(KIND=1)} or @code{INTEGER(KIND=4)}).\n\n");
#endif
else if ((c[1] == '=')
@ -583,10 +584,10 @@ on the target system (typically @code{INTEGER(KIND=1)} or @code{INTEGER(KIND=4)}
&& ((arg_info[0] == 'C')
|| (arg_info[0] == 'F')
|| (arg_info[0] == 'N')))
printf (".
The exact type depends on that of argument @var{%s}---if @var{%s} is
@code{COMPLEX}, this function's type is @code{REAL}
with the same @samp{KIND=} value as the type of @var{%s}.
printf (".\n\
The exact type depends on that of argument @var{%s}---if @var{%s} is\n\
@code{COMPLEX}, this function's type is @code{REAL}\n\
with the same @samp{KIND=} value as the type of @var{%s}.\n\
Otherwise, this function's type is the same as that of @var{%s}.\n\n",
arg_string, arg_string, arg_string, arg_string);
else
@ -595,7 +596,7 @@ Otherwise, this function's type is the same as that of @var{%s}.\n\n",
}
else if ((c[1] == '=')
&& (c[colon + 1] == '*'))
printf (", the exact type being the result of cross-promoting the
printf (", the exact type being the result of cross-promoting the\n\
types of all the arguments.\n\n");
else if (c[1] == '=')
assert ("?0:?:" == NULL);
@ -613,7 +614,7 @@ types of all the arguments.\n\n");
int elements;
printf ("\
@noindent
@noindent\n\
@var{");
for (; ; ++argc)
{
@ -875,12 +876,12 @@ types of all the arguments.\n\n");
break;
case 'g':
printf ("@samp{*@var{label}}, where @var{label} is the label
printf ("@samp{*@var{label}}, where @var{label} is the label\n\
of an executable statement");
break;
case 's':
printf ("Signal handler (@code{INTEGER FUNCTION} or @code{SUBROUTINE})
printf ("Signal handler (@code{INTEGER FUNCTION} or @code{SUBROUTINE})\n\
or dummy/global @code{INTEGER(KIND=1)} scalar");
break;
@ -965,7 +966,7 @@ or dummy/global @code{INTEGER(KIND=1)} scalar");
}
printf ("\
@noindent
@noindent\n\
Intrinsic groups: ");
switch (family)
{
@ -1021,8 +1022,8 @@ Intrinsic groups: ");
char *c = descriptions[imp];
printf ("\
@noindent
Description:
@noindent\n\
Description:\n\
\n");
while (c[0] != '\0')

File diff suppressed because it is too large Load Diff

View File

@ -42,7 +42,7 @@ typedef enum
FFEINTRIN_familyFVZ, /* in both f2c and VAX/VMS FORTRAN. */
FFEINTRIN_familyF2U, /* libf2c/libU77 UNIX system intrinsics. */
FFEINTRIN_familyBADU77, /* libU77 UNIX system intrinsics with bad form. */
FFEINTRIN_family,
FFEINTRIN_family
} ffeintrinFamily;
typedef enum

View File

@ -33,10 +33,9 @@ the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
#include "proj.h"
#include "malloc.h"
/* For systems where <stdlib.h> is missing: */
void *malloc (size_t size);
void *realloc (void *ptr, size_t size);
/* Assume gcc/toplev.o is linked in. */
void *xmalloc (unsigned size);
void *xrealloc (void *ptr, int size);
/* Externals defined here. */
@ -364,19 +363,14 @@ void *
malloc_new_ (mallocSize s)
{
void *ptr;
size_t ss = s;
unsigned ss = s;
#if MALLOC_DEBUG
#if MALLOC_DEBUG && 0
assert (s == (mallocSize) ss);/* Else alloc is too big for this
library/sys. */
#endif
ptr = malloc (ss);
if (ptr == NULL)
{
free (malloc_reserve_);
assert (ptr != NULL);
}
ptr = xmalloc (ss);
#if MALLOC_DEBUG
memset (ptr, 126, ss); /* Catch some kinds of errors more
quickly/reliably. */
@ -523,18 +517,13 @@ malloc_resize_inpool_ (mallocPool pool, mallocType_ type UNUSED,
void *
malloc_resize_ (void *ptr, mallocSize s)
{
size_t ss = s;
int ss = s;
#if MALLOC_DEBUG
#if MALLOC_DEBUG && 0
assert (s == (mallocSize) ss);/* Too big if failure here. */
#endif
ptr = realloc (ptr, ss);
if (ptr == NULL)
{
free (malloc_reserve_);
assert (ptr != NULL);
}
ptr = xrealloc (ptr, ss);
return ptr;
}

View File

@ -5,7 +5,7 @@
@c The text of this file appears in the file BUGS
@c in the G77 distribution, as well as in the G77 manual.
@c 1997-08-11
@c 1997-08-25
@ifclear NEWSONLY
@node News
@ -111,6 +111,11 @@ Place automatic arrays on the stack, even if
is in effect.
This avoids a compiler crash in some cases.
@item
The @samp{-malign-double} option now reliably aligns
@code{DOUBLE PRECISION} optimally on Pentium and
Pentium Pro architectures (586 and 686 in @code{gcc}).
@item
New option @samp{-Wno-globals} disables warnings
about ``suspicious'' use of a name both as a global
@ -231,6 +236,9 @@ front end.
Modify @code{make} rules and related code so that
generation of Info documentation doesn't require
compilation using @code{gcc}.
Now, any ANSI C compiler should be adequate to
produce the @code{g77} documentation (in particular,
the tables of intrinsics) from scratch.
@item
Add @code{INT2} and @code{INT8} intrinsics.
@ -284,7 +292,7 @@ as an option that inhibits linking, just like @samp{-c} or
and @samp{-Xlinker} options.
@item
Upgrade to @code{libf2c} as of 1997-08-06.
Upgrade to @code{libf2c} as of 1997-08-16.
@item
Modify @code{libf2c} to consistently and clearly diagnose

View File

@ -1,3 +1,51 @@
Tue Aug 26 01:42:21 1997 Craig Burley <burley@gnu.ai.mit.edu>
From Jim Wilson:
* configure.in: Make sure RANLIB_TEST is set also.
From Robert Lipe <robertl@dgii.com>:
* libU77/getcwd_.c, libU77/hostnm_.c, libU77/lstat_.c:
Also #include <errno.h>, to define ENOSYS.
Tue Aug 26 01:25:58 1997 Craig Burley <burley@gnu.ai.mit.edu>
* Makefile.in (stamp-lib): Put all f2cext.c objects in
a temp directory named libE77, then `ar' them all at
once into libf2c.a, to get the job done a bit faster.
Still remove the objects (and libE77 directory) afterward.
Sun Aug 24 05:04:35 1997 Craig Burley <burley@gnu.ai.mit.edu>
* libU77/rand_.c (G77_rand_0), libU77/dtime_.c (G77_dtime_0),
libU77/etime_.c (G77_etime_0), libU77/secnds_.c (G77_secnds_0),
libU77/second_.c (G77_second_0): Really return `double', not
`doublereal', since the result is cast to `float'.
* f2cext.c: (rand_, dtime_, etime_, secnds_, second_): Ditto.
(erf_, erfc_, besj0_, besj1_, besjn_, besy0_, besy1_,
besyn_, dbesj0_, dbesj1_, dbesjn_, dbesy0_, dbesy1_,
dbesyn_): All of these return `double', not `doublereal',
as they either have `float' or `double' results.
* libU77/bes.c (besj0_, besj1_, besjn_, besy0_, besy1_,
besyn_): Ditto.
* libU77/dbes.c (dbesj0_, dbesj1_, dbesjn_, dbesy0_, dbesy1_,
dbesyn_): Ditto.
Update to Netlib version of 1997-08-16:
* libI77/iio.c: Fix bug in internal writes to an array
of character strings.
* Makefile.in (UOBJ): Restore fixes made by Dan Pettet I
lost, which included the addition of mclock_.o already noted
below, plus adding symlnk_.o.
Thu Aug 21 03:58:34 1997 Craig Burley <burley@gnu.ai.mit.edu>
* Makefile.in (UOBJ): Add mclock_.o, thanks to Mumit Khan!
1997-08-21 Dave Love <d.love@dl.ac.uk>
* libU77/alarm_.c: Fix return type: `integer'.
Mon Aug 11 20:12:42 1997 Craig Burley <burley@gnu.ai.mit.edu>
* Makefile.in ($(lib), stamp-lib): Ensure that library

View File

@ -9,17 +9,3 @@ Mon Aug 25 23:26:05 1997 H.J. Lu (hjl@gnu.ai.mit.edu)
(stamp-libi77, stamp-libf77, stamp-libu77): New.
(stamp-lib): Only depend on stamp-libi77 stamp-libf77
stamp-libu77
Mon Aug 25 01:40:01 1997 Jim Wilson (wilson@cygnus.com)
* configure.in: Always make sure RANLIB_TEST is set.
* configure: Rebuilt.
Fri Aug 22 08:55:12 1997 Jeffrey A Law (law@cygnus.com)
* Makefile.in (UOBJ): Include symlnk.
Wed Aug 20 23:18:46 1997 Mumit Khan (khan@xraylith.wisc.edu)
* Makefile.in (UOBJ): Include mclock.

View File

@ -132,8 +132,8 @@ UOBJ = libU77/VersionU.o libU77/gerror_.o libU77/perror_.o libU77/ierrno_.o \
libU77/bes.o libU77/dbes.o libU77/chdir_.o libU77/chmod_.o \
libU77/lnblnk_.o libU77/hostnm_.o libU77/rename_.o libU77/fgetc_.o \
libU77/fputc_.o libU77/umask_.o libU77/system_clock_.o libU77/date_.o \
libU77/second_.o libU77/flush1_.o libU77/alarm_.o \
libU77/mclock_.o libU77/symlnk_.o
libU77/second_.o libU77/flush1_.o libU77/alarm_.o libU77/mclock_.o \
libU77/symlnk_.o
F2CEXT = abort derf derfc ef1asc ef1cmc erf erfc exit getarg getenv iargc \
signal system flush ftell fseek access besj0 besj1 besjn besy0 besy1 \
@ -175,16 +175,17 @@ $(lib): stamp-lib ; @true
stamp-lib: stamp-libf77 stamp-libi77 stamp-libu77
rm -f stamp-lib
$(AR) $(AR_FLAGS) $(lib) $(FOBJ) $(IOBJ) $(UOBJ)
rm -fr libE77
mkdir libE77
for name in $(F2CEXT); \
do \
echo $${name}; \
$(GCC_FOR_TARGET) -c -I. -I$(srcdir) -I../../include $(CPPFLAGS) $(CFLAGS) $(CGFLAGS) \
-DL$${name} $(srcdir)/f2cext.c; \
-DL$${name} $(srcdir)/f2cext.c -o libE77/L$${name}$(objext); \
if [ $$? -eq 0 ] ; then true; else exit 1; fi; \
mv f2cext$(objext) L$${name}$(objext); \
$(AR) $(AR_FLAGS) $(lib) L$${name}$(objext); \
rm -f L$${name}$(objext); \
done
$(AR) $(AR_FLAGS) $(lib) libE77/*$(object)
rm -fr libE77
if $(RANLIB_TEST); then $(RANLIB) $(lib); \
else true; fi
touch stamp-lib

View File

@ -2834,3 +2834,8 @@ draft (in 1990 or 1991) that rescinded permission to elide quote marks
in namelist input of character data; to get the old behavior, compile
with F8X_NML_ELIDE_QUOTES #defined. wrtfmt.o: wrt_G: tweak to print
the right number of 0's for zero under G format.
Sat Aug 16 05:45:32 EDT 1997
libI77: iio.c: fix bug in internal writes to an array of character
strings that sometimes caused one more array element than required by
the format to be blank-filled. Example: format(1x).

View File

@ -55,18 +55,15 @@ integer ef1cmc_ (ftnint *a, ftnlen *la, ftnint *b, ftnlen *lb) {
}
#endif
/* Note that erf*_ and bes*_ return doublereal, not real, as this
is the f2c interface, which is based on K&R C. */
#ifdef Lerf
doublereal erf_ (real *x) {
double erf_ (real *x) {
extern double G77_erf_0 (real *x);
return G77_erf_0 (x);
}
#endif
#ifdef Lerfc
doublereal erfc_ (real *x) {
double erfc_ (real *x) {
extern double G77_erfc_0 (real *x);
return G77_erfc_0 (x);
}
@ -150,37 +147,37 @@ integer alarm_ (integer *seconds, sig_proc proc, integer *status) {
#endif
#ifdef Lbesj0
doublereal besj0_ (const real *x) {
double besj0_ (const real *x) {
return j0 (*x);
}
#endif
#ifdef Lbesj1
doublereal besj1_ (const real *x) {
double besj1_ (const real *x) {
return j1 (*x);
}
#endif
#ifdef Lbesjn
doublereal besjn_ (const integer *n, real *x) {
double besjn_ (const integer *n, real *x) {
return jn (*n, *x);
}
#endif
#ifdef Lbesy0
doublereal besy0_ (const real *x) {
double besy0_ (const real *x) {
return y0 (*x);
}
#endif
#ifdef Lbesy1
doublereal besy1_ (const real *x) {
double besy1_ (const real *x) {
return y1 (*x);
}
#endif
#ifdef Lbesyn
doublereal besyn_ (const integer *n, real *x) {
double besyn_ (const integer *n, real *x) {
return yn (*n, *x);
}
#endif
@ -214,51 +211,51 @@ int date_ (char *buf, ftnlen buf_len) {
#endif
#ifdef Ldbesj0
doublereal dbesj0_ (const double *x) {
double dbesj0_ (const double *x) {
return j0 (*x);
}
#endif
#ifdef Ldbesj1
doublereal dbesj1_ (const double *x) {
double dbesj1_ (const double *x) {
return j1 (*x);
}
#endif
#ifdef Ldbesjn
doublereal dbesjn_ (const integer *n, double *x) {
double dbesjn_ (const integer *n, double *x) {
return jn (*n, *x);
}
#endif
#ifdef Ldbesy0
doublereal dbesy0_ (const double *x) {
double dbesy0_ (const double *x) {
return y0 (*x);
}
#endif
#ifdef Ldbesy1
doublereal dbesy1_ (const double *x) {
double dbesy1_ (const double *x) {
return y1 (*x);
}
#endif
#ifdef Ldbesyn
doublereal dbesyn_ (const integer *n, double *x) {
double dbesyn_ (const integer *n, double *x) {
return yn (*n, *x);
}
#endif
#ifdef Ldtime
doublereal dtime_ (real tarray[2]) {
extern doublereal G77_dtime_0 (real tarray[2]);
double dtime_ (real tarray[2]) {
extern double G77_dtime_0 (real tarray[2]);
return G77_dtime_0 (tarray);
}
#endif
#ifdef Letime
doublereal etime_ (real tarray[2]) {
extern doublereal G77_etime_0 (real tarray[2]);
double etime_ (real tarray[2]) {
extern double G77_etime_0 (real tarray[2]);
return G77_etime_0 (tarray);
}
#endif
@ -460,8 +457,8 @@ int perror_ (const char *str, const ftnlen Lstr) {
#endif
#ifdef Lrand
doublereal rand_ (integer *flag) {
extern doublereal G77_rand_0 (integer *flag);
double rand_ (integer *flag) {
extern double G77_rand_0 (integer *flag);
return G77_rand_0 (flag);
}
#endif
@ -474,15 +471,15 @@ integer rename_ (const char *path1, const char *path2, const ftnlen Lpath1, cons
#endif
#ifdef Lsecnds
doublereal secnds_ (real *r) {
extern doublereal G77_secnds_0 (real *r);
double secnds_ (real *r) {
extern double G77_secnds_0 (real *r);
return G77_secnds_0 (r);
}
#endif
#ifdef Lsecond
doublereal second_ () {
extern doublereal G77_second_0 ();
double second_ () {
extern double G77_second_0 ();
return G77_second_0 ();
}
#endif

View File

@ -1,4 +1,4 @@
static char junk[] = "\n@(#) LIBI77 VERSION pjw,dmg-mods 19970805\n";
static char junk[] = "\n@(#) LIBI77 VERSION pjw,dmg-mods 19970816\n";
/*
*/
@ -260,6 +260,10 @@ wrtfmt.c:
with -DF8X_NML_ELIDE_QUOTES to get the old behavior.
wrtfmt.o: wrt_G: tweak to print the right number of 0's
for zero under G format. */
/* 16 Aug. 1997: iio.c: fix bug in internal writes to an array of character
strings that sometimes caused one more array element than
required by the format to be blank-filled. Example:
format(1x). */
/* 17 June 1997: detect recursive I/O and call f__fatal explaining it. */
#include <stdio.h>

View File

@ -139,7 +139,8 @@ integer e_wsfi(Void)
f__init &= ~2;
n = en_fio();
f__fmtbuf = NULL;
if(f__icnum >= f__svic->icirnum)
if(f__icnum >= f__svic->icirnum
|| !f__recpos && f__icnum)
return(n);
while(f__recpos++ < f__svic->icirlen)
*f__icptr++ = ' ';

View File

@ -39,14 +39,14 @@ typedef RETSIGTYPE (*sig_type)();
#ifdef KR_headers
extern sig_type signal();
int G77_alarm_0 (seconds, proc)
integer G77_alarm_0 (seconds, proc)
integer *seconds;
sig_type proc;
#else
#include <signal.h>
typedef int (*sig_proc)(int);
int G77_alarm_0 (integer *seconds, sig_proc proc)
integer G77_alarm_0 (integer *seconds, sig_proc proc)
#endif
{
int status;

View File

@ -20,27 +20,27 @@ Boston, MA 02111-1307, USA. */
#include "f2c.h"
#include <math.h>
doublereal G77_besj0_0 (const real *x) {
double G77_besj0_0 (const real *x) {
return j0 (*x);
}
doublereal G77_besj1_0 (const real *x) {
double G77_besj1_0 (const real *x) {
return j1 (*x);
}
doublereal G77_besjn_0 (const integer *n, real *x) {
double G77_besjn_0 (const integer *n, real *x) {
return jn (*n, *x);
}
doublereal G77_besy0_0 (const real *x) {
double G77_besy0_0 (const real *x) {
return y0 (*x);
}
doublereal G77_besy1_0 (const real *x) {
double G77_besy1_0 (const real *x) {
return y1 (*x);
}
doublereal G77_besyn_0 (const integer *n, real *x) {
double G77_besyn_0 (const integer *n, real *x) {
return yn (*n, *x);
}
#endif

View File

@ -20,27 +20,27 @@ Boston, MA 02111-1307, USA. */
#include <math.h>
#if 0 /* Don't include these unless necessary -- dnp. */
doublereal G77_dbesj0_0 (const double *x) {
double G77_dbesj0_0 (const double *x) {
return j0 (*x);
}
doublereal G77_dbesj1_0 (const double *x) {
double G77_dbesj1_0 (const double *x) {
return j1 (*x);
}
doublereal G77_dbesjn_0 (const integer *n, double *x) {
double G77_dbesjn_0 (const integer *n, double *x) {
return jn (*n, *x);
}
doublereal G77_dbesy0_0 (const double *x) {
double G77_dbesy0_0 (const double *x) {
return y0 (*x);
}
doublereal G77_dbesy1_0 (const double *x) {
double G77_dbesy1_0 (const double *x) {
return y1 (*x);
}
doublereal G77_dbesyn_0 (const integer *n, double *x) {
double G77_dbesyn_0 (const integer *n, double *x) {
return yn (*n, *x);
}
#endif

View File

@ -37,10 +37,10 @@ Boston, MA 02111-1307, USA. */
static long clk_tck = 0;
#ifdef KR_headers
doublereal G77_dtime_0 (tarray)
double G77_dtime_0 (tarray)
real tarray[2];
#else
doublereal G77_dtime_0 (real tarray[2])
double G77_dtime_0 (real tarray[2])
#endif
{
time_t utime, stime;

View File

@ -39,10 +39,10 @@ Boston, MA 02111-1307, USA. */
static long clk_tck = 0;
#ifdef KR_headers
doublereal G77_etime_0 (tarray)
double G77_etime_0 (tarray)
real tarray[2];
#else
doublereal G77_etime_0 (real tarray[2])
double G77_etime_0 (real tarray[2])
#endif
{
/* The getrusage version is only the default for convenience. */

View File

@ -26,6 +26,7 @@ Boston, MA 02111-1307, USA. */
# include <strings.h>
#endif
#include <stdio.h> /* for NULL */
#include <errno.h> /* for ENOSYS */
#include "f2c.h"
#if HAVE_GETCWD

View File

@ -25,6 +25,7 @@ Boston, MA 02111-1307, USA. */
#endif
#include <sys/types.h>
#include <sys/stat.h>
#include <errno.h> /* for ENOSYS */
#include "f2c.h"
/* lstat isn't posix */

View File

@ -35,10 +35,10 @@ Boston, MA 02111-1307, USA. */
/* Note this is per SunOS -- other s may have no arg. */
#ifdef KR_headers
doublereal G77_rand_0 (flag)
double G77_rand_0 (flag)
integer *flag;
#else
doublereal G77_rand_0 (integer *flag)
double G77_rand_0 (integer *flag)
#endif
{
switch (*flag) {

View File

@ -36,7 +36,7 @@ Boston, MA 02111-1307, USA. */
/* This is a VMS intrinsic. */
doublereal G77_secnds_0 (real *r)
double G77_secnds_0 (real *r)
{
struct tm *lt;
time_t clock;

View File

@ -18,8 +18,8 @@ Boston, MA 02111-1307, USA. */
#include "f2c.h"
doublereal G77_second_0 () {
extern doublereal G77_etime_0 ();
double G77_second_0 () {
extern double G77_etime_0 ();
real tarray[2];
return G77_etime_0 (tarray);

View File

@ -520,6 +520,11 @@ in namelist input of character data; to get the old behavior, compile
with F8X_NML_ELIDE_QUOTES #defined. wrtfmt.o: wrt_G: tweak to print
the right number of 0's for zero under G format.
Sat Aug 16 05:45:32 EDT 1997
libI77: iio.c: fix bug in internal writes to an array of character
strings that sometimes caused one more array element than required by
the format to be blank-filled. Example: format(1x).
Current timestamps of files in "all from f2c/src", sorted by time,
appear below (mm/dd/year hh:mm:ss). To bring your source up to date,
obtain source files with a timestamp later than the time shown in your

View File

@ -5800,6 +5800,7 @@ ffestb_R5284_ (ffelexToken t)
(ffeexprCallback) ffestb_R5281_);
case FFELEX_typeNAME:
case FFELEX_typeOPEN_PAREN:
return (ffelexHandler) (*((ffelexHandler)
ffeexpr_lhs (ffesta_output_pool,
FFEEXPR_contextDATA,

View File

@ -176,10 +176,10 @@ ffe_decode_option (char *opt)
ffe_is_do_internal_checks_ = 0;
#if BUILT_FOR_270 /* User must have applied patch (circa 2.7.2 and beyond). */
#if 0
flag_move_all_movables = 1;
flag_reduce_all_givs = 1;
flag_rerun_loop_opt = 1;
#endif
flag_move_all_movables = 1;
flag_reduce_all_givs = 1;
flag_argument_noalias = 2;
#endif
}

View File

@ -31,4 +31,4 @@ the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
#include "version.h"
char *ffe_version_string = "0.5.21-19970811";
char *ffe_version_string = "0.5.21-19970826";