diff options
author | obrien <obrien@FreeBSD.org> | 2002-12-04 15:42:16 +0000 |
---|---|---|
committer | obrien <obrien@FreeBSD.org> | 2002-12-04 15:42:16 +0000 |
commit | 7a1080fa5c329ea8a9505e51ce151719955bcfa2 (patch) | |
tree | 78b77287e56e2a87be73638176124be85a8fc6c7 /contrib/gcc/f/g77.1 | |
parent | ef3bb1318428b8cfb1c8287f61b9b1f23f9bf0b5 (diff) | |
download | FreeBSD-src-7a1080fa5c329ea8a9505e51ce151719955bcfa2.zip FreeBSD-src-7a1080fa5c329ea8a9505e51ce151719955bcfa2.tar.gz |
Gcc 3.2.1 release virgin vendor import. (19-Nov-2002)
Diffstat (limited to 'contrib/gcc/f/g77.1')
-rw-r--r-- | contrib/gcc/f/g77.1 | 2065 |
1 files changed, 1712 insertions, 353 deletions
diff --git a/contrib/gcc/f/g77.1 b/contrib/gcc/f/g77.1 index 3f20af9..b3e8394 100644 --- a/contrib/gcc/f/g77.1 +++ b/contrib/gcc/f/g77.1 @@ -1,365 +1,1724 @@ -.\" Copyright (c) 1995-1997 Free Software Foundation -*-Text-*- -.\" See section COPYING for conditions for redistribution -.\" FIXME: no info here on predefines. Should there be? extra for F77... -.TH G77 1 "1999-02-14" "GNU Tools" "GNU Tools" -.de BP -.sp -.ti \-.2i -\(** +.\" Automatically generated by Pod::Man version 1.15 +.\" Tue Nov 19 18:17:20 2002 +.\" +.\" Standard preamble: +.\" ====================================================================== +.de Sh \" Subsection heading +.br +.if t .Sp +.ne 5 +.PP +\fB\\$1\fR +.PP +.. +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp .. -.SH NAME -g77 \- GNU project Fortran Compiler (v0.5.24) -.SH SYNOPSIS -.RB g77 " [" \c -.IR option " | " "filename " ].\|.\|. -.SH WARNING -The information in this man page is an extract from the full -documentation of the GNU Fortran compiler (version 0.5.24), -and is limited to the meaning of some of the options. +.de Ip \" List item +.br +.ie \\n(.$>=3 .ne \\$3 +.el .ne 3 +.IP "\\$1" \\$2 +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R + +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. | will give a +.\" real vertical bar. \*(C+ will give a nicer C++. Capital omega is used +.\" to do unbreakable dashes and therefore won't be available. \*(C` and +.\" \*(C' expand to `' in nroff, nothing in troff, for use with C<> +.tr \(*W-|\(bv\*(Tr +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +'br\} +.\" +.\" If the F register is turned on, we'll generate index entries on stderr +.\" for titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and +.\" index entries marked with X<> in POD. Of course, you'll have to process +.\" the output yourself in some meaningful fashion. +.if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. nr % 0 +. rr F +.\} +.\" +.\" For nroff, turn off justification. Always turn off hyphenation; it +.\" makes way too many mistakes in technical documents. +.hy 0 +.if n .na +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +.bd B 3 +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ====================================================================== +.\" +.IX Title "G77 1" +.TH G77 1 "gcc-3.2.1" "2002-11-19" "GNU" +.UC +.SH "NAME" +g77 \- \s-1GNU\s0 project Fortran 77 compiler +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +g77 [\fB\-c\fR|\fB\-S\fR|\fB\-E\fR] + [\fB\-g\fR] [\fB\-pg\fR] [\fB\-O\fR\fIlevel\fR] + [\fB\-W\fR\fIwarn\fR...] [\fB\-pedantic\fR] + [\fB\-I\fR\fIdir\fR...] [\fB\-L\fR\fIdir\fR...] + [\fB\-D\fR\fImacro\fR[=\fIdefn\fR]...] [\fB\-U\fR\fImacro\fR] + [\fB\-f\fR\fIoption\fR...] [\fB\-m\fR\fImachine-option\fR...] + [\fB\-o\fR \fIoutfile\fR] \fIinfile\fR... .PP -This man page is not up to date, since no volunteers want to -maintain it. If you find a discrepancy between the man page and the -software, please check the Info file, which is the authoritative -documentation. -.\" .PP -.\" The version of GNU Fortran documented by the Info file is 0.5.24, -.\" which includes substantial improvements and changes since 0.5.24, -.\" the version documented in this man page. +Only the most useful options are listed here; see below for the +remainder. +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +The \fBg77\fR command supports all the options supported by the +\&\fBgcc\fR command. .PP -If we find that the things in this man page that are out of date cause -significant confusion or complaints, we will stop distributing the man -page. The alternative, updating the man page when we update the Info -file, is impractical because the rest of the work of maintaining GNU Fortran -leaves us no time for that. The GNU project regards man pages as -obsolete and should not let them take time away from other things. +All \fBgcc\fR and \fBg77\fR options +are accepted both by \fBg77\fR and by \fBgcc\fR +(as well as any other drivers built at the same time, +such as \fBg++\fR), +since adding \fBg77\fR to the \fBgcc\fR distribution +enables acceptance of \fBg77\fR options +by all of the relevant drivers. .PP -For complete and current documentation, refer to the Info file `\|\c -.B g77\c -\&\|' or the manual -.I -Using and Porting GNU Fortran (for version 0.5.24)\c -\&. Both are made from the Texinfo source file -.BR g77.texi . +In some cases, options have positive and negative forms; +the negative form of \fB\-ffoo\fR would be \fB\-fno-foo\fR. +This manual documents only one of these two forms, whichever +one is not the default. +.SH "OPTIONS" +.IX Header "OPTIONS" +Here is a summary of all the options specific to \s-1GNU\s0 Fortran, grouped +by type. Explanations are in the following sections. +.Ip "\fIOverall Options\fR" 4 +.IX Item "Overall Options" +\&\fB\-fversion \-fset-g77\-defaults \-fno-silent\fR +.Ip "\fIShorthand Options\fR" 4 +.IX Item "Shorthand Options" +\&\fB\-ff66 \-fno-f66 \-ff77 \-fno-f77 \-fno-ugly\fR +.Ip "\fIFortran Language Options\fR" 4 +.IX Item "Fortran Language Options" +\&\fB\-ffree-form \-fno-fixed-form \-ff90 +\&\-fvxt \-fdollar-ok \-fno-backslash +\&\-fno-ugly-args \-fno-ugly-assign \-fno-ugly-assumed +\&\-fugly-comma \-fugly-complex \-fugly-init \-fugly-logint +\&\-fonetrip \-ftypeless-boz +\&\-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 +\&\-ff2c-intrinsics-delete \-ff2c-intrinsics-hide +\&\-ff2c-intrinsics-disable \-ff2c-intrinsics-enable +\&\-fbadu77\-intrinsics-delete \-fbadu77\-intrinsics-hide +\&\-fbadu77\-intrinsics-disable \-fbadu77\-intrinsics-enable +\&\-ff90\-intrinsics-delete \-ff90\-intrinsics-hide +\&\-ff90\-intrinsics-disable \-ff90\-intrinsics-enable +\&\-fgnu-intrinsics-delete \-fgnu-intrinsics-hide +\&\-fgnu-intrinsics-disable \-fgnu-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-\fR\fIn\fR \fB\-ffixed-line-length-none\fR +.Ip "\fIWarning Options\fR" 4 +.IX Item "Warning Options" +\&\fB\-fsyntax-only \-pedantic \-pedantic-errors \-fpedantic +\&\-w \-Wno-globals \-Wimplicit \-Wunused \-Wuninitialized +\&\-Wall \-Wsurprising +\&\-Werror \-W\fR +.Ip "\fIDebugging Options\fR" 4 +.IX Item "Debugging Options" +\&\fB\-g\fR +.Ip "\fIOptimization Options\fR" 4 +.IX Item "Optimization Options" +\&\fB\-malign-double +\&\-ffloat-store \-fforce-mem \-fforce-addr \-fno-inline +\&\-ffast-math \-fstrength-reduce \-frerun-cse-after-loop +\&\-funsafe-math-optimizations \-fno-trapping-math +\&\-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\fR +.Ip "\fIDirectory Options\fR" 4 +.IX Item "Directory Options" +\&\fB\-I\fR\fIdir\fR \fB\-I-\fR +.Ip "\fICode Generation Options\fR" 4 +.IX Item "Code Generation Options" +\&\fB\-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 \-fno-second-underscore +\&\-femulate-complex +\&\-falias-check \-fargument-alias +\&\-fargument-noalias \-fno-argument-noalias-global +\&\-fno-globals \-fflatten-arrays +\&\-fbounds-check \-ffortran-bounds-check\fR .PP -If your system has the `\|\c -.B info\c -\&\|' command installed, the command `\|\c -.B info g77\c -\&\|' should work, unless -.B g77 -has not been properly installed. -If your system lacks `\|\c -.B info\c -\&\|', or you wish to avoid using it for now, -the command `\|\c -.B more /usr/info/g77.info*\c -\&\|' should work, unless -.B g77 -has not been properly installed. +Compilation can involve as many as four stages: preprocessing, code +generation (often what is really meant by the term ``compilation''), +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. .PP -If -.B g77 -has not been properly installed, so that you -cannot easily access the Info file for it, -ask your system administrator, or the installer -of -.B g77 -(if you know who that is) to fix the problem. -.SH DESCRIPTION -The C and F77 compilers are integrated; -.B g77 -is a program to call -.B gcc -with options to recognize programs written in Fortran (ANSI FORTRAN 77, -also called F77). -.B gcc -processes input files -through one or more of four stages: preprocessing, compilation, -assembly, and linking. This man page contains full descriptions for -.I only -F77-specific aspects of the compiler, though it also contains -summaries of some general-purpose options. For a fuller explanation -of the compiler, see -.BR gcc ( 1 ). - -For complete documentation on GNU Fortran, type `\|\c -.B info g77\c -\&\|'. - -F77 source files use the suffix `\|\c -.B .f\c -\&\|', `\|\c -.B .for\c -\&\|', or `\|\c -.B .FOR\c -\&\|'; F77 files to be preprocessed by -.BR cpp ( 1 ) -use the suffix `\|\c -.B .F\c -\&\|', `\|\c -.B .fpp\c -\&\|', or `\|\c -.B .FPP\c -\&\|'; Ratfor source files use the suffix `\|\c -.B .r\c -\&\|' (though -.B ratfor -itself is not supplied as part of -.B g77\c -\&). -.SH OPTIONS -There are many command-line options, including options to control -details of optimization, warnings, and code generation, which are -common to both -.B gcc -and -.B g77\c -\&. For full information on all options, see -.BR gcc ( 1 ). - -Options must be separate: `\|\c -.B \-dr\c -\&\|' is quite different from `\|\c -.B \-d \-r -\&\|'. - -Most `\|\c -.B \-f\c -\&\|' and `\|\c -.B \-W\c -\&\|' options have two contrary forms: -.BI \-f name -and -.BI \-fno\- name\c -\& (or -.BI \-W name -and -.BI \-Wno\- name\c -\&). Only the non-default forms are shown here. - -.TP -.B \-c -Compile or assemble the source files, but do not link. The compiler -output is an object file corresponding to each source file. -.TP -.BI \-D macro -Define macro \c -.I macro\c -\& with the string `\|\c -.B 1\c -\&\|' as its definition. -.TP -.BI \-D macro = defn -Define macro \c -.I macro\c -\& as \c -.I defn\c -\&. -.TP -.B \-E -Stop after the preprocessing stage; do not run the compiler proper. The -output is preprocessed source code, which is sent to the -standard output. -.TP -.B \-g +For any given input file, the file name suffix determines what kind of +program is contained in the file\-\-\-that is, the language in which the +program is written is generally indicated by the suffix. +Suffixes specific to \s-1GNU\s0 Fortran are listed below. +.Ip "\fIfile\fR\fB.f\fR" 4 +.IX Item "file.f" +.PD 0 +.Ip "\fIfile\fR\fB.for\fR" 4 +.IX Item "file.for" +.Ip "\fIfile\fR\fB.FOR\fR" 4 +.IX Item "file.FOR" +.PD +Fortran source code that should not be preprocessed. +.Sp +Such source code cannot contain any preprocessor directives, such +as \f(CW\*(C`#include\*(C'\fR, \f(CW\*(C`#define\*(C'\fR, \f(CW\*(C`#if\*(C'\fR, and so on. +.Sp +You can force \fB.f\fR files to be preprocessed by \fBcpp\fR by using +\&\fB\-x f77\-cpp-input\fR. +.Ip "\fIfile\fR\fB.F\fR" 4 +.IX Item "file.F" +.PD 0 +.Ip "\fIfile\fR\fB.fpp\fR" 4 +.IX Item "file.fpp" +.Ip "\fIfile\fR\fB.FPP\fR" 4 +.IX Item "file.FPP" +.PD +Fortran source code that must be preprocessed (by the C preprocessor +\&\fBcpp\fR, which is part of \s-1GNU\s0 \s-1CC\s0). +.Sp +Note that preprocessing is not extended to the contents of +files included by the \f(CW\*(C`INCLUDE\*(C'\fR directive\-\-\-the \f(CW\*(C`#include\*(C'\fR +preprocessor directive must be used instead. +.Ip "\fIfile\fR\fB.r\fR" 4 +.IX Item "file.r" +Ratfor source code, which must be preprocessed by the \fBratfor\fR +command, which is available separately (as it is not yet part of the \s-1GNU\s0 +Fortran distribution). +One version in Fortran, adapted for use with \fBg77\fR is at +<\fBftp://members.aol.com/n8tm/rat7.uue\fR> (of uncertain copyright +status). Another, public domain version in C is at +<\fBhttp://sepwww.stanford.edu/sep/prof/ratfor.shar.2\fR>. +.PP +\&\s-1UNIX\s0 users typically use the \fI\fIfile\fI.f\fR and \fI\fIfile\fI.F\fR +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 \fI\fIfile\fI.for\fR and \fI\fIfile\fI.fpp\fR nomenclature. +.PP +Use of the preprocessor \fBcpp\fR allows use of C-like +constructs such as \f(CW\*(C`#define\*(C'\fR and \f(CW\*(C`#include\*(C'\fR, 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 \f(CW\*(C`#include\*(C'\fR and, in +conjunction with \f(CW\*(C`#define\*(C'\fR, only \f(CW\*(C`#if\*(C'\fR 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 +constructs such as Hollerith and character constants can nevertheless +present problems, especially when these are continued across multiple +source lines. +These problems result, primarily, from differences between the way +such constants are interpreted by the C preprocessor and by a Fortran +compiler. +.PP +Another example of a problem that results from using the C preprocessor +is that a Fortran comment line that happens to contain any +characters ``interesting'' to the C preprocessor, +such as a backslash at the end of the line, +is not recognized by the preprocessor as a comment line, +so instead of being passed through ``raw'', +the line is edited according to the rules for the preprocessor. +For example, the backslash at the end of the line is removed, +along with the subsequent newline, resulting in the next +line being effectively commented out\-\-\-unfortunate if that +line is a non-comment line of important code! +.PP +\&\fINote:\fR The \fB\-traditional\fR and \fB\-undef\fR flags are supplied +to \fBcpp\fR by default, to help avoid unpleasant surprises. +.PP +This means that \s-1ANSI\s0 C preprocessor features (such as the \fB#\fR +operator) aren't available, and only variables in the C reserved +namespace (generally, names with a leading underscore) are liable to +substitution by C predefines. +Thus, if you want to do system-specific +tests, use, for example, \fB#ifdef _\|_linux_\|_\fR rather than \fB#ifdef linux\fR. +Use the \fB\-v\fR option to see exactly how the preprocessor is invoked. +.PP +Unfortunately, the \fB\-traditional\fR flag will not avoid an error from +anything that \fBcpp\fR sees as an unterminated C comment, such as: +.PP +.Vb 2 +\& C Some Fortran compilers accept /* as starting +\& C an inline comment. +.Ve +The following options that affect overall processing are recognized +by the \fBg77\fR and \fBgcc\fR commands in a \s-1GNU\s0 Fortran installation: +.Ip "\fB\-fversion\fR" 4 +.IX Item "-fversion" +Ensure that the \fBg77\fR version of the compiler phase is reported, +if run, +and, starting in \f(CW\*(C`egcs\*(C'\fR version 1.1, +that internal consistency checks in the \fIf771\fR program are run. +.Sp +This option is supplied automatically when \fB\-v\fR or \fB\*(--verbose\fR +is specified as a command-line option for \fBg77\fR or \fBgcc\fR +and when the resulting commands compile Fortran source files. +.Sp +In \s-1GCC\s0 3.1, this is changed back to the behaviour \fBgcc\fR displays +for \fB.c\fR files. +.Ip "\fB\-fset-g77\-defaults\fR" 4 +.IX Item "-fset-g77-defaults" +\&\fIVersion info:\fR +This option was obsolete as of \f(CW\*(C`egcs\*(C'\fR +version 1.1. +The effect is instead achieved +by the \f(CW\*(C`lang_init_options\*(C'\fR routine +in \fIgcc/gcc/f/com.c\fR. +.Sp +Set up whatever \fBgcc\fR options are to apply to Fortran +compilations, and avoid running internal consistency checks +that might take some time. +.Sp +This option is supplied automatically when compiling Fortran code +via the \fBg77\fR or \fBgcc\fR command. +The description of this option is provided so that users seeing +it in the output of, say, \fBg77 \-v\fR understand why it is +there. +.Sp +Also, developers who run \f(CW\*(C`f771\*(C'\fR directly might want to specify it +by hand to get the same defaults as they would running \f(CW\*(C`f771\*(C'\fR +via \fBg77\fR or \fBgcc\fR +However, such developers should, after linking a new \f(CW\*(C`f771\*(C'\fR +executable, invoke it without this option once, +e.g. via \f(CW\*(C`./f771 \-quiet < /dev/null\*(C'\fR, +to ensure that they have not introduced any +internal inconsistencies (such as in the table of +intrinsics) before proceeding\-\--\fBg77\fR will crash +with a diagnostic if it detects an inconsistency. +.Ip "\fB\-fno-silent\fR" 4 +.IX Item "-fno-silent" +Print (to \f(CW\*(C`stderr\*(C'\fR) the names of the program units as +they are compiled, in a form similar to that used by popular +\&\s-1UNIX\s0 \fBf77\fR implementations and \fBf2c\fR +.Sh "Shorthand Options" +.IX Subsection "Shorthand Options" +The following options serve as ``shorthand'' +for other options accepted by the compiler: +.Ip "\fB\-fugly\fR" 4 +.IX Item "-fugly" +\&\fINote:\fR This option is no longer supported. +The information, below, is provided to aid +in the conversion of old scripts. +.Sp +Specify that certain ``ugly'' constructs are to be quietly accepted. +Same as: +.Sp +.Vb 3 +\& -fugly-args -fugly-assign -fugly-assumed +\& -fugly-comma -fugly-complex -fugly-init +\& -fugly-logint +.Ve +These constructs are considered inappropriate to use in new +or well-maintained portable Fortran code, but widely used +in old code. +.Ip "\fB\-fno-ugly\fR" 4 +.IX Item "-fno-ugly" +Specify that all ``ugly'' constructs are to be noisily rejected. +Same as: +.Sp +.Vb 3 +\& -fno-ugly-args -fno-ugly-assign -fno-ugly-assumed +\& -fno-ugly-comma -fno-ugly-complex -fno-ugly-init +\& -fno-ugly-logint +.Ve +.Ip "\fB\-ff66\fR" 4 +.IX Item "-ff66" +Specify that the program is written in idiomatic \s-1FORTRAN\s0 66. +Same as \fB\-fonetrip \-fugly-assumed\fR. +.Sp +The \fB\-fno-f66\fR option is the inverse of \fB\-ff66\fR. +As such, it is the same as \fB\-fno-onetrip \-fno-ugly-assumed\fR. +.Sp +The meaning of this option is likely to be refined as future +versions of \fBg77\fR provide more compatibility with other +existing and obsolete Fortran implementations. +.Ip "\fB\-ff77\fR" 4 +.IX Item "-ff77" +Specify that the program is written in idiomatic \s-1UNIX\s0 \s-1FORTRAN\s0 77 +and/or the dialect accepted by the \fBf2c\fR product. +Same as \fB\-fbackslash \-fno-typeless-boz\fR. +.Sp +The meaning of this option is likely to be refined as future +versions of \fBg77\fR provide more compatibility with other +existing and obsolete Fortran implementations. +.Ip "\fB\-fno-f77\fR" 4 +.IX Item "-fno-f77" +The \fB\-fno-f77\fR option is \fInot\fR the inverse +of \fB\-ff77\fR. +It specifies that the program is not written in idiomatic \s-1UNIX\s0 +\&\s-1FORTRAN\s0 77 or \fBf2c\fR but in a more widely portable dialect. +\&\fB\-fno-f77\fR is the same as \fB\-fno-backslash\fR. +.Sp +The meaning of this option is likely to be refined as future +versions of \fBg77\fR provide more compatibility with other +existing and obsolete Fortran implementations. +.Sh "Options Controlling Fortran Dialect" +.IX Subsection "Options Controlling Fortran Dialect" +The following options control the dialect of Fortran +that the compiler accepts: +.Ip "\fB\-ffree-form\fR" 4 +.IX Item "-ffree-form" +.PD 0 +.Ip "\fB\-fno-fixed-form\fR" 4 +.IX Item "-fno-fixed-form" +.PD +Specify that the source file is written in free form +(introduced in Fortran 90) instead of the more-traditional fixed form. +.Ip "\fB\-ff90\fR" 4 +.IX Item "-ff90" +Allow certain Fortran-90 constructs. +.Sp +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 +\&\fB\-fvxt\fR, \fB\-ff90\-intrinsics-enable\fR, and the +current level of support for Fortran 90.) +.Ip "\fB\-fvxt\fR" 4 +.IX Item "-fvxt" +Specify the treatment of certain constructs that have different +meanings depending on whether the code is written in +\&\s-1GNU\s0 Fortran (based on \s-1FORTRAN\s0 77 and akin to Fortran 90) +or \s-1VXT\s0 Fortran (more like \s-1VAX\s0 \s-1FORTRAN\s0). +.Sp +The default is \fB\-fno-vxt\fR. +\&\fB\-fvxt\fR specifies that the \s-1VXT\s0 Fortran interpretations +for those constructs are to be chosen. +.Ip "\fB\-fdollar-ok\fR" 4 +.IX Item "-fdollar-ok" +Allow \fB$\fR as a valid character in a symbol name. +.Ip "\fB\-fno-backslash\fR" 4 +.IX Item "-fno-backslash" +Specify that \fB\e\fR is not to be specially interpreted in character +and Hollerith constants a la C and many \s-1UNIX\s0 Fortran compilers. +.Sp +For example, with \fB\-fbackslash\fR in effect, \fBA\enB\fR specifies +three characters, with the second one being newline. +With \fB\-fno-backslash\fR, it specifies four characters, +\&\fBA\fR, \fB\e\fR, \fBn\fR, and \fBB\fR. +.Sp +Note that \fBg77\fR implements a fairly general form of backslash +processing that is incompatible with the narrower forms supported +by some other compilers. +For example, \fB'A\e003B'\fR is a three-character string in \fBg77\fR +whereas other compilers that support backslash might not support +the three-octal-digit form, and thus treat that string as longer +than three characters. +.Ip "\fB\-fno-ugly-args\fR" 4 +.IX Item "-fno-ugly-args" +Disallow passing Hollerith and typeless constants as actual +arguments (for example, \fB\s-1CALL\s0 FOO(4HABCD)\fR). +.Ip "\fB\-fugly-assign\fR" 4 +.IX Item "-fugly-assign" +Use the same storage for a given variable regardless of +whether it is used to hold an assigned-statement label +(as in \fB\s-1ASSIGN\s0 10 \s-1TO\s0 I\fR) or used to hold numeric data +(as in \fBI = 3\fR). +.Ip "\fB\-fugly-assumed\fR" 4 +.IX Item "-fugly-assumed" +Assume any dummy array with a final dimension specified as \fB1\fR +is really an assumed-size array, as if \fB*\fR had been specified +for the final dimension instead of \fB1\fR. +.Sp +For example, \fB\s-1DIMENSION\s0 X(1)\fR is treated as if it +had read \fB\s-1DIMENSION\s0 X(*)\fR. +.Ip "\fB\-fugly-comma\fR" 4 +.IX Item "-fugly-comma" +In an external-procedure invocation, +treat a trailing comma in the argument list +as specification of a trailing null argument, +and treat an empty argument list +as specification of a single null argument. +.Sp +For example, \fB\s-1CALL\s0 \f(BIFOO\fB\|(,)\fR is treated as +\&\fB\s-1CALL\s0 FOO(%\f(BIVAL\fB\|(0), %\f(BIVAL\fB\|(0))\fR. +That is, \fItwo\fR null arguments are specified +by the procedure call when \fB\-fugly-comma\fR is in force. +And \fBF = \f(BIFUNC()\fB\fR is treated as \fBF = FUNC(%\f(BIVAL\fB\|(0))\fR. +.Sp +The default behavior, \fB\-fno-ugly-comma\fR, is to ignore +a single trailing comma in an argument list. +So, by default, \fB\s-1CALL\s0 FOO(X,)\fR is treated +exactly the same as \fB\s-1CALL\s0 \f(BIFOO\fB\|(X)\fR. +.Ip "\fB\-fugly-complex\fR" 4 +.IX Item "-fugly-complex" +Do not complain about \fBREAL(\fR\fIexpr\fR\fB)\fR or +\&\fBAIMAG(\fR\fIexpr\fR\fB)\fR when \fIexpr\fR is a \f(CW\*(C`COMPLEX\*(C'\fR +type other than \f(CW\*(C`COMPLEX(KIND=1)\*(C'\fR\-\-\-usually +this is used to permit \f(CW\*(C`COMPLEX(KIND=2)\*(C'\fR +(\f(CW\*(C`DOUBLE COMPLEX\*(C'\fR) operands. +.Sp +The \fB\-ff90\fR option controls the interpretation +of this construct. +.Ip "\fB\-fno-ugly-init\fR" 4 +.IX Item "-fno-ugly-init" +Disallow use of Hollerith and typeless constants as initial +values (in \f(CW\*(C`PARAMETER\*(C'\fR and \f(CW\*(C`DATA\*(C'\fR statements), and +use of character constants to +initialize numeric types and vice versa. +.Sp +For example, \fB\s-1DATA\s0 I/'F'/, \s-1CHRVAR/65/\s0, J/4HABCD/\fR is disallowed by +\&\fB\-fno-ugly-init\fR. +.Ip "\fB\-fugly-logint\fR" 4 +.IX Item "-fugly-logint" +Treat \f(CW\*(C`INTEGER\*(C'\fR and \f(CW\*(C`LOGICAL\*(C'\fR variables and +expressions as potential stand-ins for each other. +.Sp +For example, automatic conversion between \f(CW\*(C`INTEGER\*(C'\fR and +\&\f(CW\*(C`LOGICAL\*(C'\fR is enabled, for many contexts, via this option. +.Ip "\fB\-fonetrip\fR" 4 +.IX Item "-fonetrip" +Executable iterative \f(CW\*(C`DO\*(C'\fR loops are to be executed at +least once each time they are reached. +.Sp +\&\s-1ANSI\s0 \s-1FORTRAN\s0 77 and more recent versions of the Fortran standard +specify that the body of an iterative \f(CW\*(C`DO\*(C'\fR loop is not executed +if the number of iterations calculated from the parameters of the +loop is less than 1. +(For example, \fB\s-1DO\s0 10 I = 1, 0\fR.) +Such a loop is called a \fIzero-trip loop\fR. +.Sp +Prior to \s-1ANSI\s0 \s-1FORTRAN\s0 77, many compilers implemented \f(CW\*(C`DO\*(C'\fR loops +such that the body of a loop would be executed at least once, even +if the iteration count was zero. +Fortran code written assuming this behavior is said to require +\&\fIone-trip loops\fR. +For example, some code written to the \s-1FORTRAN\s0 66 standard +expects this behavior from its \f(CW\*(C`DO\*(C'\fR loops, although that +standard did not specify this behavior. +.Sp +The \fB\-fonetrip\fR option specifies that the source \fIfile\fR\|(s) being +compiled require one-trip loops. +.Sp +This option affects only those loops specified by the (iterative) \f(CW\*(C`DO\*(C'\fR +statement and by implied-\f(CW\*(C`DO\*(C'\fR lists in I/O statements. +Loops specified by implied-\f(CW\*(C`DO\*(C'\fR lists in \f(CW\*(C`DATA\*(C'\fR and +specification (non-executable) statements are not affected. +.Ip "\fB\-ftypeless-boz\fR" 4 +.IX Item "-ftypeless-boz" +Specifies that prefix-radix non-decimal constants, such as +\&\fBZ'\s-1ABCD\s0'\fR, are typeless instead of \f(CW\*(C`INTEGER(KIND=1)\*(C'\fR. +.Sp +You can test for yourself whether a particular compiler treats +the prefix form as \f(CW\*(C`INTEGER(KIND=1)\*(C'\fR or typeless by running the +following program: +.Sp +.Vb 6 +\& EQUIVALENCE (I, R) +\& R = Z'ABCD1234' +\& J = Z'ABCD1234' +\& IF (J .EQ. I) PRINT *, 'Prefix form is TYPELESS' +\& IF (J .NE. I) PRINT *, 'Prefix form is INTEGER' +\& END +.Ve +Reports indicate that many compilers process this form as +\&\f(CW\*(C`INTEGER(KIND=1)\*(C'\fR, though a few as typeless, and at least one +based on a command-line option specifying some kind of +compatibility. +.Ip "\fB\-fintrin-case-initcap\fR" 4 +.IX Item "-fintrin-case-initcap" +.PD 0 +.Ip "\fB\-fintrin-case-upper\fR" 4 +.IX Item "-fintrin-case-upper" +.Ip "\fB\-fintrin-case-lower\fR" 4 +.IX Item "-fintrin-case-lower" +.Ip "\fB\-fintrin-case-any\fR" 4 +.IX Item "-fintrin-case-any" +.PD +Specify expected case for intrinsic names. +\&\fB\-fintrin-case-lower\fR is the default. +.Ip "\fB\-fmatch-case-initcap\fR" 4 +.IX Item "-fmatch-case-initcap" +.PD 0 +.Ip "\fB\-fmatch-case-upper\fR" 4 +.IX Item "-fmatch-case-upper" +.Ip "\fB\-fmatch-case-lower\fR" 4 +.IX Item "-fmatch-case-lower" +.Ip "\fB\-fmatch-case-any\fR" 4 +.IX Item "-fmatch-case-any" +.PD +Specify expected case for keywords. +\&\fB\-fmatch-case-lower\fR is the default. +.Ip "\fB\-fsource-case-upper\fR" 4 +.IX Item "-fsource-case-upper" +.PD 0 +.Ip "\fB\-fsource-case-lower\fR" 4 +.IX Item "-fsource-case-lower" +.Ip "\fB\-fsource-case-preserve\fR" 4 +.IX Item "-fsource-case-preserve" +.PD +Specify whether source text other than character and Hollerith constants +is to be translated to uppercase, to lowercase, or preserved as is. +\&\fB\-fsource-case-lower\fR is the default. +.Ip "\fB\-fsymbol-case-initcap\fR" 4 +.IX Item "-fsymbol-case-initcap" +.PD 0 +.Ip "\fB\-fsymbol-case-upper\fR" 4 +.IX Item "-fsymbol-case-upper" +.Ip "\fB\-fsymbol-case-lower\fR" 4 +.IX Item "-fsymbol-case-lower" +.Ip "\fB\-fsymbol-case-any\fR" 4 +.IX Item "-fsymbol-case-any" +.PD +Specify valid cases for user-defined symbol names. +\&\fB\-fsymbol-case-any\fR is the default. +.Ip "\fB\-fcase-strict-upper\fR" 4 +.IX Item "-fcase-strict-upper" +Same as \fB\-fintrin-case-upper \-fmatch-case-upper \-fsource-case-preserve +\&\-fsymbol-case-upper\fR. +(Requires all pertinent source to be in uppercase.) +.Ip "\fB\-fcase-strict-lower\fR" 4 +.IX Item "-fcase-strict-lower" +Same as \fB\-fintrin-case-lower \-fmatch-case-lower \-fsource-case-preserve +\&\-fsymbol-case-lower\fR. +(Requires all pertinent source to be in lowercase.) +.Ip "\fB\-fcase-initcap\fR" 4 +.IX Item "-fcase-initcap" +Same as \fB\-fintrin-case-initcap \-fmatch-case-initcap \-fsource-case-preserve +\&\-fsymbol-case-initcap\fR. +(Requires all pertinent source to be in initial capitals, +as in \fBPrint *,SqRt(Value)\fR.) +.Ip "\fB\-fcase-upper\fR" 4 +.IX Item "-fcase-upper" +Same as \fB\-fintrin-case-any \-fmatch-case-any \-fsource-case-upper +\&\-fsymbol-case-any\fR. +(Maps all pertinent source to uppercase.) +.Ip "\fB\-fcase-lower\fR" 4 +.IX Item "-fcase-lower" +Same as \fB\-fintrin-case-any \-fmatch-case-any \-fsource-case-lower +\&\-fsymbol-case-any\fR. +(Maps all pertinent source to lowercase.) +.Ip "\fB\-fcase-preserve\fR" 4 +.IX Item "-fcase-preserve" +Same as \fB\-fintrin-case-any \-fmatch-case-any \-fsource-case-preserve +\&\-fsymbol-case-any\fR. +(Preserves all case in user-defined symbols, +while allowing any-case matching of intrinsics and keywords. +For example, \fBcall Foo(i,I)\fR would pass two \fIdifferent\fR +variables named \fBi\fR and \fBI\fR to a procedure named \fBFoo\fR.) +.Ip "\fB\-fbadu77\-intrinsics-delete\fR" 4 +.IX Item "-fbadu77-intrinsics-delete" +.PD 0 +.Ip "\fB\-fbadu77\-intrinsics-hide\fR" 4 +.IX Item "-fbadu77-intrinsics-hide" +.Ip "\fB\-fbadu77\-intrinsics-disable\fR" 4 +.IX Item "-fbadu77-intrinsics-disable" +.Ip "\fB\-fbadu77\-intrinsics-enable\fR" 4 +.IX Item "-fbadu77-intrinsics-enable" +.PD +Specify status of \s-1UNIX\s0 intrinsics having inappropriate forms. +\&\fB\-fbadu77\-intrinsics-enable\fR is the default. +.Ip "\fB\-ff2c-intrinsics-delete\fR" 4 +.IX Item "-ff2c-intrinsics-delete" +.PD 0 +.Ip "\fB\-ff2c-intrinsics-hide\fR" 4 +.IX Item "-ff2c-intrinsics-hide" +.Ip "\fB\-ff2c-intrinsics-disable\fR" 4 +.IX Item "-ff2c-intrinsics-disable" +.Ip "\fB\-ff2c-intrinsics-enable\fR" 4 +.IX Item "-ff2c-intrinsics-enable" +.PD +Specify status of f2c-specific intrinsics. +\&\fB\-ff2c-intrinsics-enable\fR is the default. +.Ip "\fB\-ff90\-intrinsics-delete\fR" 4 +.IX Item "-ff90-intrinsics-delete" +.PD 0 +.Ip "\fB\-ff90\-intrinsics-hide\fR" 4 +.IX Item "-ff90-intrinsics-hide" +.Ip "\fB\-ff90\-intrinsics-disable\fR" 4 +.IX Item "-ff90-intrinsics-disable" +.Ip "\fB\-ff90\-intrinsics-enable\fR" 4 +.IX Item "-ff90-intrinsics-enable" +.PD +Specify status of F90\-specific intrinsics. +\&\fB\-ff90\-intrinsics-enable\fR is the default. +.Ip "\fB\-fgnu-intrinsics-delete\fR" 4 +.IX Item "-fgnu-intrinsics-delete" +.PD 0 +.Ip "\fB\-fgnu-intrinsics-hide\fR" 4 +.IX Item "-fgnu-intrinsics-hide" +.Ip "\fB\-fgnu-intrinsics-disable\fR" 4 +.IX Item "-fgnu-intrinsics-disable" +.Ip "\fB\-fgnu-intrinsics-enable\fR" 4 +.IX Item "-fgnu-intrinsics-enable" +.PD +Specify status of Digital's COMPLEX-related intrinsics. +\&\fB\-fgnu-intrinsics-enable\fR is the default. +.Ip "\fB\-fmil-intrinsics-delete\fR" 4 +.IX Item "-fmil-intrinsics-delete" +.PD 0 +.Ip "\fB\-fmil-intrinsics-hide\fR" 4 +.IX Item "-fmil-intrinsics-hide" +.Ip "\fB\-fmil-intrinsics-disable\fR" 4 +.IX Item "-fmil-intrinsics-disable" +.Ip "\fB\-fmil-intrinsics-enable\fR" 4 +.IX Item "-fmil-intrinsics-enable" +.PD +Specify status of MIL-STD-1753\-specific intrinsics. +\&\fB\-fmil-intrinsics-enable\fR is the default. +.Ip "\fB\-funix-intrinsics-delete\fR" 4 +.IX Item "-funix-intrinsics-delete" +.PD 0 +.Ip "\fB\-funix-intrinsics-hide\fR" 4 +.IX Item "-funix-intrinsics-hide" +.Ip "\fB\-funix-intrinsics-disable\fR" 4 +.IX Item "-funix-intrinsics-disable" +.Ip "\fB\-funix-intrinsics-enable\fR" 4 +.IX Item "-funix-intrinsics-enable" +.PD +Specify status of \s-1UNIX\s0 intrinsics. +\&\fB\-funix-intrinsics-enable\fR is the default. +.Ip "\fB\-fvxt-intrinsics-delete\fR" 4 +.IX Item "-fvxt-intrinsics-delete" +.PD 0 +.Ip "\fB\-fvxt-intrinsics-hide\fR" 4 +.IX Item "-fvxt-intrinsics-hide" +.Ip "\fB\-fvxt-intrinsics-disable\fR" 4 +.IX Item "-fvxt-intrinsics-disable" +.Ip "\fB\-fvxt-intrinsics-enable\fR" 4 +.IX Item "-fvxt-intrinsics-enable" +.PD +Specify status of \s-1VXT\s0 intrinsics. +\&\fB\-fvxt-intrinsics-enable\fR is the default. +.Ip "\fB\-ffixed-line-length-\fR\fIn\fR" 4 +.IX Item "-ffixed-line-length-n" +Set column after which characters are ignored in typical fixed-form +lines in the source file, and through which spaces are assumed (as +if padded to that length) after the ends of short fixed-form lines. +.Sp +Popular values for \fIn\fR include 72 (the +standard and the default), 80 (card image), and 132 (corresponds +to ``extended-source'' options in some popular compilers). +\&\fIn\fR may be \fBnone\fR, meaning that the entire line is meaningful +and that continued character constants never have implicit spaces appended +to them to fill out the line. +\&\fB\-ffixed-line-length-0\fR means the same thing as +\&\fB\-ffixed-line-length-none\fR. +.Sh "Options to Request or Suppress Warnings" +.IX Subsection "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. +.PP +You can request many specific warnings with options beginning \fB\-W\fR, +for example \fB\-Wimplicit\fR to request warnings on implicit +declarations. Each of these specific warning options also has a +negative form beginning \fB\-Wno-\fR to turn off warnings; +for example, \fB\-Wno-implicit\fR. This manual lists only one of the +two forms, whichever is not the default. +.PP +These options control the amount and kinds of warnings produced by \s-1GNU\s0 +Fortran: +.Ip "\fB\-fsyntax-only\fR" 4 +.IX Item "-fsyntax-only" +Check the code for syntax errors, but don't do anything beyond that. +.Ip "\fB\-pedantic\fR" 4 +.IX Item "-pedantic" +Issue warnings for uses of extensions to \s-1ANSI\s0 \s-1FORTRAN\s0 77. +\&\fB\-pedantic\fR also applies to C-language constructs where they +occur in \s-1GNU\s0 Fortran source files, such as use of \fB\ee\fR in a +character constant within a directive like \fB#include\fR. +.Sp +Valid \s-1ANSI\s0 \s-1FORTRAN\s0 77 programs should compile properly with or without +this option. +However, without this option, certain \s-1GNU\s0 extensions and traditional +Fortran features are supported as well. +With this option, many of them are rejected. +.Sp +Some users try to use \fB\-pedantic\fR to check programs for strict \s-1ANSI\s0 +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 \fBg77\fR in this area are welcome. +.Ip "\fB\-pedantic-errors\fR" 4 +.IX Item "-pedantic-errors" +Like \fB\-pedantic\fR, except that errors are produced rather than +warnings. +.Ip "\fB\-fpedantic\fR" 4 +.IX Item "-fpedantic" +Like \fB\-pedantic\fR, but applies only to Fortran constructs. +.Ip "\fB\-w\fR" 4 +.IX Item "-w" +Inhibit all warning messages. +.Ip "\fB\-Wno-globals\fR" 4 +.IX Item "-Wno-globals" +Inhibit warnings about use of a name as both a global name +(a subroutine, function, or block data program unit, or a +common block) and implicitly as the name of an intrinsic +in a source file. +.Sp +Also inhibit warnings about inconsistent invocations and/or +definitions of global procedures (function and subroutines). +Such inconsistencies include different numbers of arguments +and different types of arguments. +.Ip "\fB\-Wimplicit\fR" 4 +.IX Item "-Wimplicit" +Warn whenever a variable, array, or function is implicitly +declared. +Has an effect similar to using the \f(CW\*(C`IMPLICIT NONE\*(C'\fR statement +in every program unit. +(Some Fortran compilers provide this feature by an option +named \fB\-u\fR or \fB/WARNINGS=DECLARATIONS\fR.) +.Ip "\fB\-Wunused\fR" 4 +.IX Item "-Wunused" +Warn whenever a variable is unused aside from its declaration. +.Ip "\fB\-Wuninitialized\fR" 4 +.IX Item "-Wuninitialized" +Warn whenever an automatic variable is used without first being initialized. +.Sp +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 \fB\-O\fR, you simply won't +get these warnings. +.Sp +These warnings occur only for variables that are candidates for +register allocation. Therefore, they do not occur for a variable +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. +.Sp +Note that there might 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. +.Sp +These warnings are made optional because \s-1GNU\s0 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: +.Sp +.Vb 6 +\& 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 +.Ve +If the value of \f(CW\*(C`J\*(C'\fR is always 1, 2 or 3, then \f(CW\*(C`I\*(C'\fR is +always initialized, but \s-1GNU\s0 Fortran doesn't know this. Here is +another common case: +.Sp +.Vb 6 +\& SUBROUTINE MAYBE(FLAG) +\& LOGICAL FLAG +\& IF (FLAG) VALUE = 9.4 +\& ... +\& IF (FLAG) PRINT *, VALUE +\& END +.Ve +This has no bug because \f(CW\*(C`VALUE\*(C'\fR is used only if it is set. +.Ip "\fB\-Wall\fR" 4 +.IX Item "-Wall" +The \fB\-Wunused\fR and \fB\-Wuninitialized\fR 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 \fBg77\fR some might +be added to the list enabled by \fB\-Wall\fR.) +.PP +The remaining \fB\-W...\fR options are not implied by \fB\-Wall\fR +because they warn about constructions that we consider reasonable to +use, on occasion, in clean programs. +.Ip "\fB\-Wsurprising\fR" 4 +.IX Item "-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: +.RS 4 +.Ip "\(bu" 4 +Expressions having two arithmetic operators in a row, such +as \fBX*\-Y\fR. +Such a construct is nonstandard, and can produce +unexpected results in more complicated situations such +as \fBX**\-Y*Z\fR. +\&\fBg77\fR along with many other compilers, interprets +this example differently than many programmers, and a few +other compilers. +Specifically, \fBg77\fR interprets \fBX**\-Y*Z\fR as +\&\fB(X**(\-Y))*Z\fR, while others might think it should +be interpreted as \fBX**(\-(Y*Z))\fR. +.Sp +A revealing example is the constant expression \fB2**\-2*1.\fR, +which \fBg77\fR evaluates to .25, while others might evaluate +it to 0., the difference resulting from the way precedence affects +type promotion. +.Sp +(The \fB\-fpedantic\fR option also warns about expressions +having two arithmetic operators in a row.) +.Ip "\(bu" 4 +Expressions with a unary minus followed by an operand and then +a binary operator other than plus or minus. +For example, \fB\-2**2\fR produces a warning, because +the precedence is \fB\-(2**2)\fR, yielding \-4, not +\&\fB(\-2)**2\fR, which yields 4, and which might represent +what a programmer expects. +.Sp +An example of an expression producing different results +in a surprising way is \fB\-I*S\fR, where \fII\fR holds +the value \fB\-2147483648\fR and \fIS\fR holds \fB0.5\fR. +On many systems, negating \fII\fR results in the same +value, not a positive number, because it is already the +lower bound of what an \f(CW\*(C`INTEGER(KIND=1)\*(C'\fR variable can hold. +So, the expression evaluates to a positive number, while +the ``expected'' interpretation, \fB(\-I)*S\fR, would +evaluate to a negative number. +.Sp +Even cases such as \fB\-I*J\fR 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. +.Ip "\(bu" 4 +\&\f(CW\*(C`DO\*(C'\fR loops with \f(CW\*(C`DO\*(C'\fR variables that are not +of integral type\-\-\-that is, using \f(CW\*(C`REAL\*(C'\fR +variables as loop control variables. +Although such loops can be written to work in the +``obvious'' way, the way \fBg77\fR 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 \f(CW\*(C`DO\*(C'\fR loops, but the differences +are pronounced for non-integral loop control variables.) +.RE +.RS 4 +.RE +.Ip "\fB\-Werror\fR" 4 +.IX Item "-Werror" +Make all warnings into errors. +.Ip "\fB\-W\fR" 4 +.IX Item "-W" +Turns on ``extra warnings'' and, if optimization is specified +via \fB\-O\fR, the \fB\-Wuninitialized\fR option. +(This might change in future versions of \fBg77\fR +.Sp +``Extra warnings'' are issued for: +.RS 4 +.Ip "\(bu" 4 +Unused parameters to a procedure (when \fB\-Wunused\fR also is +specified). +.Ip "\(bu" 4 +Overflows involving floating-point constants (not available +for certain configurations). +.RE +.RS 4 +.RE +.PP +Some of these have no effect when compiling programs written in Fortran: +.Ip "\fB\-Wcomment\fR" 4 +.IX Item "-Wcomment" +.PD 0 +.Ip "\fB\-Wformat\fR" 4 +.IX Item "-Wformat" +.Ip "\fB\-Wparentheses\fR" 4 +.IX Item "-Wparentheses" +.Ip "\fB\-Wswitch\fR" 4 +.IX Item "-Wswitch" +.Ip "\fB\-Wtraditional\fR" 4 +.IX Item "-Wtraditional" +.Ip "\fB\-Wshadow\fR" 4 +.IX Item "-Wshadow" +.Ip "\fB\-Wid-clash-\fR\fIlen\fR" 4 +.IX Item "-Wid-clash-len" +.Ip "\fB\-Wlarger-than-\fR\fIlen\fR" 4 +.IX Item "-Wlarger-than-len" +.Ip "\fB\-Wconversion\fR" 4 +.IX Item "-Wconversion" +.Ip "\fB\-Waggregate-return\fR" 4 +.IX Item "-Waggregate-return" +.Ip "\fB\-Wredundant-decls\fR" 4 +.IX Item "-Wredundant-decls" +.PD +These options all could have some relevant meaning for +\&\s-1GNU\s0 Fortran programs, but are not yet supported. +.Sh "Options for Debugging Your Program or \s-1GNU\s0 Fortran" +.IX Subsection "Options for Debugging Your Program or GNU Fortran" +\&\s-1GNU\s0 Fortran has various special options that are used for debugging +either your program or \fBg77\fR +.Ip "\fB\-g\fR" 4 +.IX Item "-g" Produce debugging information in the operating system's native format -(for DBX or SDB or DWARF). GDB also can work with this debugging -information. On most systems that use DBX format, `\|\c -.B \-g\c -\&\|' enables use -of extra debugging information that only GDB can use. - -Unlike most other Fortran compilers, GNU Fortran allows you to use `\|\c -.B \-g\c -\&\|' with -`\|\c -.B \-O\c -\&\|'. The shortcuts taken by optimized code may occasionally -produce surprising results: some variables you declared may not exist -at all; flow of control may briefly move where you did not expect it; -some statements may not be executed because they compute constant -results or their values were already at hand; some statements may -execute in different places because they were moved out of loops. - -Nevertheless it proves possible to debug optimized output. This makes -it reasonable to use the optimizer for programs that might have bugs. -.TP -.BI "\-I" "dir"\c -\& -Append directory \c -.I dir\c -\& to the list of directories searched for include files. -.TP -.BI "\-L" "dir"\c -\& -Add directory \c -.I dir\c -\& to the list of directories to be searched -for `\|\c -.B \-l\c -\&\|'. -.TP -.BI \-l library\c -\& -Use the library named \c -.I library\c -\& when linking. -.TP -.B \-nostdinc -Do not search the standard system directories for header files. Only -the directories you have specified with -.B \-I -options (and the current directory, if appropriate) are searched. -.TP -.B \-O -Optimize. Optimizing compilation takes somewhat more time, and a lot -more memory for a large function. See the GCC documentation for -further optimisation options. Loop unrolling, in particular, may be -worth investigating for typical numerical Fortran programs. -.TP -.BI "\-o " file\c -\& -Place output in file \c -.I file\c -\&. -.TP -.B \-S -Stop after the stage of compilation proper; do not assemble. The output -is an assembler code file for each non-assembler input -file specified. -.TP -.BI \-U macro -Undefine macro \c -.I macro\c -\&. -.TP -.B \-v -Print (on standard error output) the commands executed to run the -stages of compilation. Also print the version number of the compiler -driver program and of the preprocessor and the compiler proper. The -version numbers of g77 itself and the GCC distribution on which it is -based are distinct. -.TP -.B \-Wall -Issue warnings for conditions which pertain to usage that we recommend -avoiding and that we believe is easy to avoid, even in conjunction -with macros. +(stabs, \s-1COFF\s0, \s-1XCOFF\s0, or \s-1DWARF\s0). \s-1GDB\s0 can work with this debugging +information. +.Sp +A sample debugging session looks like this (note the use of the breakpoint): +.Sp +.Vb 24 +\& $ cat gdb.f +\& PROGRAM PROG +\& DIMENSION A(10) +\& DATA A /1.,2.,3.,4.,5.,6.,7.,8.,9.,10./ +\& A(5) = 4. +\& PRINT*,A +\& END +\& $ g77 -g -O gdb.f +\& $ gdb a.out +\& ... +\& (gdb) break MAIN__ +\& Breakpoint 1 at 0x8048e96: file gdb.f, line 4. +\& (gdb) run +\& Starting program: /home/toon/g77-bugs/./a.out +\& Breakpoint 1, MAIN__ () at gdb.f:4 +\& 4 A(5) = 4. +\& Current language: auto; currently fortran +\& (gdb) print a(5) +\& $1 = 5 +\& (gdb) step +\& 5 PRINT*,A +\& (gdb) print a(5) +\& $2 = 4 +\& ... +.Ve +One could also add the setting of the breakpoint and the first run command +to the file \fI.gdbinit\fR in the current directory, to simplify the debugging +session. +.Sh "Options That Control Optimization" +.IX Subsection "Options That Control Optimization" +Most Fortran users will want to use no optimization when +developing and testing programs, and use \fB\-O\fR or \fB\-O2\fR when +compiling programs for late-cycle testing and for production use. +However, note that certain diagnostics\-\-\-such as for uninitialized +variables\-\-\-depend on the flow analysis done by \fB\-O\fR, i.e. you +must use \fB\-O\fR or \fB\-O2\fR to get such diagnostics. .PP - -.SH FILES -.ta \w'LIBDIR/g77\-include 'u -file.h C header (preprocessor) file -.br -file.f Fortran source file -.br -file.for Fortran source file -.br -file.FOR Fortran source file -.br -file.F preprocessed Fortran source file -.br -file.fpp preprocessed Fortran source file -.br -file.FPP preprocessed Fortran source file -.br -file.r Ratfor source file (ratfor not included) -.br -file.s assembly language file -.br -file.o object file -.br -a.out link edited output -.br -\fITMPDIR\fR/cc\(** temporary files -.br -\fILIBDIR\fR/cpp preprocessor -.br -\fILIBDIR\fR/f771 compiler -.br -\fILIBDIR\fR/libg2c.a Fortran run-time library -.br -\fILIBDIR\fR/libgcc.a GCC subroutine library -.br -/lib/crt[01n].o start-up routine -.br -/lib/libc.a standard C library, see -.IR intro (3) -.br -/usr/include standard directory for -.B #include -files -.br -\fILIBDIR\fR/include standard gcc directory for -.B #include -.br - files. -.sp -.I LIBDIR -is usually -.B /usr/local/lib/\c -.IR machine / version . -.sp -.I TMPDIR -comes from the environment variable -.B TMPDIR -(default -.B /usr/tmp -if available, else -.B /tmp\c -\&). +The following flags have particular applicability when +compiling Fortran programs: +.Ip "\fB\-malign-double\fR" 4 +.IX Item "-malign-double" +(Intel x86 architecture only.) +.Sp +Noticeably improves performance of \fBg77\fR programs making +heavy use of \f(CW\*(C`REAL(KIND=2)\*(C'\fR (\f(CW\*(C`DOUBLE PRECISION\*(C'\fR) data +on some systems. +In particular, systems using Pentium, Pentium Pro, 586, and +686 implementations +of the i386 architecture execute programs faster when +\&\f(CW\*(C`REAL(KIND=2)\*(C'\fR (\f(CW\*(C`DOUBLE PRECISION\*(C'\fR) data are +aligned on 64\-bit boundaries +in memory. +.Sp +This option can, at least, make benchmark results more consistent +across various system configurations, versions of the program, +and data sets. +.Sp +\&\fINote:\fR The warning in the \fBgcc\fR documentation about +this option does not apply, generally speaking, to Fortran +code compiled by \fBg77\fR +.Sp +\&\fIAlso also note:\fR The negative form of \fB\-malign-double\fR +is \fB\-mno-align-double\fR, not \fB\-benign-double\fR. +.Ip "\fB\-ffloat-store\fR" 4 +.IX Item "-ffloat-store" +Might help a Fortran program that depends on exact \s-1IEEE\s0 conformance on +some machines, but might slow down a program that doesn't. +.Sp +This option is effective when the floating-point unit is set to work in +\&\s-1IEEE\s0 854 `extended precision'\-\-\-as it typically is on x86 and m68k \s-1GNU\s0 +systems\-\-\-rather than \s-1IEEE\s0 754 double precision. \fB\-ffloat-store\fR +tries to remove the extra precision by spilling data from floating-point +registers into memory and this typically involves a big performance +hit. However, it doesn't affect intermediate results, so that it is +only partially effective. `Excess precision' is avoided in code like: +.Sp +.Vb 2 +\& a = b + c +\& d = a * e +.Ve +but not in code like: +.Sp +.Vb 1 +\& d = (b + c) * e +.Ve +For another, potentially better, way of controlling the precision, +see \f(CW@ref\fR{Floating-point precision}. +.Ip "\fB\-fforce-mem\fR" 4 +.IX Item "-fforce-mem" +.PD 0 +.Ip "\fB\-fforce-addr\fR" 4 +.IX Item "-fforce-addr" +.PD +Might improve optimization of loops. +.Ip "\fB\-fno-inline\fR" 4 +.IX Item "-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. +.Ip "\fB\-ffast-math\fR" 4 +.IX Item "-ffast-math" +Might allow some programs designed to not be too dependent +on \s-1IEEE\s0 behavior for floating-point to run faster, or die trying. +Sets \fB\-funsafe-math-optimizations\fR, and +\&\fB\-fno-trapping-math\fR. +.Ip "\fB\-funsafe-math-optimizations\fR" 4 +.IX Item "-funsafe-math-optimizations" +Allow optimizations that may be give incorrect results +for certain \s-1IEEE\s0 inputs. +.Ip "\fB\-fno-trapping-math\fR" 4 +.IX Item "-fno-trapping-math" +Allow the compiler to assume that floating-point arithmetic +will not generate traps on any inputs. This is useful, for +example, when running a program using \s-1IEEE\s0 \*(L"non-stop\*(R" +floating-point arithmetic. +.Ip "\fB\-fstrength-reduce\fR" 4 +.IX Item "-fstrength-reduce" +Might make some loops run faster. +.Ip "\fB\-frerun-cse-after-loop\fR" 4 +.IX Item "-frerun-cse-after-loop" +.PD 0 +.Ip "\fB\-fexpensive-optimizations\fR" 4 +.IX Item "-fexpensive-optimizations" +.Ip "\fB\-fdelayed-branch\fR" 4 +.IX Item "-fdelayed-branch" +.Ip "\fB\-fschedule-insns\fR" 4 +.IX Item "-fschedule-insns" +.Ip "\fB\-fschedule-insns2\fR" 4 +.IX Item "-fschedule-insns2" +.Ip "\fB\-fcaller-saves\fR" 4 +.IX Item "-fcaller-saves" +.PD +Might improve performance on some code. +.Ip "\fB\-funroll-loops\fR" 4 +.IX Item "-funroll-loops" +Typically improves performance on code using iterative \f(CW\*(C`DO\*(C'\fR loops by +unrolling them and is probably generally appropriate for Fortran, though +it is not turned on at any optimization level. +Note that outer loop unrolling isn't done specifically; decisions about +whether to unroll a loop are made on the basis of its instruction count. +.Sp +Also, no `loop discovery'[1] is done, so only loops written with \f(CW\*(C`DO\*(C'\fR +benefit from loop optimizations, including\-\-\-but not limited +to\-\-\-unrolling. Loops written with \f(CW\*(C`IF\*(C'\fR and \f(CW\*(C`GOTO\*(C'\fR are not +currently recognized as such. This option unrolls only iterative +\&\f(CW\*(C`DO\*(C'\fR loops, not \f(CW\*(C`DO WHILE\*(C'\fR loops. +.Ip "\fB\-funroll-all-loops\fR" 4 +.IX Item "-funroll-all-loops" +Probably improves performance on code using \f(CW\*(C`DO WHILE\*(C'\fR loops by +unrolling them in addition to iterative \f(CW\*(C`DO\*(C'\fR loops. In the absence +of \f(CW\*(C`DO WHILE\*(C'\fR, this option is equivalent to \fB\-funroll-loops\fR +but possibly slower. +.Ip "\fB\-fno-move-all-movables\fR" 4 +.IX Item "-fno-move-all-movables" +.PD 0 +.Ip "\fB\-fno-reduce-all-givs\fR" 4 +.IX Item "-fno-reduce-all-givs" +.Ip "\fB\-fno-rerun-loop-opt\fR" 4 +.IX Item "-fno-rerun-loop-opt" +.PD +\&\fIVersion info:\fR +These options are not supported by +versions of \fBg77\fR based on \fBgcc\fR version 2.8. +.Sp +Each of these might improve performance on some code. +.Sp +Analysis of Fortran code optimization and the resulting +optimizations triggered by the above options were +contributed by Toon Moene (<\fBtoon@moene.indiv.nluug.nl\fR>). +.Sp +These three options are intended to be removed someday, once +they have helped determine the efficacy of various +approaches to improving the performance of Fortran code. +.Sp +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 \fIdisabled\fR, and in +non-Fortran code that benefits when they are +\&\fIenabled\fR via the above \fBgcc\fR command-line options. +.Sh "Options Controlling the Preprocessor" +.IX Subsection "Options Controlling the Preprocessor" +These options control the C preprocessor, which is run on each C source +file before actual compilation. +.PP +Some of these options also affect how \fBg77\fR processes the +\&\f(CW\*(C`INCLUDE\*(C'\fR directive. +Since this directive is processed even when preprocessing +is not requested, it is not described in this section. +.PP +However, the \f(CW\*(C`INCLUDE\*(C'\fR directive does not apply +preprocessing to the contents of the included file itself. +.PP +Therefore, any file that contains preprocessor directives +(such as \f(CW\*(C`#include\*(C'\fR, \f(CW\*(C`#define\*(C'\fR, and \f(CW\*(C`#if\*(C'\fR) +must be included via the \f(CW\*(C`#include\*(C'\fR directive, not +via the \f(CW\*(C`INCLUDE\*(C'\fR directive. +Therefore, any file containing preprocessor directives, +if included, is necessarily included by a file that itself +contains preprocessor directives. +.Sh "Options for Directory Search" +.IX Subsection "Options for Directory Search" +These options affect how the \fBcpp\fR preprocessor searches +for files specified via the \f(CW\*(C`#include\*(C'\fR directive. +Therefore, when compiling Fortran programs, they are meaningful +when the preprocessor is used. +.PP +Some of these options also affect how \fBg77\fR searches +for files specified via the \f(CW\*(C`INCLUDE\*(C'\fR directive, +although files included by that directive are not, +themselves, preprocessed. +These options are: +.Ip "\fB\-I-\fR" 4 +.IX Item "-I-" +.PD 0 +.Ip "\fB\-I\fR\fIdir\fR" 4 +.IX Item "-Idir" +.PD +These affect interpretation of the \f(CW\*(C`INCLUDE\*(C'\fR directive +(as well as of the \f(CW\*(C`#include\*(C'\fR directive of the \fBcpp\fR +preprocessor). +.Sp +Note that \fB\-I\fR\fIdir\fR must be specified \fIwithout\fR any +spaces between \fB\-I\fR and the directory name\-\-\-that is, +\&\fB\-Ifoo/bar\fR is valid, but \fB\-I foo/bar\fR +is rejected by the \fBg77\fR compiler (though the preprocessor supports +the latter form). +Also note that the general behavior of \fB\-I\fR and +\&\f(CW\*(C`INCLUDE\*(C'\fR is pretty much the same as of \fB\-I\fR with +\&\f(CW\*(C`#include\*(C'\fR in the \fBcpp\fR preprocessor, with regard to +looking for \fIheader.gcc\fR files and other such things. +.Sh "Options for Code Generation Conventions" +.IX Subsection "Options for Code Generation Conventions" +These machine-independent options control the interface conventions +used in code generation. +.PP +Most of them have both positive and negative forms; the negative form +of \fB\-ffoo\fR would be \fB\-fno-foo\fR. 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 \fBno-\fR or adding +it. +.Ip "\fB\-fno-automatic\fR" 4 +.IX Item "-fno-automatic" +Treat each program unit as if the \f(CW\*(C`SAVE\*(C'\fR 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 \fB\-static\fR.) +.Ip "\fB\-finit-local-zero\fR" 4 +.IX Item "-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. +.Sp +Since there is a run-time penalty for initialization of variables +that are not given the \f(CW\*(C`SAVE\*(C'\fR attribute, it might be a +good idea to also use \fB\-fno-automatic\fR with \fB\-finit-local-zero\fR. +.Ip "\fB\-fno-f2c\fR" 4 +.IX Item "-fno-f2c" +Do not generate code designed to be compatible with code generated +by \fBf2c\fR use the \s-1GNU\s0 calling conventions instead. +.Sp +The \fBf2c\fR calling conventions require functions that return +type \f(CW\*(C`REAL(KIND=1)\*(C'\fR to actually return the C type \f(CW\*(C`double\*(C'\fR, +and functions that return type \f(CW\*(C`COMPLEX\*(C'\fR to return the +values via an extra argument in the calling sequence that points +to where to store the return value. +Under the \s-1GNU\s0 calling conventions, such functions simply return +their results as they would in \s-1GNU\s0 C\-\--\f(CW\*(C`REAL(KIND=1)\*(C'\fR functions +return the C type \f(CW\*(C`float\*(C'\fR, and \f(CW\*(C`COMPLEX\*(C'\fR functions +return the \s-1GNU\s0 C type \f(CW\*(C`complex\*(C'\fR (or its \f(CW\*(C`struct\*(C'\fR +equivalent). +.Sp +This does not affect the generation of code that interfaces with the +\&\f(CW\*(C`libg2c\*(C'\fR library. +.Sp +However, because the \f(CW\*(C`libg2c\*(C'\fR library uses \fBf2c\fR +calling conventions, \fBg77\fR rejects attempts to pass +intrinsics implemented by routines in this library as actual +arguments when \fB\-fno-f2c\fR is used, to avoid bugs when +they are actually called by code expecting the \s-1GNU\s0 calling +conventions to work. +.Sp +For example, \fB\s-1INTRINSIC\s0 \s-1ABS\s0;CALL FOO(\s-1ABS\s0)\fR is +rejected when \fB\-fno-f2c\fR is in force. +(Future versions of the \fBg77\fR run-time library might +offer routines that provide GNU-callable versions of the +routines that implement the \fBf2c\fR intrinsics +that may be passed as actual arguments, so that +valid programs need not be rejected when \fB\-fno-f2c\fR +is used.) +.Sp +\&\fBCaution:\fR If \fB\-fno-f2c\fR is used when compiling any +source file used in a program, it must be used when compiling +\&\fIall\fR Fortran source files used in that program. +.Ip "\fB\-ff2c-library\fR" 4 +.IX Item "-ff2c-library" +Specify that use of \f(CW\*(C`libg2c\*(C'\fR (or the original \f(CW\*(C`libf2c\*(C'\fR) +is required. +This is the default for the current version of \fBg77\fR +.Sp +Currently it is not +valid to specify \fB\-fno-f2c-library\fR. +This option is provided so users can specify it in shell +scripts that build programs and libraries that require the +\&\f(CW\*(C`libf2c\*(C'\fR library, even when being compiled by future +versions of \fBg77\fR that might otherwise default to +generating code for an incompatible library. +.Ip "\fB\-fno-underscoring\fR" 4 +.IX Item "-fno-underscoring" +Do not transform names of entities specified in the Fortran +source file by appending underscores to them. +.Sp +With \fB\-funderscoring\fR in effect, \fBg77\fR appends two underscores +to names with underscores and one underscore to external names with +no underscores. (\fBg77\fR also appends two underscores to internal +names with underscores to avoid naming collisions with external names. +The \fB\-fno-second-underscore\fR option disables appending of the +second underscore in all cases.) +.Sp +This is done to ensure compatibility with code produced by many +\&\s-1UNIX\s0 Fortran compilers, including \fBf2c\fR which perform the +same transformations. +.Sp +Use of \fB\-fno-underscoring\fR is not recommended unless you are +experimenting with issues such as integration of (\s-1GNU\s0) Fortran into +existing system environments (vis-a-vis existing libraries, tools, and +so on). +.Sp +For example, with \fB\-funderscoring\fR, and assuming other defaults like +\&\fB\-fcase-lower\fR and that \fB\f(BIj()\fB\fR and \fB\f(BImax_count()\fB\fR are +external functions while \fBmy_var\fR and \fBlvar\fR are local variables, +a statement like +.Sp +.Vb 1 +\& I = J() + MAX_COUNT (MY_VAR, LVAR) +.Ve +is implemented as something akin to: +.Sp +.Vb 1 +\& i = j_() + max_count__(&my_var__, &lvar); +.Ve +With \fB\-fno-underscoring\fR, the same statement is implemented as: +.Sp +.Vb 1 +\& i = j() + max_count(&my_var, &lvar); +.Ve +Use of \fB\-fno-underscoring\fR allows direct specification of +user-defined names while debugging and when interfacing \fBg77\fR +code with other languages. +.Sp +Note that just because the names match does \fInot\fR mean that the +interface implemented by \fBg77\fR for an external name matches the +interface implemented by some other language for that same name. +That is, getting code produced by \fBg77\fR 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. +.Sp +Also, note that with \fB\-fno-underscoring\fR, 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. +.Sp +In future versions of \fBg77\fR 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. +.Ip "\fB\-fno-second-underscore\fR" 4 +.IX Item "-fno-second-underscore" +Do not append a second underscore to names of entities specified +in the Fortran source file. +.Sp +This option has no effect if \fB\-fno-underscoring\fR is +in effect. +.Sp +Otherwise, with this option, an external name such as \fB\s-1MAX_COUNT\s0\fR +is implemented as a reference to the link-time external symbol +\&\fBmax_count_\fR, instead of \fBmax_count_\|_\fR. +.Ip "\fB\-fno-ident\fR" 4 +.IX Item "-fno-ident" +Ignore the \fB#ident\fR directive. +.Ip "\fB\-fzeros\fR" 4 +.IX Item "-fzeros" +Treat initial values of zero as if they were any other value. +.Sp +As of version 0.5.18, \fBg77\fR normally treats \f(CW\*(C`DATA\*(C'\fR and +other statements that are used to 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. +.Sp +This is done to speed up compiling of programs that initialize +large arrays to zeros. +.Sp +Use \fB\-fzeros\fR to revert to the simpler, slower behavior +that can catch multiple initializations by keeping track of +all initializations, zero or otherwise. +.Sp +\&\fICaution:\fR Future versions of \fBg77\fR 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. +.Ip "\fB\-femulate-complex\fR" 4 +.IX Item "-femulate-complex" +Implement \f(CW\*(C`COMPLEX\*(C'\fR arithmetic via emulation, +instead of using the facilities of +the \fBgcc\fR back end that provide direct support of +\&\f(CW\*(C`complex\*(C'\fR arithmetic. +.Sp +(\fBgcc\fR had some bugs in its back-end support +for \f(CW\*(C`complex\*(C'\fR arithmetic, due primarily to the support not being +completed as of version 2.8.1 and \f(CW\*(C`egcs\*(C'\fR 1.1.2.) +.Sp +Use \fB\-femulate-complex\fR if you suspect code-generation bugs, +or experience compiler crashes, +that might result from \fBg77\fR using the \f(CW\*(C`COMPLEX\*(C'\fR support +in the \fBgcc\fR back end. +If using that option fixes the bugs or crashes you are seeing, +that indicates a likely \fBg77\fR bugs +(though, all compiler crashes are considered bugs), +so, please report it. +(Note that the known bugs, now believed fixed, produced compiler crashes +rather than causing the generation of incorrect code.) +.Sp +Use of this option should not affect how Fortran code compiled +by \fBg77\fR works in terms of its interfaces to other code, +e.g. that compiled by \fBf2c\fR +.Sp +As of \s-1GCC\s0 version 3.0, this option is not necessary anymore. +.Sp +\&\fICaution:\fR Future versions of \fBg77\fR might ignore both forms +of this option. +.Ip "\fB\-falias-check\fR" 4 +.IX Item "-falias-check" +.PD 0 +.Ip "\fB\-fargument-alias\fR" 4 +.IX Item "-fargument-alias" +.Ip "\fB\-fargument-noalias\fR" 4 +.IX Item "-fargument-noalias" +.Ip "\fB\-fno-argument-noalias-global\fR" 4 +.IX Item "-fno-argument-noalias-global" +.PD +\&\fIVersion info:\fR +These options are not supported by +versions of \fBg77\fR based on \fBgcc\fR version 2.8. +.Sp +These options specify to what degree aliasing +(overlap) +is permitted between +arguments (passed as pointers) and \f(CW\*(C`COMMON\*(C'\fR (external, or +public) storage. +.Sp +The default for Fortran code, as mandated by the \s-1FORTRAN\s0 77 and +Fortran 90 standards, is \fB\-fargument-noalias-global\fR. +The default for code written in the C language family is +\&\fB\-fargument-alias\fR. +.Sp +Note that, on some systems, compiling with \fB\-fforce-addr\fR in +effect can produce more optimal code when the default aliasing +options are in effect (and when optimization is enabled). +.Ip "\fB\-fno-globals\fR" 4 +.IX Item "-fno-globals" +Disable diagnostics about inter-procedural +analysis problems, such as disagreements about the +type of a function or a procedure's argument, +that might cause a compiler crash when attempting +to inline a reference to a procedure within a +program unit. +(The diagnostics themselves are still produced, but +as warnings, unless \fB\-Wno-globals\fR is specified, +in which case no relevant diagnostics are produced.) +.Sp +Further, this option disables such inlining, to +avoid compiler crashes resulting from incorrect +code that would otherwise be diagnosed. +.Sp +As such, this option might be quite useful when +compiling existing, ``working'' code that happens +to have a few bugs that do not generally show themselves, +but which \fBg77\fR diagnoses. +.Sp +Use of this option therefore has the effect of +instructing \fBg77\fR to behave more like it did +up through version 0.5.19.1, when it paid little or +no attention to disagreements between program units +about a procedure's type and argument information, +and when it performed no inlining of procedures +(except statement functions). +.Sp +Without this option, \fBg77\fR defaults to performing +the potentially inlining procedures as it started doing +in version 0.5.20, but as of version 0.5.21, it also +diagnoses disagreements that might cause such inlining +to crash the compiler as (fatal) errors, +and warns about similar disagreements +that are currently believed to not +likely to result in the compiler later crashing +or producing incorrect code. +.Ip "\fB\-fflatten-arrays\fR" 4 +.IX Item "-fflatten-arrays" +Use back end's C-like constructs +(pointer plus offset) +instead of its \f(CW\*(C`ARRAY_REF\*(C'\fR construct +to handle all array references. +.Sp +\&\fINote:\fR This option is not supported. +It is intended for use only by \fBg77\fR developers, +to evaluate code-generation issues. +It might be removed at any time. +.Ip "\fB\-fbounds-check\fR" 4 +.IX Item "-fbounds-check" +.PD 0 +.Ip "\fB\-ffortran-bounds-check\fR" 4 +.IX Item "-ffortran-bounds-check" +.PD +Enable generation of run-time checks for array subscripts +and substring start and end points +against the (locally) declared minimum and maximum values. +.Sp +The current implementation uses the \f(CW\*(C`libf2c\*(C'\fR +library routine \f(CW\*(C`s_rnge\*(C'\fR to print the diagnostic. +.Sp +However, whereas \fBf2c\fR generates a single check per +reference for a multi-dimensional array, of the computed +offset against the valid offset range (0 through the size of the array), +\&\fBg77\fR generates a single check per \fIsubscript\fR expression. +This catches some cases of potential bugs that \fBf2c\fR does not, +such as references to below the beginning of an assumed-size array. +.Sp +\&\fBg77\fR also generates checks for \f(CW\*(C`CHARACTER\*(C'\fR substring references, +something \fBf2c\fR currently does not do. +.Sp +Use the new \fB\-ffortran-bounds-check\fR option +to specify bounds-checking for only the Fortran code you are compiling, +not necessarily for code written in other languages. +.Sp +\&\fINote:\fR To provide more detailed information on the offending subscript, +\&\fBg77\fR provides the \f(CW\*(C`libg2c\*(C'\fR run-time library routine \f(CW\*(C`s_rnge\*(C'\fR +with somewhat differently-formatted information. +Here's a sample diagnostic: +.Sp +.Vb 3 +\& Subscript out of range on file line 4, procedure rnge.f/bf. +\& Attempt to access the -6-th element of variable b[subscript-2-of-2]. +\& Aborted +.Ve +The above message indicates that the offending source line is +line 4 of the file \fIrnge.f\fR, +within the program unit (or statement function) named \fBbf\fR. +The offended array is named \fBb\fR. +The offended array dimension is the second for a two-dimensional array, +and the offending, computed subscript expression was \fB\-6\fR. +.Sp +For a \f(CW\*(C`CHARACTER\*(C'\fR substring reference, the second line has +this appearance: +.Sp +.Vb 1 +\& Attempt to access the 11-th element of variable a[start-substring]. +.Ve +This indicates that the offended \f(CW\*(C`CHARACTER\*(C'\fR variable or array +is named \fBa\fR, +the offended substring position is the starting (leftmost) position, +and the offending substring expression is \fB11\fR. +.Sp +(Though the verbage of \f(CW\*(C`s_rnge\*(C'\fR is not ideal +for the purpose of the \fBg77\fR compiler, +the above information should provide adequate diagnostic abilities +to it users.) +.PP +Some of these do \fInot\fR work when compiling programs written in Fortran: +.Ip "\fB\-fpcc-struct-return\fR" 4 +.IX Item "-fpcc-struct-return" +.PD 0 +.Ip "\fB\-freg-struct-return\fR" 4 +.IX Item "-freg-struct-return" +.PD +You should not use these except strictly the same way as you +used them to build the version of \f(CW\*(C`libg2c\*(C'\fR with which +you will be linking all code compiled by \fBg77\fR with the +same option. +.Ip "\fB\-fshort-double\fR" 4 +.IX Item "-fshort-double" +This probably either has no effect on Fortran programs, or +makes them act loopy. +.Ip "\fB\-fno-common\fR" 4 +.IX Item "-fno-common" +Do not use this when compiling Fortran programs, +or there will be Trouble. +.Ip "\fB\-fpack-struct\fR" 4 +.IX Item "-fpack-struct" +This probably will break any calls to the \f(CW\*(C`libg2c\*(C'\fR library, +at the very least, even if it is built with the same option. +.SH "ENVIRONMENT" +.IX Header "ENVIRONMENT" +\&\s-1GNU\s0 Fortran currently does not make use of any environment +variables to control its operation above and beyond those +that affect the operation of \fBgcc\fR. +.SH "BUGS" +.IX Header "BUGS" +For instructions on reporting bugs, see +<\fBhttp://gcc.gnu.org/bugs.html\fR>. Use of the \fBgccbug\fR +script to report bugs is recommended. +.SH "FOOTNOTES" +.IX Header "FOOTNOTES" +.Ip "1." 4 +\&\fIloop discovery\fR refers to the +process by which a compiler, or indeed any reader of a program, +determines which portions of the program are more likely to be executed +repeatedly as it is being run. Such discovery typically is done early +when compiling using optimization techniques, so the ``discovered'' +loops get more attention\-\-\-and more run-time resources, such as +registers\-\-\-from the compiler. It is easy to ``discover'' loops that are +constructed out of looping constructs in the language +(such as Fortran's \f(CW\*(C`DO\*(C'\fR). For some programs, ``discovering'' loops +constructed out of lower-level constructs (such as \f(CW\*(C`IF\*(C'\fR and +\&\f(CW\*(C`GOTO\*(C'\fR) can lead to generation of more optimal code +than otherwise. .SH "SEE ALSO" -gcc(1), cpp(1), as(1), ld(1), gdb(1), adb(1), dbx(1), sdb(1). -.br -.RB "`\|" g77 "\|', `\|" gcc "\|', `\|" cpp "\|'," -.RB "`\|" as "\|', `\|" ld "\|'," -and -.RB "`\|" gdb "\|'" -entries in -.B info\c -\&. -.br -.I -Using and Porting GNU Fortran (for version 0.5.24)\c -, James Craig Burley; -.I -Using and Porting GNU CC (for version 2.0)\c -, Richard M. Stallman; -.I -The C Preprocessor\c -, Richard M. Stallman; -.I -Debugging with GDB: the GNU Source-Level Debugger\c -, Richard M. Stallman and Roland H. Pesch; -.I -Using as: the GNU Assembler\c -, Dean Elsner, Jay Fenlason & friends; -.I -gld: the GNU linker\c -, Steve Chamberlain and Roland Pesch. - -.SH BUGS -For instructions on how to report bugs, type `\|\c -.B info g77 -n Bugs\c -\&\|'. - -.SH COPYING -Copyright (c) 1991-1998 Free Software Foundation, Inc. +.IX Header "SEE ALSO" +\&\fIgpl\fR\|(7), \fIgfdl\fR\|(7), \fIfsf-funding\fR\|(7), +\&\fIcpp\fR\|(1), \fIgcov\fR\|(1), \fIgcc\fR\|(1), \fIas\fR\|(1), \fIld\fR\|(1), \fIgdb\fR\|(1), \fIadb\fR\|(1), \fIdbx\fR\|(1), \fIsdb\fR\|(1) +and the Info entries for \fIgcc\fR, \fIcpp\fR, \fIg77\fR, \fIas\fR, +\&\fIld\fR, \fIbinutils\fR and \fIgdb\fR. +.SH "AUTHOR" +.IX Header "AUTHOR" +See the Info entry for \fBg77\fR for contributors to \s-1GCC\s0 and G77. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright (c) 1996, 1997, 1998, 1999, 2000, 2001, 2002 +Free Software Foundation, Inc. +.PP +Permission is granted to copy, distribute and/or modify this document +under the terms of the \s-1GNU\s0 Free Documentation License, Version 1.1 or +any later version published by the Free Software Foundation; with the +Invariant Sections being ``\s-1GNU\s0 General Public License'' and ``Funding +Free Software'', the Front-Cover texts being (a) (see below), and with +the Back-Cover Texts being (b) (see below). A copy of the license is +included in the \fIgfdl\fR\|(7) man page. .PP -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. +(a) The \s-1FSF\s0's Front-Cover Text is: .PP -Permission is granted to copy and distribute modified versions of this -manual under the conditions for verbatim copying, provided that the -entire resulting derived work is distributed under the terms of a -permission notice identical to this one. +.Vb 1 +\& A GNU Manual +.Ve +(b) The \s-1FSF\s0's Back-Cover Text is: .PP -Permission is granted to copy and distribute translations of this -manual into another language, under the above conditions for modified -versions, except that this permission notice may be included in -translations approved by the Free Software Foundation instead of in -the original English. -.SH AUTHORS -See the GNU CC Manual for the contributors to GNU CC. -See the GNU Fortran Manual for the contributors to -GNU Fortran. +.Vb 3 +\& You have freedom to copy and modify this GNU Manual, like GNU +\& software. Copies published by the Free Software Foundation raise +\& funds for GNU development. +.Ve |