.\" Automatically generated by Pod::Man version 1.1
-.\" Wed Jan 24 19:43:11 2001
+.\" Mon Feb 19 19:32:03 2001
.\"
.\" Standard preamble:
.\" ======================================================================
.\" ======================================================================
.\"
.IX Title "GCC 1"
-.TH GCC 1 "gcc-2.97" "2001-01-24" "GNU"
+.TH GCC 1 "gcc-3.1" "2001-02-19" "GNU"
.UC
.SH "NAME"
gcc \- \s-1GNU\s0 project C and \*(C+ compiler
\&\-fhuge-objects \-fno-implicit-templates
\&\-fno-implicit-inline-templates
\&\-fno-implement-inlines \-fms-extensions
-\&\-fname-mangling-version-\fR\fIn\fR \fB\-fno-operator-names
+\&\-fno-operator-names
\&\-fno-optional-diags \-fpermissive
-\&\-frepo \-fno-rtti \-fsquangle \-ftemplate-depth-\fR\fIn\fR
+\&\-frepo \-fno-rtti \-ftemplate-depth-\fR\fIn\fR
\&\fB\-fuse-cxa-atexit \-fvtable-thunks \-nostdinc++
\&\-fno-default-inline \-Wctor-dtor-privacy
\&\-Wnon-virtual-dtor \-Wreorder
\&\-Wstrict-prototypes \-Wtraditional\fR
.Ip "\fIDebugging Options\fR" 4
.IX Item "Debugging Options"
-\&\fB\-a \-ax \-d\fR\fIletters\fR \fB\-fdump-unnumbered \-fdump-translation-unit-\fR\fIfile\fR
-\&\fB\-fpretend-float \-fprofile-arcs \-ftest-coverage
+\&\fB\-a \-ax \-d\fR\fIletters\fR \fB\-fdump-unnumbered \-fdump-translation-unit=\fR\fIfile\fR
+\&\fB\-fdump-class-layout=\fR\fIfile\fR \fB\-fpretend-float \-fprofile-arcs \-ftest-coverage
\&\-g \-g\fR\fIlevel\fR \fB\-gcoff \-gdwarf \-gdwarf-1 \-gdwarf-1+ \-gdwarf-2
\&\-ggdb \-gstabs \-gstabs+ \-gxcoff \-gxcoff+
\&\-p \-pg \-print-file-name=\fR\fIlibrary\fR \fB\-print-libgcc-file-name
\&\-fsingle-precision-constant \-fssa
\&\-fstrength-reduce \-fstrict-aliasing \-fthread-jumps \-ftrapv
\&\-funroll-all-loops \-funroll-loops
-\&\-O \-O0 \-O1 \-O2 \-O3 \-Os\fR
+\&\-\-param\fR \fIname\fR\fB=\fR\fIvalue\fR
+\&\fB\-O \-O0 \-O1 \-O2 \-O3 \-Os\fR
.Ip "\fIPreprocessor Options\fR" 4
.IX Item "Preprocessor Options"
\&\fB\-$ \-A\fR\fIquestion\fR\fB=\fR\fIanswer\fR \fB\-A-\fR\fIquestion\fR[\fB=\fR\fIanswer\fR]
\&\fB\-mintel-syntax \-mieee-fp \-mno-fancy-math-387
\&\-mno-fp-ret-in-387 \-msoft-float \-msvr3\-shlib
\&\-mno-wide-multiply \-mrtd \-malign-double
-\&\-mreg-alloc=\fR\fIlist\fR \fB\-mregparm=\fR\fInum\fR
-\&\fB\-malign-jumps=\fR\fInum\fR \fB\-malign-loops=\fR\fInum\fR
+\&\-malign-jumps=\fR\fInum\fR \fB\-malign-loops=\fR\fInum\fR
\&\fB\-malign-functions=\fR\fInum\fR \fB\-mpreferred-stack-boundary=\fR\fInum\fR
\&\fB\-mthreads \-mno-align-stringops \-minline-all-stringops
\&\-mpush-args \-maccumulate-outgoing-args \-m128bit-long-double
-\&\-m96bit-long-double\fR
+\&\-m96bit-long-double \-mregparm=\fR\fInum\fR
.Sp
\&\fI\s-1HPPA\s0 Options\fR
.Sp
.IX Item "-fms-extensions"
Disable pedantic warnings about constructs used in \s-1MFC\s0, such as implicit
int and getting a pointer to member function via non-standard syntax.
-.Ip "\fB\-fname-mangling-version-\fR\fIn\fR" 4
-.IX Item "-fname-mangling-version-n"
-Control the way in which names are mangled. Version 0 is compatible
-with versions of g++ before 2.8. Version 1 is the default. Version 1
-will allow correct mangling of function templates. For example,
-version 0 mangling does not mangle foo<int, double> and foo<int, char>
-given this declaration:
-.Sp
-.Vb 1
-\& template <class T, class U> void foo(T t);
-.Ve
-Like all options that change the \s-1ABI\s0, all \*(C+ code, \fIincluding
-libgcc\fR must be built with the same setting of this option.
.Ip "\fB\-fno-operator-names\fR" 4
.IX Item "-fno-operator-names"
Do not treat the operator name keywords \f(CW\*(C`and\*(C'\fR, \f(CW\*(C`bitand\*(C'\fR,
of the language, you can save some space by using this flag. Note that
exception handling uses the same information, but it will generate it as
needed.
-.Ip "\fB\-fsquangle\fR" 4
-.IX Item "-fsquangle"
-.PD 0
-.Ip "\fB\-fno-squangle\fR" 4
-.IX Item "-fno-squangle"
-.PD
-\&\fB\-fsquangle\fR will enable a compressed form of name mangling for
-identifiers. In particular, it helps to shorten very long names by recognizing
-types and class names which occur more than once, replacing them with special
-short \s-1ID\s0 codes. This option also requires any \*(C+ libraries being used to
-be compiled with this option as well. The compiler has this disabled (the
-equivalent of \fB\-fno-squangle\fR) by default.
-.Sp
-Like all options that change the \s-1ABI\s0, all \*(C+ code, \fIincluding
-libgcc.a\fR must be built with the same setting of this option.
.Ip "\fB\-ftemplate-depth-\fR\fIn\fR" 4
.IX Item "-ftemplate-depth-n"
Set the maximum instantiation depth for template classes to \fIn\fR.
\&\fBconst_cast\fR) are less vulnerable to unintended effects.
.Ip "\fB\-Woverloaded-virtual (\*(C+ only)\fR" 4
.IX Item "-Woverloaded-virtual ( only)"
-Warn when a derived class function declaration may be an error in
-defining a virtual function. In a derived class, the
-definitions of virtual functions must match the type signature of a
-virtual function declared in the base class. With this option, the
-compiler warns when you define a function with the same name as a
-virtual function, but with a type signature that does not match any
-declarations from the base class.
+Warn when a function declaration hides virtual functions from a
+base class. For example, in:
+.Sp
+.Vb 3
+\& struct A {
+\& virtual void f();
+\& };
+.Ve
+.Vb 3
+\& struct B: public A {
+\& void f(int);
+\& };
+.Ve
+the \f(CW\*(C`A\*(C'\fR class version of \f(CW\*(C`f\*(C'\fR is hidden in \f(CW\*(C`B\*(C'\fR, and code
+like this:
+.Sp
+.Vb 2
+\& B* b;
+\& b->f();
+.Ve
+will fail to compile.
.Ip "\fB\-Wno-pmf-conversions (\*(C+ only)\fR" 4
.IX Item "-Wno-pmf-conversions ( only)"
Disable the diagnostic for converting a bound pointer to member function
\&\s-1ISO\s0 C.
.RS 4
.Ip "\(bu" 4
-Macro arguments occurring within string constants in the macro body.
-These would substitute the argument in traditional C, but are part of
-the constant in \s-1ISO\s0 C.
+Macro parameters that appear within string literals in the macro body.
+In traditional C macro replacement takes place within string literals,
+but does not in \s-1ISO\s0 C.
+.Ip "\(bu" 4
+In traditional C, some preprocessor directives did not exist.
+Traditional preprocessors would only consider a line to be a directive
+if the \fB#\fR appeared in column 1 on the line. Therefore
+\&\fB\-Wtraditional\fR warns about directives that traditional C
+understands but would ignore because the \fB#\fR does not appear as the
+first character on the line. It also suggests you hide directives like
+\&\fB#pragma\fR not understood by traditional C by indenting them. Some
+traditional implementations would not recognise \fB#elif\fR, so it
+suggests avoiding it altogether.
+.Ip "\(bu" 4
+A function-like macro that appears without arguments.
+.Ip "\(bu" 4
+The unary plus operator.
+.Ip "\(bu" 4
+The `U' integer constant suffix, or the `F' or `L' floating point
+constant suffixes. (Traditonal C does support the `L' suffix on integer
+constants.) Note, these suffixes appear in macros defined in the system
+headers of most modern systems, e.g. the _MIN/_MAX macros in limits.h.
+Use of these macros can lead to spurious warnings as they do not
+necessarily reflect whether the code in question is any less portable to
+traditional C given that suitable backup definitions are provided.
.Ip "\(bu" 4
A function declared external in one block and then used after the end of
the block.
.Ip "\(bu" 4
Usage of \s-1ISO\s0 string concatenation is detected.
.Ip "\(bu" 4
-A function macro appears without arguments.
-.Ip "\(bu" 4
-The unary plus operator.
-.Ip "\(bu" 4
Initialization of automatic aggregates.
.Ip "\(bu" 4
Identifier conflicts with labels. Traditional C lacks a separate
user code appears conditioned on e.g. \f(CW\*(C`_\|_STDC_\|_\*(C'\fR to avoid missing
initializer warnings and relies on default initialization to zero in the
traditional C case.
-.Ip "\(bu" 4
-The `U' integer constant suffix, or the `F' or `L' floating point
-constant suffixes. (Traditonal C does support the `L' suffix on integer
-constants.) Note, these suffixes appear in macros defined in the system
-headers of most modern systems, e.g. the _MIN/_MAX macros in limits.h.
-Use of these macros can lead to spurious warnings as they do not
-necessarily reflect whether the code in question is any less portable to
-traditional C given that suitable backup definitions are provided.
.RE
.RS 4
.RE
numbers and line number note output. This makes it more feasible to
use diff on debugging dumps for compiler invocations with different
options, in particular with and without \-g.
-.Ip "\fB\-fdump-translation-unit-\fR\fIfile\fR \fB(C and \*(C+ only)\fR" 4
-.IX Item "-fdump-translation-unit-file (C and only)"
+.Ip "\fB\-fdump-translation-unit=\fR\fIfile\fR \fB(C and \*(C+ only)\fR" 4
+.IX Item "-fdump-translation-unit=file (C and only)"
Dump a representation of the tree structure for the entire translation
unit to \fIfile\fR.
+.Ip "\fB\-fdump-class_layout=\fR\fIfile\fR \fB(\*(C+ only)\fR" 4
+.IX Item "-fdump-class_layout=file ( only)"
+.PD 0
+.Ip "\fB\-fdump-class_layout (\*(C+ only)\fR" 4
+.IX Item "-fdump-class_layout ( only)"
+.PD
+Dump a representation of each class's heirarchy to \fIfile\fR, or
+\&\f(CW\*(C`stderr\*(C'\fR if not specified.
.Ip "\fB\-fpretend-float\fR" 4
.IX Item "-fpretend-float"
When running a cross-compiler, pretend that the target machine uses the
will most benefit processors with lots of registers. It can, however,
make debugging impossible, since variables will no longer stay in
a ``home register''.
+.Ip "\fB\*(--param\fR \fIname\fR\fB=\fR\fIvalue\fR" 4
+.IX Item "param name=value"
+In some places, \s-1GCC\s0 uses various constants to control the amount of
+optimization that is done. For example, \s-1GCC\s0 will not inline functions
+that contain more that a certain number of instructions. You can
+control some of these constants on the command-line using the
+\&\fB\*(--param\fR option.
+.Sp
+In each case, the \fIvalue\fR is a integer. The allowable choices for
+\&\fIname\fR are given in the following table:
+.RS 4
+.Ip "\fBmax-inline-insns\fR" 4
+.IX Item "max-inline-insns"
+If an function contains more than this many instructions, it
+will not be inlined. This option is precisely equivalent to
+\&\fB\-finline-limit\fR.
+.RE
+.RS 4
+.RE
.Sh "Options Controlling the Preprocessor"
.IX Subsection "Options Controlling the Preprocessor"
These options control the C preprocessor, which is run on each C source
suitable for \f(CW\*(C`make\*(C'\fR describing the dependencies of the main source
file. The preprocessor outputs one \f(CW\*(C`make\*(C'\fR rule containing the
object file name for that source file, a colon, and the names of all the
-included files. If there are many included files then the rule is split
-into several lines using \fB\e\fR\-newline.
+included files. Unless overridden explicitly, the object file name
+consists of the basename of the source file with any suffix replaced with
+object file suffix. If there are many included files then the
+rule is split into several lines using \fB\e\fR\-newline.
.Sp
\&\fB\-M\fR implies \fB\-E\fR.
.Ip "\fB\-MM\fR" 4
across different shared libraries. In that case, each of the libraries
as well as the application itself should use the shared \fIlibgcc\fR.
.Sp
-At present the \s-1GCC\s0 driver makes no attempt to recognize the situations
-in which the shared \fIlibgcc\fR should be used, and defaults to using
-the static \fIlibgcc\fR always. This will likely change in the future,
-at which time \fB\-static-libgcc\fR becomes useful as a means for
-overriding \s-1GCC\s0's choice.
+Therefore, whenever you specify the \fB\-shared\fR option, the \s-1GCC\s0
+driver automatically adds \fB\-shared-libgcc\fR, unless you explicitly
+specify \fB\-static-libgcc\fR. The G++ driver automatically adds
+\&\fB\-shared-libgcc\fR when you build a main executable as well because
+for \*(C+ programs that is typically the right thing to do.
+(Exception-handling will not work reliably otherwise.)
+.Sp
+However, when linking a main executable written in C, you must
+explicitly say \fB\-shared-libgcc\fR if you want to use the shared
+\&\fIlibgcc\fR.
.Ip "\fB\-symbolic\fR" 4
.IX Item "-symbolic"
Bind references to global symbols when building a shared object. Warn
Add the directory \fIdir\fR to the head of the list of directories to be
searched for header files. This can be used to override a system header
file, substituting your own version, since these directories are
-searched before the system header file directories. If you use more
-than one \fB\-I\fR option, the directories are scanned in left-to-right
+searched before the system header file directories. However, you should
+not use this option to add directories that contain vendor-supplied
+system header files (use \fB\-isystem\fR for that). If you use more than
+one \fB\-I\fR option, the directories are scanned in left-to-right
order; the standard system directories come after.
.Ip "\fB\-I-\fR" 4
.IX Item "-I-"
In addition, seriously incorrect code will result if you call a
function with too many arguments. (Normally, extra arguments are
harmlessly ignored.)
-.Ip "\fB\-mreg-alloc=\fR\fIregs\fR" 4
-.IX Item "-mreg-alloc=regs"
-Control the default allocation order of integer registers. The
-string \fIregs\fR is a series of letters specifying a register. The
-supported letters are: \f(CW\*(C`a\*(C'\fR allocate \s-1EAX\s0; \f(CW\*(C`b\*(C'\fR allocate \s-1EBX\s0;
-\&\f(CW\*(C`c\*(C'\fR allocate \s-1ECX\s0; \f(CW\*(C`d\*(C'\fR allocate \s-1EDX\s0; \f(CW\*(C`S\*(C'\fR allocate \s-1ESI\s0;
-\&\f(CW\*(C`D\*(C'\fR allocate \s-1EDI\s0; \f(CW\*(C`B\*(C'\fR allocate \s-1EBP\s0.
.Ip "\fB\-mregparm=\fR\fInum\fR" 4
.IX Item "-mregparm=num"
Control how many registers are used to pass integer arguments. By