initial import of GCC 3.3.3, which fixes a few more bugs from the prior

3.3.3-pre snapshot we were using.

visit http://gcc.gnu.org/gcc-3.3/changes.html#3.3.3 for more details.
This commit is contained in:
mrg 2004-03-01 03:32:51 +00:00
parent 074e4b8a74
commit ec14d423fc
18 changed files with 24912 additions and 3967 deletions

446
gnu/dist/gcc/FAQ vendored
View File

@ -1,12 +1,12 @@
GCC Frequently Asked Questions
The latest version of this document is always available at
The latest version of this document is always available at
[1]http://gcc.gnu.org/faq.html.
This FAQ tries to answer specific questions concerning GCC. For
general information regarding C, C++, resp. Fortran please check the
[2]comp.lang.c FAQ, [3]comp.std.c++ FAQ, and the [4]Fortran
This FAQ tries to answer specific questions concerning GCC. For
general information regarding C, C++, resp. Fortran please check the
[2]comp.lang.c FAQ, [3]comp.std.c++ FAQ, and the [4]Fortran
Information page.
Other GCC-related FAQs: [5]libstdc++-v3, and [6]GCJ.
@ -34,12 +34,12 @@
1. [24]Is there a stringstream / sstream for GCC 2.95.2?
5. [25]Miscellaneous
1. [26]Friend Templates
2. [27]dynamic_cast, throw, typeid don't work with shared
2. [27]dynamic_cast, throw, typeid don't work with shared
libraries
3. [28]Why do I need autoconf, bison, xgettext, automake, etc?
4. [29]Why can't I build a shared library?
5. [30]When building C++, the linker says my constructors,
destructors or virtual tables are undefined, but I defined
5. [30]When building C++, the linker says my constructors,
destructors or virtual tables are undefined, but I defined
them
6. [31]Will GCC someday include an incremental linker?
_________________________________________________________________
@ -48,101 +48,101 @@
What is the relationship between GCC and EGCS?
In 1990/1991 gcc version 1 had reached a point of stability. For the
targets it could support, it worked well. It had limitations inherent
in its design that would be difficult to resolve, so a major effort
was made to resolve those limitations and gcc version 2 was the
In 1990/1991 gcc version 1 had reached a point of stability. For the
targets it could support, it worked well. It had limitations inherent
in its design that would be difficult to resolve, so a major effort
was made to resolve those limitations and gcc version 2 was the
result.
When we had gcc2 in a useful state, development efforts on gcc1
stopped and we all concentrated on making gcc2 better than gcc1 could
ever be. This is the kind of step forward we wanted to make with the
When we had gcc2 in a useful state, development efforts on gcc1
stopped and we all concentrated on making gcc2 better than gcc1 could
ever be. This is the kind of step forward we wanted to make with the
EGCS project when it was formed in 1997.
In April 1999 the Free Software Foundation officially halted
In April 1999 the Free Software Foundation officially halted
development on the gcc2 compiler and appointed the EGCS project as the
official GCC maintainers. The net result was a single project which
carries forward GCC development under the ultimate control of the
official GCC maintainers. The net result was a single project which
carries forward GCC development under the ultimate control of the
[32]GCC Steering Committee.
_________________________________________________________________
What is an open development model?
We are using a bazaar style [33][1] approach to GCC development: we
make snapshots publicly available to anyone who wants to try them; we
welcome anyone to join the development mailing list. All of the
We are using a bazaar style [33][1] approach to GCC development: we
make snapshots publicly available to anyone who wants to try them; we
welcome anyone to join the development mailing list. All of the
discussions on the development mailing list are available via the web.
We're going to be making releases with a much higher frequency than
We're going to be making releases with a much higher frequency than
they have been made in the past.
In addition to weekly snapshots of the GCC development sources, we
have the sources readable from a CVS server by anyone. Furthermore we
are using remote CVS to allow remote maintainers write access to the
In addition to weekly snapshots of the GCC development sources, we
have the sources readable from a CVS server by anyone. Furthermore we
are using remote CVS to allow remote maintainers write access to the
sources.
There have been many potential GCC developers who were not able to
participate in GCC development in the past. We want these people to
help in any way they can; we ultimately want GCC to be the best
There have been many potential GCC developers who were not able to
participate in GCC development in the past. We want these people to
help in any way they can; we ultimately want GCC to be the best
compiler in the world.
A compiler is a complicated piece of software, there will still be
strong central maintainers who will reject patches, who will demand
documentation of implementations, and who will keep the level of
quality as high as it is today. Code that could use wider testing may
A compiler is a complicated piece of software, there will still be
strong central maintainers who will reject patches, who will demand
documentation of implementations, and who will keep the level of
quality as high as it is today. Code that could use wider testing may
be integrated--code that is simply ill-conceived won't be.
GCC is not the first piece of software to use this open development
process; FreeBSD, the Emacs lisp repository, and the Linux kernel are
GCC is not the first piece of software to use this open development
process; FreeBSD, the Emacs lisp repository, and the Linux kernel are
a few examples of the bazaar style of development.
With GCC, we are adding new features and optimizations at a rate that
has not been done since the creation of gcc2; these additions
inevitably have a temporarily destabilizing effect. With the help of
developers working together with this bazaar style development, the
resulting stability and quality levels will be better than we've had
With GCC, we are adding new features and optimizations at a rate that
has not been done since the creation of gcc2; these additions
inevitably have a temporarily destabilizing effect. With the help of
developers working together with this bazaar style development, the
resulting stability and quality levels will be better than we've had
before.
[1] We've been discussing different development models a lot over
[1] We've been discussing different development models a lot over
the past few months. The paper which started all of this introduced
two terms: A cathedral development model versus a bazaar
development model. The paper is written by Eric S. Raymond, it is
called ``The Cathedral and the Bazaar''. The paper is a useful
two terms: A cathedral development model versus a bazaar
development model. The paper is written by Eric S. Raymond, it is
called ``The Cathedral and the Bazaar''. The paper is a useful
starting point for discussions.
_________________________________________________________________
How do I get a bug fixed or a feature added?
There are lots of ways to get something fixed. The list below may be
incomplete, but it covers many of the common cases. These are listed
roughly in order of decreasing difficulty for the average GCC user,
meaning someone who is not skilled in the internals of GCC, and where
difficulty is measured in terms of the time required to fix the bug.
No alternative is better than any other; each has its benefits and
There are lots of ways to get something fixed. The list below may be
incomplete, but it covers many of the common cases. These are listed
roughly in order of decreasing difficulty for the average GCC user,
meaning someone who is not skilled in the internals of GCC, and where
difficulty is measured in terms of the time required to fix the bug.
No alternative is better than any other; each has its benefits and
disadvantages.
* Fix it yourself. This alternative will probably bring results, if
you work hard enough, but will probably take a lot of time, and,
depending on the quality of your work and the perceived benefits
of your changes, your code may or may not ever make it into an
* Fix it yourself. This alternative will probably bring results, if
you work hard enough, but will probably take a lot of time, and,
depending on the quality of your work and the perceived benefits
of your changes, your code may or may not ever make it into an
official release of GCC.
* [34]Report the problem to the GCC bug tracking system and hope
that someone will be kind enough to fix it for you. While this is
certainly possible, and often happens, there is no guarantee that
it will. You should not expect the same response from this method
that you would see from a commercial support organization since
the people who read GCC bug reports, if they choose to help you,
* [34]Report the problem to the GCC bug tracking system and hope
that someone will be kind enough to fix it for you. While this is
certainly possible, and often happens, there is no guarantee that
it will. You should not expect the same response from this method
that you would see from a commercial support organization since
the people who read GCC bug reports, if they choose to help you,
will be volunteering their time.
* Hire someone to fix it for you. There are various companies and
individuals providing support for GCC. This alternative costs
* Hire someone to fix it for you. There are various companies and
individuals providing support for GCC. This alternative costs
money, but is relatively likely to get results.
_________________________________________________________________
Does GCC work on my platform?
The host/target specific installation notes for GCC include
information about known problems with installing or using GCC on
particular platforms. These are included in the sources for a release
in INSTALL/specific.html, and the [35]latest version is always
available at the GCC web site. Reports of [36]successful builds for
The host/target specific installation notes for GCC include
information about known problems with installing or using GCC on
particular platforms. These are included in the sources for a release
in INSTALL/specific.html, and the [35]latest version is always
available at the GCC web site. Reports of [36]successful builds for
several versions of GCC are also available at the web site.
_________________________________________________________________
@ -150,51 +150,51 @@ Does GCC work on my platform?
How to install multiple versions of GCC
It may be desirable to install multiple versions of the compiler on
the same system. This can be done by using different prefix paths at
It may be desirable to install multiple versions of the compiler on
the same system. This can be done by using different prefix paths at
configure time and a few symlinks.
Basically, configure the two compilers with different --prefix
options, then build and install each compiler. Assume you want "gcc"
Basically, configure the two compilers with different --prefix
options, then build and install each compiler. Assume you want "gcc"
to be the latest compiler and available in /usr/local/bin; also assume
that you want "gcc2" to be the older gcc2 compiler and also available
that you want "gcc2" to be the older gcc2 compiler and also available
in /usr/local/bin.
The easiest way to do this is to configure the new GCC with
--prefix=/usr/local/gcc and the older gcc2 with
--prefix=/usr/local/gcc2. Build and install both compilers. Then make
a symlink from /usr/local/bin/gcc to /usr/local/gcc/bin/gcc and from
/usr/local/bin/gcc2 to /usr/local/gcc2/bin/gcc. Create similar links
The easiest way to do this is to configure the new GCC with
--prefix=/usr/local/gcc and the older gcc2 with
--prefix=/usr/local/gcc2. Build and install both compilers. Then make
a symlink from /usr/local/bin/gcc to /usr/local/gcc/bin/gcc and from
/usr/local/bin/gcc2 to /usr/local/gcc2/bin/gcc. Create similar links
for the "g++", "c++" and "g77" compiler drivers.
An alternative to using symlinks is to configure with a
--program-transform-name option. This option specifies a sed command
to process installed program names with. Using it you can, for
An alternative to using symlinks is to configure with a
--program-transform-name option. This option specifies a sed command
to process installed program names with. Using it you can, for
instance, have all the new GCC programs installed as "new-gcc" and the
like. You will still have to specify different --prefix options for
new GCC and old GCC, because it is only the executable program names
like. You will still have to specify different --prefix options for
new GCC and old GCC, because it is only the executable program names
that are transformed. The difference is that you (as administrator) do
not have to set up symlinks, but must specify additional directories
not have to set up symlinks, but must specify additional directories
in your (as a user) PATH. A complication with --program-transform-name
is that the sed command invariably contains characters significant to
the shell, and these have to be escaped correctly, also it is not
possible to use "^" or "$" in the command. Here is the option to
is that the sed command invariably contains characters significant to
the shell, and these have to be escaped correctly, also it is not
possible to use "^" or "$" in the command. Here is the option to
prefix "new-" to the new GCC installed programs:
--program-transform-name='s,\\\\(.*\\\\),new-\\\\1,'
With the above --prefix option, that will install the new GCC programs
into /usr/local/gcc/bin with names prefixed by "new-". You can use
--program-transform-name if you have multiple versions of GCC, and
into /usr/local/gcc/bin with names prefixed by "new-". You can use
--program-transform-name if you have multiple versions of GCC, and
wish to be sure about which version you are invoking.
If you use --prefix, GCC may have difficulty locating a GNU assembler
or linker on your system, [37]GCC can not find GNU as/GNU ld explains
If you use --prefix, GCC may have difficulty locating a GNU assembler
or linker on your system, [37]GCC can not find GNU as/GNU ld explains
how to deal with this.
Another option that may be easier is to use the --program-prefix= or
--program-suffix= options to configure. So if you're installing GCC
2.95.2 and don't want to disturb the current version of GCC in
Another option that may be easier is to use the --program-prefix= or
--program-suffix= options to configure. So if you're installing GCC
2.95.2 and don't want to disturb the current version of GCC in
/usr/local/bin/, you could do
configure --program-suffix=-2.95.2 <other configure options>
@ -206,88 +206,88 @@ How to install multiple versions of GCC
Dynamic linker is unable to find GCC libraries
This problem manifests itself by programs not finding shared libraries
they depend on when the programs are started. Note this problem often
manifests itself with failures in the libio/libstdc++ tests after
they depend on when the programs are started. Note this problem often
manifests itself with failures in the libio/libstdc++ tests after
configuring with --enable-shared and building GCC.
GCC does not specify a runpath so that the dynamic linker can find
GCC does not specify a runpath so that the dynamic linker can find
dynamic libraries at runtime.
The short explanation is that if you always pass a -R option to the
linker, then your programs become dependent on directories which may
The short explanation is that if you always pass a -R option to the
linker, then your programs become dependent on directories which may
be NFS mounted, and programs may hang unnecessarily when an NFS server
goes down.
The problem is not programs that do require the directories; those
programs are going to hang no matter what you do. The problem is
The problem is not programs that do require the directories; those
programs are going to hang no matter what you do. The problem is
programs that do not require the directories.
SunOS effectively always passed a -R option for every -L option; this
was a bad idea, and so it was removed for Solaris. We should not
SunOS effectively always passed a -R option for every -L option; this
was a bad idea, and so it was removed for Solaris. We should not
recreate it.
However, if you feel you really need such an option to be passed
automatically to the linker, you may add it to the GCC specs file.
This file can be found in the same directory that contains cc1 (run
However, if you feel you really need such an option to be passed
automatically to the linker, you may add it to the GCC specs file.
This file can be found in the same directory that contains cc1 (run
gcc -print-prog-name=cc1 to find it). You may add linker flags such as
-R or -rpath, depending on platform and linker, to the *link or *lib
-R or -rpath, depending on platform and linker, to the *link or *lib
specs.
Another alternative is to install a wrapper script around gcc, g++ or
ld that adds the appropriate directory to the environment variable
Another alternative is to install a wrapper script around gcc, g++ or
ld that adds the appropriate directory to the environment variable
LD_RUN_PATH or equivalent (again, it's platform-dependent).
Yet another option, that works on a few platforms, is to hard-code the
full pathname of the library into its soname. This can only be
accomplished by modifying the appropriate .ml file within
full pathname of the library into its soname. This can only be
accomplished by modifying the appropriate .ml file within
libstdc++/config (and also libg++/config, if you are building libg++),
so that $(libdir)/ appears just before the library name in -soname or
so that $(libdir)/ appears just before the library name in -soname or
-h options.
_________________________________________________________________
GCC can not find GNU as/GNU ld
GCC searches the PATH for an assembler and a loader, but it only does
GCC searches the PATH for an assembler and a loader, but it only does
so after searching a directory list hard-coded in the GCC executables.
Since, on most platforms, the hard-coded list includes directories in
which the system assembler and loader can be found, you may have to
take one of the following actions to arrange that GCC uses the GNU
Since, on most platforms, the hard-coded list includes directories in
which the system assembler and loader can be found, you may have to
take one of the following actions to arrange that GCC uses the GNU
versions of those programs.
To ensure that GCC finds the GNU assembler (the GNU loader), which are
required by [38]some configurations, you should configure these with
required by [38]some configurations, you should configure these with
the same --prefix option as you used for GCC. Then build & install GNU
as (GNU ld) and proceed with building GCC.
Another alternative is to create links to GNU as and ld in any of the
directories printed by the command `gcc -print-search-dirs | grep
'^programs:''. The link to `ld' should be named `real-ld' if `ld'
Another alternative is to create links to GNU as and ld in any of the
directories printed by the command `gcc -print-search-dirs | grep
'^programs:''. The link to `ld' should be named `real-ld' if `ld'
already exists. If such links do not exist while you're compiling GCC,
you may have to create them in the build directories too, within the
you may have to create them in the build directories too, within the
gcc directory and in all the gcc/stage* subdirectories.
GCC 2.95 allows you to specify the full pathname of the assembler and
GCC 2.95 allows you to specify the full pathname of the assembler and
the linker to use. The configure flags are `--with-as=/path/to/as' and
`--with-ld=/path/to/ld'. GCC will try to use these pathnames before
looking for `as' or `(real-)ld' in the standard search dirs. If, at
configure-time, the specified programs are found to be GNU utilities,
`--with-ld=/path/to/ld'. GCC will try to use these pathnames before
looking for `as' or `(real-)ld' in the standard search dirs. If, at
configure-time, the specified programs are found to be GNU utilities,
`--with-gnu-as' and `--with-gnu-ld' need not be used; these flags will
be auto-detected. One drawback of this option is that it won't allow
you to override the search path for assembler and linker with
be auto-detected. One drawback of this option is that it won't allow
you to override the search path for assembler and linker with
command-line options -B/path/ if the specified filenames exist.
_________________________________________________________________
cpp: Usage:... Error
If you get an error like this when building GCC (particularly when
building __mulsi3), then you likely have a problem with your
If you get an error like this when building GCC (particularly when
building __mulsi3), then you likely have a problem with your
environment variables.
cpp: Usage: /usr/lib/gcc-lib/i586-unknown-linux-gnulibc1/2.7.2.3/cpp
[switches] input output
First look for an explicit '.' in either LIBRARY_PATH or
GCC_EXEC_PREFIX from your environment. If you do not find an explicit
'.', look for an empty pathname in those variables. Note that ':' at
First look for an explicit '.' in either LIBRARY_PATH or
GCC_EXEC_PREFIX from your environment. If you do not find an explicit
'.', look for an empty pathname in those variables. Note that ':' at
either the start or end of these variables is an implicit '.' and will
cause problems.
@ -296,28 +296,28 @@ cpp: Usage:... Error
Optimizing the compiler itself
If you want to test a particular optimization option, it's useful to
try bootstrapping the compiler with that option turned on. For
If you want to test a particular optimization option, it's useful to
try bootstrapping the compiler with that option turned on. For
example, to test the -fssa option, you could bootstrap like this:
make BOOT_CFLAGS="-O2 -fssa" bootstrap
_________________________________________________________________
Why does libiconv get linked into jc1 on Solaris?
The Java front end requires iconv. If the compiler used to bootstrap
GCC finds libiconv (because the GNU version of libiconv has been
The Java front end requires iconv. If the compiler used to bootstrap
GCC finds libiconv (because the GNU version of libiconv has been
installed in the same prefix as the bootstrap compiler), but the newly
built GCC does not find the library (because it will be installed with
a different prefix), then a link-time error will occur when building
jc1. This problem does not show up so often on platforms that have
libiconv in a default location (like /usr/lib) because then both
compilers can find a library named libiconv, even though it is a
a different prefix), then a link-time error will occur when building
jc1. This problem does not show up so often on platforms that have
libiconv in a default location (like /usr/lib) because then both
compilers can find a library named libiconv, even though it is a
different library.
Using --disable-nls at configure-time does not prevent this problem
because jc1 uses iconv even in that case. Solutions include
temporarily removing the GNU libiconv, copying it to a default
location such as /usr/lib/, and using --enable-languages at
Using --disable-nls at configure-time does not prevent this problem
because jc1 uses iconv even in that case. Solutions include
temporarily removing the GNU libiconv, copying it to a default
location such as /usr/lib/, and using --enable-languages at
configure-time to disable Java.
_________________________________________________________________
@ -325,11 +325,11 @@ Why does libiconv get linked into jc1 on Solaris?
How do I pass flags like -fnew-abi to the testsuite?
If you invoke runtest directly, you can use the --tool_opts option,
If you invoke runtest directly, you can use the --tool_opts option,
e.g:
runtest --tool_opts "-fnew-abi -fno-honor-std" <other options>
Or, if you use make check you can use the make variable RUNTESTFLAGS,
Or, if you use make check you can use the make variable RUNTESTFLAGS,
e.g:
make RUNTESTFLAGS="--tool_opts '-fnew-abi -fno-honor-std'" check-g++
_________________________________________________________________
@ -340,11 +340,11 @@ How can I run the test suite with multiple options?
e.g:
runtest --target_board "unix{-fPIC,-fpic,}" <other options>
Or, if you use make check you can use the make variable RUNTESTFLAGS,
Or, if you use make check you can use the make variable RUNTESTFLAGS,
e.g:
make RUNTESTFLAGS="--target_board 'unix{-fPIC,-fpic,}'" check-gcc
Either of these examples will run the tests three times. Once with
Either of these examples will run the tests three times. Once with
-fPIC, once with -fpic, and once with no additional flags.
This technique is particularly useful on multilibbed targets.
@ -363,24 +363,24 @@ Is there a stringstream / sstream for GCC 2.95.2?
Friend Templates
In order to make a specialization of a template function a friend of a
(possibly template) class, you must explicitly state that the friend
function is a template, by appending angle brackets to its name, and
this template function must have been declared already. Here's an
(possibly template) class, you must explicitly state that the friend
function is a template, by appending angle brackets to its name, and
this template function must have been declared already. Here's an
example:
template <typename T> class foo {
friend void bar(foo<T>);
}
The above declaration declares a non-template function named bar, so
it must be explicitly defined for each specialization of foo. A
template definition of bar won't do, because it is unrelated with the
The above declaration declares a non-template function named bar, so
it must be explicitly defined for each specialization of foo. A
template definition of bar won't do, because it is unrelated with the
non-template declaration above. So you'd have to end up writing:
void bar(foo<int>) { /* ... */ }
void bar(foo<void>) { /* ... */ }
If you meant bar to be a template function, you should have
If you meant bar to be a template function, you should have
forward-declared it as follows. Note that, since the template function
declaration refers to the template class, the template class must be
declaration refers to the template class, the template class must be
forward-declared too:
template <typename T>
class foo;
@ -396,16 +396,16 @@ class foo {
template <typename T>
void bar(foo<T>) { /* ... */ }
In this case, the template argument list could be left empty, because
it can be implicitly deduced from the function arguments, but the
angle brackets must be present, otherwise the declaration will be
taken as a non-template function. Furthermore, in some cases, you may
have to explicitly specify the template arguments, to remove
In this case, the template argument list could be left empty, because
it can be implicitly deduced from the function arguments, but the
angle brackets must be present, otherwise the declaration will be
taken as a non-template function. Furthermore, in some cases, you may
have to explicitly specify the template arguments, to remove
ambiguity.
An error in the last public comment draft of the ANSI/ISO C++ Standard
and the fact that previous releases of GCC would accept such friend
declarations as template declarations has led people to believe that
and the fact that previous releases of GCC would accept such friend
declarations as template declarations has led people to believe that
the forward declaration was not necessary, but, according to the final
version of the Standard, it is.
_________________________________________________________________
@ -414,77 +414,77 @@ dynamic_cast, throw, typeid don't work with shared libraries
The new C++ ABI in the GCC 3.0 series uses address comparisons, rather
than string compares, to determine type equality. This leads to better
performance. Like other objects that have to be present in the final
executable, these std::typeinfo_t objects have what is called vague
linkage because they are not tightly bound to any one particular
translation unit (object file). The compiler has to emit them in any
translation unit that requires their presence, and then rely on the
linking and loading process to make sure that only one of them is
active in the final executable. With static linking all of these
symbols are resolved at link time, but with dynamic linking, further
performance. Like other objects that have to be present in the final
executable, these std::typeinfo_t objects have what is called vague
linkage because they are not tightly bound to any one particular
translation unit (object file). The compiler has to emit them in any
translation unit that requires their presence, and then rely on the
linking and loading process to make sure that only one of them is
active in the final executable. With static linking all of these
symbols are resolved at link time, but with dynamic linking, further
resolution occurs at load time. You have to ensure that objects within
a shared library are resolved against objects in the executable and
a shared library are resolved against objects in the executable and
other shared libraries.
* For a program which is linked against a shared library, no
* For a program which is linked against a shared library, no
additional precautions need taking.
* You cannot create a shared library with the "-Bsymbolic" option,
* You cannot create a shared library with the "-Bsymbolic" option,
as that prevents the resolution described above.
* If you use dlopen to explicitly load code from a shared library,
you must do several things. First, export global symbols from the
executable by linking it with the "-E" flag (you will have to
specify this as "-Wl,-E" if you are invoking the linker in the
usual manner from the compiler driver, g++). You must also make
the external symbols in the loaded library available for
subsequent libraries by providing the RTLD_GLOBAL flag to dlopen.
* If you use dlopen to explicitly load code from a shared library,
you must do several things. First, export global symbols from the
executable by linking it with the "-E" flag (you will have to
specify this as "-Wl,-E" if you are invoking the linker in the
usual manner from the compiler driver, g++). You must also make
the external symbols in the loaded library available for
subsequent libraries by providing the RTLD_GLOBAL flag to dlopen.
The symbol resolution can be immediate or lazy.
Template instantiations are another, user visible, case of objects
Template instantiations are another, user visible, case of objects
with vague linkage, which needs similar resolution. If you do not take
the above precautions, you may discover that a template instantiation
with the same argument list, but instantiated in multiple translation
units, has several addresses, depending in which translation unit the
address is taken. (This is not an exhaustive list of the kind of
objects which have vague linkage and are expected to be resolved
the above precautions, you may discover that a template instantiation
with the same argument list, but instantiated in multiple translation
units, has several addresses, depending in which translation unit the
address is taken. (This is not an exhaustive list of the kind of
objects which have vague linkage and are expected to be resolved
during linking & loading.)
If you are worried about different objects with the same name
colliding during the linking or loading process, then you should use
namespaces to disambiguate them. Giving distinct objects with global
linkage the same name is a violation of the One Definition Rule (ODR)
If you are worried about different objects with the same name
colliding during the linking or loading process, then you should use
namespaces to disambiguate them. Giving distinct objects with global
linkage the same name is a violation of the One Definition Rule (ODR)
[basic.def.odr].
For more details about the way that GCC implements these and other C++
features, please read the [40]ABI specification. Note the
std::typeinfo_t objects which must be resolved all begin with "_ZTS".
Refer to ld's documentation for a description of the "-E" &
features, please read the [40]ABI specification. Note the
std::typeinfo_t objects which must be resolved all begin with "_ZTS".
Refer to ld's documentation for a description of the "-E" &
"-Bsymbolic" flags.
_________________________________________________________________
Why do I need autoconf, bison, xgettext, automake, etc?
If you're using diffs up dated from one snapshot to the next, or if
you're using the CVS repository, you may need several additional
If you're using diffs up dated from one snapshot to the next, or if
you're using the CVS repository, you may need several additional
programs to build GCC.
These include, but are not necessarily limited to autoconf, automake,
These include, but are not necessarily limited to autoconf, automake,
bison, and xgettext.
This is necessary because neither diff nor cvs keep timestamps
correct. This causes problems for generated files as "make" may think
This is necessary because neither diff nor cvs keep timestamps
correct. This causes problems for generated files as "make" may think
those generated files are out of date and try to regenerate them.
An easy way to work around this problem is to use the gcc_update
script in the contrib subdirectory of GCC, which handles this
transparently without requiring installation of any additional tools.
An easy way to work around this problem is to use the gcc_update
script in the contrib subdirectory of GCC, which handles this
transparently without requiring installation of any additional tools.
(Note: Up to and including GCC 2.95 this script was called egcs_update
.)
When building from diffs or CVS or if you modified some sources, you
When building from diffs or CVS or if you modified some sources, you
may also need to obtain development versions of some GNU tools, as the
production versions do not necessarily handle all features needed to
production versions do not necessarily handle all features needed to
rebuild GCC.
In general, the current versions of these tools from
In general, the current versions of these tools from
[41]ftp://ftp.gnu.org/gnu/ will work. At present, Autoconf 2.50 is not
supported, and you will need to use Autoconf 2.13; work is in progress
to fix this problem. Also look at
@ -494,20 +494,20 @@ Why do I need autoconf, bison, xgettext, automake, etc?
Why can't I build a shared library?
When building a shared library you may get an error message from the
When building a shared library you may get an error message from the
linker like `assert pure-text failed:' or `DP relative code in file'.
This kind of error occurs when you've failed to provide proper flags
This kind of error occurs when you've failed to provide proper flags
to gcc when linking the shared library.
You can get this error even if all the .o files for the shared library
were compiled with the proper PIC option. When building a shared
library, gcc will compile additional code to be included in the
library. That additional code must also be compiled with the proper
were compiled with the proper PIC option. When building a shared
library, gcc will compile additional code to be included in the
library. That additional code must also be compiled with the proper
PIC option.
Adding the proper PIC option (-fpic or -fPIC) to the link line which
creates the shared library will fix this problem on targets that
Adding the proper PIC option (-fpic or -fPIC) to the link line which
creates the shared library will fix this problem on targets that
support PIC in this manner. For example:
gcc -c -fPIC myfile.c
gcc -shared -o libmyfile.so -fPIC myfile.o
@ -516,30 +516,30 @@ Why can't I build a shared library?
When building C++, the linker says my constructors, destructors or virtual
tables are undefined, but I defined them
The ISO C++ Standard specifies that all virtual methods of a class
that are not pure-virtual must be defined, but does not require any
diagnostic for violations of this rule [class.virtual]/8. Based on
this assumption, GCC will only emit the implicitly defined
constructors, the assignment operator, the destructor and the virtual
table of a class in the translation unit that defines its first such
The ISO C++ Standard specifies that all virtual methods of a class
that are not pure-virtual must be defined, but does not require any
diagnostic for violations of this rule [class.virtual]/8. Based on
this assumption, GCC will only emit the implicitly defined
constructors, the assignment operator, the destructor and the virtual
table of a class in the translation unit that defines its first such
non-inline method.
Therefore, if you fail to define this particular method, the linker
may complain about the lack of definitions for apparently unrelated
symbols. Unfortunately, in order to improve this error message, it
might be necessary to change the linker, and this can't always be
Therefore, if you fail to define this particular method, the linker
may complain about the lack of definitions for apparently unrelated
symbols. Unfortunately, in order to improve this error message, it
might be necessary to change the linker, and this can't always be
done.
The solution is to ensure that all virtual methods that are not pure
are defined. Note that a destructor must be defined even if it is
The solution is to ensure that all virtual methods that are not pure
are defined. Note that a destructor must be defined even if it is
declared pure-virtual [class.dtor]/7.
_________________________________________________________________
Will GCC someday include an incremental linker?
Incremental linking is part of the linker, not the compiler. As such,
Incremental linking is part of the linker, not the compiler. As such,
GCC doesn't have anything to do with incremental linking. Depending on
what platform you use, it may be possible to tell GCC to use the
what platform you use, it may be possible to tell GCC to use the
platform's native linker (e.g., Solaris' ild(1)).
References

View File

@ -1,3 +1,7 @@
2004-02-14 Release Manager
* GCC 3.3.3 Released.
2003-10-16 Release Manager
* GCC 3.3.2 Released.

View File

@ -1,3 +1,7 @@
2004-02-14 Release Manager
* GCC 3.3.3 Released.
2003-12-10 Kelley Cook <kcook@gcc.gnu.org>
* gcc_update (files_and_dependencies): Correct typo in the filename

View File

@ -1,3 +1,7 @@
2004-02-14 Release Manager
* GCC 3.3.3 Released.
2003-10-16 Release Manager
* GCC 3.3.2 Released.

View File

@ -1,3 +1,7 @@
2004-02-14 Release Manager
* GCC 3.3.3 Released.
2004-02-05 Giovanni Bajo <giovannibajo@gcc.gnu.org>
PR c++/13086

View File

@ -1,8 +1,8 @@
This is doc/cpp.info, produced by makeinfo version 4.2 from
doc/cpp.texi.
Ceci est le fichier Info doc/cpp.info, produit par Makeinfo version 4.6
à partir doc/cpp.texi.
Copyright (C) 1987, 1989, 1991, 1992, 1993, 1994, 1995, 1996, 1997,
1998, 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
1998, 1999, 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.1 or
@ -32,7 +32,7 @@ File: cpp.info, Node: Top, Next: Overview, Up: (dir)
The C preprocessor implements the macro language used to transform C,
The C preprocessor implements the macro language used to transform C,
C++, and Objective-C programs before they are compiled. It can also be
useful on its own.
@ -131,7 +131,7 @@ Obsolete Features
* Obsolete once-only headers::
Copyright (C) 1987, 1989, 1991, 1992, 1993, 1994, 1995, 1996, 1997,
1998, 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
1998, 1999, 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.1 or
@ -157,8 +157,8 @@ File: cpp.info, Node: Overview, Next: Header Files, Prev: Top, Up: Top
Overview
********
The C preprocessor, often known as "cpp", is a "macro processor"
that is used automatically by the C compiler to transform your program
The C preprocessor, often known as "cpp", is a "macro processor" that
is used automatically by the C compiler to transform your program
before compilation. It is called a macro processor because it allows
you to define "macros", which are brief abbreviations for longer
constructs.
@ -216,7 +216,7 @@ File: cpp.info, Node: Initial processing, Next: Tokenization, Up: Overview
Initial processing
==================
The preprocessor performs a series of textual transformations on its
The preprocessor performs a series of textual transformations on its
input. These happen before all other processing. Conceptually, they
happen in a rigid order, and the entire file is run through each
transformation before the next one begins. CPP actually does them all
@ -358,7 +358,7 @@ File: cpp.info, Node: Tokenization, Next: The preprocessing language, Prev: I
Tokenization
============
After the textual transformations are finished, the input file is
After the textual transformations are finished, the input file is
converted into a sequence of "preprocessing tokens". These mostly
correspond to the syntactic tokens used by the C compiler, but there are
a few differences. White space separates tokens; it is not itself a
@ -506,11 +506,11 @@ File: cpp.info, Node: The preprocessing language, Prev: Tokenization, Up: Ove
The preprocessing language
==========================
After tokenization, the stream of tokens may simply be passed
straight to the compiler's parser. However, if it contains any
operations in the "preprocessing language", it will be transformed
first. This stage corresponds roughly to the standard's "translation
phase 4" and is what most people think of as the preprocessor's job.
After tokenization, the stream of tokens may simply be passed straight
to the compiler's parser. However, if it contains any operations in the
"preprocessing language", it will be transformed first. This stage
corresponds roughly to the standard's "translation phase 4" and is what
most people think of as the preprocessor's job.
The preprocessing language consists of "directives" to be executed
and "macros" to be expanded. Its primary capabilities are:
@ -569,10 +569,10 @@ File: cpp.info, Node: Header Files, Next: Macros, Prev: Overview, Up: Top
Header Files
************
A header file is a file containing C declarations and macro
definitions (*note Macros::) to be shared between several source files.
You request the use of a header file in your program by "including"
it, with the C preprocessing directive `#include'.
A header file is a file containing C declarations and macro definitions
(*note Macros::) to be shared between several source files. You request
the use of a header file in your program by "including" it, with the C
preprocessing directive `#include'.
Header files serve two purposes.
@ -617,8 +617,8 @@ File: cpp.info, Node: Include Syntax, Next: Include Operation, Up: Header Fil
Include Syntax
==============
Both user and system header files are included using the
preprocessing directive `#include'. It has two variants:
Both user and system header files are included using the preprocessing
directive `#include'. It has two variants:
`#include <FILE>'
This variant is used for system header files. It searches for a
@ -653,8 +653,8 @@ File: cpp.info, Node: Include Operation, Next: Search Path, Prev: Include Syn
Include Operation
=================
The `#include' directive works by directing the C preprocessor to
scan the specified file as input before continuing with the rest of the
The `#include' directive works by directing the C preprocessor to scan
the specified file as input before continuing with the rest of the
current file. The output from the preprocessor contains the output
already generated, followed by the output resulting from the included
file, followed by the output that comes from the text after the
@ -711,7 +711,7 @@ File: cpp.info, Node: Search Path, Next: Once-Only Headers, Prev: Include Ope
Search Path
===========
GCC looks in several different places for headers. On a normal Unix
GCC looks in several different places for headers. On a normal Unix
system, if you do not instruct it otherwise, it will look for headers
requested with `#include <FILE>' in:
@ -779,10 +779,10 @@ File: cpp.info, Node: Once-Only Headers, Next: Computed Includes, Prev: Searc
Once-Only Headers
=================
If a header file happens to be included twice, the compiler will
process its contents twice. This is very likely to cause an error,
e.g. when the compiler sees the same structure definition twice. Even
if it does not, it will certainly waste time.
If a header file happens to be included twice, the compiler will process
its contents twice. This is very likely to cause an error, e.g. when
the compiler sees the same structure definition twice. Even if it does
not, it will certainly waste time.
The standard way to prevent this is to enclose the entire real
contents of the file in a conditional, like this:
@ -821,7 +821,7 @@ File: cpp.info, Node: Computed Includes, Next: Wrapper Headers, Prev: Once-On
Computed Includes
=================
Sometimes it is necessary to select one of several different header
Sometimes it is necessary to select one of several different header
files to be included into your program. They might specify
configuration parameters to be used on different sorts of operating
systems, for instance. You could do this with a series of conditionals,
@ -895,7 +895,7 @@ File: cpp.info, Node: Wrapper Headers, Next: System Headers, Prev: Computed I
Wrapper Headers
===============
Sometimes it is necessary to adjust the contents of a system-provided
Sometimes it is necessary to adjust the contents of a system-provided
header file without editing it directly. GCC's `fixincludes' operation
does this, for example. One way to do that would be to create a new
header file with the same name and insert it in the search path before
@ -946,7 +946,7 @@ File: cpp.info, Node: System Headers, Prev: Wrapper Headers, Up: Header Files
System Headers
==============
The header files declaring interfaces to the operating system and
The header files declaring interfaces to the operating system and
runtime libraries often cannot be written in strictly conforming C.
Therefore, GCC gives code found in "system headers" special treatment.
All warnings, other than those generated by `#warning' (*note
@ -989,11 +989,11 @@ File: cpp.info, Node: Macros, Next: Conditionals, Prev: Header Files, Up: To
Macros
******
A "macro" is a fragment of code which has been given a name.
Whenever the name is used, it is replaced by the contents of the macro.
There are two kinds of macros. They differ mostly in what they look
like when they are used. "Object-like" macros resemble data objects
when used, "function-like" macros resemble function calls.
A "macro" is a fragment of code which has been given a name. Whenever
the name is used, it is replaced by the contents of the macro. There
are two kinds of macros. They differ mostly in what they look like
when they are used. "Object-like" macros resemble data objects when
used, "function-like" macros resemble function calls.
You may define any valid identifier as a macro, even if it is a C
keyword. The preprocessor does not know anything about keywords. This
@ -1022,9 +1022,9 @@ File: cpp.info, Node: Object-like Macros, Next: Function-like Macros, Up: Mac
Object-like Macros
==================
An "object-like macro" is a simple identifier which will be replaced
by a code fragment. It is called object-like because it looks like a
data object in code that uses it. They are most commonly used to give
An "object-like macro" is a simple identifier which will be replaced by
a code fragment. It is called object-like because it looks like a data
object in code that uses it. They are most commonly used to give
symbolic names to numeric constants.
You create macros with the `#define' directive. `#define' is
@ -1124,10 +1124,10 @@ File: cpp.info, Node: Function-like Macros, Next: Macro Arguments, Prev: Obje
Function-like Macros
====================
You can also define macros whose use looks like a function call.
These are called "function-like macros". To define a function-like
macro, you use the same `#define' directive, but you put a pair of
parentheses immediately after the macro name. For example,
You can also define macros whose use looks like a function call. These
are called "function-like macros". To define a function-like macro,
you use the same `#define' directive, but you put a pair of parentheses
immediately after the macro name. For example,
#define lang_init() c_init()
lang_init()
@ -1168,7 +1168,7 @@ File: cpp.info, Node: Macro Arguments, Next: Stringification, Prev: Function-
Macro Arguments
===============
Function-like macros can take "arguments", just like true functions.
Function-like macros can take "arguments", just like true functions.
To define a macro that uses arguments, you insert "parameters" between
the pair of parentheses in the macro definition that make the macro
function-like. The parameters must be valid C identifiers, separated
@ -1261,7 +1261,7 @@ File: cpp.info, Node: Stringification, Next: Concatenation, Prev: Macro Argum
Stringification
===============
Sometimes you may want to convert a macro argument into a string
Sometimes you may want to convert a macro argument into a string
constant. Parameters are not replaced inside string constants, but you
can use the `#' preprocessing operator instead. When a macro parameter
is used with a leading `#', the preprocessor replaces it with the
@ -1339,9 +1339,9 @@ File: cpp.info, Node: Concatenation, Next: Variadic Macros, Prev: Stringifica
Concatenation
=============
It is often useful to merge two tokens into one while expanding
macros. This is called "token pasting" or "token concatenation". The
`##' preprocessing operator performs token pasting. When a macro is
It is often useful to merge two tokens into one while expanding macros.
This is called "token pasting" or "token concatenation". The `##'
preprocessing operator performs token pasting. When a macro is
expanded, the two tokens on either side of each `##' operator are
combined into a single token, which then replaces the `##' and the two
original tokens in the macro expansion. Usually both will be
@ -1413,9 +1413,9 @@ File: cpp.info, Node: Variadic Macros, Next: Predefined Macros, Prev: Concate
Variadic Macros
===============
A macro can be declared to accept a variable number of arguments
much as a function can. The syntax for defining the macro is similar
to that of a function. Here is an example:
A macro can be declared to accept a variable number of arguments much as
a function can. The syntax for defining the macro is similar to that of
a function. Here is an example:
#define eprintf(...) fprintf (stderr, __VA_ARGS__)
@ -1518,7 +1518,7 @@ File: cpp.info, Node: Predefined Macros, Next: Undefining and Redefining Macro
Predefined Macros
=================
Several object-like macros are predefined; you use them without
Several object-like macros are predefined; you use them without
supplying their definitions. They fall into three classes: standard,
common, and system-specific.
@ -1538,10 +1538,10 @@ File: cpp.info, Node: Standard Predefined Macros, Next: Common Predefined Macr
Standard Predefined Macros
--------------------------
The standard predefined macros are specified by the relevant
language standards, so they are available with all compilers that
implement those standards. Older compilers may not provide all of
them. Their names all start with double underscores.
The standard predefined macros are specified by the relevant language
standards, so they are available with all compilers that implement
those standards. Older compilers may not provide all of them. Their
names all start with double underscores.
`__FILE__'
This macro expands to the name of the current input file, in the
@ -1662,15 +1662,16 @@ with `__FILE__' and `__LINE__', though.
This macro is defined with value 1 when preprocessing assembly
language.

File: cpp.info, Node: Common Predefined Macros, Next: System-specific Predefined Macros, Prev: Standard Predefined Macros, Up: Predefined Macros
Common Predefined Macros
------------------------
The common predefined macros are GNU C extensions. They are
available with the same meanings regardless of the machine or operating
system on which you are using GNU C. Their names all start with double
The common predefined macros are GNU C extensions. They are available
with the same meanings regardless of the machine or operating system on
which you are using GNU C. Their names all start with double
underscores.
`__GNUC__'
@ -1836,7 +1837,6 @@ underscores.
being used.
`__LP64__'
`_LP64'
These macros are defined, with value 1, if (and only if) the
compilation is for a target where `long int' and pointer both use
@ -1848,11 +1848,11 @@ File: cpp.info, Node: System-specific Predefined Macros, Next: C++ Named Opera
System-specific Predefined Macros
---------------------------------
The C preprocessor normally predefines several macros that indicate
what type of system and machine is in use. They are obviously
different on each target supported by GCC. This manual, being for all
systems and machines, cannot tell you what their names are, but you can
use `cpp -dM' to see them all. *Note Invocation::. All system-specific
The C preprocessor normally predefines several macros that indicate what
type of system and machine is in use. They are obviously different on
each target supported by GCC. This manual, being for all systems and
machines, cannot tell you what their names are, but you can use `cpp
-dM' to see them all. *Note Invocation::. All system-specific
predefined macros expand to the constant 1, so you can test them with
either `#ifdef' or `#if'.
@ -1886,13 +1886,13 @@ File: cpp.info, Node: C++ Named Operators, Prev: System-specific Predefined Ma
C++ Named Operators
-------------------
In C++, there are eleven keywords which are simply alternate
spellings of operators normally written with punctuation. These
keywords are treated as such even in the preprocessor. They function
as operators in `#if', and they cannot be defined as macros or
poisoned. In C, you can request that those keywords take their C++
meaning by including `iso646.h'. That header defines each one as a
normal object-like macro expanding to the appropriate punctuator.
In C++, there are eleven keywords which are simply alternate spellings
of operators normally written with punctuation. These keywords are
treated as such even in the preprocessor. They function as operators in
`#if', and they cannot be defined as macros or poisoned. In C, you can
request that those keywords take their C++ meaning by including
`iso646.h'. That header defines each one as a normal object-like macro
expanding to the appropriate punctuator.
These are the named operators and their corresponding punctuators:
@ -1915,9 +1915,9 @@ File: cpp.info, Node: Undefining and Redefining Macros, Next: Directives Withi
Undefining and Redefining Macros
================================
If a macro ceases to be useful, it may be "undefined" with the
`#undef' directive. `#undef' takes a single argument, the name of the
macro to undefine. You use the bare macro name, even if the macro is
If a macro ceases to be useful, it may be "undefined" with the `#undef'
directive. `#undef' takes a single argument, the name of the macro to
undefine. You use the bare macro name, even if the macro is
function-like. It is an error if anything appears on the line after
the macro name. `#undef' has no effect if the name is not a macro.
@ -1967,9 +1967,9 @@ File: cpp.info, Node: Directives Within Macro Arguments, Next: Macro Pitfalls,
Directives Within Macro Arguments
=================================
Occasionally it is convenient to use preprocessor directives within
the arguments of a macro. The C and C++ standards declare that
behavior in these cases is undefined.
Occasionally it is convenient to use preprocessor directives within the
arguments of a macro. The C and C++ standards declare that behavior in
these cases is undefined.
Versions of CPP prior to 3.2 would reject such constructs with an
error message. This was the only syntactic difference between normal
@ -2007,8 +2007,8 @@ File: cpp.info, Node: Macro Pitfalls, Prev: Directives Within Macro Arguments,
Macro Pitfalls
==============
In this section we describe some special rules that apply to macros
and macro expansion, and point out certain cases in which the rules have
In this section we describe some special rules that apply to macros and
macro expansion, and point out certain cases in which the rules have
counter-intuitive consequences that you must watch out for.
* Menu:
@ -2027,7 +2027,7 @@ File: cpp.info, Node: Misnesting, Next: Operator Precedence Problems, Up: Mac
Misnesting
----------
When a macro is called with arguments, the arguments are substituted
When a macro is called with arguments, the arguments are substituted
into the macro body and the result is checked, together with the rest of
the input file, for more macro calls. It is possible to piece together
a macro call coming partially from the macro body and partially from the
@ -2059,11 +2059,11 @@ File: cpp.info, Node: Operator Precedence Problems, Next: Swallowing the Semic
Operator Precedence Problems
----------------------------
You may have noticed that in most of the macro definition examples
shown above, each occurrence of a macro argument name had parentheses
around it. In addition, another pair of parentheses usually surround
the entire macro definition. Here is why it is best to write macros
that way.
You may have noticed that in most of the macro definition examples shown
above, each occurrence of a macro argument name had parentheses around
it. In addition, another pair of parentheses usually surround the
entire macro definition. Here is why it is best to write macros that
way.
Suppose you define a macro as follows,
@ -2113,7 +2113,7 @@ File: cpp.info, Node: Swallowing the Semicolon, Next: Duplication of Side Effe
Swallowing the Semicolon
------------------------
Often it is desirable to define a macro that expands into a compound
Often it is desirable to define a macro that expands into a compound
statement. Consider, for example, the following macro, that advances a
pointer (the argument `p' says where to find it) across whitespace
characters:
@ -2169,7 +2169,7 @@ File: cpp.info, Node: Duplication of Side Effects, Next: Self-Referential Macr
Duplication of Side Effects
---------------------------
Many C programs define a macro `min', for "minimum", like this:
Many C programs define a macro `min', for "minimum", like this:
#define min(X, Y) ((X) < (Y) ? (X) : (Y))
@ -2228,12 +2228,12 @@ File: cpp.info, Node: Self-Referential Macros, Next: Argument Prescan, Prev:
Self-Referential Macros
-----------------------
A "self-referential" macro is one whose name appears in its
definition. Recall that all macro definitions are rescanned for more
macros to replace. If the self-reference were considered a use of the
macro, it would produce an infinitely large expansion. To prevent this,
the self-reference is not considered a macro call. It is passed into
the preprocessor output unchanged. Let's consider an example:
A "self-referential" macro is one whose name appears in its definition.
Recall that all macro definitions are rescanned for more macros to
replace. If the self-reference were considered a use of the macro, it
would produce an infinitely large expansion. To prevent this, the
self-reference is not considered a macro call. It is passed into the
preprocessor output unchanged. Let's consider an example:
#define foo (4 + foo)
@ -2289,7 +2289,7 @@ File: cpp.info, Node: Argument Prescan, Next: Newlines in Arguments, Prev: Se
Argument Prescan
----------------
Macro arguments are completely macro-expanded before they are
Macro arguments are completely macro-expanded before they are
substituted into a macro body, unless they are stringified or pasted
with other tokens. After substitution, the entire macro body, including
the substituted arguments, is scanned again for macros to be expanded.
@ -2376,7 +2376,7 @@ File: cpp.info, Node: Newlines in Arguments, Prev: Argument Prescan, Up: Macr
Newlines in Arguments
---------------------
The invocation of a function-like macro can extend over many logical
The invocation of a function-like macro can extend over many logical
lines. However, in the present implementation, the entire expansion
comes out on one line. Thus line numbers emitted by the compiler or
debugger refer to the line the invocation started on, which might be
@ -2402,7 +2402,7 @@ File: cpp.info, Node: Conditionals, Next: Diagnostics, Prev: Macros, Up: Top
Conditionals
************
A "conditional" is a directive that instructs the preprocessor to
A "conditional" is a directive that instructs the preprocessor to
select whether or not to include a chunk of code in the final token
stream passed to the compiler. Preprocessor conditionals can test
arithmetic expressions, or whether a name is defined as a macro, or both
@ -2443,7 +2443,7 @@ File: cpp.info, Node: Conditional Uses, Next: Conditional Syntax, Up: Conditi
Conditional Uses
================
There are three general reasons to use a conditional.
There are three general reasons to use a conditional.
* A program may need to use different code depending on the machine
or operating system it is to run on. In some cases the code for
@ -2474,7 +2474,7 @@ File: cpp.info, Node: Conditional Syntax, Next: Deleted Code, Prev: Condition
Conditional Syntax
==================
A conditional in the C preprocessor begins with a "conditional
A conditional in the C preprocessor begins with a "conditional
directive": `#if', `#ifdef' or `#ifndef'.
* Menu:
@ -2491,7 +2491,7 @@ File: cpp.info, Node: Ifdef, Next: If, Up: Conditional Syntax
Ifdef
-----
The simplest sort of conditional is
The simplest sort of conditional is
#ifdef MACRO
@ -2563,7 +2563,7 @@ File: cpp.info, Node: If, Next: Defined, Prev: Ifdef, Up: Conditional Syntax
If
--
The `#if' directive allows you to test the value of an arithmetic
The `#if' directive allows you to test the value of an arithmetic
expression, rather than the mere existence of one macro. Its syntax is
#if EXPRESSION
@ -2624,11 +2624,11 @@ File: cpp.info, Node: Defined, Next: Else, Prev: If, Up: Conditional Syntax
Defined
-------
The special operator `defined' is used in `#if' and `#elif'
expressions to test whether a certain name is defined as a macro.
`defined NAME' and `defined (NAME)' are both expressions whose value is
1 if NAME is defined as a macro at the current point in the program,
and 0 otherwise. Thus, `#if defined MACRO' is precisely equivalent to
The special operator `defined' is used in `#if' and `#elif' expressions
to test whether a certain name is defined as a macro. `defined NAME'
and `defined (NAME)' are both expressions whose value is 1 if NAME is
defined as a macro at the current point in the program, and 0
otherwise. Thus, `#if defined MACRO' is precisely equivalent to
`#ifdef MACRO'.
`defined' is useful when you wish to test more than one macro for
@ -2659,7 +2659,7 @@ File: cpp.info, Node: Else, Next: Elif, Prev: Defined, Up: Conditional Synta
Else
----
The `#else' directive can be added to a conditional to provide
The `#else' directive can be added to a conditional to provide
alternative text to be used if the condition fails. This is what it
looks like:
@ -2680,8 +2680,8 @@ File: cpp.info, Node: Elif, Prev: Else, Up: Conditional Syntax
Elif
----
One common case of nested conditionals is used to check for more
than two possible alternatives. For example, you might have
One common case of nested conditionals is used to check for more than
two possible alternatives. For example, you might have
#if X == 1
...
@ -2725,8 +2725,8 @@ File: cpp.info, Node: Deleted Code, Prev: Conditional Syntax, Up: Conditional
Deleted Code
============
If you replace or delete a part of the program but want to keep the
old code around for future reference, you often cannot simply comment it
If you replace or delete a part of the program but want to keep the old
code around for future reference, you often cannot simply comment it
out. Block comments do not nest, so the first comment inside the old
code will end the commenting-out. The probable result is a flood of
syntax errors.
@ -2753,9 +2753,9 @@ File: cpp.info, Node: Diagnostics, Next: Line Control, Prev: Conditionals, U
Diagnostics
***********
The directive `#error' causes the preprocessor to report a fatal
error. The tokens forming the rest of the line following `#error' are
used as the error message.
The directive `#error' causes the preprocessor to report a fatal error.
The tokens forming the rest of the line following `#error' are used as
the error message.
You would use `#error' inside of a conditional that detects a
combination of parameters which you know the program does not properly
@ -2793,12 +2793,11 @@ File: cpp.info, Node: Line Control, Next: Pragmas, Prev: Diagnostics, Up: To
Line Control
************
The C preprocessor informs the C compiler of the location in your
source code where each token came from. Presently, this is just the
file name and line number. All the tokens resulting from macro
expansion are reported as having appeared on the line of the source
file where the outermost macro was used. We intend to be more accurate
in the future.
The C preprocessor informs the C compiler of the location in your source
code where each token came from. Presently, this is just the file name
and line number. All the tokens resulting from macro expansion are
reported as having appeared on the line of the source file where the
outermost macro was used. We intend to be more accurate in the future.
If you write a program which generates source code, such as the
`bison' parser generator, you may want to adjust the preprocessor's
@ -2872,8 +2871,8 @@ File: cpp.info, Node: Pragmas, Next: Other Directives, Prev: Line Control, U
Pragmas
*******
The `#pragma' directive is the method specified by the C standard
for providing additional information to the compiler, beyond what is
The `#pragma' directive is the method specified by the C standard for
providing additional information to the compiler, beyond what is
conveyed in the language itself. Three forms of this directive
(commonly known as "pragmas") are specified by the 1999 C standard. A
C compiler is free to attach any meaning it likes to other pragmas.
@ -2963,15 +2962,16 @@ compilers. They are documented in the GCC manual.
the current file to be treated as if it came from a system header.
*Note System Headers::.

File: cpp.info, Node: Other Directives, Next: Preprocessor Output, Prev: Pragmas, Up: Top
Other Directives
****************
The `#ident' directive takes one argument, a string constant. On
some systems, that string constant is copied into a special segment of
the object file. On other systems, the directive is ignored.
The `#ident' directive takes one argument, a string constant. On some
systems, that string constant is copied into a special segment of the
object file. On other systems, the directive is ignored.
This directive is not part of the C standard, but it is not an
official GNU extension either. We believe it came from System V.
@ -2995,7 +2995,7 @@ File: cpp.info, Node: Preprocessor Output, Next: Traditional Mode, Prev: Othe
Preprocessor Output
*******************
When the C preprocessor is used with the C, C++, or Objective-C
When the C preprocessor is used with the C, C++, or Objective-C
compilers, it is integrated into the compiler and communicates a stream
of binary tokens directly to the compiler's parser. However, it can
also be used in the more conventional standalone mode, where it produces
@ -3068,8 +3068,8 @@ File: cpp.info, Node: Traditional Mode, Next: Implementation Details, Prev: P
Traditional Mode
****************
Traditional (pre-standard) C preprocessing is rather different from
the preprocessing specified by the standard. When GCC is given the
Traditional (pre-standard) C preprocessing is rather different from the
preprocessing specified by the standard. When GCC is given the
`-traditional-cpp' option, it attempts to emulate a traditional
preprocessor.
@ -3097,7 +3097,7 @@ File: cpp.info, Node: Traditional lexical analysis, Next: Traditional macros,
Traditional lexical analysis
============================
The traditional preprocessor does not decompose its input into tokens
The traditional preprocessor does not decompose its input into tokens
the same way a standards-conforming preprocessor does. The input is
simply treated as a stream of text with minimal internal form.
@ -3159,7 +3159,7 @@ File: cpp.info, Node: Traditional macros, Next: Traditional miscellany, Prev:
Traditional macros
==================
The major difference between traditional and ISO macros is that the
The major difference between traditional and ISO macros is that the
former expand to text rather than to a token sequence. CPP removes all
leading and trailing horizontal whitespace from a macro's replacement
text before storing it, but preserves the form of internal whitespace.
@ -3245,7 +3245,7 @@ File: cpp.info, Node: Traditional miscellany, Next: Traditional warnings, Pre
Traditional miscellany
======================
Here are some things to be aware of when using the traditional
Here are some things to be aware of when using the traditional
preprocessor.
* Preprocessing directives are recognized only when their leading
@ -3273,7 +3273,7 @@ File: cpp.info, Node: Traditional warnings, Prev: Traditional miscellany, Up:
Traditional warnings
====================
You can request warnings about features that did not exist, or worked
You can request warnings about features that did not exist, or worked
differently, in traditional C with the `-Wtraditional' option. GCC
does not warn about features of ISO C which you must use when you are
using a conforming compiler, such as the `#' and `##' operators.
@ -3319,7 +3319,7 @@ File: cpp.info, Node: Implementation Details, Next: Invocation, Prev: Traditi
Implementation Details
**********************
Here we document details of how the preprocessor's implementation
Here we document details of how the preprocessor's implementation
affects its user-visible behavior. You should try to avoid undue
reliance on behavior described here, as it is possible that it will
change subtly in future implementations.
@ -3340,10 +3340,10 @@ File: cpp.info, Node: Implementation-defined behavior, Next: Implementation li
Implementation-defined behavior
===============================
This is how CPP behaves in all the cases which the C standard
describes as "implementation-defined". This term means that the
implementation is free to do what it likes, but must document its choice
and stick to it.
This is how CPP behaves in all the cases which the C standard describes
as "implementation-defined". This term means that the implementation
is free to do what it likes, but must document its choice and stick to
it.
* The mapping of physical source file multi-byte characters to the
execution character set.
@ -3408,7 +3408,7 @@ File: cpp.info, Node: Implementation limits, Next: Obsolete Features, Prev: I
Implementation limits
=====================
CPP has a small number of internal limits. This section lists the
CPP has a small number of internal limits. This section lists the
limits which the C standard requires to be no lower than some minimum,
and all the others we are aware of. We intend there to be as few limits
as possible. If you encounter an undocumented or inconvenient limit,
@ -3475,9 +3475,9 @@ File: cpp.info, Node: Obsolete Features, Next: Differences from previous versi
Obsolete Features
=================
CPP has a number of features which are present mainly for
compatibility with older programs. We discourage their use in new code.
In some cases, we plan to remove the feature in a future version of GCC.
CPP has a number of features which are present mainly for compatibility
with older programs. We discourage their use in new code. In some
cases, we plan to remove the feature in a future version of GCC.
* Menu:
@ -3490,7 +3490,7 @@ File: cpp.info, Node: Assertions, Next: Obsolete once-only headers, Up: Obsol
Assertions
----------
"Assertions" are a deprecated alternative to macros in writing
"Assertions" are a deprecated alternative to macros in writing
conditionals to test what sort of computer or system the compiled
program will run on. Assertions are usually predefined, but you can
define them with preprocessing directives or command-line options.
@ -3556,7 +3556,7 @@ File: cpp.info, Node: Obsolete once-only headers, Prev: Assertions, Up: Obsol
Obsolete once-only headers
--------------------------
CPP supports two more ways of indicating that a header file should be
CPP supports two more ways of indicating that a header file should be
read only once. Neither one is as portable as a wrapper `#ifndef', and
we recommend you do not use them in new programs.
@ -3594,9 +3594,9 @@ File: cpp.info, Node: Differences from previous versions, Prev: Obsolete Featu
Differences from previous versions
==================================
This section details behavior which has changed from previous
versions of CPP. We do not plan to change it again in the near future,
but we do not promise not to, either.
This section details behavior which has changed from previous versions
of CPP. We do not plan to change it again in the near future, but we
do not promise not to, either.
The "previous versions" discussed here are 2.95 and before. The
behavior of GCC 3.0 is mostly the same as the behavior of the widely
@ -3681,12 +3681,12 @@ File: cpp.info, Node: Invocation, Next: Environment Variables, Prev: Implemen
Invocation
**********
Most often when you use the C preprocessor you will not have to
invoke it explicitly: the C compiler will do so automatically.
However, the preprocessor is sometimes useful on its own. All the
options listed here are also acceptable to the C compiler and have the
same meaning, except that the C compiler has different rules for
specifying the output file.
Most often when you use the C preprocessor you will not have to invoke
it explicitly: the C compiler will do so automatically. However, the
preprocessor is sometimes useful on its own. All the options listed
here are also acceptable to the C compiler and have the same meaning,
except that the C compiler has different rules for specifying the output
file.
*Note:* Whether you use the preprocessor by way of `gcc' or `cpp',
the "compiler driver" is run first. This program's purpose is to
@ -4209,7 +4209,7 @@ File: cpp.info, Node: Environment Variables, Next: GNU Free Documentation Lice
Environment Variables
*********************
This section describes the environment variables that affect how CPP
This section describes the environment variables that affect how CPP
operates. You can use them to specify directories or prefixes to use
when searching for include files, or to control dependency output.
@ -4672,7 +4672,7 @@ GNU Free Documentation License
ADDENDUM: How to use this License for your documents
====================================================
To use this License in a document you have written, include a copy of
To use this License in a document you have written, include a copy of
the License in the document and put the following copyright and license
notices just after the title page:
@ -4926,75 +4926,75 @@ Concept Index

Tag Table:
Node: Top1016
Node: Overview2808
Node: Initial processing6434
Ref: trigraphs8552
Node: Tokenization12658
Ref: Tokenization-Footnote-119707
Node: The preprocessing language19818
Node: Header Files22691
Node: Include Syntax24569
Node: Include Operation26071
Node: Search Path27924
Node: Once-Only Headers31001
Node: Computed Includes32651
Node: Wrapper Headers35790
Node: System Headers38209
Node: Macros40254
Node: Object-like Macros41392
Node: Function-like Macros44978
Node: Macro Arguments46588
Node: Stringification50733
Node: Concatenation53934
Node: Variadic Macros57048
Node: Predefined Macros61830
Node: Standard Predefined Macros62413
Node: Common Predefined Macros68319
Node: System-specific Predefined Macros76155
Node: C++ Named Operators78167
Node: Undefining and Redefining Macros79122
Node: Directives Within Macro Arguments81219
Node: Macro Pitfalls82762
Node: Misnesting83288
Node: Operator Precedence Problems84389
Node: Swallowing the Semicolon86244
Node: Duplication of Side Effects88256
Node: Self-Referential Macros90428
Node: Argument Prescan92838
Node: Newlines in Arguments96581
Node: Conditionals97526
Node: Conditional Uses99355
Node: Conditional Syntax100708
Node: Ifdef101023
Node: If104185
Node: Defined106598
Node: Else107871
Node: Elif108432
Node: Deleted Code109712
Node: Diagnostics110954
Node: Line Control112571
Node: Pragmas116374
Node: Other Directives120642
Node: Preprocessor Output121834
Node: Traditional Mode125034
Node: Traditional lexical analysis126089
Node: Traditional macros128585
Node: Traditional miscellany132379
Node: Traditional warnings133369
Node: Implementation Details135559
Node: Implementation-defined behavior136177
Node: Implementation limits138851
Node: Obsolete Features141542
Node: Assertions141989
Node: Obsolete once-only headers144519
Node: Differences from previous versions146243
Node: Invocation150315
Ref: -MF158911
Node: Environment Variables171572
Node: GNU Free Documentation License174525
Node: Index of Directives196955
Node: Option Index198335
Node: Concept Index202086
Node: Top1043
Node: Overview3663
Node: Initial processing6461
Ref: trigraphs8576
Node: Tokenization12682
Ref: Tokenization-Footnote-119728
Node: The preprocessing language19839
Node: Header Files22709
Node: Include Syntax24585
Node: Include Operation26084
Node: Search Path27934
Node: Once-Only Headers31008
Node: Computed Includes32655
Node: Wrapper Headers35791
Node: System Headers38207
Node: Macros40249
Node: Object-like Macros41386
Node: Function-like Macros44969
Node: Macro Arguments46577
Node: Stringification50719
Node: Concatenation53917
Node: Variadic Macros57027
Node: Predefined Macros61806
Node: Standard Predefined Macros62386
Node: Common Predefined Macros68290
Node: System-specific Predefined Macros76122
Node: C++ Named Operators78131
Node: Undefining and Redefining Macros79083
Node: Directives Within Macro Arguments81177
Node: Macro Pitfalls82717
Node: Misnesting83240
Node: Operator Precedence Problems84338
Node: Swallowing the Semicolon86190
Node: Duplication of Side Effects88199
Node: Self-Referential Macros90368
Node: Argument Prescan92774
Node: Newlines in Arguments96514
Node: Conditionals97456
Node: Conditional Uses99282
Node: Conditional Syntax100632
Node: Ifdef100944
Node: If104103
Node: Defined106513
Node: Else107784
Node: Elif108342
Node: Deleted Code109619
Node: Diagnostics110858
Node: Line Control112471
Node: Pragmas116271
Node: Other Directives120537
Node: Preprocessor Output121726
Node: Traditional Mode124923
Node: Traditional lexical analysis125975
Node: Traditional macros128468
Node: Traditional miscellany132259
Node: Traditional warnings133246
Node: Implementation Details135433
Node: Implementation-defined behavior136048
Node: Implementation limits138719
Node: Obsolete Features141407
Node: Assertions141852
Node: Obsolete once-only headers144379
Node: Differences from previous versions146100
Node: Invocation150169
Ref: -MF158763
Node: Environment Variables171424
Node: GNU Free Documentation License174374
Node: Index of Directives196801
Node: Option Index198181
Node: Concept Index201932

End Tag Table

View File

@ -1,5 +1,5 @@
This is doc/cppinternals.info, produced by makeinfo version 4.2 from
doc/cppinternals.texi.
Ceci est le fichier Info doc/cppinternals.info, produit par Makeinfo
version 4.6 à partir doc/cppinternals.texi.
INFO-DIR-SECTION Programming
START-INFO-DIR-ENTRY
@ -31,8 +31,8 @@ File: cppinternals.info, Node: Top, Next: Conventions, Up: (dir)
Cpplib--the GNU C Preprocessor
******************************
The GNU C preprocessor in GCC 3.x has been completely rewritten. It
is now implemented as a library, "cpplib", so it can be easily shared
The GNU C preprocessor in GCC 3.x has been completely rewritten. It is
now implemented as a library, "cpplib", so it can be easily shared
between a stand-alone preprocessor, and a preprocessor integrated with
the C, C++ and Objective-C front ends. It is also available for use by
other programs, though this is not recommended as its exposed interface
@ -68,7 +68,7 @@ File: cppinternals.info, Node: Conventions, Next: Lexer, Prev: Top, Up: Top
Conventions
***********
cpplib has two interfaces--one is exposed internally only, and the
cpplib has two interfaces--one is exposed internally only, and the
other is for both internal and external use.
The convention is that functions and types that are exposed to
@ -94,7 +94,7 @@ The Lexer
Overview
========
The lexer is contained in the file `cpplex.c'. It is a hand-coded
The lexer is contained in the file `cpplex.c'. It is a hand-coded
lexer, and not implemented as a state machine. It can understand C, C++
and Objective-C source code, and has been extended to allow reasonably
successful preprocessing of assembly language. The lexer does not make
@ -113,10 +113,10 @@ generating diagnostics, and for emitting the preprocessed output.
Lexing a token
==============
Lexing of an individual token is handled by `_cpp_lex_direct' and
its subroutines. In its current form the code is quite complicated,
with read ahead characters and such-like, since it strives to not step
back in the character stream in preparation for handling non-ASCII file
Lexing of an individual token is handled by `_cpp_lex_direct' and its
subroutines. In its current form the code is quite complicated, with
read ahead characters and such-like, since it strives to not step back
in the character stream in preparation for handling non-ASCII file
encodings. The current plan is to convert any such files to UTF-8
before processing them. This complexity is therefore unnecessary and
will be removed, so I'll not discuss it further here.
@ -277,7 +277,7 @@ program calls cpp_destroy, probably at the end of the translation unit.
Lexing a line
=============
When the preprocessor was changed to return pointers to tokens, one
When the preprocessor was changed to return pointers to tokens, one
feature I wanted was some sort of guarantee regarding how long a
returned pointer remains valid. This is important to the stand-alone
preprocessor, the future direction of the C family front ends, and even
@ -365,12 +365,12 @@ File: cppinternals.info, Node: Hash Nodes, Next: Macro Expansion, Prev: Lexer
Hash Nodes
**********
When cpplib encounters an "identifier", it generates a hash code for
it and stores it in the hash table. By "identifier" we mean tokens
with type `CPP_NAME'; this includes identifiers in the usual C sense,
as well as keywords, directive names, macro names and so on. For
example, all of `pragma', `int', `foo' and `__GNUC__' are identifiers
and hashed when lexed.
When cpplib encounters an "identifier", it generates a hash code for it
and stores it in the hash table. By "identifier" we mean tokens with
type `CPP_NAME'; this includes identifiers in the usual C sense, as
well as keywords, directive names, macro names and so on. For example,
all of `pragma', `int', `foo' and `__GNUC__' are identifiers and hashed
when lexed.
Each node in the hash table contain various information about the
identifier it represents. For example, its length and type. At any one
@ -426,10 +426,9 @@ File: cppinternals.info, Node: Macro Expansion, Next: Token Spacing, Prev: Ha
Macro Expansion Algorithm
*************************
Macro expansion is a tricky operation, fraught with nasty corner
cases and situations that render what you thought was a nifty way to
optimize the preprocessor's expansion algorithm wrong in quite subtle
ways.
Macro expansion is a tricky operation, fraught with nasty corner cases
and situations that render what you thought was a nifty way to optimize
the preprocessor's expansion algorithm wrong in quite subtle ways.
I strongly recommend you have a good grasp of how the C and C++
standards require macros to be expanded before diving into this
@ -440,8 +439,8 @@ pasting are supposed to work, damage to your sanity can quickly result.
Internal representation of macros
=================================
The preprocessor stores macro expansions in tokenized form. This
saves repeated lexing passes during expansion, at the cost of a small
The preprocessor stores macro expansions in tokenized form. This saves
repeated lexing passes during expansion, at the cost of a small
increase in memory consumption on average. The tokens are stored
contiguously in memory, so a pointer to the first one and a token count
is all you need to get the replacement list of a macro.
@ -461,9 +460,9 @@ changed.
Macro expansion overview
========================
The preprocessor maintains a "context stack", implemented as a
linked list of `cpp_context' structures, which together represent the
macro expansion state at any one time. The `struct cpp_reader' member
The preprocessor maintains a "context stack", implemented as a linked
list of `cpp_context' structures, which together represent the macro
expansion state at any one time. The `struct cpp_reader' member
variable `context' points to the current top of this stack. The top
normally holds the unexpanded replacement list of the innermost macro
under expansion, except when cpplib is about to pre-expand an argument,
@ -506,7 +505,7 @@ being expanded.
Scanning the replacement list for macros to expand
==================================================
The C standard states that, after any parameters have been replaced
The C standard states that, after any parameters have been replaced
with their possibly-expanded arguments, the replacement list is scanned
for nested macros. Further, any identifiers in the replacement list
that are not expanded during this scan are never again eligible for
@ -556,7 +555,7 @@ it a second time.
Looking for a function-like macro's opening parenthesis
=======================================================
Function-like macros only expand when immediately followed by a
Function-like macros only expand when immediately followed by a
parenthesis. To do this cpplib needs to temporarily disable macros and
read the next token. Unfortunately, because of spacing issues (*note
Token Spacing::), there can be fake padding tokens in-between, and if
@ -576,7 +575,7 @@ context just containing the padding information if necessary.
Marking tokens ineligible for future expansion
==============================================
As discussed above, cpplib needs a way of marking tokens as
As discussed above, cpplib needs a way of marking tokens as
unexpandable. Since the tokens cpplib handles are read-only once they
have been lexed, it instead makes a copy of the token and adds the flag
`NO_EXPAND' to the copy.
@ -599,7 +598,7 @@ File: cppinternals.info, Node: Token Spacing, Next: Line Numbering, Prev: Mac
Token Spacing
*************
First, let's look at an issue that only concerns the stand-alone
First, let's look at an issue that only concerns the stand-alone
preprocessor: we want to guarantee that re-reading its preprocessed
output results in an identical token stream. Without taking special
measures, this might not be the case because of macro substitution.
@ -730,8 +729,8 @@ Line numbering
Just which line number anyway?
==============================
There are three reasonable requirements a cpplib client might have
for the line number of a token passed to it:
There are three reasonable requirements a cpplib client might have for
the line number of a token passed to it:
* The source line it was lexed on.
@ -786,10 +785,10 @@ produce correct output.
Representation of line numbers
==============================
As mentioned above, cpplib stores with each token the line number
that it was lexed on. In fact, this number is not the number of the
line in the source file, but instead bears more resemblance to the
number of the line in the translation unit.
As mentioned above, cpplib stores with each token the line number that
it was lexed on. In fact, this number is not the number of the line in
the source file, but instead bears more resemblance to the number of the
line in the translation unit.
The preprocessor maintains a monotonic increasing line count, which
is incremented at every new line character (and also at the end of any
@ -817,7 +816,7 @@ File: cppinternals.info, Node: Guard Macros, Next: Files, Prev: Line Numberin
The Multiple-Include Optimization
*********************************
Header files are often of the form
Header files are often of the form
#ifndef FOO
#define FOO
@ -923,10 +922,10 @@ File: cppinternals.info, Node: Files, Next: Index, Prev: Guard Macros, Up: T
File Handling
*************
Fairly obviously, the file handling code of cpplib resides in the
file `cppfiles.c'. It takes care of the details of file searching,
opening, reading and caching, for both the main source file and all the
headers it recursively includes.
Fairly obviously, the file handling code of cpplib resides in the file
`cppfiles.c'. It takes care of the details of file searching, opening,
reading and caching, for both the main source file and all the headers
it recursively includes.
The basic strategy is to minimize the number of system calls. On
many systems, the basic `open ()' and `fstat ()' system calls can be
@ -1018,17 +1017,17 @@ Index

Tag Table:
Node: Top910
Node: Conventions2579
Node: Lexer3523
Ref: Invalid identifiers11446
Ref: Lexing a line13395
Node: Hash Nodes18168
Node: Macro Expansion21050
Node: Token Spacing30015
Node: Line Numbering35897
Node: Guard Macros39988
Node: Files44786
Node: Index48250
Node: Top931
Node: Conventions2597
Node: Lexer3538
Ref: Invalid identifiers11455
Ref: Lexing a line13404
Node: Hash Nodes18174
Node: Macro Expansion21053
Node: Token Spacing30000
Node: Line Numbering35879
Node: Guard Macros39964
Node: Files44759
Node: Index48220

End Tag Table

File diff suppressed because it is too large Load Diff

View File

@ -1,5 +1,5 @@
This is doc/gccinstall.info, produced by makeinfo version 4.2 from
doc/install.texi.
Ceci est le fichier Info doc/gccinstall.info, produit par Makeinfo
version 4.6 à partir doc/install.texi.
Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
@ -206,8 +206,8 @@ Target specification
Options specification
=====================
Use OPTIONS to override several configure time options for GCC. A
list of supported OPTIONS follows; `configure --help' may list other
Use OPTIONS to override several configure time options for GCC. A list
of supported OPTIONS follows; `configure --help' may list other
options, but those not listed below may not work and should not
normally be used.
@ -263,6 +263,7 @@ normally be used.
Specify the installation directory for G++ header files. The
default is `PREFIX/include/g++-v3'.
`--program-prefix=PREFIX'
GCC supports some transformations of the names of its programs when
installing them. This option prepends PREFIX to the names of
@ -521,6 +522,7 @@ normally be used.
aix64, pthread, softfloat, powercpu, powerpccpu, powerpcos,
biendian, sysv, aix.
`--enable-threads'
Specify that the target supports threads. This affects the
Objective-C compiler and runtime library, and exception handling
@ -704,7 +706,6 @@ normally be used.
and `valgrind' are very expensive.
`--enable-coverage'
`--enable-coverage=LEVEL'
With this option, the compiler is built to collect self coverage
information, every time it is run. This is for internal development
@ -753,24 +754,37 @@ normally be used.
someone steps forward to maintain the port.
Some options which only apply to building cross compilers:
`--with-sysroot'
`--with-sysroot=DIR'
Tells GCC to consider DIR as the root of a tree that contains a
(subset of) the root filesystem of the target operating system.
Target system headers, libraries and run-time object files will be
searched in there. The specified directory is not copied into the
install tree, unlike the options `--with-headers' and
`--with-libs' that this option obsoletes. The default value, in
case `--with-sysroot' is not given an argument, is
`${gcc_tooldir}/sys-root'. If the specified directory is a
subdirectory of `${exec_prefix}', then it will be found relative to
the GCC binaries if the installation tree is moved.
`--with-headers'
`--with-headers=DIR'
Specifies that target headers are available when building a cross
compiler. The DIR argument specifies a directory which has the
target include files. These include files will be copied into the
`gcc' install directory. _This option with the DIR argument is
required_ when building a cross compiler, if
`PREFIX/TARGET/sys-include' doesn't pre-exist. If
`PREFIX/TARGET/sys-include' does pre-exist, the DIR argument may
be omitted. `fixincludes' will be run on these files to make them
compatible with GCC.
Deprecated in favor of `--with-sysroot'. Specifies that target
headers are available when building a cross compiler. The DIR
argument specifies a directory which has the target include files.
These include files will be copied into the `gcc' install
directory. _This option with the DIR argument is required_ when
building a cross compiler, if `PREFIX/TARGET/sys-include' doesn't
pre-exist. If `PREFIX/TARGET/sys-include' does pre-exist, the DIR
argument may be omitted. `fixincludes' will be run on these files
to make them compatible with GCC.
`--with-libs'
`--with-libs=``DIR1 DIR2 ... DIRN'''
Specifies a list of directories which contain the target runtime
libraries. These libraries will be copied into the `gcc' install
directory. If the directory list is omitted, this option has no
effect.
Deprecated in favor of `--with-sysroot'. Specifies a list of
directories which contain the target runtime libraries. These
libraries will be copied into the `gcc' install directory. If the
directory list is omitted, this option has no effect.
`--with-newlib'
Specifies that `newlib' is being used as the target C library.
@ -839,8 +853,8 @@ documentation pre-built for the unmodified documentation in the release.
Building a native compiler
==========================
For a native build issue the command `make bootstrap'. This will
build the entire GCC system, which includes the following steps:
For a native build issue the command `make bootstrap'. This will build
the entire GCC system, which includes the following steps:
* Build host tools necessary to build the compiler such as texinfo,
bison, gperf.
@ -900,7 +914,7 @@ need to disable comparison in the `Makefile'.)
Building a cross compiler
=========================
We recommend reading the crossgcc FAQ for information about building
We recommend reading the crossgcc FAQ for information about building
cross compilers.
When building a cross compiler, it is not generally possible to do a
@ -933,9 +947,9 @@ performs the following steps:
Building in parallel
====================
You can use `make bootstrap MAKE="make -j 2" -j 2', or just `make -j
2 bootstrap' for GNU Make 3.79 and above, instead of `make bootstrap'
to build GCC in parallel. You can also specify a bigger number, and in
You can use `make bootstrap MAKE="make -j 2" -j 2', or just `make -j 2
bootstrap' for GNU Make 3.79 and above, instead of `make bootstrap' to
build GCC in parallel. You can also specify a bigger number, and in
most cases using a value greater than the number of processors in your
machine will result in fewer and shorter I/O latency hits, thus
improving overall throughput; this is especially true for slow drives
@ -944,7 +958,7 @@ and network filesystems.
Building the Ada compiler
=========================
In order to build GNAT, the Ada compiler, you need a working GNAT
In order to build GNAT, the Ada compiler, you need a working GNAT
compiler (GNAT version 3.13 or later, or GCC version 3.1 or later),
since the Ada front end is written in Ada (with some GNAT-specific
extensions), and GNU make.
@ -1039,7 +1053,7 @@ can be ignored.
How can I run the test suite on selected tests?
===============================================
In order to run sets of tests selectively, there are targets `make
In order to run sets of tests selectively, there are targets `make
check-gcc' and `make check-g++' in the `gcc' subdirectory of the object
directory. You can also just run `make check' in a subdirectory of the
object directory.
@ -1066,7 +1080,7 @@ files, pipe the output of `make check' into a file and look at the
Additional testing for Java Class Libraries
===========================================
The Mauve Project provides a suite of tests for the Java Class
The Mauve Project provides a suite of tests for the Java Class
Libraries. This suite can be run as part of libgcj testing by placing
the Mauve tree within the libjava testsuite at
`libjava/testsuite/libjava.mauve/mauve', or by specifying the location
@ -1080,7 +1094,7 @@ tree within the libjava testsuite at
How to interpret test results
=============================
The result of running the testsuite are various `*.sum' and `*.log'
The result of running the testsuite are various `*.sum' and `*.log'
files in the testsuite subdirectories. The `*.log' files contain a
detailed log of the compiler invocations and the corresponding results,
the `*.sum' files summarize the results. These summaries contain
@ -1108,7 +1122,7 @@ problem in future releases.
Submitting test results
=======================
If you want to report the results to the GCC project, use the
If you want to report the results to the GCC project, use the
`contrib/test_summary' shell script. Start it in the OBJDIR with
SRCDIR/contrib/test_summary -p your_commentary.txt \
@ -1293,7 +1307,7 @@ Compiler Collection on your machine.
alpha*-*-*
==========
This section contains general configuration information for all
This section contains general configuration information for all
alpha-based platforms using ELF (in particular, ignore this section for
DEC OSF/1, Digital UNIX and Tru64 UNIX). In addition to reading this
section, please read all other sections that match your target.
@ -1305,8 +1319,8 @@ of which is incorrect linking of shared libraries.
alpha*-dec-osf*
===============
Systems using processors that implement the DEC Alpha architecture
and are running the DEC/Compaq Unix (DEC OSF/1, Digital UNIX, or Compaq
Systems using processors that implement the DEC Alpha architecture and
are running the DEC/Compaq Unix (DEC OSF/1, Digital UNIX, or Compaq
Tru64 UNIX) operating system, for example the DEC Alpha AXP systems.
As of GCC 3.2, versions before `alpha*-dec-osf4' are no longer
@ -1383,7 +1397,7 @@ provide a fix shortly.
alphaev5-cray-unicosmk*
=======================
Cray T3E systems running Unicos/Mk.
Cray T3E systems running Unicos/Mk.
This port is incomplete and has many known bugs. We hope to improve
the support for this target soon. Currently, only the C front end is
@ -1407,13 +1421,13 @@ failure.
arc-*-elf
=========
Argonaut ARC processor. This configuration is intended for embedded
Argonaut ARC processor. This configuration is intended for embedded
systems.
arm-*-aout
==========
This configuration is obsoleted in GCC 3.3.
This configuration is obsoleted in GCC 3.3.
Advanced RISC Machines ARM-family processors. These are often used
in embedded applications. There are no standard Unix configurations.
@ -1426,17 +1440,17 @@ particular configuration.
arm-*-elf
=========
This configuration is intended for embedded systems.
This configuration is intended for embedded systems.
arm*-*-linux-gnu
================
We require GNU binutils 2.10 or newer.
We require GNU binutils 2.10 or newer.
avr
===
ATMEL AVR-family micro controllers. These are used in embedded
ATMEL AVR-family micro controllers. These are used in embedded
applications. There are no standard Unix configurations. *Note AVR
Options: (gcc)AVR Options, for the list of supported MCU types.
@ -1461,9 +1475,9 @@ tools can also be obtained from:
c4x
===
Texas Instruments TMS320C3x and TMS320C4x Floating Point Digital
Signal Processors. These are used in embedded applications. There are
no standard Unix configurations. *Note TMS320C3x/C4x Options:
Texas Instruments TMS320C3x and TMS320C4x Floating Point Digital Signal
Processors. These are used in embedded applications. There are no
standard Unix configurations. *Note TMS320C3x/C4x Options:
(gcc)TMS320C3x/C4x Options, for the list of supported MCU types.
GCC can be configured as a cross compiler for both the C3x and C4x
@ -1478,7 +1492,7 @@ tools can also be obtained from:
CRIS
====
CRIS is the CPU architecture in Axis Communications ETRAX
CRIS is the CPU architecture in Axis Communications ETRAX
system-on-a-chip series. These are used in embedded applications.
*Note CRIS Options: (gcc)CRIS Options, for a list of CRIS-specific
@ -1508,7 +1522,7 @@ information about this platform is available at
DOS
===
Please have a look at our binaries page.
Please have a look at our binaries page.
You cannot install GCC by itself on MSDOS; it will not compile under
any MSDOS compiler except itself. You need to get the complete
@ -1518,15 +1532,14 @@ and includes all the necessary compilation tools and libraries.
dsp16xx
=======
A port to the AT&T DSP1610 family of processors.
A port to the AT&T DSP1610 family of processors.
*-*-freebsd*
============
The version of binutils installed in `/usr/bin' is known to work
unless otherwise specified in any per-architecture notes. However,
binutils 2.12.1 or greater is known to improve overall testsuite
results.
The version of binutils installed in `/usr/bin' is known to work unless
otherwise specified in any per-architecture notes. However, binutils
2.12.1 or greater is known to improve overall testsuite results.
Support for FreeBSD 1 was discontinued in GCC 3.2.
@ -1566,7 +1579,7 @@ least, both boehm-gc and libffi.
h8300-hms
=========
Renesas H8/300 series of processors.
Renesas H8/300 series of processors.
Please have a look at our binaries page.
@ -1578,7 +1591,7 @@ are no longer a multiple of 2 bytes.
hppa*-hp-hpux*
==============
Support for HP-UX versions 7, 8, and 9 is obsoleted in GCC 3.3.
Support for HP-UX versions 7, 8, and 9 is obsoleted in GCC 3.3.
We _highly_ recommend using gas/binutils 2.8 or newer on all hppa
platforms; you may encounter a variety of problems when using the HP
@ -1610,7 +1623,7 @@ default scheduling model is desired.
hppa*-hp-hpux9
==============
Support for this system is obsoleted in GCC 3.3.
Support for this system is obsoleted in GCC 3.3.
The HP assembler has major problems on this platform. We've tried
to work around the worst of the problems. However, those workarounds
@ -1625,7 +1638,7 @@ and `SHELL' to `/bin/ksh' in your environment.
hppa*-hp-hpux10
===============
For hpux10.20, we _highly_ recommend you pick up the latest sed patch
For hpux10.20, we _highly_ recommend you pick up the latest sed patch
`PHCO_19798' from HP. HP has two sites which provide patches free of
charge:
@ -1644,10 +1657,10 @@ be able to continue by saying `make all' after getting the failure from
hppa*-hp-hpux11
===============
GCC 3.0 and up support HP-UX 11. On 64-bit capable systems, there
are two distinct ports. The `hppa2.0w-hp-hpux11*' port generates code
for the 32-bit pa-risc runtime architecture. It uses the HP linker.
The `hppa64-hp-hpux11*' port generates 64-bit code for the pa-risc 2.0
GCC 3.0 and up support HP-UX 11. On 64-bit capable systems, there are
two distinct ports. The `hppa2.0w-hp-hpux11*' port generates code for
the 32-bit pa-risc runtime architecture. It uses the HP linker. The
`hppa64-hp-hpux11*' port generates 64-bit code for the pa-risc 2.0
architecture. The script config.guess now selects the port type based
on the type compiler detected during configuration. You must set your
`PATH' or define `CC' so that configure finds an appropriate compiler
@ -1735,13 +1748,13 @@ between traditional and ISO C.
i370-*-*
========
This port is very preliminary and has many known bugs. We hope to
have a higher-quality port for this machine soon.
This port is very preliminary and has many known bugs. We hope to have
a higher-quality port for this machine soon.
*-*-linux-gnu
=============
Versions of libstdc++-v3 starting with 3.2.1 require bugfixes present
Versions of libstdc++-v3 starting with 3.2.1 require bugfixes present
in glibc 2.2.5 and later. More information is available in the
libstdc++-v3 documentation.
@ -1762,15 +1775,15 @@ You can use glibc 2.2.3 with GCC 3.0, just do not try to recompile it.
i?86-*-linux*aout
=================
Use this configuration to generate `a.out' binaries on Linux-based
GNU systems. This configuration is being superseded. You must use
Use this configuration to generate `a.out' binaries on Linux-based GNU
systems. This configuration is being superseded. You must use
gas/binutils version 2.5.2 or later.
i?86-*-linux*
=============
As of GCC 3.3, binutils 2.13.1 or later is required for this
platform. See bug 10877 for more information.
As of GCC 3.3, binutils 2.13.1 or later is required for this platform.
See bug 10877 for more information.
If you receive Signal 11 errors when building on GNU/Linux, then it
is possible you have a hardware problem. Further information on this
@ -1779,14 +1792,13 @@ can be found on www.bitwizard.nl.
i?86-*-sco
==========
Compilation with RCC is recommended. Also, it may be a good idea to
Compilation with RCC is recommended. Also, it may be a good idea to
link with GNU malloc instead of the malloc that comes with the system.
i?86-*-sco3.2v5*
================
Use this for the SCO OpenServer Release 5 family of operating
systems.
Use this for the SCO OpenServer Release 5 family of operating systems.
Unlike earlier versions of GCC, the ability to generate COFF with
this target is no longer provided.
@ -1828,8 +1840,8 @@ for bootstrapping this version.
i?86-*-udk
==========
This target emulates the SCO Universal Development Kit and requires
that package be installed. (If it is installed, you will have a
This target emulates the SCO Universal Development Kit and requires that
package be installed. (If it is installed, you will have a
`/udk/usr/ccs/bin/cc' file present.) It's very much like the
`i?86-*-unixware7*' target but is meant to be used when hosting on a
system where UDK isn't the default compiler such as OpenServer 5 or
@ -1858,7 +1870,7 @@ tools you may have installed.
ia64-*-linux
============
IA-64 processor (also known as IPF, or Itanium Processor Family)
IA-64 processor (also known as IPF, or Itanium Processor Family)
running GNU/Linux.
The toolchain is not completely finished, so requirements will
@ -1880,9 +1892,9 @@ are expected.
ia64-*-hpux*
============
Building GCC on this target requires the GNU Assembler. The bundled
HP assembler will not work. To prevent GCC from using the wrong
assembler, the option `--with-gnu-as' may be necessary.
Building GCC on this target requires the GNU Assembler. The bundled HP
assembler will not work. To prevent GCC from using the wrong assembler,
the option `--with-gnu-as' may be necessary.
The GCC libunwind library has not been ported to HPUX. This means
that for GCC versions 3.2.3 and earlier, `--enable-libunwind-exceptions'
@ -1891,7 +1903,7 @@ is required to build GCC. For GCC 3.3 and later, this is the default.
*-lynx-lynxos
=============
Support for SPARC LynxOS is obsoleted in GCC 3.3.
Support for SPARC LynxOS is obsoleted in GCC 3.3.
LynxOS 2.2 and earlier comes with GCC 1.x already installed as
`/bin/gcc'. You should compile with this instead of `/bin/cc'. You
@ -1903,7 +1915,7 @@ installed tools, which produce `a.out' format executables.
*-ibm-aix*
==========
Support for AIX versions 1, 2, and 3 is obsoleted in GCC 3.3.
Support for AIX versions 1, 2, and 3 is obsoleted in GCC 3.3.
AIX Make frequently has problems with GCC makefiles. GNU Make 3.76
or newer is recommended to build on this platform.
@ -2004,7 +2016,7 @@ using the configure option `--with-cpu-CPU_TYPE'.
ip2k-*-elf
==========
Ubicom IP2022 micro controller. This configuration is intended for
Ubicom IP2022 micro controller. This configuration is intended for
embedded systems. There are no standard Unix configurations.
Use `configure --target=ip2k-elf --enable-languages=c' to configure
@ -2013,13 +2025,13 @@ GCC.
m32r-*-elf
==========
Renesas M32R processor. This configuration is intended for embedded
Renesas M32R processor. This configuration is intended for embedded
systems.
m68000-hp-bsd
=============
Support for this system is obsoleted in GCC 3.3.
Support for this system is obsoleted in GCC 3.3.
HP 9000 series 200 running BSD. Note that the C compiler that comes
with this system cannot compile GCC; contact <law@cygnus.com> to get
@ -2028,19 +2040,19 @@ binaries of GCC for bootstrapping.
m6811-elf
=========
Motorola 68HC11 family micro controllers. These are used in embedded
Motorola 68HC11 family micro controllers. These are used in embedded
applications. There are no standard Unix configurations.
m6812-elf
=========
Motorola 68HC12 family micro controllers. These are used in embedded
Motorola 68HC12 family micro controllers. These are used in embedded
applications. There are no standard Unix configurations.
m68k-att-sysv
=============
Support for this system is obsoleted in GCC 3.3.
Support for this system is obsoleted in GCC 3.3.
AT&T 3b1, a.k.a. 7300 PC. This version of GCC cannot be compiled
with the system C compiler, which is too buggy. You will need to get a
@ -2051,7 +2063,7 @@ available from the OSU-CIS archive, at
m68k-crds-unos
==============
Support for this system is obsoleted in GCC 3.3.
Support for this system is obsoleted in GCC 3.3.
Use `configure unos' for building on Unos.
@ -2087,9 +2099,9 @@ library and linking from that library.
m68k-hp-hpux
============
HP 9000 series 300 or 400 running HP-UX. HP-UX version 8.0 has a
bug in the assembler that prevents compilation of GCC. This bug
manifests itself during the first stage of compilation, while building
HP 9000 series 300 or 400 running HP-UX. HP-UX version 8.0 has a bug in
the assembler that prevents compilation of GCC. This bug manifests
itself during the first stage of compilation, while building
`libgcc2.a':
_floatdisf
@ -2135,7 +2147,7 @@ script to look like:
m68k-ncr-*
==========
Support for this system is obsoleted in GCC 3.3.
Support for this system is obsoleted in GCC 3.3.
On the Tower models 4N0 and 6N0, by default a process is not allowed
to have more than one megabyte of memory. GCC cannot compile itself
@ -2149,7 +2161,7 @@ line to the configuration file:
m68k-sun
========
Support for this system is obsoleted in GCC 3.3.
Support for this system is obsoleted in GCC 3.3.
Sun 3. We do not provide a configuration file to use the Sun FPA by
default, because programs that establish signal handlers for floating
@ -2158,14 +2170,14 @@ point traps inherently cannot work with the FPA.
m68k-sun-sunos4.1.1
===================
Support for this system is obsoleted in GCC 3.3.
Support for this system is obsoleted in GCC 3.3.
It is reported that you may need the GNU assembler on this platform.
mips-*-*
========
If on a MIPS system you get an error message saying "does not have gp
If on a MIPS system you get an error message saying "does not have gp
sections for all it's [sic] sectons [sic]", don't worry about it. This
happens whenever you use GAS with the MIPS linker, but there is not
really anything wrong, and it is okay to use the output file. You can
@ -2184,8 +2196,8 @@ expected in future releases.
mips-sgi-irix5
==============
This configuration has considerable problems, which will be fixed in
a future release.
This configuration has considerable problems, which will be fixed in a
future release.
In order to compile GCC on an SGI running IRIX 5, the
"compiler_dev.hdr" subsystem must be installed from the IDO CD-ROM
@ -2224,10 +2236,10 @@ vendor supplied `make' program; however, you may have success with
mips-sgi-irix6
==============
If you are using IRIX `cc' as your bootstrap compiler, you must
ensure that the N32 ABI is in use. To test this, compile a simple C
file with `cc' and then run `file' on the resulting object file. The
output should look like:
If you are using IRIX `cc' as your bootstrap compiler, you must ensure
that the N32 ABI is in use. To test this, compile a simple C file with
`cc' and then run `file' on the resulting object file. The output
should look like:
test.o: ELF N32 MSB ...
@ -2310,13 +2322,13 @@ IRIX platforms.
powerpc-*-*
===========
You can specify a default version for the `-mcpu=CPU_TYPE' switch by
You can specify a default version for the `-mcpu=CPU_TYPE' switch by
using the configure option `--with-cpu-CPU_TYPE'.
powerpc-*-darwin*
=================
PowerPC running Darwin (Mac OS X kernel).
PowerPC running Darwin (Mac OS X kernel).
Pre-installed versions of Mac OS X may not include any developer
tools, meaning that you will not be able to build GCC from source. Tool
@ -2339,69 +2351,69 @@ are generally specific to Mac programming.
powerpc-*-elf, powerpc-*-sysv4
==============================
PowerPC system in big endian mode, running System V.4.
PowerPC system in big endian mode, running System V.4.
powerpc-*-linux-gnu*
====================
You will need binutils 2.13.90.0.10 or newer for a working GCC.
You will need binutils 2.13.90.0.10 or newer for a working GCC.
powerpc-*-netbsd*
=================
PowerPC system in big endian mode running NetBSD. To build the
PowerPC system in big endian mode running NetBSD. To build the
documentation you will need Texinfo version 4.2 (NetBSD 1.5.1 included
Texinfo version 3.12).
powerpc-*-eabiaix
=================
Embedded PowerPC system in big endian mode with `-mcall-aix'
selected as the default.
Embedded PowerPC system in big endian mode with `-mcall-aix' selected as
the default.
powerpc-*-eabisim
=================
Embedded PowerPC system in big endian mode for use in running under
the PSIM simulator.
Embedded PowerPC system in big endian mode for use in running under the
PSIM simulator.
powerpc-*-eabi
==============
Embedded PowerPC system in big endian mode.
Embedded PowerPC system in big endian mode.
powerpcle-*-elf, powerpcle-*-sysv4
==================================
PowerPC system in little endian mode, running System V.4.
PowerPC system in little endian mode, running System V.4.
powerpcle-*-eabisim
===================
Embedded PowerPC system in little endian mode for use in running
under the PSIM simulator.
Embedded PowerPC system in little endian mode for use in running under
the PSIM simulator.
powerpcle-*-eabi
================
Embedded PowerPC system in little endian mode.
Embedded PowerPC system in little endian mode.
s390-*-linux*
=============
S/390 system running Linux for S/390.
S/390 system running Linux for S/390.
s390x-*-linux*
==============
zSeries system (64-bit) running Linux for zSeries.
zSeries system (64-bit) running Linux for zSeries.
*-*-solaris2*
=============
Sun does not ship a C compiler with Solaris 2. To bootstrap and
install GCC you first have to install a pre-built compiler, see our
binaries page for details.
Sun does not ship a C compiler with Solaris 2. To bootstrap and install
GCC you first have to install a pre-built compiler, see our binaries
page for details.
The Solaris 2 `/bin/sh' will often fail to configure `libstdc++-v3',
`boehm-gc' or `libjava'. We therefore recommend to use the following
@ -2455,7 +2467,7 @@ defined by C89).
sparc-sun-solaris2*
===================
When GCC is configured to use binutils 2.11.2 or later the binaries
When GCC is configured to use binutils 2.11.2 or later the binaries
produced are smaller than the ones produced using Sun's native tools;
this difference is quite significant for binaries containing debugging
information.
@ -2485,11 +2497,11 @@ target libraries.
sparc-sun-solaris2.7
====================
Sun patch 107058-01 (1999-01-13) for Solaris 7/SPARC triggers a bug
in the dynamic linker. This problem (Sun bug 4210064) affects GCC 2.8
and later, including all EGCS releases. Sun formerly recommended
107058-01 for all Solaris 7 users, but around 1999-09-01 it started to
recommend it only for people who use Sun's compilers.
Sun patch 107058-01 (1999-01-13) for Solaris 7/SPARC triggers a bug in
the dynamic linker. This problem (Sun bug 4210064) affects GCC 2.8 and
later, including all EGCS releases. Sun formerly recommended 107058-01
for all Solaris 7 users, but around 1999-09-01 it started to recommend
it only for people who use Sun's compilers.
Here are some workarounds to this problem:
* Do not install Sun patch 107058-01 until after Sun releases a
@ -2527,7 +2539,7 @@ shared version of libgcc. A typical error message is:
sparc-sun-sunos4*
=================
Support for this system is obsoleted in GCC 3.3.
Support for this system is obsoleted in GCC 3.3.
A bug in the SunOS 4 linker will cause it to crash when linking
`-fPIC' compiled objects (and will therefore not allow you to build
@ -2545,7 +2557,7 @@ or `genoutput' manually and then retrying the `make'.
sparc-unknown-linux-gnulibc1
============================
Support for this system is obsoleted in GCC 3.3.
Support for this system is obsoleted in GCC 3.3.
It has been reported that you might need binutils 2.8.1.0.23 for
this platform, too.
@ -2553,15 +2565,15 @@ this platform, too.
sparc-*-linux*
==============
GCC versions 3.0 and higher require binutils 2.11.2 and glibc 2.2.4
or newer on this platform. All earlier binutils and glibc releases
GCC versions 3.0 and higher require binutils 2.11.2 and glibc 2.2.4 or
newer on this platform. All earlier binutils and glibc releases
mishandled unaligned relocations on `sparc-*-*' targets.
sparc64-*-solaris2*
===================
The following compiler flags must be specified in the configure step
in order to bootstrap this target with the Sun compiler:
The following compiler flags must be specified in the configure step in
order to bootstrap this target with the Sun compiler:
% CC="cc -xildoff -xarch=v9" SRCDIR/configure [OPTIONS] [TARGET]
@ -2571,12 +2583,12 @@ specifies the SPARC-V9 architecture to the Sun linker and assembler.
sparcv9-*-solaris2*
===================
This is a synonym for sparc64-*-solaris2*.
This is a synonym for sparc64-*-solaris2*.
*-*-sysv*
=========
On System V release 3, you may get this error message while linking:
On System V release 3, you may get this error message while linking:
ld fatal: failed to write symbol name SOMETHING
in strings table for file WHATEVER
@ -2603,14 +2615,22 @@ which have bugs.
vax-dec-ultrix
==============
Don't try compiling with VAX C (`vcc'). It produces incorrect code
in some cases (for example, when `alloca' is used).
Don't try compiling with VAX C (`vcc'). It produces incorrect code in
some cases (for example, when `alloca' is used).
x86_64-*-*, amd64-*-*
=====================
GCC supports the x86-64 architecture implemented by the AMD64 processor
(amd64-*-* is an alias for x86_64-*-*) on GNU/Linux, FreeBSD and NetBSD.
On GNU/Linux the default is a bi-arch compiler which is able to generate
both 64-bit x86-64 and 32-bit x86 code (via the `-m32' switch).
xtensa-*-elf
============
This target is intended for embedded Xtensa systems using the
`newlib' C library. It uses ELF but does not support shared objects.
This target is intended for embedded Xtensa systems using the `newlib'
C library. It uses ELF but does not support shared objects.
Designed-defined instructions specified via the Tensilica Instruction
Extension (TIE) language are only supported through inline assembly.
@ -2624,7 +2644,7 @@ replace the default header file.
xtensa-*-linux*
===============
This target is for Xtensa systems running GNU/Linux. It supports ELF
This target is for Xtensa systems running GNU/Linux. It supports ELF
shared objects and the GNU C library (glibc). It also generates
position-independent code (PIC) regardless of whether the `-fpic' or
`-fPIC' options are used. In other respects, this target is the same
@ -2633,7 +2653,7 @@ as the `xtensa-*-elf' target.
Microsoft Windows (32-bit)
==========================
A port of GCC 2.95.2 and 3.x is included with the Cygwin environment.
A port of GCC 2.95.2 and 3.x is included with the Cygwin environment.
Current (as of early 2001) snapshots of GCC will build under Cygwin
without modification.
@ -2644,9 +2664,9 @@ are no plans to make it do so.
OS/2
====
GCC does not currently support OS/2. However, Andrew Zabolotny has
been working on a generic OS/2 port with pgcc. The current code can be
found at http://www.goof.com/pcg/os2/.
GCC does not currently support OS/2. However, Andrew Zabolotny has been
working on a generic OS/2 port with pgcc. The current code can be found
at http://www.goof.com/pcg/os2/.
An older copy of GCC 2.8.1 is included with the EMX tools available
at ftp://ftp.leo.org/pub/comp/os/os2/leo/devtools/emx+gcc/.
@ -2654,10 +2674,10 @@ at ftp://ftp.leo.org/pub/comp/os/os2/leo/devtools/emx+gcc/.
Older systems
=============
GCC contains support files for many older (1980s and early 1990s)
Unix variants. For the most part, support for these systems has not
been deliberately removed, but it has not been maintained for several
years and may suffer from bitrot.
GCC contains support files for many older (1980s and early 1990s) Unix
variants. For the most part, support for these systems has not been
deliberately removed, but it has not been maintained for several years
and may suffer from bitrot.
Starting with GCC 3.1, each release has a list of "obsoleted"
systems. Support for these systems is still present in that release,
@ -2696,8 +2716,8 @@ the GCC texinfo manual.
all ELF targets (SVR4, Solaris 2, etc.)
=======================================
C++ support is significantly better on ELF targets if you use the
GNU linker; duplicate copies of inlines, vtables and template
C++ support is significantly better on ELF targets if you use the GNU
linker; duplicate copies of inlines, vtables and template
instantiations will be discarded automatically.

@ -3698,7 +3718,7 @@ GNU Free Documentation License
ADDENDUM: How to use this License for your documents
====================================================
To use this License in a document you have written, include a copy of
To use this License in a document you have written, include a copy of
the License in the document and put the following copyright and license
notices just after the title page:
@ -3760,100 +3780,101 @@ Concept Index

Tag Table:
Node: Top86
Node: Installing GCC2254
Node: Downloading the source3747
Node: Configuration5347
Ref: with-gnu-as18119
Ref: with-as19391
Ref: with-gnu-ld20352
Node: Building34125
Node: Testing43369
Node: Final install48760
Node: Binaries53446
Node: Specific55194
Ref: alpha*-*-*55477
Ref: alpha*-dec-osf*55969
Ref: alphaev5-cray-unicosmk*59654
Ref: arc-*-elf60604
Ref: arm-*-aout60707
Ref: arm-*-elf61124
Ref: arm*-*-linux-gnu61202
Ref: avr61280
Ref: c4x61963
Ref: cris62564
Ref: dos63549
Ref: dsp16xx63875
Ref: *-*-freebsd*63945
Ref: h8300-hms66115
Ref: hppa*-hp-hpux*66470
Ref: hppa*-hp-hpux967819
Ref: hppa*-hp-hpux1068399
Ref: hppa*-hp-hpux1169110
Ref: i370-*-*73760
Ref: *-*-linux-gnu73900
Ref: ix86-*-linux*aout74892
Ref: ix86-*-linux*75105
Ref: ix86-*-sco75422
Ref: ix86-*-sco3.2v5*75589
Ref: ix86-*-udk77837
Ref: ia64-*-linux79204
Ref: ia64-*-hpux*80195
Ref: *-lynx-lynxos80627
Ref: *-ibm-aix*81107
Ref: ip2k-*-elf86135
Ref: m32r-*-elf86369
Ref: m68000-hp-bsd86474
Ref: m6811-elf86733
Ref: m6812-elf86886
Ref: m68k-att-sysv87039
Ref: m68k-crds-unos87402
Ref: m68k-hp-hpux88866
Ref: m68k-ncr-*90882
Ref: m68k-sun91280
Ref: m68k-sun-sunos4.1.191544
Ref: mips-*-*91711
Ref: mips-sgi-irix592575
Ref: mips-sgi-irix694559
Ref: powerpc*-*-*98348
Ref: powerpc-*-darwin*98496
Ref: powerpc-*-elf99444
Ref: powerpc-*-linux-gnu*99566
Ref: powerpc-*-netbsd*99677
Ref: powerpc-*-eabiaix99876
Ref: powerpc-*-eabisim100003
Ref: powerpc-*-eabi100132
Ref: powerpcle-*-elf100211
Ref: powerpcle-*-eabisim100344
Ref: powerpcle-*-eabi100480
Ref: s390-*-linux*100566
Ref: s390x-*-linux*100637
Ref: *-*-solaris2*100723
Ref: sparc-sun-solaris2*103181
Ref: sparc-sun-solaris2.7104517
Ref: sparc-sun-sunos4*106590
Ref: sparc-unknown-linux-gnulibc1107257
Ref: sparc-*-linux*107458
Ref: sparc64-*-solaris2*107686
Ref: sparcv9-*-solaris2*108065
Ref: #*-*-sysv*108153
Ref: vax-dec-ultrix109117
Ref: xtensa-*-elf109272
Ref: xtensa-*-linux*109954
Ref: windows110295
Ref: os2110622
Ref: older110948
Ref: elf_targets113076
Node: Old113337
Node: Configurations116712
Node: Cross-Compiler120912
Node: Steps of Cross122669
Node: Configure Cross123794
Node: Tools and Libraries124438
Node: Cross Headers126884
Node: Build Cross128899
Node: VMS Install129866
Node: GNU Free Documentation License139406
Node: Concept Index161819
Node: Top1717
Node: Installing GCC2275
Node: Downloading the source3768
Node: Configuration5368
Ref: with-gnu-as18138
Ref: with-as19410
Ref: with-gnu-ld20371
Node: Building34928
Node: Testing44160
Node: Final install49539
Node: Binaries54225
Node: Specific55973
Ref: alpha*-*-*56256
Ref: alpha*-dec-osf*56745
Ref: alphaev5-cray-unicosmk*60427
Ref: arc-*-elf61374
Ref: arm-*-aout61474
Ref: arm-*-elf61888
Ref: arm*-*-linux-gnu61963
Ref: avr62038
Ref: c4x62718
Ref: cris63316
Ref: dos64298
Ref: dsp16xx64621
Ref: *-*-freebsd*64688
Ref: h8300-hms66855
Ref: hppa*-hp-hpux*67207
Ref: hppa*-hp-hpux968553
Ref: hppa*-hp-hpux1069130
Ref: hppa*-hp-hpux1169838
Ref: i370-*-*74486
Ref: *-*-linux-gnu74623
Ref: ix86-*-linux*aout75612
Ref: ix86-*-linux*75822
Ref: ix86-*-sco76135
Ref: ix86-*-sco3.2v5*76299
Ref: ix86-*-udk78544
Ref: ia64-*-linux79908
Ref: ia64-*-hpux*80896
Ref: *-lynx-lynxos81325
Ref: *-ibm-aix*81802
Ref: ip2k-*-elf86827
Ref: m32r-*-elf87058
Ref: m68000-hp-bsd87160
Ref: m6811-elf87416
Ref: m6812-elf87566
Ref: m68k-att-sysv87716
Ref: m68k-crds-unos88076
Ref: m68k-hp-hpux89537
Ref: m68k-ncr-*91550
Ref: m68k-sun91945
Ref: m68k-sun-sunos4.1.192206
Ref: mips-*-*92370
Ref: mips-sgi-irix593231
Ref: mips-sgi-irix695212
Ref: powerpc*-*-*98998
Ref: powerpc-*-darwin*99143
Ref: powerpc-*-elf100088
Ref: powerpc-*-linux-gnu*100207
Ref: powerpc-*-netbsd*100315
Ref: powerpc-*-eabiaix100511
Ref: powerpc-*-eabisim100635
Ref: powerpc-*-eabi100761
Ref: powerpcle-*-elf100837
Ref: powerpcle-*-eabisim100967
Ref: powerpcle-*-eabi101100
Ref: s390-*-linux*101183
Ref: s390x-*-linux*101251
Ref: *-*-solaris2*101334
Ref: sparc-sun-solaris2*103789
Ref: sparc-sun-solaris2.7105122
Ref: sparc-sun-sunos4*107192
Ref: sparc-unknown-linux-gnulibc1107856
Ref: sparc-*-linux*108054
Ref: sparc64-*-solaris2*108279
Ref: sparcv9-*-solaris2*108655
Ref: #*-*-sysv*108740
Ref: vax-dec-ultrix109701
Ref: x86_64-*-*109853
Ref: xtensa-*-elf110181
Ref: xtensa-*-linux*110860
Ref: windows111198
Ref: os2111522
Ref: older111845
Ref: elf_targets113970
Node: Old114228
Node: Configurations117603
Node: Cross-Compiler121803
Node: Steps of Cross123560
Node: Configure Cross124685
Node: Tools and Libraries125329
Node: Cross Headers127775
Node: Build Cross129790
Node: VMS Install130757
Node: GNU Free Documentation License140297
Node: Concept Index162707

End Tag Table

File diff suppressed because it is too large Load Diff

View File

@ -1,3 +1,7 @@
2004-02-14 Release Manager
* GCC 3.3.3 Released.
2004-01-14 Ian Lance Taylor <ian@wasabisystems.com>
* README: Remove.

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1,3 +1,7 @@
2004-02-14 Release Manager
* GCC 3.3.3 Released.
2003-10-16 Release Manager
* GCC 3.3.2 Released.

View File

@ -1,3 +1,11 @@
2004-02-14 Release Manager
* GCC 3.3.3 Released.
2004-02-13 Gabriel Dos Reis <gdr@integrable-solutions.net>
* ca.po: New file.
2004-02-04 Matthias Klose <doko@debian.org>
* de.po: Update.

BIN
gnu/dist/gcc/gcc/po/ca.gmo vendored Normal file

Binary file not shown.

20826
gnu/dist/gcc/gcc/po/ca.po vendored Normal file

File diff suppressed because it is too large Load Diff

View File

@ -1,3 +1,7 @@
2004-02-14 Release Manager
* GCC 3.3.3 Released.
2004-02-05 Giovanni Bajo <giovannibajo@gcc.gnu.org>
PR c++/13086