summaryrefslogtreecommitdiff
path: root/gnu/usr.bin
diff options
context:
space:
mode:
Diffstat (limited to 'gnu/usr.bin')
-rw-r--r--gnu/usr.bin/gcc/Makefile.bsd-wrapper6
-rw-r--r--gnu/usr.bin/gcc/Makefile.in14
-rw-r--r--gnu/usr.bin/gcc/config/alpha/alpha.c2
-rw-r--r--gnu/usr.bin/gcc/config/alpha/alpha.h18
-rw-r--r--gnu/usr.bin/gcc/config/alpha/openbsd.h98
-rw-r--r--gnu/usr.bin/gcc/config/alpha/xm-openbsd.h2
-rw-r--r--gnu/usr.bin/gcc/configure8
-rw-r--r--gnu/usr.bin/gcc/f/Make-lang.in13
-rw-r--r--gnu/usr.bin/gcc/f/g77.info164
-rw-r--r--gnu/usr.bin/gcc/f/g77.info-11045
-rw-r--r--gnu/usr.bin/gcc/f/g77.info-2846
-rw-r--r--gnu/usr.bin/gcc/f/g77.info-31151
-rw-r--r--gnu/usr.bin/gcc/f/g77.info-41230
-rw-r--r--gnu/usr.bin/gcc/f/g77.info-51085
-rw-r--r--gnu/usr.bin/gcc/f/g77.info-61098
-rw-r--r--gnu/usr.bin/gcc/f/g77.info-71084
-rw-r--r--gnu/usr.bin/gcc/f/g77.info-8916
-rw-r--r--gnu/usr.bin/gcc/f/g77.info-9938
18 files changed, 147 insertions, 9571 deletions
diff --git a/gnu/usr.bin/gcc/Makefile.bsd-wrapper b/gnu/usr.bin/gcc/Makefile.bsd-wrapper
index 0c89f626042..ba0ba87a183 100644
--- a/gnu/usr.bin/gcc/Makefile.bsd-wrapper
+++ b/gnu/usr.bin/gcc/Makefile.bsd-wrapper
@@ -1,4 +1,4 @@
-# $Id: Makefile.bsd-wrapper,v 1.12 1996/07/27 02:50:15 downsj Exp $
+# $Id: Makefile.bsd-wrapper,v 1.13 1996/07/31 00:18:13 niklas Exp $
MAN= cccp.1 gcc.1 cp/g++.1
MLINKS+= gcc.1 cc.1
@@ -12,7 +12,8 @@ CLEANFILES= .gdbinit cp/.gdbinit *.info* bi-parser.c bi-parser.h \
objc-parse.c objc-parse.y
all: config.status
- ${MAKE} ${GNUCFLAGS} BISON=yacc LDFLAGS=${LDSTATIC}
+ ${MAKE} ${GNUCFLAGS} BISON=yacc LDFLAGS=${LDSTATIC} \
+ build_infodir=. all doc
.FORCE: .IGNORE
@@ -28,6 +29,7 @@ config.status:
install: maninstall
${MAKE} ${GNUCFLAGS} prefix=${DESTDIR}/usr \
infodir=${DESTDIR}/usr/share/info \
+ build_infodir=. \
tooldir=/tmp assertdir=/tmp INSTALL_MAN= NO_TARGET_GCC=true \
bindir=${DESTDIR}/usr/bin install
ln -f ${DESTDIR}/usr/bin/gcc ${DESTDIR}/usr/bin/cc
diff --git a/gnu/usr.bin/gcc/Makefile.in b/gnu/usr.bin/gcc/Makefile.in
index 87cd2cce939..4a2f8bd8adc 100644
--- a/gnu/usr.bin/gcc/Makefile.in
+++ b/gnu/usr.bin/gcc/Makefile.in
@@ -208,6 +208,8 @@ includedir = $(local_prefix)/include
assertdir = $(tooldir)/include
# where the info files go
infodir = $(prefix)/info
+# where the info-files get built
+build_infodir = $(srcdir)
# Extension (if any) to put in installed man-page filename.
manext = .1
objext = .o
@@ -1870,14 +1872,14 @@ stmp-fixproto: fixhdr.ready fixproto stmp-headers
# Remake the info files.
doc: info
-info: cpp.info gcc.info lang.info
+info: $(build_infodir)/cpp.info $(build_infodir)/gcc.info lang.info
-cpp.info: cpp.texi
- $(MAKEINFO) $(srcdir)/cpp.texi -o cpp.info
+$(build_infodir)/cpp.info: cpp.texi
+ $(MAKEINFO) $(srcdir)/cpp.texi -o $(build_infodir)/cpp.info
-gcc.info: gcc.texi extend.texi install.texi invoke.texi \
+$(build_infodir)/gcc.info: gcc.texi extend.texi install.texi invoke.texi \
md.texi rtl.texi tm.texi
- $(MAKEINFO) -I$(srcdir) $(srcdir)/gcc.texi -o gcc.info
+ $(MAKEINFO) -I$(srcdir) $(srcdir)/gcc.texi -o $(build_infodir)/gcc.info
dvi: gcc.dvi cpp.dvi lang.dvi
@@ -2139,7 +2141,7 @@ install-driver: xgcc
# Install the info files.
install-info: doc install-dir lang.install-info
-rm -f $(infodir)/cpp.info* $(infodir)/gcc.info*
- for f in cpp.info* gcc.info*; \
+ cd $(build_infodir); for f in cpp.info* gcc.info*; \
do $(INSTALL_DATA) $$f $(infodir)/$$f; done
-chmod a-x $(infodir)/cpp.info* $(infodir)/gcc.info*
diff --git a/gnu/usr.bin/gcc/config/alpha/alpha.c b/gnu/usr.bin/gcc/config/alpha/alpha.c
index d460e8bd2d1..b80717d41c1 100644
--- a/gnu/usr.bin/gcc/config/alpha/alpha.c
+++ b/gnu/usr.bin/gcc/config/alpha/alpha.c
@@ -1238,7 +1238,7 @@ direct_return ()
/* Write a version stamp. Don't write anything if we are running as a
cross-compiler. Otherwise, use the versions in /usr/include/stamp.h. */
-#if !defined(CROSS_COMPILE) && !defined(_WIN32)
+#if !defined(CROSS_COMPILE) && !defined(_WIN32) && !defined(__OpenBSD__) && !defined(__NetBSD__)
#include <stamp.h>
#endif
diff --git a/gnu/usr.bin/gcc/config/alpha/alpha.h b/gnu/usr.bin/gcc/config/alpha/alpha.h
index 0a42ef2d106..b179f1445a0 100644
--- a/gnu/usr.bin/gcc/config/alpha/alpha.h
+++ b/gnu/usr.bin/gcc/config/alpha/alpha.h
@@ -22,12 +22,15 @@ Boston, MA 02111-1307, USA. */
/* Names to predefine in the preprocessor for this target machine. */
+#ifndef CPP_PREDEFINES
#define CPP_PREDEFINES "\
-Dunix -D__osf__ -D__alpha -D__alpha__ -D_LONGLONG -DSYSTYPE_BSD \
-D_SYSTYPE_BSD -Asystem(unix) -Asystem(xpg4) -Acpu(alpha) -Amachine(alpha)"
+#endif
/* Write out the correct language type definition for the header files.
Unless we have assembler language, write out the symbols for C. */
+#ifndef CPP_SPEC
#define CPP_SPEC "\
%{!.S: -D__LANGUAGE_C__ -D__LANGUAGE_C %{!ansi:-DLANGUAGE_C}} \
%{.S: -D__LANGUAGE_ASSEMBLY__ -D__LANGUAGE_ASSEMBLY %{!ansi:-DLANGUAGE_ASSEMBLY}} \
@@ -35,24 +38,31 @@ Boston, MA 02111-1307, USA. */
%{.cxx: -D__LANGUAGE_C_PLUS_PLUS__ -D__LANGUAGE_C_PLUS_PLUS -D__cplusplus} \
%{.C: -D__LANGUAGE_C_PLUS_PLUS__ -D__LANGUAGE_C_PLUS_PLUS -D__cplusplus} \
%{.m: -D__LANGUAGE_OBJECTIVE_C__ -D__LANGUAGE_OBJECTIVE_C}"
+#endif
/* Set the spec to use for signed char. The default tests the above macro
but DEC's compiler can't handle the conditional in a "constant"
operand. */
+#ifndef SIGNED_CHAR_SPEC
#define SIGNED_CHAR_SPEC "%{funsigned-char:-D__CHAR_UNSIGNED__}"
+#endif
/* Under OSF/1, -p and -pg require -lprof1. */
+#ifndef LIB_SPEC
#define LIB_SPEC "%{p:-lprof1} %{pg:-lprof1} %{a:-lprof2} -lc"
+#endif
/* Pass "-G 8" to ld because Alpha's CC does. Pass -O3 if we are
optimizing, -O1 if we are not. Pass -shared, -non_shared or
-call_shared as appropriate. Also pass -pg. */
+#ifndef LINK_SPEC
#define LINK_SPEC \
"-G 8 %{O*:-O3} %{!O*:-O1} %{static:-non_shared} \
%{!static:%{shared:-shared} %{!shared:-call_shared}} %{pg} %{taso} \
%{rpath*}"
+#endif
#define WORD_SWITCH_TAKES_ARG(STR) \
(!strcmp (STR, "rpath") || !strcmp (STR, "include") \
@@ -61,8 +71,10 @@ Boston, MA 02111-1307, USA. */
|| !strcmp (STR, "iwithprefix") || !strcmp (STR, "iwithprefixbefore") \
|| !strcmp (STR, "isystem"))
+#ifndef STARTFILE_SPEC
#define STARTFILE_SPEC \
"%{!shared:%{pg:gcrt0.o%s}%{!pg:%{p:mcrt0.o%s}%{!p:crt0.o%s}}}"
+#endif
/* Print subsidiary information on the compiler version in use. */
#define TARGET_VERSION
@@ -74,7 +86,9 @@ Boston, MA 02111-1307, USA. */
/* Define the location for the startup file on OSF/1 for Alpha. */
+#ifndef MD_STARTFILE_PREFIX
#define MD_STARTFILE_PREFIX "/usr/lib/cmplrs/cc/"
+#endif
/* Run-time compilation parameters selecting different hardware subsets. */
@@ -111,7 +125,9 @@ extern int target_flags;
{"gas", MASK_GAS}, \
{"", TARGET_DEFAULT | TARGET_CPU_DEFAULT} }
+#ifndef TARGET_DEFAULT
#define TARGET_DEFAULT 3
+#endif
#ifndef TARGET_CPU_DEFAULT
#define TARGET_CPU_DEFAULT 0
@@ -2013,6 +2029,7 @@ do { \
#define PUT_SDB_EPILOGUE_END(NAME)
+#ifndef ASM_SPEC
/* No point in running CPP on our assembler output. */
#if ((TARGET_DEFAULT | TARGET_CPU_DEFAULT) & MASK_GAS) != 0
/* Don't pass -g to GNU as, because some versions don't accept this option. */
@@ -2026,6 +2043,7 @@ do { \
will need to be fixed to work in this case. */
#define ASM_SPEC "%{!mgas:-g} -nocpp %{pg}"
#endif
+#endif
/* Specify to run a post-processor, mips-tfile after the assembler
has run to stuff the ecoff debug information into the object file.
diff --git a/gnu/usr.bin/gcc/config/alpha/openbsd.h b/gnu/usr.bin/gcc/config/alpha/openbsd.h
new file mode 100644
index 00000000000..44acb1baf20
--- /dev/null
+++ b/gnu/usr.bin/gcc/config/alpha/openbsd.h
@@ -0,0 +1,98 @@
+/* Definitions for Alpha systems running BSD as target machine for GNU compiler.
+ Copyright (C) 1993, 1995 Free Software Foundation, Inc.
+
+This file is part of GNU CC.
+
+GNU CC is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2, or (at your option)
+any later version.
+
+GNU CC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GNU CC; see the file COPYING. If not, write to
+the Free Software Foundation, 59 Temple Place - Suite 330,
+Boston, MA 02111-1307, USA. */
+
+/* We settle for little endian for now */
+
+#define TARGET_ENDIAN_DEFAULT 0
+
+/* Look for the include files in the system-defined places. */
+
+#ifndef CROSS_COMPILE
+#undef GPLUSPLUS_INCLUDE_DIR
+#define GPLUSPLUS_INCLUDE_DIR "/usr/include/g++"
+
+#undef GCC_INCLUDE_DIR
+#define GCC_INCLUDE_DIR "/usr/include"
+
+#undef INCLUDE_DEFAULTS
+#define INCLUDE_DEFAULTS \
+ { \
+ { GPLUSPLUS_INCLUDE_DIR, 1, 1 }, \
+ { GCC_INCLUDE_DIR, 0, 0 }, \
+ { 0, 0, 0 } \
+ }
+
+/* Under OpenBSD, the normal location of the various *crt*.o files is the
+ /usr/lib directory. */
+
+#undef STANDARD_STARTFILE_PREFIX
+#define STANDARD_STARTFILE_PREFIX "/usr/lib/"
+#endif
+
+/* Provide a LINK_SPEC appropriate for OpenBSD. Here we provide support
+ for the special GCC options -static, -assert, and -nostdlib. */
+
+#undef LINK_SPEC
+#define LINK_SPEC \
+ "%{!nostdlib:%{!r*:%{!e*:-e __start}}} -dc -dp \
+ %{static:-Bstatic} %{assert*}"
+
+/* We have atexit(3). */
+
+#define HAVE_ATEXIT
+
+/* Implicit library calls should use memcpy, not bcopy, etc. */
+
+#define TARGET_MEM_FUNCTIONS
+
+/* Define mips-specific OpenBSD predefines... */
+#ifndef CPP_PREDEFINES
+#define CPP_PREDEFINES "-D__ANSI_COMPAT \
+-D__OpenBSD__ -D__NetBSD__ -D__alpha__ -D__alpha"
+#endif
+
+/* Always uses gas. */
+#ifndef ASM_SPEC
+#define ASM_SPEC "\
+%|"
+#endif
+
+#ifndef CPP_SPEC
+#define CPP_SPEC "\
+%{posix:-D_POSIX_SOURCE}"
+#endif
+
+#define LIB_SPEC "%{!p:%{!pg:-lc}}%{p:-lc_p}%{pg:-lc_p}"
+#define STARTFILE_SPEC \
+ "%{!shared:%{pg:gcrt0.o%s}%{!pg:%{p:mcrt0.o%s}%{!p:crt0.o%s}}}"
+
+#ifndef MACHINE_TYPE
+#define MACHINE_TYPE "OpenBSD/alpha"
+#endif
+
+#define TARGET_DEFAULT MASK_GAS
+#define PREFERRED_DEBUGGING_TYPE DBX_DEBUG
+
+#define LOCAL_LABEL_PREFIX "."
+
+#include "alpha/alpha.h"
+
+/* Since gas and gld are standard on OpenBSD, we don't need this */
+#undef ASM_FINAL_SPEC
diff --git a/gnu/usr.bin/gcc/config/alpha/xm-openbsd.h b/gnu/usr.bin/gcc/config/alpha/xm-openbsd.h
new file mode 100644
index 00000000000..145b2e2b5b8
--- /dev/null
+++ b/gnu/usr.bin/gcc/config/alpha/xm-openbsd.h
@@ -0,0 +1,2 @@
+#include "alpha/xm-alpha.h"
+#include "config/xm-openbsd.h"
diff --git a/gnu/usr.bin/gcc/configure b/gnu/usr.bin/gcc/configure
index 166eeede322..18d96fe52a2 100644
--- a/gnu/usr.bin/gcc/configure
+++ b/gnu/usr.bin/gcc/configure
@@ -547,6 +547,14 @@ for machine in $canon_build $canon_host $canon_target; do
a29k-*-*) # Default a29k environment.
use_collect2=yes
;;
+ alpha-*-openbsd*)
+ tm_file=alpha/openbsd.h
+ xm_file=alpha/xm-openbsd.h
+ # On OpenBSD, the headers are already okay.
+ fixincludes=Makefile.in
+ tmake_file=t-libc-ok
+ xmake_file=x-openbsd
+ ;;
alpha-dec-osf[23456789]*)
tm_file=alpha/osf2.h
if [ x$stabs = xyes ]
diff --git a/gnu/usr.bin/gcc/f/Make-lang.in b/gnu/usr.bin/gcc/f/Make-lang.in
index 4429fa30dbc..71fe1520691 100644
--- a/gnu/usr.bin/gcc/f/Make-lang.in
+++ b/gnu/usr.bin/gcc/f/Make-lang.in
@@ -117,11 +117,13 @@ g77-cross: f/g77.c version.o $(LIBDEPS)
-DGCC_NAME=\"$(GCC_CROSS_NAME)\" $(srcdir)/f/g77.c version.o $(LIBS)
# g77 documentation.
-$(srcdir)/f/g77.info: f/g77.texi f/bugs.texi f/install.texi f/news.texi
- cd $(srcdir)/f; $(MAKEINFO) g77.texi
+$(build_infodir)/f/g77.info: f/g77.texi f/bugs.texi f/install.texi f/news.texi
+ $(MAKEINFO) -I$(srcdir)/f $(srcdir)/f/g77.texi \
+ -o $(build_infodir)/f/g77.info
+# XXX OpenBSD What to do with dvi builds...?
$(srcdir)/f/g77.dvi: f/g77.texi f/bugs.texi f/install.texi f/news.texi
- cd $(srcdir)/f; $(TEXI2DVI) g77.texi
+ $(TEXI2DVI) $(srcdir)/f/g77.texi
F77_SRCS = \
$(srcdir)/f/assert.j \
@@ -297,7 +299,8 @@ f77.all.cross: g77-cross maybe-f2c
f77.start.encap: g77 maybe-f2c
f77.rest.encap:
-f77.info: $(srcdir)/f/g77.info
+f77.info: $(build_infodir)/f/g77.info
+# XXX OpenBSD What to do with dvi rules...?
f77.dvi: $(srcdir)/f/g77.dvi
$(srcdir)/f/BUGS: f/bugs0.texi f/bugs.texi
@@ -402,7 +405,7 @@ f77.install-common:
f77.install-info:
-rm -f $(infodir)/g77.info*
- cd $(srcdir)/f; for f in g77.info*; \
+ cd $(build_infodir)/f; for f in g77.info*; \
do $(INSTALL_DATA) $$f $(infodir)/$$f; done
-chmod a-x $(infodir)/g77.info*
diff --git a/gnu/usr.bin/gcc/f/g77.info b/gnu/usr.bin/gcc/f/g77.info
deleted file mode 100644
index 68e6929476f..00000000000
--- a/gnu/usr.bin/gcc/f/g77.info
+++ /dev/null
@@ -1,164 +0,0 @@
-This is Info file g77.info, produced by Makeinfo-1.64 from the input
-file g77.texi.
-
- This file explains how to use the GNU Fortran system.
-
- Published by the Free Software Foundation 59 Temple Place - Suite 330
-Boston, MA 02111-1307 USA
-
- Copyright (C) 1995, 1996 Free Software Foundation, Inc.
-
- Permission is granted to make and distribute verbatim copies of this
-manual provided the copyright notice and this permission notice are
-preserved on all copies.
-
- Permission is granted to copy and distribute modified versions of
-this manual under the conditions for verbatim copying, provided also
-that the sections entitled "GNU General Public License," "Funding for
-Free Software," and "Protect Your Freedom--Fight `Look And Feel'" are
-included exactly as in the original, and provided that the entire
-resulting derived work is distributed under the terms of a permission
-notice identical to this one.
-
- Permission is granted to copy and distribute translations of this
-manual into another language, under the above conditions for modified
-versions, except that the sections entitled "GNU General Public
-License," "Funding for Free Software," and "Protect Your Freedom--Fight
-`Look And Feel'", and this permission notice, may be included in
-translations approved by the Free Software Foundation instead of in the
-original English.
-
- Contributed by James Craig Burley (`burley@gnu.ai.mit.edu').
-Inspired by a first pass at translating `g77-0.5.16/f/DOC' that was
-contributed to Craig by David Ronis (`ronis@onsager.chem.mcgill.ca').
-
-
-Indirect:
-g77.info-1: 1548
-g77.info-2: 50373
-g77.info-3: 82640
-g77.info-4: 129737
-g77.info-5: 178815
-g77.info-6: 225545
-g77.info-7: 272677
-g77.info-8: 321177
-g77.info-9: 362647
-
-Tag Table:
-(Indirect)
-Node: Top1548
-Node: Copying3235
-Node: Contributors22417
-Node: Funding25254
-Node: Funding GNU Fortran27757
-Node: Look and Feel30561
-Node: Getting Started31063
-Node: What is GNU Fortran?33381
-Node: G77 and GCC42918
-Node: Invoking G7744269
-Node: Option Summary46343
-Node: Overall Options50373
-Node: Fortran Dialect Options53695
-Node: Warning Options61426
-Node: Debugging Options70047
-Node: Optimize Options70880
-Node: Preprocessor Options73127
-Node: Directory Options73862
-Node: Code Gen Options75096
-Node: Environment Variables82182
-Node: News82640
-Node: Changes107165
-Node: Language113422
-Node: Standard Support114940
-Node: Extensions117336
-Node: Types120281
-Node: Constants124751
-Node: Source Form125905
-Node: Pedantic Compilation129737
-Node: Case Sensitivity133114
-Node: Intrinsics141681
-Node: Dialects144945
-Node: Object Compatibility146590
-Node: Dropping f2c Compatibility148901
-Node: Other Compilers151667
-Node: Distensions153439
-Node: Installation155769
-Node: Prerequisites156907
-Node: Problems Installing161444
-Node: General Problems162073
-Node: Cross-compiler Problems165145
-Node: Quick Start167162
-Node: Complete Installation175136
-Node: Unpacking175716
-Node: Merging Distributions178815
-Node: Installing f77184045
-Node: Installing f2c185390
-Node: Patching GNU Fortran188315
-Node: Where to Install189550
-Node: Configuring gcc192786
-Node: Building gcc194558
-Node: Bootstrap Build196565
-Node: Straight Build198473
-Node: Pre-installation Checks199862
-Node: Installation of Binaries203071
-Node: Updating Documentation204416
-Node: Missing bison?205237
-Node: Missing makeinfo?206589
-Node: Distributing Binaries207114
-Node: Settings212809
-Node: Maximum Stackable Size213641
-Node: Floating-point Bit Patterns214207
-Node: Large Initialization214953
-Node: Alpha Problems216535
-Node: Debugging and Interfacing217599
-Node: Names220157
-Node: Main Program Unit223203
-Node: Arrays225545
-Node: Procedures228872
-Node: Adjustable Arrays231233
-Node: Alternate Returns234091
-Node: Functions234963
-Node: Common Blocks236583
-Node: Local Equivalence Areas237743
-Node: Alternate Entry Points239247
-Node: Assigned Statement Labels246013
-Node: Collected Fortran Wisdom247852
-Node: Overly Convenient Options249288
-Node: Block Data and Libraries252273
-Node: Faster Programs254672
-Node: Working Programs256280
-Node: Loops258948
-Node: Advantages Over f2c264152
-Node: Language Extensions265042
-Node: Compiler Options265549
-Node: Compiler Speed266001
-Node: Program Speed266710
-Node: Ease of Debugging267993
-Node: Character and Hollerith Constants270431
-Node: Trouble271225
-Node: But-bugs272677
-Node: Actual Bugs277795
-Node: Missing Features285801
-Node: Disappointments299831
-Node: Non-bugs302230
-Node: Warnings and Errors313799
-Node: Open Questions315483
-Node: Bugs316771
-Node: Bug Criteria318161
-Node: Bug Lists320407
-Node: Bug Reporting321177
-Node: Sending Patches334589
-Node: Service340071
-Node: Adding Options340539
-Node: Projects344498
-Node: Efficiency345337
-Node: Better Optimization348234
-Node: Simplify Porting352050
-Node: More Extensions353805
-Node: Machine Model356513
-Node: Internals Documentation357799
-Node: Internals Improvements358031
-Node: Better Diagnostics361577
-Node: Index362647
-
-End Tag Table
diff --git a/gnu/usr.bin/gcc/f/g77.info-1 b/gnu/usr.bin/gcc/f/g77.info-1
deleted file mode 100644
index 08eb5fb9dc0..00000000000
--- a/gnu/usr.bin/gcc/f/g77.info-1
+++ /dev/null
@@ -1,1045 +0,0 @@
-This is Info file g77.info, produced by Makeinfo-1.64 from the input
-file g77.texi.
-
- This file explains how to use the GNU Fortran system.
-
- Published by the Free Software Foundation 59 Temple Place - Suite 330
-Boston, MA 02111-1307 USA
-
- Copyright (C) 1995, 1996 Free Software Foundation, Inc.
-
- Permission is granted to make and distribute verbatim copies of this
-manual provided the copyright notice and this permission notice are
-preserved on all copies.
-
- Permission is granted to copy and distribute modified versions of
-this manual under the conditions for verbatim copying, provided also
-that the sections entitled "GNU General Public License," "Funding for
-Free Software," and "Protect Your Freedom--Fight `Look And Feel'" are
-included exactly as in the original, and provided that the entire
-resulting derived work is distributed under the terms of a permission
-notice identical to this one.
-
- Permission is granted to copy and distribute translations of this
-manual into another language, under the above conditions for modified
-versions, except that the sections entitled "GNU General Public
-License," "Funding for Free Software," and "Protect Your Freedom--Fight
-`Look And Feel'", and this permission notice, may be included in
-translations approved by the Free Software Foundation instead of in the
-original English.
-
- Contributed by James Craig Burley (`burley@gnu.ai.mit.edu').
-Inspired by a first pass at translating `g77-0.5.16/f/DOC' that was
-contributed to Craig by David Ronis (`ronis@onsager.chem.mcgill.ca').
-
-
-File: g77.info, Node: Top, Next: Copying, Up: (DIR)
-
-Introduction
-************
-
- This manual documents how to run, install and port the GNU Fortran
-compiler, as well as its new features and incompatibilities, and how to
-report bugs. It corresponds to GNU Fortran version 0.5.18.
-
-* Menu:
-
-* Copying:: GNU General Public License says
- how you can copy and share GNU Fortran.
-* Contributors:: People who have contributed to GNU Fortran.
-* Funding:: How to help assure continued work for free software.
-* Funding GNU Fortran:: How to help assure continued work on GNU Fortran.
-* Look and Feel:: Protect your freedom--fight "look and feel".
-
-* Getting Started:: Finding your way around this manual.
-* What is GNU Fortran?:: How `g77' fits into the universe.
-* G77 and GCC:: You can compile Fortran, C, or other programs.
-* Invoking G77:: Command options supported by `g77'.
-* News:: News about recent releases of `g77'.
-* Changes:: User-visible changes to recent releases of `g77'.
-* Language:: The GNU Fortran language.
-* Installation:: How to configure, compile and install GNU Fortran.
-* Debugging and Interfacing:: How `g77' generates code.
-* Collected Fortran Wisdom:: How to avoid Trouble.
-* Trouble:: If you have trouble with GNU Fortran.
-* Open Questions:: Things we'd like to know.
-* Bugs:: How, why, and where to report bugs.
-* Service:: How to find suppliers of support for GNU Fortran.
-
-* Adding Options:: Guidance on teaching `g77' about new options.
-* Projects:: Projects for `g77' internals hackers.
-
-* Index:: Index of concepts and symbol names.
-
-
-File: g77.info, Node: Copying, Next: Contributors, Prev: Top, Up: Top
-
-GNU GENERAL PUBLIC LICENSE
-**************************
-
- Version 2, June 1991
-
- Copyright (C) 1989, 1991 Free Software Foundation, Inc.
- 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
-
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-Preamble
-========
-
- The licenses for most software are designed to take away your
-freedom to share and change it. By contrast, the GNU General Public
-License is intended to guarantee your freedom to share and change free
-software--to make sure the software is free for all its users. This
-General Public License applies to most of the Free Software
-Foundation's software and to any other program whose authors commit to
-using it. (Some other Free Software Foundation software is covered by
-the GNU Library General Public License instead.) You can apply it to
-your programs, too.
-
- When we speak of free software, we are referring to freedom, not
-price. Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-this service if you wish), that you receive source code or can get it
-if you want it, that you can change the software or use pieces of it in
-new free programs; and that you know you can do these things.
-
- To protect your rights, we need to make restrictions that forbid
-anyone to deny you these rights or to ask you to surrender the rights.
-These restrictions translate to certain responsibilities for you if you
-distribute copies of the software, or if you modify it.
-
- For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must give the recipients all the rights that
-you have. You must make sure that they, too, receive or can get the
-source code. And you must show them these terms so they know their
-rights.
-
- We protect your rights with two steps: (1) copyright the software,
-and (2) offer you this license which gives you legal permission to copy,
-distribute and/or modify the software.
-
- Also, for each author's protection and ours, we want to make certain
-that everyone understands that there is no warranty for this free
-software. If the software is modified by someone else and passed on, we
-want its recipients to know that what they have is not the original, so
-that any problems introduced by others will not reflect on the original
-authors' reputations.
-
- Finally, any free program is threatened constantly by software
-patents. We wish to avoid the danger that redistributors of a free
-program will individually obtain patent licenses, in effect making the
-program proprietary. To prevent this, we have made it clear that any
-patent must be licensed for everyone's free use or not licensed at all.
-
- The precise terms and conditions for copying, distribution and
-modification follow.
-
- TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
- 0. This License applies to any program or other work which contains a
- notice placed by the copyright holder saying it may be distributed
- under the terms of this General Public License. The "Program",
- below, refers to any such program or work, and a "work based on
- the Program" means either the Program or any derivative work under
- copyright law: that is to say, a work containing the Program or a
- portion of it, either verbatim or with modifications and/or
- translated into another language. (Hereinafter, translation is
- included without limitation in the term "modification".) Each
- licensee is addressed as "you".
-
- Activities other than copying, distribution and modification are
- not covered by this License; they are outside its scope. The act
- of running the Program is not restricted, and the output from the
- Program is covered only if its contents constitute a work based on
- the Program (independent of having been made by running the
- Program). Whether that is true depends on what the Program does.
-
- 1. You may copy and distribute verbatim copies of the Program's
- source code as you receive it, in any medium, provided that you
- conspicuously and appropriately publish on each copy an appropriate
- copyright notice and disclaimer of warranty; keep intact all the
- notices that refer to this License and to the absence of any
- warranty; and give any other recipients of the Program a copy of
- this License along with the Program.
-
- You may charge a fee for the physical act of transferring a copy,
- and you may at your option offer warranty protection in exchange
- for a fee.
-
- 2. You may modify your copy or copies of the Program or any portion
- of it, thus forming a work based on the Program, and copy and
- distribute such modifications or work under the terms of Section 1
- above, provided that you also meet all of these conditions:
-
- a. You must cause the modified files to carry prominent notices
- stating that you changed the files and the date of any change.
-
- b. You must cause any work that you distribute or publish, that
- in whole or in part contains or is derived from the Program
- or any part thereof, to be licensed as a whole at no charge
- to all third parties under the terms of this License.
-
- c. If the modified program normally reads commands interactively
- when run, you must cause it, when started running for such
- interactive use in the most ordinary way, to print or display
- an announcement including an appropriate copyright notice and
- a notice that there is no warranty (or else, saying that you
- provide a warranty) and that users may redistribute the
- program under these conditions, and telling the user how to
- view a copy of this License. (Exception: if the Program
- itself is interactive but does not normally print such an
- announcement, your work based on the Program is not required
- to print an announcement.)
-
- These requirements apply to the modified work as a whole. If
- identifiable sections of that work are not derived from the
- Program, and can be reasonably considered independent and separate
- works in themselves, then this License, and its terms, do not
- apply to those sections when you distribute them as separate
- works. But when you distribute the same sections as part of a
- whole which is a work based on the Program, the distribution of
- the whole must be on the terms of this License, whose permissions
- for other licensees extend to the entire whole, and thus to each
- and every part regardless of who wrote it.
-
- Thus, it is not the intent of this section to claim rights or
- contest your rights to work written entirely by you; rather, the
- intent is to exercise the right to control the distribution of
- derivative or collective works based on the Program.
-
- In addition, mere aggregation of another work not based on the
- Program with the Program (or with a work based on the Program) on
- a volume of a storage or distribution medium does not bring the
- other work under the scope of this License.
-
- 3. You may copy and distribute the Program (or a work based on it,
- under Section 2) in object code or executable form under the terms
- of Sections 1 and 2 above provided that you also do one of the
- following:
-
- a. Accompany it with the complete corresponding machine-readable
- source code, which must be distributed under the terms of
- Sections 1 and 2 above on a medium customarily used for
- software interchange; or,
-
- b. Accompany it with a written offer, valid for at least three
- years, to give any third party, for a charge no more than your
- cost of physically performing source distribution, a complete
- machine-readable copy of the corresponding source code, to be
- distributed under the terms of Sections 1 and 2 above on a
- medium customarily used for software interchange; or,
-
- c. Accompany it with the information you received as to the offer
- to distribute corresponding source code. (This alternative is
- allowed only for noncommercial distribution and only if you
- received the program in object code or executable form with
- such an offer, in accord with Subsection b above.)
-
- The source code for a work means the preferred form of the work for
- making modifications to it. For an executable work, complete
- source code means all the source code for all modules it contains,
- plus any associated interface definition files, plus the scripts
- used to control compilation and installation of the executable.
- However, as a special exception, the source code distributed need
- not include anything that is normally distributed (in either
- source or binary form) with the major components (compiler,
- kernel, and so on) of the operating system on which the executable
- runs, unless that component itself accompanies the executable.
-
- If distribution of executable or object code is made by offering
- access to copy from a designated place, then offering equivalent
- access to copy the source code from the same place counts as
- distribution of the source code, even though third parties are not
- compelled to copy the source along with the object code.
-
- 4. You may not copy, modify, sublicense, or distribute the Program
- except as expressly provided under this License. Any attempt
- otherwise to copy, modify, sublicense or distribute the Program is
- void, and will automatically terminate your rights under this
- License. However, parties who have received copies, or rights,
- from you under this License will not have their licenses
- terminated so long as such parties remain in full compliance.
-
- 5. You are not required to accept this License, since you have not
- signed it. However, nothing else grants you permission to modify
- or distribute the Program or its derivative works. These actions
- are prohibited by law if you do not accept this License.
- Therefore, by modifying or distributing the Program (or any work
- based on the Program), you indicate your acceptance of this
- License to do so, and all its terms and conditions for copying,
- distributing or modifying the Program or works based on it.
-
- 6. Each time you redistribute the Program (or any work based on the
- Program), the recipient automatically receives a license from the
- original licensor to copy, distribute or modify the Program
- subject to these terms and conditions. You may not impose any
- further restrictions on the recipients' exercise of the rights
- granted herein. You are not responsible for enforcing compliance
- by third parties to this License.
-
- 7. If, as a consequence of a court judgment or allegation of patent
- infringement or for any other reason (not limited to patent
- issues), conditions are imposed on you (whether by court order,
- agreement or otherwise) that contradict the conditions of this
- License, they do not excuse you from the conditions of this
- License. If you cannot distribute so as to satisfy simultaneously
- your obligations under this License and any other pertinent
- obligations, then as a consequence you may not distribute the
- Program at all. For example, if a patent license would not permit
- royalty-free redistribution of the Program by all those who
- receive copies directly or indirectly through you, then the only
- way you could satisfy both it and this License would be to refrain
- entirely from distribution of the Program.
-
- If any portion of this section is held invalid or unenforceable
- under any particular circumstance, the balance of the section is
- intended to apply and the section as a whole is intended to apply
- in other circumstances.
-
- It is not the purpose of this section to induce you to infringe any
- patents or other property right claims or to contest validity of
- any such claims; this section has the sole purpose of protecting
- the integrity of the free software distribution system, which is
- implemented by public license practices. Many people have made
- generous contributions to the wide range of software distributed
- through that system in reliance on consistent application of that
- system; it is up to the author/donor to decide if he or she is
- willing to distribute software through any other system and a
- licensee cannot impose that choice.
-
- This section is intended to make thoroughly clear what is believed
- to be a consequence of the rest of this License.
-
- 8. If the distribution and/or use of the Program is restricted in
- certain countries either by patents or by copyrighted interfaces,
- the original copyright holder who places the Program under this
- License may add an explicit geographical distribution limitation
- excluding those countries, so that distribution is permitted only
- in or among countries not thus excluded. In such case, this
- License incorporates the limitation as if written in the body of
- this License.
-
- 9. The Free Software Foundation may publish revised and/or new
- versions of the General Public License from time to time. Such
- new versions will be similar in spirit to the present version, but
- may differ in detail to address new problems or concerns.
-
- Each version is given a distinguishing version number. If the
- Program specifies a version number of this License which applies
- to it and "any later version", you have the option of following
- the terms and conditions either of that version or of any later
- version published by the Free Software Foundation. If the Program
- does not specify a version number of this License, you may choose
- any version ever published by the Free Software Foundation.
-
- 10. If you wish to incorporate parts of the Program into other free
- programs whose distribution conditions are different, write to the
- author to ask for permission. For software which is copyrighted
- by the Free Software Foundation, write to the Free Software
- Foundation; we sometimes make exceptions for this. Our decision
- will be guided by the two goals of preserving the free status of
- all derivatives of our free software and of promoting the sharing
- and reuse of software generally.
-
- NO WARRANTY
-
- 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO
- WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE
- LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
- HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT
- WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT
- NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
- FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE
- QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
- PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY
- SERVICING, REPAIR OR CORRECTION.
-
- 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
- WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY
- MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE
- LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL,
- INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR
- INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
- DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU
- OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY
- OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN
- ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
-
- END OF TERMS AND CONDITIONS
-
-How to Apply These Terms to Your New Programs
-=============================================
-
- If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these
-terms.
-
- To do so, attach the following notices to the program. It is safest
-to attach them to the start of each source file to most effectively
-convey the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
- ONE LINE TO GIVE THE PROGRAM'S NAME AND A BRIEF IDEA OF WHAT IT DOES.
- Copyright (C) 19YY NAME OF AUTHOR
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
- Also add information on how to contact you by electronic and paper
-mail.
-
- If the program is interactive, make it output a short notice like
-this when it starts in an interactive mode:
-
- Gnomovision version 69, Copyright (C) 19YY NAME OF AUTHOR
- Gnomovision comes with ABSOLUTELY NO WARRANTY; for details
- type `show w'.
- This is free software, and you are welcome to redistribute it
- under certain conditions; type `show c' for details.
-
- The hypothetical commands `show w' and `show c' should show the
-appropriate parts of the General Public License. Of course, the
-commands you use may be called something other than `show w' and `show
-c'; they could even be mouse-clicks or menu items--whatever suits your
-program.
-
- You should also get your employer (if you work as a programmer) or
-your school, if any, to sign a "copyright disclaimer" for the program,
-if necessary. Here is a sample; alter the names:
-
- Yoyodyne, Inc., hereby disclaims all copyright interest in the program
- `Gnomovision' (which makes passes at compilers) written by James Hacker.
-
- SIGNATURE OF TY COON, 1 April 1989
- Ty Coon, President of Vice
-
- This General Public License does not permit incorporating your
-program into proprietary programs. If your program is a subroutine
-library, you may consider it more useful to permit linking proprietary
-applications with the library. If this is what you want to do, use the
-GNU Library General Public License instead of this License.
-
-
-File: g77.info, Node: Contributors, Next: Funding, Prev: Copying, Up: Top
-
-Contributors to GNU Fortran
-***************************
-
- In addition to James Craig Burley, who wrote the front end, many
-people have helped create and improve GNU Fortran.
-
- * The packaging and compiler portions of GNU Fortran are based
- largely on the GNU CC compiler. *Note Contributors to GNU CC:
- (gcc)Contributors, for more information.
-
- * The run-time library used by GNU Fortran is a minor repackaging of
- the `libf2c' library (combined from the `libF77' and `libI77'
- libraries) provided as part of `f2c', available for free from
- `netlib' sites on the Internet.
-
- * Cygnus Support and The Free Software Foundation contributed
- significant money and/or equipment to Craig's efforts.
-
- * The following individuals served as alpha testers prior to `g77''s
- public release. This work consisted of testing, researching,
- sometimes debugging, and occasionally providing small amounts of
- code and fixes for `g77', plus offering plenty of helpful advice
- to Craig:
-
- Jonathan Corbet
-
- Dr. Mark Fernyhough
-
- Takafumi Hayashi (The University of
- AIzu)--`takafumi@u-aizu.ac.jp'
-
- Kate Hedstrom
-
- Michel Kern (INRIA and Rice
- University)--`Michel.Kern@inria.fr'
-
- Dr. A. O. V. Le Blanc
-
- Dave Love
-
- Rick Lutowski
-
- Toon Moene
-
- Rick Niles
-
- Derk Reefman
-
- Wayne K. Schroll
-
- Bill Thorson
-
- Pedro A. M. Vazquez
-
- Ian Watson
-
- * Scott Snyder (`snyder@d0sgif.fnal.gov') provided the patch to add
- rudimentary support for `INTEGER*1', `INTEGER*2', and `LOGICAL*1'.
- This inspired Craig to add further support, even though the
- resulting support would still be incomplete, because version 0.6
- is still a ways off.
-
- * David Ronis (`ronis@onsager.chem.mcgill.ca') inspired and
- encouraged Craig to rewrite the documentation in texinfo format by
- contributing a first pass at a translation of the old
- `g77-0.5.16/f/DOC' file.
-
- * Toon Moene (`toon@moene.indiv.nluug.nl') performed some analysis
- of generated code as part of an overall project to improve `g77'
- code generation to at least be as good as `f2c' used in
- conjunction with `gcc'. So far, this has resulted in the three,
- somewhat experimental, options added by `g77' to the `gcc'
- compiler and its back end.
-
- * Many other individuals have helped debug, test, and improve `g77'
- over the past several years, and undoubtedly more people will be
- doing so in the future. If you have done so, and would like to
- see your name listed in the above list, please ask! The default
- is that people wish to remain anonymous.
-
-
-File: g77.info, Node: Funding, Next: Funding GNU Fortran, Prev: Contributors, Up: Top
-
-Funding Free Software
-*********************
-
- If you want to have more free software a few years from now, it makes
-sense for you to help encourage people to contribute funds for its
-development. The most effective approach known is to encourage
-commercial redistributors to donate.
-
- Users of free software systems can boost the pace of development by
-encouraging for-a-fee distributors to donate part of their selling price
-to free software developers--the Free Software Foundation, and others.
-
- The way to convince distributors to do this is to demand it and
-expect it from them. So when you compare distributors, judge them
-partly by how much they give to free software development. Show
-distributors they must compete to be the one who gives the most.
-
- To make this approach work, you must insist on numbers that you can
-compare, such as, "We will donate ten dollars to the Frobnitz project
-for each disk sold." Don't be satisfied with a vague promise, such as
-"A portion of the profits are donated," since it doesn't give a basis
-for comparison.
-
- Even a precise fraction "of the profits from this disk" is not very
-meaningful, since creative accounting and unrelated business decisions
-can greatly alter what fraction of the sales price counts as profit.
-If the price you pay is $50, ten percent of the profit is probably less
-than a dollar; it might be a few cents, or nothing at all.
-
- Some redistributors do development work themselves. This is useful
-too; but to keep everyone honest, you need to inquire how much they do,
-and what kind. Some kinds of development make much more long-term
-difference than others. For example, maintaining a separate version of
-a program contributes very little; maintaining the standard version of a
-program for the whole community contributes much. Easy new ports
-contribute little, since someone else would surely do them; difficult
-ports such as adding a new CPU to the GNU C compiler contribute more;
-major new features or packages contribute the most.
-
- By establishing the idea that supporting further development is "the
-proper thing to do" when distributing free software for a fee, we can
-assure a steady flow of resources into making more free software.
-
- Copyright (C) 1994 Free Software Foundation, Inc.
- Verbatim copying and redistribution of this section is permitted
- without royalty; alteration is not permitted.
-
-
-File: g77.info, Node: Funding GNU Fortran, Next: Look and Feel, Prev: Funding, Up: Top
-
-Funding GNU Fortran
-*******************
-
- Work on GNU Fortran is still being done mostly by its author, James
-Craig Burley (`burley@gnu.ai.mit.edu'), who is a volunteer for, not an
-employee of, the Free Software Foundation (FSF). As with other GNU
-software, funding is important because it can pay for needed equipment,
-personnel, and so on.
-
- The FSF provides information on the best way to fund ongoing
-development of GNU software (such as GNU Fortran) in documents such as
-the "GNUS Bulletin". Email `gnu@prep.ai.mit.edu' for information on
-funding the FSF.
-
- To fund specific GNU Fortran work in particular, the FSF might
-provide a means for that, but the FSF does not provide direct funding
-to the author of GNU Fortran to continue his work. The FSF has
-employee salary restrictions that can be incompatible with the
-financial needs of some volunteers, who therefore choose to remain
-volunteers and thus be able to be free to do contract work and
-otherwise make their own schedules for doing GNU work.
-
- Still, funding the FSF at least indirectly benefits work on specific
-projects like GNU Fortran because it ensures the continuing operation
-of the FSF offices, their workstations, their network connections, and
-so on, which are invaluable to volunteers. (Similarly, hiring Cygnus
-Support can help a project like GNU Fortran--Cygnus has been a
-long-time donor of equipment usage to the author of GNU Fortran, and
-this too has been invaluable--*Note Contributors::.)
-
- Currently, the only way to directly fund the author of GNU Fortran
-in his work on that project is to hire him for the work you want him to
-do, or donate money to him. Several people have done this already,
-with the result that he has not needed to immediately find contract
-work on a few occasions. If more people did this, he would be able to
-plan on not doing contract work for many months and could thus devote
-that time to work on projects (such as the planned changes for
-`g77-0.6') that require longer timeframes to complete. For the latest
-information on the status of the author, do `finger -l
-burley@gnu.ai.mit.edu', i.e. access `burley''s `.plan' file just as you
-would `fortran''s to get `g77' status (except there's no public `ftp'
-access to `burley''s `.plan' file--you can email him asking for it).
-
- Another important way to support work on GNU Fortran is to volunteer
-to help out. Work is needed on documentation, testing, porting to
-various machines, and in some cases, coding (although major changes
-planned for version 0.6 make it difficult to add manpower to this area).
-Email `fortran@gnu.ai.mit.edu' to volunteer for this work.
-
- *Note Funding Free Software: Funding, for more information.
-
-
-File: g77.info, Node: Look and Feel, Next: Getting Started, Prev: Funding GNU Fortran, Up: Top
-
-Protect Your Freedom--Fight "Look And Feel"
-*******************************************
-
- To preserve the ability to write free software, including
-replacements for proprietary software, authors must be free to
-replicate the user interface to which users of existing software have
-become accustomed.
-
- *Note Protect Your Freedom--Fight "Look And Feel": (gcc)Look and
-Feel, for more information.
-
-
-File: g77.info, Node: Getting Started, Next: What is GNU Fortran?, Prev: Look and Feel, Up: Top
-
-Getting Started
-***************
-
- If you don't need help getting started reading the portions of this
-manual that are most important to you, you should skip this portion of
-the manual.
-
- If you are new to compilers, especially Fortran compilers, or new to
-how compilers are structured under UNIX and UNIX-like systems, you'll
-want to see *Note What is GNU Fortran?::.
-
- If you are new to GNU compilers, or have used only one GNU compiler
-in the past and not had to delve into how it lets you manage various
-versions and configurations of `gcc', you should see *Note G77 and
-GCC::.
-
- Everyone except experienced `g77' users should see *Note Invoking
-G77::.
-
- If you're acquainted with previous versions of `g77', you should see
-*Note News::. Further, if you've actually used previous versions of
-`g77', especially if you've written or modified Fortran code to be
-compiled by previous versions of `g77', you should see *Note Changes::.
-
- If you intend to write or otherwise compile code that is not already
-strictly conforming ANSI FORTRAN 77--and this is probably everyone--you
-should see *Note Language::.
-
- If you don't already have `g77' installed on your system, you must
-see *Note Installation::.
-
- If you run into trouble getting Fortran code to compile, link, run,
-or work properly, you might find answers if you see *Note Debugging and
-Interfacing::, see *Note Collected Fortran Wisdom::, and see *Note
-Trouble::. You might also find that the problems you are encountering
-are bugs in `g77'--see *Note Bugs::, for information on reporting them,
-after reading the other material.
-
- If you need further help with `g77', or with freely redistributable
-software in general, see *Note Service::.
-
- If you would like to help the `g77' project, see *Note Funding GNU
-Fortran::, for information on helping financially, and see *Note
-Projects::, for information on helping in other ways.
-
- If you're generally curious about the future of `g77', see *Note
-Projects::. If you're curious about its past, see *Note Contributors::,
-and see *Note Funding GNU Fortran::.
-
- To see a few of the questions maintainers of `g77' have, and that
-you might be able to answer, see *Note Open Questions::.
-
-
-File: g77.info, Node: What is GNU Fortran?, Next: G77 and GCC, Prev: Getting Started, Up: Top
-
-What is GNU Fortran?
-********************
-
- GNU Fortran, or `g77', is designed initially as a free replacement
-for, or alternative to, the UNIX `f77' command. (Similarly, `gcc' is
-designed as a replacement for the UNIX `cc' command.)
-
- `g77' also is designed to fit in well with the other fine GNU
-compilers and tools.
-
- Sometimes these design goals conflict--in such cases, resolution
-often is made in favor of fitting in well with Project GNU. These
-cases are usually identified in the appropriate sections of this manual.
-
- As compilers, `g77', `gcc', and `f77' share the following
-characteristics:
-
- * They read a user's program, stored in a file and containing
- instructions written in the appropriate language (Fortran, C, and
- so on). This file contains "source code".
-
- * They translate the user's program into instructions a computer can
- carry out more quickly than it takes to translate the instructions
- in the first place. These instructions are called "machine
- code"--code designed to be efficiently translated and processed by
- a machine such as a computer. Humans usually aren't as good
- writing machine code as they are at writing Fortran or C, because
- it is easy to make tiny mistakes writing machine code. When
- writing Fortran or C, it is easy to make big mistakes.
-
- * They provide information in the generated machine code that can
- make it easier to find bugs in the program (using a debugging
- tool, called a "debugger", such as `gdb').
-
- * They locate and gather machine code already generated to perform
- actions requested by statements in the user's program. This
- machine code is organized into "libraries" and is located and
- gathered during the "link" phase of the compilation process.
- (Linking often is thought of as a separate step, because it can be
- directly invoked via the `ld' command. However, the `g77' and
- `gcc' commands, as with most compiler commands, automatically
- perform the linking step by calling on `ld' directly, unless asked
- to not do so by the user.)
-
- * They attempt to diagnose cases where the user's program contains
- incorrect usages of the language. The "diagnostics" produced by
- the compiler indicate the problem and the location in the user's
- source file where the problem was first noticed. The user can use
- this information to locate and fix the problem. (Sometimes an
- incorrect usage of the language leads to a situation where the
- compiler can no longer make any sense of what follows--while a
- human might be able to--and thus ends up complaining about many
- "problems" it encounters that, in fact, stem from just one
- problem, usually the first one reported.)
-
- * They attempt to diagnose cases where the user's program contains a
- correct usage of the language, but instructs the computer to do
- something questionable. These diagnostics often are in the form
- of "warnings", instead of the "errors" that indicate incorrect
- usage of the language.
-
- How these actions are performed is generally under the control of
-the user. Using command-line options, the user can specify how
-persnickety the compiler is to be regarding the program (whether to
-diagnose questionable usage of the language), how much time to spend
-making the generated machine code run faster, and so on.
-
- `g77' consists of several components:
-
- * A modified version of the `gcc' command, which also might be
- installed as the system's `cc' command. (In many cases, `cc'
- refers to the system's "native" C compiler, which might be a
- non-GNU compiler, or an older version of `gcc' considered more
- stable or that is used to build the operating system kernel.)
-
- * The `g77' command itself, which also might be installed as the
- system's `f77' command.
-
- * The `libf2c' run-time library. This library contains the machine
- code needed to support capabilities of the Fortran language that
- are not directly provided by the machine code generated by the
- `g77' compilation phase.
-
- * The compiler itself, internally named `f771'.
-
- Note that `f771' does not generate machine code directly--it
- generates "assembly code" that is a more readable form of machine
- code, leaving the conversion to actual machine code to an
- "assembler", usually named `as'.
-
- `gcc' is often thought of as "the C compiler" only, but it does more
-than that. Based on command-line options and the names given for files
-on the command line, `gcc' determines which actions to perform,
-including preprocessing, compiling (in a variety of possible
-languages), assembling, and linking.
-
- For example, the command `gcc foo.c' "drives" the file `foo.c'
-through the preprocessor `cpp', then the C compiler (internally named
-`cc1'), then the assembler (usually `as'), then the linker (`ld'),
-producing an executable program named `a.out' (on UNIX systems).
-
- As another example, the command `gcc foo.cc' would do much the same
-as `gcc foo.c', but instead of using the C compiler named `cc1', `gcc'
-would use the C++ compiler (named `cc1plus').
-
- In a GNU Fortran installation, `gcc' recognizes Fortran source files
-by name just like it does C and C++ source files. It knows to use the
-Fortran compiler named `f771', instead of `cc1' or `cc1plus', to
-compile Fortran files.
-
- Non-Fortran-related operation of `gcc' is generally unaffected by
-installing the GNU Fortran version of `gcc'. However, without the
-installed version of `gcc' being the GNU Fortran version, `gcc' will
-not be able to compile and link Fortran programs--and since `g77' uses
-`gcc' to do most of the actual work, neither will `g77'!
-
- The `g77' command is essentially just a front-end for the `gcc'
-command. Fortran users will normally use `g77' instead of `gcc',
-because `g77' knows how to specify the libraries needed to link with
-Fortran programs (`libf2c' and `lm'). `g77' can still compile and link
-programs and source files written in other languages, just like `gcc'.
-
- The command `g77 -v' is a quick way to display lots of version
-information for the various programs used to compile a typical
-preprocessed Fortran source file--this produces much more output than
-`gcc -v' currently does. (It also produces an error message near the
-end of the output, a diagnostic from the linker, usually `ld'--you can
-safely ignore this error, but do include the entire output with any bug
-report you submit.) In the output of this command, the line beginning
-`GNU Fortran Front End' identifies the version number of GNU Fortran;
-immediately preceding that line is a line identifying the version of
-`gcc' with which that version of `g77' was built.
-
- The `libf2c' library is distributed with GNU Fortran for the
-convenience of its users, but is not part of GNU Fortran. It contains
-the procedures needed by Fortran programs while they are running.
-
- For example, while code generated by `g77' is likely to do
-additions, subtractions, and multiplications "in line"--in the actual
-compiled code--it is not likely to do trigonometric functions this way.
-
- Instead, operations like trigonometric functions are compiled by the
-`f771' compiler (invoked by `g77' when compiling Fortran code) into
-machine code that, when run, calls on functions in `libf2c', so
-`libf2c' must be linked with almost every useful program having any
-component compiled by GNU Fortran. (As mentioned above, the `g77'
-command takes care of all this for you.)
-
- The `f771' program represents most of what is unique to GNU Fortran.
-While the `libf2c' component is really part of `f2c', a free
-Fortran-to-C converter distributed by Bellcore (AT&T), and the `g77'
-command is just a small front-end to `gcc', `f771' is a combination of
-two rather large chunks of code.
-
- One chunk is the so-called "GNU Back End", or GBE, which knows how
-to generate fast code for a wide variety of processors. The same GBE
-is used by the C, C++, and Fortran compiler programs `cc1', `cc1plus',
-and `f771', plus others. Often the GBE is referred to as the "gcc back
-end" or even just "gcc"--in this manual, the term GBE is used whenever
-the distinction is important.
-
- The other chunk of `f771' is the majority of what is unique about
-GNU Fortran--the code that knows how to interpret Fortran programs to
-determine what they are intending to do, and then communicate that
-knowledge to the GBE for actual compilation of those programs. This
-chunk is called the "Fortran Front End" (FFE). The `cc1' and `cc1plus'
-programs have their own front ends, for the C and C++ languages,
-respectively. These fronts ends are responsible for diagnosing
-incorrect usage of their respective languages by the programs the
-process, and are responsible for most of the warnings about
-questionable constructs as well. (The GBE handles producing some
-warnings, like those concerning possible references to undefined
-variables.)
-
- Because so much is shared among the compilers for various languages,
-much of the behavior and many of the user-selectable options for these
-compilers are similar. For example, diagnostics (error messages and
-warnings) are similar in appearance; command-line options like `-Wall'
-have generally similar effects; and the quality of generated code (in
-terms of speed and size) is roughly similar (since that work is done by
-the shared GBE).
-
-
-File: g77.info, Node: G77 and GCC, Next: Invoking G77, Prev: What is GNU Fortran?, Up: Top
-
-Compile Fortran, C, or Other Programs
-*************************************
-
- A GNU Fortran installation includes a modified version of the `gcc'
-command.
-
- In a non-Fortran installation, `gcc' recognizes C, C++, and
-Objective-C source files.
-
- In a GNU Fortran installation, `gcc' also recognizes Fortran source
-files and accepts Fortran-specific command-line options, plus some
-command-line options that are designed to cater to Fortran users but
-apply to other languages as well.
-
- *Note Compile C; C++; or Objective-C: (gcc)G++ and GCC, for
-information on the way different languages are handled by the GNU CC
-compiler (`gcc').
-
- Also provided as part of GNU Fortran is the `g77' command. The
-`g77' command is designed to make compiling and linking Fortran
-programs somewhat easier than when using the `gcc' command for these
-tasks. It does this by analyzing the command line somewhat and
-changing it appropriately before submitting it to the `gcc' command.
-
- Use the `-v' option with `g77' to see what is going on--the first
-line of output is the invocation of the `gcc' command. Use
-`--driver=true' to disable actual invocation of `gcc' (this works
-because `true' is the name of a UNIX command that simply returns
-success status).
-
-
-File: g77.info, Node: Invoking G77, Next: News, Prev: G77 and GCC, Up: Top
-
-GNU Fortran Command Options
-***************************
-
- The `g77' command supports all the options supported by the `gcc'
-command. *Note GNU CC Command Options: (gcc)Invoking GCC, for
-information on the non-Fortran-specific aspects of the `gcc' command
-(and, therefore, the `g77' command).
-
- The `g77' command supports one option not supported by the `gcc'
-command:
-
-`--driver=COMMAND'
- Specifies that COMMAND, rather than `gcc', is to be invoked by
- `g77' to do its job. For example, within the gcc build directory
- after building GNU Fortran (but without having to install it),
- `./g77 --driver=./xgcc foo.f -B./'.
-
- All other options are supported both by `g77' and by `gcc' as
-modified (and reinstalled) by the `g77' distribution. In some cases,
-options have positive and negative forms; the negative form of `-ffoo'
-would be `-fno-foo'. This manual documents only one of these two
-forms, whichever one is not the default.
-
-* Menu:
-
-* Option Summary:: Brief list of all `g77' options,
- without explanations.
-* Overall Options:: Controlling the kind of output:
- an executable, object files, assembler files,
- or preprocessed source.
-* Fortran Dialect Options:: Controlling the variant of Fortran language
- compiled.
-* Warning Options:: How picky should the compiler be?
-* Debugging Options:: Symbol tables, measurements, and debugging dumps.
-* Optimize Options:: How much optimization?
-* Preprocessor Options:: Controlling header files and macro definitions.
- Also, getting dependency information for Make.
-* Directory Options:: Where to find header files and libraries.
- Where to find the compiler executable files.
-* Code Gen Options:: Specifying conventions for function calls, data layout
- and register usage.
-* Environment Variables:: Env vars that affect GNU Fortran.
-
-
-File: g77.info, Node: Option Summary, Next: Overall Options, Up: Invoking G77
-
-Option Summary
-==============
-
- Here is a summary of all the options specific to GNU Fortran, grouped
-by type. Explanations are in the following sections.
-
-*Overall Options*
- *Note Options Controlling the Kind of Output: Overall Options.
- --driver -fversion -fset-g77-defaults
-
-*Fortran Language Options*
- *Note Options Controlling Fortran Dialect: Fortran Dialect Options.
- -ffree-form -fno-fixed-form -ff90 -fvxt-not-f90
- -ff90-not-vxt -fdollar-ok -fno-backslash
- -fintrin-case-initcap -fintrin-case-upper
- -fintrin-case-lower -fintrin-case-any
- -fmatch-case-initcap -fmatch-case-upper
- -fmatch-case-lower -fmatch-case-any
- -fsource-case-upper -fsource-case-lower -fsource-case-preserve
- -fsymbol-case-initcap -fsymbol-case-upper
- -fsymbol-case-lower -fsymbol-case-any
- -fcase-strict-upper -fcase-strict-lower
- -fcase-initcap -fcase-upper -fcase-lower -fcase-preserve
- -fdcp-intrinsics-delete -fdcp-intrinsics-hide
- -fdcp-intrinsics-disable -fdcp-intrinsics-enable
- -ff2c-intrinsics-delete -ff2c-intrinsics-hide
- -ff2c-intrinsics-disable -ff2c-intrinsics-enable
- -ff90-intrinsics-delete -ff90-intrinsics-hide
- -ff90-intrinsics-disable -ff90-intrinsics-enable
- -fmil-intrinsics-delete -fmil-intrinsics-hide
- -fmil-intrinsics-disable -fmil-intrinsics-enable
- -funix-intrinsics-delete -funix-intrinsics-hide
- -funix-intrinsics-disable -funix-intrinsics-enable
- -fvxt-intrinsics-delete -fvxt-intrinsics-hide
- -fvxt-intrinsics-disable -fvxt-intrinsics-enable
- -ffixed-line-length-N -ffixed-line-length-none
-
-*Warning Options*
- *Note Options to Request or Suppress Warnings: Warning Options.
- -fsyntax-only -pedantic -pedantic-errors -fpedantic
- -fugly -fno-ugly-args -fno-ugly-init -w -Wimplicit
- -Wunused -Wuninitialized -Wall -Wsurprising -Werror
- -W
-
-*Debugging Options*
- *Note Options for Debugging Your Program or GCC: Debugging Options.
- -g
-
-*Optimization Options*
- *Note Options that Control Optimization: Optimize Options.
- -ffloat-store -fforce-mem -fforce-addr -fno-inline
- -ffast-math -fstrength-reduce -frerun-cse-after-loop
- -fexpensive-optimizations -fdelayed-branch
- -fschedule-insns -fschedule-insn2 -fcaller-saves
- -funroll-loops -funroll-all-loops
- -fno-move-all-movables -fno-reduce-all-givs
- -fno-rerun-loop-opt
-
-*Directory Options*
- *Note Options for Directory Search: Directory Options.
- -IDIR -I-
-
-*Code Generation Options*
- *Note Options for Code Generation Conventions: Code Gen Options.
- -fno-automatic -finit-local-zero -fno-f2c
- -ff2c-library -fno-underscoring -fno-ident
- -fpcc-struct-return -freg-struct-return
- -fshort-double -fno-common -fpack-struct
- -fzeros
-
-* Menu:
-
-* Overall Options:: Controlling the kind of output:
- an executable, object files, assembler files,
- or preprocessed source.
-* Fortran Dialect Options:: Controlling the variant of Fortran language
- compiled.
-* Warning Options:: How picky should the compiler be?
-* Debugging Options:: Symbol tables, measurements, and debugging dumps.
-* Optimize Options:: How much optimization?
-* Preprocessor Options:: Controlling header files and macro definitions.
- Also, getting dependency information for Make.
-* Directory Options:: Where to find header files and libraries.
- Where to find the compiler executable files.
-* Code Gen Options:: Specifying conventions for function calls, data layout
- and register usage.
-
diff --git a/gnu/usr.bin/gcc/f/g77.info-2 b/gnu/usr.bin/gcc/f/g77.info-2
deleted file mode 100644
index 5bc396ab532..00000000000
--- a/gnu/usr.bin/gcc/f/g77.info-2
+++ /dev/null
@@ -1,846 +0,0 @@
-This is Info file g77.info, produced by Makeinfo-1.64 from the input
-file g77.texi.
-
- This file explains how to use the GNU Fortran system.
-
- Published by the Free Software Foundation 59 Temple Place - Suite 330
-Boston, MA 02111-1307 USA
-
- Copyright (C) 1995, 1996 Free Software Foundation, Inc.
-
- Permission is granted to make and distribute verbatim copies of this
-manual provided the copyright notice and this permission notice are
-preserved on all copies.
-
- Permission is granted to copy and distribute modified versions of
-this manual under the conditions for verbatim copying, provided also
-that the sections entitled "GNU General Public License," "Funding for
-Free Software," and "Protect Your Freedom--Fight `Look And Feel'" are
-included exactly as in the original, and provided that the entire
-resulting derived work is distributed under the terms of a permission
-notice identical to this one.
-
- Permission is granted to copy and distribute translations of this
-manual into another language, under the above conditions for modified
-versions, except that the sections entitled "GNU General Public
-License," "Funding for Free Software," and "Protect Your Freedom--Fight
-`Look And Feel'", and this permission notice, may be included in
-translations approved by the Free Software Foundation instead of in the
-original English.
-
- Contributed by James Craig Burley (`burley@gnu.ai.mit.edu').
-Inspired by a first pass at translating `g77-0.5.16/f/DOC' that was
-contributed to Craig by David Ronis (`ronis@onsager.chem.mcgill.ca').
-
-
-File: g77.info, Node: Overall Options, Next: Fortran Dialect Options, Prev: Option Summary, Up: Invoking G77
-
-Options Controlling the Kind of Output
-======================================
-
- Compilation can involve as many as four stages: preprocessing,
-compilation proper, assembly, and linking, always in that order. The
-first three stages apply to an individual source file, and end by
-producing an object file; linking combines all the object files (those
-newly compiled, and those specified as input) into an executable file.
-
- For any given input file, the file name suffix determines what kind
-of compilation is done. Suffixes specific to GNU Fortran are listed
-below. *Note gcc: (Using and Porting GNU CC)Overall Options, for
-information on suffixes recognized by GNU CC.
-
-`FILE.f'
-`FILE.for'
- Fortran source code that should not be preprocessed.
-
-`FILE.F'
-`FILE.fpp'
- Fortran source code that must be preprocessed (by the C
- preprocessor `cpp', which is part of GNU CC).
-
- UNIX users typically use the `FILE.f' and `FILE.F' nomenclature.
-Users of other operating systems, especially those that cannot
-distinguish upper-case letters from lower-case letters in their file
-names, typically use the `FILE.for' and `FILE.fpp' nomenclature.
-
- Use of the preprocessor `cpp' allows use of C-like constructs such
-as `#define' and `#include', but can lead to unexpected, even mistaken,
-results due to Fortran's source file format. It is recommended that
-use of the C preprocessor be limited to `#include' and, in conjunction
-with `#define', only `#if' and related directives, thus avoiding
-in-line macro expansion entirely. This recommendation applies
-especially when using the traditional fixed source form. With free
-source form, fewer unexpected transformations are likely to happen, but
-use of Hollerith and things like continued character constants can
-nevertheless present problems.
-
- The following options that affect overall processing are recognized
-by the `g77' and `gcc' commands in a GNU Fortran installation:
-
-`--driver=COMMAND'
- This works only when invoking the `g77' command, not when invoking
- the `gcc' command. *Note GNU Fortran Command Options: Invoking
- G77, for information on this option.
-
-`-fversion'
- Ensure that the `g77'-specific version of the compiler phase is
- reported, if run. (This is supplied automatically when `-v' or
- `--version' is specified as a command-line option for `g77' or
- `gcc' and when the resulting commands compile Fortran source
- files.)
-
-`-fset-g77-defaults'
- Set up whatever `gcc' options are to apply to Fortran compilations.
- For version 0.5.18, this is equivalent to `-fmove-all-movables
- -freduce-all-givs -frerun-loop-opt'. (This is supplied
- automatically when compiling Fortran code. The description of
- this option is here so that users seeing it in the output of, say,
- `g77 -v' understand why it is there. Also, developers who run
- `f771' directly might want to specify it by hand to get the same
- defaults as they would running `f771' via `g77' or `gcc'.)
-
- *Note Options Controlling the Kind of Output: (gcc)Overall Options,
-for information on more options that control the overall operation of
-the `gcc' command (and, by extension, the `g77' command).
-
-
-File: g77.info, Node: Fortran Dialect Options, Next: Warning Options, Prev: Overall Options, Up: Invoking G77
-
-Options Controlling Fortran Dialect
-===================================
-
- The following options control the dialect of Fortran that the
-compiler accepts:
-
-`-ffree-form'
-`-fno-fixed-form'
- Specify that the source file is written in free form (introduced
- in Fortran 90) instead of the more-traditional fixed form.
-
-`-ff90'
- Allow certain Fortran-90 constructs.
-
- This option controls whether certain Fortran 90 constructs are
- recognized. (Other Fortran 90 constructs might or might not be
- recognized depending on other options such as `-fvxt-not-f90',
- `-ff90-intrinsics-enable', and the current level of support for
- Fortran 90.)
-
- *Note GNU Fortran Extensions: Extensions, for more information.
-
-`-fvxt-not-f90'
-`-ff90-not-vxt'
- Specify whether Fortran 90 or other popular extensions are to be
- assumed for ambiguous constructs. The default is -fvxt-not-f90.
-
- For example, with `-ff90-not-vxt', `PRINT *,"double-quoted
- string"' is valid, while with `-fvxt-not-f90', `PRINT *,"2000' is
- valid.
-
- (There is no way to allow both constructs in the general case,
- since statements like `PRINT *,"2000 !comment?"' would be
- ambiguous.)
-
- *Note GNU Fortran Dialects: Dialects, for more information.
-
-`-fdollar-ok'
- Allow `$' as a valid character in a symbol name.
-
-`-fno-backslash'
- Specify that `\' is not to be specially interpreted in character
- and Hollerith constants a la C and many UNIX Fortran compilers.
-
- For example, with `-fbackslash' in effect, `A\nB' specifies three
- characters, with the second one being newline. With
- `-fno-backslash', it specifies four characters, `A', `\', `n', and
- `B'.
-
- Note that `g77' implements a fairly general form of backslash
- processing that is incompatible with the narrower forms supported
- by some other compilers. For example, `'A\003B'' is a
- three-character string in `g77', whereas other compilers that
- support backslash might not support the three-octal-digit form,
- and thus treat that string as longer than three characters.
-
- *Note Certain Changes We Don't Want to Make: Non-bugs, for
- information on why `-fbackslash' is the default instead of
- `-fno-backslash'.
-
-`-fintrin-case-initcap'
-`-fintrin-case-upper'
-`-fintrin-case-lower'
-`-fintrin-case-any'
- Specify expected case for intrinsic names. `-fintrin-case-lower'
- is the default.
-
-`-fmatch-case-initcap'
-`-fmatch-case-upper'
-`-fmatch-case-lower'
-`-fmatch-case-any'
- Specify expected case for keywords. `-fmatch-case-lower' is the
- default.
-
-`-fsource-case-upper'
-`-fsource-case-lower'
-`-fsource-case-preserve'
- Specify whether source text other than character and Hollerith
- constants is to be translated to uppercase, to lowercase, or
- preserved as is. `-fsource-case-lower' is the default.
-
-`-fsymbol-case-initcap'
-`-fsymbol-case-upper'
-`-fsymbol-case-lower'
-`-fsymbol-case-any'
- Specify valid cases for user-defined symbol names.
- `-fsymbol-case-any' is the default.
-
-`-fcase-strict-upper'
- Same as `-fintrin-case-upper -fmatch-case-upper
- -fsource-case-preserve -fsymbol-case-upper'. (Requires all
- pertinent source to be in uppercase.)
-
-`-fcase-strict-lower'
- Same as `-fintrin-case-lower -fmatch-case-lower
- -fsource-case-preserve -fsymbol-case-lower'. (Requires all
- pertinent source to be in lowercase.)
-
-`-fcase-initcap'
- Same as `-fintrin-case-initcap -fmatch-case-initcap
- -fsource-case-preserve -fsymbol-case-initcap'. (Requires all
- pertinent source to be in initial capitals, as in `Print
- *,SqRt(Value)'.)
-
-`-fcase-upper'
- Same as `-fintrin-case-any -fmatch-case-any -fsource-case-upper
- -fsymbol-case-any'. (Maps all pertinent source to uppercase.)
-
-`-fcase-lower'
- Same as `-fintrin-case-any -fmatch-case-any -fsource-case-lower
- -fsymbol-case-any'. (Maps all pertinent source to lowercase.)
-
-`-fcase-preserve'
- Same as `-fintrin-case-any -fmatch-case-any -fsource-case-preserve
- -fsymbol-case-any'. (Preserves all case in user-defined symbols,
- while allowing any-case matching of intrinsics and keywords. For
- example, `call Foo(i,I)' would pass two *different* variables
- named `i' and `I' to a procedure named `Foo'.)
-
-`-fdcp-intrinsics-delete'
-`-fdcp-intrinsics-hide'
-`-fdcp-intrinsics-disable'
-`-fdcp-intrinsics-enable'
- Specify status of Digital's COMPLEX-related intrinsics.
- `-fdcp-intrinsics-enable' is the default.
-
-`-ff2c-intrinsics-delete'
-`-ff2c-intrinsics-hide'
-`-ff2c-intrinsics-disable'
-`-ff2c-intrinsics-enable'
- Specify status of f2c-specific intrinsics.
- `-ff2c-intrinsics-enable' is the default.
-
-`-ff90-intrinsics-delete'
-`-ff90-intrinsics-hide'
-`-ff90-intrinsics-disable'
-`-ff90-intrinsics-enable'
- Specify status of F90-specific intrinsics.
- `-ff90-intrinsics-delete' is the default.
-
-`-fmil-intrinsics-delete'
-`-fmil-intrinsics-hide'
-`-fmil-intrinsics-disable'
-`-fmil-intrinsics-enable'
- Specify status of MIL-STD-1753-specific intrinsics.
- `-fmil-intrinsics-enable' is the default.
-
-`-funix-intrinsics-delete'
-`-funix-intrinsics-hide'
-`-funix-intrinsics-disable'
-`-funix-intrinsics-enable'
- Specify status of UNIX intrinsics. `-funix-intrinsics-enable' is
- the default.
-
- For example, if your code invokes `FLUSH' as a library function
- and thus works with other UNIX Fortran compilers or earlier
- version of `g77', either add the `EXTERNAL FLUSH' statement or,
- perhaps more convenient for you, compile with the
- -funix-intrinsics-hide or -funix-intrinsics-delete option.
-
- Note that `ABORT', `EXIT', `FLUSH', `SIGNAL', and `SYSTEM' are
- intrinsic subroutines, not functions (since they have side
- effects), so to get the return values from `SIGNAL' and `SYSTEM',
- append a final argument specifying an `INTEGER' variable or array
- element to receive the returned status. (For example, `CALL
- SYSTEM('rm foo',ISTAT)'.)
-
- `FLUSH()' accepts an optional single `INTEGER' argument, since
- many Fortran implementations allow or require a unit number.
- Currently, since `libf2c' does not flush a given unit number, this
- argument is not used--all units are flushed by `libf2c''s
- implementation of `FLUSH()'. Do not depend on this behavior--if
- you want to flush all units, use `CALL FLUSH' (that is, specify no
- arguments to `FLUSH').
-
- `EXIT()' accepts an optional single `INTEGER' argument. If
- omitted, zero is the default (as in `CALL EXIT(0)'). The default
- might change on configurations where the "normal return status" is
- not zero, however. If you want to return a "success" status, it
- is best to call `EXIT' with no arguments in your code, and let
- `g77' choose the appropriate default.
-
-`-fvxt-intrinsics-delete'
-`-fvxt-intrinsics-hide'
-`-fvxt-intrinsics-disable'
-`-fvxt-intrinsics-enable'
- Specify status of VXT intrinsics. `-fvxt-intrinsics-delete' is
- the default.
-
-`-ffixed-line-length-N'
- Set column after which characters are ignored in typical fixed-form
- lines in the source file.
-
- Popular values for N include 72 (the standard and the default), 80
- (card image), and 132 (corresponds to "extended-source" options in
- some popular compilers). N may be `none', meaning that the entire
- line is meaningful and that continued character constants never
- have implicit spaces appended to them to fill out the line.
- `-ffixed-line-length-0' means the same thing as
- `-ffixed-line-length-none'.
-
-
-File: g77.info, Node: Warning Options, Next: Debugging Options, Prev: Fortran Dialect Options, Up: Invoking G77
-
-Options to Request or Suppress Warnings
-=======================================
-
- Warnings are diagnostic messages that report constructions which are
-not inherently erroneous but which are risky or suggest there might
-have been an error.
-
- You can request many specific warnings with options beginning `-W',
-for example `-Wimplicit' to request warnings on implicit declarations.
-Each of these specific warning options also has a negative form
-beginning `-Wno-' to turn off warnings; for example, `-Wno-implicit'.
-This manual lists only one of the two forms, whichever is not the
-default.
-
- These options control the amount and kinds of warnings produced by
-GNU Fortran:
-
-`-fsyntax-only'
- Check the code for syntax errors, but don't do anything beyond
- that.
-
-`-pedantic'
- Issue warnings for uses of extensions to ANSI FORTRAN 77.
- `-pedantic' also applies to C-language constructs where they occur
- in GNU Fortran source files, such as use of `\e' in a character
- constant within a directive like `#include'.
-
- Valid ANSI FORTRAN 77 programs should compile properly with or
- without this option. However, without this option, certain GNU
- extensions and traditional Fortran features are supported as well.
- With this option, many of them are rejected.
-
- Some users try to use `-pedantic' to check programs for strict ANSI
- conformance. They soon find that it does not do quite what they
- want: it finds some non-ANSI practices, but not all--however,
- improvements to `g77' in this area are welcome.
-
-`-pedantic-errors'
- Like `-pedantic', except that errors are produced rather than
- warnings.
-
-`-fpedantic'
- Like `-pedantic', but applies only to Fortran constructs.
-
-`-fugly'
- Specify that certain "ugly" constructs are to be quietly accepted.
- Implies `-fugly-args' and `-fugly-init' as well.
-
- For example, with `-fno-ugly', `CALL FOO(,)' means to pass one
- null argument, whereas with `-fugly', it means to pass two null
- arguments.
-
-`-fno-ugly-args'
- Disallow passing Hollerith and typeless constants as actual
- arguments (for example, `CALL FOO(4HABCD)').
-
-`-fno-ugly-init'
- Disallow use of Hollerith and typeless constants as initial values
- (in `PARAMETER' and `DATA' statements), and use of character
- constants to initialize numeric types and vice versa.
-
- For example, `DATA I/'F'/, CHRVAR/65/, J/4HABCD/' is disallowed by
- `-fno-ugly-init'.
-
-`-w'
- Inhibit all warning messages.
-
-`-Wimplicit'
- Warn whenever a variable, array, or function is implicitly
- declared. Has an effect similar to using the `IMPLICIT NONE'
- statement in every program unit. (Some Fortran compilers provide
- this feature by an option named `-u' or `/WARNINGS=DECLARATIONS'.)
-
-`-Wunused'
- Warn whenever a variable is unused aside from its declaration.
-
-`-Wuninitialized'
- Warn whenever an automatic variable is used without first being
- initialized.
-
- These warnings are possible only in optimizing compilation,
- because they require data flow information that is computed only
- when optimizing. If you don't specify `-O', you simply won't get
- these warnings.
-
- These warnings occur only for variables that are candidates for
- register allocation. Therefore, they do not occur for a variable
- that is declared `volatile', or whose address is taken, or whose
- size is other than 1, 2, 4 or 8 bytes. Also, they do not occur for
- arrays, even when they are in registers.
-
- Note that there may be no warning about a variable that is used
- only to compute a value that itself is never used, because such
- computations may be deleted by data flow analysis before the
- warnings are printed.
-
- These warnings are made optional because GNU Fortran is not smart
- enough to see all the reasons why the code might be correct
- despite appearing to have an error. Here is one example of how
- this can happen:
-
- SUBROUTINE DISPAT(J)
- IF (J.EQ.1) I=1
- IF (J.EQ.2) I=4
- IF (J.EQ.3) I=5
- CALL FOO(I)
- END
-
- If the value of `J' is always 1, 2 or 3, then `I' is always
- initialized, but GNU Fortran doesn't know this. Here is another
- common case:
-
- SUBROUTINE MAYBE(FLAG)
- LOGICAL FLAG
- IF (FLAG) VALUE = 3.14
- ...
- IF (FLAG) PRINT *, VALUE
- END
-
- This has no bug because `VALUE' is used only if it is set.
-
-`-Wall'
- The `-Wunused' and `-Wuninitialized' options combined. These are
- all the options which pertain to usage that we recommend avoiding
- and that we believe is easy to avoid. (As more warnings are added
- to `g77', some might be added to the list enabled by `-Wall'.)
-
- The remaining `-W...' options are not implied by `-Wall' because
-they warn about constructions that we consider reasonable to use, on
-occasion, in clean programs.
-
-`-Wsurprising'
- Warn about "suspicious" constructs that are interpreted by the
- compiler in a way that might well be surprising to someone reading
- the code. These differences can result in subtle,
- compiler-dependent (even machine-dependent) behavioral differences.
- The constructs warned about include:
-
- * Expressions having two arithmetic operators in a row, such as
- `X*-Y'. Such a construct is nonstandard, and can produce
- unexpected results in more complicated situations such as
- `X**-Y*Z'. `g77', along with many other compilers, interprets
- this example differently than many programmers, and a few
- other compilers. Specifically, `g77' interprets `X**-Y*Z' as
- `(X**(-Y))*Z', while others might think it should be
- interpreted as `X**(-(Y*Z))'.
-
- A revealing example is the constant expression `2**-2*1.',
- which `g77' evaluates to .25, while others might evaluate it
- to 0., the difference being the way precedence affects type
- promotion.
-
- (The `-fpedantic' option also warns about expressions having
- two arithmetic operators in a row.)
-
- * Expressions with a unary minus followed by an operand and then
- a binary operator other than plus or minus. For example,
- `-2**2' produces a warning, because the precedence is
- `-(2**2)', yielding -4, not `(-2)**2', which yields 4, and
- which might represent what a programmer expects. Even cases
- such as `-I*J' produce warnings, even though, in most
- configurations and situations, there is no computational
- difference between the results of the two
- interpretations--the purpose of this warning is to warn about
- differing interpretations and encourage a better style of
- coding, not to identify only those places where bugs might
- exist in the user's code.
-
- * `DO' loops with `DO' variables that are not of integral
- type--that is, using `REAL' or `DOUBLE PRECISION' variables
- as loop control variables. Although such loops can be
- written to work in the "obvious" way, the way `g77' is
- required by the Fortran standard to interpret such code is
- likely to be quite different from the way many programmers
- expect. (This is true of all `DO' loops, but the differences
- are pronounced for non-integral loop control variables.)
-
- *Note Loops::, for more information.
-
-`-Werror'
- Make all warnings into errors.
-
-`-W'
- Turns on "extra warnings" and the `uninitialized' option. (This
- might change in future versions of `g77'.)
-
- "Extra warnings" are issued for:
-
- * Unused parameters to a procedure (when `-Wunused' also is
- specified).
-
- * Overflows involving floating-point constants (not available
- for certain configurations?).
-
- *Note Options to Request or Suppress Warnings: (gcc)Warning Options,
-for information on more options offered by the GBE shared by `g77',
-`gcc', and other GNU compilers.
-
- Some of these have no effect when compiling programs written in
-Fortran:
-
-`-Wcomment'
-`-Wformat'
-`-Wparentheses'
-`-Wswitch'
-`-Wtraditional'
-`-Wshadow'
-`-Wid-clash-LEN'
-`-Wlarger-than-LEN'
-`-Wconversion'
-`-Waggregate-return'
-`-Wredundant-decls'
- These options all could have some relevant meaning for GNU Fortran
- programs, but are not yet supported.
-
-
-File: g77.info, Node: Debugging Options, Next: Optimize Options, Prev: Warning Options, Up: Invoking G77
-
-Options for Debugging Your Program or GNU Fortran
-=================================================
-
- GNU Fortran has various special options that are used for debugging
-either your program or `g77'.
-
-`-g'
- Produce debugging information in the operating system's native
- format (stabs, COFF, XCOFF, or DWARF). GDB can work with this
- debugging information.
-
- Support for this option in Fortran programs is incomplete. In
- particular, names of variables and arrays in common blocks or that
- are storage-associated via `EQUIVALENCE' are unavailable to the
- debugger.
-
- *Note Options for Debugging Your Program or GNU CC: (gcc)Debugging
-Options, for more information on debugging options.
-
-
-File: g77.info, Node: Optimize Options, Next: Preprocessor Options, Prev: Debugging Options, Up: Invoking G77
-
-Options That Control Optimization
-=================================
-
- Most Fortran users will want to use no optimization when developing
-and testing programs, and use `-O' or `-O2' when compiling programs for
-late-cycle testing and for production use.
-
- The following flags have particular applicability when compiling
-Fortran programs:
-
-`-ffloat-store'
- Might help a Fortran program that depends on exact IEEE conformance
- on some machines, but might slow down a program that doesn't.
-
-`-fforce-mem'
-`-fforce-addr'
- Might improve optimization of loops.
-
-`-fno-inline'
- Don't compile statement functions inline. Might reduce the size
- of a program unit--which might be at expense of some speed (though
- it should compile faster). Note that if you are not optimizing,
- no functions can be expanded inline.
-
-`-ffast-math'
- Might allow some programs designed to not be too dependent on IEEE
- behavior for floating-point to run faster, or die trying.
-
-`-fstrength-reduce'
- Might make some loops run faster.
-
-`-frerun-cse-after-loop'
-`-fexpensive-optimizations'
-`-fdelayed-branch'
-`-fschedule-insns'
-`-fschedule-insns2'
-`-fcaller-saves'
- Might improve performance on some code.
-
-`-funroll-loops'
- Definitely improves performance on some code.
-
-`-funroll-all-loops'
- Definitely improves performance on some code.
-
-`-fno-move-all-movables'
-`-fno-reduce-all-givs'
-`-fno-rerun-loop-opt'
- Each of these might improve performance on some code.
-
- Analysis of Fortran code optimization and the resulting
- optimizations triggered by the above options were contributed by
- Toon Moene (`toon@moene.indiv.nluug.nl').
-
- Please let us know how use of these options affects the
- performance of your production code. We're particularly
- interested in code that runs faster when these options are
- *disabled*, and in non-Fortran code that benefits when they are
- *enabled* via the above `gcc' command-line options.
-
- *Note Options That Control Optimization: (gcc)Optimize Options, for
-more information on options to optimize the generated machine code.
-
-
-File: g77.info, Node: Preprocessor Options, Next: Directory Options, Prev: Optimize Options, Up: Invoking G77
-
-Options Controlling the Preprocessor
-====================================
-
- These options control the C preprocessor, which is run on each C
-source file before actual compilation.
-
- *Note Options Controlling the Preprocessor: (gcc)Preprocessor
-Options, for information on C preprocessor options.
-
- Some of these options also affect how `g77' processes the `INCLUDE'
-statement. Since this statement is processed even when preprocessing
-is not requested, it is not described in this section. *Note Options
-for Directory Search: Directory Options, for information on how `g77'
-processes the `INCLUDE' statement.
-
-
-File: g77.info, Node: Directory Options, Next: Code Gen Options, Prev: Preprocessor Options, Up: Invoking G77
-
-Options for Directory Search
-============================
-
- These options affect how the `cpp' preprocessor searches for files
-specified via the `#include' directive. Therefore, when compiling
-Fortran programs, they are meaningful when the preproecssor is used.
-
- Some of these options also affect how `g77' searches for files
-specified via the `INCLUDE' statement. These options are:
-
-`-I-'
-`-IDIR'
- These affect interpretation of the `INCLUDE' statement (as well as
- of the `#include' directive of the `cpp' preprocessor).
-
- Note that `-IDIR' must be specified *without* any spaces between
- `-I' and the directory name--that is, `-Ifoo/bar' is valid, but
- `-I foo/bar' is rejected by the `g77' compiler (though the
- preprocessor supports the latter form). Also note that the
- general behavior of `-I' and `INCLUDE' is pretty much the same as
- of `-I' with `#include' in the `cpp' preprocessor, with regard to
- looking for `header.gcc' files and other such things.
-
- *Note Options for Directory Search: (gcc)Directory Optoins, for
- information on the `-I' option.
-
-
-File: g77.info, Node: Code Gen Options, Next: Environment Variables, Prev: Directory Options, Up: Invoking G77
-
-Options for Code Generation Conventions
-=======================================
-
- These machine-independent options control the interface conventions
-used in code generation.
-
- Most of them have both positive and negative forms; the negative form
-of `-ffoo' would be `-fno-foo'. In the table below, only one of the
-forms is listed--the one which is not the default. You can figure out
-the other form by either removing `no-' or adding it.
-
-`-fno-automatic'
- Treat each program unit as if the `SAVE' statement was specified
- for every local variable and array referenced in it. Does not
- affect common blocks. (Some Fortran compilers provide this option
- under the name `-static'.)
-
-`-finit-local-zero'
- Specify that variables and arrays that are local to a program unit
- (not in a common block and not passed as an argument) are to be
- initialized to binary zeros.
-
- Since there is a run-time penalty for initialization of variables
- that are not given the `SAVE' attribute, it might be a good idea
- to also use `-fno-automatic' with `-finit-local-zero'.
-
-`-fno-f2c'
- Do not generate code designed to be compatible with code generated
- by `f2c'.
-
- This does not affect the generation of code that interfaces with
- the `libf2c' library.
-
- *Caution:* If `-fno-f2c' is used when compiling any source file
- used in a program, it must be used when compiling *all* Fortran
- source files used in that program.
-
-`-ff2c-library'
- Specify that use of `libf2c' is required. This is the default for
- the current version of `g77'.
-
- Currently it is not valid to specify `-fno-f2c-library'. This
- option is provided so users can specify it in shell scripts that
- build programs and libraries that require the `libf2c' library,
- even when being compiled by future versions of `g77' that might
- otherwise default to generating code for an incompatible library.
-
-`-fno-underscoring'
- Do not transform names of entities specified in the Fortran source
- file by appending underscores to them.
-
- With `-funderscoring' in effect, `g77' appends two underscores to
- names with underscores and one underscore to external names with
- no underscores. (`g77' also appends two underscores to internal
- names with underscores to avoid naming collisions with external
- names.)
-
- This is done to ensure compatibility with code produced by many
- UNIX Fortran compilers, including `f2c', which perform the same
- transformations.
-
- Use of `-fno-underscoring' is not recommended unless you are
- experimenting with issues such as integration of (GNU) Fortran into
- existing system environments (vis-a-vis existing libraries, tools,
- and so on).
-
- For example, with `-funderscoring', and assuming other defaults
- like `-fcase-lower' and that `j()' and `max_count()' are external
- functions while `my_var' and `lvar' are local variables, a
- statement like
-
- I = J() + MAX_COUNT (MY_VAR, LVAR)
-
- is implemented as something akin to:
-
- i = j_() + max_count__(&my_var__, &lvar);
-
- With `-fno-underscoring', the same statement is implemented as:
-
- i = j() + max_count(&my_var, &lvar);
-
- Use of `-fno-underscoring' allows direct specification of
- user-defined names while debugging and when interfacing
- `g77'-compiled code with other languages.
-
- Note that just because the names match does *not* mean that the
- interface implemented by `g77' for an external name matches the
- interface implemented by some other language for that same name.
- That is, getting code produced by `g77' to link to code produced
- by some other compiler using this or any other method can be only a
- small part of the overall solution--getting the code generated by
- both compilers to agree on issues other than naming can require
- significant effort, and, unlike naming disagreements, linkers
- normally cannot detect disagreements in these other areas.
-
- Also, note that with `-fno-underscoring', the lack of appended
- underscores introduces the very real possibility that a
- user-defined external name will conflict with a name in a system
- library, which could make finding unresolved-reference bugs quite
- difficult in some cases--they might occur at program run time, and
- show up only as buggy behavior at run time.
-
- In future versions of `g77', we hope to improve naming and linking
- issues so that debugging always involves using the names as they
- appear in the source, even if the names as seen by the linker are
- mangled to prevent accidental linking between procedures with
- incompatible interfaces.
-
-`-fno-second-underscore'
- Do not append a second underscore to names of entities specified
- in the Fortran source file.
-
- This option has no effect if `-fno-underscoring' is not in effect.
-
- Otherwise, with this option, an external name such as `MAX_COUNT'
- is implemented as a reference to the link-time external symbol
- `max_count_', instead of `max_count__'.
-
-`-fno-ident'
- Ignore the `#ident' directive.
-
-`-fzeros'
- Treat initial values of zero as if they were any other value.
-
- As of version 0.5.18, `g77' normally treats `DATA' and other
- statements that are used specify initial values of zero for
- variables and arrays as if no values were actually specified, in
- the sense that no diagnostics regarding multiple initializations
- are produced.
-
- This is done to speed up compiling of programs that initialize
- large arrays to zeros.
-
- Use `-fzeros' to revert to the simpler, slower behavior that can
- catch multiple initializations by keeping track of all
- initializations, zero or otherwise.
-
- *Caution:* Future versions of `g77' might disregard this option
- (and its negative form, the default) or interpret it somewhat
- differently. The interpretation changes will affect only
- non-standard programs; standard-conforming programs should not be
- affected.
-
- *Note Options for Code Generation Conventions: (gcc)Code Gen
-Options, for information on more options offered by the GBE shared by
-`g77', `gcc', and other GNU compilers.
-
- Some of these do *not* work when compiling programs written in
-Fortran:
-
-`-fpcc-struct-return'
-`-freg-struct-return'
- You should not use these except strictly the same way as you used
- them to build the version of `libf2c' with which you will be
- linking all code compiled by `g77' with the same option.
-
-`-fshort-double'
- This probably either has no effect on Fortran programs, or makes
- them act loopy.
-
-`-fno-common'
- Do not use this when compiling Fortran programs, or there will be
- Trouble.
-
-`-fpack-struct'
- This probably will break any calls to the `libf2c' library, at the
- very least, even if it is built with the same option.
-
-
-File: g77.info, Node: Environment Variables, Prev: Code Gen Options, Up: Invoking G77
-
-Environment Variables Affecting GNU Fortran
-===========================================
-
- GNU Fortran currently does not make use of any environment variables
-to control its operation above and beyond those that affect the
-operation of `gcc'.
-
- *Note Environment Variables Affecting GNU CC: (gcc)Environment
-Variables, for information on environment variables.
-
diff --git a/gnu/usr.bin/gcc/f/g77.info-3 b/gnu/usr.bin/gcc/f/g77.info-3
deleted file mode 100644
index 09ada32403e..00000000000
--- a/gnu/usr.bin/gcc/f/g77.info-3
+++ /dev/null
@@ -1,1151 +0,0 @@
-This is Info file g77.info, produced by Makeinfo-1.64 from the input
-file g77.texi.
-
- This file explains how to use the GNU Fortran system.
-
- Published by the Free Software Foundation 59 Temple Place - Suite 330
-Boston, MA 02111-1307 USA
-
- Copyright (C) 1995, 1996 Free Software Foundation, Inc.
-
- Permission is granted to make and distribute verbatim copies of this
-manual provided the copyright notice and this permission notice are
-preserved on all copies.
-
- Permission is granted to copy and distribute modified versions of
-this manual under the conditions for verbatim copying, provided also
-that the sections entitled "GNU General Public License," "Funding for
-Free Software," and "Protect Your Freedom--Fight `Look And Feel'" are
-included exactly as in the original, and provided that the entire
-resulting derived work is distributed under the terms of a permission
-notice identical to this one.
-
- Permission is granted to copy and distribute translations of this
-manual into another language, under the above conditions for modified
-versions, except that the sections entitled "GNU General Public
-License," "Funding for Free Software," and "Protect Your Freedom--Fight
-`Look And Feel'", and this permission notice, may be included in
-translations approved by the Free Software Foundation instead of in the
-original English.
-
- Contributed by James Craig Burley (`burley@gnu.ai.mit.edu').
-Inspired by a first pass at translating `g77-0.5.16/f/DOC' that was
-contributed to Craig by David Ronis (`ronis@onsager.chem.mcgill.ca').
-
-
-File: g77.info, Node: News, Next: Changes, Prev: Invoking G77, Up: Top
-
-News About GNU Fortran
-**********************
-
-In 0.5.18:
-==========
-
- * Add some rudimentary support for `INTEGER*1', `INTEGER*2',
- `INTEGER*8', and their `LOGICAL' equivalents. (This support works
- on most, maybe all, `gcc' targets.)
-
- Thanks to Scott Snyder (`snyder@d0sgif.fnal.gov') for providing
- the patch for this!
-
- Among the missing elements from the support for these features are
- full intrinsic support and constants.
-
- * Add some rudimentary support for the `BYTE' and `WORD'
- type-declaration statements. `BYTE' corresponds to `INTEGER*1',
- while `WORD' corresponds to `INTEGER*2'.
-
- Thanks to Scott Snyder (`snyder@d0sgif.fnal.gov') for providing
- the patch for this!
-
- * The compiler code handling intrinsics has been largely rewritten
- to accommodate the new types. No new intrinsics or arguments for
- existing intrinsics have been added, so there is, at this point,
- no intrinsic to convert to `INTEGER*8', for example.
-
- * Support automatic arrays in procedures.
-
- * Reduce space/time requirements for handling large *sparsely*
- initialized aggregate arrays. This improvement applies to only a
- subset of the general problem to be addressed in 0.6.
-
- * Treat initial values of zero as if they weren't specified (in DATA
- and type-declaration statements). The initial values will be set
- to zero anyway, but the amount of compile time processing them
- will be reduced, in some cases significantly (though, again, this
- is only a subset of the general problem to be addressed in 0.6).
-
- A new option, `-fzeros', is introduced to enable the traditional
- treatment of zeros as any other value.
-
- * With `-ff90' in force, `g77' incorrectly interpreted `REAL(Z)' as
- returning a `REAL' result, instead of as a `DOUBLE PRECISION'
- result. (Here, `Z' is `DOUBLE COMPLEX'.)
-
- With `-fno-f90' in force, the interpretation remains unchanged,
- since this appears to be how at least some F77 code using the
- `DOUBLE COMPLEX' extension expected it to work.
-
- Essentially, `REAL(Z)' in F90 is the same as `DBLE(Z)', while in
- extended F77, it appears to be the same as `REAL(REAL(Z))'.
-
- * An expression involving exponentiation, where both operands were
- type `INTEGER' and the right-hand operand was negative, was
- erroneously evaluated.
-
- * Fix bugs involving `DATA' implied-`DO' constructs (these involved
- an errant diagnostic and a crash, both on good code, one involving
- subsequent statement-function definition).
-
- * Close `INCLUDE' files after processing them, so compiling source
- files with lots of `INCLUDE' statements does not result in being
- unable to open `INCLUDE' files after all the available file
- descriptors are used up.
-
- * Speed up compiling, especially of larger programs, and perhaps
- slightly reduce memory utilization while compiling (this is *not*
- the improvement planned for 0.6 involving large aggregate
- areas)--these improvements result from simply turning off some
- low-level code to do self-checking that hasn't been triggered in a
- long time.
-
- * Introduce three new options that implement optimizations in the
- `gcc' back end (GBE). These options are `-fmove-all-movables',
- `-freduce-all-givs', and `-frerun-loop-opt', which are enabled, by
- default, for Fortran compilations. These optimizations are
- intended to help toon Fortran programs.
-
- * Patch the GBE to do a better job optimizing certain kinds of
- references to array elements.
-
- * Due to patches to the GBE, the version number of `gcc' also is
- patched to make it easier to manage installations, especially
- useful if it turns out a `g77' change to the GBE has a bug.
-
- The `g77'-modified version number is the `gcc' version number with
- the string `.f.N' appended, where `f' identifies the version as
- enhanced for Fortran, and N is `1' for the first Fortran patch for
- that version of `gcc', `2' for the second, and so on.
-
- So, this introduces version `2.7.2.f.1' of `gcc'.
-
- * Make several improvements and fixes to diagnostics, including the
- removal of two that were inappropriate or inadequate.
-
- * Warning about two successive arithmetic operators, produced by
- `-Wsurprising', now produced *only* when both operators are,
- indeed, arithmetic (not relational/boolean).
-
- * `-Wsurprising' now warns about the remaining cases of using
- non-integral variables for implied-`DO' loops, instead of these
- being rejected unless `-fpedantic' or `-fugly' specified.
-
- * Allow `SAVE' of a local variable or array, even after it has been
- given an initial value via `DATA', for example.
-
- * Introduce an Info version of `g77' documentation, which supercedes
- `gcc/f/CREDITS', `gcc/f/DOC', and `gcc/f/PROJECTS'. These files
- will be removed in a future release. The files `gcc/f/BUGS',
- `gcc/f/INSTALL', and `gcc/f/NEWS' now are automatically built from
- the texinfo source when distributions are made.
-
- This effort was inspired by a first pass at translating
- `g77-0.5.16/f/DOC' that was contributed to Craig by David Ronis
- (`ronis@onsager.chem.mcgill.ca').
-
- * New `-fno-second-underscore' option to specify that, when
- `-funderscoring' is in effect, a second underscore is not to be
- appended to Fortran names already containing an underscore.
-
- * Change the way iterative `DO' loops work to follow the F90
- standard. In particular, calculation of the iteration count is
- still done by converting the start, end, and increment parameters
- to the type of the `DO' variable, but the result of the
- calculation is always converted to the default `INTEGER' type.
-
- (This should have no effect on existing code compiled by `g77',
- but code written to assume that use of a *wider* type for the `DO'
- variable will result in an iteration count being fully calculated
- using that wider type (wider than default `INTEGER') must be
- rewritten.)
-
- * Upgrade to `libf2c' as of 1996-03-23, and fix up some of the build
- procedures.
-
- Note that the email addresses related to `f2c' have changed--the
- distribution site now is named `netlib.bell-labs.com', and the
- maintainer's new address is `dmg@bell-labs.com'.
-
-In 0.5.17:
-==========
-
- * *Fix serious bug* in `g77 -v' command that can cause removal of a
- system's `/dev/null' special file if run by user `root'.
-
- *All users* of version 0.5.16 should ensure that they have not
- removed `/dev/null' or replaced it with an ordinary file (e.g. by
- comparing the output of `ls -l /dev/null' with `ls -l /dev/zero'.
- If the output isn't basically the same, contact your system
- administrator about restoring `/dev/null' to its proper status).
-
- This bug is particularly insidious because removing `/dev/null' as
- a special file can go undetected for quite a while, aside from
- various applications and programs exhibiting sudden, strange
- behaviors.
-
- I sincerely apologize for not realizing the implications of the
- fact that when `g77 -v' runs the `ld' command with `-o /dev/null'
- that `ld' tries to *remove* the executable it is supposed to build
- (especially if it reports unresolved references, which it should
- in this case)!
-
- * Fix crash on `CHARACTER*(*) FOO' in a main or block data program
- unit.
-
- * Fix crash that can occur when diagnostics given outside of any
- program unit (such as when input file contains `@foo').
-
- * Fix crashes, infinite loops (hangs), and such involving diagnosed
- code.
-
- * Fix `ASSIGN''ed variables so they can be `SAVE''d or dummy
- arguments, and issue clearer error message in cases where target
- of `ASSIGN' or `ASSIGN'ed `GOTO'/`FORMAT' is too small (which
- should never happen).
-
- * Make `libf2c' build procedures work on more systems again by
- eliminating unnecessary invocations of `ld -r -x' and `mv'.
-
- * Fix omission of `-funix-intrinsics-...' options in list of
- permitted options to compiler.
-
- * Fix failure to always diagnose missing type declaration for
- `IMPLICIT NONE'.
-
- * Fix compile-time performance problem (which could sometimes crash
- the compiler, cause a hang, or whatever, due to a bug in the back
- end) involving exponentiation with a large `INTEGER' constant for
- the right-hand operator (e.g. `I**32767').
-
- * Fix build procedures so cross-compiling `g77' (the `fini' utility
- in particular) is properly built using the host compiler.
-
- * Add new `-Wsurprising' option to warn about constructs that are
- interpreted by the Fortran standard (and `g77') in ways that are
- surprising to many programmers.
-
- * Add `ERF()' and `ERFC()' as generic intrinsics mapping to existing
- `ERF'/`DERF' and `ERFC'/`DERFC' specific intrinsics.
-
- *Note:* You should specify `INTRINSIC ERF,ERFC' in any code where
- you might use these as generic intrinsics, to improve likelihood
- of diagnostics (instead of subtle run-time bugs) when using a
- compiler that doesn't support these as intrinsics (e.g. `f2c').
-
- * Remove from `-fno-pedantic' the diagnostic about `DO' with
- non-`INTEGER' index variable; issue that under `-Wsurprising'
- instead.
-
- * Clarify some diagnostics that say things like "ignored" when that's
- misleading.
-
- * Clarify diagnostic on use of `.EQ.'/`.NE.' on `LOGICAL' operands.
-
- * Minor improvements to code generation for various operations on
- `LOGICAL' operands.
-
- * Minor improvement to code generation for some `DO' loops on some
- machines.
-
- * Support `gcc' version 2.7.1.
-
- * Upgrade to `libf2c' as of 1995-11-15.
-
-In 0.5.16:
-==========
-
- * Fix a code-generation bug involving complicated `EQUIVALENCE'
- statements not involving `COMMON'
-
- * Fix code-generation bugs involving invoking "gratis" library
- procedures in `libf2c' from code compiled with `-fno-f2c' by
- making these procedures known to `g77' as intrinsics (not affected
- by -fno-f2c). This is known to fix code invoking `ERF()',
- `ERFC()', `DERF()', and `DERFC()'.
-
- * Update `libf2c' to include netlib patches through 1995-08-16, and
- `#define' `WANT_LEAD_0' to 1 to make `g77'-compiled code more
- consistent with other Fortran implementations by outputting
- leading zeros in formatted and list-directed output.
-
- * Fix a code-generation bug involving adjustable dummy arrays with
- high bounds whose primaries are changed during procedure
- execution, and which might well improve code-generation
- performance for such arrays compared to `f2c' plus `gcc' (but
- apparently only when using `gcc-2.7.0' or later).
-
- * Fix a code-generation bug involving invocation of `COMPLEX' and
- `DOUBLE COMPLEX' `FUNCTION's and doing `COMPLEX' and `DOUBLE
- COMPLEX' divides, when the result of the invocation or divide is
- assigned directly to a variable that overlaps one or more of the
- arguments to the invocation or divide.
-
- * Fix crash by not generating new optimal code for `X**I' if `I' is
- nonconstant and the expression is used to dimension a dummy array,
- since the `gcc' back end does not support the necessary mechanics
- (and the `gcc' front end rejects the equivalent construct, as it
- turns out).
-
- * Fix crash on expressions like `COMPLEX**INTEGER'.
-
- * Fix crash on expressions like `(1D0,2D0)**2', i.e. raising a
- `DOUBLE COMPLEX' constant to an `INTEGER' constant power.
-
- * Fix crashes and such involving diagnosed code.
-
- * Diagnose, instead of crashing on, statement function definitions
- having duplicate dummy argument names.
-
- * Fix bug causing rejection of good code involving statement function
- definitions.
-
- * Fix bug resulting in debugger not knowing size of local equivalence
- area when any member of area has initial value (via `DATA', for
- example).
-
- * Fix installation bug that prevented installation of `g77' driver.
- Provide for easy selection of whether to install copy of `g77' as
- `f77' to replace the broken code.
-
- * Fix `gcc' driver (affects `g77' thereby) to not gratuitously
- invoke the `f771' program (e.g. when `-E' is specified).
-
- * Fix diagnostic to point to correct source line when it immediately
- follows an `INCLUDE' statement.
-
- * Support more compiler options in `gcc'/`g77' when compiling
- Fortran files. These options include `-p', `-pg', `-aux-info',
- `-P', correct setting of version-number macros for preprocessing,
- full recognition of `-O0', and automatic insertion of
- configuration-specific linker specs.
-
- * Add new intrinsics that interface to existing routines in `libf2c':
- `ABORT', `DERF', `DERFC', `ERF', `ERFC', `EXIT', `FLUSH',
- `GETARG', `GETENV', `IARGC', `SIGNAL', and `SYSTEM'. Note that
- `ABORT', `EXIT', `FLUSH', `SIGNAL', and `SYSTEM' are intrinsic
- subroutines, not functions (since they have side effects), so to
- get the return values from `SIGNAL' and `SYSTEM', append a final
- argument specifying an `INTEGER' variable or array element (e.g.
- `CALL SYSTEM('rm foo',ISTAT)').
-
- * Add new intrinsic group named `unix' to contain the new intrinsics,
- and by default enable this new group.
-
- * Move `LOC()' intrinsic out of the `vxt' group to the new `unix'
- group.
-
- * Improve `g77' so that `g77 -v' by itself (or with certain other
- options, including `-B', `-b', `-i', `-nostdlib', and `-V')
- reports lots more useful version info, and so that long-form
- options `gcc' accepts are understood by `g77' as well (even in
- truncated, unambiguous forms).
-
- * Add new `g77' option `--driver=name' to specify driver when
- default, `gcc', isn't appropriate.
-
- * Add support for `#' directives (as output by the preprocessor) in
- the compiler, and enable generation of those directives by the
- preprocessor (when compiling `.F' files) so diagnostics and
- debugging info are more useful to users of the preprocessor.
-
- * Produce better diagnostics, more like `gcc', with info such as `In
- function `foo':' and `In file included from...:'.
-
- * Support `gcc''s `-fident' and `-fno-ident' options.
-
- * When `-Wunused' in effect, don't warn about local variables used as
- statement-function dummy arguments or `DATA' implied-`DO' iteration
- variables, even though, strictly speaking, these are not uses of
- the variables themselves.
-
- * When `-W -Wunused' in effect, don't warn about unused dummy
- arguments at all, since there's no way to turn this off for
- individual cases (`g77' might someday start warning about
- these)--applies to `gcc' versions 2.7.0 and later, since earlier
- versions didn't warn about unused dummy arguments.
-
- * New option `-fno-underscoring' that inhibits transformation of
- names (by appending one or two underscores) so users may experiment
- with implications of such an environment.
-
- * Minor improvement to `gcc/f/info' module to make it easier to build
- `g77' using the native (non-`gcc') compiler on certain machines
- (but definitely not all machines nor all non-`gcc' compilers).
- Please do not report bugs showing problems compilers have with
- macros defined in `gcc/f/target.h' and used in places like
- `gcc/f/expr.c'.
-
- * Add warning to be printed for each invocation of the compiler if
- the target machine `INTEGER', REAL, or `LOGICAL' size is not 32
- bits, since `g77' is known to not work well for such cases (to be
- fixed in Version 0.6--*note Actual Bugs We Haven't Fixed Yet:
- Actual Bugs.).
-
- * Lots of new documentation (though work is still needed to put it
- into canonical GNU format).
-
- * Build `libf2c' with `-g0', not `-g2', in effect (by default), to
- produce smaller library without lots of debugging clutter.
-
-In 0.5.15:
-==========
-
- * Fix bad code generation involving `X**I' and temporary, internal
- variables generated by `g77' and the back end (such as for `DO'
- loops).
-
- * Fix crash given `CHARACTER A;DATA A/.TRUE./'.
-
- * Replace crash with diagnostic given `CHARACTER A;DATA A/1.0/'.
-
- * Fix crash or other erratic behavior when null character constant
- (`''') is encountered.
-
- * Fix crash or other erratic behavior involving diagnosed code.
-
- * Fix code generation for external functions returning type `REAL'
- when the `-ff2c' option is in force (which it is by default) so
- that `f2c' compatibility is indeed provided.
-
- * Disallow `COMMON I(10)' if `I' has previously been specified with
- an array declarator.
-
- * New `-ffixed-line-length-N' option, where N is the maximum length
- of a typical fixed-form line, defaulting to 72 columns, such that
- characters beyond column N are ignored, or N is `none', meaning no
- characters are ignored. does not affect lines with `&' in column
- 1, which are always processed as if `-ffixed-line-length-none' was
- in effect.
-
- * No longer generate better code for some kinds of array references,
- as `gcc' back end is to be fixed to do this even better, and it
- turned out to slow down some code in some cases after all.
-
- * In `COMMON' and `EQUIVALENCE' areas with any members given initial
- values (e.g. via `DATA'), uninitialized members now always
- initialized to binary zeros (though this is not required by the
- standard, and might not be done in future versions of `g77').
- Previously, in some `COMMON'/`EQUIVALENCE' areas (essentially
- those with members of more than one type), the uninitialized
- members were initialized to spaces, to cater to `CHARACTER' types,
- but it seems no existing code expects that, while much existing
- code expects binary zeros.
-
-In 0.5.14:
-==========
-
- * Don't emit bad code when low bound of adjustable array is
- nonconstant and thus might vary as an expression at run time.
-
- * Emit correct code for calculation of number of trips in `DO' loops
- for cases where the loop should not execute at all. (This bug
- affected cases where the difference between the begin and end
- values was less than the step count, though probably not for
- floating-point cases.)
-
- * Fix crash when extra parentheses surround item in `DATA'
- implied-`DO' list.
-
- * Fix crash over minor internal inconsistencies in handling
- diagnostics, just substitute dummy strings where necessary.
-
- * Fix crash on some systems when compiling call to `MVBITS()'
- intrinsic.
-
- * Fix crash on array assignment `TYPEDDD(...)=...', where DDD is a
- string of one or more digits.
-
- * Fix crash on `DCMPLX()' with a single `INTEGER' argument.
-
- * Fix various crashes involving code with diagnosed errors.
-
- * Support `-I' option for `INCLUDE' statement, plus `gcc''s
- `header.gcc' facility for handling systems like MS-DOS.
-
- * Allow `INCLUDE' statement to be continued across multiple lines,
- even allow it to coexist with other statements on the same line.
-
- * Incorporate Bellcore fixes to `libf2c' through 1995-03-15--this
- fixes a bug involving infinite loops reading EOF with empty
- list-directed I/O list.
-
- * Remove all the `g77'-specific auto-configuration scripts, code,
- and so on, except for temporary substitutes for bsearch() and
- strtoul(), as too many configure/build problems were reported in
- these areas. People will have to fix their systems' problems
- themselves, or at least somewhere other than `g77', which expects
- a working ANSI C environment (and, for now, a GNU C compiler to
- compile `g77' itself).
-
- * Complain if initialized common redeclared as larger in subsequent
- program unit.
-
- * Warn if blank common initialized, since its size can vary and hence
- related warnings that might be helpful won't be seen.
-
- * New `-fbackslash' option, on by default, that causes `\' within
- `CHARACTER' and Hollerith constants to be interpreted a la GNU C.
- Note that this behavior is somewhat different from `f2c''s, which
- supports only a limited subset of backslash (escape) sequences.
-
- * Make `-fugly-args' the default.
-
- * New `-fugly-init' option, on by default, that allows
- typeless/Hollerith to be specified as initial values for variables
- or named constants (`PARAMETER'), and also allows
- character<->numeric conversion in those contexts--turn off via
- `-fno-ugly-init'.
-
- * New `-finit-local-zero' option to initialize local variables to
- binary zeros. This does not affect whether they are `SAVE'd, i.e.
- made automatic or static.
-
- * New `-Wimplicit' option to warn about implicitly typed variables,
- arrays, and functions. (Basically causes all program units to
- default to `IMPLICIT NONE'.)
-
- * `-Wall' now implies `-Wuninitialized' as with `gcc' (i.e. unless
- `-O' not specified, since `-Wuninitialized' requires `-O'), and
- implies `-Wunused' as well.
-
- * `-Wunused' no longer gives spurious messages for unused `EXTERNAL'
- names (since they are assumed to refer to block data program
- units, to make use of libraries more reliable).
-
- * Support `%LOC()' and `LOC()' of character arguments.
-
- * Support null (zero-length) character constants and expressions.
-
- * Support `f2c''s `IMAG()' generic intrinsic.
-
- * Support `ICHAR()', `IACHAR()', and `LEN()' of character
- expressions that are valid in assignments but not normally as
- actual arguments.
-
- * Support `f2c'-style `&' in column 1 to mean continuation line.
-
- * Allow `NAMELIST', `EXTERNAL', `INTRINSIC', and `VOLATILE' in
- `BLOCK DATA', even though these are not allowed by the standard.
-
- * Allow `RETURN' in main program unit.
-
- * Changes to Hollerith-constant support to obey Appendix C of the
- standard:
-
- - Now padded on the right with zeros, not spaces.
-
- - Hollerith "format specifications" in the form of arrays of
- non-character allowed.
-
- - Warnings issued when non-blank truncation occurs when
- converting to another type.
-
- - When specified as actual argument, now passed by reference to
- `INTEGER' (padded on right with spaces if constant too small,
- otherwise fully intact if constant wider the `INTEGER' type)
- instead of by value.
-
- *Warning:* `f2c' differs on the interpretation of `CALL FOO(1HX)',
- which it treats exactly the same as `CALL FOO('X')', but which the
- standard and `g77' treat as `CALL FOO(%REF('X '))' (padded with
- as many blanks as necessary to widen to `INTEGER'), essentially.
-
- * Changes and fixes to typeless-constant support:
-
- - Now treated as a typeless double-length `INTEGER' value.
-
- - Warnings issued when overflow occurs.
-
- - Padded on the left with zeros when converting to a larger
- type.
-
- - Should be properly aligned and ordered on the target machine
- for whatever type it is turned into.
-
- - When specified as actual argument, now passed as reference to
- a default `INTEGER' constant.
-
- * `%DESCR()' of a non-`CHARACTER' expression now passes a pointer to
- the expression plus a length for the expression just as if it were
- a `CHARACTER' expression. For example, `CALL FOO(%DESCR(D))',
- where `D' is `REAL*8', is the same as `CALL FOO(D,%VAL(8)))'.
-
- * Name of multi-entrypoint master function changed to incorporate
- the name of the primary entry point instead of a decimal value, so
- the name of the master function for `SUBROUTINE X' with alternate
- entry points is now `__g77_masterfun_x'.
-
- * Remove redundant message about zero-step-count `DO' loops.
-
- * Clean up diagnostic messages, shortening many of them.
-
- * Fix typo in `g77' man page.
-
- * Clarify implications of constant-handling bugs in `f/BUGS'.
-
- * Generate better code for `**' operator with a right-hand operand of
- type `INTEGER'.
-
- * Generate better code for `SQRT()' and `DSQRT()', also when
- `-ffast-math' specified, enable better code generation for `SIN()'
- and `COS()'.
-
- * Generate better code for some kinds of array references.
-
- * Speed up lexing somewhat (this makes the compilation phase
- noticably faster).
-
-
-File: g77.info, Node: Changes, Next: Language, Prev: News, Up: Top
-
-User-visible Changes
-********************
-
- To find out about existing bugs and ongoing plans for GNU Fortran,
-on Internet do `finger -l fortran@gnu.ai.mit.edu' or whatever is the
-equivalent on your system. (You might need to use the address
-`fortran@gate-1.gnu.ai.mit.edu' instead, or use `gate-2', `gate-3',
-`gate-4', and so on, instead of `gate-1'.)
-
- Alternatively, retrieve `gnu.ai.mit.edu:/g77.plan' via anonymous
-ftp, or if you cannot do that, email `fortran@gnu.ai.mit.edu' asking
-for a recent copy of the GNU Fortran `.plan' file. (The `finger'
-command shown above obtains the most recent copy of all these methods.)
-
-In 0.5.18:
-==========
-
- * The `BYTE' and `WORD' statements now are supported, to a limited
- extent.
-
- * `INTEGER*1', `INTEGER*2', `INTEGER*8', and their `LOGICAL'
- equivalents, now are supported to a limited extent. Among the
- missing elements are complete intrinsic and constant support.
-
- * Support automatic arrays in procedures. For example, `REAL A(N)',
- where `A' is not a dummy argument, specifies that `A' is an
- automatic array. The size of `A' is calculated from the value of
- `N' each time the procedure is called, that amount of space is
- allocated, and that space is freed when the procedure returns to
- its caller.
-
- * Add `-fno-zeros' option, enabled by default, to reduce
- compile-time CPU and memory usage for code that provides initial
- zero values for variables and arrays.
-
- * Introduce three new options that apply to all compilations by
- `g77'-aware GNU compilers--`-fmove-all-movables',
- `-freduce-all-givs', and `-frerun-loop-opt'--which can improve the
- run-time performance of some programs.
-
- * Replace much of the existing documentation with a single Info
- document.
-
- * New option `-fno-second-underscore'.
-
-In 0.5.17:
-==========
-
- * The `ERF()' and `ERFC()' intrinsics now are generic intrinsics,
- mapping to `ERF'/`DERF' and `ERFC'/`DERFC', respectively. *Note:*
- Use `INTRINSIC ERF,ERFC' in any code that might reference these as
- generic intrinsics, to improve the likelihood of diagnostics
- (instead of subtle run-time bugs) when using compilers that don't
- support these as intrinsics.
-
- * New option `-Wsurprising'.
-
- * DO loops with non-`INTEGER' variables now diagnosed only when
- `-Wsurprising' specified. Previously, this was diagnosed *unless*
- `-fpedantic' or `-fugly' was specified.
-
-In 0.5.16:
-==========
-
- * `libf2c' changed to output a leading zero (0) digit for
- floating-point values output via list-directed and formatted
- output (to bring `g77' more in line with many existing Fortran
- implementations--the ANSI FORTRAN 77 standard leaves this choice
- to the implementation).
-
- * `libf2c' no longer built with debugging information intact, making
- it much smaller.
-
- * Automatic installation of the `g77' command now works.
-
- * Diagnostic messages now more informative, a la `gcc', including
- messages like `In function `foo':' and `In file included from...:'.
-
- * New group of intrinsics called `unix', including `ABORT', `DERF',
- `DERFC', `ERF', `ERFC', `EXIT', `FLUSH', `GETARG', `GETENV',
- `SIGNAL', and `SYSTEM'.
-
- * `-funix-intrinsics-{delete,hide,disable,enable}' options added.
-
- * `-fno-underscoring' option added.
-
- * `--driver' option added to the `g77' command.
-
- * Support for the `gcc' options `-fident' and `-fno-ident' added.
-
- * `g77 -v' returns much more version info, making the submission of
- better bug reports easily.
-
- * Many improvements to the `g77' command to better fulfill its role
- as a front-end to the `gcc' driver. For example, `g77' now
- recognizes `--version' as a verbose way of specifying `-v'.
-
- * Compiling preprocessed (`*.F' and `*.fpp') files now results in
- better diagnostics and debugging information, as the
- source-location info now is passed all the way through the
- compilation process instead of being lost.
-
-In 0.5.15:
-==========
-
- * `-ffixed-line-length-N' option introduced.
-
-In 0.5.14:
-==========
-
- * Support for gcc's `-I' option added.
-
- * `-fbackslash' option added.
-
- * `-fugly-args' option enabled by default (allows `CALL
- FOO(4HABCD)').
-
- * `-fugly-init' option added.
-
- * `-finit-local-zero' option added.
-
- * Support for the `gcc' option `-Wimplicit' added.
-
- * `-Wall' now implies `-Wunused' and, when `-O' is specified,
- `-Wuninitialized'.
-
- * Hollerith constants as actual arguments now are passed by reference
- instead of by value--so `CALL FOO(4HABCD)' now is compiled exactly
- the same as `CALL FOO(%REF('ABCD'))', instead of as `CALL
- FOO(%VAL('ABCD'))'.
-
- * Hollerith constants converted to larger types now are padded on the
- right with spaces. When converted to smaller types, warnings are
- issued if non-spaces are truncated on the right.
-
- * Format specifications of arrays of types other than `CHARACTER' are
- allowed in I/O statements, such as when they contain Hollerith
- data.
-
- * Typeless constants as actual arguments now are passed by reference
- to an `INTEGER' version of the constant instead of by value.
-
- * Typeless constants converted to larger types are padded on the left
- with zeros. When converted to smaller types, warnings are issued
- if non-zero bits are truncated on the left.
-
- * `%DESCR()' of a non-`CHARACTER' expression treats the expression
- as if it were `CHARACTER', passing both a pointer to the expression
- and the length of the type of the expression in bytes, by value,
- in the "hidden" list of lengths used for `CHARACTER' arguments.
-
- * The `ICHAR()', `IACHAR()', and `LEN()' intrinsics now accept
- character expressions involving concatenation of assumed-length
- dummy arguments.
-
- * Block data program units now may contain `NAMELIST', `EXTERNAL',
- `INTRINSIC', and `VOLATILE' statements.
-
- * Zero-length character expressions now supported.
-
- * Support for the `f2c' intrinsic `IMAG()' added.
-
- * `INCLUDE' statement restrictions, such as no continuation lines
- allowed, now lifted.
-
-
-File: g77.info, Node: Language, Next: Installation, Prev: Changes, Up: Top
-
-The GNU Fortran Language
-************************
-
- GNU Fortran supports a variety of extensions to, and dialects of,
-the Fortran language. Its primary base is the ANSI FORTRAN 77 standard.
-It offers some extensions that are popular among users of UNIX `f77'
-and `f2c' compilers, some that are popular among users of other
-compilers (such as Digital products), some that are popular among users
-of the newer Fortran 90 standard, and some that are introduced by GNU
-Fortran.
-
- Part of what defines a particular implementation of a Fortran
-system, such as `g77', is the particular characteristics of how it
-supports types, constants, and so on. Much of this is left up to the
-implementation by the various Fortran standards and accepted practice
-in the industry.
-
-* Menu:
-
-* Standard Support:: Degree of support for the ANSI FORTRAN 77 standard.
-* Extensions:: Extensions to GNU Fortran.
-* Types:: Data types.
-* Constants:: Constants and their types.
-* Source Form:: Form of source files (fixed, free, and so on).
-* Pedantic Compilation:: Warnings about non-standard constructs.
-* Case Sensitivity:: Uppercase and lowercase in source files.
-* Intrinsics:: How intrinsics are grouped for easy management.
-* Dialects:: Dialects supported by GNU Fortran.
-* Object Compatibility:: Compatibility issues for code generated by `g77'.
-* Distensions:: Misfeatures supported by GNU Fortran.
-
-
-File: g77.info, Node: Standard Support, Next: Extensions, Up: Language
-
-ANSI FORTRAN 77 Standard Support
-================================
-
- GNU Fortran supports ANSI FORTRAN 77 with the following caveats:
-
- * No passing of an external procedure as an actual argument if the
- procedure's type is declared `CHARACTER*(*)'. For example:
-
- CHARACTER*(*) CFUNC
- EXTERNAL CFUNC
- CALL FOO(CFUNC)
- END
-
- It isn't clear whether the standard considers this conforming.
-
- Note that it is unlikely that any production Fortran code tries to
- use this unsupported construct.
-
- * No passing of a dummy procedure as an actual argument if the
- procedure's type is declared `CHARACTER*(*)'.
-
- SUBROUTINE BAR(CFUNC)
- CHARACTER*(*) CFUNC
- EXTERNAL CFUNC
- CALL FOO(CFUNC)
- END
-
- It isn't clear whether the standard considers this conforming.
-
- Note that it is unlikely that any production Fortran code tries to
- use this unsupported construct.
-
- * The `DO' variable for an implied-`DO' construct in a `DATA'
- statement may not be used as the `DO' variable for an outer
- implied-`DO' construct. For example, this fragment is disallowed
- by `g77':
-
- DATA ((A(I, I), I= 1, 10), I= 1, 10)/.../
-
- This also is disallowed by Fortran 90, as it offers no additional
- capabilities and would have a variety of possible meanings.
-
- Note that it is *very* unlikely that any production Fortran code
- tries to use this unsupported construct.
-
- * An array element initializer in an implied-`DO' construct in a
- `DATA' statement must contain at least one reference to the `DO'
- variables of each outer implied-`DO' construct. For example, this
- fragment is disallowed by `g77':
-
- DATA (A, I= 1, 1)/1./
-
- This also is disallowed by Fortran 90, as FORTRAN 77's more
- permissive requirements offer no additional capabilities.
- However, `g77' doesn't necessarily diagnose all cases where this
- requirement is not met.
-
- Note that it is *very* unlikely that any production Fortran code
- tries to use this unsupported construct.
-
- In summary, the only ANSI FORTRAN 77 features `g77' doesn't support
-are those that are probably rarely used in actual code, some of which
-are explicitly disallowed by the Fortran 90 standard.
-
-
-File: g77.info, Node: Extensions, Next: Types, Prev: Standard Support, Up: Language
-
-GNU Fortran Extensions
-======================
-
- GNU Fortran supports ANSI FORTRAN 77 plus:
-
- * `LOC()', if `-funix-intrinsics-enable' is in force.
-
- * `%LOC', `%VAL', `%REF', and `%DESCR'--where `%DESCR' currently
- means the same thing as passing the argument as if it were a
- `CHARACTER' variable (with the phantom length argument appended to
- the argument list).
-
- * MIL-STD 1753 features (`IAND', `IOR', `MVBITS', `DO WHILE', `END
- DO', and so on).
-
- * `NAMELIST'.
-
- * Most `f2c' intrinsics (`AND', `OR', `LSHIFT', `RSHIFT', and so on).
-
- * `DOUBLE COMPLEX' and related intrinsics (standard and `f2c'
- varieties).
-
- * Various Fortran 90 features, such as `CYCLE', `EXIT', `SELECT
- CASE' (except for `CHARACTER' types).
-
- * Various DEC VAX/VMS FORTRAN v4.0 features (loosely called VXT
- extensions).
-
- * Various `f2c' features.
-
- * Source files that are uppercase-only (enforced), lowercase-only
- (enforced), caseless, and various other combinations as chosen via
- command-line options.
-
- * Arbitrary (limited only by available memory) number of
- continuation lines.
-
- * Use of `&' in column 1 to indicate a continuation line (as
- supported by `f2c').
-
- * Dollar signs (`$') in identifiers (other than as the first
- character) when the `-fdollar-ok' option is specified.
-
- When `-ff90' is specified, the language dialect changes as follows:
-
- * The type of `REAL(Z)', where `Z' is type `DOUBLE COMPLEX', is
- `DOUBLE PRECISION' instead of `REAL'.
-
- * Zero-length `CHARACTER' entities are accepted, even when
- `-fpedantic' is specified.
-
- * Zero-size array dimensions (as in `INTEGER I(10,20,4:2)') are
- accepted, although these are not supported by `libf2c', so
- diagnostics are nevertheless produced for `g77'.
-
- * `DOUBLE COMPLEX' (explicit or implicit) is accepted, even when
- `-fpedantic' is specified.
-
- * Substrings of constants (as in `'hello'(3:5)') are accepted, even
- when `-fpedantic' is specified.
-
- * `DATA' statements are allowed to precede executable statements,
- even when `-fpedantic' specified.
-
- Note that this does not allow all possible means of specifying
- further attributes via specification statements for a variable
- after it has been given an initial value via `DATA' or a
- type-declaration statement. For example, after `DATA I/1/',
- `INTEGER I' is not permitted, but `INTEGER J' is permitted.
-
- * Use of a semicolon (`;') as a statement separator is accepted,
- even when `-fpedantic' specified (so `CALL FOO; CALL BAR' works).
-
- * Underscores (`_') are accepted in symbol names (except as the
- first character, since Fortran 90 provides a different
- interpretation for certain cases where that would occur--though
- `g77' does not yet support that interpretation).
-
-
-File: g77.info, Node: Types, Next: Constants, Prev: Extensions, Up: Language
-
-Types
-=====
-
- Fortran implementations have a fair amount of freedom given them by
-the standard as far as how much storage space is used and how much
-precision is offered by the various types such as `LOGICAL', `INTEGER',
-`REAL', `DOUBLE PRECISION', `COMPLEX', and `CHARACTER'. Further, many
-compilers offer so-called `*N' notation, but the interpretation of N
-varies across compilers and target architectures.
-
- The standard requires that `LOGICAL', `INTEGER', and `REAL' occupy
-the same amount of storage space, and that `COMPLEX' and `DOUBLE
-PRECISION' take twice as much storage space as `REAL'. Further, it
-requires that `COMPLEX' entities be ordered such that when a `COMPLEX'
-variable is storage-associated (such as via `EQUIVALENCE') with a
-two-element `REAL' array named `R', `R(1)' corresponds to the real
-element and `R(2)' to the imaginary element of the `COMPLEX' variable.
-No particular requirements as to precision of any of these are placed on
-the implementation, nor is the relationship of storage sizes of these
-types to the `CHARACTER' type specified by the standard.
-
- `g77' follows the above requirements, warning when compiling a
-program requires placement of items in memory that contradict the
-requirements of the target architecture. (For example, a program can
-require placement of a `DOUBLE PRECISION' on a boundary that is not an
-even multiple of its size, but still an even multiple of the size of a
-`REAL' variable. On some target architectures, using the canonical
-mapping of Fortran types to underlying architectural types, such
-placement is prohibited by the machine definition or the Application
-Binary Interface (ABI) in force for the configuration defined for
-building `gcc' and `g77'. `g77' warns about such situations when it
-encounters them.)
-
- `g77' follows consistent rules for configuring the mapping between
-Fortran types, including the `*N' notation, and the underlying
-architectural types as accessed by a similarly-configured applicable
-version of the `gcc' compiler. These rules offer a widely portable,
-consistent Fortran/C environment, although they might well conflict
-with the expectations of users of Fortran compilers designed and
-written for particular architectures.
-
- These rules are based on the configuration that is in force for the
-version of `gcc' built in the same release as `g77' (and which was
-therefore used to build both the `g77' compiler components and the
-`libf2c' run-time library):
-
-`REAL'
- Same as `float' type.
-
-`DOUBLE PRECISION'
- Same as whatever floating-point type that is twice the size of a
- `float'--usually, this is a `double'.
-
-`INTEGER'
- Same as an integral type that is occupies the same amount of
- memory storage `float'--usually, this is either an `int' or a
- `long int'.
-
-`LOGICAL'
- Same `gcc' type as `INTEGER'.
-
-`COMPLEX'
- Two `REAL' scalars (one for the real part followed by one for the
- imaginary part).
-
-`DOUBLE COMPLEX'
- Two `DOUBLE PRECISION' scalars.
-
-`NUMERIC-TYPE*N'
- (Where NUMERIC-TYPE is any type other than `CHARACTER'.) Same as
- whatever `gcc' type occupies N times the storage space of a `gcc'
- `char' item.
-
-`NUMERIC-TYPE(KIND=N)'
- N=1 corresponds to `REAL', `INTEGER', `LOGICAL', `COMPLEX'. N=2
- corresponds to `DOUBLE PRECISION', `DOUBLE COMPLEX', and, for
- integral types, `char' (usually `INTEGER*1' and `LOGICAL*1'). N=3
- corresponds to `short' for integral types (usually `INTEGER*2' and
- `LOGICAL*2'). N=4 corresponds to `long long' for integral types
- (this usually means `INTEGER*8' and `LOGICAL*8').
-
- Note that these are proposed correspondences and might change in
- future versions of `g77'--avoid writing code depending on them.
-
- For now, `g77' does not support numeric types other than the ones
-listed above. So, on a typical 32-bit machine, only `INTEGER*4',
-`REAL*4', `LOGICAL*4', `COMPLEX*8', and so on, will work. Other types
-supported by `g77' are derived from gcc types such as `char', `short',
-`int', `long int', `long long int', `long double', and so on. That is,
-whatever types `gcc' already supports, `g77' probably will support in a
-future version. The rules for the `NUMERIC-TYPE*N' notation will apply
-to the new types, and new values for `NUMERIC-TYPE(KIND=N)' will be
-assigned in a way that encourages clarity, consistency, and portability.
-
-
-File: g77.info, Node: Constants, Next: Source Form, Prev: Types, Up: Language
-
-Constants
-=========
-
- `g77' strictly assigns types to all constants not documented as
-"typeless" (the typeless constants include things like `Z'1'').
-Context is never a determining factor for the type, and hence the
-interpretation, of a typed constant. Examples: `1' is always type
-`INTEGER', `3.141592653545256234' is always type `REAL' (even if the
-additional precision specified is lost, and even when used in a `DOUBLE
-PRECISION' context), `1E0' is always type `REAL', and `1D0' is always
-type `DOUBLE PRECISION'.
-
- Many other Fortran compilers attempt to assign types to typed
-constants based on their context. This results in hard-to-find bugs,
-nonportable code, and is not in the spirit (though it strictly follows
-the letter) of the 77 and 90 standards. `g77' will not support these
-dangerous semantics, but might offer, in a future release, explicit
-constructs by which a wider variety of typeless constants may be
-specified, and/or user-requested warnings indicating places where `g77'
-might differ from how other compilers assign types to constants.
-
-
-File: g77.info, Node: Source Form, Next: Pedantic Compilation, Prev: Constants, Up: Language
-
-Source Form
-===========
-
- The `-ffree-form' (aka `-fno-fixed-form') and `-ffixed-form' (aka
-`-fno-free-form') command-line options govern how the source file is
-interpreted. Fixed form corresponds to classic ANSI FORTRAN 77 (plus
-popular extensions, such as allowing tabs) and Fortran 90's fixed form.
-Free form corresponds to Fortran 90's free form (though possibly not
-entirely up-to-date, and without complaining about some things that for
-which Fortran 90 requires diagnostics, such as `R = 3 . 1').
-
- The way a Fortran compiler views source files depends entirely on the
-implementation choices made for the compiler. GNU Fortran currently
-tries to be somewhat like a few popular compilers (`f2c', DEC Fortran,
-and so on), though a cleaner default definition along with more
-flexibility offered by command-line options is likely to be offered in
-version 0.6.
-
- Here are some facts regarding the way `g77' interprets source lines:
-
- * Carriage returns (`\r') in source lines are ignored. This is
- somewhat different from `f2c', which seems to treat them as spaces
- outside character/Hollerith constants, and encodes them as `\r'
- inside such constants.
-
- * A source line with a TAB character anywhere in it is treated as
- entirely significant--however long it is--instead of ending in
- column 72 (for fixed-form source) or 132 (for free-form source).
- This also is different from `f2c', which encodes tabs as `\t' (the
- ASCII TAB character) inside character and Hollerith constants, but
- nevertheless seems to treat the column position as if it had been
- affected by the canonical tab positioning.
-
- `g77' effectively translates tabs to the appropriate number of
- spaces (a la the default for the UNIX `expand' command) before
- doing any other processing, other than (currently) noting whether
- a tab was found on a line and using this info to decide how to
- interpret the length of the line and continued constants.
-
- Note that this default behavior probably will change for version
- 0.6, when it will presumably be available via a command-line
- option. The default as of version 0.6 is planned to be a "pure
- visual" model, where tabs are immediately converted to spaces and
- otherwise have no effect, so the way a typical user sees source
- lines produces a consistent result no matter how the spacing in
- those source lines is actually implemented via tabs, spaces, and
- trailing tabs/spaces before newline. Command-line options are
- likely to be added to specify whether all or just-tabbed lines are
- to be extended to 132 or full input-line length, and perhaps even
- an option will be added to specify the truncated-line behavior to
- which some Digital compilers default (and which affects the way
- continued character/Hollerith constants are interpreted).
-
- * Source lines shorter than the applicable fixed length are treated
- as if they were padded with spaces to that length.
-
- This affects only continued character and Hollerith constants, and
- is a different interpretation than provided by some other popular
- compilers (although a bit more consistent with the traditional
- punched-card basis of Fortran and the way the Fortran standard
- expressed fixed source form).
-
- `g77' might someday offer an option to warn about cases where
- differences might be seen as a result of this treatment, and
- perhaps an option to specify the alternate behavior as well.
-
- Note that this padding cannot apply to lines that are effectively
- of infinite length--such lines are specified using command-line
- options like `-ffixed-line-length-none', for example.
-
diff --git a/gnu/usr.bin/gcc/f/g77.info-4 b/gnu/usr.bin/gcc/f/g77.info-4
deleted file mode 100644
index 942fc911e8f..00000000000
--- a/gnu/usr.bin/gcc/f/g77.info-4
+++ /dev/null
@@ -1,1230 +0,0 @@
-This is Info file g77.info, produced by Makeinfo-1.64 from the input
-file g77.texi.
-
- This file explains how to use the GNU Fortran system.
-
- Published by the Free Software Foundation 59 Temple Place - Suite 330
-Boston, MA 02111-1307 USA
-
- Copyright (C) 1995, 1996 Free Software Foundation, Inc.
-
- Permission is granted to make and distribute verbatim copies of this
-manual provided the copyright notice and this permission notice are
-preserved on all copies.
-
- Permission is granted to copy and distribute modified versions of
-this manual under the conditions for verbatim copying, provided also
-that the sections entitled "GNU General Public License," "Funding for
-Free Software," and "Protect Your Freedom--Fight `Look And Feel'" are
-included exactly as in the original, and provided that the entire
-resulting derived work is distributed under the terms of a permission
-notice identical to this one.
-
- Permission is granted to copy and distribute translations of this
-manual into another language, under the above conditions for modified
-versions, except that the sections entitled "GNU General Public
-License," "Funding for Free Software," and "Protect Your Freedom--Fight
-`Look And Feel'", and this permission notice, may be included in
-translations approved by the Free Software Foundation instead of in the
-original English.
-
- Contributed by James Craig Burley (`burley@gnu.ai.mit.edu').
-Inspired by a first pass at translating `g77-0.5.16/f/DOC' that was
-contributed to Craig by David Ronis (`ronis@onsager.chem.mcgill.ca').
-
-
-File: g77.info, Node: Pedantic Compilation, Next: Case Sensitivity, Prev: Source Form, Up: Language
-
-Pedantic Compilation
-====================
-
- The `-fpedantic' command-line option specifies that `g77' is to warn
-about certain non-standard constructs. This is useful for finding some
-extensions `g77' accepts that other compilers might not accept. (Note
-that the `-pedantic' and `-pedantic-errors' options always imply
-`-fpedantic'.)
-
- With `-ff90' in force along with `-fpedantic', some constructs are
-accepted that result in diagnostics when `-fno-f90' and `-fpedantic'
-are both in force. *Note GNU Fortran Extensions: Extensions, for
-information on those constructs.
-
- The constructs for which `g77' issues diagnostics when `-fpedantic'
-and `-fno-f90' are in force are:
-
- * Automatic arrays, as in `REAL A(N)', where `A' is not a dummy
- argument.
-
- * `READ (5), I' and `WRITE (10), J'--the standard disallows the
- comma in each case, while allowing it in `READ 10, I', but many
- compilers (including `f2c') allow the superfluous comma.
-
- * `DOUBLE COMPLEX', either explicitly (via explicit or `IMPLICIT'
- statement) or implicitly (as in `C*D', where `C' is `COMPLEX' and
- `D' is `DOUBLE PRECISION', which is prohibited by the standard
- because it should produce a non-standard `DOUBLE COMPLEX' result).
-
- * Automatic conversion of numeric expressions to `INTEGER' in
- contexts such as:
- - Array-reference indexes.
-
- - Alternate-return values.
-
- - Computed `GOTO'.
-
- - `FORMAT' run-time expressions (not yet supported).
-
- - Dimension lists in specification statements.
-
- - Numbers for I/O statements (such as `READ (UNIT=3.2), I')
-
- - Sizes of `CHARACTER' entities in specification statements.
-
- - Kind types in specification entities (a Fortran 90 feature).
-
- - Initial, terminal, and incrementation parameters for
- implied-`DO' constructs in `DATA' statements.
-
- * Automatic conversion of `LOGICAL' expressions to `INTEGER' in
- contexts such as arithmetic `IF' (where `COMPLEX' expressions are
- disallowed anyway).
-
- * Substring operators applied to character constants and named
- constants (such as `PRINT *,'hello'(3:5)', which would print
- `llo').
-
- * Null argument passed to statement function (as in `PRINT
- *,FOO(,3)').
-
- * Differences between program units regarding whether a given
- `COMMON' area is `SAVE'd (for targets where program units in a
- single source file are "glued" together as they typically are for
- UNIX development environments).
-
- * Differences between named-`COMMON'-block sizes between program
- units.
-
- * Specification statements following first `DATA' statement (normally
- `DATA I/1/' may be followed by `INTEGER J', though not `INTEGER
- I', but `-fpedantic' disables use of both cases.
-
- * Semicolon as statement separator (as in `CALL FOO; CALL BAR').
-
- * Use of `&' in column 1 of fixed-form source (indicates
- continuation).
-
- * Use of `CHARACTER' constants to initialize numeric entities, and
- vice versa.
-
- * Expressions having two arithmetic operators in a row, such as
- `X*-Y'.
-
- If `-fpedantic' is specified along with `-ff90', the following
-constructs result in diagnostics:
-
- * Use of semicolons on line with INCLUDE statement.
-
-
-File: g77.info, Node: Case Sensitivity, Next: Intrinsics, Prev: Pedantic Compilation, Up: Language
-
-Case Sensitivity
-================
-
- GNU Fortran offers the programmer way too much flexibility in
-deciding how source files are to be treated vis-a-vis uppercase and
-lowercase characters. There are 66 useful settings that affect case
-sensitivity, plus 10 settings that are nearly useless, with the
-remaining 116 settings being either redundant or useless.
-
- None of these settings have any effect on the contents of comments
-(the text after a `c' or `C' in Column 1, for example) or of character
-or Hollerith constants. Note that things like the `E' in the statement
-`CALL FOO(3.2E10)' and the `TO' in `ASSIGN 10 TO LAB' are considered
-built-in keywords.
-
- Low-level switches are identified in this discussion thusly:
-
- A Source Case Conversion
- 0 Preserve (see Note 1)
-
- 1 Convert to Upper Case
-
- 2 Convert to Lower Case
-
- B Built-in Keyword Matching:
- 0 Match Any Case (per-character basis)
-
- 1 Match Upper Case Only
-
- 2 Match Lower Case Only
-
- 3 Match InitialCaps Only (see tables for spellings)
-
- C Built-in Intrinsic Matching:
- 0 Match Any Case (per-character basis)
-
- 1 Match Upper Case Only
-
- 2 Match Lower Case Only
-
- 3 Match InitialCaps Only (see tables for spellings)
-
- D User-defined Symbol Possibilities (warnings only)
- 0 Allow Any Case (per-character basis)
-
- 1 Allow Upper Case Only
-
- 2 Allow Lower Case Only
-
- 3 Allow InitialCaps Only (see Note 2)
-
- Note 1: `g77' eventually will support `NAMELIST' in a manner that is
-consistent with these source switches--in the sense that input will be
-expected to meet the same requirements as source code in terms of
-matching symbol names and keywords (for the exponent letters).
-
- Currently, however, `NAMELIST' is supported `libf2c', which
-uppercases `NAMELIST' input and symbol names for matching. This means
-not only that `NAMELIST' output currently shows symbol (and keyword)
-names in uppercase even if lower-case source conversion (option A2) is
-selected, but that `NAMELIST' cannot be adequately supported when
-source case preservation (option A0) is selected.
-
- If A0 is selected, a warning message will be output for each
-`NAMELIST' statement to this effect. The behavior of the program is
-undefined at run time if two or more symbol names appear in a given
-`NAMELIST' such that the names are identical when converted to upper
-case (e.g. `NAMELIST /X/ VAR, Var, var'). For complete and total
-elegance, perhaps there should be a warning when option A2 is selected,
-since the output of NAMELIST is currently in uppercase but will someday
-be lowercase (when a `libg77' is written), but that seems to be
-overkill for a product in beta test.
-
- Note 2: Rules for InitialCaps names are:
- - Must be a single uppercase letter, *or*
-
- - Must start with an uppercase letter and contain at least one
- lowercase letter.
-
- So `A', `Ab', `ABc', `AbC', and `Abc' are valid InitialCaps names,
-but `AB', `A2', and `ABC' are not. Note that most, but not all,
-built-in names meet these requirements--the exceptions are some of the
-two-letter format specifiers, such as `BN' and `BZ'.
-
- Here are the names of the corresponding command-line options:
-
- A0: -fsource-case-preserve
- A1: -fsource-case-upper
- A2: -fsource-case-lower
-
- B0: -fmatch-case-any
- B1: -fmatch-case-upper
- B2: -fmatch-case-lower
- B3: -fmatch-case-initcap
-
- C0: -fintrin-case-any
- C1: -fintrin-case-upper
- C2: -fintrin-case-lower
- C3: -fintrin-case-initcap
-
- D0: -fsymbol-case-any
- D1: -fsymbol-case-upper
- D2: -fsymbol-case-lower
- D3: -fsymbol-case-initcap
-
- Useful combinations of the above settings, along with abbreviated
-option names that set some of these combinations all at once:
-
- 1: A0-- B0--- C0--- D0--- -fcase-preserve
- 2: A0-- B0--- C0--- D-1--
- 3: A0-- B0--- C0--- D--2-
- 4: A0-- B0--- C0--- D---3
- 5: A0-- B0--- C-1-- D0---
- 6: A0-- B0--- C-1-- D-1--
- 7: A0-- B0--- C-1-- D--2-
- 8: A0-- B0--- C-1-- D---3
- 9: A0-- B0--- C--2- D0---
- 10: A0-- B0--- C--2- D-1--
- 11: A0-- B0--- C--2- D--2-
- 12: A0-- B0--- C--2- D---3
- 13: A0-- B0--- C---3 D0---
- 14: A0-- B0--- C---3 D-1--
- 15: A0-- B0--- C---3 D--2-
- 16: A0-- B0--- C---3 D---3
- 17: A0-- B-1-- C0--- D0---
- 18: A0-- B-1-- C0--- D-1--
- 19: A0-- B-1-- C0--- D--2-
- 20: A0-- B-1-- C0--- D---3
- 21: A0-- B-1-- C-1-- D0---
- 22: A0-- B-1-- C-1-- D-1-- -fcase-strict-upper
- 23: A0-- B-1-- C-1-- D--2-
- 24: A0-- B-1-- C-1-- D---3
- 25: A0-- B-1-- C--2- D0---
- 26: A0-- B-1-- C--2- D-1--
- 27: A0-- B-1-- C--2- D--2-
- 28: A0-- B-1-- C--2- D---3
- 29: A0-- B-1-- C---3 D0---
- 30: A0-- B-1-- C---3 D-1--
- 31: A0-- B-1-- C---3 D--2-
- 32: A0-- B-1-- C---3 D---3
- 33: A0-- B--2- C0--- D0---
- 34: A0-- B--2- C0--- D-1--
- 35: A0-- B--2- C0--- D--2-
- 36: A0-- B--2- C0--- D---3
- 37: A0-- B--2- C-1-- D0---
- 38: A0-- B--2- C-1-- D-1--
- 39: A0-- B--2- C-1-- D--2-
- 40: A0-- B--2- C-1-- D---3
- 41: A0-- B--2- C--2- D0---
- 42: A0-- B--2- C--2- D-1--
- 43: A0-- B--2- C--2- D--2- -fcase-strict-lower
- 44: A0-- B--2- C--2- D---3
- 45: A0-- B--2- C---3 D0---
- 46: A0-- B--2- C---3 D-1--
- 47: A0-- B--2- C---3 D--2-
- 48: A0-- B--2- C---3 D---3
- 49: A0-- B---3 C0--- D0---
- 50: A0-- B---3 C0--- D-1--
- 51: A0-- B---3 C0--- D--2-
- 52: A0-- B---3 C0--- D---3
- 53: A0-- B---3 C-1-- D0---
- 54: A0-- B---3 C-1-- D-1--
- 55: A0-- B---3 C-1-- D--2-
- 56: A0-- B---3 C-1-- D---3
- 57: A0-- B---3 C--2- D0---
- 58: A0-- B---3 C--2- D-1--
- 59: A0-- B---3 C--2- D--2-
- 60: A0-- B---3 C--2- D---3
- 61: A0-- B---3 C---3 D0---
- 62: A0-- B---3 C---3 D-1--
- 63: A0-- B---3 C---3 D--2-
- 64: A0-- B---3 C---3 D---3 -fcase-initcap
- 65: A-1- B01-- C01-- D01-- -fcase-upper
- 66: A--2 B0-2- C0-2- D0-2- -fcase-lower
-
- Number 22 is the "strict" ANSI FORTRAN 77 model wherein all input
-(except comments, character constants, and Hollerith strings) must be
-entered in uppercase. Use `-fcase-strict-upper' to specify this
-combination.
-
- Number 43 is like Number 22 except all input must be lowercase. Use
-`-fcase-strict-lower' to specify this combination.
-
- Number 65 is the "classic" ANSI FORTRAN 77 model as implemented on
-many non-UNIX machines whereby all the source is translated to
-uppercase. Use `-fcase-upper' to specify this combination.
-
- Number 66 is the "canonical" UNIX model whereby all the source is
-translated to lowercase. Use `-fcase-lower' to specify this
-combination.
-
- There are a few nearly useless combinations:
-
- 67: A-1- B01-- C01-- D--2-
- 68: A-1- B01-- C01-- D---3
- 69: A-1- B01-- C--23 D01--
- 70: A-1- B01-- C--23 D--2-
- 71: A-1- B01-- C--23 D---3
- 72: A--2 B01-- C0-2- D-1--
- 73: A--2 B01-- C0-2- D---3
- 74: A--2 B01-- C-1-3 D0-2-
- 75: A--2 B01-- C-1-3 D-1--
- 76: A--2 B01-- C-1-3 D---3
-
- The above allow some programs to be compiled but with restrictions
-that make most useful programs impossible: Numbers 67 and 72 warn about
-*any* user-defined symbol names (such as `SUBROUTINE FOO'); Numbers 68
-and 73 warn about any user-defined symbol names longer than one
-character that don't have at least one non-alphabetic character after
-the first; Numbers 69 and 74 disallow any references to intrinsics; and
-Numbers 70, 71, 75, and 76 are combinations of the restrictions in
-67+69, 68+69, 72+74, and 73+74, respectively.
-
- All redundant combinations are shown in the above tables anyplace
-where more than one setting is shown for a low-level switch. For
-example, `B0-2-' means either setting 0 or 2 is valid for switch B.
-The "proper" setting in such a case is the one that copies the setting
-of switch A--any other setting might slightly reduce the speed of the
-compiler, though possibly to an unmeasurable extent.
-
- All remaining combinations are useless in that they prevent
-successful compilation of non-null source files (source files with
-something other than comments).
-
-
-File: g77.info, Node: Intrinsics, Next: Dialects, Prev: Case Sensitivity, Up: Language
-
-Intrinsics
-==========
-
- A given specific intrinsic belongs in one or more groups. Each group
-is deleted, disabled, hidden, or enabled by default or a command-line
-option. The meaning of each term follows.
-
-Deleted
- No intrinsics are recognized as belonging to that group.
-
-Disabled
- Intrinsics are recognized as belonging to the group, but
- references to them (other than via the `INTRINSIC' statement) are
- disallowed through that group.
-
-Hidden
- Intrinsics in that group are recognized and enabled (if
- implemented) *only* if the first mention of the actual name of an
- intrinsic in a program unit is in an `INTRINSIC' statement.
-
-Enabled
- Intrinsics in that group are recognized and enabled (if
- implemented).
-
- The distinction between deleting and disabling a group is illustrated
-by the following example. Assume intrinsic `FOO' belongs only to group
-`FGR'. If group `FGR' is deleted, the following program unit will
-successfully compile, because `FOO()' will be seen as a reference to an
-external function named `FOO':
-
- PRINT *, FOO()
- END
-
-If group `FGR' is disabled, compiling the above program will produce
-diagnostics, either because the `FOO' intrinsic is improperly invoked
-or, if properly invoked, it is not enabled. To change the above
-program so it references an external function `FOO' instead of the
-disabled `FOO' intrinsic, add the following line to the top:
-
- EXTERNAL FOO
-
-So, deleting a group tells `g77' to pretend as though the intrinsics in
-that group do not exist at all, whereas disabling it tells `g77' to
-recognize them as (disabled) intrinsics in intrinsic-like contexts.
-
- Hiding a group is like enabling it, but the intrinsic must be first
-named in an `INTRINSIC' statement to be considered a reference to the
-intrinsic rather than to an external procedure. This might be the
-"safest" way to treat a new group of intrinsics when compiling old
-code, because it allows the old code to be generally written as if
-those new intrinsics never existed, but to be changed to use them by
-inserting `INTRINSIC' statements in the appropriate places. However,
-it should be the goal of development to use `EXTERNAL' for all names of
-external procedures that might be intrinsic names.
-
- If an intrinsic is in more than one group, it is enabled if any of
-its containing groups are enabled; if not so enabled, it is hidden if
-any of its containing groups are hidden; if not so hidden, it is
-disabled if any of its containing groups are disabled; if not so
-disabled, it is deleted. This extra complication is necessary because
-some intrinsics, such as `IBITS', belong to more than one group, and
-hence should be enabled if any of the groups to which they belong are
-enabled, and so on.
-
- The groups are:
-
-`dcp'
- `DOUBLE COMPLEX' intrinsics from the standards (F77, F90).
-
-`f2c'
- Intrinsics supported by AT&T's `f2c' converter and/or `libf2c'.
-
-`f90'
- Fortran 90 intrinsics.
-
-`mil'
- MIL-STD 1753 intrinsics (`MVBITS', `IAND', `BTEST', and so on).
-
-`unix'
- UNIX intrinsics (`IARGC', `EXIT', `ERF', and so on).
-
-`vxt'
- VAX/VMS FORTRAN (current as of v4) intrinsics.
-
-
-File: g77.info, Node: Dialects, Next: Object Compatibility, Prev: Intrinsics, Up: Language
-
-GNU Fortran Dialects
-====================
-
- The `-fvxt-not-f90' and `-ff90-not-vxt' command-line options control
-how `g77' interprets certain tokens and constructs that have different
-meanings in VAX FORTRAN (circa v4) and Fortran 90. (Generally, this
-manual uses the invented acronym VXT to refer to many popular VAX
-FORTRAN extensions, though not necessarily those that are specific to
-the VAX processor architecture or the VMS operating system. An
-extension offered by a Digital Fortran product that also is offered by
-several other Fortran products for different kinds of systems is
-probably going to be considered for inclusion in `g77' someday, and is
-considered a VXT extension.)
-
- When `-ff90-not-vxt' is specified, the following interpretations are
-made (and, when `-fvxt-not-f90' is in effect, the opposite
-interpretations are made):
-
- * Double-quote character (`"') delimits character constant just as
- does apostrophe (`''), rather than beginning an octal constant of
- `INTEGER' type.
-
- * An exclamation point (`!') in column 5 of fixed-form source file
- treated as a continuation character rather than the beginning of a
- comment (as it does in any other column).
-
- * `TYPE FOO' and `TYPE (FOO), BAR' statements are recognized as the
- Fortran 90 variety, not I/O statements. (However, the F90 variety
- is *not* supported, so this really just ensures that `g77' will
- produce a diagnostic instead of trying to implement the VXT `TYPE'
- statement--which currently is not supported either.)
-
-
-File: g77.info, Node: Object Compatibility, Next: Distensions, Prev: Dialects, Up: Language
-
-Object Compatibility
-====================
-
- An individual Fortran source file can be compiled to an object
-(`*.o') file instead of to the final program executable. This allows
-several portions of a program to be compiled at different times and
-linked together whenever a new version of the program is needed.
-However, it introduces the issue of "object compatibility" across the
-various object files (and libraries, or `*.a' files) that are linked
-together to produce any particular exectable file.
-
- Object compatibility is an issue when combining, in one program,
-Fortran code compiled by more than one compiler (or more than one
-configuration of a compiler). If the compilers disagree on how to
-transform the names of procedures, there will normally be errors when
-linking such programs. Worse, if the compilers agree on naming, but
-disagree on issues like how to pass parameters, return arguments, and
-lay out `COMMON' areas, the earliest detected errors might be the
-incorrect results produced by the program (and that assumes these
-errors are detected, which is not always the case).
-
- Normally, `g77' generates code that is object-compatible with code
-generated by a version of `f2c' configured (with, for example, `f2c.h'
-definitions) to be generally compatible with `g77' as built by `gcc'.
-(Normally, `f2c' will, by default, conform to the appropriate
-configuration, but it is possible that older or perhaps even newer
-versions of `f2c', or versions having certain configuration changes to
-`f2c' internals, will produce object files that are incompatible with
-`g77'.)
-
- For example, a Fortran string subroutine argument will become two
-arguments on the C side: a `char *' and an `int' length.
-
- Much of this compatibility results from the fact that `g77' uses the
-same run-time library, `libf2c', used by `f2c'.
-
- Other compilers might or might not generate code that is
-object-compatible with `libf2c' and current `g77', and some might offer
-such compatibility only when explicitly selected via a command-line
-option to the compiler.
-
-* Menu:
-
-* Dropping f2c Compatibility:: When speed is more important.
-* Other Compilers:: Interoperation with code from other compilers.
-
-
-File: g77.info, Node: Dropping f2c Compatibility, Next: Other Compilers, Up: Object Compatibility
-
-Dropping f2c Compatibility
---------------------------
-
- Specifying `-fno-f2c' allows `g77' to generate, in some cases,
-faster code, by not needing to allow to the possibility of linking with
-code compiled by `f2c'.
-
- For example, this affects how `REAL', `COMPLEX', and `DOUBLE
-COMPLEX' functions are called. With `-fno-f2c', they are compiled as
-returning the appropriate `gcc' type (`float', `__complex__ float',
-`__complex__ double', in many configurations).
-
- With `-ff2c' in force, they are compiled differently (with perhaps
-slower run-time performance) to accommodate the restrictions inherent
-in `f2c''s use of K&R C as an intermediate language--`REAL' functions
-return double, while `COMPLEX' functions return `void' and use an extra
-argument pointing to a place for the functions to return their values.
-
- It is possible that, in some cases, leaving `-ff2c' in force might
-produce faster code than using `-fno-f2c'. Feel free to experiment,
-but remember to experiment with changing the way *entire programs and
-their Fortran libraries are compiled* at a time, since this sort of
-experimentation affects the interface of code generated for a Fortran
-source file--that is, it affects object compatibility.
-
- Note that `f2c' compatibility is a fairly static target to achieve,
-though not necessarily perfectly so, since, like `g77', it is still
-being improved. However, specifying `-fno-f2c' causes `g77' to
-generate code that will probably be incompatible with code generated by
-future versions of `g77' when the same option is in force. You should
-make sure you are always able to recompile complete programs from
-source code when upgrading to new versions of `g77' or `f2c',
-especially when using options such as `-fno-f2c'.
-
- Therefore, if you are using `g77' to compile libraries and other
-object files for possible future use and you don't want to require
-recompilation for future use with subsequent versions of `g77', you
-might want to stick with `f2c' compatibility for now, and carefully
-watch for any announcements about changes to the `f2c'/`libf2c'
-interface that might affect existing programs (thus requiring
-recompilation).
-
- It is probable that a future version of `g77' will not, by default,
-generate object files compatible with `f2c' and not use `libf2c'. If
-you expect to depend on this compatibility in the long term, use the
-options `-ff2c -ff2c-library' when compiling all of the applicable code.
-This should either cause `g77' to produce compatible code (at the
-expense of the availability of some features and performance), or at
-the very least trigger compiler warning messages, in future versions of
-`g77'.
-
-
-File: g77.info, Node: Other Compilers, Prev: Dropping f2c Compatibility, Up: Object Compatibility
-
-Other Compilers
----------------
-
- On systems with Fortran compilers other than `f2c' and `g77', code
-compiled by `g77' is not expected to work well with code compiled by
-the native compiler. (This is true for `f2c'-compiled objects as well.)
-Libraries compiled with the native compiler probably will have to be
-recompiled with `g77' to be used with `g77'-compiled code.
-
- Reasons for such incompatibilities include:
-
- * There might be differences in the way names of Fortran procedures
- are translated for use in the system's object-file format. For
- example, the statement `CALL FOO' might be compiled by `g77' to
- call a procedure the linker `ld' sees given the name `_foo_',
- while the apparently corresponding statement `SUBROUTINE FOO'
- might be compiled by the native compiler to define the
- linker-visible name `_foo', or `_FOO_', and so on.
-
- * There might be subtle type mismatches which cause subroutine
- arguments and function return values to get corrupted.
-
- This is why simply getting `g77' to transform procedure names the
- same way a native compiler does is not usually a good idea--unless
- some effort has been made to ensure that, aside from the way the
- two compilers transform procedure names, everything else about the
- way they generate code for procedure interfaces is identical.
-
- * Native compilers use libraries of private I/O routines which will
- not be available at link time unless you have the native
- compiler--and you would have to explicitly ask for them.
-
- For example, on the Sun you would have to add `-L/usr/lang/SCx.x
- -lF77 -lV77' to the link command.
-
-
-File: g77.info, Node: Distensions, Prev: Object Compatibility, Up: Language
-
-Distensions
-===========
-
- The `-fugly' command-line options determine whether certain features
-supported by VAX FORTRAN and other such compilers, but considered too
-ugly to be in code that can be changed to use safer and/or more
-portable constructs, are accepted. These are humorously referred to as
-"distensions", extensions that just plain look ugly in the harsh light
-of day.
-
- The constructs enabled via `-fugly' include:
-
- * Automatic conversion between `INTEGER' and `LOGICAL' as dictated by
- context (typically implies nonportable dependencies on how a
- particular implementation encodes `.TRUE.' and `.FALSE.').
-
- * Use of typeless and Hollerith constants in non-standard places
- (the "standard" here being the appendix in ANSI FORTRAN 77 and the
- descriptions in MIL-STD 1753), plus in places controlled by
- `-fugly-args' and `-fugly-init'.
-
- * Use of a `LOGICAL' variable in `ASSIGN' and assigned-`GOTO'
- statements.
-
- * Use of a single trailing comma to mean "pass an extra trailing null
- argument" in a list of actual arguments to a procedure other than a
- statement function.
-
- For example, `CALL FOO(,)' means "pass two null arguments" when
- `-fugly' is used, rather than "pass one null argument".
-
- The construct disabled via `-fno-ugly-args' is:
-
- * Passing of typeless and Hollerith constants as actual arguments in
- procedure invocations.
-
- For example, `CALL FOO(4HABCD)'.
-
- The constructs disabled by `-fno-ugly-init' are:
-
- * Use of Hollerith and typeless constants in contexts where they set
- initial (compile-time) values for variables, arrays, and named
- constants--that is, `DATA' and `PARAMETER' statements, plus
- type-declaration statements specifying initial values.
-
- * In the same contexts as above, use of character constants to
- initialize numeric items and vice versa (one constant per item).
-
- * Use of Hollerith and typeless constants on the right-hand side of
- assignment statements to numeric types, and in other contexts
- (such as passing arguments to in invocations of intrinsic
- procedures and statement functions) that are treated as
- assignments to known types (the dummy arguments, in these cases).
-
-
-File: g77.info, Node: Installation, Next: Debugging and Interfacing, Prev: Language, Up: Top
-
-Installing GNU Fortran
-**********************
-
-* Menu:
-
-* Prerequisites:: Make sure your system is ready for `g77'.
-* Problems Installing:: Known trouble areas.
-* Quick Start:: The easier procedure for non-experts.
-* Complete Installation:: For experts, or those who want to be: the details.
-* Distributing Binaries:: If you plan on distributing your `g77'.
-* Settings:: Some notes on `g77' internals.
-
- The following information describes how to install `g77'.
-
- The information in this file generally pertains to dealing with
-*source* distributions of `g77' and `gcc'. It is possible that some of
-this information will be applicable to some *binary* distributions of
-these products--however, since these distributions are not made by the
-maintainers of `g77', responsibility for binary distributions rests with
-whoever built and first distributed them.
-
- Nevertheless, efforts to make `g77' easier to both build and install
-from source and package up as a binary distribution are ongoing.
-
-
-File: g77.info, Node: Prerequisites, Next: Problems Installing, Up: Installation
-
-Prerequisites
-=============
-
- The procedures described to unpack, configure, build, and install
-`g77' assume your system has certain programs already installed.
-
- The following prerequisites should be met by your system before you
-follow the `g77' installation instructions:
-
-`gzip'
- To unpack the `gcc' and `g77' distributions, you'll need the
- `gunzip' utility in the `gzip' distribution. Most UNIX systems
- already have `gzip' installed. If yours doesn't, you can get it
- from the FSF.
-
- Note that you'll need `tar' and other utilities as well, but all
- UNIX systems have these. There are GNU versions of all these
- available--in fact, a complete GNU UNIX system can be put together
- on most systems, if desired.
-
-`gcc-2.7.2.tar.gz'
- You need to have this, or some other applicable, version of `gcc'
- on your system. The version should be an exact copy of a
- distribution from the FSF. It is approximately 7MB large.
-
- If you've already unpacked `gcc-2.7.2.tar.gz' into a directory
- (named `gcc-2.7.2') called the "source tree" for `gcc', you can
- delete the distribution itself, but you'll need to remember to
- skip any instructions to unpack this distribution.
-
- Without an applicable `gcc' source tree, you cannot build `g77'.
- You can obtain an FSF distribution of `gcc' from the FSF.
-
-`g77-0.5.18.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 can obtain an FSF distribution of `g77' from the FSF, the same
- way you obtained `gcc'.
-
-100MB disk space
- For a complete "bootstrap" build, about 100MB of disk space is
- required for `g77' by the author's current Linux system.
-
- Some juggling can reduce the amount of space needed; during the
- bootstrap process, once Stage 3 starts, during which the version
- of `gcc' that has been copied into the `stage2/' directory is used
- to rebuild the system, you can delete the `stage1/' directory to
- free up some space.
-
- It is likely that many systems don't require the complete
- bootstrap build, as they already have a recent version of `gcc'
- installed. Such systems might be able to build `g77' with only
- about 75MB of free space.
-
-`patch'
- Although you can do everything `patch' does yourself, by hand,
- without much trouble, having `patch' installed makes installation
- of new versions of GNU utilities such as `g77' so much easier that
- it is worth getting. You can obtain `patch' the same way you
- obtained `gcc' and `g77'.
-
- In any case, you can apply patches by hand--patch files are
- designed for humans to read them.
-
-`make'
- Your system must have `make', and you will probably save yourself
- a lot of trouble if it is GNU `make' (sometimes referred to as
- `gmake').
-
-`cc'
- Your system must have a working C compiler.
-
- *Note Installing GNU CC: (gcc)Installation, for more information
- on prerequisites for installing `gcc'.
-
-`bison'
- If you do not have `bison' installed, you can usually work around
- any need for it, since `g77' itself does not use it, and `gcc'
- normally includes all files generated by running it in its
- distribution. You can obtain `bison' the same way you obtained
- `gcc' and `g77'.
-
- *Note Missing bison?::, for information on how to work around not
- having `bison'.
-
-`makeinfo'
- If you are missing `makeinfo', you can usually work around any
- need for it. You can obtain `makeinfo' the same way you obtained
- `gcc' and `g77'.
-
- *Note Missing makeinfo?::, for information on getting around the
- lack of `makeinfo'.
-
-`root' access
- To perform the complete installation procedures on a system, you
- need to have `root' access to that system, or equivalent access.
-
- Portions of the procedure (such as configuring and building `g77')
- can be performed by any user with enough disk space and virtual
- memory.
-
- However, these instructions are oriented towards less-experienced
- users who want to install `g77' on their own personal systems.
-
- System administrators with more experience will want to determine
- for themselves how they want to modify the procedures described
- below to suit the needs of their installation.
-
-
-File: g77.info, Node: Problems Installing, Next: Quick Start, Prev: Prerequisites, Up: Installation
-
-Problems Installing
-===================
-
- This is a list of problems (and some apparent problems which don't
-really mean anything is wrong) that show up when configuring, building,
-installing, or porting GNU Fortran.
-
- *Note Installation Problems: (gcc)Installation Problems, for more
-information on installation problems that can afflict either `gcc' or
-`g77'.
-
-* Menu:
-
-* General Problems:: Problems afflicting most or all systems.
-* Cross-compiler Problems:: Problems afflicting cross-compilation setups.
-
-
-File: g77.info, Node: General Problems, Next: Cross-compiler Problems, Up: Problems Installing
-
-General Problems
-----------------
-
- * On SunOS systems, linking the `f771' program produces an error
- message concerning an undefined symbol named `_strtoul'.
-
- This is not a `g77' bug. *Note Patching GNU Fortran::, for
- information on a workaround provided by `g77'.
-
- The proper fix is either to upgrade your system to one that
- provides a complete ANSI C environment, or improve `gcc' so that
- it provides one for all the languages and configurations it
- supports.
-
- *Note:* In earlier versions of `g77', an automated workaround for
- this problem was attempted. It worked for systems without
- `_strtoul', substituting the incomplete-yet-sufficient version
- supplied with `g77' for those systems. However, the automated
- workaround failed mysteriously for systems that appeared to have
- conforming ANSI C environments, and it was decided that, lacking
- resources to more fully investigate the problem, it was better to
- not punish users of those systems either by requiring them to work
- around the problem by hand or by always substituting an incomplete
- `strtoul()' implementation when their systems had a complete,
- working one. Unfortunately, this meant inconveniencing users of
- systems not having `strtoul()', but they're using obsolete (and
- generally unsupported) systems anyway.
-
- * It'd be helpful if `g77''s `Makefile.in' or `Make-lang.in' would
- create the various `stageN' directories and their subdirectories,
- so expert installers wouldn't have to reconfigure after cleaning
- up.
-
- * Improvements to the way `libf2c' is built could make building
- `g77' as a cross-compiler easier--for example, passing and using
- `LD' and `AR' in the appropriate ways.
-
- * `g77' currently requires application of a patch file to the gcc
- compiler tree (at least up through gcc version 2.7.0). The
- necessary patches should be folded in to the mainline gcc
- distribution.
-
- (Some combinations of versions of `g77' and `gcc' might actually
- *require* no patches, but the patch files will be provided anyway
- as long as there are more changes expected in subsequent releases.
- These patch files might contain unnecessary, but possibly helpful,
- patches. As a result, it is possible this issue might never be
- resolved, except by eliminating the need for the person
- configuring `g77' to apply a patch by hand, by going to a more
- automated approach (such as configure-time patching).
-
- * It should be possible to build the runtime without building `cc1'
- and other non-Fortran items, but, for now, an easy way to do that
- is not yet established.
-
- * Compiling `g77' requires GNU C, not just ANSI C. Fixing this
- wouldn't be very hard (just tedious), but the code using GNU
- extensions to the C language is expected to be rewritten for 0.6
- anyway, so there are no plans for an interim fix.
-
-
-File: g77.info, Node: Cross-compiler Problems, Prev: General Problems, Up: Problems Installing
-
-Cross-compiler Problems
------------------------
-
- `g77' has been in alpha testing since September of 1992, and in
-public beta testing since February of 1995. Alpha testing was done by
-a small number of people worldwide on a fairly wide variety of
-machines, involving self-compilation in most or all cases. Beta
-testing has been done primarily via self-compilation, but in more and
-more cases, cross-compilation (and "criss-cross compilation", where a
-version of a compiler is built on one machine to run on a second and
-generate code that runs on a third) has been tried and has succeeded,
-to varying extents.
-
- Generally, `g77' can be ported to any configuration to which `gcc',
-`f2c', and `libf2c' can be ported and made to work together, aside from
-the known problems described in this manual. If you want to port `g77'
-to a particular configuration, you should first make sure `gcc' and
-`libf2c' can be ported to that configuration before focusing on `g77',
-because `g77' is so dependent on them.
-
- Even for cases where `gcc' and `libf2c' work, you might run into
-problems with cross-compilation on certain machines, for several
-reasons.
-
- * There is one known bug (a design bug to be fixed in 0.6) that
- prevents configuration of `g77' as a cross-compiler in some cases,
- though there are assumptions made during configuration that
- probably make doing non-self-hosting builds a hassle, requiring
- manual intervention.
-
- * `gcc' might still have some trouble being configured for certain
- combinations of machines. For example, it might not know how to
- handle floating-point constants.
-
- * There are still some challenges putting together the right
- run-time libraries (needed by `libf2c') for a target system,
- depending on the systems involved in the configuration. (This is
- a general problem with cross-compilation, and with `gcc' in
- particular.)
-
-
-File: g77.info, Node: Quick Start, Next: Complete Installation, Prev: Problems Installing, Up: Installation
-
-Quick Start
-===========
-
- This procedure configures, builds, and installs `g77' "out of the
-box" and works on most UNIX systems. Each command is identified by a
-unique number, used in the explanatory text that follows. For the most
-part, the output of each command is not shown, though indications of
-the types of responses are given in a few cases.
-
- To perform this procedure, the installer must be logged in as user
-`root'. Much of it can be done while not logged in as `root', and
-users experienced with UNIX administration should be able to modify the
-procedure properly to do so.
-
- Following traditional UNIX conventions, it is assumed that the
-source trees for `g77' and `gcc' will be placed in `/usr/src'. It also
-is assumed that the source distributions themselves already reside in
-`/usr/FSF', a naming convention used by the author of `g77' on his own
-system:
-
- /usr/FSF/gcc-2.7.2.tar.gz
- /usr/FSF/g77-0.5.18.tar.gz
-
- Users of the following systems should not blindly follow these
-quick-start instructions, because of problems their systems have coping
-with straightforward installation of `g77':
-
- * SunOS
-
- * Alpha
-
- Instead, see *Note Complete Installation::, for detailed information
-on how to configure, build, and install `g77' for your particular
-system. Also, see *Note Known Causes of Trouble with GNU Fortran:
-Trouble, for information on bugs and other problems known to afflict the
-installation process, and how to report newly discovered ones.
-
- If your system is *not* on the above list, and *is* a UNIX system or
-one of its variants, you should be able to follow the instructions
-below. If you vary *any* of the steps below, you might run into
-trouble, including possibly breaking existing programs for other users
-of your system. Before doing so, it is wise to review the explanations
-of some of the steps. These explanations follow this list of steps.
-
- sh[ 1]# `cd /usr/src'
-
- sh[ 2]# `gunzip -c < /usr/FSF/gcc-2.7.2.tar.gz | tar xf -'
-
- [Might say "Broken pipe"...that is normal on some systems.]
- sh[ 3]# `gunzip -c < /usr/FSF/g77-0.5.18.tar.gz | tar xf -'
-
- ["Broken pipe" again possible.]
- sh[ 4]# `ln -s gcc-2.7.2 gcc'
-
- sh[ 5]# `ln -s g77-0.5.18 g77'
-
- sh[ 6]# `mv -i g77/* gcc'
-
- [No questions should be asked by mv here; or, you made a mistake.]
- sh[ 7]# `patch -p1 -V t -d gcc-2.7.2 < gcc-2.7.2/f/gbe/2.7.2.diff'
-
- [Unless patch complains about rejected patches, this step worked.]
- sh[ 8]# `cd gcc'
- sh[ 9]# `touch f77-install-ok'
-
- [Do not do the above if your system already has an f77
- command, unless you've checked that overwriting it
- is okay.]
- sh[10]# `touch f2c-install-ok'
-
- [Do not do the above if your system already has an f2c
- command, unless you've checked that overwriting it
- is okay. Else, `touch f2c-exists-ok'.]
- sh[11]# `./configure --prefix=/usr'
-
- [Do not do the above if gcc is not installed in /usr/bin.
- You might need a different `--prefix=...', as
- described below.]
- sh[12]# `make bootstrap'
-
- [This takes a long time, and is where most problems occur.]
- sh[13]# `rm -fr stage1'
-
- sh[14]# `make -k install'
-
- [The actual installation.]
- sh[15]# `g77 -v'
-
- [Verify that g77 is installed, obtain version info.]
- sh[16]#
-
- *Note Updating Your Info Directory: Updating Documentation, for
-information on how to update your system's top-level `info' directory
-to contain a reference to this manual, so that users of `g77' can
-easily find documentation instead of having to ask you for it.
-
- Elaborations of many of the above steps follows:
-
-Step 1: `cd /usr/src'
- You can build `g77' pretty much anyplace. By convention, this
- manual assumes `/usr/src'. It might be helpful if other users on
- your system knew where to look for the source code for the
- installed version of `g77' and `gcc' in any case.
-
-Step 4: `ln -s gcc-2.7.2 gcc'
-Step 5: `ln -s g77-0.5.18 g77'
- These commands mainly help reduce typing, and help reduce visual
- clutter in examples in this manual showing what to type to install
- `g77'.
-
- *Note Unpacking::, for information on using distributions of `g77'
- made by organizations other than the FSF.
-
-Step 6: `mv -i g77/* gcc'
- After doing this, you can, if you like, type `rm g77' and `rmdir
- g77-0.5.18' to remove the empty directory and the symbol link to
- it. But, it might be helpful to leave them around as quick
- reminders of which version(s) of `g77' are installed on your
- system.
-
- *Note Unpacking::, for information on the contents of the `g77'
- directory (as merged into the `gcc' directory).
-
-Step 7: `patch -p1 ...'
- This can produce a wide variety of printed output, from `Hmm, I
- can't seem to find a patch in there anywhere...' to long lists of
- messages indicated that patches are being found, applied
- successfully, and so on.
-
- If messages about "fuzz", "offset", or especially "reject files"
- are printed, it might mean you applied the wrong patch file. If
- you believe this is the case, it is best to restart the sequence
- after deleting (or at least renaming to unused names) the
- top-level directories for `g77' and `gcc' and their symbolic links.
-
- After this command finishes, the `gcc' directory might have old
- versions of several files as saved by `patch'. To remove these,
- after `cd gcc', type `rm -i *.~*~'.
-
- *Note Merging Distributions::, for more information.
-
-Step 9: `touch f77-install-ok'
- Don't do this if you don't want to overwrite an existing version
- of `f77' (such as a native compiler, or a script that invokes
- `f2c'). Otherwise, installation will overwrite the `f77' command
- and the `f77' man pages with copies of the corresponding `g77'
- material.
-
- *Note Installing `f77': Installing f77, for more information.
-
-Step 10: `touch f2c-install-ok'
- Don't do this if you don't want to overwrite an existing
- installation of `libf2c' (though, chances are, you do). Instead,
- `touch f2c-exists-ok' to allow the installation to continue
- without any error messages about `/usr/lib/libf2c.a' already
- existing.
-
- *Note Installing `f2c': Installing f2c, for more information.
-
-Step 11: `./configure --prefix=/usr'
- This is where you specify that the `g77' executable is to be
- installed in `/usr/bin/', the `libf2c.a' library is to be
- installed in `/usr/lib/', and so on.
-
- You should ensure that any existing installation of the `gcc'
- executable is in `/usr/bin/'. Otherwise, installing `g77' so that
- it does not fully replace the existing installation of `gcc' is
- likely to result in the inability to compile Fortran programs.
-
- *Note Where in the World Does Fortran (and GNU C) Go?: Where to
- Install, for more information on determining where to install
- `g77'. *Note Configuring gcc::, for more information on the
- configuration process triggered by invoking the `./configure'
- script.
-
-Step 12: `make bootstrap'
- *Note Installing GNU CC: (gcc)Installation, for information on the
- kinds of diagnostics you should expect during this procedure.
-
- *Note Building gcc::, for complete `g77'-specific information on
- this step.
-
-Step 13: `rm -fr stage1'
- You don't need to do this, but it frees up disk space.
-
-Step 14: `make -k install'
- If this doesn't seem to work, try:
-
- make -k install install-libf77 install-f2c-all
-
- *Note Installation of Binaries::, for more information.
-
- *Note Updating Your Info Directory: Updating Documentation, for
- information on entering this manual into your system's list of
- texinfo manuals.
-
-
-File: g77.info, Node: Complete Installation, Next: Distributing Binaries, Prev: Quick Start, Up: Installation
-
-Complete Installation
-=====================
-
- Here is the complete `g77'-specific information on how to configure,
-build, and install `g77'.
-
-* Menu:
-
-* Unpacking::
-* Merging Distributions::
-* f77: Installing f77.
-* f2c: Installing f2c.
-* Patching GNU Fortran::
-* Where to Install::
-* Configuring gcc::
-* Building gcc::
-* Pre-installation Checks::
-* Installation of Binaries::
-* Updating Documentation::
-* bison: Missing bison?.
-* makeinfo: Missing makeinfo?.
-
-
-File: g77.info, Node: Unpacking, Next: Merging Distributions, Up: Complete Installation
-
-Unpacking
----------
-
- The `gcc' source distribution is a stand-alone distribution. It is
-designed to be unpacked (producing the `gcc' source tree) and built as
-is, assuming certain prerequisites are met (including the availability
-of compatible UNIX programs such as `make', `cc', and so on).
-
- However, before building `gcc', you will want to unpack and merge
-the `g77' distribution in with it, so that you build a Fortran-capable
-version of `gcc', which includes the `g77' command, the necessary
-run-time libraries, and this manual.
-
- Unlike `gcc', the `g77' source distribution is *not* a stand-alone
-distribution. It is designed to be unpacked and, afterwards,
-immediately merged into an applicable `gcc' source tree. That is, the
-`g77' distribution *augments* a `gcc' distribution--without `gcc',
-generally only the documentation is immediately usable.
-
- A sequence of commands typically used to unpack `gcc' and `g77' is:
-
- sh# `cd /usr/src'
- sh# `gunzip -d < /usr/FSF/gcc-2.7.2.tar.gz | tar xf -'
- sh# `gunzip -d < /usr/FSF/g77-0.5.18.tar.gz | tar xf -'
- sh# `ln -s gcc-2.7.2 gcc'
- sh# `ln -s g77-0.5.18 g77'
- sh# `mv -i g77/* gcc'
-
- *Notes:* The commands beginning with `gunzip...' might print `Broken
-pipe...' as they complete. That is nothing to worry about, unless you
-actually *hear* a pipe breaking. The `ln' commands are helpful in
-reducing typing and clutter in installation examples in this manual.
-Hereafter, the top level of `gcc' source tree is referred to as `gcc',
-and the top level of just the `g77' source tree (prior to issuing the
-`mv' command, above) is referred to as `g77'.
-
- There are three top-level names in a `g77' distribution:
-
- g77/COPYING.g77
- g77/README.g77
- g77/f
-
- All three entries should be moved (or copied) into a `gcc' source
-tree (typically named after its version number and as it appears in the
-FSF distributions--e.g. `gcc-2.7.2').
-
- `g77/f' is the subdirectory containing all of the code,
-documentation, and other information that is specific to `g77'. The
-other two files exist to provide information on `g77' to someone
-encountering a `gcc' source tree with `g77' already present, who has
-not yet read these installation instructions and thus needs help
-understanding that the source tree they are looking at does not come
-from a single FSF distribution. They also help people encountering an
-unmerged `g77' source tree for the first time.
-
- *Note:* Please use *only* `gcc' and `g77' source trees as
-distributed by the FSF. Use of modified versions, such as the
-Pentium-specific-optimization port of `gcc', is likely to result in
-problems that appear to be in the `g77' code but, in fact, are not. Do
-not use such modified versions unless you understand all the
-differences between them and the versions the FSF distributes--in which
-case you should be able to modify the `g77' (or `gcc') source trees
-appropriately so `g77' and `gcc' can coexist as they do in the stock
-FSF distributions.
-
diff --git a/gnu/usr.bin/gcc/f/g77.info-5 b/gnu/usr.bin/gcc/f/g77.info-5
deleted file mode 100644
index de90bb41ba6..00000000000
--- a/gnu/usr.bin/gcc/f/g77.info-5
+++ /dev/null
@@ -1,1085 +0,0 @@
-This is Info file g77.info, produced by Makeinfo-1.64 from the input
-file g77.texi.
-
- This file explains how to use the GNU Fortran system.
-
- Published by the Free Software Foundation 59 Temple Place - Suite 330
-Boston, MA 02111-1307 USA
-
- Copyright (C) 1995, 1996 Free Software Foundation, Inc.
-
- Permission is granted to make and distribute verbatim copies of this
-manual provided the copyright notice and this permission notice are
-preserved on all copies.
-
- Permission is granted to copy and distribute modified versions of
-this manual under the conditions for verbatim copying, provided also
-that the sections entitled "GNU General Public License," "Funding for
-Free Software," and "Protect Your Freedom--Fight `Look And Feel'" are
-included exactly as in the original, and provided that the entire
-resulting derived work is distributed under the terms of a permission
-notice identical to this one.
-
- Permission is granted to copy and distribute translations of this
-manual into another language, under the above conditions for modified
-versions, except that the sections entitled "GNU General Public
-License," "Funding for Free Software," and "Protect Your Freedom--Fight
-`Look And Feel'", and this permission notice, may be included in
-translations approved by the Free Software Foundation instead of in the
-original English.
-
- Contributed by James Craig Burley (`burley@gnu.ai.mit.edu').
-Inspired by a first pass at translating `g77-0.5.16/f/DOC' that was
-contributed to Craig by David Ronis (`ronis@onsager.chem.mcgill.ca').
-
-
-File: g77.info, Node: Merging Distributions, Next: Installing f77, Prev: Unpacking, Up: Complete Installation
-
-Merging Distributions
----------------------
-
- After merging the `g77' source tree into the `gcc' source tree, the
-final merge step is done by applying the pertinent patches the `g77'
-distribution provides for the `gcc' source tree.
-
- Read the file `gcc/f/gbe/README', and apply the appropriate patch
-file for the version of the GNU CC compiler you have, if that exists.
-If the directory exists but the appropriate file does not exist, you
-are using either an old, unsupported version, or a release one that is
-newer than the newest `gcc' version supported by the version of `g77'
-you have.
-
- GNU version numbers make it easy to figure out whether a particular
-version of a distribution is newer or older than some other version of
-that distribution. The format is, generally, MAJOR.MINOR.PATCH, with
-each field being a decimal number. (You can safely ignore leading
-zeros; for example, 1.5.3 is the same as 1.5.03.) The MAJOR field only
-increases with time. The other two fields are reset to 0 when the
-field to their left is incremented; otherwise, they, too, only increase
-with time. So, version 2.6.2 is newer than version 2.5.8, and version
-3.0 is newer than both. (Trailing `.0' fields often are omitted in
-announcements and in names for distributions and the directories they
-create.)
-
- If your version of `gcc' is older than the oldest version supported
-by `g77' (as casually determined by listing the contents of
-`gcc/f/gbe/'), you should obtain a newer, supported version of `gcc'.
-(You could instead obtain an older version of `g77', or try and get
-your `g77' to work with the old `gcc', but neither approach is
-recommended, and you shouldn't bother reporting any bugs you find if you
-take either approach, because they're probably already fixed in the
-newer versions you're not using.)
-
- If your version of `gcc' is newer than the newest version supported
-by `g77', it is possible that your `g77' will work with it anyway. If
-the version number for `gcc' differs only in the PATCH field, you might
-as well try applying the `g77' patch that is for the newest version of
-`gcc' having the same MAJOR and MINOR fields, as this is likely to work.
-
- So, for example, if `g77' has support for versions 2.7.0 and 2.7.1,
-it is likely that `gcc-2.7.2' would work well with `g77' by using the
-`2.7.1.diff' patch file provided with `g77' (aside from some offsets
-reported by `patch', which usually are harmless).
-
- However, `gcc-2.8.0' would almost certainly not work with that
-version of `g77' no matter which patch file was used, so a new version
-of `g77' would be needed (and you should wait for it rather than
-bothering the maintainers--*note User-Visible Changes: Changes.).
-
- This complexity is the result of `gcc' and `g77' being separate
-distributions. By keeping them separate, each product is able to be
-independently improved and distributed to its user base more frequently.
-
- However, `g77' often requires changes to contemporary versions of
-`gcc'. Also, the GBE interface defined by `gcc' typically undergoes
-some incompatible changes at least every time the MINOR field of the
-version number is incremented, and such changes require corresponding
-changes to the `g77' front end (FFE).
-
- It is hoped that the GBE interface, and the `gcc' and `g77' products
-in general, will stabilize sufficiently for the need for hand-patching
-to disappear.
-
- Invoking `patch' as described in `gcc/f/gbe/README' can produce a
-wide variety of printed output, from `Hmm, I can't seem to find a patch
-in there anywhere...' to long lists of messages indicated that patches
-are being found, applied successfully, and so on.
-
- If messages about "fuzz", "offset", or especially "reject files" are
-printed, it might mean you applied the wrong patch file. If you
-believe this is the case, it is best to restart the sequence after
-deleting (or at least renaming to unused names) the top-level
-directories for `g77' and `gcc' and their symbolic links. That is
-because `patch' might have partially patched some `gcc' source files,
-so reapplying the correct patch file might result in the correct
-patches being applied incorrectly (due to the way `patch' necessarily
-works).
-
- After `patch' finishes, the `gcc' directory might have old versions
-of several files as saved by `patch'. To remove these, after `cd gcc',
-type `rm -i *.~*~'.
-
- *Note:* `g77''s configuration file `gcc/f/config-lang.in' ensures
-that the source code for the version of `gcc' being configured has at
-least one GBE function required specifically by `g77'. This function
-was added to `gcc-2.7.1', making the patch file
-`g77-0.5.17/f/gbe/2.7.1.diff' empty of actual patches.
-
- For `gcc-2.7.0' and earlier, this configuration-time checking should
-catch failure to apply the correct patch and, if so caught, it should
-abort the configuration with an explanation. *Please* do not try to
-disable the check, otherwise `g77' might well appear to build and
-install correctly, and even appear to compile correctly, but could
-easily produce broken code.
-
- `diff -rcp2N' is used to create the patch files in `gcc/f/gbe/'.
-
-
-File: g77.info, Node: Installing f77, Next: Installing f2c, Prev: Merging Distributions, Up: Complete Installation
-
-Installing `f77'
-----------------
-
- You should decide whether you want installation of `g77' to also
-install an `f77' command. On systems with a native `f77', this is not
-normally desired, so `g77' does not do this by default.
-
- If you want `f77' installed, create the file `f77-install-ok' (e.g.
-via the UNIX command `touch f77-install-ok') in the source or build
-top-level directory (the same directory in which the `g77' `f'
-directory resides, not the `f' directory itself), or edit
-`gcc/f/Make-lang.in' and change the definition of the
-`F77_INSTALL_FLAG' macro appropriately.
-
- Usually, this means that, after typing `cd gcc', you would type
-`touch f77-install-ok'.
-
- When you enable installation of `f77', either a link to or a direct
-copy of the `g77' command is made. Similarly, `f77.1' is installed as
-a man page.
-
- (The `uninstall' target in the `gcc/Makefile' also tests this macro
-and file, when invoked, to determine whether to delete the installed
-copies of `f77' and `f77.1'.)
-
- *Note:* No attempt is yet made to install a program (like a shell
-script) that provides compatibility with any other `f77' programs.
-Only the most rudimentary invocations of `f77' will work the same way
-with `g77'.
-
-
-File: g77.info, Node: Installing f2c, Next: Patching GNU Fortran, Prev: Installing f77, Up: Complete Installation
-
-Installing `f2c'
-----------------
-
- Currently, `g77' does not include `f2c' itself in its distribution.
-However, it does include a modified version of the `libf2c'. This
-version is normally compatible with `f2c', but has been modified to
-meet the needs of `g77' in ways that might possibly be incompatible
-with some versions or configurations of `f2c'.
-
- Decide how installation of `g77' should affect any existing
-installation of `f2c' on your system.
-
- If you do not have `f2c' on your system (e.g. no `/usr/bin/f2c', no
-`/usr/include/f2c.h', and no `/usr/lib/libf2c.a', `/usr/lib/libF77.a',
-or `/usr/lib/libI77.a'), you don't need to be concerned with this item.
-
- If you do have `f2c' on your system, you need to decide how users of
-`f2c' will be affected by your installing `g77'. Since `g77' is
-currently designed to be object-code-compatible with `f2c' (with very
-few, clear exceptions), users of `f2c' might want to combine
-`f2c'-compiled object files with `g77'-compiled object files in a
-single executable.
-
- To do this, users of `f2c' should use the same copies of `f2c.h' and
-`libf2c.a' that `g77' uses (and that get built as part of `g77').
-
- If you do nothing here, the `g77' installation process will not
-overwrite the `include/f2c.h' and `lib/libf2c.a' files with its own
-versions, and in fact will not even install `libf2c.a' for use with the
-newly installed versions of `gcc' and `g77' if it sees that
-`lib/libf2c.a' exists--instead, it will print an explanatory message
-and skip this part of the installation.
-
- To install `g77''s versions of `f2c.h' and `libf2c.a' in the
-appropriate places, create the file `f2c-install-ok' (e.g. via the UNIX
-command `touch f2c-install-ok') in the source or build top-level
-directory (the same directory in which the `g77' `f' directory resides,
-not the `f' directory itself), or edit `gcc/f/Make-lang.in' and change
-the definition of the `F2C_INSTALL_FLAG' macro appropriately.
-
- Usually, this means that, after typing `cd gcc', you would type
-`touch f2c-install-ok'.
-
- Make sure that when you enable the overwriting of `f2c.h' and
-`libf2c.a' as used by `f2c', you have a recent and properly configured
-version of `bin/f2c' so that it generates code that is compatible with
-`g77'.
-
- If you don't want installation of `g77' to overwrite `f2c''s existing
-installation, but you do want `g77' installation to proceed with
-installation of its own versions of `f2c.h' and `libf2c.a' in places
-where `g77' will pick them up (even when linking `f2c'-compiled object
-files--which might lead to incompatibilities), create the file
-`f2c-exists-ok' (e.g. via the UNIX command `touch f2c-exists-ok') in
-the source or build top-level directory, or edit `gcc/f/Make-lang.in'
-and change the definition of the `F2CLIBOK' macro appropriately.
-
-
-File: g77.info, Node: Patching GNU Fortran, Next: Where to Install, Prev: Installing f2c, Up: Complete Installation
-
-Patching GNU Fortran
---------------------
-
- If you're using a SunOS system, you'll need to make the following
-change to `gcc/f/proj.h': edit the line reading
-
- #define FFEPROJ_STRTOUL 1 ...
-
-by replacing the `1' with `0'.
-
- This causes a minimal version of `strtoul()' provided as part of the
-`g77' distribution to be compiled and linked into whatever `g77'
-programs need it, since some systems (like SunOS) do not provide this
-function in their system libraries.
-
- Similarly, a minimal version of `bsearch()' is available and can be
-enabled by editing a line similar to the one for `strtoul()' above in
-`gcc/f/proj.h', if your system libraries lack `bsearch()'.
-
- These are not problems with `g77', which requires an ANSI C
-environment. You should upgrade your system to one that provides a
-full ANSI C environment, or encourage the maintainers of `gcc' to
-provide one to all `gcc'-based compilers in future `gcc' distributions.
-
- *Note Problems Installing::, for more information on why `strtoul()'
-comes up missing and on approaches to dealing with this problem that
-have already been tried.
-
-
-File: g77.info, Node: Where to Install, Next: Configuring gcc, Prev: Patching GNU Fortran, Up: Complete Installation
-
-Where in the World Does Fortran (and GNU C) Go?
------------------------------------------------
-
- Before configuring, you should make sure you know where you want the
-`g77' and `gcc' binaries to be installed after they're built, because
-this information is given to the configuration tool and used during the
-build itself.
-
- A `g77' installation necessarily requires installation of a
-`g77'-aware version of `gcc', so that the `gcc' command recognizes
-Fortran source files and knows how to compile them.
-
- For this to work, the version of `gcc' that you will be building as
-part of `g77' *must* be installed as the "active" version of `gcc' on
-the system.
-
- Sometimes people make the mistake of installing `gcc' as
-`/usr/local/bin/gcc', leaving an older, non-Fortran-aware version in
-`/usr/bin/gcc'. (Or, the opposite happens.) This can result in `g77'
-being unable to compile Fortran source files, because when it calls on
-`gcc' to do the actual compilation, `gcc' complains that it does not
-recognize the language, or the file name suffix.
-
- So, determine whether `gcc' already is installed on your system,
-and, if so, *where* it is installed, and prepare to configure the new
-version of `gcc' you'll be building so that it installs over the
-existing version of `gcc'.
-
- You might want to back up your existing copy of `bin/gcc', and the
-entire `lib/' directory, before you perform the actual installation (as
-described in this manual).
-
- Existing `gcc' installations typically are found in `/usr' or
-`/usr/local'. If you aren't certain where the currently installed
-version of `gcc' and its related programs reside, look at the output of
-this command:
-
- gcc -v -o /tmp/delete-me -xc /dev/null -xnone
-
- All sorts of interesting information on the locations of various
-`gcc'-related programs and data files should be visible in the output
-of the above command. However, you do have to sift through it
-yourself; `gcc' currently provides no easy way to ask it where it is
-installed and where it looks for the various programs and data files it
-calls on to do its work.
-
- Just *building* `g77' should not overwrite any installed
-programs--but, usually, after you build `g77', you will want to install
-it, so backing up anything it might overwrite is a good idea. (This is
-true for any package, not just `g77', though in this case it is
-intentional that `g77' overwrites `gcc' if it is already installed--it
-is unusual that the installation process for one distribution
-intentionally overwrites a program or file installed by another
-distribution.)
-
- Another reason to back up the existing version first, or make sure
-you can restore it easily, is that it might be an older version on
-which other users have come to depend for certain behaviors. However,
-even the new version of `gcc' you install will offer users the ability
-to specify an older version of the actual compilation programs if
-desired, and these older versions need not include any `g77' components.
-*Note Specifying Target Machine and Compiler Version: (gcc)Target
-Options, for information on the `-V' option of `gcc'.
-
-
-File: g77.info, Node: Configuring gcc, Next: Building gcc, Prev: Where to Install, Up: Complete Installation
-
-Configuring GNU CC
-------------------
-
- `g77' is configured automatically when you configure `gcc'. There
-are two parts of `g77' that are configured in two different
-ways--`g77', which "camps on" to the `gcc' configuration mechanism, and
-`libf2c', which uses a variation of the GNU `autoconf' configuration
-system.
-
- Generally, you shouldn't have to be concerned with either `g77' or
-`libf2c' configuration, unless you're configuring `g77' as a
-cross-compiler. In this case, the `libf2c' configuration, and possibly
-the `g77' and `gcc' configurations as well, might need special
-attention. (This also might be the case if you're porting `gcc' to a
-whole new system--even if it is just a new operating system on an
-existing, supported CPU.)
-
- To configure the system, see *Note Installing GNU CC:
-(gcc)Installation, following the instructions for running `./configure'.
-Pay special attention to the `--prefix=' option, which you almost
-certainly will need to specify.
-
- (Note that `gcc' installation information is provided as a straight
-text file in `gcc/INSTALL'.)
-
- The information printed by the invocation of `./configure' should
-show that the `f' directory (the Fortran language) has been configured.
-If it does not, there is a problem.
-
- *Note:* Configuring with the `--srcdir' argument is known to work
-with GNU `make', but it is not known to work with other variants of
-`make'. Irix5.2 and SunOS4.1 versions of `make' definitely won't work
-outside the source directory at present. `g77''s portion of the
-`configure' script issues a warning message about this when you
-configure for building binaries outside the source directory.
-
-
-File: g77.info, Node: Building gcc, Next: Pre-installation Checks, Prev: Configuring gcc, Up: Complete Installation
-
-Building GNU CC
----------------
-
- Building `g77' requires building enough of `gcc' that these
-instructions assume you're going to build all of `gcc', including
-`g++', `protoize', and so on. You can save a little time and disk
-space by changes the `LANGUAGES' macro definition in `gcc/Makefile.in'
-or `gcc/Makefile', but if you do that, you're on your own. One change
-is almost *certainly* going to cause failures: removing `c' or `f77'
-from the definition of the `LANGUAGES' macro.
-
- After configuring `gcc', which configures `g77' and `libf2c'
-automatically, you're ready to start the actual build by invoking
-`make'.
-
- *Note:* You *must* have run `./configure' before you run `make',
-even if you're using an already existing `gcc' development directory,
-because `./configure' does the work to recognize that you've added
-`g77' to the configuration.
-
- There are two general approaches to building GNU CC from scratch:
-
-"bootstrap"
- This method uses minimal native system facilities to build a
- barebones, unoptimized `gcc', that is then used to compile
- ("bootstrap") the entire system.
-
-"straight"
- This method assumes a more complete native system exists, and uses
- that just once to build the entire system.
-
- On all systems without a recent version of `gcc' already installed,
-the bootstrap method must be used. In particular, `g77' uses
-extensions to the C language offered, apparently, only by `gcc'.
-
- On most systems with a recent version of `gcc' already installed,
-the straight method can be used. This is an advantage, because it
-takes less CPU time and disk space for the build. However, it does
-require that the system have fairly recent versions of many GNU
-programs and other programs, which are not enumerated here.
-
-* Menu:
-
-* Bootstrap Build:: For all systems.
-* Straight Build:: For systems with a recent version of `gcc'.
-
-
-File: g77.info, Node: Bootstrap Build, Next: Straight Build, Up: Building gcc
-
-Bootstrap Build
-...............
-
- A complete bootstrap build is done by issuing a command beginning
-with `make bootstrap ...', as described in *Note Installing GNU CC:
-(gcc)Installation. This is the most reliable form of build, but it
-does require the most disk space and CPU time, since the complete system
-is built twice (in Stages 2 and 3), after an initial build (during
-Stage 1) of a minimal `gcc' compiler using the native compiler and
-libraries.
-
- You might have to, or want to, control the way a bootstrap build is
-done by entering the `make' commands to build each stage one at a time,
-as described in the `gcc' manual. For example, to save time or disk
-space, you might want to not bother doing the Stage 3 build, in which
-case you are assuming that the `gcc' compiler you have built is
-basically sound (because you are giving up the opportunity to compare a
-large number of object files to ensure they're identical).
-
- To save some disk space during installation, after Stage 2 is built,
-you can type `rm -fr stage1' to remove the binaries built during Stage
-1.
-
- *Note:* If you do build Stage 3 and you compare the object files
-produced by various stages, the file `gcc/f/zzz.o' *will* be different.
-That is because it contains a string with an expansion of the
-`__TIME__' macro, which expands to the current time of day. It is
-nothing to worry about, since `gcc/f/zzz.c' doesn't contain any actual
-code. It does allow you to override its use of `__DATE__' and
-`__TIME__' by defining macros for the compilation--see the source code
-for details.
-
- *Note Installing GNU CC: (gcc)Installation, for important
-information on building `gcc' that is not described in this `g77'
-manual. For example, explanations of diagnostic messages and whether
-they're expected, or indicate trouble, are found there.
-
-
-File: g77.info, Node: Straight Build, Prev: Bootstrap Build, Up: Building gcc
-
-Straight Build
-..............
-
- If you have a recent version of `gcc' already installed on your
-system, and if you're reasonably certain it produces code that is
-object-compatible with the version of `gcc' you want to build as part
-of building `g77', you can save time and disk space by doing a straight
-build.
-
- To build just the C and Fortran compilers and the necessary run-time
-libraries, issue the following command:
-
- make -k CC=gcc LANGUAGES=f77 all g77
-
- (The `g77' target is necessary because the `gcc' build procedures
-apparently do not automatically build command drivers for languages in
-subdirectories. It's the `all' target that triggers building
-everything except, apparently, the `g77' command itself.)
-
- If you run into problems using this method, you have two options:
-
- * Abandon this approach and do a bootstrap build.
-
- * Try to make this approach work by diagnosing the problems you're
- running into and retrying.
-
- Especially if you do the latter, you might consider submitting any
-solutions as bug/fix reports. *Note Known Causes of Trouble with GNU
-Fortran: Trouble.
-
- However, understand that many problems preventing a straight build
-from working are not `g77' problems, and, in such cases, are not likely
-to be addressed in future versions of `g77'.
-
-
-File: g77.info, Node: Pre-installation Checks, Next: Installation of Binaries, Prev: Building gcc, Up: Complete Installation
-
-Pre-installation Checks
------------------------
-
- Before installing the system, which includes installing `gcc', you
-might want to do some minimum checking to ensure that some basic things
-work.
-
- Here are some commands you can try, and output typically printed by
-them when they work:
-
- sh# `cd /usr/src/gcc'
- sh# `./g77 --driver=./xgcc -B./ -v'
- ./xgcc -B./ -v -fnull-version -o /tmp/gfa03648 ...
- Reading specs from ./specs
- gcc version 2.7.1
- ./cpp -lang-c -v -isystem ./include -undef ...
- GNU CPP version 2.7.1 (80386, BSD syntax)
- #include "..." search starts here:
- #include <...> search starts here:
- ./include
- /usr/include
- /usr/i486-unknown-linuxaout/include
- /usr/lib/gcc-lib/i486-unknown-linuxaout/2.7.1/include
- /usr/include
- End of search list.
- ./f771 /tmp/cca03648.i -quiet -dumpbase null.F -version ...
- GNU F77 version 2.7.1 (80386, BSD syntax) compiled ...
- GNU Fortran Front End version 0.5.18 compiled: ...
- as -o /tmp/cca036481.o /tmp/cca03648.s
- ld -m i386linux -o /tmp/gfa03648 /usr/lib/crt0.o -L. ...
- /usr/lib/crt0.o(.text+0x35): undefined reference to `main'
- sh# `./xgcc -B./ -v -o /tmp/delete-me -xc /dev/null -xnone'
- Reading specs from ./specs
- gcc version 2.7.1
- ./cpp -lang-c -v -isystem ./include -undef ...
- GNU CPP version 2.7.1 (80386, BSD syntax)
- #include "..." search starts here:
- #include <...> search starts here:
- ./include
- /usr/include
- /usr/i486-unknown-linuxaout/include
- /usr/lib/gcc-lib/i486-unknown-linuxaout/2.7.1/include
- /usr/include
- End of search list.
- ./cc1 /tmp/cca03659.i -quiet -dumpbase null.c -version ...
- GNU C version 2.7.1 (80386, BSD syntax) compiled ...
- as -o /tmp/cca036591.o /tmp/cca03659.s
- ld -m i386linux -o /tmp/delete-me /usr/lib/crt0.o -L. ...
- /usr/lib/crt0.o(.text+0x35): undefined reference to `main'
- sh#
-
- (Note that long lines have been truncated, and `...' used to
-indicate such truncations.)
-
- The above two commands test whether `g77' and `gcc', respectively,
-are able to compile empty (null) source files, whether invocation of
-the C preprocessor works, whether libraries can be linked (even though
-there is an undefined reference due to there being no main program
-unit), and so on.
-
- If the output you get from either of the above two commands is
-noticably different, especially if it is shorter or longer in ways that
-do not look consistent with the above sample output, you probably
-should not install `gcc' and `g77' until you have investigated further.
-
- For example, you could try compiling actual applications and seeing
-how that works. (You might want to do that anyway, even if the above
-tests work.)
-
- To compile using the not-yet-installed versions of `gcc' and `g77',
-use the following commands to invoke them.
-
- To invoke `g77', type:
-
- /usr/src/gcc/g77 --driver=/usr/src/gcc/xgcc -B/usr/src/gcc/ ...
-
- To invoke `gcc', type:
-
- /usr/src/gcc/xgcc -B/usr/src/gcc/ ...
-
-
-File: g77.info, Node: Installation of Binaries, Next: Updating Documentation, Prev: Pre-installation Checks, Up: Complete Installation
-
-Installation of Binaries
-------------------------
-
- After configuring, building, and testing `g77' and `gcc', when you
-are ready to install them on your system, type:
-
- make -k CC=gcc LANGUAGES=f77 install
-
- As described in *Note Installing GNU CC: (gcc)Installation, the
-values for the `CC' and `LANGUAGES' macros should be the same as those
-you supplied for the build itself.
-
- So, the details of the above command might vary if you used a
-bootstrap build (where you might be able to omit both definitions, or
-might have to supply the same definitions you used when building the
-final stage) or if you deviated from the instructions for a straight
-build.
-
- If the above command does not install `libf2c.a' as expected, try
-this:
-
- make -k ... install install-libf77 install-f2c-all
-
- We don't know why some non-GNU versions of `make' sometimes require
-this alternate command, but they do. (Remember to supply the
-appropriate definitions for `CC' and `LANGUAGES' where you see `...' in
-the above command.)
-
- Note that using the `-k' option tells `make' to continue after some
-installation problems, like not having `makeinfo' installed on your
-system. It might not be necessary.
-
-
-File: g77.info, Node: Updating Documentation, Next: Missing bison?, Prev: Installation of Binaries, Up: Complete Installation
-
-Updating Your Info Directory
-----------------------------
-
- As part of installing `g77', you should make sure users of `info'
-can easily access this manual on-line. Do this by making sure a line
-such as the following exists in `/usr/info/dir', or in whatever file is
-the top-level file in the `info' directory on your system (perhaps
-`/usr/local/info/dir':
-
- * g77: (g77). The GNU Fortran programming language.
-
- If the menu in `dir' is organized into sections, `g77' probably
-belongs in a section with a name such as the following:
-
- * Writing Programs
-
- * Programming Languages
-
- * Languages Other Than C
-
- * Scientific/Engineering Tools
-
- * GNU Compilers
-
-
-File: g77.info, Node: Missing bison?, Next: Missing makeinfo?, Prev: Updating Documentation, Up: Complete Installation
-
-Missing `bison'?
-----------------
-
- If you cannot install `bison', make sure you have started with a
-*fresh* distribution of `gcc', do *not* do `make maintainer-clean' (in
-other versions of `gcc', this was called `make realclean'), and, to
-ensure that `bison' is not invoked by `make' during the build, type
-these commands:
-
- sh# `cd gcc'
- sh# `touch bi-parser.c bi-parser.h c-parse.c c-parse.h cexp.c'
- sh# `touch cp/parse.c cp/parse.h objc-parse.c'
- sh#
-
- These commands update the date-time-modified information for all the
-files produced by the various invocations of `bison' in the current
-versions of `gcc', so that `make' no longer believes it needs to update
-them. All of these files should already exist in a `gcc' distribution,
-but the application of patches to upgrade to a newer version can leave
-the modification information set such that the `bison' input files look
-more "recent" than the corresponding output files.
-
- *Note:* New versions of `gcc' might change the set of files it
-generates by invoking `bison'--if you cannot figure out for yourself
-how to handle such a situation, try an older version of `gcc' until you
-find someone who can (or until you obtain and install `bison').
-
-
-File: g77.info, Node: Missing makeinfo?, Prev: Missing bison?, Up: Complete Installation
-
-Missing `makeinfo'?
--------------------
-
- If you cannot install `makeinfo', either use the `-k' option when
-invoking make to specify any of the `install' or related targets, or
-specify `MAKEINFO=echo' on the `make' command line.
-
- If you fail to do one of these things, some files, like `libf2c.a',
-might not be installed, because the failed attempt by `make' to invoke
-`makeinfo' causes it to cancel any further processing.
-
-
-File: g77.info, Node: Distributing Binaries, Next: Settings, Prev: Complete Installation, Up: Installation
-
-Distributing Binaries
-=====================
-
- If you are building `g77' for distribution to others in binary form,
-first make sure you are aware of your legal responsibilities (read the
-file `gcc/COPYING' thoroughly).
-
- Then, consider your target audience and decide where `g77' should be
-installed.
-
- For systems like Linux that have no native Fortran compiler (or
-where `g77' could be considered the native compiler for Fortran and
-`gcc' for C, etc.), you should definitely configure `g77' for
-installation in `/usr/bin' instead of `/usr/local/bin'. Specify the
-`--prefix=/usr' option when running `./configure'. You might also want
-to set up the distribution so the `f77' command is a link to
-`g77'--just make an empty file named `f77-install-ok' in the source or
-build directory (the one in which the `f' directory resides, not the
-`f' directory itself) when you specify one of the `install' or
-`uninstall' targets in a `make' command.
-
- For a system that might already have `f2c' installed, you definitely
-will want to make another empty file (in the same directory) named
-either `f2c-exists-ok' or `f2c-install-ok'. Use the former if you
-don't want your distribution to overwrite `f2c'-related files in
-existing systems; use the latter if you want to improve the likelihood
-that users will be able to use both `f2c' and `g77' to compile code for
-a single program without encountering link-time or run-time
-incompatibilities.
-
- (Make sure you clearly document, in the "advertising" for your
-distribution, how installation of your distribution will affect
-existing installations of `gcc', `f2c', `f77', `libf2c.a', and so on.
-Similarly, you should clearly document any requirements you assume are
-met by users of your distribution.)
-
- For other systems with native `f77' (and `cc') compilers, configure
-`g77' as you (or most of your audience) would configure `gcc' for their
-installations. Typically this is for installation in `/usr/local', and
-would not include a copy of `g77' named `f77', so users could still use
-the native `f77'.
-
- In any case, for `g77' to work properly, you *must* ensure that the
-binaries you distribute include:
-
-`bin/g77'
- This is the command most users use to compile Fortran.
-
-`bin/gcc'
- This is the command all users use to compile Fortran, either
- directly or indirectly via the `g77' command. The `bin/gcc'
- executable file must have been built from a `gcc' source tree into
- which a `g77' source tree was merged and configured, or it will
- not know how to compile Fortran programs.
-
-`bin/f77'
- In installations with no non-GNU native Fortran compiler, this is
- the same as `bin/g77'. Otherwise, it should be omitted from the
- distribution, so the one on already on a particular system does
- not get overwritten.
-
-`info/g77.info*'
- This is the documentation for `g77'.
-
- Please edit this documentation (by editing `gcc/f/*.texi' and
- doing `make doc' from the `/usr/src/gcc' directory) to reflect any
- changes you've made to `g77', or at least to encourage users of
- your binary distribution to report bugs to you first.
-
- Also, whether you distribute binaries or install `g77' on your own
- system, it might be helpful for everyone to add a line listing
- this manual by name and topic to the top-level `info' node in
- `/usr/info/dir'. That way, users can find `g77' documentation more
- easily. *Note Updating Your Info Directory: Updating
- Documentation.
-
-`man/man1/g77.1'
- This is the short man page for `g77'.
-
-`man/man1/f77.1'
- In installations where `f77' is the same as `g77', this is the
- same as `man/man1/g77.1'. Otherwise, it should be omitted from
- the distribution, so the one already on a particular system does
- not get overwritten.
-
-`lib/gcc-lib/.../f771'
- This is the actual Fortran compiler.
-
-`lib/gcc-lib/.../libf2c.a'
- This is the run-time library for `g77'-compiled programs.
-
- Whether you want to include the slightly updated (and possibly
-improved) versions of `cc1', `cc1plus', and whatever other binaries get
-rebuilt with the changes the GNU Fortran distribution makes to the GNU
-back end, is up to you. These changes are highly unlikely to break any
-compilers, and it is possible they'll fix back-end bugs that can be
-demonstrated using front ends other than GNU Fortran's.
-
- Please assure users that unless they have a specific need for their
-existing, older versions of `gcc' command, they are unlikely to
-experience any problems by overwriting it with your version--though
-they could certainly protect themselves by making backup copies first!
-Otherwise, users might try and install your binaries in a "safe" place,
-find they cannot compile Fortran programs with your distribution
-(because, perhaps, they're picking up their old version of the `gcc'
-command, which does not recognize Fortran programs), and assume that
-your binaries (or, more generally, GNU Fortran distributions in
-general) are broken, at least for their system.
-
- Finally, *please* ask for bug reports to go to you first, at least
-until you're sure your distribution is widely used and has been well
-tested. This especially goes for those of you making any changes to
-the `g77' sources to port `g77', e.g. to OS/2.
-`fortran@gnu.ai.mit.edu' has received a fair amount of bug reports that
-turned out to be problems with other peoples' ports and distributions,
-about which nothing could be done for the user. Once you are quite
-certain a bug report does not involve your efforts, you can forward it
-to us.
-
-
-File: g77.info, Node: Settings, Prev: Distributing Binaries, Up: Installation
-
-Changing Settings Before Building
-=================================
-
- Here are some internal `g77' settings that can be changed by editing
-source files in `gcc/f/' before building.
-
- This information, and perhaps even these settings, represent
-stop-gap solutions to problems people doing various ports of `g77' have
-encountered. As such, none of the following information is expected to
-be pertinent in future versions of `g77'.
-
-* Menu:
-
-* 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 `DATA' initialization.
-* Alpha Problems:: Problems with 64-bit systems like Alphas.
-
-
-File: g77.info, Node: Maximum Stackable Size, Next: Floating-point Bit Patterns, Up: Settings
-
-Maximum Stackable Size
-----------------------
-
- `g77', on most machines, puts many variables and arrays on the stack
-where possible, and can be configured (by changing
-`FFECOM_sizeMAXSTACKITEM' in `gcc/f/com.c') to force smaller-sized
-entities into static storage (saving on stack space) or permit
-larger-sized entities to be put on the stack (which can improve
-run-time performance, as it presents more opportunities for the GBE to
-optimize the generated code).
-
-
-File: g77.info, Node: Floating-point Bit Patterns, Next: Large Initialization, Prev: Maximum Stackable Size, Up: Settings
-
-Floating-point Bit Patterns
----------------------------
-
- The `g77' build will crash if an attempt is made to build it as a
-cross-compiler for a target when `g77' cannot reliably determine the
-bit pattern of floating-point constants for the target. Planned
-improvements for g77-0.6 will give it the capabilities it needs to not
-have to crash the build but rather generate correct code for the target.
-(Currently, `g77' would generate bad code under such circumstances if
-it didn't crash during the build, e.g. when compiling a source file
-that does something like `EQUIVALENCE (I,R)' and `DATA
-R/3.1415926535/'.)
-
-
-File: g77.info, Node: Large Initialization, Next: Alpha Problems, Prev: Floating-point Bit Patterns, Up: Settings
-
-Initialization of Large Aggregate Areas
----------------------------------------
-
- A warning message is issued when `g77' sees code that provides
-initial values (e.g. via `DATA') to an aggregate area (`COMMON' or
-`EQUIVALENCE', or even a large enough array or `CHARACTER' variable)
-that is large enough to increase `g77''s compile time by roughly a
-factor of 10.
-
- This size currently is quite small, since `g77' currently has a
-known bug requiring too much memory and time to handle such cases. In
-`gcc/f/data.c', the macro `FFEDATA_sizeTOO_BIG_INIT_' is defined to the
-minimum size for the warning to appear. The size is specified in
-storage units, which can be bytes, words, or whatever, on a
-case-by-case basis.
-
- After changing this macro definition, you must (of course) rebuild
-and reinstall `g77' for the change to take effect.
-
- Note that, as of version 0.5.18, improvements have reduced the scope
-of the problem for *sparse* initialization of large arrays, especially
-those with large, contiguous uninitialized areas. However, the warning
-is issued at a point prior to when `g77' knows whether the
-initialization is sparse, and delaying the warning could mean it is
-produced too late to be helpful.
-
- Therefore, the macro definition should not be adjusted to reflect
-sparse cases. Instead, adjust it to generate the warning when densely
-initialized arrays begin to cause responses noticably slower than
-linear performance would suggest.
-
-
-File: g77.info, Node: Alpha Problems, Prev: Large Initialization, Up: Settings
-
-Alpha Problems
---------------
-
- `g77' might warn when it is used to compile Fortran code for a
-target configuration that is not basically a 32-bit machine (such as an
-Alpha, which is a 64-bit machine, especially if it has a 64-bit
-operating system running on it). This is because `g77' is known to not
-work properly on such configurations, although the reasons for this are
-not fully explored. This is expected to be fixed at 0.6, at which
-point the warning would be dropped. (The reason the unexplored
-problems are expected to be fixed at 0.6 is because some known internal
-design problems `g77' has, which reduce portability and the ability to
-configure it as a cross-compiler, are presumed to be at least partly
-responsible for the problems being encountered on the Alpha. The
-problems remain unexplored partly because the known problems exist and
-are scheduled to be addressed anyway. Plus, the `g77' maintainer does
-not yet possess an Alpha workstation of his own.)
-
-
-File: g77.info, Node: Debugging and Interfacing, Next: Collected Fortran Wisdom, Prev: Installation, Up: Top
-
-Debugging and Interfacing
-*************************
-
- GNU Fortran currently generates code that is object-compatible with
-the `f2c' converter. Also, it avoids limitations in the current GBE,
-such as the inability to generate a procedure with multiple entry
-points, by generating code that is structured differently (in terms of
-procedure names, scopes, arguments, and so on) than might be expected.
-
- As a result, writing code in other languages that calls on, is
-called by, or shares in-memory data with `g77'-compiled code generally
-requires some understanding of the way `g77' compiles code for various
-constructs.
-
- Similarly, using a debugger to debug `g77'-compiled code, even if
-that debugger supports native Fortran debugging, generally requires
-this sort of information.
-
- This section describes some of the basic information on how `g77'
-compiles code for constructs involving interfaces to other languages
-and to debuggers.
-
- *Caution:* Much or all of this information pertains to only the
-current release of `g77', sometimes even to using certain compiler
-options with `g77' (such as `-fno-f2c'). Do not write code that
-depends on this information without clearly marking said code as
-nonportable and subject to review for every new release of `g77'. This
-information is provided primarily to make debugging of code generated
-by this particular release of `g77' easier for the user, and partly to
-make writing (generally nonportable) interface code easier. Both of
-these activities require tracking changes in new version of `g77' as
-they are installed, because new versions can change the behaviors
-described in this section.
-
-* Menu:
-
-* Names:: Naming of user-defined variables, procedures, etc.
-* Main Program Unit:: How `g77' compiles a main program unit.
-* Arrays:: Dealing with (possibly multi-dimensional) arrays.
-* Procedures:: How `g77' constructs parameter lists
- for procedures.
-* Adjustable Arrays:: Special consideration for adjustable arrays.
-* Alternate Returns:: How `g77' handles alternate returns.
-* Functions:: Functions returning floating-point or character data.
-* Common Blocks:: Accessing common variables while debugging.
-* Local Equivalence Areas:: Accessing `EQUIVALENCE' while debugging.
-* Alternate Entry Points:: How `g77' implements alternate `ENTRY'.
-* Assigned Statement Labels:: How `g77' handles `ASSIGN'.
-
-
-File: g77.info, Node: Names, Next: Main Program Unit, Up: Debugging and Interfacing
-
-Names
-=====
-
- Fortran permits each implementation to decide how to represent names
-as far as how they're seen in other contexts, such as debuggers and
-when interfacing to other languages, and especially as far as how
-casing is handled.
-
- External names--names of entities that are public, or "accessible",
-to all modules in a program--normally have an underscore (`_') appended
-by `g77', to generate code that is compatible with f2c. External names
-include names of Fortran things like common blocks, external procedures
-(subroutines and functions, but not including statement functions,
-which are internal procedures), and entry point names.
-
- However, use of the `-fno-underscoring' option disables this kind of
-transformation of external names (though inhibiting the transformation
-certainly improves the chances of colliding with incompatible externals
-written in other languages--but that might be intentional.
-
- When `-funderscoring' is in force, any name (external or local) that
-already has at least one underscore in it is implemented by `g77' by
-appending two underscores. External names are changed this way for
-`f2c' compatibility. Local names are changed this way to avoid
-collisions with external names that are different in the source
-code--`f2c' does the same thing, but there's no compatibility issue
-there except for user expectations while debugging.
-
- For example:
-
- Max_Cost = 0
-
-Here, a user would, in the debugger, refer to this variable using the
-name `max_cost__' (or `MAX_COST__' or `Max_Cost__', as described below).
-(We hope to improve `g77' in this regard in the future--don't write
-scripts depending on this behavior! Also, consider experimenting with
-the `-fno-underscoring' option to try out debugging without having to
-massage names by hand like this.)
-
- `g77' provides a number of command-line options that allow the user
-to control how case mapping is handled for source files. The default
-is the traditional UNIX model for Fortran compilers--names are mapped
-to lower case. Other command-line options can be specified to map
-names to upper case, or to leave them exactly as written in the source
-file.
-
- For example:
-
- Foo = 3.14159
-
-Here, it is normally the case that the variable assigned will be named
-`foo'. This would be the name to enter when using a debugger to access
-the variable.
-
- However, depending on the command-line options specified, the name
-implemented by `g77' might instead be `FOO' or even `Foo', thus
-affecting how debugging is done.
-
- Also:
-
- Call Foo
-
-This would normally call a procedure that, if it were in a separate C
-program, be defined starting with the line:
-
- void foo_()
-
-However, `g77' command-line options could be used to change the casing
-of names, resulting in the name `FOO_' or `Foo_' being given to the
-procedure instead of `foo_', and the `-fno-underscoring' option could
-be used to inhibit the appending of the underscore to the name.
-
-
-File: g77.info, Node: Main Program Unit, Next: Arrays, Prev: Names, Up: Debugging and Interfacing
-
-Main Program Unit (PROGRAM)
-===========================
-
- When `g77' compiles a main program unit, it gives it the public
-procedure name `MAIN__'. The `libf2c' library has the actual `main()'
-procedure as is typical of C-based environments, and it is this
-procedure that performs some initial start-up activity and then calls
-`MAIN__'.
-
- Generally, `g77' and `libf2c' are designed so that you need not
-include a main program unit written in Fortran in your program--it can
-be written in C or some other language. Especially for I/O handling,
-this is the case, although `g77-0.5.16' includes a bug fix for `libf2c'
-that solved a problem with using the `OPEN' statement as the first
-Fortran I/O activity in a program without a Fortran main program unit.
-
- However, if you don't intend to use `g77' (or `f2c') to compile your
-main program unit--that is, if you intend to compile a `main()'
-procedure using some other language--you should carefully examine the
-code for `main()' in `libf2c', found in the source file
-`gcc/f/runtime/libF77/main.c', to see what kinds of things might need
-to be done by your `main()' in order to provide the Fortran environment
-your Fortran code is expecting.
-
- For example, `libf2c''s `main()' sets up the information used by the
-`IARGC' and `GETARG' intrinsics. Bypassing `libf2c''s `main()' without
-providing a substitute for this activity would mean that invoking
-`IARGC' and `GETARG' would produce undefined results.
-
- When debugging, one implication of the fact that `main()', which is
-the place where the debugged program "starts" from the debugger's point
-of view, is in `libf2c' is that you won't be starting your Fortran
-program at a point you recognize as your Fortran code.
-
- The standard way to get around this problem is to set a break point
-(a one-time, or temporary, break point will do) at the entrance to
-`MAIN__', and then run the program.
-
- After doing this, the debugger will see the current execution point
-of the program as at the beginning of the main program unit of your
-program.
-
- Of course, if you really want to set a break point at some other
-place in your program and just start the program running, without first
-breaking at `MAIN__', that should work fine.
-
diff --git a/gnu/usr.bin/gcc/f/g77.info-6 b/gnu/usr.bin/gcc/f/g77.info-6
deleted file mode 100644
index 0c8fbac7768..00000000000
--- a/gnu/usr.bin/gcc/f/g77.info-6
+++ /dev/null
@@ -1,1098 +0,0 @@
-This is Info file g77.info, produced by Makeinfo-1.64 from the input
-file g77.texi.
-
- This file explains how to use the GNU Fortran system.
-
- Published by the Free Software Foundation 59 Temple Place - Suite 330
-Boston, MA 02111-1307 USA
-
- Copyright (C) 1995, 1996 Free Software Foundation, Inc.
-
- Permission is granted to make and distribute verbatim copies of this
-manual provided the copyright notice and this permission notice are
-preserved on all copies.
-
- Permission is granted to copy and distribute modified versions of
-this manual under the conditions for verbatim copying, provided also
-that the sections entitled "GNU General Public License," "Funding for
-Free Software," and "Protect Your Freedom--Fight `Look And Feel'" are
-included exactly as in the original, and provided that the entire
-resulting derived work is distributed under the terms of a permission
-notice identical to this one.
-
- Permission is granted to copy and distribute translations of this
-manual into another language, under the above conditions for modified
-versions, except that the sections entitled "GNU General Public
-License," "Funding for Free Software," and "Protect Your Freedom--Fight
-`Look And Feel'", and this permission notice, may be included in
-translations approved by the Free Software Foundation instead of in the
-original English.
-
- Contributed by James Craig Burley (`burley@gnu.ai.mit.edu').
-Inspired by a first pass at translating `g77-0.5.16/f/DOC' that was
-contributed to Craig by David Ronis (`ronis@onsager.chem.mcgill.ca').
-
-
-File: g77.info, Node: Arrays, Next: Procedures, Prev: Main Program Unit, Up: Debugging and Interfacing
-
-Arrays (DIMENSION)
-==================
-
- Fortran uses "column-major ordering" in its arrays. This differs
-from other languages, such as C, which use "row-major ordering". The
-difference is that, with Fortran, array elements adjacent to each other
-in memory differ in the *first* subscript instead of the last;
-`A(5,10,20)' immediately follows `A(4,10,20)', whereas with row-major
-ordering it would follow `A(5,10,19)'.
-
- This consideration affects not only interfacing with and debugging
-Fortran code, it can greatly affect how code is designed and written,
-especially when code speed and size is a concern.
-
- Fortran also differs from C, a popular language for interfacing and
-to support directly in debuggers, in the way arrays are treated. In C,
-arrays are single-dimensional and have interesting relationships to
-pointers, neither of which is true for Fortran. As a result, dealing
-with Fortran arrays from within an environment limited to C concepts
-can be challenging.
-
- For example, accessing the array element `A(5,10,20)' is easy enough
-in Fortran (use `A(5,10,20)'), but in C some difficult machinations are
-needed. First, C would treat the A array as a single-dimension array.
-Second, C does not understand low bounds for arrays as does Fortran.
-Third, C assumes a low bound of zero (0), while Fortran defaults to a
-low bound of one (1) and can supports an arbitrary low bound.
-Therefore, calculations must be done to determine what the C equivalent
-of `A(5,10,20)' would be, and these calculations require knowing the
-dimensions of `A'.
-
- For `DIMENSION A(2:11,21,0:29)', the calculation of the offset of
-`A(5,10,20)' would be:
-
- (5-2)
- + (10-1)*(11-2+1)
- + (20-0)*(11-2+1)*(21-1+1)
- = 4293
-
-So the C equivalent in this case would be `a[4293]'.
-
- When using a debugger directly on Fortran code, the C equivalent
-might not work, because some debuggers cannot understand the notion of
-low bounds other than zero. However, unlike `f2c', `g77' does inform
-the GBE that a multi-dimensional array (like `A' in the above example)
-is really multi-dimensional, rather than a single-dimensional array, so
-at least the dimensionality of the array is preserved.
-
- Debuggers that understand Fortran should have no trouble with
-non-zero low bounds, but for non-Fortran debuggers, especially C
-debuggers, the above example might have a C equivalent of `a[4305]'.
-This calculation is arrived at by eliminating the subtraction of the
-lower bound in the first parenthesized expression on each line--that
-is, for `(5-2)' substitute `(5)', for `(10-1)' substitute `(10)', and
-for `(20-0)' substitute `(20)'. Actually, the implication of this can
-be that the expression `*(&a[2][1][0] + 4293)' works fine, but that
-`a[20][10][5]' produces the equivalent of `*(&a[0][0][0] + 4305)'
-because of the missing lower bounds.
-
- Come to think of it, perhaps the behavior is due to the debugger
-internally compensating for the lower bounds by offsetting the base
-address of `a', leaving `&a' set lower, in this case, than
-`&a[2][1][0]' (the address of its first element as identified by
-subscripts equal to the corresponding lower bounds).
-
- You know, maybe nobody really needs to use arrays.
-
-
-File: g77.info, Node: Procedures, Next: Adjustable Arrays, Prev: Arrays, Up: Debugging and Interfacing
-
-Procedures (SUBROUTINE and FUNCTION)
-====================================
-
- Procedures that accept `CHARACTER' arguments are implemented by
-`g77' so that each `CHARACTER' argument has two actual arguments.
-
- The first argument occupies the expected position in the argument
-list and has the user-specified name. This argument is a pointer to an
-array of characters, passed by the caller.
-
- The second argument is appended to the end of the user-specified
-calling sequence and is named `__g77_length_X', where X is the
-user-specified name. This argument is of the C type `ftnlen' (see
-`gcc/f/runtime/f2c.h.in' for information on that type) and is the
-number of characters the caller has allocated in the array pointed to
-by the first argument.
-
- A procedure will ignore the length argument if `X' is not declared
-`CHARACTER*(*)', because for other declarations, it knows the length.
-Not all callers necessarily "know" this, however, which is why they all
-pass the extra argument.
-
- The contents of the `CHARACTER' argument are specified by the
-address passed in the first argument (named after it). The procedure
-can read or write these contents as appropriate.
-
- When more than one `CHARACTER' argument is present in the argument
-list, the length arguments are appended in the order the orginal
-arguments appear. So `CALL FOO('HI','THERE')' is implemented in C as
-`foo("hi","there",2,5);', ignoring the fact that `g77' does not provide
-the trailing null bytes on the constant strings (`f2c' does provide
-them, but they are unnecessary in a Fortran environment, and you should
-not expect them to be there).
-
- Note that the above information applies to `CHARACTER' variables and
-arrays *only*. It does *not* apply to external `CHARACTER' functions
-or to intrinsic `CHARACTER' functions. That is, no second length
-argument is passed to `FOO' in this case:
-
- CHARACTER X
- EXTERNAL X
- CALL FOO(X)
-
-Nor does `FOO' expect such an argument in this case:
-
- SUBROUTINE FOO(X)
- CHARACTER X
- EXTERNAL X
-
- Because of this implementation detail, if a program has a bug such
-that there is disagreement as to whether an argument is a procedure,
-and the type of the argument is `CHARACTER', subtle symptoms might
-appear.
-
-
-File: g77.info, Node: Adjustable Arrays, Next: Alternate Returns, Prev: Procedures, Up: Debugging and Interfacing
-
-Adjustable Arrays (DIMENSION)
-=============================
-
- Adjustable and automatic arrays in Fortran require the implementation
-(in this case, the `g77' compiler) to "memorize" the expressions that
-dimension the arrays each time the procedure is invoked. This is so
-that subsequent changes to variables used in those expressions, made
-during execution of the procedure, do not have any effect on the
-dimensions of those arrays.
-
- For example:
-
- REAL ARRAY(5)
- DATA ARRAY/5*2/
- CALL X(ARRAY, 5)
- END
- SUBROUTINE X(A, N)
- DIMENSION A(N)
- N = 20
- PRINT *, N, A
- END
-
-Here, the implementation should, when running the program, print
-something like:
-
- 20 2. 2. 2. 2. 2.
-
-Note that this shows that while the value of `N' was successfully
-changed, the size of the `A' array remained at 5 elements.
-
- To support this, `g77' generates code that executes before any user
-code (and before the internally generated computed `GOTO' to handle
-alternate entry points, as described below) that evaluates each
-(nonconstant) expression in the list of subscripts for an array, and
-saves the result of each such evaluation to be used when determining
-the size of the array (instead of re-evaluating the expressions).
-
- So, in the above example, when `X' is first invoked, code is
-executed that copies the value of `N' to a temporary. And that same
-temporary serves as the actual high bound for the single dimension of
-the `A' array (the low bound being the constant 1). Since the user
-program cannot (legitimately) change the value of the temporary during
-execution of the procedure, the size of the array remains constant
-during each invocation.
-
- For alternate entry points, the code `g77' generates takes into
-account the possibility that a dummy adjustable array is not actually
-passed to the actual entry point being invoked at that time. In that
-case, the public procedure implementing the entry point passes to the
-master private procedure implementing all the code for the entry points
-a `NULL' pointer where a pointer to that adjustable array would be
-expected. The `g77'-generated code doesn't attempt to evaluate any of
-the expressions in the subscripts for an array if the pointer to that
-array is `NULL' at run time in such cases. (Don't depend on this
-particular implementation by writing code that purposely passes `NULL'
-pointers where the callee expects adjustable arrays, even if you know
-the callee won't reference the arrays--nor should you pass `NULL'
-pointers for any dummy arguments used in calculating the bounds of such
-arrays or leave undefined any values used for that purpose in
-COMMON--because the way `g77' implements these things might change in
-the future!)
-
-
-File: g77.info, Node: Alternate Returns, Next: Functions, Prev: Adjustable Arrays, Up: Debugging and Interfacing
-
-Alternate Returns (SUBROUTINE and RETURN)
-=========================================
-
- Subroutines with alternate returns (e.g. `SUBROUTINE X(*)' and `CALL
-X(*50)') are implemented by `g77' as functions returning the C `int'
-type. The actual alternate-return arguments are omitted from the
-calling sequence. Instead, the caller uses the return value to do a
-rough equivalent of the Fortran computed-`GOTO' statement, as in `GOTO
-(50), X()' in the example above (where `X' is quietly declared as an
-`INTEGER' function), and the callee just returns whatever integer is
-specified in the `RETURN' statement for the subroutine For example,
-`RETURN 1' is implemented as `X = 1' followed by `RETURN' in C, and
-`RETURN' by itself is `X = 0' and `RETURN').
-
-
-File: g77.info, Node: Functions, Next: Common Blocks, Prev: Alternate Returns, Up: Debugging and Interfacing
-
-Functions (FUNCTION and RETURN)
-===============================
-
- `g77' handles in a special way functions that return the following
-types:
-
- * `CHARACTER'
-
- * `COMPLEX' (and `DOUBLE COMPLEX')
-
- * `REAL'
-
- For `CHARACTER', `g77' implements a subroutine (a C function
-returning `void') with two arguments prepended: `__g77_result', which
-the caller passes as a pointer to a `char' array expected to hold the
-return value, and `__g77_length', which the caller passes as an
-`ftnlen' value specifying the length of the return value as declared in
-the calling program. For `CHARACTER'*(*), the called function uses
-`__g77_length' to determine the size of the array that `__g77_result'
-points to; otherwise, it ignores that argument.
-
- For `COMPLEX' and `DOUBLE COMPLEX', when `-ff2c' is in force, `g77'
-implements a subroutine with one argument prepended: `__g77_result',
-which the caller passes as a pointer to a variable of the type of the
-function. The called function writes the return value into this
-variable instead of returning it as a function value. When `-fno-f2c'
-is in force, `g77' implements a `COMPLEX' function as `gcc''s
-`__complex__ float' function, returning the result of the function in
-the same way as `gcc' would, and implements a `DOUBLE COMPLEX' function
-similarly.
-
- For `REAL', when `-ff2c' is in force, `g77' implements a function
-that actually returns `DOUBLE PRECISION' (usually C's `double' type).
-When `-fno-f2c' is in force, `REAL' functions return `float'.
-
-
-File: g77.info, Node: Common Blocks, Next: Local Equivalence Areas, Prev: Functions, Up: Debugging and Interfacing
-
-Common Blocks (COMMON)
-======================
-
- `g77' names and lays out `COMMON' areas the same way f2c does, for
-compatibility with f2c.
-
- Currently, `g77' does not emit any debugging information for items
-in a `COMMON' area, due to an apparent bug in the GBE.
-
- Moreover, `g77' currently implements a `COMMON' area such that its
-type is an array of the C `char' data type.
-
- So, when debugging, you must know the offset into a `COMMON' area
-for a particular item in that area, and you have to take into account
-the appropriate multiplier for the respective sizes of the types (as
-declared in your code) for the items preceding the item in question as
-compared to the size of the `char' type.
-
- For example, using default implicit typing, the statement
-
- COMMON I(15), R(20), T
-
-results in a public 144-byte `char' array named `_BLNK__' with `I'
-placed at `_BLNK__[0]', `R' at `_BLNK__[60]', and `T' at `_BLNK__[140]'.
-(This is assuming that the target machine for the compilation has
-4-byte `INTEGER' and `REAL' types.)
-
-
-File: g77.info, Node: Local Equivalence Areas, Next: Alternate Entry Points, Prev: Common Blocks, Up: Debugging and Interfacing
-
-Local Equivalence Areas (EQUIVALENCE)
-=====================================
-
- `g77' treats storage-associated areas involving a `COMMON' block as
-explained in the section on common blocks.
-
- A local `EQUIVALENCE' area is a collection of variables and arrays
-connected to each other in any way via `EQUIVALENCE', none of which are
-listed in a `COMMON' statement.
-
- Currently, `g77' does not emit any debugging information for items
-in a local `EQUIVALENCE' area, due to an apparent bug in the GBE.
-
- Moreover, `g77' implements a local `EQUIVALENCE' area such that its
-type is an array of the C `char' data type.
-
- The name `g77' gives this array of `char' type is `__g77_equiv_X',
-where X is the name of the first item listed in the `EQUIVALENCE'
-statements for that area that is placed at the beginning (offset 0) of
-this array.
-
- When debugging, you must therefore access members of `EQUIVALENCE'
-areas by specifying the appropriate `__g77_equiv_X' array section with
-the appropriate offset. See the explanation of debugging `COMMON'
-blocks for info applicable to debugging local `EQUIVALENCE' areas.
-
- (Note: `g77' version 0.5.16 fixed a bug in how certain `EQUIVALENCE'
-cases were handled. The bug caused the debugger to not know the size
-of the array if any variable or array in the `EQUIVALENCE' was given an
-initial value via `DATA' or similar.)
-
-
-File: g77.info, Node: Alternate Entry Points, Next: Assigned Statement Labels, Prev: Local Equivalence Areas, Up: Debugging and Interfacing
-
-Alternate Entry Points (ENTRY)
-==============================
-
- The GBE does not understand the general concept of alternate entry
-points as Fortran provides via the ENTRY statement. `g77' gets around
-this by using an approach to compiling procedures having at least one
-`ENTRY' statement that is almost identical to the approach used by
-`f2c'. (An alternate approach could be used that would probably
-generate faster, but larger, code that would also be a bit easier to
-debug.)
-
- Information on how `g77' implements `ENTRY' is provided for those
-trying to debug such code. The choice of implementation seems unlikely
-to affect code (compiled in other languages) that interfaces to such
-code.
-
- `g77' compiles exactly one public procedure for the primary entry
-point of a procedure plus each `ENTRY' point it specifies, as usual.
-That is, in terms of the public interface, there is no difference
-between
-
- SUBROUTINE X
- END
- SUBROUTINE Y
- END
-
-and:
-
- SUBROUTINE X
- ENTRY Y
- END
-
- The difference between the above two cases lies in the code compiled
-for the `X' and `Y' procedures themselves, plus the fact that, for the
-second case, an extra internal procedure is compiled.
-
- For every Fortran procedure with at least one `ENTRY' statement,
-`g77' compiles an extra procedure named `__g77_masterfun_X', where X is
-the name of the primary entry point (which, in the above case, using
-the standard compiler options, would be `x_' in C).
-
- This extra procedure is compiled as a private procedure--that is, a
-procedure not accessible by name to separately compiled modules. It
-contains all the code in the program unit, including the code for the
-primary entry point plus for every entry point. (The code for each
-public procedure is quite short, and explained later.)
-
- The extra procedure has some other interesting characteristics.
-
- The argument list for this procedure is invented by `g77'. It
-contains a single integer argument named `__g77_which_entrypoint',
-passed by value (as in Fortran's `%VAL()' intrinsic), specifying the
-entry point index--0 for the primary entry point, 1 for the first entry
-point (the first `ENTRY' statement encountered), 2 for the second entry
-point, and so on.
-
- It also contains, for functions returning `CHARACTER' and (when
-`-ff2c' is in effect) `COMPLEX' functions, and for functions returning
-different types among the `ENTRY' statements (e.g. `REAL FUNCTION R()'
-containing `ENTRY I()'), an argument named `__g77_result' that is
-expected at run time to contain a pointer to where to store the result
-of the entry point. For `CHARACTER' functions, this storage area is an
-array of the appropriate number of characters; for `COMPLEX' functions,
-it is the appropriate area for the return type (currently either
-`COMPLEX' or `DOUBLE COMPLEX'); for multiple- return-type functions, it
-is a union of all the supported return types (which cannot include
-`CHARACTER', since combining `CHARACTER' and non-`CHARACTER' return
-types via `ENTRY' in a single function is not supported by `g77').
-
- For `CHARACTER' functions, the `__g77_result' argument is followed
-by yet another argument named `__g77_length' that, at run time,
-specifies the caller's expected length of the returned value. Note
-that only `CHARACTER*(*)' functions and entry points actually make use
-of this argument, even though it is always passed by all callers of
-public `CHARACTER' functions (since the caller does not generally know
-whether such a function is `CHARACTER*(*)' or whether there are any
-other callers that don't have that information).
-
- The rest of the argument list is the union of all the arguments
-specified for all the entry points (in their usual forms, e.g.
-`CHARACTER' arguments have extra length arguments, all appended at the
-end of this list). This is considered the "master list" of arguments.
-
- The code for this procedure has, before the code for the first
-executable statement, code much like that for the following Fortran
-statement:
-
- GOTO (100000,100001,100002), __g77_which_entrypoint
- 100000 ...code for primary entry point...
- 100001 ...code immediately following first ENTRY statement...
- 100002 ...code immediately following second ENTRY statement...
-
-(Note that invalid Fortran statement labels and variable names are used
-in the above example to highlight the fact that it represents code
-generated by the `g77' internals, not code to be written by the user.)
-
- It is this code that, when the procedure is called, picks which
-entry point to start executing.
-
- Getting back to the public procedures (`x' and `Y' in the original
-example), those procedures are fairly simple. Their interfaces are
-just like they would be if they were self-contained procedures (without
-`ENTRY'), of course, since that is what the callers expect. Their code
-consists of simply calling the private procedure, described above, with
-the appropriate extra arguments (the entry point index, and perhaps a
-pointer to a multiple-type- return variable, local to the public
-procedure, that contains all the supported returnable non-character
-types). For arguments that are not listed for a given entry point that
-are listed for other entry points, and therefore that are in the
-"master list" for the private procedure, null pointers (in C, the
-`NULL' macro) are passed. Also, for entry points that are part of a
-multiple-type- returning function, code is compiled after the call of
-the private procedure to extract from the multi-type union the
-appropriate result, depending on the type of the entry point in
-question, returning that result to the original caller.
-
- When debugging a procedure containing alternate entry points, you
-can either set a break point on the public procedure itself (e.g. a
-break point on `X' or `Y') or on the private procedure that contains
-most of the pertinent code (e.g. `__g77_masterfun_X'). If you do the
-former, you should use the debugger's command to "step into" the called
-procedure to get to the actual code; with the latter approach, the
-break point leaves you right at the actual code, skipping over the
-public entry point and its call to the private procedure (unless you
-have set a break point there as well, of course).
-
- Further, the list of dummy arguments that is visible when the
-private procedure is active is going to be the expanded version of the
-list for whichever particular entry point is active, as explained
-above, and the way in which return values are handled might well be
-different from how they would be handled for an equivalent single-entry
-function.
-
-
-File: g77.info, Node: Assigned Statement Labels, Prev: Alternate Entry Points, Up: Debugging and Interfacing
-
-Assigned Statement Labels (ASSIGN and GOTO)
-===========================================
-
- For portability to machines where a pointer (such as to a label,
-which is how `g77' implements `ASSIGN' and its cousin, the assigned
-`GOTO') is wider (bitwise) than an `INTEGER', `g77' does not
-necessarily use the same memory location to hold the `ASSIGN'ed value
-of a variable as it does the numerical value in that variable, unless
-the variable is wide enough (can hold enough bits).
-
- In particular, while `g77' implements
-
- I = 10
-
-as, in C notation, `i = 10;', it might implement
-
- ASSIGN 10 TO I
-
-as, in GNU's extended C notation (for the label syntax),
-`__g77_ASSIGN_I = &&L10;' (where `L10' is just a massaging of the
-Fortran label `10' to make the syntax C-like; `g77' doesn't actually
-generate the name `L10' or any other name like that, since debuggers
-cannot access labels anyway).
-
- While this currently means that an `ASSIGN' statement might not
-overwrite the numeric contents of its target variable, *do not* write
-any code depending on this feature. `g77' has already changed this
-implementation across versions and might do so in the future. This
-information is provided only to make debugging Fortran programs
-compiled with the current version of `g77' somewhat easier. If there's
-no debugger-visible variable named `__g77_ASSIGN_I' in a program unit
-that does `ASSIGN 10 TO I', that probably means `g77' has decided it
-can store the pointer to the label directly into `I' itself.
-
- (Currently, `g77' always chooses to make the separate variable, to
-improve the likelihood that `-O -Wuninitialized' will diagnose failures
-to do things like `GOTO I' without `ASSIGN 10 TO I' despite doing
-`I=5'.)
-
-
-File: g77.info, Node: Collected Fortran Wisdom, Next: Trouble, Prev: Debugging and Interfacing, Up: Top
-
-Collected Fortran Wisdom
-************************
-
- Most users of `g77' can be divided into two camps:
-
- * Those writing new Fortran code to be compiled by `g77'.
-
- * Those using `g77' to compile existing, "legacy" code.
-
- Users writing new code generally understand most of the necessary
-aspects of Fortran to write "mainstream" code, but often need help
-deciding how to handle problems, such as the construction of libraries
-containing `BLOCK DATA'.
-
- Users dealing with "legacy" code sometimes don't have much
-experience with Fortran, but believe that the code they're compiling
-already works when compiled by other compilers (and might not
-understand why, as is sometimes the case, it doesn't work when compiled
-by `g77').
-
- The following information is designed to help users do a better job
-coping with existing, "legacy" Fortran code, and with writing new code
-as well.
-
-* Menu:
-
-* Overly Convenient Options:: Temptations to avoid, habits to not form.
-* Block Data and Libraries:: How `g77' solves a common problem.
-* Faster Programs:: Everybody wants these, but at what cost?
-* Working Programs:: Getting programs to work should be done first.
-* Loops:: Fortran `DO' loops surprise many people.
-* Advantages Over f2c:: If `f2c' is so great, why `g77'?
-
-
-File: g77.info, Node: Overly Convenient Options, Next: Block Data and Libraries, Up: Collected Fortran Wisdom
-
-Overly Convenient Command-line Options
-======================================
-
- These options should be used only as a quick-and-dirty way to
-determine how well your program will run under different compilation
-models without having to change the source. Some are more problematic
-than others, depending on how portable and maintainable you want the
-program to be (and, of course, whether you are allowed to change it at
-all is crucial).
-
- You should not continue to use these command-line options to compile
-a given program, but rather should make changes to the source code:
-
-`-finit-local-zero'
- (This option specifies that any uninitialized local variables and
- arrays have default initialization to binary zeros.)
-
- Many other compilers do this automatically, which means lots of
- Fortran code developed with those compilers depends on it.
-
- It is safer (and probably would produce a faster program) to find
- the variables and arrays that need such initialization and provide
- it explicitly via `DATA', so that `-finit-local-zero' is not
- needed.
-
- Consider using `-Wuninitialized' (which requires `-O') to find
- likely candidates, but do not specify `-finit-local-zero' or
- `-fno-automatic', or this technique won't work.
-
-`-fno-automatic'
- (This option specifies that all local variables and arrays are to
- be treated as if they were named in `SAVE' statements.)
-
- Many other compilers do this automatically, which means lots of
- Fortran code developed with those compilers depends on it.
-
- The effect of this is that all variables and arrays are made
- static, that is, not placed on the stack or in heap storage. This
- might cause a buggy program to appear to work better. If so,
- rather than relying on this command-line option (and hoping all
- compilers provide the equivalent one), add `SAVE' statements to
- some or all program unit sources, as appropriate. Consider using
- `-Wuninitialized' (which requires `-O') to find likely candidates,
- but do not specify `-finit-local-zero' or `-fno-automatic', or
- this technique won't work.
-
- The default is `-fautomatic', which tells `g77' to try and put
- variables and arrays on the stack (or in fast registers) where
- possible and reasonable. This tends to make programs faster.
-
-`-fugly'
- Fix the source code so that `-fno-ugly' will work. Note that, for
- many programs, it is difficult to practically avoid using the
- features enabled via `-fugly-init', and these features pose the
- lowest risk of writing nonportable code, among the various "ugly"
- features.
-
-`-fGROUP-intrinsics-hide'
- Change the source code to use `EXTERNAL' for any external procedure
- that might be the name of an intrinsic. It is easy to find these
- using `-fGROUP-intrinsics-disable'.
-
-
-File: g77.info, Node: Block Data and Libraries, Next: Faster Programs, Prev: Overly Convenient Options, Up: Collected Fortran Wisdom
-
-Block Data and Libraries
-========================
-
- To ensure that block data program units are linked, especially a
-concern when they are put into libraries, give each one a name (as in
-`BLOCK DATA FOO') and make sure there is an `EXTERNAL FOO' statement in
-every program unit that uses any common block initialized by the
-corresponding `BLOCK DATA'. `g77' currently compiles a `BLOCK DATA' as
-if it were a `SUBROUTINE', that is, it generates an actual procedure
-having the appropriate name. The procedure does nothing but return
-immediately if it happens to be called. For `EXTERNAL FOO', where
-`FOO' is not otherwise referenced in the same program unit, `g77'
-assumes there exists a `BLOCK DATA FOO' in the program and ensures that
-by generating a reference to it so the linker will make sure it is
-present. (Specifically, `g77' outputs in the data section a static
-pointer to the external name `FOO'.)
-
- The implementation `g77' currently uses to make this work is one of
-the few things not compatible with `f2c' as currently shipped. `f2c'
-currently does nothing with `EXTERNAL FOO' except issue a warning that
-`FOO' is not otherwise referenced, and for `BLOCK DATA FOO', f2c
-doesn't generate a dummy procedure with the name `FOO'. The upshot is
-that you shouldn't mix `f2c' and `g77' in this particular case. If you
-use f2c to compile `BLOCK DATA FOO', then any `g77'-compiled program
-unit that says `EXTERNAL FOO' will result in an unresolved reference
-when linked. If you do the opposite, then `FOO' might not be linked in
-under various circumstances (such as when `FOO' is in a library, or
-you're using a "clever" linker--so clever, it produces a broken program
-with little or no warning by omitting initializations of global data
-because they are contained in unreferenced procedures).
-
- The changes you make to your code to make `g77' handle this
-situation, however, appear to be a widely portable way to handle it.
-That is, many systems permit it (as they should, since the FORTRAN 77
-standard permits `EXTERNAL FOO' when `FOO' is a block data program
-unit), and of the ones that might not link `BLOCK DATA FOO' under some
-circumstances, most of them appear to do so once `EXTERNAL FOO' is
-present in the appropriate program units.
-
-
-File: g77.info, Node: Faster Programs, Next: Working Programs, Prev: Block Data and Libraries, Up: Collected Fortran Wisdom
-
-Faster Programs
-===============
-
- Aside from the usual `gcc' options, such as `-O', `-ffast-math', and
-so on, consider trying:
-
-`-fno-f2c'
- Use this if you aren't linking with any code compiled using `f2c'.
- (Note that `libf2c' is *not* an example of code that is compiled
- using `f2c'--it is compiled by a C compiler, usually `gcc'.)
-
- If you're using `-fno-automatic' already, you probably should change
-your code to allow compilation with `-fautomatic' (the default), to
-allow the program to run faster.
-
- Similarly, you should be able to use `-fno-init-local-zero' (the
-default) instead of `-finit-local-zero'. This is because it is rare
-that every variable affected by these options in a given program
-actually needs to be so affected.
-
- For example, `-fno-automatic', which effectively `SAVE's every local
-variable and array, affects even things like `DO' iteration variables,
-which rarely need to be `SAVE'd, and this often reduces run-time
-performances. Similarly, `-fno-init-local-zero' forces such variables
-to be initialized to zero--when `SAVE'd (such as when
-`-fno-automatic'), this by itself generally affects only startup time
-for a program, but when not `SAVE'd, it can slow down the procedure
-every time it is called.
-
- *Note Overly Convenient Command-Line Options: Overly Convenient
-Options, for information on the `-fno-automatic' and
-`-finit-local-zero' options and how to convert their use into selective
-changes in your own code.
-
-
-File: g77.info, Node: Working Programs, Next: Loops, Prev: Faster Programs, Up: Collected Fortran Wisdom
-
-Working Programs
-================
-
- Getting Fortran programs to work in the first place can be quite a
-challenge--even when the programs already work on other systems, or
-when using other compilers.
-
- `g77' offers some options that might be useful for tracking down
-bugs in such programs. *Note Option Summary::, for a summary of these
-and other options, and cross-references for each such option to the
-pertinent material in this manual.
-
-`-finit-local-zero'
- A program that works better when compiled with this option is
- depending on a particular system's, or compiler's, tendency to
- initialize some variables to zero. It might be worthwhile finding
- such cases and fixing them.
-
-`-fno-automatic'
- A program that works better when compiled with this option is
- depending on not having to use the `SAVE' statement as required by
- the Fortran standard. It might be worthwhile finding such cases
- and fixing them.
-
-`-Wimplicit'
- This might catch failures to properly specify the types of
- variables, arrays, and functions in the code. However, in code
- that makes heavy use of Fortran's implicit-typing facility, this
- option might produce so many warnings about cases that are
- working, it would be hard to find the one or two that represent
- bugs.
-
-`-Wunused'
- This can find bugs involving implicitly typing, sometimes more
- easily than using -Wimplicit in code that makes heavy use of
- implicit typing. An unused variable or array might indicate that
- the spelling for its declaration is different from that of its
- intended uses.
-
-`-Wuninitialized'
- This can find bugs involving uninitialized variables, which can in
- turn result from misspellings in declaration statements.
-
-`-Wsurprising'
- This can find bugs involving expression evaluation or in the way
- `DO' loops with non-integral iteration variables are handled.
- Cases found by this option might indicate a difference of
- interpretation between the author of the code involved, and a
- standard-conforming compiler such as `g77'. Such a difference
- might produce actual bugs.
-
- In any case, changing the code to explicitly do what the
- programmer might have expected it to do, so `g77' and other
- compilers are more likely to follow the programmer's expectations,
- might be worthwhile, especially if such changes make the program
- work better.
-
-`-W'
- It is possible that the "extra" warnings enabled by this option
- could expose bugs in the code.
-
-
-File: g77.info, Node: Loops, Next: Advantages Over f2c, Prev: Working Programs, Up: Collected Fortran Wisdom
-
-Loops
-=====
-
- The meaning of a `DO' loop in Fortran is precisely specified in the
-Fortran standard...and is quite different from what many programmers
-might expect.
-
- In particular, Fortran `DO' loops are implemented as if the number
-of trips through the loop is calculated *before* the loop is entered.
-
- The number of trips for a loop is calculated from the START, END,
-and INCREMENT values specified in a statement such as:
-
- DO ITER = START, END, INCREMENT
-
- The trip count is evaluated using a fairly simple formula based on
-the three values following the `=' in the statement, and it is that
-trip count that is effectively decremented during each iteration of the
-loop. If, at the beginning of an iteration of the loop, the trip count
-is zero or negative, the loop terminates. The per-loop-iteration
-modifications to ITER are not related to determining whether to
-terminate the loop.
-
- There are two important things to remember about the trip count:
-
- * It can be *negative*, in which case it is treated as if it was
- zero--meaning the loop is not executed at all.
-
- * The type used to *calculate* the trip count the same type as ITER,
- but the final calculation, and thus the type of the trip count
- itself, always is `INTEGER'.
-
- These two items mean that there are loops that cannot be written in
-straightforward fashion using the Fortran `DO'.
-
- For example, on a system with the canonical 32-bit two's-complement
-implementation of `INTEGER', the following loop will not work:
-
- DO I = -2000000000, 2000000000
-
-Although the START and END values are well within the range of
-`INTEGER', the *trip count* is not. The expected trip count is
-40000000001, which is outside the range of `INTEGER' on many systems.
-
- Instead, the above loop should be constructed this way:
-
- I = -2000000000
- DO
- IF (I .GT. 2000000000) EXIT
- ...
- I = I + 1
- END DO
-
-The simple `DO' construct and the `EXIT' statement (used to leave the
-innermost loop) are F90 features that `g77' supports.
-
- Some Fortran compilers have buggy implementations of `DO', in that
-they don't follow the standard. They implement `DO' as a
-straightforward translation to what, in C, would be a `for' statement.
-Instead of creating a temporary variable to hold the trip count as
-calculated at run time, these compilers use the iteration variable ITER
-to control whether the loop continues at each iteration.
-
- The bug in such an implementation shows up when the trip count is
-within the range of the type of ITER, but the magnitude of `ABS(END) +
-ABS(INCR)' exceeds that range. For example:
-
- DO I = 2147483600, 2147483647
-
-A loop started by the above statement will work as implemented by
-`g77', but the use, by some compilers, of a more C-like implementation
-akin to
-
- for (i = 2147483600; i <= 2147483647; ++i)
-
-produces a loop that does not terminate, because `i' can never be
-greater than 2147483647, since incrementing it beyond that value
-overflows `i', setting it to -2147483648. This is a large, negative
-number that still is less than 2147483647.
-
- Another example of unexpected behavior of `DO' involves using a
-nonintegral iteration variable ITER, such as a `REAL' or `DOUBLE
-PRECISION' variable. Consider the following program:
-
- DATA BEGIN, END, STEP /.1, .31, .007/
- DO 10 R = BEGIN, END, STEP
- IF (R .GT. END) PRINT *, R, ' .GT. ', END, '!!'
- PRINT *,R
- 10 CONTINUE
- PRINT *,'LAST = ',R
- IF (R .LE. END) PRINT *, R, ' .LE. ', END, '!!'
- END
-
-A C-like view of `DO' would hold that the two "exclamatory" `PRINT' are
-never executed. However, this is the output of running the above
-program as compiled by `g77' on a Linux ix86 system:
-
- .100000001
- .107000001
- .114
- .120999999
- ...
- .289000005
- .296000004
- .303000003
- LAST = .310000002
- .310000002 .LE. .310000002!!
-
- Note that one of the two checks in the program turned up an apparent
-violation of the programmer's expectation--yet, the loop is correctly
-implemented by `g77', in that it has 30 iterations. This trip count of
-30 is correct when evaluated using the floating-point representations
-for the BEGIN, END, and INCR values (.1, .31, .007) on Linux ix86 are
-used. On other systems, an apparently more accurate trip count of 31
-might result, but, nevertheless, `g77' is faithfully following the
-Fortran standard, and the result is not what the author of the sample
-program above apparently expected. (Such other systems might, for
-different values in the `DATA' statement, violate the other
-programmer's expectation, for example.)
-
- Due to this combination of imprecise representation of
-floating-point values and the often-misunderstood interpretation of
-`DO' by standard-conforming compilers such as `g77', use of `DO' loops
-with `REAL' or `DOUBLE PRECISION' iteration variables is not
-recommended. Such use can be caught by specifying `-Wsurprising'.
-*Note Warning Options::, for more information on this option.
-
-
-File: g77.info, Node: Advantages Over f2c, Prev: Loops, Up: Collected Fortran Wisdom
-
-Advantages Over f2c
-===================
-
- Without `f2c', `g77' would have taken much longer to do and probably
-not been as good for quite a while. Sometimes people who notice how
-much `g77' depends on, and documents encouragement to use, `f2c' ask
-why `g77' was created if `f2c' already existed.
-
- This section gives some basic answers to these questions, though it
-is not intended to be comprehensive.
-
-* Menu:
-
-* Language Extensions:: Features used by Fortran code.
-* Compiler Options:: Features helpful during development.
-* Compiler Speed:: Speed of the compilation process.
-* Program Speed:: Speed of the generated, optimized code.
-* Ease of Debugging:: Debugging ease-of-use at the source level.
-* Character and Hollerith Constants:: A byte saved is a byte earned.
-
-
-File: g77.info, Node: Language Extensions, Next: Compiler Options, Up: Advantages Over f2c
-
-Language Extensions
--------------------
-
- `g77' offers several extensions to the Fortran language that `f2c'
-doesn't.
-
- However, `f2c' offers a few that `g77' doesn't, like fairly complete
-support for `INTEGER*2'. It is expected that `g77' will offer some or
-all of these missing features at some time in the future. (Version
-0.5.18 of `g77' offers some rudimentary support for some of these
-features.)
-
-
-File: g77.info, Node: Compiler Options, Next: Compiler Speed, Prev: Language Extensions, Up: Advantages Over f2c
-
-Compiler Options
-----------------
-
- `g77' offers a whole bunch of compiler options that `f2c' doesn't.
-
- However, `f2c' offers a few that `g77' doesn't, like an option to
-generate code to check array subscripts at run time. It is expected
-that `g77' will offer some or all of these missing options at some time
-in the future.
-
-
-File: g77.info, Node: Compiler Speed, Next: Program Speed, Prev: Compiler Options, Up: Advantages Over f2c
-
-Compiler Speed
---------------
-
- Saving the steps of writing and then rereading C code is a big reason
-why `g77' should be able to compile code much faster than using `f2c'
-in conjunction with the equivalent invocation of `gcc'.
-
- However, due to `g77''s youth, lots of self-checking is still being
-performed. As a result, this improvement is as yet unrealized (though
-the potential seems to be there for quite a big speedup in the future).
-It is possible that, as of version 0.5.18, `g77' is noticably faster
-compiling many Fortran source files than using `f2c' in conjunction
-with `gcc'.
-
-
-File: g77.info, Node: Program Speed, Next: Ease of Debugging, Prev: Compiler Speed, Up: Advantages Over f2c
-
-Program Speed
--------------
-
- `g77' has the potential to better optimize code than `f2c', even
-when `gcc' is used to compile the output of `f2c', because `f2c' must
-necessarily translate Fortran into a somewhat lower-level language (C)
-that cannot preserve all the information that is potentially useful for
-optimization, while `g77' can gather, preserve, and transmit that
-information directly to the GBE.
-
- For example, `g77' implements `ASSIGN' and assigned `GOTO' using
-direct assignment of pointers to labels and direct jumps to labels,
-whereas `f2c' maps the assigned labels to integer values and then uses
-a C `switch' statement to encode the assigned `GOTO' statements.
-
- However, as is typical, theory and reality don't quite match, at
-least not in all cases, so it is still the case that `f2c' plus `gcc'
-can generate code that is faster than `g77'.
-
- It is hoped that version 0.5.18 of `g77' will offer default settings
-and options that allow for better program speed, though it is not yet
-known whether these same options, when applied to a `gcc' compilation
-of `f2c' output, will improve the speed of programs compiled using that
-method as well.
-
-
-File: g77.info, Node: Ease of Debugging, Next: Character and Hollerith Constants, Prev: Program Speed, Up: Advantages Over f2c
-
-Ease of Debugging
------------------
-
- Because `g77' compiles directly to assembler code like `gcc',
-instead of translating to an intermediate language (C) as does `f2c',
-support for debugging can be better for `g77' than `f2c'.
-
- However, although `g77' might be somewhat more "native" in terms of
-debugging support than `f2c' plus `gcc', there still are a lot of
-things "not quite right". Many of the important ones should be
-resolved in the near future.
-
- For example, `g77' doesn't have to worry about reserved names like
-`f2c' does. Given `FOR = WHILE', `f2c' must necessarily translate this
-to something *other* than `for = while;', because C reserves those
-words.
-
- However, `g77' does still uses things like an extra level of
-indirection for `ENTRY'-laden procedures--in this case, because the
-back end doesn't yet support multiple entry points.
-
- Another example is that, given
-
- COMMON A, B
- EQUIVALENCE (B, C)
-
-the `g77' user should be able to access the variables directly, by name,
-without having to traverse C-like structures and unions, while `f2c' is
-unlikely to ever offer this ability (due to limitations in the C
-language).
-
- However, due to apparent bugs in the back end, `g77' currently
-doesn't take advantage of this facility at all--it doesn't emit any
-debugging information for `COMMON' and `EQUIVALENCE' areas, other than
-information on the array of `char' it creates (and, in the case of
-local `EQUIVALENCE', names) for each such area.
-
- Yet another example is arrays. `g77' represents them to the debugger
-using the same "dimensionality" as in the source code, while `f2c' must
-necessarily convert them all to one-dimensional arrays to fit into the
-confines of the C language. However, the level of support offered by
-debuggers for interactive Fortran-style access to arrays as compiled by
-`g77' can vary widely. In some cases, it can actually be an advantage
-that `f2c' converts everything to widely supported C semantics.
-
- In fairness, `g77' could do many of the things `f2c' does to get
-things working at least as well as `f2c'--for now, the maintainers have
-tended to prefer making `g77' work the way they think it is supposed
-to, and find help improving the other products (the GBE of `gcc';
-`gdb'; and so on) to get things working properly.
-
-
-File: g77.info, Node: Character and Hollerith Constants, Prev: Ease of Debugging, Up: Advantages Over f2c
-
-Character and Hollerith Constants
----------------------------------
-
- To avoid the extensive hassle that would be needed to avoid this,
-`f2c' uses C character constants to encode character and Hollerith
-constants. That means a constant like `'HELLO'' is translated to
-`"hello"' in C, which further means that an extra null byte is present
-at the end of the constant. This null byte is superfluous.
-
- `g77' does not generate such null bytes. This represents significant
-savings of resources, such as on systems where `/dev/null' or
-`/dev/zero' represent bottlenecks in the systems' performance, because
-`g77' simply asks for fewer zeros from the operating system than `f2c'.
-
-
-File: g77.info, Node: Trouble, Next: Open Questions, Prev: Collected Fortran Wisdom, Up: Top
-
-Known Causes of Trouble with GNU Fortran
-****************************************
-
- This section describes known problems that affect users of GNU
-Fortran. Most of these are not GNU Fortran bugs per se--if they were,
-we would fix them. But the result for a user may be like the result of
-a bug.
-
- Some of these problems are due to bugs in other software, some are
-missing features that are too much work to add, and some are places
-where people's opinions differ as to what is best.
-
- Information on bugs that show up when configuring, porting, building,
-or installing `g77' is not provided here. *Note Problems Installing::.
-
- (Note that some of this portion of the manual is lifted directly
-from the `gcc' manual, with minor modifications to tailor it to users
-of `g77'. Anytime a bug seems to have more to do with the `gcc'
-portion of `g77', *Note Known Causes of Trouble with GNU CC:
-(gcc)Trouble.)
-
-* Menu:
-
-* But-bugs:: Bugs really in other programs.
-* Actual Bugs:: Bugs and misfeatures we will fix later.
-* Missing Features:: Features we already know we want to add later.
-* Disappointments:: Regrettable things we can't change.
-* Non-bugs:: Things we think are right, but some others disagree.
-* Warnings and Errors:: Which problems in your code get warnings,
- and which get errors.
-
diff --git a/gnu/usr.bin/gcc/f/g77.info-7 b/gnu/usr.bin/gcc/f/g77.info-7
deleted file mode 100644
index 04597b0ad1f..00000000000
--- a/gnu/usr.bin/gcc/f/g77.info-7
+++ /dev/null
@@ -1,1084 +0,0 @@
-This is Info file g77.info, produced by Makeinfo-1.64 from the input
-file g77.texi.
-
- This file explains how to use the GNU Fortran system.
-
- Published by the Free Software Foundation 59 Temple Place - Suite 330
-Boston, MA 02111-1307 USA
-
- Copyright (C) 1995, 1996 Free Software Foundation, Inc.
-
- Permission is granted to make and distribute verbatim copies of this
-manual provided the copyright notice and this permission notice are
-preserved on all copies.
-
- Permission is granted to copy and distribute modified versions of
-this manual under the conditions for verbatim copying, provided also
-that the sections entitled "GNU General Public License," "Funding for
-Free Software," and "Protect Your Freedom--Fight `Look And Feel'" are
-included exactly as in the original, and provided that the entire
-resulting derived work is distributed under the terms of a permission
-notice identical to this one.
-
- Permission is granted to copy and distribute translations of this
-manual into another language, under the above conditions for modified
-versions, except that the sections entitled "GNU General Public
-License," "Funding for Free Software," and "Protect Your Freedom--Fight
-`Look And Feel'", and this permission notice, may be included in
-translations approved by the Free Software Foundation instead of in the
-original English.
-
- Contributed by James Craig Burley (`burley@gnu.ai.mit.edu').
-Inspired by a first pass at translating `g77-0.5.16/f/DOC' that was
-contributed to Craig by David Ronis (`ronis@onsager.chem.mcgill.ca').
-
-
-File: g77.info, Node: But-bugs, Next: Actual Bugs, Up: Trouble
-
-Bugs Not In GNU Fortran
-=======================
-
- These are bugs to which the maintainers often have to reply, "but
-that isn't a bug in `g77'...". Some of these already are fixed in new
-versions of other software; some still need to be fixed; some are
-problems with how `g77' is installed or is being used; some just cannot
-be addressed at this time until more is known about the problem.
-
- Please don't re-report these bugs to the `g77' maintainers--if you
-must remind someone how important it is to you that the problem be
-fixed, talk to the people responsible for the other products identified
-below, but preferably only after you've tried the latest versions of
-those products. The `g77' maintainers have their hands full working on
-just fixing and improving `g77', without serving as a clearinghouse for
-all bugs that happen to affect `g77' users.
-
- *Note Collected Fortran Wisdom::, for information on behavior of
-Fortran programs, and the programs that compile them, that might be
-*thought* to indicate bugs.
-
- * On some older Linux systems, programs with common blocks larger
- than 16MB cannot be linked without some kind of error message
- being produced.
-
- This is a bug in older versions of `ld', fixed in more recent
- versions of `binutils', such as version 2.6.
-
- * There are some known problems when using `gdb' on code compiled by
- `g77'. Inadequate investigation as of the release of 0.5.16
- results in not knowing which products are the culprit, but
- `gdb-4.14' definitely crashes when, for example, an attempt is
- made to print the contents of a `COMPLEX*16' dummy array, on at
- least some Linux machines, plus some others.
-
- * On some systems, perhaps just those with out-of-date (shared?)
- libraries, unresolved-reference errors happen when linking
- `g77'-compiled programs (which should be done using `g77').
-
- If this happens to you, try appending `-lc' to the command you use
- to link the program, e.g. `g77 foo.f -lc'. `g77' already
- specifies `-lf2c -lm' when it calls the linker, but it cannot also
- specify `-lc' because not all systems have a file named `libc.a'.
-
- It is unclear at this point whether there are legitimately
- installed systems where `-lf2c -lm' is insufficient to resolve
- code produced by `g77'.
-
- * If your program doesn't link, due to unresolved references to names
- like `_main', make sure you're using the `g77' command to do the
- link, since this command ensures that the necessary libraries are
- loaded by specifying `-lf2c -lm' when it invokes the `gcc' command
- to do the actual link. (Use the `-v' option to discover more
- about what actually happens when you use the `g77' and `gcc'
- commands.)
-
- Also, try specifying `-lc' as the last item on the `g77' command
- line, because some systems need it and `g77' doesn't do it
- automatically.
-
- * Developers of Fortran code on NeXTStep (all architectures) have to
- watch out for the following problem when writing programs with
- large, statically allocated (i.e. non-stack based) data structures
- (common blocks, saved arrays).
-
- Due to the way the native loader (`/bin/ld') lays out data
- structures in virtual memory, it is very easy to create an
- executable wherein the `__DATA' segment overlaps (has addresses in
- common) with the `UNIX STACK' segment.
-
- This leads to all sorts of trouble, from the executable simply not
- executing, to bus errors. The NeXTStep command line tool
- `ebadexec' points to the problem as follows:
-
- % `/bin/ebadexec a.out'
- /bin/ebadexec: __LINKEDIT segment (truncated address = 0x3de000
- rounded size = 0x2a000) of executable file: a.out overlaps with UNIX
- STACK segment (truncated address = 0x400000 rounded size =
- 0x3c00000) of executable file: a.out
-
- (In the above case, it is the `__LINKEDIT' segment that overlaps
- the stack segment.)
-
- This can be cured by assigning the `__DATA' segment (virtual)
- addresses beyond the stack segment. A conservative estimate for
- this is from address 6000000 (hexadecimal) onwards--this has
- always worked for me [Toon Moene]:
-
- % `g77 -segaddr __DATA 6000000 test.f'
- % `ebadexec a.out'
- ebadexec: file: a.out appears to be executable
- %
-
- Browsing through `gcc/f/Makefile.in', you will find that the
- `f771' program itself also has to be linked with these flags--it
- has large statically allocated data structures. (Version 0.5.18
- reduces this somewhat, but probably not enough.)
-
- (The above item was contributed by Toon Moene
- (`toon@moene.indiv.nluug.nl').)
-
- * `g77' rejects some particularly nonportable, silent data-type
- conversions such as `LOGICAL' to `REAL' (as in `A=.FALSE.', where
- `A' is type `REAL'), that other compilers might quietly accept.
-
- Some of these conversions are accepted by `g77' when the `-fugly'
- option is specified.
-
-
-File: g77.info, Node: Actual Bugs, Next: Missing Features, Prev: But-bugs, Up: Trouble
-
-Actual Bugs We Haven't Fixed Yet
-================================
-
- This section identifies bugs that `g77' *users* might run into.
-This includes bugs that are actually in the `gcc' back end (GBE) or in
-`libf2c', because those sets of code are at least somewhat under the
-control of (and necessarily intertwined with) `g77', so it isn't worth
-separating them out.
-
- For information on bugs that might afflict people who configure,
-port, build, and install `g77', *Note Problems Installing::.
-
- * When using `-fugly', `g77' assumes an extra `%VAL(0)' argument is
- to be passed to intrinsics taking no arguments, such as `IARGC()',
- which in turn reject such a call. Although this has been worked
- around for 0.5.18 due to changes in the handling of intrinsics,
- `g77' needs to do the ugly-argument-appending trick only for
- external-function invocation, as this would probably be more
- consistent with compilers that default to using that trick.
-
- * Although `g77' generally supports `SELECT CASE', it doesn't do so
- for `CHARACTER' types. Worse, it just crashes with a barely
- servicable diagnostic. If the time can't be taken soon to finish
- implementing this feature, at least a better way of diagnosing the
- problem should be provided.
-
- * To accept a lot of fine code, `g77' needs to accept `FORMAT' and
- `ENTRY' before an `IMPLICIT NONE'.
-
- * Some crashes occur when compiling under Solaris on x86 machines.
-
- * Something about `g77''s straightforward handling of label
- references and definitions sometimes prevents the GBE from
- unrolling loops. Until this is solved, try inserting or removing
- `CONTINUE' statements as the terminal statement, using the `END DO'
- form instead, and so on.
-
- * The `g77' command itself should more faithfully process options
- the way the `gcc' command does. For example, `gcc' accepts
- abbreviated forms of long options, `g77' generally doesn't.
-
- * `g77' could use a `--help' option of some sort.
-
- * Some confusion in diagnostics concerning failing `INCLUDE'
- statements from within `INCLUDE''d or `#include''d files.
-
- * Some problems on RS/6000 regarding statement functions and/or
- `COMPLEX' arithmetic?
-
- * `g77' assumes that `INTEGER' constants range from `-2**31' to
- `2**31-1' (the range for two's-complement 32-bit values), instead
- of determining their range from the actual range of the `INTEGER'
- type for the configuration (and, someday, for the constant).
-
- Further, it generally doesn't implement the handling of constants
- very well in that it makes assumptions about the configuration
- that it no longer makes regarding variables (types).
-
- Included with this item is the fact that `g77' doesn't recognize
- that, on IEEE-754/854-compliant systems, `0./0.' should produce a
- NaN and no warning instead of the value `0.' and a warning. This
- is to be fixed in version 0.6, when `g77' will use the `gcc' back
- end's constant-handling mechanisms to replace its own.
-
- * `g77' uses way too much memory and CPU time to process large
- aggregate areas having any initialized elements.
-
- For example, `REAL A(1000000)' followed by `DATA A(1)/1/' takes up
- way too much time and space, including the size of the generated
- assembler file. This is to be mitigated somewhat in version 0.6.
-
- Version 0.5.18 improves cases like this--specifically, cases of
- *sparse* initialization that leave large, contiguous areas
- uninitialized--significantly. However, even with the
- improvements, these cases still require too much memory and CPU
- time.
-
- (Version 0.5.18 also improves cases where the initial values are
- zero to a much greater degree, so if the above example ends with
- `DATA A(1)/0/', the compile-time performance will be about as good
- as it will ever get, aside from unrelated improvements to the
- compiler.)
-
- Note that `g77' does display a warning message to notify the user
- before the compiler appears to hang. *Note Initialization of
- Large Aggregate Areas: Large Initialization, for information on
- how to change the point at which `g77' decides to issue this
- warning.
-
- * `g77' doesn't emit variable and array members of common blocks for
- use with a debugger (the `-g' command-line option). The code is
- present to do this, but doesn't work with at least one debug
- format--perhaps it works with others. And it turns out there's a
- similar bug for local equivalence areas, so that has been disabled
- as well.
-
- * When debugging, after starting up the debugger but before being
- able to see the source code for the main program unit, the user
- must currently set a breakpoint at `MAIN__' (or `MAIN___' or
- `MAIN_' if `MAIN__' doesn't exist) and run the program until it
- hits the breakpoint. At that point, the main program unit is
- activated and about to execute its first executable statement, but
- that's the state in which the debugger should start up, as is the
- case for languages like C.
-
- * `g77' currently inserts needless padding for things like `COMMON
- A,IPAD' where `A' is `CHARACTER*1' and `IPAD' is `INTEGER*4' on
- machines like x86, because the back end insists that `IPAD' be
- aligned to a 4-byte boundary, but the processor has no such
- requirement (though it's good for performance).
-
- It is possible that this is not a real bug, and could be considered
- a performance feature, but it might be important to provide the
- ability to Fortran code to specify minimum padding for aggregate
- areas such as common blocks--and, certainly, there is the
- potential, with the current setup, for interface differences in
- the way such areas are laid out between `g77' and other compilers.
-
- * RS/6000 support is not complete as of the gcc 2.6.3 back end. The
- 2.7.0 back end appears to fix this problem, or at least mitigate
- it significantly, but there is at least one known problem that is
- likely to be a code-generation bug in `gcc-2.7.0' plus
- `g77-0.5.16'. This problem shows up only when compiling the
- Fortran program with `-O'.
-
- * SGI support is known to be a bit buggy. The known problem shows
- up only when compiling the Fortran program with `-O'.
-
- * `g77' doesn't work on 64-bit configurations such as the Alpha.
- The problem is not yet adequately investigated, and some Alpha
- users are having quite a bit of success, so perhaps it depends on
- the OS and configuration of `gcc' they are using.
-
- * Maintainers of gcc report that the back end definitely has "broken"
- support for `COMPLEX' types. Based on their input, it seems many
- of the problems affect only the more-general facilities for gcc's
- `__complex__' type, such as `__complex__ int' (where the real and
- imaginary parts are integers) that GNU Fortran does not use.
-
- But there might well be some problems with the portions of
- `__complex__' support in the back end that `g77' uses to implement
- `COMPLEX' and `DOUBLE COMPLEX'. More investigation is needed, but
- bug reports are definitely welcome, since that can help speed
- investigation of problem areas.
-
- * There seem to be some problems with passing constants, and perhaps
- general expressions (other than simple variables/arrays), to
- procedures when compiling on some systems (such as i386) with
- `-fPIC', as in when compiling for ELF targets. The symptom is
- that the assembler complains about invalid opcodes. More
- investigation is needed, but the problem is almost certainly in
- the gcc back end, and it apparently occurs only when compiling
- sufficiently complicated functions *without* the `-O' option.
-
- This might be fixed in version 2.7.2 of `gcc'.
-
-
-File: g77.info, Node: Missing Features, Next: Disappointments, Prev: Actual Bugs, Up: Trouble
-
-Missing Features
-================
-
- This section lists features we know are missing from `g77', and
-which we want to add someday. (There is no priority implied in the
-ordering below.)
-
- * `g77' does not support many of the features that distinguish
- Fortran 90 (and, now, Fortran 95) from ANSI FORTRAN 77.
-
- Some Fortran 90 features are listed here, because they make sense
- to offer even to die-hard users of F77. For example, many of them
- codify various ways F77 has been extended to meet users' needs
- during its tenure, so `g77' might as well offer them as the primary
- way to meet those same needs, even if it offers compatibility with
- one or more of the ways those needs were met by other F77
- compilers in the industry.
-
- Still, many important F90 features are not listed here, because no
- attempt has been made to research each and every feature and
- assess its viability in `g77'. In the meantime, users who need
- those features must use Fortran 90 compilers anyway, and the best
- approach to adding some F90 features to GNU Fortran might well be
- to fund a comprehensive project to create GNU Fortran 95.
-
- * `g77' does not allow `REAL' and other non-integral types for
- arguments to intrinsics like `AND', `OR', and `SHIFT'.
-
- * `g77' doesn't support `INTEGER*2', `LOGICAL*1', and similar.
- Version 0.6 will provide full support for this extremely important
- set of features. In the meantime, version 0.5.18 provides
- rudimentary support for them.
-
- * `g77' rejects things other compilers accept, like `INTRINSIC
- SIN,SIN'. As time permits in the future, some of these things
- that are easy for humans to read and write and unlikely to be
- intended to mean something else will be accepted by `g77' (though
- `-fpedantic' should trigger warnings about such non-standard
- constructs).
-
- In the meantime, you might as well fix your code to be more
- standard-conforming and portable.
-
- The kind of case that is important to except from the
- recommendation to change your code is one where following good
- coding rules would force you to write non-standard code that
- nevertheless has a clear meaning.
-
- For example, when writing an `INCLUDE' file that defines a common
- block, it might be appropriate to include a `SAVE' statement for
- the common block (such as `SAVE /CBLOCK/'), so that variables
- defined in the common block retain their values even when all
- procedures declaring the common block become inactive (return to
- their callers).
-
- However, putting `SAVE' statements in an `INCLUDE' file would
- prevent otherwise standard-conforming code from also specifying
- the `SAVE' statement, by itself, to indicate that all local
- variables and arrays are to have the `SAVE' attribute.
-
- For this reason, `g77' already has been changed to allow this
- combination, because although the general problem of gratuitously
- rejecting unambiguous and "safe" constructs still exists in `g77',
- this particular construct was deemed useful enough that it was
- worth fixing `g77' for just this case.
-
- So, while there is no need to change your code to avoid using this
- particular construct, there might be other, equally appropriate
- but non-standard constructs, that you shouldn't have to stop using
- just because `g77' (or any other compiler) gratuitously rejects it.
-
- Until the general problem is solved, if you have any such
- construct you believe is worthwhile using (e.g. not just an
- arbitrary, redundant specification of an attribute), please submit
- a bug report with an explanation, so we can consider fixing `g77'
- just for cases like yours.
-
- * `g77' doesn't accept `PARAMETER I=1'. Supporting this obsolete
- form of the `PARAMETER' statement would not be particularly hard,
- as most of the parsing code is already in place and working.
-
- Until time/money is spent implementing it, you might as well fix
- your code to use the standard form, `PARAMETER (I=1)' (possibly
- needing `INTEGER I' preceding the `PARAMETER' statement as well,
- otherwise, in the obsolete form of `PARAMETER', the type of the
- variable is set from the type of the constant being assigned to
- it).
-
- * `g77' doesn't support pointers or allocatable objects. This set
- of features is probably considered just behind `INTEGER*2' and
- intrinsics in `PARAMETER' statements on the list of large,
- important things to add to `g77'.
-
- * `g77' doesn't support the I/O statements `TYPE' and `ACCEPT'.
- These are common extensions that should be easy to support, but
- also are fairly easy to work around in user code.
-
- * `g77' doesn't support `STRUCTURE', `UNION', `RECORD', `MAP'. This
- set of extensions is quite a bit lower on the list of large,
- important things to add to `g77', partly because it requires a
- great deal of work either upgrading or replacing `libf2c'.
-
- * There is no support for keywords such as `DISP='DELETE'' in the
- `OPEN', `CLOSE', and `INQUIRE' statements. These extensions are
- easy to add to `g77' itself, but require much more work on
- `libf2c'.
-
- * `g77' doesn't allow intrinsics in `PARAMETER' statements. This
- feature is considered to be absolutely vital, even though it is
- not standard-conforming, and is scheduled for version 0.6.
-
- Related to this, `g77' doesn't allow non-integral exponentiation
- in `PARAMETER' statements, such as `PARAMETER (R=2**.25)'. It is
- unlikely `g77' will ever support this feature, as doing it
- properly requires complete emulation of a target computer's
- floating-point facilities when building `g77' as a cross-compiler.
- But, if the `gcc' back end is enhanced to provide such a facility,
- `g77' will likely use that facility in implementing this feature
- soon afterwards.
-
- * `g77' doesn't support `FORMAT(I<J>)' and the like. Supporting
- this requires a significant redesign or replacement of `libf2c'.
-
- * Need option to suppress information messages (notes). `-w' does
- this but also suppresses warnings. The default should be to
- suppress info messages.
-
- * Provide some way, a la `gcc', for `g77' code to specify assembler
- code.
-
- * Support `INTEGER', `REAL', and `COMPLEX' equivalents for all
- applicable back-end-supported types (`char', `short int', `int',
- `long int', `long long int', and `long double'). This means
- providing intrinsic support, and maybe constant support (using F90
- syntax) as well, and, for most machines will result in automatic
- support of `INTEGER*1', `INTEGER*2', `INTEGER*8', and so on. This
- is scheduled for version 0.6.
-
- * Provide as the default source-line model a "pure visual" mode,
- where the interpretation of a source program in this mode can be
- accurately determined by a user looking at a traditionally
- displayed rendition of the program (assuming the user knows
- whether the program is fixed or free form).
-
- That is, assume the user cannot tell tabs from spaces and cannot
- see trailing spaces on lines, but has canonical tab stops and, for
- fixed-form source, has the ability to always know exactly where
- column 72 is.
-
- This would change the default treatment of fixed-form source to
- not treat lines with tabs as if they were infinitely long--instead,
- they would end at column 72 just as if the tabs were replaced by
- spaces in the canonical way.
-
- As part of this, provide common alternate models (Digital, `f2c',
- and so on) via command-line options. This includes allowing
- arbitrarily long lines for free-form source as well as fixed-form
- source and providing various limits and diagnostics as appropriate.
-
- * Support more general expressions to dimension arrays, such as
- array element references, function references, etc.
-
- * A `FLUSH' statement that does what many systems provide via `CALL
- FLUSH', but that supports `*' as the unit designator (same unit as
- for `PRINT').
-
- * Finish support for old-style `PARAMETER' statement (like F77
- `PARAMETER', but type of destination is set from type of source
- expression).
-
- * Character-type selector/cases for `SELECT CASE'.
-
- * Option to initialize everything not explicitly initialized to
- "weird" (machine-dependent) values, e.g. NANs, bad (non-`NULL')
- pointers, and largest-magnitude integers.
-
- * Add run-time bounds-checking of array/subscript references a la
- `f2c'.
-
- * Output labels for use by debuggers that know how to support them.
- Same with weirder things like construct names. It is not yet
- known if any debug formats or debuggers support these.
-
- * Support the POSIX standard for Fortran.
-
- * Support Digital-style lossage of virtual blanks at end of source
- line if some command-line option specified.
-
- This affects cases where a character constant is continued onto
- the next line in a fixed-form source file, as in the following
- example:
-
- 10 PRINT *,'HOW MANY
- 1 SPACES?'
-
- `g77', and many other compilers, virtually extend the continued
- line through column 72 with blanks that become part of the
- character constant, but Digital Fortran normally didn't, leaving
- only one space between `MANY' and `SPACES?' in the output of the
- above statement.
-
- Fairly recently, at least one version of Digital Fortran was
- enhanced to provide the other behavior when a command-line option
- is specified, apparently due to demand from readers of the USENET
- group `comp.lang.fortran' to offer conformance to this widespread
- practice in the industry. `g77' should return the favor by
- offering conformance to Digital's approach to handling the above
- example.
-
- * Consider a preprocessor designed specifically for Fortran to
- replace `cpp -traditional'. There are several out there worth
- evaluating, at least.
-
- * Have `-Wunused' warn about unused labels.
-
- * Warn about assigned `GOTO'/`FORMAT' usage without any `ASSIGN' to
- variable. (Actually, use of `-O -Wuninitialized' should take care
- of most of these.)
-
- * Add `-Wintrinsics' to warn about use of non-standard intrinsics
- without explicit `INTRINSIC' statements for them (to help find
- code that might fail silently when ported to another compiler).
-
- * Support `-fpedantic' more thoroughly, and use it only to generate
- warnings instead of rejecting constructs outright. Have it warn:
- if a variable that dimensions an array is not a dummy or placed
- explicitly in `COMMON' (F77 does not allow it to be placed in
- `COMMON' via `EQUIVALENCE'); if specification statements follow
- statement-function-definition statements; about all sorts of
- syntactic extensions.
-
- * Warn about modifying `DO' variables via `EQUIVALENCE'. (This test
- might be useful in setting the internal "doiter" flag for a
- variable or even array reference within a loop, since that might
- produce faster code someday.)
-
- * Add `-Wpromotions' to warn if source code appears to expect
- automatic, silent, and somewhat dangerous compiler-assisted
- conversion of `REAL' constants to `DOUBLE PRECISION' based on
- context.
-
- For example, warn about cases like this:
-
- DOUBLE PRECISION FOO
- PARAMETER (PI = 3.14159)
- FOO = PI * 3D0
-
- * Generally continue processing for warnings and recoverable (user)
- errors whenever possible--don't gratuitously make bad code.
-
- For example:
-
- INTRINSIC ZABS
- CALL FOO(ZABS)
- END
-
- When compiling the above with `-ff2c-intrinsics-disable', `g77'
- should indeed complain about passing `ZABS', but it still should
- compile, instead of rejecting the entire `CALL' statement. (Some
- of this is related to improving the compiler internals to improve
- how statements are analyzed.)
-
- * If `-fno-ugly', reject badly designed trailing-radix quoted
- (typeless) numbers, such as `'123'O'.
-
- * Add `-Wugly*', `-Wautomatic', `-Wvxt-not-f90', `-Wf90', and so on.
- These would warn about places in the user's source where
- ambiguities are found.
-
- One especially interesting case that `-Wf90' would catch is use of
- `REAL(Z)', where `Z' is `DOUBLE COMPLEX'. Apparently, traditional
- extended F77 compilers treat this as what all compilers should
- agree is `REAL(REAL(Z))', while F90 compilers are required to
- treat `REAL(Z)' as the same as `DBLE(Z)', returning a `DOUBLE
- PRECISION' result rather than a `REAL' result.
-
- * `-Wconversion' and related should flag places where non-standard
- conversions are found. Perhaps much of this would be part of
- `-Wugly*'.
-
- * Complain when list of dummies containing an adjustable dummy array
- does not also contain every variable listed in the dimension list
- of the adjustable array.
-
- Currently, `g77' does complain about a variable that dimensions an
- array but doesn't appear in any dummy list or `COMMON' area, but
- this needs to be extended to catch cases where it doesn't appear in
- every dummy list that also lists any arrays it dimensions.
-
- * Make sure things like `RETURN 2HAB' are invalid in both source
- forms (must be `RETURN (2HAB)', which probably still makes no
- sense but at least can be reliably parsed). Fixed form rejects
- it, but not free form, except in a way that is a bit difficult to
- understand.
-
- * The sort of routines usually found in the BSD-ish `libU77' should
- be provided in addition to the few utility routines in `libf2c'.
- Much of this work has already been done, and is awaiting
- integration into `g77'.
-
-
-File: g77.info, Node: Disappointments, Next: Non-bugs, Prev: Missing Features, Up: Trouble
-
-Disappointments and Misunderstandings
-=====================================
-
- These problems are perhaps regrettable, but we don't know any
-practical way around them for now.
-
- * `g77' disallows `IMPLICIT CHARACTER*(*)'. This is not
- standard-conforming, and there are some very good reasons for that.
- When I next remember any, I'll try to write them down.
-
- * `g77' doesn't allow a common block and an external procedure or
- `BLOCK DATA' to have the same name. Some systems allow this, but
- `g77' does not, to be compatible with `f2c'.
-
- `g77' could special-case the way it handles `BLOCK DATA', since it
- is not compatible with `f2c' in this particular area (necessarily,
- since `g77' offers an important feature here), but it is likely
- that such special-casing would be very annoying to people with
- programs that use `EXTERNAL FOO', with no other mention of `FOO'
- in the same program unit, to refer to external procedures, since
- the result would be that `g77' would treat these references as
- requests to force-load BLOCK DATA program units.
-
- In that case, if `g77' modified names of `BLOCK DATA' so they
- could have the same names as `COMMON', users would find that their
- programs wouldn't link because the `FOO' procedure didn't have its
- name translated the same way.
-
- (Strictly speaking, `g77' could emit a
- null-but-externally-satisfying definition of `FOO' with its name
- transformed as if it had been a `BLOCK DATA', but that probably
- invites more trouble than it's worth.)
-
- * The current external-interface design, which includes naming of
- external procedures, COMMON blocks, and the library interface, has
- various usability problems, including things like adding
- underscores where not really necessary (and preventing easier
- inter-language operability) and yet not providing complete
- namespace freedom for user C code linked with Fortran apps (due to
- the naming of functions in the library, among other things).
-
- Project GNU should at least get all this "right" for systems it
- fully controls, such as the Hurd, and provide defaults and options
- for compatibility with existing systems and interoperability with
- popular existing compilers.
-
-
-File: g77.info, Node: Non-bugs, Next: Warnings and Errors, Prev: Disappointments, Up: Trouble
-
-Certain Changes We Don't Want to Make
-=====================================
-
- This section lists changes that people frequently request, but which
-we do not make because we think GNU Fortran is better without them.
-
- * `-fno-backslash' should be the default, not `-fbackslash'.
-
- First of all, you can always specify `-fno-backslash' to turn off
- this processing.
-
- Despite not being within the spirit (though apparently within the
- letter) of the ANSI FORTRAN 77 standard, `g77' defaults to
- `-fbackslash' because that is what most UNIX `f77' commands
- default to, and apparently lots of code depends on this feature.
-
- This is a particularly troubling issue. The use of a C construct
- in the midst of Fortran code is bad enough, worse when it makes
- existing Fortran programs stop working (as happens when programs
- written for non-UNIX systems are ported to UNIX systems with
- compilers that provide the `-fbackslash' feature as the
- default--sometimes with no option to turn it off).
-
- The author of GNU Fortran wished, for reasons of linguistic
- purity, to make `-fno-backslash' the default for GNU Fortran and
- thus require users of UNIX `f77' and `f2c' to specify
- `-fbackslash' to get the UNIX behavior.
-
- However, the realization that `g77' is intended as a replacement
- for *UNIX* `f77', caused the author to choose to make `g77' as
- compatible with `f77' as feasible, which meant making `-fbackslash'
- the default.
-
- The primary focus on compatibility is at the source-code level,
- and the question became "What will users expect a replacement for
- `f77' to do, by default?" Although at least one UNIX `f77' does
- not provide `-fbackslash' as a default, it appears that, by far,
- the majority of them do, which suggests that, by far, the majority
- of code that is compiled by UNIX `f77' compilers expects
- `-fbackslash' to be the default.
-
- It is probably the case that more code exists that would *not*
- work with `-fbackslash' in force than code that requires it be in
- force.
-
- However, most of *that* code is not being compiled with `f77', and
- when it is, new build procedures (shell scripts, makefiles, and so
- on) must be set up anyway so that they work under UNIX. That
- makes a much more natural and safe opportunity for non-UNIX users
- to adapt their build procedures for `g77''s default of
- `-fbackslash' than would exist for the majority of UNIX `f77'
- users who would have to modify existing, working build procedures
- to explicitly specify `-fbackslash' if that was not the default.
-
- One suggestion has been to configure the default for `-fbackslash'
- (and perhaps other options as well) based on the configuration of
- `g77'.
-
- This is technically quite straightforward, but will be avoided
- even in cases where not configuring defaults to be dependent on a
- particular configuration greatly inconveniences some users of
- legacy code.
-
- Many users appreciate the GNU compilers because they provide an
- environment that is uniform across machines. These users would be
- inconvenienced if the compiler treated things like the format of
- the source code differently on certain machines.
-
- Occasionally users write programs intended only for a particular
- machine type. On these occasions, the users would benefit if the
- GNU Fortran compiler were to support by default the same dialect
- as the other compilers on that machine. But such applications are
- rare. And users writing a program to run on more than one type of
- machine cannot possibly benefit from this kind of compatibility.
- (This is consistent with the design goals for `gcc'. To change
- them for `g77', you must first change them for `gcc'. Do not ask
- the maintainers of `g77' to do this for you, or to disassociate
- `g77' from the widely understood, if not widely agreed-upon, goals
- for GNU compilers in general.)
-
- This is why GNU Fortran does and will treat backslashes in the same
- fashion on all types of machines (by default).
-
- Of course, users strongly concerned about portability should
- indicate explicitly in their build procedures which options are
- expected by their source code, or write source code that has as
- few such expectations as possible.
-
- For example, avoid writing code that depends on backslash (`\')
- being interpreted either way in particular, such as by starting a
- program unit with:
-
- CHARACTER BACKSL
- PARAMETER (BACKSL = '\\')
-
- Then, use concatenation of `BACKSL' anyplace a backslash is
- desired. (However, this technique does not work for Hollerith
- constants--which is good, since the only generally portable uses
- for Hollerith constants are in places where character constants
- can and should be used instead, for readability.)
-
- In this way, users can write programs which have the same meaning
- in many Fortran dialects.
-
- * `g77' does not use context to determine the types of constants or
- named constants (`PARAMETER').
-
- For example, consider the following statement:
-
- PRINT *, 3.1415926535 * 2D0
-
- `g77' will interpret the (truncated) constant `3.1415926535' as a
- `REAL', not `DOUBLE PRECISION', constant, because the suffix `D0'
- is not specified.
-
- As a result, the output of the above statement when compiled by
- `g77' will appear to have "less precision" than when compiled by
- other compilers.
-
- In these and other cases, some compilers detect the fact that a
- single-precision constant is used in a double-precision context
- and therefore interpret the single-precision constant as if it was
- *explicitly* specified as a double-precision constant. (This has
- the effect of appending *decimal*, not *binary*, zeros to the
- fractional part of the number--producing different computational
- results.)
-
- The reason this misfeature is dangerous is that a slight,
- apparently innocuous change to the source code can change the
- computational results. Consider:
-
- REAL ALMOST, CLOSE
- DOUBLE PRECISION FIVE
- PARAMETER (ALMOST = 5.000000000001)
- FIVE = 5
- CLOSE = 5.000000000001
- PRINT *, 5.000000000001 - FIVE
- PRINT *, ALMOST - FIVE
- PRINT *, CLOSE - FIVE
- END
-
- Running the above program should result in the same value being
- printed three times. With `g77' as the compiler, it does.
-
- However, compiled by many other compilers, running the above
- program would print two or three distinct values, because in two
- or three of the statements, the constant `5.000000000001', which
- on most systems is exactly equal to `5.' when interpreted as a
- single-precision constant, is instead interpreted as a
- double-precision constant, preserving the represented precision.
- However, this "clever" promotion of type does not extend to
- variables or, in some compilers, to named constants.
-
- Since programmers often are encouraged to replace manifest
- constants or permanently-assigned variables with named constants
- (`PARAMETER' in Fortran), and might need to replace some constants
- with variables having the same values for pertinent portions of
- code, it is important that compilers treat code so modified in the
- same way so that the results of such programs are the same. `g77'
- helps in this regard by treating constants just the same as
- variables in terms of determining their types in a
- context-independent way.
-
- Still, there is a lot of existing Fortran code that has been
- written to depend on the way other compilers freely interpret
- constants' types based on context, so anything `g77' can do to
- help flag cases of this in such code could be very helpful.
-
- * `g77' treats procedure references to *possible* intrinsic names as
- always enabling their intrinsic nature, regardless of whether the
- *form* of the reference is valid for that intrinsic.
-
- For example, `CALL IFIX' is interpreted by `g77' first as a
- reference to the `IFIX' intrinsic, because the reference is a
- procedure invocation (as compared to `J=IFIX'); only after
- establishing that, in the program unit being compiled, `IFIX' is
- in fact an intrinsic and not a local name that happens to have the
- same name as an intrinsic, does `g77' recognize that the form of
- the reference is invalid for that particular intrinsic. At that
- point, `g77' issues a diagnostic.
-
- Some users claim that it is "obvious" that `CALL IFIX' references
- an external subroutine of their own, not an intrinsic function.
-
- However, `g77' knows about intrinsic subroutines, not just
- functions, and is able to support both having the same names, for
- example.
-
- As a result of this, `g77' rejects calls to intrinsics that are
- not subroutines, and function invocations of intrinsics that are
- not functions, just as it (and most compilers) rejects invocations
- of intrinsics with the wrong number (or types) of arguments.
-
- Use the `EXTERNAL IFIX' statement in a program unit that calls a
- user-written subroutine named `IFIX'.
-
- * Allow `DATA VAR/.../' to come before `COMMON /.../ ...,VAR,...'.
-
- It is *possible* `g77' will someday allow this.
-
- Then again, maybe it is better to have `g77' always require
- placement of `DATA' so that it can possibly immediately write
- constants to the output file, thus saving time and space.
-
- That is, `DATA A/1000000*1/' should perhaps always be immediately
- writable to canonical assembler, unless it's already known to be
- in a `COMMON' area following as-yet-uninitialized stuff, and to do
- this it cannot be followed by `COMMON A'.
-
- * Making side effects happen in the same order as in some other
- compiler.
-
- It is never safe to depend on the order of evaluation of side
- effects. For example, an expression like this may very well
- behave differently from one compiler to another:
-
- J = IFUNC() - IFUNC()
-
- There is no guarantee that `IFUNC' will be evaluated in any
- particular order. Either invocation might happen first. If
- `IFUNC' returns 5 the first time it is invoked, and returns 12 the
- second time, `J' might end up with the value `7', or it might end
- up with `-7'.
-
- Generally, in Fortran, procedures with side-effects intended to be
- visible to the caller are best designed as *subroutines*, not
- functions. Examples of such side-effects include:
-
- * The generation of random numbers that are intended to
- influence return values.
-
- * Performing I/O (other than internal I/O to local variables).
-
- * Updating information in common blocks.
-
- An example of a side-effect that is not intended to be visible to
- the caller is a function that maintains a cache of recently
- calculated results, intended solely to speed repeated invocations
- of the function with identical arguments. Such a function can be
- safely used in expressions, because if the compiler optimizes away
- one or more calls to the function, operation of the program is
- unaffected (aside from being speeded up).
-
-
-File: g77.info, Node: Warnings and Errors, Prev: Non-bugs, Up: Trouble
-
-Warning Messages and Error Messages
-===================================
-
- The GNU compiler can produce two kinds of diagnostics: errors and
-warnings. Each kind has a different purpose:
-
- *Errors* report problems that make it impossible to compile your
- program. GNU Fortran reports errors with the source file name,
- line number, and column within the line where the problem is
- apparent.
-
- *Warnings* report other unusual conditions in your code that
- *might* indicate a problem, although compilation can (and does)
- proceed. Warning messages also report the source file name, line
- number, and column information, but include the text `warning:' to
- distinguish them from error messages.
-
- Warnings might indicate danger points where you should check to make
-sure that your program really does what you intend; or the use of
-obsolete features; or the use of nonstandard features of GNU Fortran.
-Many warnings are issued only if you ask for them, with one of the `-W'
-options (for instance, `-Wall' requests a variety of useful warnings).
-
- *Note:* Currently, the text of the line and a pointer to the column
-is printed in most `g77' diagnostics. Probably, as of version 0.6,
-`g77' will no longer print the text of the source line, instead printing
-the column number following the file name and line number in a form
-that GNU Emacs recognizes. This change is expected to speed up and
-reduce the memory usage of the `g77' compiler.
-
- *Note Options to Request or Suppress Warnings: Warning Options, for
-more detail on these and related command-line options.
-
-
-File: g77.info, Node: Open Questions, Next: Bugs, Prev: Trouble, Up: Top
-
-Open Questions
-**************
-
- Please consider offering useful answers to these questions!
-
- * `g77' treats constants like `Z'ABCD'' and `'ABCD'Z' as typeless.
- It seems like maybe the prefix-letter form, `Z'ABCD'', should be
- `INTEGER' instead.
-
- You can test for yourself whether a particular compiler treats the
- prefix form as `INTEGER' or typeless by running the following
- program:
-
- EQUIVALENCE (I, R)
- R = Z'ABCD'
- J = Z'ABCD'
- IF (J .EQ. I) PRINT *, 'Prefix form is TYPELESS'
- IF (J .NE. I) PRINT *, 'Prefix form is INTEGER'
- END
-
- If you wish to report the results of this test to the maintainers
- of `g77', please include full information on the compiler, system,
- and version information you're using. (We already know how `g77'
- handles it, of course.)
-
- Perhaps this will be changed in version 0.6.
-
- * `LOC()' and other intrinsics are probably somewhat misclassified.
- Is the a need for more precise classification of intrinsics, and
- if so, what are the appropriate groupings? Is there a need to
- individually enable/disable/delete/hide intrinsics from the
- command line?
-
-
-File: g77.info, Node: Bugs, Next: Service, Prev: Open Questions, Up: Top
-
-Reporting Bugs
-**************
-
- Your bug reports play an essential role in making GNU Fortran
-reliable.
-
- When you encounter a problem, the first thing to do is to see if it
-is already known. *Note Trouble::. If it isn't known, then you should
-report the problem.
-
- Reporting a bug might help you by bringing a solution to your
-problem, or it might not. (If it does not, look in the service
-directory; see *Note Service::.) In any case, the principal function of
-a bug report is to help the entire community by making the next version
-of GNU Fortran work better. Bug reports are your contribution to the
-maintenance of GNU Fortran.
-
- Since the maintainers are very overloaded, we cannot respond to every
-bug report. However, if the bug has not been fixed, we are likely to
-send you a patch and ask you to tell us whether it works.
-
- In order for a bug report to serve its purpose, you must include the
-information that makes for fixing the bug.
-
-* Menu:
-
-* Criteria: Bug Criteria. Have you really found a bug?
-* Where: Bug Lists. Where to send your bug report.
-* Reporting: Bug Reporting. How to report a bug effectively.
-* Patches: Sending Patches. How to send a patch for GNU Fortran.
-* Known: Trouble. Known problems.
-* Help: Service. Where to ask for help.
-
-
-File: g77.info, Node: Bug Criteria, Next: Bug Lists, Up: Bugs
-
-Have You Found a Bug?
-=====================
-
- If you are not sure whether you have found a bug, here are some
-guidelines:
-
- * If the compiler gets a fatal signal, for any input whatever, that
- is a compiler bug. Reliable compilers never crash--they just
- remain obsolete.
-
- * If the compiler produces invalid assembly code, for any input
- whatever (except an `asm' statement), that is a compiler bug,
- unless the compiler reports errors (not just warnings) which would
- ordinarily prevent the assembler from being run.
-
- * If the compiler produces valid assembly code that does not
- correctly execute the input source code, that is a compiler bug.
-
- However, you must double-check to make sure, because you might
- have run into an incompatibility between GNU Fortran and
- traditional Fortran. These incompatibilities might be considered
- bugs, but they are inescapable consequences of valuable features.
-
- Or you might have a program whose behavior is undefined, which
- happened by chance to give the desired results with another
- Fortran compiler. It is best to check the relevant Fortran
- standard thoroughly if it is possible that the program indeed does
- something undefined.
-
- After you have localized the error to a single source line, it
- should be easy to check for these things. If your program is
- correct and well defined, you have found a compiler bug.
-
- It might help if, in your submission, you identified the specific
- language in the relevant Fortran standard that specifies the
- desired behavior, if it isn't likely to be obvious and agreed-upon
- by all Fortran users.
-
- * If the compiler produces an error message for valid input, that is
- a compiler bug.
-
- * If the compiler does not produce an error message for invalid
- input, that is a compiler bug. However, you should note that your
- idea of "invalid input" might be someone else's idea of "an
- extension" or "support for traditional practice".
-
- * If you are an experienced user of Fortran compilers, your
- suggestions for improvement of GNU Fortran are welcome in any case.
-
-
-File: g77.info, Node: Bug Lists, Next: Bug Reporting, Prev: Bug Criteria, Up: Bugs
-
-Where to Report Bugs
-====================
-
- Send bug reports for GNU Fortran to `fortran@gnu.ai.mit.edu'.
-
- Often people think of posting bug reports to a newsgroup instead of
-mailing them. This sometimes appears to work, but it has one problem
-which can be crucial: a newsgroup posting does not contain a mail path
-back to the sender. Thus, if maintainers need more information, they
-may be unable to reach you. For this reason, you should always send
-bug reports by mail to the proper mailing list.
-
- As a last resort, send bug reports on paper to:
-
- GNU Compiler Bugs
- Free Software Foundation
- 59 Temple Place - Suite 330
- Boston, MA 02111-1307, USA
-
diff --git a/gnu/usr.bin/gcc/f/g77.info-8 b/gnu/usr.bin/gcc/f/g77.info-8
deleted file mode 100644
index e9b2aa50333..00000000000
--- a/gnu/usr.bin/gcc/f/g77.info-8
+++ /dev/null
@@ -1,916 +0,0 @@
-This is Info file g77.info, produced by Makeinfo-1.64 from the input
-file g77.texi.
-
- This file explains how to use the GNU Fortran system.
-
- Published by the Free Software Foundation 59 Temple Place - Suite 330
-Boston, MA 02111-1307 USA
-
- Copyright (C) 1995, 1996 Free Software Foundation, Inc.
-
- Permission is granted to make and distribute verbatim copies of this
-manual provided the copyright notice and this permission notice are
-preserved on all copies.
-
- Permission is granted to copy and distribute modified versions of
-this manual under the conditions for verbatim copying, provided also
-that the sections entitled "GNU General Public License," "Funding for
-Free Software," and "Protect Your Freedom--Fight `Look And Feel'" are
-included exactly as in the original, and provided that the entire
-resulting derived work is distributed under the terms of a permission
-notice identical to this one.
-
- Permission is granted to copy and distribute translations of this
-manual into another language, under the above conditions for modified
-versions, except that the sections entitled "GNU General Public
-License," "Funding for Free Software," and "Protect Your Freedom--Fight
-`Look And Feel'", and this permission notice, may be included in
-translations approved by the Free Software Foundation instead of in the
-original English.
-
- Contributed by James Craig Burley (`burley@gnu.ai.mit.edu').
-Inspired by a first pass at translating `g77-0.5.16/f/DOC' that was
-contributed to Craig by David Ronis (`ronis@onsager.chem.mcgill.ca').
-
-
-File: g77.info, Node: Bug Reporting, Next: Sending Patches, Prev: Bug Lists, Up: Bugs
-
-How to Report Bugs
-==================
-
- The fundamental principle of reporting bugs usefully is this:
-*report all the facts*. If you are not sure whether to state a fact or
-leave it out, state it!
-
- Often people omit facts because they think they know what causes the
-problem and they conclude that some details don't matter. Thus, you
-might assume that the name of the variable you use in an example does
-not matter. Well, probably it doesn't, but one cannot be sure.
-Perhaps the bug is a stray memory reference which happens to fetch from
-the location where that name is stored in memory; perhaps, if the name
-were different, the contents of that location would fool the compiler
-into doing the right thing despite the bug. Play it safe and give a
-specific, complete example. That is the easiest thing for you to do,
-and the most helpful.
-
- Keep in mind that the purpose of a bug report is to enable someone to
-fix the bug if it is not known. It isn't very important what happens if
-the bug is already known. Therefore, always write your bug reports on
-the assumption that the bug is not known.
-
- Sometimes people give a few sketchy facts and ask, "Does this ring a
-bell?" This cannot help us fix a bug, so it is rarely helpful. We
-respond by asking for enough details to enable us to investigate. You
-might as well expedite matters by sending them to begin with.
-(Besides, there are enough bells ringing around here as it is.)
-
- Try to make your bug report self-contained. If we have to ask you
-for more information, it is best if you include all the previous
-information in your response, as well as the information that was
-missing.
-
- Please report each bug in a separate message. This makes it easier
-for us to track which bugs have been fixed and to forward your bugs
-reports to the appropriate maintainer.
-
- Do not compress and encode any part of your bug report using programs
-such as `uuencode'. If you do so it will slow down the processing of
-your bug. If you must submit multiple large files, use `shar', which
-allows us to read your message without having to run any decompression
-programs.
-
- (As a special exception for GNU Fortran bug-reporting, at least for
-now, if you are sending more than a few lines of code, if your
-program's source file format contains "interesting" things like
-trailing spaces or strange characters, or if you need to include binary
-data files, it is acceptable to put all the files together in a `tar'
-archive, and, whether you need to do that, it is acceptable to then
-compress the single file (`tar' archive or source file) using `gzip'
-and encode it via `uuencode'. Do not use any MIME stuff--the current
-maintainer can't decode this. Using `compress' instead of `gzip' is
-acceptable, assuming you have licensed the use of the patented
-algorithm in `compress' from Unisys.)
-
- To enable someone to investigate the bug, you should include all
-these things:
-
- * The version of GNU Fortran. You can get this by running `g77'
- with the `-v' option. (Ignore any error messages that might be
- displayed when the linker is run.)
-
- Without this, we won't know whether there is any point in looking
- for the bug in the current version of GNU Fortran.
-
- * A complete input file that will reproduce the bug. If the bug is
- in the compiler proper (`f771') and you are using the C
- preprocessor, run your source file through the C preprocessor by
- doing `g77 -E SOURCEFILE > OUTFILE', then include the contents of
- OUTFILE in the bug report. (When you do this, use the same `-I',
- `-D' or `-U' options that you used in actual compilation.)
-
- A single statement is not enough of an example. In order to
- compile it, it must be embedded in a complete file of compiler
- input; and the bug might depend on the details of how this is done.
-
- Without a real example one can compile, all anyone can do about
- your bug report is wish you luck. It would be futile to try to
- guess how to provoke the bug. For example, bugs in register
- allocation and reloading frequently depend on every little detail
- of the function they happen in.
-
- * Note that you should include with your bug report any files
- included by the source file (via the `INCLUDE' statement) that you
- send, and any files they `INCLUDE', and so on.
-
- It is not necessary to replace the `INCLUDE' statements with the
- actual files in the version of the source file that you send, but
- it might make submitting the bug report easier on the ends.
- However, be sure to *reproduce* the bug using the *exact* version
- of the source material you submit, to avoid wild-goose chases.
-
- * The command arguments you gave GNU Fortran to compile that example
- and observe the bug. For example, did you use `-O'? To guarantee
- you won't omit something important, list all the options.
-
- If we were to try to guess the arguments, we would probably guess
- wrong and then we would not encounter the bug.
-
- * The type of machine you are using, and the operating system name
- and version number. (Much of this information is printed by `g77
- -v'--if you include that, send along any additional info you have
- that you don't see clearly represented in that output.)
-
- * The operands you gave to the `configure' command when you installed
- the compiler.
-
- * A complete list of any modifications you have made to the compiler
- source. (We don't promise to investigate the bug unless it
- happens in an unmodified compiler. But if you've made
- modifications and don't tell us, then you are sending us on a
- wild-goose chase.)
-
- Be precise about these changes. A description in English is not
- enough--send a context diff for them.
-
- Adding files of your own (such as a machine description for a
- machine we don't support) is a modification of the compiler source.
-
- * Details of any other deviations from the standard procedure for
- installing GNU Fortran.
-
- * A description of what behavior you observe that you believe is
- incorrect. For example, "The compiler gets a fatal signal," or,
- "The assembler instruction at line 208 in the output is incorrect."
-
- Of course, if the bug is that the compiler gets a fatal signal,
- then one can't miss it. But if the bug is incorrect output, the
- maintainer might not notice unless it is glaringly wrong. None of
- us has time to study all the assembler code from a 50-line Fortran
- program just on the chance that one instruction might be wrong.
- We need *you* to do this part!
-
- Even if the problem you experience is a fatal signal, you should
- still say so explicitly. Suppose something strange is going on,
- such as, your copy of the compiler is out of synch, or you have
- encountered a bug in the C library on your system. (This has
- happened!) Your copy might crash and the copy here would not. If
- you said to expect a crash, then when the compiler here fails to
- crash, we would know that the bug was not happening. If you don't
- say to expect a crash, then we would not know whether the bug was
- happening. We would not be able to draw any conclusion from our
- observations.
-
- If the problem is a diagnostic when building GNU Fortran with some
- other compiler, say whether it is a warning or an error.
-
- Often the observed symptom is incorrect output when your program
- is run. Sad to say, this is not enough information unless the
- program is short and simple. None of us has time to study a large
- program to figure out how it would work if compiled correctly,
- much less which line of it was compiled wrong. So you will have
- to do that. Tell us which source line it is, and what incorrect
- result happens when that line is executed. A person who
- understands the program can find this as easily as finding a bug
- in the program itself.
-
- * If you send examples of assembler code output from GNU Fortran,
- please use `-g' when you make them. The debugging information
- includes source line numbers which are essential for correlating
- the output with the input.
-
- * If you wish to mention something in the GNU Fortran source, refer
- to it by context, not by line number.
-
- The line numbers in the development sources don't match those in
- your sources. Your line numbers would convey no convenient
- information to the maintainers.
-
- * Additional information from a debugger might enable someone to
- find a problem on a machine which he does not have available.
- However, you need to think when you collect this information if
- you want it to have any chance of being useful.
-
- For example, many people send just a backtrace, but that is never
- useful by itself. A simple backtrace with arguments conveys little
- about GNU Fortran because the compiler is largely data-driven; the
- same functions are called over and over for different RTL insns,
- doing different things depending on the details of the insn.
-
- Most of the arguments listed in the backtrace are useless because
- they are pointers to RTL list structure. The numeric values of the
- pointers, which the debugger prints in the backtrace, have no
- significance whatever; all that matters is the contents of the
- objects they point to (and most of the contents are other such
- pointers).
-
- In addition, most compiler passes consist of one or more loops that
- scan the RTL insn sequence. The most vital piece of information
- about such a loop--which insn it has reached--is usually in a
- local variable, not in an argument.
-
- What you need to provide in addition to a backtrace are the values
- of the local variables for several stack frames up. When a local
- variable or an argument is an RTX, first print its value and then
- use the GDB command `pr' to print the RTL expression that it points
- to. (If GDB doesn't run on your machine, use your debugger to call
- the function `debug_rtx' with the RTX as an argument.) In
- general, whenever a variable is a pointer, its value is no use
- without the data it points to.
-
- Here are some things that are not necessary:
-
- * A description of the envelope of the bug.
-
- Often people who encounter a bug spend a lot of time investigating
- which changes to the input file will make the bug go away and which
- changes will not affect it.
-
- This is often time consuming and not very useful, because the way
- we will find the bug is by running a single example under the
- debugger with breakpoints, not by pure deduction from a series of
- examples. You might as well save your time for something else.
-
- Of course, if you can find a simpler example to report *instead* of
- the original one, that is a convenience. Errors in the output
- will be easier to spot, running under the debugger will take less
- time, etc. Most GNU Fortran bugs involve just one function, so
- the most straightforward way to simplify an example is to delete
- all the function definitions except the one where the bug occurs.
- Those earlier in the file may be replaced by external declarations
- if the crucial function depends on them. (Exception: inline
- functions may affect compilation of functions defined later in the
- file.)
-
- However, simplification is not vital; if you don't want to do this,
- report the bug anyway and send the entire test case you used.
-
- * In particular, some people insert conditionals `#ifdef BUG' around
- a statement which, if removed, makes the bug not happen. These
- are just clutter; we won't pay any attention to them anyway.
- Besides, you should send us preprocessor output, and that can't
- have conditionals.
-
- * A patch for the bug.
-
- A patch for the bug is useful if it is a good one. But don't omit
- the necessary information, such as the test case, on the
- assumption that a patch is all we need. We might see problems
- with your patch and decide to fix the problem another way, or we
- might not understand it at all.
-
- Sometimes with a program as complicated as GNU Fortran it is very
- hard to construct an example that will make the program follow a
- certain path through the code. If you don't send the example, we
- won't be able to construct one, so we won't be able to verify that
- the bug is fixed.
-
- And if we can't understand what bug you are trying to fix, or why
- your patch should be an improvement, we won't install it. A test
- case will help us to understand.
-
- *Note Sending Patches::, for guidelines on how to make it easy for
- us to understand and install your patches.
-
- * A guess about what the bug is or what it depends on.
-
- Such guesses are usually wrong. Even the maintainer can't guess
- right about such things without first using the debugger to find
- the facts.
-
- * A core dump file.
-
- We have no way of examining a core dump for your type of machine
- unless we have an identical system--and if we do have one, we
- should be able to reproduce the crash ourselves.
-
-
-File: g77.info, Node: Sending Patches, Prev: Bug Reporting, Up: Bugs
-
-Sending Patches for GNU Fortran
-===============================
-
- If you would like to write bug fixes or improvements for the GNU
-Fortran compiler, that is very helpful. Send suggested fixes to the
-bug report mailing list, `fortran@gnu.ai.mit.edu'.
-
- Please follow these guidelines so we can study your patches
-efficiently. If you don't follow these guidelines, your information
-might still be useful, but using it will take extra work. Maintaining
-GNU Fortran is a lot of work in the best of circumstances, and we can't
-keep up unless you do your best to help.
-
- * Send an explanation with your changes of what problem they fix or
- what improvement they bring about. For a bug fix, just include a
- copy of the bug report, and explain why the change fixes the bug.
-
- (Referring to a bug report is not as good as including it, because
- then we will have to look it up, and we have probably already
- deleted it if we've already fixed the bug.)
-
- * Always include a proper bug report for the problem you think you
- have fixed. We need to convince ourselves that the change is
- right before installing it. Even if it is right, we might have
- trouble judging it if we don't have a way to reproduce the problem.
-
- * Include all the comments that are appropriate to help people
- reading the source in the future understand why this change was
- needed.
-
- * Don't mix together changes made for different reasons. Send them
- *individually*.
-
- If you make two changes for separate reasons, then we might not
- want to install them both. We might want to install just one. If
- you send them all jumbled together in a single set of diffs, we
- have to do extra work to disentangle them--to figure out which
- parts of the change serve which purpose. If we don't have time
- for this, we might have to ignore your changes entirely.
-
- If you send each change as soon as you have written it, with its
- own explanation, then the two changes never get tangled up, and we
- can consider each one properly without any extra work to
- disentangle them.
-
- Ideally, each change you send should be impossible to subdivide
- into parts that we might want to consider separately, because each
- of its parts gets its motivation from the other parts.
-
- * Send each change as soon as that change is finished. Sometimes
- people think they are helping us by accumulating many changes to
- send them all together. As explained above, this is absolutely
- the worst thing you could do.
-
- Since you should send each change separately, you might as well
- send it right away. That gives us the option of installing it
- immediately if it is important.
-
- * Use `diff -c' to make your diffs. Diffs without context are hard
- for us to install reliably. More than that, they make it hard for
- us to study the diffs to decide whether we want to install them.
- Unidiff format is better than contextless diffs, but not as easy
- to read as `-c' format.
-
- If you have GNU diff, use `diff -cp', which shows the name of the
- function that each change occurs in. (The maintainer of GNU
- Fortran currently uses `diff -rcp2N'.)
-
- * Write the change log entries for your changes. We get lots of
- changes, and we don't have time to do all the change log writing
- ourselves.
-
- Read the `ChangeLog' file to see what sorts of information to put
- in, and to learn the style that we use. The purpose of the change
- log is to show people where to find what was changed. So you need
- to be specific about what functions you changed; in large
- functions, it's often helpful to indicate where within the
- function the change was.
-
- On the other hand, once you have shown people where to find the
- change, you need not explain its purpose. Thus, if you add a new
- function, all you need to say about it is that it is new. If you
- feel that the purpose needs explaining, it probably does--but the
- explanation will be much more useful if you put it in comments in
- the code.
-
- If you would like your name to appear in the header line for who
- made the change, send us the header line.
-
- * When you write the fix, keep in mind that we can't install a
- change that would break other systems.
-
- People often suggest fixing a problem by changing
- machine-independent files such as `toplev.c' to do something
- special that a particular system needs. Sometimes it is totally
- obvious that such changes would break GNU Fortran for almost all
- users. We can't possibly make a change like that. At best it
- might tell us how to write another patch that would solve the
- problem acceptably.
-
- Sometimes people send fixes that *might* be an improvement in
- general--but it is hard to be sure of this. It's hard to install
- such changes because we have to study them very carefully. Of
- course, a good explanation of the reasoning by which you concluded
- the change was correct can help convince us.
-
- The safest changes are changes to the configuration files for a
- particular machine. These are safe because they can't create new
- bugs on other machines.
-
- Please help us keep up with the workload by designing the patch in
- a form that is good to install.
-
-
-File: g77.info, Node: Service, Next: Adding Options, Prev: Bugs, Up: Top
-
-How To Get Help with GNU Fortran
-********************************
-
- If you need help installing, using or changing GNU Fortran, there
-are two ways to find it:
-
- * Look in the service directory for someone who might help you for a
- fee. The service directory is found in the file named `SERVICE'
- in the GNU CC distribution.
-
- * Send a message to `fortran@gnu.ai.mit.edu'.
-
-
-File: g77.info, Node: Adding Options, Next: Projects, Prev: Service, Up: Top
-
-Adding Options
-**************
-
- To add a new command-line option to `g77', first decide what kind of
-option you wish to add. Search the `g77' and `gcc' documentation for
-one or more options that is most closely like the one you want to add
-(in terms of what kind of effect it has, and so on) to help clarify its
-nature.
-
- * *Fortran options* are options that apply only when compiling
- Fortran programs. They are accepted by `g77' and `gcc', but they
- mean something only when these commands actually compile Fortran
- programs.
-
- * *Compiler options* are options that apply when compiling most any
- kind of program.
-
- *Fortran options* are listed in the file `gcc/f/lang-options.h',
-which is used when during the build of `gcc' to build a list of all
-options that are accepted by at last one language's compiler. This
-list goes into the `lang_options' array in `gcc/toplev.c', which uses
-this array to determine whether a particular option should be offered
-to the linked-in front end for processing by calling
-`lang_option_decode', which, for `g77', is in `gcc/f/com.c' and just
-calls `ffe_decode_option'.
-
- Even if the linked-in front end "rejects" a particular option passed
-to it, `toplev.c' just ignores the option, because *some* language's
-compiler is willing to accept it.
-
- This allows commands like `gcc -fno-asm foo.c bar.f' to work, even
-though Fortran compilation does not currently support the `-fno-asm'
-option; even though the `f771' version of `lang_decode_option' rejects
-`-fno-asm', `toplev.c' doesn't produce a diagnostic because some other
-language (C) does accept it.
-
- This also means that commands like `g77 -fno-asm foo.f' yield no
-diagnostics, despite the fact that no phase of the command was able to
-recognize and process `-fno-asm'--perhaps a warning about this would be
-helpful if it were possible.
-
- Code that processes Fortran options is found in `gcc/f/top.c',
-function `ffe_decode_option'. This code needs to check positive and
-negative forms of each option.
-
- The defaults for Fortran options are set in their global
-definitions, also found in `gcc/f/top.c'. Some of these defaults are
-actually macros defined in `gcc/f/target.h', since they might be
-machine-specific, although, in practice, GNU compilers should behave
-the same way on all configurations (especially when it comes to
-language constructs).
-
- Accessor macros for Fortran options, used by code in the `g77' FFE,
-are defined in `gcc/f/top.h'.
-
- *Compiler options* are listed in `gcc/toplev.c' in the array
-`f_options'. An option not listed in `lang_options' is looked up in
-`f_options' and handled from there.
-
- The defaults for compiler options are set in the global definitions
-for the corresponding variables, some of which are in `gcc/toplev.c'.
-
- You can set different defaults for *Fortran-oriented* or
-*Fortran-reticent* compiler options by changing the way `f771' handles
-the `-fset-g77-defaults' option, which is always provided as the first
-option when called by `g77' or `gcc'.
-
- This code is in `ffe_decode_options' in `gcc/f/top.c'. Have it
-change just the variables that you want to default to a different
-setting for Fortran compiles compared to compiles of other languages.
-
- The `-fset-g77-defaults' option is passed to `f771' automatically
-because of the specification information kept in `gcc/f/lang-specs.h'.
-This file tells the `gcc' command how to recognize, in this case,
-Fortran source files (those to be preprocessed, and those that are
-not), and further, how to invoke the appropriate programs (including
-`f771') to process those source files.
-
- It is in `gcc/f/lang-specs.h' that `-fset-g77-defaults',
-`-fversion', and other options are passed, as appropriate, even when
-the user has not explicitly specified them. Other "internal" options
-such as `-quiet' also are passed via this mechanism.
-
-
-File: g77.info, Node: Projects, Next: Index, Prev: Adding Options, Up: Top
-
-Projects
-********
-
- If you want to contribute to `g77' by doing research, design,
-specification, documentation, coding, or testing, the following
-information should give you some ideas.
-
-* Menu:
-
-* Efficiency:: Make `g77' itself compile code faster.
-* Better Optimization:: Teach `g77' to generate faster code.
-* Simplify Porting:: Make `g77' easier to configure, build,
- and install.
-* More Extensions:: Features many users won't know to ask for.
-* Machine Model:: `g77' should better leverage `gcc'.
-* Internals Documentation:: Make maintenance easier.
-* Internals Improvements:: Make internals more robust.
-* Better Diagnostics:: Make using `g77' on new code easier.
-
-
-File: g77.info, Node: Efficiency, Next: Better Optimization, Up: Projects
-
-Improve Efficiency
-==================
-
- Don't bother doing any performance analysis until most of the
-following items are taken care of, because there's no question they
-represent serious space/time problems, although some of them show up
-only given certain kinds of (popular) input.
-
- * Improve `malloc' package and its uses to specify more info about
- memory pools and, where feasible, use obstacks to implement them.
-
- * Skip over uninitialized portions of aggregate areas (arrays,
- `COMMON' areas, `EQUIVALENCE' areas) so zeros need not be output.
- This would reduce memory usage for large initialized aggregate
- areas, even ones with only one initialized element.
-
- As of version 0.5.18, a portion of this item has already been
- accomplished.
-
- * Prescan the statement (in `sta.c') so that the nature of the
- statement is determined as much as possible by looking entirely at
- its form, and not looking at any context (previous statements,
- including types of symbols). This would allow ripping out of the
- statement-confirmation, symbol retraction/confirmation, and
- diagnostic inhibition mechanisms. Plus, it would result in
- much-improved diagnostics. For example, `CALL
- some-intrinsic(...)', where the intrinsic is not a subroutine
- intrinsic, would result actual error instead of the
- unimplemented-statement catch-all.
-
- * Throughout `g77', don't pass line/column pairs where a simple
- `ffewhere' type, which points to the error as much as is desired
- by the configuration, will do, and don't pass `ffelexToken' types
- where a simple `ffewhere' type will do. Then, allow new default
- configuration of `ffewhere' such that the source line text is not
- preserved, and leave it to things like Emacs' next-error function
- to point to them (now that `next-error' supports column, or,
- perhaps, character-offset, numbers). The change in calling
- sequences should improve performance somewhat, as should not
- having to save source lines. (Whether this whole item will
- improve performance is questionable, but it should improve
- maintainability.)
-
- * Handle `DATA (A(I),I=1,1000000)/1000000*2/' more efficiently,
- especially as regards the assembly output. Some of this might
- require improving the back end, but lots of improvement in
- space/time required in `g77' itself can be fairly easily obtained
- without touching the back end. Maybe type-conversion, where
- necessary, can be speeded up as well in cases like the one shown
- (converting the `2' into `2.').
-
- * If analysis shows it to be worthwhile, optimize `lex.c'.
-
- * Consider redesigning `lex.c' to not need any feedback during
- tokenization, by keeping track of enough parse state on its own.
-
-
-File: g77.info, Node: Better Optimization, Next: Simplify Porting, Prev: Efficiency, Up: Projects
-
-Better Optimization
-===================
-
- Much of this work should be put off until after `g77' has all the
-features necessary for its widespread acceptance as a useful F77
-compiler. However, perhaps this work can be done in parallel during
-the feature-adding work.
-
- * Get the back end to produce at least as good code involving array
- references as does `f2c' plus `gcc'. (*Note:* 0.5.18, with its
- improvements to the GBE for versions 2.7.1 and 2.7.2 of `gcc',
- should succeed at doing this. Please submit any cases where `g77'
- cannot be made to generate as optimal code as `f2c' in combination
- with the same version of `gcc', but only for versions 2.7.1 and
- greater of `gcc'.)
-
- * Do the equivalent of the trick of putting `extern inline' in front
- of every function definition in `libf2c' and #include'ing the
- resulting file in `f2c'+`gcc'--that is, inline all
- run-time-library functions that are at all worth inlining. (Some
- of this has already been done, such as for integral
- exponentiation.)
-
- * When doing `CHAR_VAR = CHAR_FUNC(...)', and it's clear that types
- line up and `CHAR_VAR' is addressable or not a `VAR_DECL', make
- `CHAR_VAR', not a temporary, be the receiver for `CHAR_FUNC'.
- (This is now done for `COMPLEX' variables.)
-
- * Design and implement Fortran-specific optimizations that don't
- really belong in the back end, or where the front end needs to
- give the back end more info than it currently does.
-
- * Design and implement a new run-time library interface, with the
- code going into `libgcc' so no special linking is required to link
- Fortran programs using standard language features. This library
- would speed up lots of things, from I/O (using precompiled formats,
- doing just one, or, at most, very few, calls for arrays or array
- sections, and so on) to general computing (array/section
- implementations of various intrinsics, implementation of commonly
- performed loops that aren't likely to be optimally compiled
- otherwise, etc.).
-
- Among the important things the library would do are:
-
- * Be a one-stop-shop-type library, hence shareable and usable
- by all, in that what are now library-build-time options in
- `libf2c' would be moved at least to the `g77' compile phase,
- if not to finer grains (such as choosing how list-directed
- I/O formatting is done by default at `OPEN' time, for
- preconnected units via options or even statements in the main
- program unit, maybe even on a per-I/O basis with appropriate
- pragma-like devices).
-
- * Probably requiring the new library design, change interface to
- normally have `COMPLEX' functions return their values in the way
- `gcc' would if they were declared `__complex__ float', rather than
- using the mechanism currently used by `CHARACTER' functions
- (whereby the functions are compiled as returning void and their
- first arg is a pointer to where to store the result). (Don't
- append underscores to external names for `COMPLEX' functions in
- some cases once `g77' uses `gcc' rather than `f2c' calling
- conventions.)
-
- * Do something useful with `doiter' references where possible. For
- example, `CALL FOO(I)' cannot modify `I' if within a `DO' loop
- that uses `I' as the iteration variable, and the back end might
- find that info useful in determining whether it needs to read `I'
- back into a register after the call. (It normally has to do that,
- unless it knows `FOO' never modifies its passed-by-reference
- argument, which is rarely the case for Fortran-77 code.)
-
-
-File: g77.info, Node: Simplify Porting, Next: More Extensions, Prev: Better Optimization, Up: Projects
-
-Simplify Porting
-================
-
- Making `g77' easier to configure, port, build, and install, either
-as a single-system compiler or as a cross-compiler, would be very
-useful.
-
- * A new library (replacing `libf2c') should improve portability as
- well as produce more optimal code. Further, `g77' and the new
- library should conspire to simplify naming of externals, such as
- by removing unnecessarily added underscores, and to
- reduce/eliminate the possibility of naming conflicts, while making
- debugger more straightforward.
-
- Also, it should make multi-language applications more feasible,
- such as by providing Fortran intrinsics that get Fortran unit
- numbers given C `FILE *' descriptors.
-
- * Possibly related to a new library, `g77' should produce the
- equivalent of a `gcc' `main(argc, argv)' function when it compiles
- a main program unit, instead of compiling something that must be
- called by a library implementation of `main()'.
-
- This would do many useful things such as provide more flexibility
- in terms of setting up exception handling, not requiring
- programmers to start their debugging sessions with `breakpoint
- MAIN__' followed by `run', and so on.
-
- * The GBE needs to understand the difference between alignment
- requirements and desires. For example, on Intel x86 machines,
- `g77' currently imposes overly strict alignment requirements, due
- to the back end, but it would be useful for Fortran and C
- programmers to be able to override these *recommendations* as long
- as they don't violate the actual processor *requirements*.
-
-
-File: g77.info, Node: More Extensions, Next: Machine Model, Prev: Simplify Porting, Up: Projects
-
-More Extensions
-===============
-
- These extensions are not the sort of things users ask for "by name",
-but they might improve the usability of `g77', and Fortran in general,
-in the long run. Some of these items really pertain to improving `g77'
-internals so that some popular extensions can be more easily supported.
-
- * Consider adding a `NUMERIC' type to designate typeless numeric
- constants, named and unnamed. The idea is to provide a
- forward-looking, effective replacement for things like the
- old-style `PARAMETER' statement when people really need
- typelessness in a maintainable, portable, clearly documented way.
- Maybe `TYPELESS' would include `CHARACTER', `POINTER', and
- whatever else might come along. (This is not really a call for
- polymorphism per se, just an ability to express limited, syntactic
- polymorphism.)
-
- * Support `OPEN(...,KEY=(...),...)'.
-
- * `OPEN(NOSPANBLOCKS,...)' is treated as
- `OPEN(UNIT=NOSPANBLOCKS,...)', so a later `UNIT=' in the first
- example is invalid. Make sure this is what users of this feature
- would expect.
-
- * Currently `g77' disallows `READ(1'10)' since it is an obnoxious
- syntax, but supporting it might be pretty easy if needed. More
- details are needed, such as whether general expressions separated
- by an apostrophe are supported, or maybe the record number can be
- a general expression, and so on.
-
- * Support `STRUCTURE', `UNION', `MAP', and `RECORD' fully.
- Currently there is no support at all for `%FILL' in `STRUCTURE'
- and related syntax, whereas the rest of the stuff has at least
- some parsing support. This requires either major changes to
- `libf2c' or its replacement.
-
- * F90 and `g77' probably disagree about label scoping relative to
- `INTERFACE' and `END INTERFACE', and their contained procedure
- interface bodies (blocks?).
-
- * `ENTRY' doesn't support F90 `RESULT()' yet, since that was added
- after S8.112.
-
- * Empty-statement handling (10 ;;CONTINUE;;) probably isn't
- consistent with the final form of the standard (it was vague at
- S8.112).
-
- * It seems to be an "open" question whether a file, immediately
- after being `OPEN'ed,is positioned at the beginning, the end, or
- wherever--it might be nice to offer an option of opening to
- "undefined" status, requiring an explicit absolute-positioning
- operation to be performed before any other (besides `CLOSE') to
- assist in making applications port to systems (some IBM?) that
- `OPEN' to the end of a file or some such thing.
-
-
-File: g77.info, Node: Machine Model, Next: Internals Documentation, Prev: More Extensions, Up: Projects
-
-Machine Model
-=============
-
- This items pertain to generalizing `g77''s view of the machine model
-to more fully accept whatever the GBE provides it via its configuration.
-
- * Switch to using `REAL_VALUE_TYPE' to represent floating-point
- constants exclusively so the target float format need not be
- required. This means changing the way `g77' handles
- initialization of aggregate areas having more than one type, such
- as `REAL' and `INTEGER', because currently it initializes them as
- if they were arrays of `char' and uses the bit patterns of the
- constants of the various types in them to determine what to stuff
- in elements of the arrays.
-
- * Rely more and more on back-end info and capabilities, especially
- in the area of constants (where having the `g77' front-end's IL
- just store the appropriate tree nodes containing constants might
- be best).
-
- * Suite of C and Fortran programs that a user/administrator can run
- on a machine to help determine the configuration for `g77' before
- building and help determine if the compiler works (especially with
- whatever libraries are installed) after building.
-
-
-File: g77.info, Node: Internals Documentation, Next: Internals Improvements, Prev: Machine Model, Up: Projects
-
-Internals Documentation
-=======================
-
- Better info on how `g77' works and how to port it is needed.
-
-
-File: g77.info, Node: Internals Improvements, Next: Better Diagnostics, Prev: Internals Documentation, Up: Projects
-
-Internals Improvements
-======================
-
- Some more items that would make `g77' more reliable and easier to
-maintain:
-
- * Generally make expression handling focus more on critical syntax
- stuff, leaving semantics to callers. For example, anything a
- caller can check, semantically, let it do so, rather than having
- `expr.c' do it. (Exceptions might include things like diagnosing
- `FOO(I--K:)=BAR' where `FOO' is a `PARAMETER'--if it seems
- important to preserve the left-to-right-in-source order of
- production of diagnostics.)
-
- * Come up with better naming conventions for `-D' to establish
- requirements to achieve desired implementation dialect via
- `proj.h'.
-
- * Clean up used tokens and `ffewhere's in `ffeglobal_terminate_1'.
-
- * Replace `sta.c' `outpooldisp' mechanism with `malloc_pool_use'.
-
- * Check for `opANY' in more places in `com.c', `std.c', and `ste.c',
- and get rid of the `opCONVERT(opANY)' kludge (after determining if
- there is indeed no real need for it).
-
- * Utility to read and check `bad.def' messages and their references
- in the code, to make sure calls are consistent with message
- templates.
-
- * Search and fix `&ffe...' and similar so that `ffe...ptr...' macros
- are available instead (a good argument for wishing this could have
- written all this stuff in C++, perhaps). On the other hand, it's
- questionable whether this sort of improvement is really necessary,
- given the availability of tools such as Emacs and perl, which
- making finding any address-taking of structure members easy enough?
-
- * Some modules truly export the member names of their structures
- (and the structures themselves), maybe fix this, and fix other
- modules that just appear to as well (by appending `_', though it'd
- be ugly and probably not worth the time).
-
- * Implement C macros `RETURNS(value)' and `SETS(something,value)' in
- `proj.h' and use them throughout `g77' source code (especially in
- the definitions of access macros in `.h' files) so they can be
- tailored to catch code writing into a `RETURNS()' or reading from
- a `SETS()'.
-
- * Decorate throughout with `const' and other such stuff.
-
- * All F90 notational derivations in the source code are still based
- on the S8.112 version of the draft standard. Probably should
- update to the official standard, or put documentation of the rules
- as used in the code...uh...in the code.
-
- * Some `ffebld_new' calls (those outside of `ffeexpr.c' or inside
- but invoked via paths not involving `ffeexpr_lhs' or
- `ffeexpr_rhs') might be creating things in improper pools, leading
- to such things staying around too long or (doubtful, but possible
- and dangerous) not long enough.
-
- * Some `ffebld_list_new' (or whatever) calls might not be matched by
- `ffebld_list_bottom' (or whatever) calls, which might someday
- matter. (It definitely is not a problem just yet.)
-
- * Probably not doing clean things when we fail to `EQUIVALENCE'
- something due to alignment/mismatch or other problems--they end up
- without `ffestorag' objects, so maybe the backend (and other parts
- of the front end) can notice that and handle like an `opANY' (do
- what it wants, just don't complain or crash). Most of this seems
- to have been addressed by now, but a code review wouldn't hurt.
-
-
-File: g77.info, Node: Better Diagnostics, Prev: Internals Improvements, Up: Projects
-
-Better Diagnostics
-==================
-
- These are things users might not ask about, or that need to be
-looked into, before worrying about. Also here are items that involve
-reducing unnecessary diagnostic clutter.
-
- * Implement non-F90 messages (especially avoid mentioning F90 things
- `g77' doesn't yet support). Much of this has been done as of
- 0.5.14.
-
- * When `FUNCTION' and `ENTRY' point types disagree (`CHARACTER'
- lengths, type classes, and so on), `ANY'-ize the offending `ENTRY'
- point and any *new* dummies it specifies.
-
- * Speed up and improve error handling for data when repeat-count is
- specified. For example, don't output 20 unnecessary messages
- after the first necessary one for:
-
- INTEGER X(20)
- CONTINUE
- DATA (X(I), J= 1, 20) /20*5/
- END
-
- (The `CONTINUE' statement ensures the `DATA' statement is
- processed in the context of executable, not specification,
- statements.)
-
diff --git a/gnu/usr.bin/gcc/f/g77.info-9 b/gnu/usr.bin/gcc/f/g77.info-9
deleted file mode 100644
index 261b8e4b87b..00000000000
--- a/gnu/usr.bin/gcc/f/g77.info-9
+++ /dev/null
@@ -1,938 +0,0 @@
-This is Info file g77.info, produced by Makeinfo-1.64 from the input
-file g77.texi.
-
- This file explains how to use the GNU Fortran system.
-
- Published by the Free Software Foundation 59 Temple Place - Suite 330
-Boston, MA 02111-1307 USA
-
- Copyright (C) 1995, 1996 Free Software Foundation, Inc.
-
- Permission is granted to make and distribute verbatim copies of this
-manual provided the copyright notice and this permission notice are
-preserved on all copies.
-
- Permission is granted to copy and distribute modified versions of
-this manual under the conditions for verbatim copying, provided also
-that the sections entitled "GNU General Public License," "Funding for
-Free Software," and "Protect Your Freedom--Fight `Look And Feel'" are
-included exactly as in the original, and provided that the entire
-resulting derived work is distributed under the terms of a permission
-notice identical to this one.
-
- Permission is granted to copy and distribute translations of this
-manual into another language, under the above conditions for modified
-versions, except that the sections entitled "GNU General Public
-License," "Funding for Free Software," and "Protect Your Freedom--Fight
-`Look And Feel'", and this permission notice, may be included in
-translations approved by the Free Software Foundation instead of in the
-original English.
-
- Contributed by James Craig Burley (`burley@gnu.ai.mit.edu').
-Inspired by a first pass at translating `g77-0.5.16/f/DOC' that was
-contributed to Craig by David Ronis (`ronis@onsager.chem.mcgill.ca').
-
-
-File: g77.info, Node: Index, Prev: Projects, Up: Top
-
-Index
-*****
-
-* Menu:
-
-* #define: Overall Options.
-* #if: Overall Options.
-* #include: Overall Options.
-* %DESCR() intrinsic <1>: Extensions.
-* %DESCR() intrinsic: Changes.
-* %LOC() intrinsic: Extensions.
-* %REF() intrinsic: Extensions.
-* %VAL() intrinsic: Extensions.
-* *N notation: Types.
-* --driver option <1>: Invoking G77.
-* --driver option: G77 and GCC.
-* -fGROUP-intrinsics-hide option: Overly Convenient Options.
-* -fcaller-saves option: Optimize Options.
-* -fcase-initcap option: Fortran Dialect Options.
-* -fcase-lower option: Fortran Dialect Options.
-* -fcase-preserve option: Fortran Dialect Options.
-* -fcase-strict-lower option: Fortran Dialect Options.
-* -fcase-strict-upper option: Fortran Dialect Options.
-* -fcase-upper option: Fortran Dialect Options.
-* -fdcp-intrinsics-delete option: Fortran Dialect Options.
-* -fdcp-intrinsics-disable option: Fortran Dialect Options.
-* -fdcp-intrinsics-enable option: Fortran Dialect Options.
-* -fdcp-intrinsics-hide option: Fortran Dialect Options.
-* -fdelayed-branch option: Optimize Options.
-* -fdollar-ok option: Fortran Dialect Options.
-* -fexpensive-optimizations option: Optimize Options.
-* -ff2c-intrinsics-delete option: Fortran Dialect Options.
-* -ff2c-intrinsics-disable option: Fortran Dialect Options.
-* -ff2c-intrinsics-enable option: Fortran Dialect Options.
-* -ff2c-intrinsics-hide option: Fortran Dialect Options.
-* -ff2c-library option: Code Gen Options.
-* -ff90 option: Fortran Dialect Options.
-* -ff90-intrinsics-delete option: Fortran Dialect Options.
-* -ff90-intrinsics-disable option: Fortran Dialect Options.
-* -ff90-intrinsics-enable option: Fortran Dialect Options.
-* -ff90-intrinsics-hide option: Fortran Dialect Options.
-* -ff90-not-vxt option: Fortran Dialect Options.
-* -ffast-math option: Optimize Options.
-* -ffixed-line-length-N option: Fortran Dialect Options.
-* -ffloat-store option: Optimize Options.
-* -fforce-addr option: Optimize Options.
-* -fforce-mem option: Optimize Options.
-* -ffree-form option: Fortran Dialect Options.
-* -finit-local-zero option <1>: Overly Convenient Options.
-* -finit-local-zero option: Code Gen Options.
-* -fintrin-case-any option: Fortran Dialect Options.
-* -fintrin-case-initcap option: Fortran Dialect Options.
-* -fintrin-case-lower option: Fortran Dialect Options.
-* -fintrin-case-upper option: Fortran Dialect Options.
-* -fmatch-case-any option: Fortran Dialect Options.
-* -fmatch-case-initcap option: Fortran Dialect Options.
-* -fmatch-case-lower option: Fortran Dialect Options.
-* -fmatch-case-upper option: Fortran Dialect Options.
-* -fmil-intrinsics-delete option: Fortran Dialect Options.
-* -fmil-intrinsics-disable option: Fortran Dialect Options.
-* -fmil-intrinsics-enable option: Fortran Dialect Options.
-* -fmil-intrinsics-hide option: Fortran Dialect Options.
-* -fno-automatic option <1>: Overly Convenient Options.
-* -fno-automatic option: Code Gen Options.
-* -fno-backslash option: Fortran Dialect Options.
-* -fno-common option: Code Gen Options.
-* -fno-f2c option <1>: Faster Programs.
-* -fno-f2c option: Code Gen Options.
-* -fno-fixed-form option: Fortran Dialect Options.
-* -fno-ident option: Code Gen Options.
-* -fno-inline option: Optimize Options.
-* -fno-second-underscore option: Code Gen Options.
-* -fno-ugly-args option: Warning Options.
-* -fno-ugly-init option: Warning Options.
-* -fno-underscoring option: Code Gen Options.
-* -fpack-struct option: Code Gen Options.
-* -fpcc-struct-return option: Code Gen Options.
-* -fpedantic option: Warning Options.
-* -fPIC option: Actual Bugs.
-* -freg-struct-return option: Code Gen Options.
-* -frerun-cse-after-loop option: Optimize Options.
-* -fschedule-insns option: Optimize Options.
-* -fschedule-insns2 option: Optimize Options.
-* -fset-g77-defaults option: Overall Options.
-* -fshort-double option: Code Gen Options.
-* -fsource-case-lower option: Fortran Dialect Options.
-* -fsource-case-preserve option: Fortran Dialect Options.
-* -fsource-case-upper option: Fortran Dialect Options.
-* -fstrength-reduce option: Optimize Options.
-* -fsymbol-case-any option: Fortran Dialect Options.
-* -fsymbol-case-initcap option: Fortran Dialect Options.
-* -fsymbol-case-lower option: Fortran Dialect Options.
-* -fsymbol-case-upper option: Fortran Dialect Options.
-* -fsyntax-only option: Warning Options.
-* -fugly option <1>: Actual Bugs.
-* -fugly option <2>: Overly Convenient Options.
-* -fugly option: Warning Options.
-* -funix-intrinsics-delete option: Fortran Dialect Options.
-* -funix-intrinsics-disable option: Fortran Dialect Options.
-* -funix-intrinsics-enable option: Fortran Dialect Options.
-* -funix-intrinsics-hide option: Fortran Dialect Options.
-* -funroll-all-loops option: Optimize Options.
-* -funroll-loops option: Optimize Options.
-* -fversion option: Overall Options.
-* -fvxt-intrinsics-delete option: Fortran Dialect Options.
-* -fvxt-intrinsics-disable option: Fortran Dialect Options.
-* -fvxt-intrinsics-enable option: Fortran Dialect Options.
-* -fvxt-intrinsics-hide option: Fortran Dialect Options.
-* -fvxt-not-f90 option: Fortran Dialect Options.
-* -fzeros option: Code Gen Options.
-* -g option: Debugging Options.
-* -I- option: Directory Options.
-* -Idir option: Directory Options.
-* -pedantic option: Warning Options.
-* -pedantic-errors option: Warning Options.
-* -u option: Warning Options.
-* -v option: G77 and GCC.
-* -w option: Warning Options.
-* -Waggregate-return option: Warning Options.
-* -Wall option: Warning Options.
-* -Wcomment option: Warning Options.
-* -Wconversion option: Warning Options.
-* -Werror option: Warning Options.
-* -Wformat option: Warning Options.
-* -Wid-clash-LEN option: Warning Options.
-* -Wimplicit option: Warning Options.
-* -Wlarger-than-LEN option: Warning Options.
-* -Wparentheses option: Warning Options.
-* -Wredundant-decls option: Warning Options.
-* -Wshadow option: Warning Options.
-* -Wsurprising option: Warning Options.
-* -Wswitch option: Warning Options.
-* -Wtraditional option: Warning Options.
-* -Wuninitialized option: Warning Options.
-* -Wunused option: Warning Options.
-* .F: Overall Options.
-* .fpp: Overall Options.
-* /WARNINGS=DECLARATIONS switch: Warning Options.
-* 64-bit systems: Alpha Problems.
-* bison: Missing bison?.
-* g77, installation of: Installation of Binaries.
-* gcc versions supported by g77: Merging Distributions.
-* gcc, installation of: Installation of Binaries.
-* gdb support: But-bugs.
-* makeinfo: Missing makeinfo?.
-* _strtoul: General Problems.
-* ABORT() intrinsic: Fortran Dialect Options.
-* ACCEPT statement: Missing Features.
-* adding options: Adding Options.
-* adjustable arrays: Adjustable Arrays.
-* aggregate initialization: Large Initialization.
-* all warnings: Warning Options.
-* Alpha support: Actual Bugs.
-* Alpha, bugs: Alpha Problems.
-* alternate entry points: Alternate Entry Points.
-* alternate returns: Alternate Returns.
-* AND intrinsic: Missing Features.
-* ANSI FORTRAN 77 support: Standard Support.
-* arguments, unused: Warning Options.
-* array ordering: Arrays.
-* arrays: Arrays.
-* arrays, adjustable: Adjustable Arrays.
-* arrays, automatic: Adjustable Arrays.
-* arrays, dimensioning: Adjustable Arrays.
-* as command: What is GNU Fortran?.
-* assembler: What is GNU Fortran?.
-* assembly code: What is GNU Fortran?.
-* assembly code, invalid: Bug Criteria.
-* ASSIGN statement: Assigned Statement Labels.
-* assigned statement labels: Assigned Statement Labels.
-* automatic arrays: Adjustable Arrays.
-* back end, gcc: What is GNU Fortran?.
-* backslash <1>: Non-bugs.
-* backslash: Fortran Dialect Options.
-* backtrace for bug reports: Bug Reporting.
-* basic concepts: What is GNU Fortran?.
-* beginners: Getting Started.
-* binaries, distributing: Distributing Binaries.
-* bit patterns: Floating-point Bit Patterns.
-* block data: Disappointments.
-* block data and libraries: Block Data and Libraries.
-* BLOCK DATA statement <1>: Disappointments.
-* BLOCK DATA statement: Block Data and Libraries.
-* bootstrap build: Bootstrap Build.
-* bug criteria: Bug Criteria.
-* bug report mailing lists: Bug Lists.
-* bugs <1>: Bugs.
-* bugs: What is GNU Fortran?.
-* bugs, known: Trouble.
-* build, bootstrap: Bootstrap Build.
-* build, straight: Straight Build.
-* building g77: Building gcc.
-* building gcc: Building gcc.
-* but-bugs: But-bugs.
-* C preprocessor: Overall Options.
-* C routines calling Fortran: Debugging and Interfacing.
-* calling C routines: Debugging and Interfacing.
-* card image: Fortran Dialect Options.
-* carriage returns: Source Form.
-* case sensitivity: Case Sensitivity.
-* cc1 program: What is GNU Fortran?.
-* cc1plus program: What is GNU Fortran?.
-* changes, user-visible: Changes.
-* character constants <1>: Character and Hollerith Constants.
-* character constants <2>: Distensions.
-* character constants <3>: Dialects.
-* character constants: Fortran Dialect Options.
-* character set: Fortran Dialect Options.
-* characters, comment: Dialects.
-* characters, continuation: Dialects.
-* CLOSE statement: Missing Features.
-* code generation conventions: Code Gen Options.
-* code generation, improving: Better Optimization.
-* code generator: What is GNU Fortran?.
-* code, assembly: What is GNU Fortran?.
-* code, displaying main source: Actual Bugs.
-* code, distributing: Distributing Binaries.
-* code, in-line: What is GNU Fortran?.
-* code, legacy: Collected Fortran Wisdom.
-* code, machine: What is GNU Fortran?.
-* code, modifying: Unpacking.
-* code, object: Object Compatibility.
-* code, source <1>: Unpacking.
-* code, source <2>: Case Sensitivity.
-* code, source <3>: Source Form.
-* code, source: What is GNU Fortran?.
-* code, stack variables: Maximum Stackable Size.
-* code, user: But-bugs.
-* code, writing: Collected Fortran Wisdom.
-* column-major ordering: Arrays.
-* command options: Invoking G77.
-* commands, as: What is GNU Fortran?.
-* commands, f77: Installing f77.
-* commands, g77 <1>: G77 and GCC.
-* commands, g77: What is GNU Fortran?.
-* commands, gcc <1>: G77 and GCC.
-* commands, gcc: What is GNU Fortran?.
-* commands, gdb: What is GNU Fortran?.
-* commands, ld: What is GNU Fortran?.
-* comment character: Dialects.
-* common blocks <1>: Actual Bugs.
-* common blocks: Common Blocks.
-* COMMON blocks: Debugging Options.
-* common blocks, large: But-bugs.
-* COMMON statement <1>: Disappointments.
-* COMMON statement: Common Blocks.
-* compatibility <1>: Faster Programs.
-* compatibility <2>: Block Data and Libraries.
-* compatibility: Object Compatibility.
-* compatibility, f2c: Code Gen Options.
-* compilation, in-line: Optimize Options.
-* compilation, pedantic: Pedantic Compilation.
-* compiler bugs, reporting: Bug Reporting.
-* compiler memory usage: Actual Bugs.
-* compiler speed: Actual Bugs.
-* compilers: What is GNU Fortran?.
-* compilers, compatibility: Object Compatibility.
-* compiling programs: G77 and GCC.
-* COMPLEX intrinsics: Fortran Dialect Options.
-* COMPLEX support: Actual Bugs.
-* COMPLEX type: Types.
-* components of g77: What is GNU Fortran?.
-* concepts, basic: What is GNU Fortran?.
-* conformance, IEEE: Optimize Options.
-* constants: Constants.
-* constants, character <1>: Character and Hollerith Constants.
-* constants, character <2>: Distensions.
-* constants, character: Dialects.
-* constants, Hollerith <1>: Character and Hollerith Constants.
-* constants, Hollerith <2>: Distensions.
-* constants, Hollerith: Changes.
-* constants, integer: Actual Bugs.
-* constants, octal: Dialects.
-* constants, typeless: Changes.
-* continuation character: Dialects.
-* contributors: Contributors.
-* core dump: Bug Criteria.
-* cpp preprocessor: Overall Options.
-* cpp program <1>: Bug Reporting.
-* cpp program <2>: Preprocessor Options.
-* cpp program <3>: Overall Options.
-* cpp program: What is GNU Fortran?.
-* Cray pointers: Missing Features.
-* creating patch files: Merging Distributions.
-* credits: Contributors.
-* cross-compilation: Cross-compiler Problems.
-* cross-compiler, building: Floating-point Bit Patterns.
-* DATA statement <1>: Actual Bugs.
-* DATA statement: Code Gen Options.
-* data types: Types.
-* debug_rtx: Bug Reporting.
-* debugger: What is GNU Fortran?.
-* debugging <1>: Actual Bugs.
-* debugging <2>: Main Program Unit.
-* debugging: Debugging and Interfacing.
-* debugging information options: Debugging Options.
-* debugging main source code: Actual Bugs.
-* deleted intrinsics: Intrinsics.
-* diagnostics, incorrect: What is GNU Fortran?.
-* dialect options: Fortran Dialect Options.
-* dialects of language: Dialects.
-* Digital Fortran features: Fortran Dialect Options.
-* DIMENSION statement <1>: Adjustable Arrays.
-* DIMENSION statement: Arrays.
-* dimensioning arrays: Adjustable Arrays.
-* directory options: Directory Options.
-* directory search paths for inclusion: Directory Options.
-* directory, updating info: Updating Documentation.
-* disabled intrinsics: Intrinsics.
-* displaying main source code: Actual Bugs.
-* disposition of files: Missing Features.
-* distensions: Distensions.
-* distributions, unpacking: Unpacking.
-* distributions, why separate: Merging Distributions.
-* DO statement <1>: Loops.
-* DO statement: Warning Options.
-* documentation: Updating Documentation.
-* dollar sign: Fortran Dialect Options.
-* DOUBLE COMPLEX type: Types.
-* DOUBLE PRECISION type: Types.
-* double quotes: Dialects.
-* driver, gcc command as: What is GNU Fortran?.
-* dummies, unused: Warning Options.
-* effecting IMPLICIT NONE: Warning Options.
-* efficiency: Efficiency.
-* ELF support: Actual Bugs.
-* enabled intrinsics: Intrinsics.
-* entry points: Alternate Entry Points.
-* ENTRY statement: Alternate Entry Points.
-* environment variables: Environment Variables.
-* equivalence areas <1>: Actual Bugs.
-* equivalence areas: Local Equivalence Areas.
-* EQUIVALENCE areas: Debugging Options.
-* EQUIVALENCE statement: Local Equivalence Areas.
-* error messages: Warnings and Errors.
-* error messages, incorrect: What is GNU Fortran?.
-* errors, linker: But-bugs.
-* exclamation points: Dialects.
-* executable file: What is GNU Fortran?.
-* EXIT() intrinsic: Fortran Dialect Options.
-* extended-source option: Fortran Dialect Options.
-* extensions: Extensions.
-* extensions, file name: Overall Options.
-* extensions, more: More Extensions.
-* extensions, VXT: Dialects.
-* extra warnings: Warning Options.
-* f2c compatibility <1>: Faster Programs.
-* f2c compatibility <2>: Block Data and Libraries.
-* f2c compatibility <3>: Debugging and Interfacing.
-* f2c compatibility <4>: Object Compatibility.
-* f2c compatibility: Code Gen Options.
-* f2c intrinsics: Fortran Dialect Options.
-* F2C_INSTALL_FLAG: Installing f2c.
-* F2CLIBOK: Installing f2c.
-* f77 command: Installing f77.
-* f77 support: Non-bugs.
-* f771 program: What is GNU Fortran?.
-* f771, linking error for: General Problems.
-* F77_INSTALL_FLAG: Installing f77.
-* fatal signal: Bug Criteria.
-* features, ugly <1>: Distensions.
-* features, ugly: Warning Options.
-* FFE: What is GNU Fortran?.
-* FFECOM_sizeMAXSTACKITEM: Maximum Stackable Size.
-* file format not recognized: What is GNU Fortran?.
-* file name extension: Overall Options.
-* file name suffix: Overall Options.
-* file type: Overall Options.
-* file, source: What is GNU Fortran?.
-* files, executable: What is GNU Fortran?.
-* files, source: Source Form.
-* fixed form <1>: Source Form.
-* fixed form: Fortran Dialect Options.
-* fixed-form line length: Fortran Dialect Options.
-* floating-point bit patterns: Floating-point Bit Patterns.
-* FLUSH() intrinsic: Fortran Dialect Options.
-* FORMAT statement: Missing Features.
-* Fortran 90 features <1>: Dialects.
-* Fortran 90 features: Fortran Dialect Options.
-* Fortran 90 intrinsics: Fortran Dialect Options.
-* Fortran 90 support: Missing Features.
-* Fortran preprocessor: Overall Options.
-* free form <1>: Source Form.
-* free form: Fortran Dialect Options.
-* front end, g77: What is GNU Fortran?.
-* FSF, funding the: Funding GNU Fortran.
-* FUNCTION statement <1>: Functions.
-* FUNCTION statement: Procedures.
-* functions: Functions.
-* functions, intrinsic: Fortran Dialect Options.
-* funding improvements: Funding GNU Fortran.
-* funding the FSF: Funding GNU Fortran.
-* g77 command <1>: G77 and GCC.
-* g77 command: What is GNU Fortran?.
-* g77 front end: What is GNU Fortran?.
-* g77 options, -driver: G77 and GCC.
-* g77 options, -v: G77 and GCC.
-* g77 options, driver: Invoking G77.
-* g77, components of: What is GNU Fortran?.
-* GBE <1>: General Problems.
-* GBE: What is GNU Fortran?.
-* gcc back end: What is GNU Fortran?.
-* gcc command <1>: G77 and GCC.
-* gcc command: What is GNU Fortran?.
-* gcc command as driver: What is GNU Fortran?.
-* gcc not recognizing Fortran source: What is GNU Fortran?.
-* gdb command: What is GNU Fortran?.
-* GETARG() intrinsic: Main Program Unit.
-* getting started: Getting Started.
-* GNU Back End (GBE): What is GNU Fortran?.
-* GNU C required: General Problems.
-* GNU Fortran command options: Invoking G77.
-* GNU Fortran Front End (FFE): What is GNU Fortran?.
-* GOTO statement: Assigned Statement Labels.
-* groups of intrinsics: Intrinsics.
-* hidden intrinsics: Intrinsics.
-* Hollerith constants <1>: Character and Hollerith Constants.
-* Hollerith constants <2>: Distensions.
-* Hollerith constants <3>: Changes.
-* Hollerith constants: Fortran Dialect Options.
-* IARGC() intrinsic: Main Program Unit.
-* IEEE conformance: Optimize Options.
-* IMPLICIT CHARACTER*(*) statement: Disappointments.
-* implicit declaration, warning: Warning Options.
-* IMPLICIT NONE, similar effect: Warning Options.
-* improvements, funding: Funding GNU Fortran.
-* in-line code: What is GNU Fortran?.
-* in-line compilation: Optimize Options.
-* INCLUDE statement <1>: Bug Reporting.
-* INCLUDE statement <2>: Directory Options.
-* INCLUDE statement: Preprocessor Options.
-* included files: Bug Reporting.
-* inclusion, directory search paths for: Directory Options.
-* incorrect diagnostics: What is GNU Fortran?.
-* incorrect error messages: What is GNU Fortran?.
-* incorrect use of language: What is GNU Fortran?.
-* info, updating directory: Updating Documentation.
-* initialization: Actual Bugs.
-* initialization of local variables: Code Gen Options.
-* INQUIRE statement: Missing Features.
-* installation of binaries: Installation of Binaries.
-* installation problems: Problems Installing.
-* installation trouble: Trouble.
-* installing GNU Fortran: Installation.
-* installing, checking before: Pre-installation Checks.
-* integer constants: Actual Bugs.
-* INTEGER type: Types.
-* INTEGER*2 support: Missing Features.
-* interfacing: Debugging and Interfacing.
-* intrinsic functions: Fortran Dialect Options.
-* intrinsic subroutines: Fortran Dialect Options.
-* intrinsics, %DESCR() <1>: Extensions.
-* intrinsics, %DESCR(): Changes.
-* intrinsics, %LOC(): Extensions.
-* intrinsics, %REF(): Extensions.
-* intrinsics, %VAL(): Extensions.
-* intrinsics, ABORT(): Fortran Dialect Options.
-* intrinsics, AND: Missing Features.
-* intrinsics, COMPLEX: Fortran Dialect Options.
-* intrinsics, deleted: Intrinsics.
-* intrinsics, disabled: Intrinsics.
-* intrinsics, enabled: Intrinsics.
-* intrinsics, EXIT(): Fortran Dialect Options.
-* intrinsics, f2c: Fortran Dialect Options.
-* intrinsics, FLUSH(): Fortran Dialect Options.
-* intrinsics, Fortran 90: Fortran Dialect Options.
-* intrinsics, GETARG(): Main Program Unit.
-* intrinsics, groups: Intrinsics.
-* intrinsics, groups of: Intrinsics.
-* intrinsics, hidden: Intrinsics.
-* intrinsics, IARGC(): Main Program Unit.
-* intrinsics, LOC(): Extensions.
-* intrinsics, MIL-STD 1753: Fortran Dialect Options.
-* intrinsics, OR: Missing Features.
-* intrinsics, SHIFT: Missing Features.
-* intrinsics, side effects of: Fortran Dialect Options.
-* intrinsics, SIGNAL(): Fortran Dialect Options.
-* intrinsics, SYSTEM(): Fortran Dialect Options.
-* intrinsics, UNIX: Fortran Dialect Options.
-* intrinsics, VXT: Fortran Dialect Options.
-* Introduction: Top.
-* invalid assembly code: Bug Criteria.
-* invalid input: Bug Criteria.
-* KIND= notation: Types.
-* known causes of trouble: Trouble.
-* language dialect options: Fortran Dialect Options.
-* language dialects: Dialects.
-* language extensions: Extensions.
-* language, incorrect use of: What is GNU Fortran?.
-* LANGUAGES: Building gcc.
-* large aggregate areas: Actual Bugs.
-* large common blocks: But-bugs.
-* large initialization: Large Initialization.
-* ld can't find _main: But-bugs.
-* ld can't find _strtoul: General Problems.
-* ld can't find strange names: But-bugs.
-* ld command: What is GNU Fortran?.
-* ld error for f771: General Problems.
-* ld error for user code: But-bugs.
-* ld errors: But-bugs.
-* legacy code: Collected Fortran Wisdom.
-* length of source lines: Fortran Dialect Options.
-* letters, lowercase: Case Sensitivity.
-* letters, uppercase: Case Sensitivity.
-* libf2c library: What is GNU Fortran?.
-* libraries: What is GNU Fortran?.
-* libraries, containing BLOCK DATA: Block Data and Libraries.
-* libraries, libf2c: What is GNU Fortran?.
-* line length: Fortran Dialect Options.
-* linker errors: But-bugs.
-* linking: What is GNU Fortran?.
-* linking error for f771: General Problems.
-* linking error for user code: But-bugs.
-* LOC() intrinsic: Extensions.
-* local equivalence areas <1>: Actual Bugs.
-* local equivalence areas: Local Equivalence Areas.
-* LOGICAL type: Types.
-* LOGICAL*1 support: Missing Features.
-* loops, speeding up: Optimize Options.
-* loops, unrolling: Optimize Options.
-* lowercase letters: Case Sensitivity.
-* machine code: What is GNU Fortran?.
-* main program unit, debugging: Main Program Unit.
-* main(): Main Program Unit.
-* MAIN__(): Main Program Unit.
-* MAP statement: Missing Features.
-* maximum stackable size: Maximum Stackable Size.
-* memory usage, of compiler: Actual Bugs.
-* memory utilization: Large Initialization.
-* merging distributions: Merging Distributions.
-* messages, warning: Warning Options.
-* messages, warning and error: Warnings and Errors.
-* MIL-STD 1753: Fortran Dialect Options.
-* missing bison: Missing bison?.
-* missing makeinfo: Missing makeinfo?.
-* missing debug features: Debugging Options.
-* mistakes: What is GNU Fortran?.
-* modifying g77: Unpacking.
-* NAMELIST statement: Extensions.
-* naming conflicts: Disappointments.
-* native compiler: Installing f77.
-* negative forms of options: Invoking G77.
-* new users: Getting Started.
-* newbies: Getting Started.
-* null byte, trailing: Character and Hollerith Constants.
-* number of trips: Loops.
-* object code: Object Compatibility.
-* octal constants: Dialects.
-* OPEN statement: Missing Features.
-* optimization, better: Better Optimization.
-* optimizations, Pentium: Unpacking.
-* optimize options: Optimize Options.
-* options to control warnings: Warning Options.
-* options, -driver <1>: Invoking G77.
-* options, -driver: G77 and GCC.
-* options, -fGROUP-intrinsics-hide: Overly Convenient Options.
-* options, -fcaller-saves: Optimize Options.
-* options, -fcase-initcap: Fortran Dialect Options.
-* options, -fcase-lower: Fortran Dialect Options.
-* options, -fcase-preserve: Fortran Dialect Options.
-* options, -fcase-strict-lower: Fortran Dialect Options.
-* options, -fcase-strict-upper: Fortran Dialect Options.
-* options, -fcase-upper: Fortran Dialect Options.
-* options, -fdcp-intrinsics-delete: Fortran Dialect Options.
-* options, -fdcp-intrinsics-disable: Fortran Dialect Options.
-* options, -fdcp-intrinsics-enable: Fortran Dialect Options.
-* options, -fdcp-intrinsics-hide: Fortran Dialect Options.
-* options, -fdelayed-branch: Optimize Options.
-* options, -fdollar-ok: Fortran Dialect Options.
-* options, -fexpensive-optimizations: Optimize Options.
-* options, -ff2c-intrinsics-delete: Fortran Dialect Options.
-* options, -ff2c-intrinsics-disable: Fortran Dialect Options.
-* options, -ff2c-intrinsics-enable: Fortran Dialect Options.
-* options, -ff2c-intrinsics-hide: Fortran Dialect Options.
-* options, -ff2c-library: Code Gen Options.
-* options, -ff90: Fortran Dialect Options.
-* options, -ff90-intrinsics-delete: Fortran Dialect Options.
-* options, -ff90-intrinsics-disable: Fortran Dialect Options.
-* options, -ff90-intrinsics-enable: Fortran Dialect Options.
-* options, -ff90-intrinsics-hide: Fortran Dialect Options.
-* options, -ff90-not-vxt: Fortran Dialect Options.
-* options, -ffast-math: Optimize Options.
-* options, -ffixed-line-length-N: Fortran Dialect Options.
-* options, -ffloat-store: Optimize Options.
-* options, -fforce-addr: Optimize Options.
-* options, -fforce-mem: Optimize Options.
-* options, -ffree-form: Fortran Dialect Options.
-* options, -finit-local-zero <1>: Overly Convenient Options.
-* options, -finit-local-zero: Code Gen Options.
-* options, -fintrin-case-any: Fortran Dialect Options.
-* options, -fintrin-case-initcap: Fortran Dialect Options.
-* options, -fintrin-case-lower: Fortran Dialect Options.
-* options, -fintrin-case-upper: Fortran Dialect Options.
-* options, -fmatch-case-any: Fortran Dialect Options.
-* options, -fmatch-case-initcap: Fortran Dialect Options.
-* options, -fmatch-case-lower: Fortran Dialect Options.
-* options, -fmatch-case-upper: Fortran Dialect Options.
-* options, -fmil-intrinsics-delete: Fortran Dialect Options.
-* options, -fmil-intrinsics-disable: Fortran Dialect Options.
-* options, -fmil-intrinsics-enable: Fortran Dialect Options.
-* options, -fmil-intrinsics-hide: Fortran Dialect Options.
-* options, -fno-automatic <1>: Overly Convenient Options.
-* options, -fno-automatic: Code Gen Options.
-* options, -fno-backslash: Fortran Dialect Options.
-* options, -fno-common: Code Gen Options.
-* options, -fno-f2c <1>: Faster Programs.
-* options, -fno-f2c: Code Gen Options.
-* options, -fno-fixed-form: Fortran Dialect Options.
-* options, -fno-ident: Code Gen Options.
-* options, -fno-inline: Optimize Options.
-* options, -fno-second-underscore: Code Gen Options.
-* options, -fno-ugly-args: Warning Options.
-* options, -fno-ugly-init: Warning Options.
-* options, -fno-underscoring: Code Gen Options.
-* options, -fpack-struct: Code Gen Options.
-* options, -fpcc-struct-return: Code Gen Options.
-* options, -fpedantic: Warning Options.
-* options, -fPIC: Actual Bugs.
-* options, -freg-struct-return: Code Gen Options.
-* options, -frerun-cse-after-loop: Optimize Options.
-* options, -fschedule-insns: Optimize Options.
-* options, -fschedule-insns2: Optimize Options.
-* options, -fset-g77-defaults: Overall Options.
-* options, -fshort-double: Code Gen Options.
-* options, -fsource-case-lower: Fortran Dialect Options.
-* options, -fsource-case-preserve: Fortran Dialect Options.
-* options, -fsource-case-upper: Fortran Dialect Options.
-* options, -fstrength-reduce: Optimize Options.
-* options, -fsymbol-case-any: Fortran Dialect Options.
-* options, -fsymbol-case-initcap: Fortran Dialect Options.
-* options, -fsymbol-case-lower: Fortran Dialect Options.
-* options, -fsymbol-case-upper: Fortran Dialect Options.
-* options, -fsyntax-only: Warning Options.
-* options, -fugly <1>: Actual Bugs.
-* options, -fugly <2>: Overly Convenient Options.
-* options, -fugly: Warning Options.
-* options, -funix-intrinsics-delete: Fortran Dialect Options.
-* options, -funix-intrinsics-disable: Fortran Dialect Options.
-* options, -funix-intrinsics-enable: Fortran Dialect Options.
-* options, -funix-intrinsics-hide: Fortran Dialect Options.
-* options, -funroll-all-loops: Optimize Options.
-* options, -funroll-loops: Optimize Options.
-* options, -fversion: Overall Options.
-* options, -fvxt-intrinsics-delete: Fortran Dialect Options.
-* options, -fvxt-intrinsics-disable: Fortran Dialect Options.
-* options, -fvxt-intrinsics-enable: Fortran Dialect Options.
-* options, -fvxt-intrinsics-hide: Fortran Dialect Options.
-* options, -fvxt-not-f90: Fortran Dialect Options.
-* options, -fzeros: Code Gen Options.
-* options, -g: Debugging Options.
-* options, -I-: Directory Options.
-* options, -Idir: Directory Options.
-* options, -pedantic: Warning Options.
-* options, -pedantic-errors: Warning Options.
-* options, -v: G77 and GCC.
-* options, -w: Warning Options.
-* options, -Waggregate-return: Warning Options.
-* options, -Wall: Warning Options.
-* options, -Wcomment: Warning Options.
-* options, -Wconversion: Warning Options.
-* options, -Werror: Warning Options.
-* options, -Wformat: Warning Options.
-* options, -Wid-clash-LEN: Warning Options.
-* options, -Wimplicit: Warning Options.
-* options, -Wlarger-than-LEN: Warning Options.
-* options, -Wparentheses: Warning Options.
-* options, -Wredundant-decls: Warning Options.
-* options, -Wshadow: Warning Options.
-* options, -Wsurprising: Warning Options.
-* options, -Wswitch: Warning Options.
-* options, -Wtraditional: Warning Options.
-* options, -Wuninitialized: Warning Options.
-* options, -Wunused: Warning Options.
-* options, adding: Adding Options.
-* options, code generation: Code Gen Options.
-* options, debugging: Debugging Options.
-* options, dialect: Fortran Dialect Options.
-* options, directory search: Directory Options.
-* options, GNU Fortran command: Invoking G77.
-* options, negative forms: Invoking G77.
-* options, optimization: Optimize Options.
-* options, overall: Overall Options.
-* options, overly convenient: Overly Convenient Options.
-* options, preprocessor: Preprocessor Options.
-* OR intrinsic: Missing Features.
-* order of evaluation, side effects: Non-bugs.
-* ordering, array: Arrays.
-* overall options: Overall Options.
-* overflow: Warning Options.
-* overly convenient options: Overly Convenient Options.
-* packages: Unpacking.
-* padding: Actual Bugs.
-* PARAMETER statement: Missing Features.
-* parameters, unused: Warning Options.
-* patch files: General Problems.
-* patch files, creating: Merging Distributions.
-* pedantic compilation: Pedantic Compilation.
-* Pentium optimizations: Unpacking.
-* POINTER statement: Missing Features.
-* porting, simplify: Simplify Porting.
-* pre-installation checks: Pre-installation Checks.
-* preprocessor <1>: Bug Reporting.
-* preprocessor <2>: Overall Options.
-* preprocessor: What is GNU Fortran?.
-* preprocessor options: Preprocessor Options.
-* prerequisites: Prerequisites.
-* printing main source: Actual Bugs.
-* printing version information <1>: Overall Options.
-* printing version information: What is GNU Fortran?.
-* problems installing: Problems Installing.
-* procedures: Procedures.
-* PROGRAM statement: Main Program Unit.
-* programs, cc1: What is GNU Fortran?.
-* programs, cc1plus: What is GNU Fortran?.
-* programs, compiling: G77 and GCC.
-* programs, cpp <1>: Bug Reporting.
-* programs, cpp <2>: Preprocessor Options.
-* programs, cpp <3>: Overall Options.
-* programs, cpp: What is GNU Fortran?.
-* programs, f771: What is GNU Fortran?.
-* programs, speeding up: Faster Programs.
-* projects: Projects.
-* questionable instructions: What is GNU Fortran?.
-* quick start: Quick Start.
-* REAL type: Types.
-* recent versions <1>: Changes.
-* recent versions: News.
-* RECORD statement: Missing Features.
-* reporting bugs: Bugs.
-* requirements, GNU C: General Problems.
-* RETURN statement <1>: Functions.
-* RETURN statement: Alternate Returns.
-* return type of functions: Functions.
-* row-major ordering: Arrays.
-* RS/6000 support: Actual Bugs.
-* run-time library: What is GNU Fortran?.
-* run-time options: Code Gen Options.
-* SAVE statement: Code Gen Options.
-* search path: Directory Options.
-* searching for included files: Directory Options.
-* semicolons: Extensions.
-* separate distributions: Merging Distributions.
-* SGI support: Actual Bugs.
-* SHIFT intrinsic: Missing Features.
-* side effects: Fortran Dialect Options.
-* side effects, order of evaluation: Non-bugs.
-* SIGNAL() intrinsic: Fortran Dialect Options.
-* signature of procedures: Procedures.
-* simplify porting: Simplify Porting.
-* slow compiler: Large Initialization.
-* source code <1>: Unpacking.
-* source code <2>: Case Sensitivity.
-* source code <3>: Source Form.
-* source code: What is GNU Fortran?.
-* source file: What is GNU Fortran?.
-* source file form: Fortran Dialect Options.
-* source file format <1>: Case Sensitivity.
-* source file format <2>: Source Form.
-* source file format: Fortran Dialect Options.
-* source form: Source Form.
-* source tree: Unpacking.
-* speed, compiler: Large Initialization.
-* speed, of compiler: Actual Bugs.
-* speeding up loops: Optimize Options.
-* speeding up programs: Faster Programs.
-* standard support: Standard Support.
-* statement labels, assigned: Assigned Statement Labels.
-* statements, ACCEPT: Missing Features.
-* statements, ASSIGN: Assigned Statement Labels.
-* statements, BLOCK DATA <1>: Disappointments.
-* statements, BLOCK DATA: Block Data and Libraries.
-* statements, CLOSE: Missing Features.
-* statements, COMMON <1>: Disappointments.
-* statements, COMMON: Common Blocks.
-* statements, DATA <1>: Actual Bugs.
-* statements, DATA: Code Gen Options.
-* statements, DIMENSION <1>: Adjustable Arrays.
-* statements, DIMENSION: Arrays.
-* statements, DO <1>: Loops.
-* statements, DO: Warning Options.
-* statements, ENTRY: Alternate Entry Points.
-* statements, EQUIVALENCE: Local Equivalence Areas.
-* statements, FORMAT: Missing Features.
-* statements, FUNCTION <1>: Functions.
-* statements, FUNCTION: Procedures.
-* statements, GOTO: Assigned Statement Labels.
-* statements, IMPLICIT CHARACTER*(*): Disappointments.
-* statements, INCLUDE <1>: Bug Reporting.
-* statements, INCLUDE <2>: Directory Options.
-* statements, INCLUDE: Preprocessor Options.
-* statements, INQUIRE: Missing Features.
-* statements, MAP: Missing Features.
-* statements, NAMELIST: Extensions.
-* statements, OPEN: Missing Features.
-* statements, PARAMETER: Missing Features.
-* statements, POINTER: Missing Features.
-* statements, PROGRAM: Main Program Unit.
-* statements, RECORD: Missing Features.
-* statements, RETURN <1>: Functions.
-* statements, RETURN: Alternate Returns.
-* statements, SAVE: Code Gen Options.
-* statements, separated by semicolon: Extensions.
-* statements, STRUCTURE: Missing Features.
-* statements, SUBROUTINE <1>: Alternate Returns.
-* statements, SUBROUTINE: Procedures.
-* statements, TYPE <1>: Missing Features.
-* statements, TYPE: Dialects.
-* statements, UNION: Missing Features.
-* straight build: Straight Build.
-* STRUCTURE statement: Missing Features.
-* structures: Actual Bugs.
-* SUBROUTINE statement <1>: Alternate Returns.
-* SUBROUTINE statement: Procedures.
-* subroutines: Alternate Returns.
-* subroutines, intrinsic: Fortran Dialect Options.
-* suffixes, file name: Overall Options.
-* support for gcc versions: Merging Distributions.
-* support for ANSI FORTRAN 77: Standard Support.
-* support, gdb: But-bugs.
-* support, Alpha: Actual Bugs.
-* support, COMPLEX: Actual Bugs.
-* support, ELF: Actual Bugs.
-* support, f77: Non-bugs.
-* support, Fortran 90: Missing Features.
-* support, RS/6000: Actual Bugs.
-* support, SGI: Actual Bugs.
-* suppressing warnings: Warning Options.
-* symbol names <1>: Names.
-* symbol names: Fortran Dialect Options.
-* symbol names, transforming: Code Gen Options.
-* symbol names, underscores: Code Gen Options.
-* syntax checking: Warning Options.
-* SYSTEM() intrinsic: Fortran Dialect Options.
-* tab characters: Source Form.
-* texinfo: Updating Documentation.
-* trailing null byte: Character and Hollerith Constants.
-* transformation of symbol names: Names.
-* transforming symbol names: Code Gen Options.
-* translation of user programs: What is GNU Fortran?.
-* trips, number of: Loops.
-* TYPE statement <1>: Missing Features.
-* TYPE statement: Dialects.
-* typeless constants: Changes.
-* types, COMPLEX: Types.
-* types, constants: Constants.
-* types, DOUBLE COMPLEX: Types.
-* types, DOUBLE PRECISION: Types.
-* types, file: Overall Options.
-* types, INTEGER: Types.
-* types, LOGICAL: Types.
-* types, of data: Types.
-* types, REAL: Types.
-* ugly features <1>: Distensions.
-* ugly features: Warning Options.
-* undefined behavior: Bug Criteria.
-* undefined function value: Bug Criteria.
-* undefined reference (_main): But-bugs.
-* undefined reference (_strtoul): General Problems.
-* underscores: Code Gen Options.
-* uninitialized variables <1>: Code Gen Options.
-* uninitialized variables: Warning Options.
-* UNION statement: Missing Features.
-* UNIX intrinsics: Fortran Dialect Options.
-* unpacking distributions: Unpacking.
-* unrecognized file format: What is GNU Fortran?.
-* unresolved reference (various): But-bugs.
-* unrolling loops: Optimize Options.
-* unsupported warnings: Warning Options.
-* unused arguments: Warning Options.
-* unused dummies: Warning Options.
-* unused parameters: Warning Options.
-* unused variables: Warning Options.
-* updating info directory: Updating Documentation.
-* uppercase letters: Case Sensitivity.
-* user-visible changes: Changes.
-* variables, initialization of: Code Gen Options.
-* variables, uninitialized <1>: Code Gen Options.
-* variables, uninitialized: Warning Options.
-* variables, unused: Warning Options.
-* version information, printing <1>: Overall Options.
-* version information, printing: What is GNU Fortran?.
-* versions of gcc: Merging Distributions.
-* versions, recent <1>: Changes.
-* versions, recent: News.
-* VXT extensions: Dialects.
-* VXT features <1>: Dialects.
-* VXT features: Fortran Dialect Options.
-* VXT intrinsics: Fortran Dialect Options.
-* warning messages: Warning Options.
-* warnings: What is GNU Fortran?.
-* warnings vs errors: Warnings and Errors.
-* warnings, all: Warning Options.
-* warnings, extra: Warning Options.
-* warnings, implicit declaration: Warning Options.
-* warnings, unsupported: Warning Options.
-* why separate distributions: Merging Distributions.
-* wisdom: Collected Fortran Wisdom.
-* writing code: Collected Fortran Wisdom.
-* zero byte, trailing: Character and Hollerith Constants.
-
-