diff options
author | geoffk <geoffk@138bc75d-0d04-0410-961f-82ee72b054a4> | 2003-01-10 02:22:34 +0000 |
---|---|---|
committer | geoffk <geoffk@138bc75d-0d04-0410-961f-82ee72b054a4> | 2003-01-10 02:22:34 +0000 |
commit | 573aba856d39e5b11d72261a6ccb6004dcb923cd (patch) | |
tree | a3ff2e89f1924fd7ea1d99358736bc8491352747 /gcc/doc | |
parent | 4e844289dc2d6aca17add7956465217079eccdb6 (diff) | |
download | gcc-573aba856d39e5b11d72261a6ccb6004dcb923cd.tar.gz |
Merge from pch-branch.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@61136 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/doc')
-rw-r--r-- | gcc/doc/cppopts.texi | 11 | ||||
-rw-r--r-- | gcc/doc/gty.texi | 36 | ||||
-rw-r--r-- | gcc/doc/invoke.texi | 134 | ||||
-rw-r--r-- | gcc/doc/passes.texi | 44 |
4 files changed, 174 insertions, 51 deletions
diff --git a/gcc/doc/cppopts.texi b/gcc/doc/cppopts.texi index 74fe8be5b7d..95311a86d4e 100644 --- a/gcc/doc/cppopts.texi +++ b/gcc/doc/cppopts.texi @@ -301,6 +301,17 @@ a dependency output file as a side-effect of the compilation process. Like @option{-MD} except mention only user header files, not system -header files. +@ifclear cppmanual +@item -fpch-deps +@opindex fpch-deps +When using precompiled headers (@pxref{Precompiled Headers}), this flag +will cause the dependency-output flags to also list the files from the +precompiled header's dependencies. If not specified only the +precompiled header would be listed and not the files that were used to +create it because those files are not consulted when a precompiled +header is used. + +@end ifclear @item -x c @itemx -x c++ @itemx -x objective-c diff --git a/gcc/doc/gty.texi b/gcc/doc/gty.texi index 55deef24f69..ed7d3d2c1a1 100644 --- a/gcc/doc/gty.texi +++ b/gcc/doc/gty.texi @@ -10,7 +10,8 @@ GCC uses some fairly sophisticated memory management techniques, which involve determining information about GCC's data structures from GCC's -source code and using this information to perform garbage collection. +source code and using this information to perform garbage collection and +implement precompiled headers. A full C parser would be too overcomplicated for this task, so a limited subset of C is interpreted and special markers are used to determine @@ -227,6 +228,39 @@ this field is always @code{NULL}. This is used to avoid requiring backends to define certain optional structures. It doesn't work with language frontends. +@findex chain_next +@findex chain_prev +@item chain_next +@itemx chain_prev + +It's helpful for the type machinery to know if objects are often +chained together in long lists; this lets it generate code that uses +less stack space by iterating along the list instead of recursing down +it. @code{chain_next} is an expression for the next item in the list, +@code{chain_prev} is an expression for the previous item. The +machinery requires that taking the next item of the previous item +gives the original item. + +@findex reorder +@item reorder + +Some data structures depend on the relative ordering of pointers. If +the type machinery needs to change that ordering, it will call the +function referenced by the @code{reorder} option, before changing the +pointers in the object that's pointed to by the field the option +applies to. The function must be of the type @code{void ()(void *, +void *, gt_pointer_operator, void *)}. The second parameter is the +pointed-to object; the third parameter is a routine that, given a +pointer, can update it to its new value. The fourth parameter is a +cookie to be passed to the third parameter. The first parameter is +the structure that contains the object, or the object itself if it is +a structure. + +No data structure may depend on the absolute value of pointers. Even +relying on relative orderings and using @code{reorder} functions can +be expensive. It is better to depend on properties of the data, like +an ID number or the hash of a string instead. + @findex special @item special diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi index 8b3e365a550..bfbdd3ebbc2 100644 --- a/gcc/doc/invoke.texi +++ b/gcc/doc/invoke.texi @@ -141,6 +141,7 @@ only one of these two forms, whichever one is not the default. * Code Gen Options:: Specifying conventions for function calls, data layout and register usage. * Environment Variables:: Env vars that affect GCC. +* Precompiled Headers:: Compiling a header once, and using it many times. * Running Protoize:: Automatically adding or removing function prototypes. @end menu @@ -220,7 +221,7 @@ in the following sections. -Wimplicit -Wimplicit-int @gol -Wimplicit-function-declaration @gol -Werror-implicit-function-declaration @gol --Wimport -Winline -Wno-endif-labels @gol +-Wimport -Winline -Winvalid-pch -Wno-endif-labels @gol -Wlarger-than-@var{len} -Wlong-long @gol -Wmain -Wmissing-braces @gol -Wmissing-format-attribute -Wmissing-noreturn @gol @@ -767,7 +768,7 @@ Objective-C source code. Note that you must link with the library Objective-C source code which should not be preprocessed. @item @var{file}.h -C header file (not to be compiled or linked). +C or C++ header file to be turned into a precompiled header. @item @var{file}.cc @itemx @var{file}.cp @@ -780,6 +781,10 @@ C++ source code which must be preprocessed. Note that in @samp{.cxx}, the last two letters must both be literally @samp{x}. Likewise, @samp{.C} refers to a literal capital C@. +@item @var{file}.hh +@itemx @var{file}.H +C++ header file to be turned into a precompiled header. + @item @var{file}.f @itemx @var{file}.for @itemx @var{file}.FOR @@ -843,7 +848,7 @@ name suffix). This option applies to all following input files until the next @option{-x} option. Possible values for @var{language} are: @example c c-header cpp-output -c++ c++-cpp-output +c++ c++-header c++-cpp-output objective-c objc-cpp-output assembler assembler-with-cpp ada @@ -965,22 +970,24 @@ Display the version number and copyrights of the invoked GCC. @cindex suffixes for C++ source @cindex C++ source file suffixes C++ source files conventionally use one of the suffixes @samp{.C}, -@samp{.cc}, @samp{.cpp}, @samp{.CPP}, @samp{.c++}, @samp{.cp}, or @samp{.cxx}; +@samp{.cc}, @samp{.cpp}, @samp{.CPP}, @samp{.c++}, @samp{.cp}, or +@samp{.cxx}; C++ header files often use @samp{.hh} or @samp{.H}; and preprocessed C++ files use the suffix @samp{.ii}. GCC recognizes files with these names and compiles them as C++ programs even if you -call the compiler the same way as for compiling C programs (usually with -the name @command{gcc}). +call the compiler the same way as for compiling C programs (usually +with the name @command{gcc}). @findex g++ @findex c++ However, C++ programs often require class libraries as well as a compiler that understands the C++ language---and under some -circumstances, you might want to compile programs from standard input, -or otherwise without a suffix that flags them as C++ programs. -@command{g++} is a program that calls GCC with the default language -set to C++, and automatically specifies linking against the C++ -library. On many systems, @command{g++} is also -installed with the name @command{c++}. +circumstances, you might want to compile programs or header files from +standard input, or otherwise without a suffix that flags them as C++ +programs. You might also like to precompile a C header file with a +@samp{.h} extension to be used in C++ compilations. @command{g++} is a +program that calls GCC with the default language set to C++, and +automatically specifies linking against the C++ library. On many +systems, @command{g++} is also installed with the name @command{c++}. @cindex invoking @command{g++} When you compile C++ programs, you may specify many of the same @@ -2800,6 +2807,11 @@ code is to provide behavior which is selectable at compile-time. @opindex Winline Warn if a function can not be inlined and it was declared as inline. +@item -Winvalid-pch +@opindex Winvalid-pch +Warn if a precompiled header (@pxref{Precompiled Headers}) is found in +the search path but can't be used. + @item -Wlong-long @opindex Wlong-long @opindex Wno-long-long @@ -10924,6 +10936,104 @@ preprocessor. @c man end +@node Precompiled Headers +@section Using Precompiled Headers +@cindex precompiled headers +@cindex speed of compilation + +Often large projects have many header files that are included in every +source file. The time the compiler takes to process these header files +over and over again can account for nearly all of the time required to +build the project. To make builds faster, GCC allows users to +`precompile' a header file; then, if builds can use the precompiled +header file they will be much faster. + +To create a precompiled header file, simply compile it as you would any +other file, if necessary using the @option{-x} option to make the driver +treat it as a C or C++ header file. You will probably want to use a +tool like @command{make} to keep the precompiled header up-to-date when +the headers it contains change. + +A precompiled header file will be searched for when @code{#include} is +seen in the compilation. As it searches for the included file +(@pxref{Search Path,,Search Path,cpp.info,The C Preprocessor}) the +compiler looks for a precompiled header in each directory just before it +looks for the include file in that directory. The name searched for is +the name specified in the @code{#include} with @samp{.pch} appended. If +the precompiled header file can't be used, it is ignored. + +For instance, if you have @code{#include "all.h"}, and you have +@file{all.h.pch} in the same directory as @file{all.h}, then the +precompiled header file will be used if possible, and the original +header will be used otherwise. + +Alternatively, you might decide to put the precompiled header file in a +directory and use @option{-I} to ensure that directory is searched +before (or instead of) the directory containing the original header. +Then, if you want to check that the precompiled header file is always +used, you can put a file of the same name as the original header in this +directory containing an @code{#error} command. + +This also works with @option{-include}. So yet another way to use +precompiled headers, good for projects not designed with precompiled +header files in mind, is to simply take most of the header files used by +a project, include them from another header file, precompile that header +file, and @option{-include} the precompiled header. If the header files +have guards against multiple inclusion, they will be skipped because +they've already been included (in the precompiled header). + +If you need to precompile the same header file for different +languages, targets, or compiler options, you can instead make a +@emph{directory} named like @file{all.h.pch}, and put each precompiled +header in the directory. (It doesn't matter what you call the files +in the directory, every precompiled header in the directory will be +considered.) The first precompiled header encountered in the +directory that is valid for this compilation will be used; they're +searched in no particular order. + +There are many other possibilities, limited only by your imagination, +good sense, and the constraints of your build system. + +A precompiled header file can be used only when these conditions apply: + +@itemize +@item +Only one precompiled header can be used in a particular compilation. +@item +A precompiled header can't be used once the first C token is seen. You +can have preprocessor directives before a precompiled header; you can +even include a precompiled header from inside another header, so long as +there are no C tokens before the @code{#include}. +@item +The precompiled header file must be produced for the same language as +the current compilation. You can't use a C precompiled header for a C++ +compilation. +@item +The precompiled header file must be produced by the same compiler +version and configuration as the current compilation is using. +The easiest way to guarantee this is to use the same compiler binary +for creating and using precompiled headers. +@item +Any macros defined before the precompiled header (including with +@option{-D}) must either be defined in the same way as when the +precompiled header was generated, or must not affect the precompiled +header, which usually means that the they don't appear in the +precompiled header at all. +@item +Certain command-line options must be defined in the same way as when the +precompiled header was generated. At present, it's not clear which +options are safe to change and which are not; the safest choice is to +use exactly the same options when generating and using the precompiled +header. +@end itemize + +For all of these but the last, the compiler will automatically ignore +the precompiled header if the conditions aren't met. For the last item, +some option changes will cause the precompiled header to be rejected, +but not all incompatible option combinations have yet been found. If +you find a new incompatible combination, please consider filing a bug +report, see @ref{Bugs}. + @node Running Protoize @section Running Protoize diff --git a/gcc/doc/passes.texi b/gcc/doc/passes.texi index c47433eccfc..8a96a692461 100644 --- a/gcc/doc/passes.texi +++ b/gcc/doc/passes.texi @@ -1,4 +1,4 @@ -@c Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998, +@c Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 2002, @c 1999, 2000, 2001 Free Software Foundation, Inc. @c This is part of the GCC manual. @c For copying conditions, see the file gcc.texi. @@ -73,54 +73,22 @@ performed by cpplib, which is covered in separate documentation. In particular, the internals are covered in @xref{Top, ,Cpplib internals, cppinternals, Cpplib Internals}. -@c Avoiding overfull is tricky here. -The source files to parse C are -@file{c-convert.c}, -@file{c-decl.c}, -@file{c-errors.c}, -@file{c-lang.c}, -@file{c-objc-common.c}, -@file{c-parse.in}, -@file{c-aux-info.c}, -and -@file{c-typeck.c}, -along with a header file -@file{c-tree.h} -and some files shared with Objective-C and C++. - -The source files for parsing C++ are in @file{cp/}. -They are @file{parse.y}, -@file{class.c}, -@file{cvt.c}, @file{decl.c}, @file{decl2.c}, -@file{except.c}, -@file{expr.c}, @file{init.c}, @file{lex.c}, -@file{method.c}, @file{ptree.c}, -@file{search.c}, @file{spew.c}, -@file{semantics.c}, @file{tree.c}, -@file{typeck2.c}, and -@file{typeck.c}, along with header files @file{cp-tree.def}, -@file{cp-tree.h}, and @file{decl.h}. - -The special source files for parsing Objective-C are in @file{objc/}. -They are @file{objc-act.c}, @file{objc-tree.def}, and @file{objc-act.h}. -Certain C-specific files are used for this as well. - -The files -@file{c-common.c}, +The source files to parse C are found in the toplevel directory, and +by convention are named @file{c-*}. Some of these are also used by +the other C-like languages: @file{c-common.c}, @file{c-common.def}, @file{c-format.c}, @file{c-opts.c}, @file{c-pragma.c}, @file{c-semantics.c}, -and @file{c-lex.c}, -along with header files @file{c-common.h}, @file{c-dump.h}, and @file{c-pragma.h}, -are also used for all of the above languages. +Files specific to each language are in subdirectories named after the +language in question, like @file{ada}, @file{objc}, @file{cp} (for C++). @cindex Tree optimization @item |