Update to Aug 26 g77 front end and runtime.
From-SVN: r14985
This commit is contained in:
parent
d995a6dc49
commit
795232f720
|
@ -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
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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;; \
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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)
|
||||
|
|
36
gcc/f/com.c
36
gcc/f/com.c
|
@ -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_:
|
||||
|
|
|
@ -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
|
||||
|
|
181
gcc/f/g77.texi
181
gcc/f/g77.texi
|
@ -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
|
||||
|
|
|
@ -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 ())
|
||||
|
|
|
@ -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}
|
||||
|
|
|
@ -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')
|
||||
|
|
2370
gcc/f/intdoc.h
2370
gcc/f/intdoc.h
File diff suppressed because it is too large
Load Diff
|
@ -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
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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.
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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).
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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++ = ' ';
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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. */
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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 */
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
|
|
@ -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";
|
||||
|
|
Loading…
Reference in New Issue