12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237223822392240224122422243224422452246224722482249225022512252225322542255225622572258225922602261226222632264226522662267226822692270227122722273227422752276227722782279228022812282228322842285228622872288228922902291229222932294229522962297229822992300230123022303230423052306230723082309231023112312231323142315231623172318231923202321232223232324232523262327232823292330233123322333233423352336233723382339234023412342234323442345234623472348234923502351235223532354235523562357235823592360236123622363236423652366236723682369237023712372237323742375237623772378237923802381238223832384238523862387238823892390239123922393239423952396239723982399240024012402240324042405240624072408240924102411241224132414241524162417241824192420242124222423242424252426242724282429243024312432243324342435243624372438243924402441244224432444244524462447244824492450245124522453245424552456245724582459246024612462246324642465246624672468246924702471247224732474247524762477247824792480248124822483248424852486248724882489249024912492249324942495249624972498249925002501250225032504250525062507250825092510251125122513251425152516251725182519252025212522252325242525252625272528252925302531253225332534253525362537253825392540254125422543254425452546254725482549255025512552255325542555255625572558255925602561256225632564256525662567256825692570257125722573257425752576257725782579258025812582258325842585258625872588258925902591259225932594259525962597259825992600260126022603260426052606260726082609261026112612261326142615261626172618261926202621262226232624262526262627262826292630263126322633263426352636263726382639264026412642264326442645264626472648264926502651265226532654265526562657265826592660266126622663266426652666266726682669267026712672267326742675267626772678267926802681268226832684268526862687268826892690269126922693269426952696269726982699270027012702270327042705270627072708270927102711271227132714271527162717271827192720272127222723272427252726272727282729273027312732273327342735273627372738273927402741 |
- @c Copyright (C) 2002-2015 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.
- @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 config
- Autoconf macros and Makefile fragments used throughout the tree.
- @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 fixincludes
- The support for fixing system headers to work with GCC@. See
- @file{fixincludes/README} for more information. The headers fixed by
- this mechanism are installed in @file{@var{libsubdir}/include-fixed}.
- Along with those headers, @file{README-fixinc} is also installed, as
- @file{@var{libsubdir}/include-fixed/README}.
- @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 gnattools
- Support tools for GNAT.
- @item include
- Headers for the @code{libiberty} library.
- @item intl
- GNU @code{libintl}, from GNU @code{gettext}, for systems which do not
- include it in @code{libc}.
- @item libada
- The Ada runtime library.
- @item libatomic
- The runtime support library for atomic operations (e.g. for @code{__sync}
- and @code{__atomic}).
- @item libcpp
- The C preprocessor library.
- @item libdecnumber
- The Decimal Float support library.
- @item libffi
- The @code{libffi} library, used as part of the Java runtime library.
- @item libgcc
- The GCC runtime library.
- @item libgfortran
- The Fortran runtime library.
- @item libgo
- The Go runtime library. The bulk of this library is mirrored from the
- @uref{http://code.google.com/@/p/@/go/, master Go repository}.
- @item libgomp
- The GNU Offloading and Multi Processing 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 libitm
- The runtime support library for transactional memory.
- @item libjava
- The Java runtime library.
- @item libobjc
- The Objective-C and Objective-C++ runtime library.
- @item libquadmath
- The runtime support library for quad-precision math operations.
- @item libssp
- The Stack protector runtime library.
- @item libstdc++-v3
- The C++ runtime library.
- @item lto-plugin
- Plugin used by the linker if link-time optimizations are enabled.
- @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, as
- part of the Java runtime library, and for compressing and uncompressing
- GCC's intermediate language in LTO object files.
- @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{c} (for C), @file{cp} (for C++),
- @file{objc} (for Objective-C), @file{objcp} (for Objective-C++),
- and @file{lto} (for LTO) 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 common
- Source files shared between the compiler drivers (such as
- @command{gcc}) and the compilers proper (such as @file{cc1}). If an
- architecture defines target hooks shared between those places, it also
- has a subdirectory in @file{common/config}. @xref{Target Structure}.
- @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 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 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.
- @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.
- GCC can also install @code{<tgmath.h>}. It will do this when
- @file{config.gcc} sets @code{use_gcc_tgmath} to @code{yes}.
- @node Documentation
- @subsection Building Documentation
- The main GCC documentation is in the form of manuals in Texinfo
- format. These are installed in Info format; DVI versions may be
- generated by @samp{make dvi}, PDF versions by @samp{make pdf}, and
- HTML versions by @samp{make html}. 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_v3.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)}).
- PDF-formatted manuals are generated by @samp{make pdf}, which uses
- @command{texi2pdf} (via the Makefile macro @code{$(TEXI2PDF)}). HTML
- formatted manuals are generated by @samp{make html}. 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_svn}. 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}, PostScript manuals by @command{texi2dvi}
- and @command{dvips}, and PDF manuals by @command{texi2pdf}.
- All Texinfo files that are parts of manuals must
- be version-controlled, 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 in the @file{gcc} subdirectory
- 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
- @itemx COPYING3
- The GNU General Public License, Versions 2 and 3.
- @item COPYING.LIB
- @itemx COPYING3.LIB
- The GNU Lesser General Public License, Versions 2.1 and 3.
- @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?
- @end table
- FIXME: document such files in subdirectories, at least @file{config},
- @file{c}, @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}.
- @item
- Check targets in @file{Makefile.def} for the top-level @file{Makefile}
- to check just the compiler or the compiler and runtime library for the
- language.
- @end itemize
- If the front end is added to the official GCC source 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 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_svn} (@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.
- @item
- If this front end includes its own version files that include the
- current date, @file{maintainer-scripts/update_version} should be
- updated accordingly.
- @end itemize
- @menu
- * Front End Directory:: The front end @file{@var{language}} directory.
- * Front End Config:: The front end @file{config-lang.in} file.
- * Front End Makefile:: The front end @file{Make-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 built 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. @xref{Front End
- Makefile, , The Front End @file{Make-lang.in} File}, for details of its
- contents.
- @item lang.opt
- This file registers the set of switches that the front end accepts on
- the command line, and their @option{--help} text. @xref{Options}.
- @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.
- 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 subdir_requires
- If defined, this variable lists (space-separated) front end directories
- other than C that this front end requires to be present. For example,
- the Objective-C++ front end uses source files from the C++ and
- Objective-C front ends, so sets @samp{subdir_requires="cp objc"}.
- @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 stage1 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 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
- @file{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 Front End Makefile
- @subsubsection The Front End @file{Make-lang.in} File
- Each language subdirectory contains a @file{Make-lang.in} file. 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). 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.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.
- @item pdf
- Build PDF documentation for the front end, in the build directory.
- This should be done using @code{$(TEXI2PDF)}, with appropriate
- @option{-I} arguments pointing to directories of included files.
- @item html
- Build HTML documentation for the front end, in the build directory.
- @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-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.
- @item install-man
- Install man pages for the front end. This target should ignore
- errors.
- @item install-plugin
- Install headers needed for plugins.
- @item srcextra
- Copies its dependencies into the source directory. This generally should
- be used for generated files such as Bison output files which are not
- version-controlled, 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 version-controlled,
- but should not delete anything that is.
- @end table
- @file{Make-lang.in} must also define a variable @code{@var{lang}_OBJS}
- to a list of host object files that are used by that language.
- @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
- An optional @file{@var{machine}.opt} file in the @file{@var{machine}}
- directory, containing a list of target-specific options. You can also
- add other option files using the @code{extra_options} variable in
- @file{config.gcc}. @xref{Options}.
- @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/extend.texi} of any target-specific
- format checking styles 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 @code{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 source 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.
- @item
- Target triplets covering all @file{config.gcc} stanzas for the target,
- in the list in @file{contrib/config-list.mk}.
- @end itemize
- @node Testsuites
- @chapter 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.
- * Test Directives:: Directives used within DejaGnu tests.
- * Ada Tests:: The Ada language testsuites.
- * C Tests:: The C language testsuites.
- * libgcj Tests:: The Java library testsuites.
- * LTO Testing:: Support for testing link-time optimizations.
- * gcov Testing:: Support for testing gcov.
- * profopt Testing:: Support for testing profile-directed optimizations.
- * compat Testing:: Support for testing binary compatibility.
- * Torture Tests:: Support for torture testing using multiple options.
- @end menu
- @node Test Idioms
- @section 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.
- 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 Test Directives
- @section Directives used within DejaGnu tests
- @menu
- * Directives:: Syntax and descriptions of test directives.
- * Selectors:: Selecting targets to which a test applies.
- * Effective-Target Keywords:: Keywords describing target attributes.
- * Add Options:: Features for @code{dg-add-options}
- * Require Support:: Variants of @code{dg-require-@var{support}}
- * Final Actions:: Commands for use in @code{dg-final}
- @end menu
- @node Directives
- @subsection Syntax and Descriptions of test directives
- Test directives appear within comments in a test source file and begin
- with @code{dg-}. Some of these are defined within DejaGnu and others
- are local to the GCC testsuite.
- The order in which test directives appear in a test can be important:
- directives local to GCC sometimes override information used by the
- DejaGnu directives, which know nothing about the GCC directives, so the
- DejaGnu directives must precede GCC directives.
- Several test directives include selectors (@pxref{Selectors, , })
- which are usually preceded by the keyword @code{target} or @code{xfail}.
- @subsubsection Specify how to build the test
- @table @code
- @item @{ dg-do @var{do-what-keyword} [@{ target/xfail @var{selector} @}] @}
- @var{do-what-keyword} specifies how the test is compiled and whether
- it is executed. It is one of:
- @table @code
- @item preprocess
- Compile with @option{-E} to run only the preprocessor.
- @item compile
- Compile with @option{-S} to produce an assembly code file.
- @item assemble
- Compile with @option{-c} to produce a relocatable object file.
- @item link
- Compile, assemble, and link to produce an executable file.
- @item run
- Produce and run an executable file, which is expected to return
- an exit code of 0.
- @end table
- The default is @code{compile}. That can be overridden for a set of
- tests by redefining @code{dg-do-what-default} within the @code{.exp}
- file for those tests.
- If the directive includes the optional @samp{@{ target @var{selector} @}}
- then the test is skipped unless the target system matches the
- @var{selector}.
- If @var{do-what-keyword} is @code{run} and the directive includes
- the optional @samp{@{ xfail @var{selector} @}} and the selector is met
- then the test is expected to fail. The @code{xfail} clause is ignored
- for other values of @var{do-what-keyword}; those tests can use
- directive @code{dg-xfail-if}.
- @end table
- @subsubsection Specify additional compiler options
- @table @code
- @item @{ dg-options @var{options} [@{ target @var{selector} @}] @}
- This DejaGnu directive provides a list of compiler options, to be used
- if the target system matches @var{selector}, that replace the default
- options used for this set of tests.
- @item @{ dg-add-options @var{feature} @dots{} @}
- Add any compiler options that are needed to access certain features.
- This directive does nothing on targets that enable the features by
- default, or that don't provide them at all. It must come after
- all @code{dg-options} directives.
- For supported values of @var{feature} see @ref{Add Options, ,}.
- @item @{ dg-additional-options @var{options} [@{ target @var{selector} @}] @}
- This directive provides a list of compiler options, to be used
- if the target system matches @var{selector}, that are added to the default
- options used for this set of tests.
- @end table
- @subsubsection Modify the test timeout value
- The normal timeout limit, in seconds, is found by searching the
- following in order:
- @itemize @bullet
- @item the value defined by an earlier @code{dg-timeout} directive in
- the test
- @item variable @var{tool_timeout} defined by the set of tests
- @item @var{gcc},@var{timeout} set in the target board
- @item 300
- @end itemize
- @table @code
- @item @{ dg-timeout @var{n} [@{target @var{selector} @}] @}
- Set the time limit for the compilation and for the execution of the test
- to the specified number of seconds.
- @item @{ dg-timeout-factor @var{x} [@{ target @var{selector} @}] @}
- Multiply the normal time limit for compilation and execution of the test
- by the specified floating-point factor.
- @end table
- @subsubsection Skip a test for some targets
- @table @code
- @item @{ dg-skip-if @var{comment} @{ @var{selector} @} [@{ @var{include-opts} @} [@{ @var{exclude-opts} @}]] @}
- Arguments @var{include-opts} and @var{exclude-opts} are lists in which
- each element is a string of zero or more GCC options.
- Skip the test if all of the following conditions are met:
- @itemize @bullet
- @item the test system is included in @var{selector}
- @item for at least one of the option strings in @var{include-opts},
- every option from that string is in the set of options with which
- the test would be compiled; use @samp{"*"} for an @var{include-opts} list
- that matches any options; that is the default if @var{include-opts} is
- not specified
- @item for each of the option strings in @var{exclude-opts}, at least one
- option from that string is not in the set of options with which the test
- would be compiled; use @samp{""} for an empty @var{exclude-opts} list;
- that is the default if @var{exclude-opts} is not specified
- @end itemize
- For example, to skip a test if option @code{-Os} is present:
- @smallexample
- /* @{ dg-skip-if "" @{ *-*-* @} @{ "-Os" @} @{ "" @} @} */
- @end smallexample
- To skip a test if both options @code{-O2} and @code{-g} are present:
- @smallexample
- /* @{ dg-skip-if "" @{ *-*-* @} @{ "-O2 -g" @} @{ "" @} @} */
- @end smallexample
- To skip a test if either @code{-O2} or @code{-O3} is present:
- @smallexample
- /* @{ dg-skip-if "" @{ *-*-* @} @{ "-O2" "-O3" @} @{ "" @} @} */
- @end smallexample
- To skip a test unless option @code{-Os} is present:
- @smallexample
- /* @{ dg-skip-if "" @{ *-*-* @} @{ "*" @} @{ "-Os" @} @} */
- @end smallexample
- To skip a test if either @code{-O2} or @code{-O3} is used with @code{-g}
- but not if @code{-fpic} is also present:
- @smallexample
- /* @{ dg-skip-if "" @{ *-*-* @} @{ "-O2 -g" "-O3 -g" @} @{ "-fpic" @} @} */
- @end smallexample
- @item @{ dg-require-effective-target @var{keyword} [@{ @var{selector} @}] @}
- Skip the test if the test target, including current multilib flags,
- is not covered by the effective-target keyword.
- If the directive includes the optional @samp{@{ @var{selector} @}}
- then the effective-target test is only performed if the target system
- matches the @var{selector}.
- This directive must appear after any @code{dg-do} directive in the test
- and before any @code{dg-additional-sources} directive.
- @xref{Effective-Target Keywords, , }.
- @item @{ dg-require-@var{support} args @}
- Skip the test if the target does not provide the required support.
- These directives must appear after any @code{dg-do} directive in the test
- and before any @code{dg-additional-sources} directive.
- They require at least one argument, which can be an empty string if the
- specific procedure does not examine the argument.
- @xref{Require Support, , }, for a complete list of these directives.
- @end table
- @subsubsection Expect a test to fail for some targets
- @table @code
- @item @{ dg-xfail-if @var{comment} @{ @var{selector} @} [@{ @var{include-opts} @} [@{ @var{exclude-opts} @}]] @}
- Expect the test to fail if the conditions (which are the same as for
- @code{dg-skip-if}) are met. This does not affect the execute step.
- @item @{ dg-xfail-run-if @var{comment} @{ @var{selector} @} [@{ @var{include-opts} @} [@{ @var{exclude-opts} @}]] @}
- Expect the execute step of a test to fail if the conditions (which are
- the same as for @code{dg-skip-if}) are met.
- @end table
- @subsubsection Expect the test executable to fail
- @table @code
- @item @{ dg-shouldfail @var{comment} [@{ @var{selector} @} [@{ @var{include-opts} @} [@{ @var{exclude-opts} @}]]] @}
- Expect the test executable to return a nonzero exit status if the
- conditions (which are the same as for @code{dg-skip-if}) are met.
- @end table
- @subsubsection Verify compiler messages
- @table @code
- @item @{ dg-error @var{regexp} [@var{comment} [@{ target/xfail @var{selector} @} [@var{line}] @}]] @}
- This DejaGnu directive appears on a source line that is expected to get
- an error message, or else specifies the source line associated with the
- message. If there is no message for that line or if the text of that
- message is not matched by @var{regexp} then the check fails and
- @var{comment} is included in the @code{FAIL} message. The check does
- not look for the string @samp{error} unless it is part of @var{regexp}.
- @item @{ dg-warning @var{regexp} [@var{comment} [@{ target/xfail @var{selector} @} [@var{line}] @}]] @}
- This DejaGnu directive appears on a source line that is expected to get
- a warning message, or else specifies the source line associated with the
- message. If there is no message for that line or if the text of that
- message is not matched by @var{regexp} then the check fails and
- @var{comment} is included in the @code{FAIL} message. The check does
- not look for the string @samp{warning} unless it is part of @var{regexp}.
- @item @{ dg-message @var{regexp} [@var{comment} [@{ target/xfail @var{selector} @} [@var{line}] @}]] @}
- The line is expected to get a message other than an error or warning.
- If there is no message for that line or if the text of that message is
- not matched by @var{regexp} then the check fails and @var{comment} is
- included in the @code{FAIL} message.
- @item @{ dg-bogus @var{regexp} [@var{comment} [@{ target/xfail @var{selector} @} [@var{line}] @}]] @}
- This DejaGnu directive appears on a source line that should not get a
- message matching @var{regexp}, or else specifies the source line
- associated with the bogus message. It is usually used with @samp{xfail}
- to indicate that the message is a known problem for a particular set of
- targets.
- @item @{ dg-excess-errors @var{comment} [@{ target/xfail @var{selector} @}] @}
- This DejaGnu directive indicates that the test is expected to fail due
- to compiler messages that are not handled by @samp{dg-error},
- @samp{dg-warning} or @samp{dg-bogus}. For this directive @samp{xfail}
- has the same effect as @samp{target}.
- @item @{ dg-prune-output @var{regexp} @}
- Prune messages matching @var{regexp} from the test output.
- @end table
- @subsubsection Verify output of the test executable
- @table @code
- @item @{ dg-output @var{regexp} [@{ target/xfail @var{selector} @}] @}
- This DejaGnu directive compares @var{regexp} to the combined output
- that the test executable writes to @file{stdout} and @file{stderr}.
- @end table
- @subsubsection Specify additional files for a test
- @table @code
- @item @{ dg-additional-files "@var{filelist}" @}
- Specify additional files, other than source files, that must be copied
- to the system where the compiler runs.
- @item @{ dg-additional-sources "@var{filelist}" @}
- Specify additional source files to appear in the compile line
- following the main test file.
- @end table
- @subsubsection Add checks at the end of a test
- @table @code
- @item @{ dg-final @{ @var{local-directive} @} @}
- This DejaGnu directive is placed within a comment anywhere in the
- source file and is processed after the test has been compiled and run.
- Multiple @samp{dg-final} commands are processed in the order in which
- they appear in the source file. @xref{Final Actions, , }, for a list
- of directives that can be used within @code{dg-final}.
- @end table
- @node Selectors
- @subsection Selecting targets to which a test applies
- Several test directives include @var{selector}s to limit the targets
- for which a test is run or to declare that a test is expected to fail
- on particular targets.
- A selector is:
- @itemize @bullet
- @item one or more target triplets, possibly including wildcard characters;
- use @samp{*-*-*} to match any target
- @item a single effective-target keyword (@pxref{Effective-Target Keywords})
- @item a logical expression
- @end itemize
- Depending on the context, the selector specifies whether a test is
- skipped and reported as unsupported or is expected to fail. A context
- that allows either @samp{target} or @samp{xfail} also allows
- @samp{@{ target @var{selector1} xfail @var{selector2} @}}
- to skip the test for targets that don't match @var{selector1} and the
- test to fail for targets that match @var{selector2}.
- A selector expression appears within curly braces and uses a single
- logical operator: one of @samp{!}, @samp{&&}, or @samp{||}. An
- operand is another selector expression, an effective-target keyword,
- a single target triplet, or a list of target triplets within quotes or
- curly braces. For example:
- @smallexample
- @{ target @{ ! "hppa*-*-* ia64*-*-*" @} @}
- @{ target @{ powerpc*-*-* && lp64 @} @}
- @{ xfail @{ lp64 || vect_no_align @} @}
- @end smallexample
- @node Effective-Target Keywords
- @subsection Keywords describing target attributes
- Effective-target keywords identify sets of targets that support
- particular functionality. They are used to limit tests to be run only
- for particular targets, or to specify that particular sets of targets
- are expected to fail some tests.
- Effective-target keywords are defined in @file{lib/target-supports.exp} in
- the GCC testsuite, with the exception of those that are documented as
- being local to a particular test directory.
- The @samp{effective target} takes into account all of the compiler options
- with which the test will be compiled, including the multilib options.
- By convention, keywords ending in @code{_nocache} can also include options
- specified for the particular test in an earlier @code{dg-options} or
- @code{dg-add-options} directive.
- @subsubsection Data type sizes
- @table @code
- @item ilp32
- Target has 32-bit @code{int}, @code{long}, and pointers.
- @item lp64
- Target has 32-bit @code{int}, 64-bit @code{long} and pointers.
- @item llp64
- Target has 32-bit @code{int} and @code{long}, 64-bit @code{long long}
- and pointers.
- @item double64
- Target has 64-bit @code{double}.
- @item double64plus
- Target has @code{double} that is 64 bits or longer.
- @item longdouble128
- Target has 128-bit @code{long double}.
- @item int32plus
- Target has @code{int} that is at 32 bits or longer.
- @item int16
- Target has @code{int} that is 16 bits or shorter.
- @item long_neq_int
- Target has @code{int} and @code{long} with different sizes.
- @item large_double
- Target supports @code{double} that is longer than @code{float}.
- @item large_long_double
- Target supports @code{long double} that is longer than @code{double}.
- @item ptr32plus
- Target has pointers that are 32 bits or longer.
- @item size32plus
- Target supports array and structure sizes that are 32 bits or longer.
- @item 4byte_wchar_t
- Target has @code{wchar_t} that is at least 4 bytes.
- @end table
- @subsubsection Fortran-specific attributes
- @table @code
- @item fortran_integer_16
- Target supports Fortran @code{integer} that is 16 bytes or longer.
- @item fortran_large_int
- Target supports Fortran @code{integer} kinds larger than @code{integer(8)}.
- @item fortran_large_real
- Target supports Fortran @code{real} kinds larger than @code{real(8)}.
- @end table
- @subsubsection Vector-specific attributes
- @table @code
- @item vect_condition
- Target supports vector conditional operations.
- @item vect_double
- Target supports hardware vectors of @code{double}.
- @item vect_float
- Target supports hardware vectors of @code{float}.
- @item vect_int
- Target supports hardware vectors of @code{int}.
- @item vect_long
- Target supports hardware vectors of @code{long}.
- @item vect_long_long
- Target supports hardware vectors of @code{long long}.
- @item vect_aligned_arrays
- Target aligns arrays to vector alignment boundary.
- @item vect_hw_misalign
- Target supports a vector misalign access.
- @item vect_no_align
- Target does not support a vector alignment mechanism.
- @item vect_no_int_max
- Target does not support a vector max instruction on @code{int}.
- @item vect_no_int_add
- Target does not support a vector add instruction on @code{int}.
- @item vect_no_bitwise
- Target does not support vector bitwise instructions.
- @item vect_char_mult
- Target supports @code{vector char} multiplication.
- @item vect_short_mult
- Target supports @code{vector short} multiplication.
- @item vect_int_mult
- Target supports @code{vector int} multiplication.
- @item vect_extract_even_odd
- Target supports vector even/odd element extraction.
- @item vect_extract_even_odd_wide
- Target supports vector even/odd element extraction of vectors with elements
- @code{SImode} or larger.
- @item vect_interleave
- Target supports vector interleaving.
- @item vect_strided
- Target supports vector interleaving and extract even/odd.
- @item vect_strided_wide
- Target supports vector interleaving and extract even/odd for wide
- element types.
- @item vect_perm
- Target supports vector permutation.
- @item vect_shift
- Target supports a hardware vector shift operation.
- @item vect_widen_sum_hi_to_si
- Target supports a vector widening summation of @code{short} operands
- into @code{int} results, or can promote (unpack) from @code{short}
- to @code{int}.
- @item vect_widen_sum_qi_to_hi
- Target supports a vector widening summation of @code{char} operands
- into @code{short} results, or can promote (unpack) from @code{char}
- to @code{short}.
- @item vect_widen_sum_qi_to_si
- Target supports a vector widening summation of @code{char} operands
- into @code{int} results.
- @item vect_widen_mult_qi_to_hi
- Target supports a vector widening multiplication of @code{char} operands
- into @code{short} results, or can promote (unpack) from @code{char} to
- @code{short} and perform non-widening multiplication of @code{short}.
- @item vect_widen_mult_hi_to_si
- Target supports a vector widening multiplication of @code{short} operands
- into @code{int} results, or can promote (unpack) from @code{short} to
- @code{int} and perform non-widening multiplication of @code{int}.
- @item vect_widen_mult_si_to_di_pattern
- Target supports a vector widening multiplication of @code{int} operands
- into @code{long} results.
- @item vect_sdot_qi
- Target supports a vector dot-product of @code{signed char}.
- @item vect_udot_qi
- Target supports a vector dot-product of @code{unsigned char}.
- @item vect_sdot_hi
- Target supports a vector dot-product of @code{signed short}.
- @item vect_udot_hi
- Target supports a vector dot-product of @code{unsigned short}.
- @item vect_pack_trunc
- Target supports a vector demotion (packing) of @code{short} to @code{char}
- and from @code{int} to @code{short} using modulo arithmetic.
- @item vect_unpack
- Target supports a vector promotion (unpacking) of @code{char} to @code{short}
- and from @code{char} to @code{int}.
- @item vect_intfloat_cvt
- Target supports conversion from @code{signed int} to @code{float}.
- @item vect_uintfloat_cvt
- Target supports conversion from @code{unsigned int} to @code{float}.
- @item vect_floatint_cvt
- Target supports conversion from @code{float} to @code{signed int}.
- @item vect_floatuint_cvt
- Target supports conversion from @code{float} to @code{unsigned int}.
- @end table
- @subsubsection Thread Local Storage attributes
- @table @code
- @item tls
- Target supports thread-local storage.
- @item tls_native
- Target supports native (rather than emulated) thread-local storage.
- @item tls_runtime
- Test system supports executing TLS executables.
- @end table
- @subsubsection Decimal floating point attributes
- @table @code
- @item dfp
- Targets supports compiling decimal floating point extension to C.
- @item dfp_nocache
- Including the options used to compile this particular test, the
- target supports compiling decimal floating point extension to C.
- @item dfprt
- Test system can execute decimal floating point tests.
- @item dfprt_nocache
- Including the options used to compile this particular test, the
- test system can execute decimal floating point tests.
- @item hard_dfp
- Target generates decimal floating point instructions with current options.
- @end table
- @subsubsection ARM-specific attributes
- @table @code
- @item arm32
- ARM target generates 32-bit code.
- @item arm_eabi
- ARM target adheres to the ABI for the ARM Architecture.
- @item arm_hf_eabi
- ARM target adheres to the VFP and Advanced SIMD Register Arguments
- variant of the ABI for the ARM Architecture (as selected with
- @code{-mfloat-abi=hard}).
- @item arm_hard_vfp_ok
- ARM target supports @code{-mfpu=vfp -mfloat-abi=hard}.
- Some multilibs may be incompatible with these options.
- @item arm_iwmmxt_ok
- ARM target supports @code{-mcpu=iwmmxt}.
- Some multilibs may be incompatible with this option.
- @item arm_neon
- ARM target supports generating NEON instructions.
- @item arm_tune_string_ops_prefer_neon
- Test CPU tune supports inlining string operations with NEON instructions.
- @item arm_neon_hw
- Test system supports executing NEON instructions.
- @item arm_neonv2_hw
- Test system supports executing NEON v2 instructions.
- @item arm_neon_ok
- @anchor{arm_neon_ok}
- ARM Target supports @code{-mfpu=neon -mfloat-abi=softfp} or compatible
- options. Some multilibs may be incompatible with these options.
- @item arm_neonv2_ok
- @anchor{arm_neonv2_ok}
- ARM Target supports @code{-mfpu=neon-vfpv4 -mfloat-abi=softfp} or compatible
- options. Some multilibs may be incompatible with these options.
- @item arm_neon_fp16_ok
- @anchor{arm_neon_fp16_ok}
- ARM Target supports @code{-mfpu=neon-fp16 -mfloat-abi=softfp} or compatible
- options. Some multilibs may be incompatible with these options.
- @item arm_thumb1_ok
- ARM target generates Thumb-1 code for @code{-mthumb}.
- @item arm_thumb2_ok
- ARM target generates Thumb-2 code for @code{-mthumb}.
- @item arm_vfp_ok
- ARM target supports @code{-mfpu=vfp -mfloat-abi=softfp}.
- Some multilibs may be incompatible with these options.
- @item arm_vfp3_ok
- @anchor{arm_vfp3_ok}
- ARM target supports @code{-mfpu=vfp3 -mfloat-abi=softfp}.
- Some multilibs may be incompatible with these options.
- @item arm_v8_vfp_ok
- ARM target supports @code{-mfpu=fp-armv8 -mfloat-abi=softfp}.
- Some multilibs may be incompatible with these options.
- @item arm_v8_neon_ok
- ARM target supports @code{-mfpu=neon-fp-armv8 -mfloat-abi=softfp}.
- Some multilibs may be incompatible with these options.
- @item arm_prefer_ldrd_strd
- ARM target prefers @code{LDRD} and @code{STRD} instructions over
- @code{LDM} and @code{STM} instructions.
- @end table
- @subsubsection MIPS-specific attributes
- @table @code
- @item mips64
- MIPS target supports 64-bit instructions.
- @item nomips16
- MIPS target does not produce MIPS16 code.
- @item mips16_attribute
- MIPS target can generate MIPS16 code.
- @item mips_loongson
- MIPS target is a Loongson-2E or -2F target using an ABI that supports
- the Loongson vector modes.
- @item mips_newabi_large_long_double
- MIPS target supports @code{long double} larger than @code{double}
- when using the new ABI.
- @item mpaired_single
- MIPS target supports @code{-mpaired-single}.
- @end table
- @subsubsection PowerPC-specific attributes
- @table @code
- @item dfp_hw
- PowerPC target supports executing hardware DFP instructions.
- @item p8vector_hw
- PowerPC target supports executing VSX instructions (ISA 2.07).
- @item powerpc64
- Test system supports executing 64-bit instructions.
- @item powerpc_altivec
- PowerPC target supports AltiVec.
- @item powerpc_altivec_ok
- PowerPC target supports @code{-maltivec}.
- @item powerpc_eabi_ok
- PowerPC target supports @code{-meabi}.
- @item powerpc_elfv2
- PowerPC target supports @code{-mabi=elfv2}.
- @item powerpc_fprs
- PowerPC target supports floating-point registers.
- @item powerpc_hard_double
- PowerPC target supports hardware double-precision floating-point.
- @item powerpc_htm_ok
- PowerPC target supports @code{-mhtm}
- @item powerpc_p8vector_ok
- PowerPC target supports @code{-mpower8-vector}
- @item powerpc_ppu_ok
- PowerPC target supports @code{-mcpu=cell}.
- @item powerpc_spe
- PowerPC target supports PowerPC SPE.
- @item powerpc_spe_nocache
- Including the options used to compile this particular test, the
- PowerPC target supports PowerPC SPE.
- @item powerpc_spu
- PowerPC target supports PowerPC SPU.
- @item powerpc_vsx_ok
- PowerPC target supports @code{-mvsx}.
- @item powerpc_405_nocache
- Including the options used to compile this particular test, the
- PowerPC target supports PowerPC 405.
- @item ppc_recip_hw
- PowerPC target supports executing reciprocal estimate instructions.
- @item spu_auto_overlay
- SPU target has toolchain that supports automatic overlay generation.
- @item vmx_hw
- PowerPC target supports executing AltiVec instructions.
- @item vsx_hw
- PowerPC target supports executing VSX instructions (ISA 2.06).
- @end table
- @subsubsection Other hardware attributes
- @table @code
- @item avx
- Target supports compiling @code{avx} instructions.
- @item avx_runtime
- Target supports the execution of @code{avx} instructions.
- @item cell_hw
- Test system can execute AltiVec and Cell PPU instructions.
- @item coldfire_fpu
- Target uses a ColdFire FPU.
- @item hard_float
- Target supports FPU instructions.
- @item non_strict_align
- Target does not require strict alignment.
- @item sse
- Target supports compiling @code{sse} instructions.
- @item sse_runtime
- Target supports the execution of @code{sse} instructions.
- @item sse2
- Target supports compiling @code{sse2} instructions.
- @item sse2_runtime
- Target supports the execution of @code{sse2} instructions.
- @item sync_char_short
- Target supports atomic operations on @code{char} and @code{short}.
- @item sync_int_long
- Target supports atomic operations on @code{int} and @code{long}.
- @item ultrasparc_hw
- Test environment appears to run executables on a simulator that
- accepts only @code{EM_SPARC} executables and chokes on @code{EM_SPARC32PLUS}
- or @code{EM_SPARCV9} executables.
- @item vect_cmdline_needed
- Target requires a command line argument to enable a SIMD instruction set.
- @item pie_copyreloc
- The x86-64 target linker supports PIE with copy reloc.
- @end table
- @subsubsection Environment attributes
- @table @code
- @item c
- The language for the compiler under test is C.
- @item c++
- The language for the compiler under test is C++.
- @item c99_runtime
- Target provides a full C99 runtime.
- @item correct_iso_cpp_string_wchar_protos
- Target @code{string.h} and @code{wchar.h} headers provide C++ required
- overloads for @code{strchr} etc. functions.
- @item dummy_wcsftime
- Target uses a dummy @code{wcsftime} function that always returns zero.
- @item fd_truncate
- Target can truncate a file from a file descriptor, as used by
- @file{libgfortran/io/unix.c:fd_truncate}; i.e. @code{ftruncate} or
- @code{chsize}.
- @item freestanding
- Target is @samp{freestanding} as defined in section 4 of the C99 standard.
- Effectively, it is a target which supports no extra headers or libraries
- other than what is considered essential.
- @item init_priority
- Target supports constructors with initialization priority arguments.
- @item inttypes_types
- Target has the basic signed and unsigned types in @code{inttypes.h}.
- This is for tests that GCC's notions of these types agree with those
- in the header, as some systems have only @code{inttypes.h}.
- @item lax_strtofp
- Target might have errors of a few ULP in string to floating-point
- conversion functions and overflow is not always detected correctly by
- those functions.
- @item mempcpy
- Target provides @code{mempcpy} function.
- @item mmap
- Target supports @code{mmap}.
- @item newlib
- Target supports Newlib.
- @item pow10
- Target provides @code{pow10} function.
- @item pthread
- Target can compile using @code{pthread.h} with no errors or warnings.
- @item pthread_h
- Target has @code{pthread.h}.
- @item run_expensive_tests
- Expensive testcases (usually those that consume excessive amounts of CPU
- time) should be run on this target. This can be enabled by setting the
- @env{GCC_TEST_RUN_EXPENSIVE} environment variable to a non-empty string.
- @item simulator
- Test system runs executables on a simulator (i.e. slowly) rather than
- hardware (i.e. fast).
- @item stdint_types
- Target has the basic signed and unsigned C types in @code{stdint.h}.
- This will be obsolete when GCC ensures a working @code{stdint.h} for
- all targets.
- @item stpcpy
- Target provides @code{stpcpy} function.
- @item trampolines
- Target supports trampolines.
- @item uclibc
- Target supports uClibc.
- @item unwrapped
- Target does not use a status wrapper.
- @item vxworks_kernel
- Target is a VxWorks kernel.
- @item vxworks_rtp
- Target is a VxWorks RTP.
- @item wchar
- Target supports wide characters.
- @end table
- @subsubsection Other attributes
- @table @code
- @item automatic_stack_alignment
- Target supports automatic stack alignment.
- @item cxa_atexit
- Target uses @code{__cxa_atexit}.
- @item default_packed
- Target has packed layout of structure members by default.
- @item fgraphite
- Target supports Graphite optimizations.
- @item fixed_point
- Target supports fixed-point extension to C.
- @item fopenacc
- Target supports OpenACC via @option{-fopenacc}.
- @item fopenmp
- Target supports OpenMP via @option{-fopenmp}.
- @item fpic
- Target supports @option{-fpic} and @option{-fPIC}.
- @item freorder
- Target supports @option{-freorder-blocks-and-partition}.
- @item fstack_protector
- Target supports @option{-fstack-protector}.
- @item gas
- Target uses GNU @command{as}.
- @item gc_sections
- Target supports @option{--gc-sections}.
- @item gld
- Target uses GNU @command{ld}.
- @item keeps_null_pointer_checks
- Target keeps null pointer checks, either due to the use of
- @option{-fno-delete-null-pointer-checks} or hardwired into the target.
- @item lto
- Compiler has been configured to support link-time optimization (LTO).
- @item naked_functions
- Target supports the @code{naked} function attribute.
- @item named_sections
- Target supports named sections.
- @item natural_alignment_32
- Target uses natural alignment (aligned to type size) for types of
- 32 bits or less.
- @item target_natural_alignment_64
- Target uses natural alignment (aligned to type size) for types of
- 64 bits or less.
- @item nonpic
- Target does not generate PIC by default.
- @item pie_enabled
- Target generates PIE by default.
- @item pcc_bitfield_type_matters
- Target defines @code{PCC_BITFIELD_TYPE_MATTERS}.
- @item pe_aligned_commons
- Target supports @option{-mpe-aligned-commons}.
- @item pie
- Target supports @option{-pie}, @option{-fpie} and @option{-fPIE}.
- @item section_anchors
- Target supports section anchors.
- @item short_enums
- Target defaults to short enums.
- @item static
- Target supports @option{-static}.
- @item static_libgfortran
- Target supports statically linking @samp{libgfortran}.
- @item string_merging
- Target supports merging string constants at link time.
- @item ucn
- Target supports compiling and assembling UCN.
- @item ucn_nocache
- Including the options used to compile this particular test, the
- target supports compiling and assembling UCN.
- @item unaligned_stack
- Target does not guarantee that its @code{STACK_BOUNDARY} is greater than
- or equal to the required vector alignment.
- @item vector_alignment_reachable
- Vector alignment is reachable for types of 32 bits or less.
- @item vector_alignment_reachable_for_64bit
- Vector alignment is reachable for types of 64 bits or less.
- @item wchar_t_char16_t_compatible
- Target supports @code{wchar_t} that is compatible with @code{char16_t}.
- @item wchar_t_char32_t_compatible
- Target supports @code{wchar_t} that is compatible with @code{char32_t}.
- @item comdat_group
- Target uses comdat groups.
- @end table
- @subsubsection Local to tests in @code{gcc.target/i386}
- @table @code
- @item 3dnow
- Target supports compiling @code{3dnow} instructions.
- @item aes
- Target supports compiling @code{aes} instructions.
- @item fma4
- Target supports compiling @code{fma4} instructions.
- @item ms_hook_prologue
- Target supports attribute @code{ms_hook_prologue}.
- @item pclmul
- Target supports compiling @code{pclmul} instructions.
- @item sse3
- Target supports compiling @code{sse3} instructions.
- @item sse4
- Target supports compiling @code{sse4} instructions.
- @item sse4a
- Target supports compiling @code{sse4a} instructions.
- @item ssse3
- Target supports compiling @code{ssse3} instructions.
- @item vaes
- Target supports compiling @code{vaes} instructions.
- @item vpclmul
- Target supports compiling @code{vpclmul} instructions.
- @item xop
- Target supports compiling @code{xop} instructions.
- @end table
- @subsubsection Local to tests in @code{gcc.target/spu/ea}
- @table @code
- @item ealib
- Target @code{__ea} library functions are available.
- @end table
- @subsubsection Local to tests in @code{gcc.test-framework}
- @table @code
- @item no
- Always returns 0.
- @item yes
- Always returns 1.
- @end table
- @node Add Options
- @subsection Features for @code{dg-add-options}
- The supported values of @var{feature} for directive @code{dg-add-options}
- are:
- @table @code
- @item arm_neon
- NEON support. Only ARM targets support this feature, and only then
- in certain modes; see the @ref{arm_neon_ok,,arm_neon_ok effective target
- keyword}.
- @item arm_neon_fp16
- NEON and half-precision floating point support. Only ARM targets
- support this feature, and only then in certain modes; see
- the @ref{arm_neon_ok,,arm_neon_fp16_ok effective target keyword}.
- @item arm_vfp3
- arm vfp3 floating point support; see
- the @ref{arm_vfp3_ok,,arm_vfp3_ok effective target keyword}.
- @item bind_pic_locally
- Add the target-specific flags needed to enable functions to bind
- locally when using pic/PIC passes in the testsuite.
- @item c99_runtime
- Add the target-specific flags needed to access the C99 runtime.
- @item ieee
- Add the target-specific flags needed to enable full IEEE
- compliance mode.
- @item mips16_attribute
- @code{mips16} function attributes.
- Only MIPS targets support this feature, and only then in certain modes.
- @item tls
- Add the target-specific flags needed to use thread-local storage.
- @end table
- @node Require Support
- @subsection Variants of @code{dg-require-@var{support}}
- A few of the @code{dg-require} directives take arguments.
- @table @code
- @item dg-require-iconv @var{codeset}
- Skip the test if the target does not support iconv. @var{codeset} is
- the codeset to convert to.
- @item dg-require-profiling @var{profopt}
- Skip the test if the target does not support profiling with option
- @var{profopt}.
- @item dg-require-visibility @var{vis}
- Skip the test if the target does not support the @code{visibility} attribute.
- If @var{vis} is @code{""}, support for @code{visibility("hidden")} is
- checked, for @code{visibility("@var{vis}")} otherwise.
- @end table
- The original @code{dg-require} directives were defined before there
- was support for effective-target keywords. The directives that do not
- take arguments could be replaced with effective-target keywords.
- @table @code
- @item dg-require-alias ""
- Skip the test if the target does not support the @samp{alias} attribute.
- @item dg-require-ascii-locale ""
- Skip the test if the host does not support an ASCII locale.
- @item dg-require-compat-dfp ""
- Skip this test unless both compilers in a @file{compat} testsuite
- support decimal floating point.
- @item dg-require-cxa-atexit ""
- Skip the test if the target does not support @code{__cxa_atexit}.
- This is equivalent to @code{dg-require-effective-target cxa_atexit}.
- @item dg-require-dll ""
- Skip the test if the target does not support DLL attributes.
- @item dg-require-fork ""
- Skip the test if the target does not support @code{fork}.
- @item dg-require-gc-sections ""
- Skip the test if the target's linker does not support the
- @code{--gc-sections} flags.
- This is equivalent to @code{dg-require-effective-target gc-sections}.
- @item dg-require-host-local ""
- Skip the test if the host is remote, rather than the same as the build
- system. Some tests are incompatible with DejaGnu's handling of remote
- hosts, which involves copying the source file to the host and compiling
- it with a relative path and "@code{-o a.out}".
- @item dg-require-mkfifo ""
- Skip the test if the target does not support @code{mkfifo}.
- @item dg-require-named-sections ""
- Skip the test is the target does not support named sections.
- This is equivalent to @code{dg-require-effective-target named_sections}.
- @item dg-require-weak ""
- Skip the test if the target does not support weak symbols.
- @item dg-require-weak-override ""
- Skip the test if the target does not support overriding weak symbols.
- @end table
- @node Final Actions
- @subsection Commands for use in @code{dg-final}
- The GCC testsuite defines the following directives to be used within
- @code{dg-final}.
- @subsubsection Scan a particular file
- @table @code
- @item scan-file @var{filename} @var{regexp} [@{ target/xfail @var{selector} @}]
- Passes if @var{regexp} matches text in @var{filename}.
- @item scan-file-not @var{filename} @var{regexp} [@{ target/xfail @var{selector} @}]
- Passes if @var{regexp} does not match text in @var{filename}.
- @item scan-module @var{module} @var{regexp} [@{ target/xfail @var{selector} @}]
- Passes if @var{regexp} matches in Fortran module @var{module}.
- @end table
- @subsubsection Scan the assembly output
- @table @code
- @item scan-assembler @var{regex} [@{ target/xfail @var{selector} @}]
- Passes if @var{regex} matches text in the test's assembler output.
- @item scan-assembler-not @var{regex} [@{ target/xfail @var{selector} @}]
- Passes if @var{regex} does not match text in the test's assembler output.
- @item scan-assembler-times @var{regex} @var{num} [@{ target/xfail @var{selector} @}]
- Passes if @var{regex} is matched exactly @var{num} times in the test's
- assembler output.
- @item scan-assembler-dem @var{regex} [@{ target/xfail @var{selector} @}]
- Passes if @var{regex} matches text in the test's demangled assembler output.
- @item scan-assembler-dem-not @var{regex} [@{ target/xfail @var{selector} @}]
- Passes if @var{regex} does not match text in the test's demangled assembler
- output.
- @item scan-hidden @var{symbol} [@{ target/xfail @var{selector} @}]
- Passes if @var{symbol} is defined as a hidden symbol in the test's
- assembly output.
- @item scan-not-hidden @var{symbol} [@{ target/xfail @var{selector} @}]
- Passes if @var{symbol} is not defined as a hidden symbol in the test's
- assembly output.
- @end table
- @subsubsection Scan optimization dump files
- These commands are available for @var{kind} of @code{tree}, @code{rtl},
- and @code{ipa}.
- @table @code
- @item scan-@var{kind}-dump @var{regex} @var{suffix} [@{ target/xfail @var{selector} @}]
- Passes if @var{regex} matches text in the dump file with suffix @var{suffix}.
- @item scan-@var{kind}-dump-not @var{regex} @var{suffix} [@{ target/xfail @var{selector} @}]
- Passes if @var{regex} does not match text in the dump file with suffix
- @var{suffix}.
- @item scan-@var{kind}-dump-times @var{regex} @var{num} @var{suffix} [@{ target/xfail @var{selector} @}]
- Passes if @var{regex} is found exactly @var{num} times in the dump file
- with suffix @var{suffix}.
- @item scan-@var{kind}-dump-dem @var{regex} @var{suffix} [@{ target/xfail @var{selector} @}]
- Passes if @var{regex} matches demangled text in the dump file with
- suffix @var{suffix}.
- @item scan-@var{kind}-dump-dem-not @var{regex} @var{suffix} [@{ target/xfail @var{selector} @}]
- Passes if @var{regex} does not match demangled text in the dump file with
- suffix @var{suffix}.
- @end table
- @subsubsection Verify that an output files exists or not
- @table @code
- @item output-exists [@{ target/xfail @var{selector} @}]
- Passes if compiler output file exists.
- @item output-exists-not [@{ target/xfail @var{selector} @}]
- Passes if compiler output file does not exist.
- @end table
- @subsubsection Check for LTO tests
- @table @code
- @item scan-symbol @var{regexp} [@{ target/xfail @var{selector} @}]
- Passes if the pattern is present in the final executable.
- @end table
- @subsubsection Checks for @command{gcov} tests
- @table @code
- @item run-gcov @var{sourcefile}
- Check line counts in @command{gcov} tests.
- @item run-gcov [branches] [calls] @{ @var{opts} @var{sourcefile} @}
- Check branch and/or call counts, in addition to line counts, in
- @command{gcov} tests.
- @end table
- @subsubsection Clean up generated test files
- @table @code
- @item cleanup-coverage-files
- Removes coverage data files generated for this test.
- @item cleanup-ipa-dump @var{suffix}
- Removes IPA dump files generated for this test.
- @item cleanup-modules "@var{list-of-extra-modules}"
- Removes Fortran module files generated for this test, excluding the
- module names listed in keep-modules.
- Cleaning up module files is usually done automatically by the testsuite
- by looking at the source files and removing the modules after the test
- has been executed.
- @smallexample
- module MoD1
- end module MoD1
- module Mod2
- end module Mod2
- module moD3
- end module moD3
- module mod4
- end module mod4
- ! @{ dg-final @{ cleanup-modules "mod1 mod2" @} @} ! redundant
- ! @{ dg-final @{ keep-modules "mod3 mod4" @} @}
- @end smallexample
- @item keep-modules "@var{list-of-modules-not-to-delete}"
- Whitespace separated list of module names that should not be deleted by
- cleanup-modules.
- If the list of modules is empty, all modules defined in this file are kept.
- @smallexample
- module maybe_unneeded
- end module maybe_unneeded
- module keep1
- end module keep1
- module keep2
- end module keep2
- ! @{ dg-final @{ keep-modules "keep1 keep2" @} @} ! just keep these two
- ! @{ dg-final @{ keep-modules "" @} @} ! keep all
- @end smallexample
- @item cleanup-profile-file
- Removes profiling files generated for this test.
- @item cleanup-repo-files
- Removes files generated for this test for @option{-frepo}.
- @item cleanup-rtl-dump @var{suffix}
- Removes RTL dump files generated for this test.
- @item cleanup-saved-temps
- Removes files for the current test which were kept for @option{-save-temps}.
- @item cleanup-tree-dump @var{suffix}
- Removes tree dump files matching @var{suffix} which were generated for
- this test.
- @end table
- @node Ada Tests
- @section Ada Language Testsuites
- The Ada testsuite includes executable tests from the ACATS
- testsuite, publicly available at
- @uref{http://www.ada-auth.org/acats.html}.
- These tests are integrated in the GCC testsuite in the
- @file{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, @file{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, although this is deprecated in favor of
- the @file{gnat.dg} testsuite.
- The tests are run using two @command{sh} scripts: @file{run_acats} and
- @file{run_all.sh}. To run the tests using a simulator or a cross
- target, see the small
- customization section at the top of @file{run_all.sh}.
- These tests are run using the build tree: they can be run without doing
- a @code{make install}.
- @node C Tests
- @section 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{lib/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.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{gcc.misc-tests/bprob.exp}, which
- in turn uses the generic, language-independent framework
- (@pxref{profopt Testing, , Support for testing profile-directed
- optimizations}).
- @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
- @item gcc.test-framework
- @table @file
- @item @code{dg-*.c}
- Test the testsuite itself using @file{gcc.test-framework/test-framework.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
- @section 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://sourceware.org/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.
- We encourage developers to contribute test cases to Mauve.
- @node LTO Testing
- @section Support for testing link-time optimizations
- Tests for link-time optimizations usually require multiple source files
- that are compiled separately, perhaps with different sets of options.
- There are several special-purpose test directives used for these tests.
- @table @code
- @item @{ dg-lto-do @var{do-what-keyword} @}
- @var{do-what-keyword} specifies how the test is compiled and whether
- it is executed. It is one of:
- @table @code
- @item assemble
- Compile with @option{-c} to produce a relocatable object file.
- @item link
- Compile, assemble, and link to produce an executable file.
- @item run
- Produce and run an executable file, which is expected to return
- an exit code of 0.
- @end table
- The default is @code{assemble}. That can be overridden for a set of
- tests by redefining @code{dg-do-what-default} within the @code{.exp}
- file for those tests.
- Unlike @code{dg-do}, @code{dg-lto-do} does not support an optional
- @samp{target} or @samp{xfail} list. Use @code{dg-skip-if},
- @code{dg-xfail-if}, or @code{dg-xfail-run-if}.
- @item @{ dg-lto-options @{ @{ @var{options} @} [@{ @var{options} @}] @} [@{ target @var{selector} @}]@}
- This directive provides a list of one or more sets of compiler options
- to override @var{LTO_OPTIONS}. Each test will be compiled and run with
- each of these sets of options.
- @item @{ dg-extra-ld-options @var{options} [@{ target @var{selector} @}]@}
- This directive adds @var{options} to the linker options used.
- @item @{ dg-suppress-ld-options @var{options} [@{ target @var{selector} @}]@}
- This directive removes @var{options} from the set of linker options used.
- @end table
- @node gcov Testing
- @section 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{lib/gcov.exp}. @command{gcov} tests also rely on procedures
- in @file{lib/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 @option{-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) /* @r{branch(27 50 75)} */
- /* @r{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
- @section 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
- @item @{ dg-final-generate @{ @var{local-directive} @} @}
- This directive is similar to @code{dg-final}, but the
- @var{local-directive} is run after the generation of profile data.
- @item @{ dg-final-use @{ @var{local-directive} @} @}
- The @var{local-directive} is run after the profile data have been
- used.
- @end table
- @node compat Testing
- @section 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.
- You can specify pairs of sets of compiler options. The first element
- of such a pair specifies options used with the GCC under test, and the
- second element of the pair specifies options used with the alternate
- compiler. Each test is 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}@}]
- @dots{}[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 @option{-g -O0} by the compiler under
- test and with @option{-O3} by the alternate compiler. The test is
- built a second time using @option{-fpic} by the compiler under test
- and @option{-fPIC -O2} by the alternate compiler.
- An alternate compiler is specified by defining an environment
- variable to be the full pathname of an installed compiler; for C
- define @env{ALT_CC_UNDER_TEST}, and for C++ define
- @env{ALT_CXX_UNDER_TEST}. These 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_CC_UNDER_TEST} or
- @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="@var{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.
- The binary compatibility tests support a small number of test framework
- commands that appear within comments in a test file.
- @table @code
- @item dg-require-*
- These commands can be used in @file{@var{testname}_main.@var{suffix}}
- to skip the test if specific support is not available on the target.
- @item dg-options
- The specified options are used for compiling this particular source
- file, appended to the options from @env{COMPAT_OPTIONS}. When this
- command appears in @file{@var{testname}_main.@var{suffix}} the options
- are also used to link the test program.
- @item dg-xfail-if
- This command can be used in a secondary source file to specify that
- compilation is expected to fail for particular options on particular
- targets.
- @end table
- @node Torture Tests
- @section Support for torture testing using multiple options
- Throughout the compiler testsuite there are several directories whose
- tests are run multiple times, each with a different set of options.
- These are known as torture tests.
- @file{lib/torture-options.exp} defines procedures to
- set up these lists:
- @table @code
- @item torture-init
- Initialize use of torture lists.
- @item set-torture-options
- Set lists of torture options to use for tests with and without loops.
- Optionally combine a set of torture options with a set of other
- options, as is done with Objective-C runtime options.
- @item torture-finish
- Finalize use of torture lists.
- @end table
- The @file{.exp} file for a set of tests that use torture options must
- include calls to these three procedures if:
- @itemize @bullet
- @item It calls @code{gcc-dg-runtest} and overrides @var{DG_TORTURE_OPTIONS}.
- @item It calls @var{$@{tool@}}@code{-torture} or
- @var{$@{tool@}}@code{-torture-execute}, where @var{tool} is @code{c},
- @code{fortran}, or @code{objc}.
- @item It calls @code{dg-pch}.
- @end itemize
- It is not necessary for a @file{.exp} file that calls @code{gcc-dg-runtest}
- to call the torture procedures if the tests should use the list in
- @var{DG_TORTURE_OPTIONS} defined in @file{gcc-dg.exp}.
- Most uses of torture options can override the default lists by defining
- @var{TORTURE_OPTIONS} or add to the default list by defining
- @var{ADDITIONAL_TORTURE_OPTIONS}. Define these in a @file{.dejagnurc}
- file or add them to the @file{site.exp} file; for example
- @smallexample
- set ADDITIONAL_TORTURE_OPTIONS [list \
- @{ -O2 -ftree-loop-linear @} \
- @{ -O2 -fpeel-loops @} ]
- @end smallexample
|