| @c Copyright (C) 2002, 2003, 2004 Free Software Foundation, Inc. |
| @c This is part of the GCC manual. |
| @c For copying conditions, see the file gcc.texi. |
| |
| @node Source Tree |
| @chapter Source Tree Structure and Build System |
| |
| This chapter describes the structure of the GCC source tree, and how |
| GCC is built. The user documentation for building and installing GCC |
| is in a separate manual (@uref{http://gcc.gnu.org/install/}), with |
| which it is presumed that you are familiar. |
| |
| @menu |
| * Configure Terms:: Configuration terminology and history. |
| * Top Level:: The top level source directory. |
| * gcc Directory:: The @file{gcc} subdirectory. |
| * Testsuites:: The GCC testsuites. |
| @end menu |
| |
| @include configterms.texi |
| |
| @node Top Level |
| @section Top Level Source Directory |
| |
| The top level source directory in a GCC distribution contains several |
| files and directories that are shared with other software |
| distributions such as that of GNU Binutils. It also contains several |
| subdirectories that contain parts of GCC and its runtime libraries: |
| |
| @table @file |
| @item boehm-gc |
| The Boehm conservative garbage collector, used as part of the Java |
| runtime library. |
| |
| @item contrib |
| Contributed scripts that may be found useful in conjunction with GCC@. |
| One of these, @file{contrib/texi2pod.pl}, is used to generate man |
| pages from Texinfo manuals as part of the GCC build process. |
| |
| @item fastjar |
| An implementation of the @command{jar} command, used with the Java |
| front end. |
| |
| @item gcc |
| The main sources of GCC itself (except for runtime libraries), |
| including optimizers, support for different target architectures, |
| language front ends, and testsuites. @xref{gcc Directory, , The |
| @file{gcc} Subdirectory}, for details. |
| |
| @item include |
| Headers for the @code{libiberty} library. |
| |
| @item libf2c |
| The Fortran runtime library. |
| |
| @item libffi |
| The @code{libffi} library, used as part of the Java runtime library. |
| |
| @item libiberty |
| The @code{libiberty} library, used for portability and for some |
| generally useful data structures and algorithms. @xref{Top, , |
| Introduction, libiberty, @sc{gnu} libiberty}, for more information |
| about this library. |
| |
| @item libjava |
| The Java runtime library. |
| |
| @item libobjc |
| The Objective-C runtime library. |
| |
| @item libstdc++-v3 |
| The C++ runtime library. |
| |
| @item maintainer-scripts |
| Scripts used by the @code{gccadmin} account on @code{gcc.gnu.org}. |
| |
| @item zlib |
| The @code{zlib} compression library, used by the Java front end and as |
| part of the Java runtime library. |
| @end table |
| |
| The build system in the top level directory, including how recursion |
| into subdirectories works and how building runtime libraries for |
| multilibs is handled, is documented in a separate manual, included |
| with GNU Binutils. @xref{Top, , GNU configure and build system, |
| configure, The GNU configure and build system}, for details. |
| |
| @node gcc Directory |
| @section The @file{gcc} Subdirectory |
| |
| The @file{gcc} directory contains many files that are part of the C |
| sources of GCC, other files used as part of the configuration and |
| build process, and subdirectories including documentation and a |
| testsuite. The files that are sources of GCC are documented in a |
| separate chapter. @xref{Passes, , Passes and Files of the Compiler}. |
| |
| @menu |
| * Subdirectories:: Subdirectories of @file{gcc}. |
| * Configuration:: The configuration process, and the files it uses. |
| * Build:: The build system in the @file{gcc} directory. |
| * Makefile:: Targets in @file{gcc/Makefile}. |
| * Library Files:: Library source files and headers under @file{gcc/}. |
| * Headers:: Headers installed by GCC. |
| * Documentation:: Building documentation in GCC. |
| * Front End:: Anatomy of a language front end. |
| * Back End:: Anatomy of a target back end. |
| @end menu |
| |
| @node Subdirectories |
| @subsection Subdirectories of @file{gcc} |
| |
| The @file{gcc} directory contains the following subdirectories: |
| |
| @table @file |
| @item @var{language} |
| Subdirectories for various languages. Directories containing a file |
| @file{config-lang.in} are language subdirectories. The contents of |
| the subdirectories @file{cp} (for C++) and @file{objc} (for |
| Objective-C) are documented in this manual (@pxref{Passes, , Passes |
| and Files of the Compiler}); those for other languages are not. |
| @xref{Front End, , Anatomy of a Language Front End}, for details of |
| the files in these directories. |
| |
| @item config |
| Configuration files for supported architectures and operating |
| systems. @xref{Back End, , Anatomy of a Target Back End}, for |
| details of the files in this directory. |
| |
| @item doc |
| Texinfo documentation for GCC, together with automatically generated |
| man pages and support for converting the installation manual to |
| HTML@. @xref{Documentation}. |
| |
| @item fixinc |
| The support for fixing system headers to work with GCC@. See |
| @file{fixinc/README} for more information. The headers fixed by this |
| mechanism are installed in @file{@var{libsubdir}/include}. Along with |
| those headers, @file{README-fixinc} is also installed, as |
| @file{@var{libsubdir}/include/README}. |
| |
| @item ginclude |
| System headers installed by GCC, mainly those required by the C |
| standard of freestanding implementations. @xref{Headers, , Headers |
| Installed by GCC}, for details of when these and other headers are |
| installed. |
| |
| @item intl |
| GNU @code{libintl}, from GNU @code{gettext}, for systems which do not |
| include it in libc. Properly, this directory should be at top level, |
| parallel to the @file{gcc} directory. |
| |
| @item po |
| Message catalogs with translations of messages produced by GCC into |
| various languages, @file{@var{language}.po}. This directory also |
| contains @file{gcc.pot}, the template for these message catalogues, |
| @file{exgettext}, a wrapper around @command{gettext} to extract the |
| messages from the GCC sources and create @file{gcc.pot}, which is run |
| by @samp{make gcc.pot}, and @file{EXCLUDES}, a list of files from |
| which messages should not be extracted. |
| |
| @item testsuite |
| The GCC testsuites (except for those for runtime libraries). |
| @xref{Testsuites}. |
| @end table |
| |
| @node Configuration |
| @subsection Configuration in the @file{gcc} Directory |
| |
| The @file{gcc} directory is configured with an Autoconf-generated |
| script @file{configure}. The @file{configure} script is generated |
| from @file{configure.ac} and @file{aclocal.m4}. From the files |
| @file{configure.ac} and @file{acconfig.h}, Autoheader generates the |
| file @file{config.in}. The file @file{cstamp-h.in} is used as a |
| timestamp. |
| |
| @menu |
| * Config Fragments:: Scripts used by @file{configure}. |
| * System Config:: The @file{config.build}, @file{config.host}, and |
| @file{config.gcc} files. |
| * Configuration Files:: Files created by running @file{configure}. |
| @end menu |
| |
| @node Config Fragments |
| @subsubsection Scripts Used by @file{configure} |
| |
| @file{configure} uses some other scripts to help in its work: |
| |
| @itemize @bullet |
| @item The standard GNU @file{config.sub} and @file{config.guess} |
| files, kept in the top level directory, are used. FIXME: when is the |
| @file{config.guess} file in the @file{gcc} directory (that just calls |
| the top level one) used? |
| |
| @item The file @file{config.gcc} is used to handle configuration |
| specific to the particular target machine. The file |
| @file{config.build} is used to handle configuration specific to the |
| particular build machine. The file @file{config.host} is used to handle |
| configuration specific to the particular host machine. (In general, |
| these should only be used for features that cannot reasonably be tested in |
| Autoconf feature tests.) |
| @xref{System Config, , The @file{config.build}; @file{config.host}; |
| and @file{config.gcc} Files}, for details of the contents of these files. |
| |
| @item Each language subdirectory has a file |
| @file{@var{language}/config-lang.in} that is used for |
| front-end-specific configuration. @xref{Front End Config, , The Front |
| End @file{config-lang.in} File}, for details of this file. |
| |
| @item A helper script @file{configure.frag} is used as part of |
| creating the output of @file{configure}. |
| @end itemize |
| |
| @node System Config |
| @subsubsection The @file{config.build}; @file{config.host}; and @file{config.gcc} Files |
| |
| The @file{config.build} file contains specific rules for particular systems |
| which GCC is built on. This should be used as rarely as possible, as the |
| behavior of the build system can always be detected by autoconf. |
| |
| The @file{config.host} file contains specific rules for particular systems |
| which GCC will run on. This is rarely needed. |
| |
| The @file{config.gcc} file contains specific rules for particular systems |
| which GCC will generate code for. This is usually needed. |
| |
| Each file has a list of the shell variables it sets, with descriptions, at the |
| top of the file. |
| |
| FIXME: document the contents of these files, and what variables should |
| be set to control build, host and target configuration. |
| |
| @include configfiles.texi |
| |
| @node Build |
| @subsection Build System in the @file{gcc} Directory |
| |
| FIXME: describe the build system, including what is built in what |
| stages. Also list the various source files that are used in the build |
| process but aren't source files of GCC itself and so aren't documented |
| below (@pxref{Passes}). |
| |
| @include makefile.texi |
| |
| @node Library Files |
| @subsection Library Source Files and Headers under the @file{gcc} Directory |
| |
| FIXME: list here, with explanation, all the C source files and headers |
| under the @file{gcc} directory that aren't built into the GCC |
| executable but rather are part of runtime libraries and object files, |
| such as @file{crtstuff.c} and @file{unwind-dw2.c}. @xref{Headers, , |
| Headers Installed by GCC}, for more information about the |
| @file{ginclude} directory. |
| |
| @node Headers |
| @subsection Headers Installed by GCC |
| |
| In general, GCC expects the system C library to provide most of the |
| headers to be used with it. However, GCC will fix those headers if |
| necessary to make them work with GCC, and will install some headers |
| required of freestanding implementations. These headers are installed |
| in @file{@var{libsubdir}/include}. Headers for non-C runtime |
| libraries are also installed by GCC; these are not documented here. |
| (FIXME: document them somewhere.) |
| |
| Several of the headers GCC installs are in the @file{ginclude} |
| directory. These headers, @file{iso646.h}, |
| @file{stdarg.h}, @file{stdbool.h}, and @file{stddef.h}, |
| are installed in @file{@var{libsubdir}/include}, |
| unless the target Makefile fragment (@pxref{Target Fragment}) |
| overrides this by setting @code{USER_H}. |
| |
| In addition to these headers and those generated by fixing system |
| headers to work with GCC, some other headers may also be installed in |
| @file{@var{libsubdir}/include}. @file{config.gcc} may set |
| @code{extra_headers}; this specifies additional headers under |
| @file{config} to be installed on some systems. |
| |
| GCC installs its own version of @code{<float.h>}, from @file{ginclude/float.h}. |
| This is done to cope with command-line options that change the |
| representation of floating point numbers. |
| |
| GCC also installs its own version of @code{<limits.h>}; this is generated |
| from @file{glimits.h}, together with @file{limitx.h} and |
| @file{limity.h} if the system also has its own version of |
| @code{<limits.h>}. (GCC provides its own header because it is |
| required of ISO C freestanding implementations, but needs to include |
| the system header from its own header as well because other standards |
| such as POSIX specify additional values to be defined in |
| @code{<limits.h>}.) The system's @code{<limits.h>} header is used via |
| @file{@var{libsubdir}/include/syslimits.h}, which is copied from |
| @file{gsyslimits.h} if it does not need fixing to work with GCC; if it |
| needs fixing, @file{syslimits.h} is the fixed copy. |
| |
| @node Documentation |
| @subsection Building Documentation |
| |
| The main GCC documentation is in the form of manuals in Texinfo |
| format. These are installed in Info format, and DVI versions may be |
| generated by @samp{make dvi}. In addition, some man pages are |
| generated from the Texinfo manuals, there are some other text files |
| with miscellaneous documentation, and runtime libraries have their own |
| documentation outside the @file{gcc} directory. FIXME: document the |
| documentation for runtime libraries somewhere. |
| |
| @menu |
| * Texinfo Manuals:: GCC manuals in Texinfo format. |
| * Man Page Generation:: Generating man pages from Texinfo manuals. |
| * Miscellaneous Docs:: Miscellaneous text files with documentation. |
| @end menu |
| |
| @node Texinfo Manuals |
| @subsubsection Texinfo Manuals |
| |
| The manuals for GCC as a whole, and the C and C++ front ends, are in |
| files @file{doc/*.texi}. Other front ends have their own manuals in |
| files @file{@var{language}/*.texi}. Common files |
| @file{doc/include/*.texi} are provided which may be included in |
| multiple manuals; the following files are in @file{doc/include}: |
| |
| @table @file |
| @item fdl.texi |
| The GNU Free Documentation License. |
| @item funding.texi |
| The section ``Funding Free Software''. |
| @item gcc-common.texi |
| Common definitions for manuals. |
| @item gpl.texi |
| The GNU General Public License. |
| @item texinfo.tex |
| A copy of @file{texinfo.tex} known to work with the GCC manuals. |
| @end table |
| |
| DVI formatted manuals are generated by @samp{make dvi}, which uses |
| @command{texi2dvi} (via the Makefile macro @code{$(TEXI2DVI)}). Info |
| manuals are generated by @samp{make info} (which is run as part of |
| a bootstrap); this generates the manuals in the source directory, |
| using @command{makeinfo} via the Makefile macro @code{$(MAKEINFO)}, |
| and they are included in release distributions. |
| |
| Manuals are also provided on the GCC web site, in both HTML and |
| PostScript forms. This is done via the script |
| @file{maintainer-scripts/update_web_docs}. Each manual to be |
| provided online must be listed in the definition of @code{MANUALS} in |
| that file; a file @file{@var{name}.texi} must only appear once in the |
| source tree, and the output manual must have the same name as the |
| source file. (However, other Texinfo files, included in manuals but |
| not themselves the root files of manuals, may have names that appear |
| more than once in the source tree.) The manual file |
| @file{@var{name}.texi} should only include other files in its own |
| directory or in @file{doc/include}. HTML manuals will be generated by |
| @samp{makeinfo --html} and PostScript manuals by @command{texi2dvi} |
| and @command{dvips}. All Texinfo files that are parts of manuals must |
| be checked into CVS, even if they are generated files, for the |
| generation of online manuals to work. |
| |
| The installation manual, @file{doc/install.texi}, is also provided on |
| the GCC web site. The HTML version is generated by the script |
| @file{doc/install.texi2html}. |
| |
| @node Man Page Generation |
| @subsubsection Man Page Generation |
| |
| Because of user demand, in addition to full Texinfo manuals, man pages |
| are provided which contain extracts from those manuals. These man |
| pages are generated from the Texinfo manuals using |
| @file{contrib/texi2pod.pl} and @command{pod2man}. (The man page for |
| @command{g++}, @file{cp/g++.1}, just contains a @samp{.so} reference |
| to @file{gcc.1}, but all the other man pages are generated from |
| Texinfo manuals.) |
| |
| Because many systems may not have the necessary tools installed to |
| generate the man pages, they are only generated if the |
| @file{configure} script detects that recent enough tools are |
| installed, and the Makefiles allow generating man pages to fail |
| without aborting the build. Man pages are also included in release |
| distributions. They are generated in the source directory. |
| |
| Magic comments in Texinfo files starting @samp{@@c man} control what |
| parts of a Texinfo file go into a man page. Only a subset of Texinfo |
| is supported by @file{texi2pod.pl}, and it may be necessary to add |
| support for more Texinfo features to this script when generating new |
| man pages. To improve the man page output, some special Texinfo |
| macros are provided in @file{doc/include/gcc-common.texi} which |
| @file{texi2pod.pl} understands: |
| |
| @table @code |
| @item @@gcctabopt |
| Use in the form @samp{@@table @@gcctabopt} for tables of options, |
| where for printed output the effect of @samp{@@code} is better than |
| that of @samp{@@option} but for man page output a different effect is |
| wanted. |
| @item @@gccoptlist |
| Use for summary lists of options in manuals. |
| @item @@gol |
| Use at the end of each line inside @samp{@@gccoptlist}. This is |
| necessary to avoid problems with differences in how the |
| @samp{@@gccoptlist} macro is handled by different Texinfo formatters. |
| @end table |
| |
| FIXME: describe the @file{texi2pod.pl} input language and magic |
| comments in more detail. |
| |
| @node Miscellaneous Docs |
| @subsubsection Miscellaneous Documentation |
| |
| In addition to the formal documentation that is installed by GCC, |
| there are several other text files with miscellaneous documentation: |
| |
| @table @file |
| @item ABOUT-GCC-NLS |
| Notes on GCC's Native Language Support. FIXME: this should be part of |
| this manual rather than a separate file. |
| @item ABOUT-NLS |
| Notes on the Free Translation Project. |
| @item COPYING |
| The GNU General Public License. |
| @item COPYING.LIB |
| The GNU Lesser General Public License. |
| @item *ChangeLog* |
| @itemx */ChangeLog* |
| Change log files for various parts of GCC@. |
| @item LANGUAGES |
| Details of a few changes to the GCC front-end interface. FIXME: the |
| information in this file should be part of general documentation of |
| the front-end interface in this manual. |
| @item ONEWS |
| Information about new features in old versions of GCC@. (For recent |
| versions, the information is on the GCC web site.) |
| @item README.Portability |
| Information about portability issues when writing code in GCC@. FIXME: |
| why isn't this part of this manual or of the GCC Coding Conventions? |
| @item SERVICE |
| A pointer to the GNU Service Directory. |
| @end table |
| |
| FIXME: document such files in subdirectories, at least @file{config}, |
| @file{cp}, @file{objc}, @file{testsuite}. |
| |
| @node Front End |
| @subsection Anatomy of a Language Front End |
| |
| A front end for a language in GCC has the following parts: |
| |
| @itemize @bullet |
| @item |
| A directory @file{@var{language}} under @file{gcc} containing source |
| files for that front end. @xref{Front End Directory, , The Front End |
| @file{@var{language}} Directory}, for details. |
| @item |
| A mention of the language in the list of supported languages in |
| @file{gcc/doc/install.texi}. |
| @item |
| A mention of the name under which the language's runtime library is |
| recognized by @option{--enable-shared=@var{package}} in the |
| documentation of that option in @file{gcc/doc/install.texi}. |
| @item |
| A mention of any special prerequisites for building the front end in |
| the documentation of prerequisites in @file{gcc/doc/install.texi}. |
| @item |
| Details of contributors to that front end in |
| @file{gcc/doc/contrib.texi}. If the details are in that front end's |
| own manual then there should be a link to that manual's list in |
| @file{contrib.texi}. |
| @item |
| Information about support for that language in |
| @file{gcc/doc/frontends.texi}. |
| @item |
| Information about standards for that language, and the front end's |
| support for them, in @file{gcc/doc/standards.texi}. This may be a |
| link to such information in the front end's own manual. |
| @item |
| Details of source file suffixes for that language and @option{-x |
| @var{lang}} options supported, in @file{gcc/doc/invoke.texi}. |
| @item |
| Entries in @code{default_compilers} in @file{gcc.c} for source file |
| suffixes for that language. |
| @item |
| Preferably testsuites, which may be under @file{gcc/testsuite} or |
| runtime library directories. FIXME: document somewhere how to write |
| testsuite harnesses. |
| @item |
| Probably a runtime library for the language, outside the @file{gcc} |
| directory. FIXME: document this further. |
| @item |
| Details of the directories of any runtime libraries in |
| @file{gcc/doc/sourcebuild.texi}. |
| @end itemize |
| |
| If the front end is added to the official GCC CVS repository, the |
| following are also necessary: |
| |
| @itemize @bullet |
| @item |
| At least one Bugzilla component for bugs in that front end and runtime |
| libraries. This category needs to be mentioned in |
| @file{gcc/gccbug.in}, as well as being added to the Bugzilla database. |
| @item |
| Normally, one or more maintainers of that front end listed in |
| @file{MAINTAINERS}. |
| @item |
| Mentions on the GCC web site in @file{index.html} and |
| @file{frontends.html}, with any relevant links on |
| @file{readings.html}. (Front ends that are not an official part of |
| GCC may also be listed on @file{frontends.html}, with relevant links.) |
| @item |
| A news item on @file{index.html}, and possibly an announcement on the |
| @email{gcc-announce@@gcc.gnu.org} mailing list. |
| @item |
| The front end's manuals should be mentioned in |
| @file{maintainer-scripts/update_web_docs} (@pxref{Texinfo Manuals}) |
| and the online manuals should be linked to from |
| @file{onlinedocs/index.html}. |
| @item |
| Any old releases or CVS repositories of the front end, before its |
| inclusion in GCC, should be made available on the GCC FTP site |
| @uref{ftp://gcc.gnu.org/pub/gcc/old-releases/}. |
| @item |
| The release and snapshot script @file{maintainer-scripts/gcc_release} |
| should be updated to generate appropriate tarballs for this front end. |
| The associated @file{maintainer-scripts/snapshot-README} and |
| @file{maintainer-scripts/snapshot-index.html} files should be updated |
| to list the tarballs and diffs for this front end. |
| @item |
| If this front end includes its own version files that include the |
| current date, @file{maintainer-scripts/update_version} should be |
| updated accordingly. |
| @item |
| @file{CVSROOT/modules} in the GCC CVS repository should be updated. |
| @end itemize |
| |
| @menu |
| * Front End Directory:: The front end @file{@var{language}} directory. |
| * Front End Config:: The front end @file{config-lang.in} file. |
| @end menu |
| |
| @node Front End Directory |
| @subsubsection The Front End @file{@var{language}} Directory |
| |
| A front end @file{@var{language}} directory contains the source files |
| of that front end (but not of any runtime libraries, which should be |
| outside the @file{gcc} directory). This includes documentation, and |
| possibly some subsidiary programs build alongside the front end. |
| Certain files are special and other parts of the compiler depend on |
| their names: |
| |
| @table @file |
| @item config-lang.in |
| This file is required in all language subdirectories. @xref{Front End |
| Config, , The Front End @file{config-lang.in} File}, for details of |
| its contents |
| @item Make-lang.in |
| This file is required in all language subdirectories. It contains |
| targets @code{@var{lang}.@var{hook}} (where @code{@var{lang}} is the |
| setting of @code{language} in @file{config-lang.in}) for the following |
| values of @code{@var{hook}}, and any other Makefile rules required to |
| build those targets (which may if necessary use other Makefiles |
| specified in @code{outputs} in @file{config-lang.in}, although this is |
| deprecated). Some hooks are defined by using a double-colon rule for |
| @code{@var{hook}}, rather than by using a target of form |
| @code{@var{lang}.@var{hook}}. These hooks are called ``double-colon |
| hooks'' below. It also adds any testsuite targets that can use the |
| standard rule in @file{gcc/Makefile.in} to the variable |
| @code{lang_checks}. |
| |
| @table @code |
| @item all.build |
| @itemx all.cross |
| @itemx start.encap |
| @itemx rest.encap |
| FIXME: exactly what goes in each of these targets? |
| @item tags |
| Build an @command{etags} @file{TAGS} file in the language subdirectory |
| in the source tree. |
| @item info |
| Build info documentation for the front end, in the build directory. |
| This target is only called by @samp{make bootstrap} if a suitable |
| version of @command{makeinfo} is available, so does not need to check |
| for this, and should fail if an error occurs. |
| @item dvi |
| Build DVI documentation for the front end, in the build directory. |
| This should be done using @code{$(TEXI2DVI)}, with appropriate |
| @option{-I} arguments pointing to directories of included files. |
| This hook is a double-colon hook. |
| @item man |
| Build generated man pages for the front end from Texinfo manuals |
| (@pxref{Man Page Generation}), in the build directory. This target |
| is only called if the necessary tools are available, but should ignore |
| errors so as not to stop the build if errors occur; man pages are |
| optional and the tools involved may be installed in a broken way. |
| @item install-normal |
| FIXME: what is this target for? |
| @item install-common |
| Install everything that is part of the front end, apart from the |
| compiler executables listed in @code{compilers} in |
| @file{config-lang.in}. |
| @item install-info |
| Install info documentation for the front end, if it is present in the |
| source directory. This target should have dependencies on info files |
| that should be installed. This hook is a double-colon hook. |
| @item install-man |
| Install man pages for the front end. This target should ignore |
| errors. |
| @item srcextra |
| Copies its dependencies into the source directory. This generally should |
| be used for generated files such as @file{gcc/c-parse.c} which are not |
| present in CVS, but should be included in any release tarballs. This |
| target will be executed during a bootstrap if |
| @samp{--enable-generated-files-in-srcdir} was specified as a |
| @file{configure} option. |
| @item srcinfo |
| @itemx srcman |
| Copies its dependencies into the source directory. These targets will be |
| executed during a bootstrap if @samp{--enable-generated-files-in-srcdir} |
| was specified as a @file{configure} option. |
| @item uninstall |
| Uninstall files installed by installing the compiler. This is |
| currently documented not to be supported, so the hook need not do |
| anything. |
| @item mostlyclean |
| @itemx clean |
| @itemx distclean |
| @itemx maintainer-clean |
| The language parts of the standard GNU |
| @samp{*clean} targets. @xref{Standard Targets, , Standard Targets for |
| Users, standards, GNU Coding Standards}, for details of the standard |
| targets. For GCC, @code{maintainer-clean} should delete |
| all generated files in the source directory that are not checked into |
| CVS, but should not delete anything checked into CVS@. |
| @item stage1 |
| @itemx stage2 |
| @itemx stage3 |
| @itemx stage4 |
| @itemx stageprofile |
| @itemx stagefeedback |
| Move to the stage directory files not included in @code{stagestuff} in |
| @file{config-lang.in} or otherwise moved by the main @file{Makefile}. |
| @end table |
| |
| @item lang.opt |
| This file registers the set of switches that the front end accepts on |
| the command line, and their --help text. The file format is |
| documented in the file @file{c.opt}. These files are processed by the |
| script @file{opts.sh}. |
| @item lang-specs.h |
| This file provides entries for @code{default_compilers} in |
| @file{gcc.c} which override the default of giving an error that a |
| compiler for that language is not installed. |
| @item @var{language}-tree.def |
| This file, which need not exist, defines any language-specific tree |
| codes. |
| @end table |
| |
| @node Front End Config |
| @subsubsection The Front End @file{config-lang.in} File |
| |
| Each language subdirectory contains a @file{config-lang.in} file. In |
| addition the main directory contains @file{c-config-lang.in}, which |
| contains limited information for the C language. This file is a shell |
| script that may define some variables describing the language: |
| |
| @table @code |
| @item language |
| This definition must be present, and gives the name of the language |
| for some purposes such as arguments to @option{--enable-languages}. |
| @item lang_requires |
| If defined, this variable lists (space-separated) language front ends |
| other than C that this front end requires to be enabled (with the |
| names given being their @code{language} settings). For example, the |
| Java front end depends on the C++ front end, so sets |
| @samp{lang_requires=c++}. |
| @item target_libs |
| If defined, this variable lists (space-separated) targets in the top |
| level @file{Makefile} to build the runtime libraries for this |
| language, such as @code{target-libobjc}. |
| @item lang_dirs |
| If defined, this variable lists (space-separated) top level |
| directories (parallel to @file{gcc}), apart from the runtime libraries, |
| that should not be configured if this front end is not built. |
| @item build_by_default |
| If defined to @samp{no}, this language front end is not built unless |
| enabled in a @option{--enable-languages} argument. Otherwise, front |
| ends are built by default, subject to any special logic in |
| @file{configure.ac} (as is present to disable the Ada front end if the |
| Ada compiler is not already installed). |
| @item boot_language |
| If defined to @samp{yes}, this front end is built in stage 1 of the |
| bootstrap. This is only relevant to front ends written in their own |
| languages. |
| @item compilers |
| If defined, a space-separated list of compiler executables that will |
| be run by the driver. The names here will each end |
| with @samp{\$(exeext)}. |
| @item stagestuff |
| If defined, a space-separated list of files that should be moved to |
| the @file{stage@var{n}} directories in each stage of bootstrap. |
| @item outputs |
| If defined, a space-separated list of files that should be generated |
| by @file{configure} substituting values in them. This mechanism can |
| be used to create a file @file{@var{language}/Makefile} from |
| @file{@var{language}/Makefile.in}, but this is deprecated, building |
| everything from the single @file{gcc/Makefile} is preferred. |
| @item gtfiles |
| If defined, a space-separated list of files that should be scanned by |
| gengtype.c to generate the garbage collection tables and routines for |
| this language. This excludes the files that are common to all front |
| ends. @xref{Type Information}. |
| |
| @end table |
| |
| @node Back End |
| @subsection Anatomy of a Target Back End |
| |
| A back end for a target architecture in GCC has the following parts: |
| |
| @itemize @bullet |
| @item |
| A directory @file{@var{machine}} under @file{gcc/config}, containing a |
| machine description @file{@var{machine}.md} file (@pxref{Machine Desc, |
| , Machine Descriptions}), header files @file{@var{machine}.h} and |
| @file{@var{machine}-protos.h} and a source file @file{@var{machine}.c} |
| (@pxref{Target Macros, , Target Description Macros and Functions}), |
| possibly a target Makefile fragment @file{t-@var{machine}} |
| (@pxref{Target Fragment, , The Target Makefile Fragment}), and maybe |
| some other files. The names of these files may be changed from the |
| defaults given by explicit specifications in @file{config.gcc}. |
| @item |
| If necessary, a file @file{@var{machine}-modes.def} in the |
| @file{@var{machine}} directory, containing additional machine modes to |
| represent condition codes. @xref{Condition Code}, for further details. |
| @item |
| Entries in @file{config.gcc} (@pxref{System Config, , The |
| @file{config.gcc} File}) for the systems with this target |
| architecture. |
| @item |
| Documentation in @file{gcc/doc/invoke.texi} for any command-line |
| options supported by this target (@pxref{Run-time Target, , Run-time |
| Target Specification}). This means both entries in the summary table |
| of options and details of the individual options. |
| @item |
| Documentation in @file{gcc/doc/extend.texi} for any target-specific |
| attributes supported (@pxref{Target Attributes, , Defining |
| target-specific uses of @code{__attribute__}}), including where the |
| same attribute is already supported on some targets, which are |
| enumerated in the manual. |
| @item |
| Documentation in @file{gcc/doc/extend.texi} for any target-specific |
| pragmas supported. |
| @item |
| Documentation in @file{gcc/doc/extend.texi} of any target-specific |
| built-in functions supported. |
| @item |
| Documentation in @file{gcc/doc/md.texi} of any target-specific |
| constraint letters (@pxref{Machine Constraints, , Constraints for |
| Particular Machines}). |
| @item |
| A note in @file{gcc/doc/contrib.texi} under the person or people who |
| contributed the target support. |
| @item |
| Entries in @file{gcc/doc/install.texi} for all target triplets |
| supported with this target architecture, giving details of any special |
| notes about installation for this target, or saying that there are no |
| special notes if there are none. |
| @item |
| Possibly other support outside the @file{gcc} directory for runtime |
| libraries. FIXME: reference docs for this. The libstdc++ porting |
| manual needs to be installed as info for this to work, or to be a |
| chapter of this manual. |
| @end itemize |
| |
| If the back end is added to the official GCC CVS repository, the |
| following are also necessary: |
| |
| @itemize @bullet |
| @item |
| An entry for the target architecture in @file{readings.html} on the |
| GCC web site, with any relevant links. |
| @item |
| Details of the properties of the back end and target architecture in |
| @file{backends.html} on the GCC web site. |
| @item |
| A news item about the contribution of support for that target |
| architecture, in @file{index.html} on the GCC web site. |
| @item |
| Normally, one or more maintainers of that target listed in |
| @file{MAINTAINERS}. Some existing architectures may be unmaintained, |
| but it would be unusual to add support for a target that does not have |
| a maintainer when support is added. |
| @end itemize |
| |
| @node Testsuites |
| @section Testsuites |
| |
| GCC contains several testsuites to help maintain compiler quality. |
| Most of the runtime libraries and language front ends in GCC have |
| testsuites. Currently only the C language testsuites are documented |
| here; FIXME: document the others. |
| |
| @menu |
| * Test Idioms:: Idioms used in testsuite code. |
| * Ada Tests:: The Ada language testsuites. |
| * C Tests:: The C language testsuites. |
| * libgcj Tests:: The Java library testsuites. |
| * gcov Testing:: Support for testing gcov. |
| * profopt Testing:: Support for testing profile-directed optimizations. |
| * compat Testing:: Support for testing binary compatibility. |
| @end menu |
| |
| @node Test Idioms |
| @subsection Idioms Used in Testsuite Code |
| |
| In general C testcases have a trailing @file{-@var{n}.c}, starting |
| with @file{-1.c}, in case other testcases with similar names are added |
| later. If the test is a test of some well-defined feature, it should |
| have a name referring to that feature such as |
| @file{@var{feature}-1.c}. If it does not test a well-defined feature |
| but just happens to exercise a bug somewhere in the compiler, and a |
| bug report has been filed for this bug in the GCC bug database, |
| @file{pr@var{bug-number}-1.c} is the appropriate form of name. |
| Otherwise (for miscellaneous bugs not filed in the GCC bug database), |
| and previously more generally, test cases are named after the date on |
| which they were added. This allows people to tell at a glance whether |
| a test failure is because of a recently found bug that has not yet |
| been fixed, or whether it may be a regression, but does not give any |
| other information about the bug or where discussion of it may be |
| found. Some other language testsuites follow similar conventions. |
| |
| Test cases should use @code{abort ()} to indicate failure and |
| @code{exit (0)} for success; on some targets these may be redefined to |
| indicate failure and success in other ways. |
| |
| In the @file{gcc.dg} testsuite, it is often necessary to test that an |
| error is indeed a hard error and not just a warning---for example, |
| where it is a constraint violation in the C standard, which must |
| become an error with @option{-pedantic-errors}. The following idiom, |
| where the first line shown is line @var{line} of the file and the line |
| that generates the error, is used for this: |
| |
| @smallexample |
| /* @{ dg-bogus "warning" "warning in place of error" @} */ |
| /* @{ dg-error "@var{regexp}" "@var{message}" @{ target *-*-* @} @var{line} @} */ |
| @end smallexample |
| |
| It may be necessary to check that an expression is an integer constant |
| expression and has a certain value. To check that @code{@var{E}} has |
| value @code{@var{V}}, an idiom similar to the following is used: |
| |
| @smallexample |
| char x[((E) == (V) ? 1 : -1)]; |
| @end smallexample |
| |
| In @file{gcc.dg} tests, @code{__typeof__} is sometimes used to make |
| assertions about the types of expressions. See, for example, |
| @file{gcc.dg/c99-condexpr-1.c}. The more subtle uses depend on the |
| exact rules for the types of conditional expressions in the C |
| standard; see, for example, @file{gcc.dg/c99-intconst-1.c}. |
| |
| It is useful to be able to test that optimizations are being made |
| properly. This cannot be done in all cases, but it can be done where |
| the optimization will lead to code being optimized away (for example, |
| where flow analysis or alias analysis should show that certain code |
| cannot be called) or to functions not being called because they have |
| been expanded as built-in functions. Such tests go in |
| @file{gcc.c-torture/execute}. Where code should be optimized away, a |
| call to a nonexistent function such as @code{link_failure ()} may be |
| inserted; a definition |
| |
| @smallexample |
| #ifndef __OPTIMIZE__ |
| void |
| link_failure (void) |
| @{ |
| abort (); |
| @} |
| #endif |
| @end smallexample |
| |
| @noindent |
| will also be needed so that linking still succeeds when the test is |
| run without optimization. When all calls to a built-in function |
| should have been optimized and no calls to the non-built-in version of |
| the function should remain, that function may be defined as |
| @code{static} to call @code{abort ()} (although redeclaring a function |
| as static may not work on all targets). |
| |
| All testcases must be portable. Target-specific testcases must have |
| appropriate code to avoid causing failures on unsupported systems; |
| unfortunately, the mechanisms for this differ by directory. |
| |
| FIXME: discuss non-C testsuites here. |
| |
| @node Ada Tests |
| @subsection Ada Language Testsuites |
| |
| The Ada testsuite includes executable tests from the ACATS 2.5 |
| testsuite, publicly available at |
| @uref{http://www.adaic.org/compilers/acats/2.5} |
| |
| These tests are integrated in the GCC testsuite in the |
| @file{gcc/testsuite/ada/acats} directory, and |
| enabled automatically when running @code{make check}, assuming |
| the Ada language has been enabled when configuring GCC. |
| |
| You can also run the Ada testsuite independently, using |
| @code{make check-ada}, or run a subset of the tests by specifying which |
| chapter to run, e.g: |
| |
| @smallexample |
| $ make check-ada CHAPTERS="c3 c9" |
| @end smallexample |
| |
| The tests are organized by directory, each directory corresponding to |
| a chapter of the Ada Reference Manual. So for example, c9 corresponds |
| to chapter 9, which deals with tasking features of the language. |
| |
| There is also an extra chapter called @file{gcc} containing a template for |
| creating new executable tests. |
| |
| The tests are run using two 'sh' scripts: run_acats and run_all.sh |
| To run the tests using a simulator or a cross target, see the small |
| customization section at the top of run_all.sh |
| |
| These tests are run using the build tree: they can be run without doing |
| a @code{make install}. |
| |
| @node C Tests |
| @subsection C Language Testsuites |
| |
| GCC contains the following C language testsuites, in the |
| @file{gcc/testsuite} directory: |
| |
| @table @file |
| @item gcc.dg |
| This contains tests of particular features of the C compiler, using the |
| more modern @samp{dg} harness. Correctness tests for various compiler |
| features should go here if possible. |
| |
| Magic comments determine whether the file |
| is preprocessed, compiled, linked or run. In these tests, error and warning |
| message texts are compared against expected texts or regular expressions |
| given in comments. These tests are run with the options @samp{-ansi -pedantic} |
| unless other options are given in the test. Except as noted below they |
| are not run with multiple optimization options. |
| @item gcc.dg/compat |
| This subdirectory contains tests for binary compatibility using |
| @file{compat.exp}, which in turn uses the language-independent support |
| (@pxref{compat Testing, , Support for testing binary compatibility}). |
| @item gcc.dg/cpp |
| This subdirectory contains tests of the preprocessor. |
| @item gcc.dg/debug |
| This subdirectory contains tests for debug formats. Tests in this |
| subdirectory are run for each debug format that the compiler supports. |
| @item gcc.dg/format |
| This subdirectory contains tests of the @option{-Wformat} format |
| checking. Tests in this directory are run with and without |
| @option{-DWIDE}. |
| @item gcc.dg/noncompile |
| This subdirectory contains tests of code that should not compile and |
| does not need any special compilation options. They are run with |
| multiple optimization options, since sometimes invalid code crashes |
| the compiler with optimization. |
| @item gcc.dg/special |
| FIXME: describe this. |
| |
| @item gcc.c-torture |
| This contains particular code fragments which have historically broken easily. |
| These tests are run with multiple optimization options, so tests for features |
| which only break at some optimization levels belong here. This also contains |
| tests to check that certain optimizations occur. It might be worthwhile to |
| separate the correctness tests cleanly from the code quality tests, but |
| it hasn't been done yet. |
| |
| @item gcc.c-torture/compat |
| FIXME: describe this. |
| |
| This directory should probably not be used for new tests. |
| @item gcc.c-torture/compile |
| This testsuite contains test cases that should compile, but do not |
| need to link or run. These test cases are compiled with several |
| different combinations of optimization options. All warnings are |
| disabled for these test cases, so this directory is not suitable if |
| you wish to test for the presence or absence of compiler warnings. |
| While special options can be set, and tests disabled on specific |
| platforms, by the use of @file{.x} files, mostly these test cases |
| should not contain platform dependencies. FIXME: discuss how defines |
| such as @code{NO_LABEL_VALUES} and @code{STACK_SIZE} are used. |
| @item gcc.c-torture/execute |
| This testsuite contains test cases that should compile, link and run; |
| otherwise the same comments as for @file{gcc.c-torture/compile} apply. |
| @item gcc.c-torture/execute/ieee |
| This contains tests which are specific to IEEE floating point. |
| @item gcc.c-torture/unsorted |
| FIXME: describe this. |
| |
| This directory should probably not be used for new tests. |
| @item gcc.c-torture/misc-tests |
| This directory contains C tests that require special handling. Some |
| of these tests have individual expect files, and others share |
| special-purpose expect files: |
| |
| @table @file |
| @item @code{bprob*.c} |
| Test @option{-fbranch-probabilities} using @file{bprob.exp}, which |
| in turn uses the generic, language-independent framework |
| (@pxref{profopt Testing, , Support for testing profile-directed |
| optimizations}). |
| |
| @item @code{dg-*.c} |
| Test the testsuite itself using @file{dg-test.exp}. |
| |
| @item @code{gcov*.c} |
| Test @command{gcov} output using @file{gcov.exp}, which in turn uses the |
| language-independent support (@pxref{gcov Testing, , Support for testing gcov}). |
| |
| @item @code{i386-pf-*.c} |
| Test i386-specific support for data prefetch using @file{i386-prefetch.exp}. |
| @end table |
| |
| @end table |
| |
| FIXME: merge in @file{testsuite/README.gcc} and discuss the format of |
| test cases and magic comments more. |
| |
| @node libgcj Tests |
| @subsection The Java library testsuites. |
| |
| Runtime tests are executed via @samp{make check} in the |
| @file{@var{target}/libjava/testsuite} directory in the build |
| tree. Additional runtime tests can be checked into this testsuite. |
| |
| Regression testing of the core packages in libgcj is also covered by the |
| Mauve testsuite. The @uref{http://sources.redhat.com/mauve/,,Mauve Project} |
| develops tests for the Java Class Libraries. These tests are run as part |
| of libgcj testing by placing the Mauve tree within the libjava testsuite |
| sources at @file{libjava/testsuite/libjava.mauve/mauve}, or by specifying |
| the location of that tree when invoking @samp{make}, as in |
| @samp{make MAUVEDIR=~/mauve check}. |
| |
| To detect regressions, a mechanism in @file{mauve.exp} compares the |
| failures for a test run against the list of expected failures in |
| @file{libjava/testsuite/libjava.mauve/xfails} from the source hierarchy. |
| Update this file when adding new failing tests to Mauve, or when fixing |
| bugs in libgcj that had caused Mauve test failures. |
| |
| The @uref{http://oss.software.ibm.com/developerworks/opensource/jacks/,, |
| Jacks} project provides a testsuite for Java compilers that can be used |
| to test changes that affect the GCJ front end. This testsuite is run as |
| part of Java testing by placing the Jacks tree within the the libjava |
| testsuite sources at @file{libjava/testsuite/libjava.jacks/jacks}. |
| |
| We encourage developers to contribute test cases to Mauve and Jacks. |
| |
| @node gcov Testing |
| @subsection Support for testing @command{gcov} |
| |
| Language-independent support for testing @command{gcov}, and for checking |
| that branch profiling produces expected values, is provided by the |
| expect file @file{gcov.exp}. @command{gcov} tests also rely on procedures |
| in @file{gcc.dg.exp} to compile and run the test program. A typical |
| @command{gcov} test contains the following DejaGNU commands within comments: |
| |
| @smallexample |
| @{ dg-options "-fprofile-arcs -ftest-coverage" @} |
| @{ dg-do run @{ target native @} @} |
| @{ dg-final @{ run-gcov sourcefile @} @} |
| @end smallexample |
| |
| Checks of @command{gcov} output can include line counts, branch percentages, |
| and call return percentages. All of these checks are requested via |
| commands that appear in comments in the test's source file. |
| Commands to check line counts are processed by default. |
| Commands to check branch percentages and call return percentages are |
| processed if the @command{run-gcov} command has arguments @code{branches} |
| or @code{calls}, respectively. For example, the following specifies |
| checking both, as well as passing @code{-b} to @command{gcov}: |
| |
| @smallexample |
| @{ dg-final @{ run-gcov branches calls @{ -b sourcefile @} @} @} |
| @end smallexample |
| |
| A line count command appears within a comment on the source line |
| that is expected to get the specified count and has the form |
| @code{count(@var{cnt})}. A test should only check line counts for |
| lines that will get the same count for any architecture. |
| |
| Commands to check branch percentages (@code{branch}) and call |
| return percentages (@code{returns}) are very similar to each other. |
| A beginning command appears on or before the first of a range of |
| lines that will report the percentage, and the ending command |
| follows that range of lines. The beginning command can include a |
| list of percentages, all of which are expected to be found within |
| the range. A range is terminated by the next command of the same |
| kind. A command @code{branch(end)} or @code{returns(end)} marks |
| the end of a range without starting a new one. For example: |
| |
| @smallexample |
| if (i > 10 && j > i && j < 20) /* branch(27 50 75) */ |
| /* branch(end) */ |
| foo (i, j); |
| @end smallexample |
| |
| For a call return percentage, the value specified is the |
| percentage of calls reported to return. For a branch percentage, |
| the value is either the expected percentage or 100 minus that |
| value, since the direction of a branch can differ depending on the |
| target or the optimization level. |
| |
| Not all branches and calls need to be checked. A test should not |
| check for branches that might be optimized away or replaced with |
| predicated instructions. Don't check for calls inserted by the |
| compiler or ones that might be inlined or optimized away. |
| |
| A single test can check for combinations of line counts, branch |
| percentages, and call return percentages. The command to check a |
| line count must appear on the line that will report that count, but |
| commands to check branch percentages and call return percentages can |
| bracket the lines that report them. |
| |
| @node profopt Testing |
| @subsection Support for testing profile-directed optimizations |
| |
| The file @file{profopt.exp} provides language-independent support for |
| checking correct execution of a test built with profile-directed |
| optimization. This testing requires that a test program be built and |
| executed twice. The first time it is compiled to generate profile |
| data, and the second time it is compiled to use the data that was |
| generated during the first execution. The second execution is to |
| verify that the test produces the expected results. |
| |
| To check that the optimization actually generated better code, a |
| test can be built and run a third time with normal optimizations to |
| verify that the performance is better with the profile-directed |
| optimizations. @file{profopt.exp} has the beginnings of this kind |
| of support. |
| |
| @file{profopt.exp} provides generic support for profile-directed |
| optimizations. Each set of tests that uses it provides information |
| about a specific optimization: |
| |
| @table @code |
| @item tool |
| tool being tested, e.g., @command{gcc} |
| |
| @item profile_option |
| options used to generate profile data |
| |
| @item feedback_option |
| options used to optimize using that profile data |
| |
| @item prof_ext |
| suffix of profile data files |
| |
| @item PROFOPT_OPTIONS |
| list of options with which to run each test, similar to the lists for |
| torture tests |
| @end table |
| |
| @node compat Testing |
| @subsection Support for testing binary compatibility |
| |
| The file @file{compat.exp} provides language-independent support for |
| binary compatibility testing. It supports testing interoperability of |
| two compilers that follow the same ABI, or of multiple sets of |
| compiler options that should not affect binary compatibility. It is |
| intended to be used for testsuites that complement ABI testsuites. |
| |
| A test supported by this framework has three parts, each in a |
| separate source file: a main program and two pieces that interact |
| with each other to split up the functionality being tested. |
| |
| @table @file |
| @item @var{testname}_main.@var{suffix} |
| Contains the main program, which calls a function in file |
| @file{@var{testname}_x.@var{suffix}}. |
| |
| @item @var{testname}_x.@var{suffix} |
| Contains at least one call to a function in |
| @file{@var{testname}_y.@var{suffix}}. |
| |
| @item @var{testname}_y.@var{suffix} |
| Shares data with, or gets arguments from, |
| @file{@var{testname}_x.@var{suffix}}. |
| @end table |
| |
| Within each test, the main program and one functional piece are |
| compiled by the GCC under test. The other piece can be compiled by |
| an alternate compiler. If no alternate compiler is specified, |
| then all three source files are all compiled by the GCC under test. |
| It's also possible to specify a pair of lists of compiler options, |
| one list for each compiler, so that each test will be compiled with |
| each pair of options. |
| |
| @file{compat.exp} defines default pairs of compiler options. |
| These can be overridden by defining the environment variable |
| @env{COMPAT_OPTIONS} as: |
| |
| @smallexample |
| COMPAT_OPTIONS="[list [list @{@var{tst1}@} @{@var{alt1}@}] |
| ...[list @{@var{tstn}@} @{@var{altn}@}]]" |
| @end smallexample |
| |
| where @var{tsti} and @var{alti} are lists of options, with @var{tsti} |
| used by the compiler under test and @var{alti} used by the alternate |
| compiler. For example, with |
| @code{[list [list @{-g -O0@} @{-O3@}] [list @{-fpic@} @{-fPIC -O2@}]]}, |
| the test is first built with @code{-g -O0} by the compiler under |
| test and with @code{-O3} by the alternate compiler. The test is |
| built a second time using @code{-fpic} by the compiler under test |
| and @code{-fPIC -O2} by the alternate compiler. |
| |
| An alternate compiler is specified by defining an environment |
| variable; for C++ define @env{ALT_CXX_UNDER_TEST} to be the full |
| pathname of an installed compiler. That will be written to the |
| @file{site.exp} file used by DejaGNU. The default is to build each |
| test with the compiler under test using the first of each pair of |
| compiler options from @env{COMPAT_OPTIONS}. When |
| @env{ALT_CXX_UNDER_TEST} is @code{same}, each test is built using |
| the compiler under test but with combinations of the options from |
| @env{COMPAT_OPTIONS}. |
| |
| To run only the C++ compatibility suite using the compiler under test |
| and another version of GCC using specific compiler options, do the |
| following from @file{@var{objdir}/gcc}: |
| |
| @smallexample |
| rm site.exp |
| make -k \ |
| ALT_CXX_UNDER_TEST=$@{alt_prefix@}/bin/g++ \ |
| COMPAT_OPTIONS="lists as shown above" \ |
| check-c++ \ |
| RUNTESTFLAGS="compat.exp" |
| @end smallexample |
| |
| A test that fails when the source files are compiled with different |
| compilers, but passes when the files are compiled with the same |
| compiler, demonstrates incompatibility of the generated code or |
| runtime support. A test that fails for the alternate compiler but |
| passes for the compiler under test probably tests for a bug that was |
| fixed in the compiler under test but is present in the alternate |
| compiler. |