OpenCores
URL https://opencores.org/ocsvn/openrisc_2011-10-31/openrisc_2011-10-31/trunk

Subversion Repositories openrisc_2011-10-31

[/] [openrisc/] [trunk/] [gnu-src/] [gcc-4.5.1/] [gcc/] [doc/] [sourcebuild.texi] - Blame information for rev 300

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 284 jeremybenn
@c Copyright (C) 2002, 2003, 2004, 2005, 2007, 2008, 2009, 2010
2
@c Free Software Foundation, Inc.
3
@c This is part of the GCC manual.
4
@c For copying conditions, see the file gcc.texi.
5
 
6
@node Source Tree
7
@chapter Source Tree Structure and Build System
8
 
9
This chapter describes the structure of the GCC source tree, and how
10
GCC is built.  The user documentation for building and installing GCC
11
is in a separate manual (@uref{http://gcc.gnu.org/install/}), with
12
which it is presumed that you are familiar.
13
 
14
@menu
15
* Configure Terms:: Configuration terminology and history.
16
* Top Level::       The top level source directory.
17
* gcc Directory::   The @file{gcc} subdirectory.
18
@end menu
19
 
20
@include configterms.texi
21
 
22
@node Top Level
23
@section Top Level Source Directory
24
 
25
The top level source directory in a GCC distribution contains several
26
files and directories that are shared with other software
27
distributions such as that of GNU Binutils.  It also contains several
28
subdirectories that contain parts of GCC and its runtime libraries:
29
 
30
@table @file
31
@item boehm-gc
32
The Boehm conservative garbage collector, used as part of the Java
33
runtime library.
34
 
35
@item config
36
Autoconf macros and Makefile fragments used throughout the tree.
37
 
38
@item contrib
39
Contributed scripts that may be found useful in conjunction with GCC@.
40
One of these, @file{contrib/texi2pod.pl}, is used to generate man
41
pages from Texinfo manuals as part of the GCC build process.
42
 
43
@item fixincludes
44
The support for fixing system headers to work with GCC@.  See
45
@file{fixincludes/README} for more information.  The headers fixed by
46
this mechanism are installed in @file{@var{libsubdir}/include-fixed}.
47
Along with those headers, @file{README-fixinc} is also installed, as
48
@file{@var{libsubdir}/include-fixed/README}.
49
 
50
@item gcc
51
The main sources of GCC itself (except for runtime libraries),
52
including optimizers, support for different target architectures,
53
language front ends, and testsuites.  @xref{gcc Directory, , The
54
@file{gcc} Subdirectory}, for details.
55
 
56
@item gnattools
57
Support tools for GNAT.
58
 
59
@item include
60
Headers for the @code{libiberty} library.
61
 
62
@item intl
63
GNU @code{libintl}, from GNU @code{gettext}, for systems which do not
64
include it in @code{libc}.
65
 
66
@item libada
67
The Ada runtime library.
68
 
69
@item libcpp
70
The C preprocessor library.
71
 
72
@item libdecnumber
73
The Decimal Float support library.
74
 
75
@item libffi
76
The @code{libffi} library, used as part of the Java runtime library.
77
 
78
@item libgcc
79
The GCC runtime library.
80
 
81
@item libgfortran
82
The Fortran runtime library.
83
 
84
@item libgomp
85
The GNU OpenMP runtime library.
86
 
87
@item libiberty
88
The @code{libiberty} library, used for portability and for some
89
generally useful data structures and algorithms.  @xref{Top, ,
90
Introduction, libiberty, @sc{gnu} libiberty}, for more information
91
about this library.
92
 
93
@item libjava
94
The Java runtime library.
95
 
96
@item libmudflap
97
The @code{libmudflap} library, used for instrumenting pointer and array
98
dereferencing operations.
99
 
100
@item libobjc
101
The Objective-C and Objective-C++ runtime library.
102
 
103
@item libssp
104
The Stack protector runtime library.
105
 
106
@item libstdc++-v3
107
The C++ runtime library.
108
 
109
@item lto-plugin
110
Plugin used by @command{gold} if link-time optimizations are enabled.
111
 
112
@item maintainer-scripts
113
Scripts used by the @code{gccadmin} account on @code{gcc.gnu.org}.
114
 
115
@item zlib
116
The @code{zlib} compression library, used by the Java front end, as
117
part of the Java runtime library, and for compressing and uncompressing
118
GCC's intermediate language in LTO object files.
119
@end table
120
 
121
The build system in the top level directory, including how recursion
122
into subdirectories works and how building runtime libraries for
123
multilibs is handled, is documented in a separate manual, included
124
with GNU Binutils.  @xref{Top, , GNU configure and build system,
125
configure, The GNU configure and build system}, for details.
126
 
127
@node gcc Directory
128
@section The @file{gcc} Subdirectory
129
 
130
The @file{gcc} directory contains many files that are part of the C
131
sources of GCC, other files used as part of the configuration and
132
build process, and subdirectories including documentation and a
133
testsuite.  The files that are sources of GCC are documented in a
134
separate chapter.  @xref{Passes, , Passes and Files of the Compiler}.
135
 
136
@menu
137
* Subdirectories:: Subdirectories of @file{gcc}.
138
* Configuration::  The configuration process, and the files it uses.
139
* Build::          The build system in the @file{gcc} directory.
140
* Makefile::       Targets in @file{gcc/Makefile}.
141
* Library Files::  Library source files and headers under @file{gcc/}.
142
* Headers::        Headers installed by GCC.
143
* Documentation::  Building documentation in GCC.
144
* Front End::      Anatomy of a language front end.
145
* Back End::       Anatomy of a target back end.
146
@end menu
147
 
148
@node Subdirectories
149
@subsection Subdirectories of @file{gcc}
150
 
151
The @file{gcc} directory contains the following subdirectories:
152
 
153
@table @file
154
@item @var{language}
155
Subdirectories for various languages.  Directories containing a file
156
@file{config-lang.in} are language subdirectories.  The contents of
157
the subdirectories @file{cp} (for C++), @file{lto} (for LTO),
158
@file{objc} (for Objective-C) and @file{objcp} (for Objective-C++) are
159
documented in this manual (@pxref{Passes, , Passes and Files of the
160
Compiler}); those for other languages are not.  @xref{Front End, ,
161
Anatomy of a Language Front End}, for details of the files in these
162
directories.
163
 
164
@item config
165
Configuration files for supported architectures and operating
166
systems.  @xref{Back End, , Anatomy of a Target Back End}, for
167
details of the files in this directory.
168
 
169
@item doc
170
Texinfo documentation for GCC, together with automatically generated
171
man pages and support for converting the installation manual to
172
HTML@.  @xref{Documentation}.
173
 
174
@item ginclude
175
System headers installed by GCC, mainly those required by the C
176
standard of freestanding implementations.  @xref{Headers, , Headers
177
Installed by GCC}, for details of when these and other headers are
178
installed.
179
 
180
@item po
181
Message catalogs with translations of messages produced by GCC into
182
various languages, @file{@var{language}.po}.  This directory also
183
contains @file{gcc.pot}, the template for these message catalogues,
184
@file{exgettext}, a wrapper around @command{gettext} to extract the
185
messages from the GCC sources and create @file{gcc.pot}, which is run
186
by @samp{make gcc.pot}, and @file{EXCLUDES}, a list of files from
187
which messages should not be extracted.
188
 
189
@item testsuite
190
The GCC testsuites (except for those for runtime libraries).
191
@xref{Testsuites}.
192
@end table
193
 
194
@node Configuration
195
@subsection Configuration in the @file{gcc} Directory
196
 
197
The @file{gcc} directory is configured with an Autoconf-generated
198
script @file{configure}.  The @file{configure} script is generated
199
from @file{configure.ac} and @file{aclocal.m4}.  From the files
200
@file{configure.ac} and @file{acconfig.h}, Autoheader generates the
201
file @file{config.in}.  The file @file{cstamp-h.in} is used as a
202
timestamp.
203
 
204
@menu
205
* Config Fragments::     Scripts used by @file{configure}.
206
* System Config::        The @file{config.build}, @file{config.host}, and
207
                         @file{config.gcc} files.
208
* Configuration Files::  Files created by running @file{configure}.
209
@end menu
210
 
211
@node Config Fragments
212
@subsubsection Scripts Used by @file{configure}
213
 
214
@file{configure} uses some other scripts to help in its work:
215
 
216
@itemize @bullet
217
@item The standard GNU @file{config.sub} and @file{config.guess}
218
files, kept in the top level directory, are used.
219
 
220
@item The file @file{config.gcc} is used to handle configuration
221
specific to the particular target machine.  The file
222
@file{config.build} is used to handle configuration specific to the
223
particular build machine.  The file @file{config.host} is used to handle
224
configuration specific to the particular host machine.  (In general,
225
these should only be used for features that cannot reasonably be tested in
226
Autoconf feature tests.)
227
@xref{System Config, , The @file{config.build}; @file{config.host};
228
and @file{config.gcc} Files}, for details of the contents of these files.
229
 
230
@item Each language subdirectory has a file
231
@file{@var{language}/config-lang.in} that is used for
232
front-end-specific configuration.  @xref{Front End Config, , The Front
233
End @file{config-lang.in} File}, for details of this file.
234
 
235
@item A helper script @file{configure.frag} is used as part of
236
creating the output of @file{configure}.
237
@end itemize
238
 
239
@node System Config
240
@subsubsection The @file{config.build}; @file{config.host}; and @file{config.gcc} Files
241
 
242
The @file{config.build} file contains specific rules for particular systems
243
which GCC is built on.  This should be used as rarely as possible, as the
244
behavior of the build system can always be detected by autoconf.
245
 
246
The @file{config.host} file contains specific rules for particular systems
247
which GCC will run on.  This is rarely needed.
248
 
249
The @file{config.gcc} file contains specific rules for particular systems
250
which GCC will generate code for.  This is usually needed.
251
 
252
Each file has a list of the shell variables it sets, with descriptions, at the
253
top of the file.
254
 
255
FIXME: document the contents of these files, and what variables should
256
be set to control build, host and target configuration.
257
 
258
@include configfiles.texi
259
 
260
@node Build
261
@subsection Build System in the @file{gcc} Directory
262
 
263
FIXME: describe the build system, including what is built in what
264
stages.  Also list the various source files that are used in the build
265
process but aren't source files of GCC itself and so aren't documented
266
below (@pxref{Passes}).
267
 
268
@include makefile.texi
269
 
270
@node Library Files
271
@subsection Library Source Files and Headers under the @file{gcc} Directory
272
 
273
FIXME: list here, with explanation, all the C source files and headers
274
under the @file{gcc} directory that aren't built into the GCC
275
executable but rather are part of runtime libraries and object files,
276
such as @file{crtstuff.c} and @file{unwind-dw2.c}.  @xref{Headers, ,
277
Headers Installed by GCC}, for more information about the
278
@file{ginclude} directory.
279
 
280
@node Headers
281
@subsection Headers Installed by GCC
282
 
283
In general, GCC expects the system C library to provide most of the
284
headers to be used with it.  However, GCC will fix those headers if
285
necessary to make them work with GCC, and will install some headers
286
required of freestanding implementations.  These headers are installed
287
in @file{@var{libsubdir}/include}.  Headers for non-C runtime
288
libraries are also installed by GCC; these are not documented here.
289
(FIXME: document them somewhere.)
290
 
291
Several of the headers GCC installs are in the @file{ginclude}
292
directory.  These headers, @file{iso646.h},
293
@file{stdarg.h}, @file{stdbool.h}, and @file{stddef.h},
294
are installed in @file{@var{libsubdir}/include},
295
unless the target Makefile fragment (@pxref{Target Fragment})
296
overrides this by setting @code{USER_H}.
297
 
298
In addition to these headers and those generated by fixing system
299
headers to work with GCC, some other headers may also be installed in
300
@file{@var{libsubdir}/include}.  @file{config.gcc} may set
301
@code{extra_headers}; this specifies additional headers under
302
@file{config} to be installed on some systems.
303
 
304
GCC installs its own version of @code{<float.h>}, from @file{ginclude/float.h}.
305
This is done to cope with command-line options that change the
306
representation of floating point numbers.
307
 
308
GCC also installs its own version of @code{<limits.h>}; this is generated
309
from @file{glimits.h}, together with @file{limitx.h} and
310
@file{limity.h} if the system also has its own version of
311
@code{<limits.h>}.  (GCC provides its own header because it is
312
required of ISO C freestanding implementations, but needs to include
313
the system header from its own header as well because other standards
314
such as POSIX specify additional values to be defined in
315
@code{<limits.h>}.)  The system's @code{<limits.h>} header is used via
316
@file{@var{libsubdir}/include/syslimits.h}, which is copied from
317
@file{gsyslimits.h} if it does not need fixing to work with GCC; if it
318
needs fixing, @file{syslimits.h} is the fixed copy.
319
 
320
GCC can also install @code{<tgmath.h>}.  It will do this when
321
@file{config.gcc} sets @code{use_gcc_tgmath} to @code{yes}.
322
 
323
@node Documentation
324
@subsection Building Documentation
325
 
326
The main GCC documentation is in the form of manuals in Texinfo
327
format.  These are installed in Info format; DVI versions may be
328
generated by @samp{make dvi}, PDF versions by @samp{make pdf}, and
329
HTML versions by @samp{make html}.  In addition, some man pages are
330
generated from the Texinfo manuals, there are some other text files
331
with miscellaneous documentation, and runtime libraries have their own
332
documentation outside the @file{gcc} directory.  FIXME: document the
333
documentation for runtime libraries somewhere.
334
 
335
@menu
336
* Texinfo Manuals::      GCC manuals in Texinfo format.
337
* Man Page Generation::  Generating man pages from Texinfo manuals.
338
* Miscellaneous Docs::   Miscellaneous text files with documentation.
339
@end menu
340
 
341
@node Texinfo Manuals
342
@subsubsection Texinfo Manuals
343
 
344
The manuals for GCC as a whole, and the C and C++ front ends, are in
345
files @file{doc/*.texi}.  Other front ends have their own manuals in
346
files @file{@var{language}/*.texi}.  Common files
347
@file{doc/include/*.texi} are provided which may be included in
348
multiple manuals; the following files are in @file{doc/include}:
349
 
350
@table @file
351
@item fdl.texi
352
The GNU Free Documentation License.
353
@item funding.texi
354
The section ``Funding Free Software''.
355
@item gcc-common.texi
356
Common definitions for manuals.
357
@item gpl.texi
358
@itemx gpl_v3.texi
359
The GNU General Public License.
360
@item texinfo.tex
361
A copy of @file{texinfo.tex} known to work with the GCC manuals.
362
@end table
363
 
364
DVI-formatted manuals are generated by @samp{make dvi}, which uses
365
@command{texi2dvi} (via the Makefile macro @code{$(TEXI2DVI)}).
366
PDF-formatted manuals are generated by @samp{make pdf}, which uses
367
@command{texi2pdf} (via the Makefile macro @code{$(TEXI2PDF)}).  HTML
368
formatted manuals are generated by @samp{make html}.  Info
369
manuals are generated by @samp{make info} (which is run as part of
370
a bootstrap); this generates the manuals in the source directory,
371
using @command{makeinfo} via the Makefile macro @code{$(MAKEINFO)},
372
and they are included in release distributions.
373
 
374
Manuals are also provided on the GCC web site, in both HTML and
375
PostScript forms.  This is done via the script
376
@file{maintainer-scripts/update_web_docs}.  Each manual to be
377
provided online must be listed in the definition of @code{MANUALS} in
378
that file; a file @file{@var{name}.texi} must only appear once in the
379
source tree, and the output manual must have the same name as the
380
source file.  (However, other Texinfo files, included in manuals but
381
not themselves the root files of manuals, may have names that appear
382
more than once in the source tree.)  The manual file
383
@file{@var{name}.texi} should only include other files in its own
384
directory or in @file{doc/include}.  HTML manuals will be generated by
385
@samp{makeinfo --html}, PostScript manuals by @command{texi2dvi}
386
and @command{dvips}, and PDF manuals by @command{texi2pdf}.
387
All Texinfo files that are parts of manuals must
388
be version-controlled, even if they are generated files, for the
389
generation of online manuals to work.
390
 
391
The installation manual, @file{doc/install.texi}, is also provided on
392
the GCC web site.  The HTML version is generated by the script
393
@file{doc/install.texi2html}.
394
 
395
@node Man Page Generation
396
@subsubsection Man Page Generation
397
 
398
Because of user demand, in addition to full Texinfo manuals, man pages
399
are provided which contain extracts from those manuals.  These man
400
pages are generated from the Texinfo manuals using
401
@file{contrib/texi2pod.pl} and @command{pod2man}.  (The man page for
402
@command{g++}, @file{cp/g++.1}, just contains a @samp{.so} reference
403
to @file{gcc.1}, but all the other man pages are generated from
404
Texinfo manuals.)
405
 
406
Because many systems may not have the necessary tools installed to
407
generate the man pages, they are only generated if the
408
@file{configure} script detects that recent enough tools are
409
installed, and the Makefiles allow generating man pages to fail
410
without aborting the build.  Man pages are also included in release
411
distributions.  They are generated in the source directory.
412
 
413
Magic comments in Texinfo files starting @samp{@@c man} control what
414
parts of a Texinfo file go into a man page.  Only a subset of Texinfo
415
is supported by @file{texi2pod.pl}, and it may be necessary to add
416
support for more Texinfo features to this script when generating new
417
man pages.  To improve the man page output, some special Texinfo
418
macros are provided in @file{doc/include/gcc-common.texi} which
419
@file{texi2pod.pl} understands:
420
 
421
@table @code
422
@item @@gcctabopt
423
Use in the form @samp{@@table @@gcctabopt} for tables of options,
424
where for printed output the effect of @samp{@@code} is better than
425
that of @samp{@@option} but for man page output a different effect is
426
wanted.
427
@item @@gccoptlist
428
Use for summary lists of options in manuals.
429
@item @@gol
430
Use at the end of each line inside @samp{@@gccoptlist}.  This is
431
necessary to avoid problems with differences in how the
432
@samp{@@gccoptlist} macro is handled by different Texinfo formatters.
433
@end table
434
 
435
FIXME: describe the @file{texi2pod.pl} input language and magic
436
comments in more detail.
437
 
438
@node Miscellaneous Docs
439
@subsubsection Miscellaneous Documentation
440
 
441
In addition to the formal documentation that is installed by GCC,
442
there are several other text files in the @file{gcc} subdirectory
443
with miscellaneous documentation:
444
 
445
@table @file
446
@item ABOUT-GCC-NLS
447
Notes on GCC's Native Language Support.  FIXME: this should be part of
448
this manual rather than a separate file.
449
@item ABOUT-NLS
450
Notes on the Free Translation Project.
451
@item COPYING
452
@itemx COPYING3
453
The GNU General Public License, Versions 2 and 3.
454
@item COPYING.LIB
455
@itemx COPYING3.LIB
456
The GNU Lesser General Public License, Versions 2.1 and 3.
457
@item *ChangeLog*
458
@itemx */ChangeLog*
459
Change log files for various parts of GCC@.
460
@item LANGUAGES
461
Details of a few changes to the GCC front-end interface.  FIXME: the
462
information in this file should be part of general documentation of
463
the front-end interface in this manual.
464
@item ONEWS
465
Information about new features in old versions of GCC@.  (For recent
466
versions, the information is on the GCC web site.)
467
@item README.Portability
468
Information about portability issues when writing code in GCC@.  FIXME:
469
why isn't this part of this manual or of the GCC Coding Conventions?
470
@end table
471
 
472
FIXME: document such files in subdirectories, at least @file{config},
473
@file{cp}, @file{objc}, @file{testsuite}.
474
 
475
@node Front End
476
@subsection Anatomy of a Language Front End
477
 
478
A front end for a language in GCC has the following parts:
479
 
480
@itemize @bullet
481
@item
482
A directory @file{@var{language}} under @file{gcc} containing source
483
files for that front end.  @xref{Front End Directory, , The Front End
484
@file{@var{language}} Directory}, for details.
485
@item
486
A mention of the language in the list of supported languages in
487
@file{gcc/doc/install.texi}.
488
@item
489
A mention of the name under which the language's runtime library is
490
recognized by @option{--enable-shared=@var{package}} in the
491
documentation of that option in @file{gcc/doc/install.texi}.
492
@item
493
A mention of any special prerequisites for building the front end in
494
the documentation of prerequisites in @file{gcc/doc/install.texi}.
495
@item
496
Details of contributors to that front end in
497
@file{gcc/doc/contrib.texi}.  If the details are in that front end's
498
own manual then there should be a link to that manual's list in
499
@file{contrib.texi}.
500
@item
501
Information about support for that language in
502
@file{gcc/doc/frontends.texi}.
503
@item
504
Information about standards for that language, and the front end's
505
support for them, in @file{gcc/doc/standards.texi}.  This may be a
506
link to such information in the front end's own manual.
507
@item
508
Details of source file suffixes for that language and @option{-x
509
@var{lang}} options supported, in @file{gcc/doc/invoke.texi}.
510
@item
511
Entries in @code{default_compilers} in @file{gcc.c} for source file
512
suffixes for that language.
513
@item
514
Preferably testsuites, which may be under @file{gcc/testsuite} or
515
runtime library directories.  FIXME: document somewhere how to write
516
testsuite harnesses.
517
@item
518
Probably a runtime library for the language, outside the @file{gcc}
519
directory.  FIXME: document this further.
520
@item
521
Details of the directories of any runtime libraries in
522
@file{gcc/doc/sourcebuild.texi}.
523
@item
524
Check targets in @file{Makefile.def} for the top-level @file{Makefile}
525
to check just the compiler or the compiler and runtime library for the
526
language.
527
@end itemize
528
 
529
If the front end is added to the official GCC source repository, the
530
following are also necessary:
531
 
532
@itemize @bullet
533
@item
534
At least one Bugzilla component for bugs in that front end and runtime
535
libraries.  This category needs to be mentioned in
536
@file{gcc/gccbug.in}, as well as being added to the Bugzilla database.
537
@item
538
Normally, one or more maintainers of that front end listed in
539
@file{MAINTAINERS}.
540
@item
541
Mentions on the GCC web site in @file{index.html} and
542
@file{frontends.html}, with any relevant links on
543
@file{readings.html}.  (Front ends that are not an official part of
544
GCC may also be listed on @file{frontends.html}, with relevant links.)
545
@item
546
A news item on @file{index.html}, and possibly an announcement on the
547
@email{gcc-announce@@gcc.gnu.org} mailing list.
548
@item
549
The front end's manuals should be mentioned in
550
@file{maintainer-scripts/update_web_docs} (@pxref{Texinfo Manuals})
551
and the online manuals should be linked to from
552
@file{onlinedocs/index.html}.
553
@item
554
Any old releases or CVS repositories of the front end, before its
555
inclusion in GCC, should be made available on the GCC FTP site
556
@uref{ftp://gcc.gnu.org/pub/gcc/old-releases/}.
557
@item
558
The release and snapshot script @file{maintainer-scripts/gcc_release}
559
should be updated to generate appropriate tarballs for this front end.
560
The associated @file{maintainer-scripts/snapshot-README} and
561
@file{maintainer-scripts/snapshot-index.html} files should be updated
562
to list the tarballs and diffs for this front end.
563
@item
564
If this front end includes its own version files that include the
565
current date, @file{maintainer-scripts/update_version} should be
566
updated accordingly.
567
@end itemize
568
 
569
@menu
570
* Front End Directory::  The front end @file{@var{language}} directory.
571
* Front End Config::     The front end @file{config-lang.in} file.
572
* Front End Makefile::   The front end @file{Make-lang.in} file.
573
@end menu
574
 
575
@node Front End Directory
576
@subsubsection The Front End @file{@var{language}} Directory
577
 
578
A front end @file{@var{language}} directory contains the source files
579
of that front end (but not of any runtime libraries, which should be
580
outside the @file{gcc} directory).  This includes documentation, and
581
possibly some subsidiary programs built alongside the front end.
582
Certain files are special and other parts of the compiler depend on
583
their names:
584
 
585
@table @file
586
@item config-lang.in
587
This file is required in all language subdirectories.  @xref{Front End
588
Config, , The Front End @file{config-lang.in} File}, for details of
589
its contents
590
@item Make-lang.in
591
This file is required in all language subdirectories.  @xref{Front End
592
Makefile, , The Front End @file{Make-lang.in} File}, for details of its
593
contents.
594
@item lang.opt
595
This file registers the set of switches that the front end accepts on
596
the command line, and their @option{--help} text.  @xref{Options}.
597
@item lang-specs.h
598
This file provides entries for @code{default_compilers} in
599
@file{gcc.c} which override the default of giving an error that a
600
compiler for that language is not installed.
601
@item @var{language}-tree.def
602
This file, which need not exist, defines any language-specific tree
603
codes.
604
@end table
605
 
606
@node Front End Config
607
@subsubsection The Front End @file{config-lang.in} File
608
 
609
Each language subdirectory contains a @file{config-lang.in} file.  In
610
addition the main directory contains @file{c-config-lang.in}, which
611
contains limited information for the C language.  This file is a shell
612
script that may define some variables describing the language:
613
 
614
@table @code
615
@item language
616
This definition must be present, and gives the name of the language
617
for some purposes such as arguments to @option{--enable-languages}.
618
@item lang_requires
619
If defined, this variable lists (space-separated) language front ends
620
other than C that this front end requires to be enabled (with the
621
names given being their @code{language} settings).  For example, the
622
Java front end depends on the C++ front end, so sets
623
@samp{lang_requires=c++}.
624
@item subdir_requires
625
If defined, this variable lists (space-separated) front end directories
626
other than C that this front end requires to be present.  For example,
627
the Objective-C++ front end uses source files from the C++ and
628
Objective-C front ends, so sets @samp{subdir_requires="cp objc"}.
629
@item target_libs
630
If defined, this variable lists (space-separated) targets in the top
631
level @file{Makefile} to build the runtime libraries for this
632
language, such as @code{target-libobjc}.
633
@item lang_dirs
634
If defined, this variable lists (space-separated) top level
635
directories (parallel to @file{gcc}), apart from the runtime libraries,
636
that should not be configured if this front end is not built.
637
@item build_by_default
638
If defined to @samp{no}, this language front end is not built unless
639
enabled in a @option{--enable-languages} argument.  Otherwise, front
640
ends are built by default, subject to any special logic in
641
@file{configure.ac} (as is present to disable the Ada front end if the
642
Ada compiler is not already installed).
643
@item boot_language
644
If defined to @samp{yes}, this front end is built in stage1 of the
645
bootstrap.  This is only relevant to front ends written in their own
646
languages.
647
@item compilers
648
If defined, a space-separated list of compiler executables that will
649
be run by the driver.  The names here will each end
650
with @samp{\$(exeext)}.
651
@item outputs
652
If defined, a space-separated list of files that should be generated
653
by @file{configure} substituting values in them.  This mechanism can
654
be used to create a file @file{@var{language}/Makefile} from
655
@file{@var{language}/Makefile.in}, but this is deprecated, building
656
everything from the single @file{gcc/Makefile} is preferred.
657
@item gtfiles
658
If defined, a space-separated list of files that should be scanned by
659
@file{gengtype.c} to generate the garbage collection tables and routines for
660
this language.  This excludes the files that are common to all front
661
ends.  @xref{Type Information}.
662
 
663
@end table
664
 
665
@node Front End Makefile
666
@subsubsection The Front End @file{Make-lang.in} File
667
 
668
Each language subdirectory contains a @file{Make-lang.in} file.  It contains
669
targets @code{@var{lang}.@var{hook}} (where @code{@var{lang}} is the
670
setting of @code{language} in @file{config-lang.in}) for the following
671
values of @code{@var{hook}}, and any other Makefile rules required to
672
build those targets (which may if necessary use other Makefiles
673
specified in @code{outputs} in @file{config-lang.in}, although this is
674
deprecated).  It also adds any testsuite targets that can use the
675
standard rule in @file{gcc/Makefile.in} to the variable
676
@code{lang_checks}.
677
 
678
@table @code
679
@itemx all.cross
680
@itemx start.encap
681
@itemx rest.encap
682
FIXME: exactly what goes in each of these targets?
683
@item tags
684
Build an @command{etags} @file{TAGS} file in the language subdirectory
685
in the source tree.
686
@item info
687
Build info documentation for the front end, in the build directory.
688
This target is only called by @samp{make bootstrap} if a suitable
689
version of @command{makeinfo} is available, so does not need to check
690
for this, and should fail if an error occurs.
691
@item dvi
692
Build DVI documentation for the front end, in the build directory.
693
This should be done using @code{$(TEXI2DVI)}, with appropriate
694
@option{-I} arguments pointing to directories of included files.
695
@item pdf
696
Build PDF documentation for the front end, in the build directory.
697
This should be done using @code{$(TEXI2PDF)}, with appropriate
698
@option{-I} arguments pointing to directories of included files.
699
@item html
700
Build HTML documentation for the front end, in the build directory.
701
@item man
702
Build generated man pages for the front end from Texinfo manuals
703
(@pxref{Man Page Generation}), in the build directory.  This target
704
is only called if the necessary tools are available, but should ignore
705
errors so as not to stop the build if errors occur; man pages are
706
optional and the tools involved may be installed in a broken way.
707
@item install-common
708
Install everything that is part of the front end, apart from the
709
compiler executables listed in @code{compilers} in
710
@file{config-lang.in}.
711
@item install-info
712
Install info documentation for the front end, if it is present in the
713
source directory.  This target should have dependencies on info files
714
that should be installed.
715
@item install-man
716
Install man pages for the front end.  This target should ignore
717
errors.
718
@item install-plugin
719
Install headers needed for plugins.
720
@item srcextra
721
Copies its dependencies into the source directory.  This generally should
722
be used for generated files such as Bison output files which are not
723
version-controlled, but should be included in any release tarballs.  This
724
target will be executed during a bootstrap if
725
@samp{--enable-generated-files-in-srcdir} was specified as a
726
@file{configure} option.
727
@item srcinfo
728
@itemx srcman
729
Copies its dependencies into the source directory.  These targets will be
730
executed during a bootstrap if @samp{--enable-generated-files-in-srcdir}
731
was specified as a @file{configure} option.
732
@item uninstall
733
Uninstall files installed by installing the compiler.  This is
734
currently documented not to be supported, so the hook need not do
735
anything.
736
@item mostlyclean
737
@itemx clean
738
@itemx distclean
739
@itemx maintainer-clean
740
The language parts of the standard GNU
741
@samp{*clean} targets.  @xref{Standard Targets, , Standard Targets for
742
Users, standards, GNU Coding Standards}, for details of the standard
743
targets.  For GCC, @code{maintainer-clean} should delete
744
all generated files in the source directory that are not version-controlled,
745
but should not delete anything that is.
746
@end table
747
 
748
@file{Make-lang.in} must also define a variable @code{@var{lang}_OBJS}
749
to a list of host object files that are used by that language.
750
 
751
@node Back End
752
@subsection Anatomy of a Target Back End
753
 
754
A back end for a target architecture in GCC has the following parts:
755
 
756
@itemize @bullet
757
@item
758
A directory @file{@var{machine}} under @file{gcc/config}, containing a
759
machine description @file{@var{machine}.md} file (@pxref{Machine Desc,
760
, Machine Descriptions}), header files @file{@var{machine}.h} and
761
@file{@var{machine}-protos.h} and a source file @file{@var{machine}.c}
762
(@pxref{Target Macros, , Target Description Macros and Functions}),
763
possibly a target Makefile fragment @file{t-@var{machine}}
764
(@pxref{Target Fragment, , The Target Makefile Fragment}), and maybe
765
some other files.  The names of these files may be changed from the
766
defaults given by explicit specifications in @file{config.gcc}.
767
@item
768
If necessary, a file @file{@var{machine}-modes.def} in the
769
@file{@var{machine}} directory, containing additional machine modes to
770
represent condition codes.  @xref{Condition Code}, for further details.
771
@item
772
An optional @file{@var{machine}.opt} file in the @file{@var{machine}}
773
directory, containing a list of target-specific options.  You can also
774
add other option files using the @code{extra_options} variable in
775
@file{config.gcc}.  @xref{Options}.
776
@item
777
Entries in @file{config.gcc} (@pxref{System Config, , The
778
@file{config.gcc} File}) for the systems with this target
779
architecture.
780
@item
781
Documentation in @file{gcc/doc/invoke.texi} for any command-line
782
options supported by this target (@pxref{Run-time Target, , Run-time
783
Target Specification}).  This means both entries in the summary table
784
of options and details of the individual options.
785
@item
786
Documentation in @file{gcc/doc/extend.texi} for any target-specific
787
attributes supported (@pxref{Target Attributes, , Defining
788
target-specific uses of @code{__attribute__}}), including where the
789
same attribute is already supported on some targets, which are
790
enumerated in the manual.
791
@item
792
Documentation in @file{gcc/doc/extend.texi} for any target-specific
793
pragmas supported.
794
@item
795
Documentation in @file{gcc/doc/extend.texi} of any target-specific
796
built-in functions supported.
797
@item
798
Documentation in @file{gcc/doc/extend.texi} of any target-specific
799
format checking styles supported.
800
@item
801
Documentation in @file{gcc/doc/md.texi} of any target-specific
802
constraint letters (@pxref{Machine Constraints, , Constraints for
803
Particular Machines}).
804
@item
805
A note in @file{gcc/doc/contrib.texi} under the person or people who
806
contributed the target support.
807
@item
808
Entries in @file{gcc/doc/install.texi} for all target triplets
809
supported with this target architecture, giving details of any special
810
notes about installation for this target, or saying that there are no
811
special notes if there are none.
812
@item
813
Possibly other support outside the @file{gcc} directory for runtime
814
libraries.  FIXME: reference docs for this.  The @code{libstdc++} porting
815
manual needs to be installed as info for this to work, or to be a
816
chapter of this manual.
817
@end itemize
818
 
819
If the back end is added to the official GCC source repository, the
820
following are also necessary:
821
 
822
@itemize @bullet
823
@item
824
An entry for the target architecture in @file{readings.html} on the
825
GCC web site, with any relevant links.
826
@item
827
Details of the properties of the back end and target architecture in
828
@file{backends.html} on the GCC web site.
829
@item
830
A news item about the contribution of support for that target
831
architecture, in @file{index.html} on the GCC web site.
832
@item
833
Normally, one or more maintainers of that target listed in
834
@file{MAINTAINERS}.  Some existing architectures may be unmaintained,
835
but it would be unusual to add support for a target that does not have
836
a maintainer when support is added.
837
@end itemize
838
 
839
@node Testsuites
840
@chapter Testsuites
841
 
842
GCC contains several testsuites to help maintain compiler quality.
843
Most of the runtime libraries and language front ends in GCC have
844
testsuites.  Currently only the C language testsuites are documented
845
here; FIXME: document the others.
846
 
847
@menu
848
* Test Idioms::     Idioms used in testsuite code.
849
* Test Directives:: Directives used within DejaGnu tests.
850
* Ada Tests::       The Ada language testsuites.
851
* C Tests::         The C language testsuites.
852
* libgcj Tests::    The Java library testsuites.
853
* LTO Testing::     Support for testing link-time optimizations.
854
* gcov Testing::    Support for testing gcov.
855
* profopt Testing:: Support for testing profile-directed optimizations.
856
* compat Testing::  Support for testing binary compatibility.
857
* Torture Tests::   Support for torture testing using multiple options.
858
@end menu
859
 
860
@node Test Idioms
861
@section Idioms Used in Testsuite Code
862
 
863
In general, C testcases have a trailing @file{-@var{n}.c}, starting
864
with @file{-1.c}, in case other testcases with similar names are added
865
later.  If the test is a test of some well-defined feature, it should
866
have a name referring to that feature such as
867
@file{@var{feature}-1.c}.  If it does not test a well-defined feature
868
but just happens to exercise a bug somewhere in the compiler, and a
869
bug report has been filed for this bug in the GCC bug database,
870
@file{pr@var{bug-number}-1.c} is the appropriate form of name.
871
Otherwise (for miscellaneous bugs not filed in the GCC bug database),
872
and previously more generally, test cases are named after the date on
873
which they were added.  This allows people to tell at a glance whether
874
a test failure is because of a recently found bug that has not yet
875
been fixed, or whether it may be a regression, but does not give any
876
other information about the bug or where discussion of it may be
877
found.  Some other language testsuites follow similar conventions.
878
 
879
In the @file{gcc.dg} testsuite, it is often necessary to test that an
880
error is indeed a hard error and not just a warning---for example,
881
where it is a constraint violation in the C standard, which must
882
become an error with @option{-pedantic-errors}.  The following idiom,
883
where the first line shown is line @var{line} of the file and the line
884
that generates the error, is used for this:
885
 
886
@smallexample
887
/* @{ dg-bogus "warning" "warning in place of error" @} */
888
/* @{ dg-error "@var{regexp}" "@var{message}" @{ target *-*-* @} @var{line} @} */
889
@end smallexample
890
 
891
It may be necessary to check that an expression is an integer constant
892
expression and has a certain value.  To check that @code{@var{E}} has
893
value @code{@var{V}}, an idiom similar to the following is used:
894
 
895
@smallexample
896
char x[((E) == (V) ? 1 : -1)];
897
@end smallexample
898
 
899
In @file{gcc.dg} tests, @code{__typeof__} is sometimes used to make
900
assertions about the types of expressions.  See, for example,
901
@file{gcc.dg/c99-condexpr-1.c}.  The more subtle uses depend on the
902
exact rules for the types of conditional expressions in the C
903
standard; see, for example, @file{gcc.dg/c99-intconst-1.c}.
904
 
905
It is useful to be able to test that optimizations are being made
906
properly.  This cannot be done in all cases, but it can be done where
907
the optimization will lead to code being optimized away (for example,
908
where flow analysis or alias analysis should show that certain code
909
cannot be called) or to functions not being called because they have
910
been expanded as built-in functions.  Such tests go in
911
@file{gcc.c-torture/execute}.  Where code should be optimized away, a
912
call to a nonexistent function such as @code{link_failure ()} may be
913
inserted; a definition
914
 
915
@smallexample
916
#ifndef __OPTIMIZE__
917
void
918
link_failure (void)
919
@{
920
  abort ();
921
@}
922
#endif
923
@end smallexample
924
 
925
@noindent
926
will also be needed so that linking still succeeds when the test is
927
run without optimization.  When all calls to a built-in function
928
should have been optimized and no calls to the non-built-in version of
929
the function should remain, that function may be defined as
930
@code{static} to call @code{abort ()} (although redeclaring a function
931
as static may not work on all targets).
932
 
933
All testcases must be portable.  Target-specific testcases must have
934
appropriate code to avoid causing failures on unsupported systems;
935
unfortunately, the mechanisms for this differ by directory.
936
 
937
FIXME: discuss non-C testsuites here.
938
 
939
@node Test Directives
940
@section Directives used within DejaGnu tests
941
 
942
@menu
943
* Directives::  Syntax and descriptions of test directives.
944
* Selectors:: Selecting targets to which a test applies.
945
* Effective-Target Keywords:: Keywords describing target attributes.
946
* Add Options:: Features for @code{dg-add-options}
947
* Require Support:: Variants of @code{dg-require-@var{support}}
948
* Final Actions:: Commands for use in @code{dg-final}
949
@end menu
950
 
951
@node Directives
952
@subsection Syntax and Descriptions of test directives
953
 
954
Test directives appear within comments in a test source file and begin
955
with @code{dg-}.  Some of these are defined within DejaGnu and others
956
are local to the GCC testsuite.
957
 
958
The order in which test directives appear in a test can be important:
959
directives local to GCC sometimes override information used by the
960
DejaGnu directives, which know nothing about the GCC directives, so the
961
DejaGnu directives must precede GCC directives.
962
 
963
Several test directives include selectors (@pxref{Selectors, , })
964
which are usually preceded by the keyword @code{target} or @code{xfail}.
965
 
966
@subsubsection Specify how to build the test
967
 
968
@table @code
969
@item @{ dg-do @var{do-what-keyword} [@{ target/xfail @var{selector} @}] @}
970
@var{do-what-keyword} specifies how the test is compiled and whether
971
it is executed.  It is one of:
972
 
973
@table @code
974
@item preprocess
975
Compile with @option{-E} to run only the preprocessor.
976
@item compile
977
Compile with @option{-S} to produce an assembly code file.
978
@item assemble
979
Compile with @option{-c} to produce a relocatable object file.
980
@item link
981
Compile, assemble, and link to produce an executable file.
982
@item run
983
Produce and run an executable file, which is expected to return
984
an exit code of 0.
985
@end table
986
 
987
The default is @code{compile}.  That can be overridden for a set of
988
tests by redefining @code{dg-do-what-default} within the @code{.exp}
989
file for those tests.
990
 
991
If the directive includes the optional @samp{@{ target @var{selector} @}}
992
then the test is skipped unless the target system matches the
993
@var{selector}.
994
 
995
If @var{do-what-keyword} is @code{run} and the directive includes
996
the optional @samp{@{ xfail @var{selector} @}} and the selector is met
997
then the test is expected to fail.  The @code{xfail} clause is ignored
998
for other values of @var{do-what-keyword}; those tests can use
999
directive @code{dg-xfail-if}.
1000
@end table
1001
 
1002
@subsubsection Specify additional compiler options
1003
 
1004
@table @code
1005
@item @{ dg-options @var{options} [@{ target @var{selector} @}] @}
1006
This DejaGnu directive provides a list of compiler options, to be used
1007
if the target system matches @var{selector}, that replace the default
1008
options used for this set of tests.
1009
 
1010
@item @{ dg-add-options @var{feature} @dots{} @}
1011
Add any compiler options that are needed to access certain features.
1012
This directive does nothing on targets that enable the features by
1013
default, or that don't provide them at all.  It must come after
1014
all @code{dg-options} directives.
1015
For supported values of @var{feature} see @ref{Add Options, ,}.
1016
@end table
1017
 
1018
@subsubsection Modify the test timeout value
1019
 
1020
The normal timeout limit, in seconds, is found by searching the
1021
following in order:
1022
 
1023
@itemize @bullet
1024
@item the value defined by an earlier @code{dg-timeout} directive in
1025
the test
1026
 
1027
@item variable @var{tool_timeout} defined by the set of tests
1028
 
1029
@item @var{gcc},@var{timeout} set in the target board
1030
 
1031
@item 300
1032
@end itemize
1033
 
1034
@table @code
1035
@item @{ dg-timeout @var{n} [@{target @var{selector} @}] @}
1036
Set the time limit for the compilation and for the execution of the test
1037
to the specified number of seconds.
1038
 
1039
@item @{ dg-timeout-factor @var{x} [@{ target @var{selector} @}] @}
1040
Multiply the normal time limit for compilation and execution of the test
1041
by the specified floating-point factor.
1042
@end table
1043
 
1044
@subsubsection Skip a test for some targets
1045
 
1046
@table @code
1047
@item @{ dg-skip-if @var{comment} @{ @var{selector} @} [@{ @var{include-opts} @} [@{ @var{exclude-opts} @}]] @}
1048
Arguments @var{include-opts} and @var{exclude-opts} are lists in which
1049
each element is a string of zero or more GCC options.
1050
Skip the test if all of the following conditions are met:
1051
@itemize @bullet
1052
@item the test system is included in @var{selector}
1053
 
1054
@item for at least one of the option strings in @var{include-opts},
1055
every option from that string is in the set of options with which
1056
the test would be compiled; use @samp{"*"} for an @var{include-opts} list
1057
that matches any options; that is the default if @var{include-opts} is
1058
not specified
1059
 
1060
@item for each of the option strings in @var{exclude-opts}, at least one
1061
option from that string is not in the set of options with which the test
1062
would be compiled; use @samp{""} for an empty @var{exclude-opts} list;
1063
that is the default if @var{exclude-opts} is not specified
1064
@end itemize
1065
 
1066
For example, to skip a test if option @code{-Os} is present:
1067
 
1068
@smallexample
1069
/* @{ dg-skip-if "" @{ *-*-* @}  @{ "-Os" @} @{ "" @} @} */
1070
@end smallexample
1071
 
1072
To skip a test if both options @code{-O2} and @code{-g} are present:
1073
 
1074
@smallexample
1075
/* @{ dg-skip-if "" @{ *-*-* @}  @{ "-O2 -g" @} @{ "" @} @} */
1076
@end smallexample
1077
 
1078
To skip a test if either @code{-O2} or @code{-O3} is present:
1079
 
1080
@smallexample
1081
/* @{ dg-skip-if "" @{ *-*-* @}  @{ "-O2" "-O3" @} @{ "" @} @} */
1082
@end smallexample
1083
 
1084
To skip a test unless option @code{-Os} is present:
1085
 
1086
@smallexample
1087
/* @{ dg-skip-if "" @{ *-*-* @}  @{ "*" @} @{ "-Os" @} @} */
1088
@end smallexample
1089
 
1090
To skip a test if either @code{-O2} or @code{-O3} is used with @code{-g}
1091
but not if @code{-fpic} is also present:
1092
 
1093
@smallexample
1094
/* @{ dg-skip-if "" @{ *-*-* @}  @{ "-O2 -g" "-O3 -g" @} @{ "-fpic" @} @} */
1095
@end smallexample
1096
 
1097
@item @{ dg-require-effective-target @var{keyword} [@{ @var{selector} @}] @}
1098
Skip the test if the test target, including current multilib flags,
1099
is not covered by the effective-target keyword.
1100
If the directive includes the optional @samp{@{ @var{selector} @}}
1101
then the effective-target test is only performed if the target system
1102
matches the @var{selector}.
1103
This directive must appear after any @code{dg-do} directive in the test
1104
and before any @code{dg-additional-sources} directive.
1105
@xref{Effective-Target Keywords, , }.
1106
 
1107
@item @{ dg-require-@var{support} args @}
1108
Skip the test if the target does not provide the required support.
1109
These directives must appear after any @code{dg-do} directive in the test
1110
and before any @code{dg-additional-sources} directive.
1111
They require at least one argument, which can be an empty string if the
1112
specific procedure does not examine the argument.
1113
@xref{Require Support, , }, for a complete list of these directives.
1114
@end table
1115
 
1116
@subsubsection Expect a test to fail for some targets
1117
 
1118
@table @code
1119
@item  @{ dg-xfail-if @var{comment} @{ @var{selector} @} [@{ @var{include-opts} @} [@{ @var{exclude-opts} @}]] @}
1120
Expect the test to fail if the conditions (which are the same as for
1121
@code{dg-skip-if}) are met.  This does not affect the execute step.
1122
 
1123
@item  @{ dg-xfail-run-if @var{comment} @{ @var{selector} @} [@{ @var{include-opts} @} [@{ @var{exclude-opts} @}]] @}
1124
Expect the execute step of a test to fail if the conditions (which are
1125
the same as for @code{dg-skip-if}) are met.
1126
@end table
1127
 
1128
@subsubsection Expect the test executable to fail
1129
 
1130
@table @code
1131
@item  @{ dg-shouldfail @var{comment} [@{ @var{selector} @} [@{ @var{include-opts} @} [@{ @var{exclude-opts} @}]]] @}
1132
Expect the test executable to return a nonzero exit status if the
1133
conditions (which are the same as for @code{dg-skip-if}) are met.
1134
@end table
1135
 
1136
@subsubsection Verify compiler messages
1137
 
1138
@table @code
1139
@item @{ dg-error @var{regexp} [@var{comment} [@{ target/xfail @var{selector} @} [@var{line}] @}]] @}
1140
This DejaGnu directive appears on a source line that is expected to get
1141
an error message, or else specifies the source line associated with the
1142
message.  If there is no message for that line or if the text of that
1143
message is not matched by @var{regexp} then the check fails and
1144
@var{comment} is included in the @code{FAIL} message.  The check does
1145
not look for the string @samp{error} unless it is part of @var{regexp}.
1146
 
1147
@item @{ dg-warning @var{regexp} [@var{comment} [@{ target/xfail @var{selector} @} [@var{line}] @}]] @}
1148
This DejaGnu directive appears on a source line that is expected to get
1149
a warning message, or else specifies the source line associated with the
1150
message.  If there is no message for that line or if the text of that
1151
message is not matched by @var{regexp} then the check fails and
1152
@var{comment} is included in the @code{FAIL} message.  The check does
1153
not look for the string @samp{warning} unless it is part of @var{regexp}.
1154
 
1155
@item @{ dg-message @var{regexp} [@var{comment} [@{ target/xfail @var{selector} @} [@var{line}] @}]] @}
1156
The line is expected to get a message other than an error or warning.
1157
If there is no message for that line or if the text of that message is
1158
not matched by @var{regexp} then the check fails and @var{comment} is
1159
included in the @code{FAIL} message.
1160
 
1161
@item @{ dg-bogus @var{regexp} [@var{comment} [@{ target/xfail @var{selector} @} [@var{line}] @}]] @}
1162
This DejaGnu directive appears on a source line that should not get a
1163
message matching @var{regexp}, or else specifies the source line
1164
associated with the bogus message.  It is usually used with @samp{xfail}
1165
to indicate that the message is a known problem for a particular set of
1166
targets.
1167
 
1168
@item @{ dg-excess-errors @var{comment} [@{ target/xfail @var{selector} @}] @}
1169
This DejaGnu directive indicates that the test is expected to fail due
1170
to compiler messages that are not handled by @samp{dg-error},
1171
@samp{dg-warning} or @samp{dg-bogus}.  For this directive @samp{xfail}
1172
has the same effect as @samp{target}.
1173
 
1174
@item @{ dg-prune-output @var{regexp} @}
1175
Prune messages matching @var{regexp} from the test output.
1176
@end table
1177
 
1178
@subsubsection Verify output of the test executable
1179
 
1180
@table @code
1181
@item @{ dg-output @var{regexp} [@{ target/xfail @var{selector} @}] @}
1182
This DejaGnu directive compares @var{regexp} to the combined output
1183
that the test executable writes to @file{stdout} and @file{stderr}.
1184
@end table
1185
 
1186
@subsubsection Specify additional files for a test
1187
 
1188
@table @code
1189
@item @{ dg-additional-files "@var{filelist}" @}
1190
Specify additional files, other than source files, that must be copied
1191
to the system where the compiler runs.
1192
 
1193
@item @{ dg-additional-sources "@var{filelist}" @}
1194
Specify additional source files to appear in the compile line
1195
following the main test file.
1196
@end table
1197
 
1198
@subsubsection Add checks at the end of a test
1199
 
1200
@table @code
1201
@item @{ dg-final @{ @var{local-directive} @} @}
1202
This DejaGnu directive is placed within a comment anywhere in the
1203
source file and is processed after the test has been compiled and run.
1204
Multiple @samp{dg-final} commands are processed in the order in which
1205
they appear in the source file.  @xref{Final Actions, , }, for a list
1206
of directives that can be used within @code{dg-final}.
1207
@end table
1208
 
1209
@node Selectors
1210
@subsection Selecting targets to which a test applies
1211
 
1212
Several test directives include @var{selector}s to limit the targets
1213
for which a test is run or to declare that a test is expected to fail
1214
on particular targets.
1215
 
1216
A selector is:
1217
@itemize @bullet
1218
@item one or more target triplets, possibly including wildcard characters
1219
@item a single effective-target keyword (@pxref{Effective-Target Keywords})
1220
@item a logical expression
1221
@end itemize
1222
 
1223
Depending on the
1224
context, the selector specifies whether a test is skipped and reported
1225
as unsupported or is expected to fail.  Use @samp{*-*-*} to match any
1226
target.
1227
 
1228
A selector expression appears within curly braces and uses a single
1229
logical operator: one of @samp{!}, @samp{&&}, or @samp{||}.  An
1230
operand is another selector expression, an effective-target keyword,
1231
a single target triplet, or a list of target triplets within quotes or
1232
curly braces.  For example:
1233
 
1234
@smallexample
1235
@{ target @{ ! "hppa*-*-* ia64*-*-*" @} @}
1236
@{ target @{ powerpc*-*-* && lp64 @} @}
1237
@{ xfail @{ lp64 || vect_no_align @} @}
1238
@end smallexample
1239
 
1240
@node Effective-Target Keywords
1241
@subsection Keywords describing target attributes
1242
 
1243
Effective-target keywords identify sets of targets that support
1244
particular functionality.  They are used to limit tests to be run only
1245
for particular targets, or to specify that particular sets of targets
1246
are expected to fail some tests.
1247
 
1248
Effective-target keywords are defined in @file{lib/target-supports.exp} in
1249
the GCC testsuite, with the exception of those that are documented as
1250
being local to a particular test directory.
1251
 
1252
The @samp{effective target} takes into account all of the compiler options
1253
with which the test will be compiled, including the multilib options.
1254
By convention, keywords ending in @code{_nocache} can also include options
1255
specified for the particular test in an earlier @code{dg-options} or
1256
@code{dg-add-options} directive.
1257
 
1258
@subsubsection Data type sizes
1259
 
1260
@table @code
1261
@item ilp32
1262
Target has 32-bit @code{int}, @code{long}, and pointers.
1263
 
1264
@item lp64
1265
Target has 32-bit @code{int}, 64-bit @code{long} and pointers.
1266
 
1267
@item llp64
1268
Target has 32-bit @code{int} and @code{long}, 64-bit @code{long long}
1269
and pointers.
1270
 
1271
@item double64
1272
Target has 64-bit @code{double}.
1273
 
1274
@item double64plus
1275
Target has @code{double} that is 64 bits or longer.
1276
 
1277
@item int32plus
1278
Target has @code{int} that is at 32 bits or longer.
1279
 
1280
@item int16
1281
Target has @code{int} that is 16 bits or shorter.
1282
 
1283
@item large_double
1284
Target supports @code{double} that is longer than @code{float}.
1285
 
1286
@item large_long_double
1287
Target supports @code{long double} that is longer than @code{double}.
1288
 
1289
@item ptr32plus
1290
Target has pointers that are 32 bits or longer.
1291
 
1292
@item size32plus
1293
Target supports array and structure sizes that are 32 bits or longer.
1294
 
1295
@item 4byte_wchar_t
1296
Target has @code{wchar_t} that is at least 4 bytes.
1297
@end table
1298
 
1299
@subsubsection Fortran-specific attributes
1300
 
1301
@table @code
1302
@item fortran_integer_16
1303
Target supports Fortran @code{integer} that is 16 bytes or longer.
1304
 
1305
@item fortran_large_int
1306
Target supports Fortran @code{integer} kinds larger than @code{integer(8)}.
1307
 
1308
@item fortran_large_real
1309
Target supports Fortran @code{real} kinds larger than @code{real(8)}.
1310
@end table
1311
 
1312
@subsubsection Vector-specific attributes
1313
 
1314
@table @code
1315
@item vect_condition
1316
Target supports vector conditional operations.
1317
 
1318
@item vect_double
1319
Target supports hardware vectors of @code{double}.
1320
 
1321
@item vect_float
1322
Target supports hardware vectors of @code{float}.
1323
 
1324
@item vect_int
1325
Target supports hardware vectors of @code{int}.
1326
 
1327
@item vect_int_mult
1328
Target supports a vector widening multiplication of @code{short} operands
1329
into an @code{int} result, or supports promotion (unpacking) from
1330
@code{short} to @code{int} and a non-widening multiplication of @code{int}.
1331
 
1332
@item vect_long
1333
Target supports hardware vectors of @code{long}.
1334
 
1335
@item vect_long_long
1336
Target supports hardware vectors of @code{long long}.
1337
 
1338
@item vect_aligned_arrays
1339
Target aligns arrays to vector alignment boundary.
1340
 
1341
@item vect_hw_misalign
1342
Target supports a vector misalign access.
1343
 
1344
@item vect_no_align
1345
Target does not support a vector alignment mechanism.
1346
 
1347
@item vect_no_int_max
1348
Target does not support a vector max instruction on @code{int}.
1349
 
1350
@item vect_no_int_add
1351
Target does not support a vector add instruction on @code{int}.
1352
 
1353
@item vect_no_bitwise
1354
Target does not support vector bitwise instructions.
1355
 
1356
@item vect_char_mult
1357
Target supports @code{vector char} multiplication.
1358
 
1359
@item vect_short_mult
1360
Target supports @code{vector short} multiplication.
1361
 
1362
@item vect_int_mult
1363
Target supports @code{vector int} multiplication.
1364
 
1365
@item vect_extract_even_odd
1366
Target supports vector even/odd element extraction.
1367
 
1368
@item vect_extract_even_odd_wide
1369
Target supports vector even/odd element extraction of vectors with elements
1370
@code{SImode} or larger.
1371
 
1372
@item vect_interleave
1373
Target supports vector interleaving.
1374
 
1375
@item vect_strided
1376
Target supports vector interleaving and extract even/odd.
1377
 
1378
@item vect_strided_wide
1379
Target supports vector interleaving and extract even/odd for wide
1380
element types.
1381
 
1382
@item vect_perm
1383
Target supports vector permutation.
1384
 
1385
@item vect_shift
1386
Target supports a hardware vector shift operation.
1387
 
1388
@item vect_widen_sum_hi_to_si
1389
Target supports a vector widening summation of @code{short} operands
1390
into @code{int} results, or can promote (unpack) from @code{short}
1391
to @code{int}.
1392
 
1393
@item vect_widen_sum_qi_to_hi
1394
Target supports a vector widening summation of @code{char} operands
1395
into @code{short} results, or can promote (unpack) from @code{char}
1396
to @code{short}.
1397
 
1398
@item vect_widen_sum_qi_to_si
1399
Target supports a vector widening summation of @code{char} operands
1400
into @code{int} results.
1401
 
1402
@item vect_widen_mult_qi_to_hi
1403
Target supports a vector widening multiplication of @code{char} operands
1404
into @code{short} results, or can promote (unpack) from @code{char} to
1405
@code{short} and perform non-widening multiplication of @code{short}.
1406
 
1407
@item vect_widen_mult_hi_to_si
1408
Target supports a vector widening multiplication of @code{short} operands
1409
into @code{int} results, or can promote (unpack) from @code{short} to
1410
@code{int} and perform non-widening multiplication of @code{int}.
1411
 
1412
@item vect_sdot_qi
1413
Target supports a vector dot-product of @code{signed char}.
1414
 
1415
@item vect_udot_qi
1416
Target supports a vector dot-product of @code{unsigned char}.
1417
 
1418
@item vect_sdot_hi
1419
Target supports a vector dot-product of @code{signed short}.
1420
 
1421
@item vect_udot_hi
1422
Target supports a vector dot-product of @code{unsigned short}.
1423
 
1424
@item vect_pack_trunc
1425
Target supports a vector demotion (packing) of @code{short} to @code{char}
1426
and from @code{int} to @code{short} using modulo arithmetic.
1427
 
1428
@item vect_unpack
1429
Target supports a vector promotion (unpacking) of @code{char} to @code{short}
1430
and from @code{char} to @code{int}.
1431
 
1432
@item vect_intfloat_cvt
1433
Target supports conversion from @code{signed int} to @code{float}.
1434
 
1435
@item vect_uintfloat_cvt
1436
Target supports conversion from @code{unsigned int} to @code{float}.
1437
 
1438
@item vect_floatint_cvt
1439
Target supports conversion from @code{float} to @code{signed int}.
1440
 
1441
@item vect_floatuint_cvt
1442
Target supports conversion from @code{float} to @code{unsigned int}.
1443
@end table
1444
 
1445
@subsubsection Thread Local Storage attributes
1446
 
1447
@table @code
1448
@item tls
1449
Target supports thread-local storage.
1450
 
1451
@item tls_native
1452
Target supports native (rather than emulated) thread-local storage.
1453
 
1454
@item tls_runtime
1455
Test system supports executing TLS executables.
1456
@end table
1457
 
1458
@subsubsection Decimal floating point attributes
1459
 
1460
@table @code
1461
@item dfp
1462
Targets supports compiling decimal floating point extension to C.
1463
 
1464
@item dfp_nocache
1465
Including the options used to compile this particular test, the
1466
target supports compiling decimal floating point extension to C.
1467
 
1468
@item dfprt
1469
Test system can execute decimal floating point tests.
1470
 
1471
@item dfprt_nocache
1472
Including the options used to compile this particular test, the
1473
test system can execute decimal floating point tests.
1474
 
1475
@item hard_dfp
1476
Target generates decimal floating point instructions with current options.
1477
@end table
1478
 
1479
@subsubsection ARM-specific attributes
1480
 
1481
@table @code
1482
@item arm32
1483
ARM target generates 32-bit code.
1484
 
1485
@item arm_eabi
1486
ARM target adheres to the ABI for the ARM Architecture.
1487
 
1488
@item arm_hard_vfp_ok
1489
ARM target supports @code{-mfpu=vfp -mfloat-abi=hard}.
1490
Some multilibs may be incompatible with these options.
1491
 
1492
@item arm_iwmmxt_ok
1493
ARM target supports @code{-mcpu=iwmmxt}.
1494
Some multilibs may be incompatible with this option.
1495
 
1496
@item arm_neon
1497
ARM target supports generating NEON instructions.
1498
 
1499
@item arm_neon_hw
1500
Test system supports executing NEON instructions.
1501
 
1502
@item arm_neon_ok
1503
ARM Target supports @code{-mfpu=neon -mfloat-abi=softfp}.
1504
Some multilibs may be incompatible with these options.
1505
 
1506
@item arm_thumb1_ok
1507
ARM target generates Thumb-1 code for @code{-mthumb}.
1508
 
1509
@item arm_thumb2_ok
1510
ARM target generates Thumb-2 code for @code{-mthumb}.
1511
 
1512
@item arm_vfp_ok
1513
ARM target supports @code{-mfpu=vfp -mfloat-abi=softfp}.
1514
Some multilibs may be incompatible with these options.
1515
@end table
1516
 
1517
@subsubsection MIPS-specific attributes
1518
 
1519
@table @code
1520
@item mips64
1521
MIPS target supports 64-bit instructions.
1522
 
1523
@item nomips16
1524
MIPS target does not produce MIPS16 code.
1525
 
1526
@item mips16_attribute
1527
MIPS target can generate MIPS16 code.
1528
 
1529
@item mips_loongson
1530
MIPS target is a Loongson-2E or -2F target using an ABI that supports
1531
the Loongson vector modes.
1532
 
1533
@item mips_newabi_large_long_double
1534
MIPS target supports @code{long double} larger than @code{double}
1535
when using the new ABI.
1536
 
1537
@item mpaired_single
1538
MIPS target supports @code{-mpaired-single}.
1539
@end table
1540
 
1541
@subsubsection PowerPC-specific attributes
1542
 
1543
@table @code
1544
@item powerpc64
1545
Test system supports executing 64-bit instructions.
1546
 
1547
@item powerpc_altivec
1548
PowerPC target supports AltiVec.
1549
 
1550
@item powerpc_altivec_ok
1551
PowerPC target supports @code{-maltivec}.
1552
 
1553
@item powerpc_fprs
1554
PowerPC target supports floating-point registers.
1555
 
1556
@item powerpc_hard_double
1557
PowerPC target supports hardware double-precision floating-point.
1558
 
1559
@item powerpc_ppu_ok
1560
PowerPC target supports @code{-mcpu=cell}.
1561
 
1562
@item powerpc_spe
1563
PowerPC target supports PowerPC SPE.
1564
 
1565
@item powerpc_spe_nocache
1566
Including the options used to compile this particular test, the
1567
PowerPC target supports PowerPC SPE.
1568
 
1569
@item powerpc_spu
1570
PowerPC target supports PowerPC SPU.
1571
 
1572
@item spu_auto_overlay
1573
SPU target has toolchain that supports automatic overlay generation.
1574
 
1575
@item powerpc_vsx_ok
1576
PowerPC target supports @code{-mvsx}.
1577
 
1578
@item powerpc_405_nocache
1579
Including the options used to compile this particular test, the
1580
PowerPC target supports PowerPC 405.
1581
 
1582
@item vmx_hw
1583
PowerPC target supports executing AltiVec instructions.
1584
@end table
1585
 
1586
@subsubsection Other hardware attributes
1587
 
1588
@table @code
1589
@item avx
1590
Target supports compiling AVX instructions.
1591
 
1592
@item cell_hw
1593
Test system can execute AltiVec and Cell PPU instructions.
1594
 
1595
@item coldfire_fpu
1596
Target uses a ColdFire FPU.
1597
 
1598
@item hard_float
1599
Target supports FPU instructions.
1600
 
1601
@item sse
1602
Target supports compiling @code{sse} instructions.
1603
 
1604
@item sse_runtime
1605
Target supports the execution of @code{sse} instructions.
1606
 
1607
@item sse2
1608
Target supports compiling @code{sse2} instructions.
1609
 
1610
@item sse2_runtime
1611
Target supports the execution of @code{sse2} instructions.
1612
 
1613
@item sync_char_short
1614
Target supports atomic operations on @code{char} and @code{short}.
1615
 
1616
@item sync_int_long
1617
Target supports atomic operations on @code{int} and @code{long}.
1618
 
1619
@item ultrasparc_hw
1620
Test environment appears to run executables on a simulator that
1621
accepts only @code{EM_SPARC} executables and chokes on @code{EM_SPARC32PLUS}
1622
or @code{EM_SPARCV9} executables.
1623
 
1624
@item vect_cmdline_needed
1625
Target requires a command line argument to enable a SIMD instruction set.
1626
@end table
1627
 
1628
@subsubsection Environment attributes
1629
 
1630
@table @code
1631
@item c
1632
The language for the compiler under test is C.
1633
 
1634
@item c++
1635
The language for the compiler under test is C++.
1636
 
1637
@item c99_runtime
1638
Target provides a full C99 runtime.
1639
 
1640
@item correct_iso_cpp_string_wchar_protos
1641
Target @code{string.h} and @code{wchar.h} headers provide C++ required
1642
overloads for @code{strchr} etc. functions.
1643
 
1644
@item dummy_wcsftime
1645
Target uses a dummy @code{wcsftime} function that always returns zero.
1646
 
1647
@item fd_truncate
1648
Target can truncate a file from a file descriptor, as used by
1649
@file{libgfortran/io/unix.c:fd_truncate}; i.e. @code{ftruncate} or
1650
@code{chsize}.
1651
 
1652
@item freestanding
1653
Target is @samp{freestanding} as defined in section 4 of the C99 standard.
1654
Effectively, it is a target which supports no extra headers or libraries
1655
other than what is considered essential.
1656
 
1657
@item init_priority
1658
Target supports constructors with initialization priority arguments.
1659
 
1660
@item inttypes_types
1661
Target has the basic signed and unsigned types in @code{inttypes.h}.
1662
This is for tests that GCC's notions of these types agree with those
1663
in the header, as some systems have only @code{inttypes.h}.
1664
 
1665
@item lax_strtofp
1666
Target might have errors of a few ULP in string to floating-point
1667
conversion functions and overflow is not always detected correctly by
1668
those functions.
1669
 
1670
@item newlib
1671
Target supports Newlib.
1672
 
1673
@item pow10
1674
Target provides @code{pow10} function.
1675
 
1676
@item pthread
1677
Target can compile using @code{pthread.h} with no errors or warnings.
1678
 
1679
@item pthread_h
1680
Target has @code{pthread.h}.
1681
 
1682
@item simulator
1683
Test system runs executables on a simulator (i.e. slowly) rather than
1684
hardware (i.e. fast).
1685
 
1686
@item stdint_types
1687
Target has the basic signed and unsigned C types in @code{stdint.h}.
1688
This will be obsolete when GCC ensures a working @code{stdint.h} for
1689
all targets.
1690
 
1691
@item trampolines
1692
Target supports trampolines.
1693
 
1694
@item uclibc
1695
Target supports uClibc.
1696
 
1697
@item unwrapped
1698
Target does not use a status wrapper.
1699
 
1700
@item vxworks_kernel
1701
Target is a VxWorks kernel.
1702
 
1703
@item vxworks_rtp
1704
Target is a VxWorks RTP.
1705
 
1706
@item wchar
1707
Target supports wide characters.
1708
@end table
1709
 
1710
@subsubsection Other attributes
1711
 
1712
@table @code
1713
@item automatic_stack_alignment
1714
Target supports automatic stack alignment.
1715
 
1716
@item cxa_atexit
1717
Target uses @code{__cxa_atexit}.
1718
 
1719
@item default_packed
1720
Target has packed layout of structure members by default.
1721
 
1722
@item fgraphite
1723
Target supports Graphite optimizations.
1724
 
1725
@item fixed_point
1726
Target supports fixed-point extension to C.
1727
 
1728
@item fopenmp
1729
Target supports OpenMP via @option{-fopenmp}.
1730
 
1731
@item fpic
1732
Target supports @option{-fpic} and @option{-fPIC}.
1733
 
1734
@item freorder
1735
Target supports @option{-freorder-blocks-and-partition}.
1736
 
1737
@item fstack_protector
1738
Target supports @option{-fstack-protector}.
1739
 
1740
@item gas
1741
Target uses GNU @command{as}.
1742
 
1743
@item gc_sections
1744
Target supports @option{--gc-sections}.
1745
 
1746
@item keeps_null_pointer_checks
1747
Target keeps null pointer checks, either due to the use of
1748
@option{-fno-delete-null-pointer-checks} or hardwired into the target.
1749
 
1750
@item lto
1751
Compiler has been configured to support link-time optimization (LTO).
1752
 
1753
@item named_sections
1754
Target supports named sections.
1755
 
1756
@item natural_alignment_32
1757
Target uses natural alignment (aligned to type size) for types of
1758
32 bits or less.
1759
 
1760
@item target_natural_alignment_64
1761
Target uses natural alignment (aligned to type size) for types of
1762
64 bits or less.
1763
 
1764
@item nonpic
1765
Target does not generate PIC by default.
1766
 
1767
@item pcc_bitfield_type_matters
1768
Target defines @code{PCC_BITFIELD_TYPE_MATTERS}.
1769
 
1770
@item pe_aligned_commons
1771
Target supports @option{-mpe-aligned-commons}.
1772
 
1773
@item section_anchors
1774
Target supports section anchors.
1775
 
1776
@item short_enums
1777
Target defaults to short enums.
1778
 
1779
@item static
1780
Target supports @option{-static}.
1781
 
1782
@item static_libgfortran
1783
Target supports statically linking @samp{libgfortran}.
1784
 
1785
@item string_merging
1786
Target supports merging string constants at link time.
1787
 
1788
@item ucn
1789
Target supports compiling and assembling UCN.
1790
 
1791
@item ucn_nocache
1792
Including the options used to compile this particular test, the
1793
target supports compiling and assembling UCN.
1794
 
1795
@item unaligned_stack
1796
Target does not guarantee that its @code{STACK_BOUNDARY} is greater than
1797
or equal to the required vector alignment.
1798
 
1799
@item vector_alignment_reachable
1800
Vector alignment is reachable for types of 32 bits or less.
1801
 
1802
@item vector_alignment_reachable_for_64bit
1803
Vector alignment is reachable for types of 64 bits or less.
1804
 
1805
@item wchar_t_char16_t_compatible
1806
Target supports @code{wchar_t} that is compatible with @code{char16_t}.
1807
 
1808
@item wchar_t_char32_t_compatible
1809
Target supports @code{wchar_t} that is compatible with @code{char32_t}.
1810
@end table
1811
 
1812
@subsubsection Local to tests in @code{gcc.target/i386}
1813
 
1814
@table @code
1815
@item 3dnow
1816
Target supports compiling @code{3dnow} instructions.
1817
 
1818
@item aes
1819
Target supports compiling @code{aes} instructions.
1820
 
1821
@item fma4
1822
Target supports compiling @code{fma4} instructions.
1823
 
1824
@item ms_hook_prologue
1825
Target supports attribute @code{ms_hook_prologue}.
1826
 
1827
@item pclmul
1828
Target supports compiling @code{pclmul} instructions.
1829
 
1830
@item sse3
1831
Target supports compiling @code{sse3} instructions.
1832
 
1833
@item sse4
1834
Target supports compiling @code{sse4} instructions.
1835
 
1836
@item sse4a
1837
Target supports compiling @code{sse4a} instructions.
1838
 
1839
@item ssse3
1840
Target supports compiling @code{ssse3} instructions.
1841
 
1842
@item vaes
1843
Target supports compiling @code{vaes} instructions.
1844
 
1845
@item vpclmul
1846
Target supports compiling @code{vpclmul} instructions.
1847
 
1848
@item xop
1849
Target supports compiling @code{xop} instructions.
1850
@end table
1851
 
1852
@subsubsection Local to tests in @code{gcc.target/spu/ea}
1853
 
1854
@table @code
1855
@item ealib
1856
Target @code{__ea} library functions are available.
1857
@end table
1858
 
1859
@subsubsection Local to tests in @code{gcc.test-framework}
1860
 
1861
@table @code
1862
@item no
1863
Always returns 0.
1864
 
1865
@item yes
1866
Always returns 1.
1867
@end table
1868
 
1869
@node Add Options
1870
@subsection Features for @code{dg-add-options}
1871
 
1872
The supported values of @var{feature} for directive @code{dg-add-options}
1873
are:
1874
 
1875
@table @code
1876
@item bind_pic_locally
1877
Add the target-specific flags needed to enable functions to bind
1878
locally when using pic/PIC passes in the testsuite.
1879
 
1880
@item c99_runtime
1881
Add the target-specific flags needed to access the C99 runtime.
1882
 
1883
@item ieee
1884
Add the target-specific flags needed to enable full IEEE
1885
compliance mode.
1886
 
1887
@item mips16_attribute
1888
@code{mips16} function attributes.
1889
Only MIPS targets support this feature, and only then in certain modes.
1890
@end table
1891
 
1892
@node Require Support
1893
@subsection Variants of @code{dg-require-@var{support}}
1894
 
1895
A few of the @code{dg-require} directives take arguments.
1896
 
1897
@table @code
1898
@item dg-require-iconv @var{codeset}
1899
Skip the test if the target does not support iconv.  @var{codeset} is
1900
the codeset to convert to.
1901
 
1902
@item dg-require-profiling @var{profopt}
1903
Skip the test if the target does not support profiling with option
1904
@var{profopt}.
1905
 
1906
@item dg-require-visibility @var{vis}
1907
Skip the test if the target does not support the @code{visibility} attribute.
1908
If @var{vis} is @code{""}, support for @code{visibility("hidden")} is
1909
checked, for @code{visibility("@var{vis}")} otherwise.
1910
@end table
1911
 
1912
The original @code{dg-require} directives were defined before there
1913
was support for effective-target keywords.  The directives that do not
1914
take arguments could be replaced with effective-target keywords.
1915
 
1916
@table @code
1917
@item dg-require-alias ""
1918
Skip the test if the target does not support the @samp{alias} attribute.
1919
 
1920
@item dg-require-compat-dfp ""
1921
Skip this test unless both compilers in a @file{compat} testsuite
1922
support decimal floating point.
1923
 
1924
@item dg-require-cxa-atexit ""
1925
Skip the test if the target does not support @code{__cxa_atexit}.
1926
This is equivalent to @code{dg-require-effective-target cxa_atexit}.
1927
 
1928
@item dg-require-dll ""
1929
Skip the test if the target does not support DLL attributes.
1930
 
1931
@item dg-require-fork ""
1932
Skip the test if the target does not support @code{fork}.
1933
 
1934
@item dg-require-gc-sections ""
1935
Skip the test if the target's linker does not support the
1936
@code{--gc-sections} flags.
1937
This is equivalent to @code{dg-require-effective-target gc-sections}.
1938
 
1939
@item dg-require-host-local ""
1940
Skip the test if the host is remote, rather than the same as the build
1941
system.  Some tests are incompatible with DejaGnu's handling of remote
1942
hosts, which involves copying the source file to the host and compiling
1943
it with a relative path and "@code{-o a.out}".
1944
 
1945
@item dg-require-mkfifo ""
1946
Skip the test if the target does not support @code{mkfifo}.
1947
 
1948
@item dg-require-named-sections ""
1949
Skip the test is the target does not support named sections.
1950
This is equivalent to @code{dg-require-effective-target named_sections}.
1951
 
1952
@item dg-require-weak ""
1953
Skip the test if the target does not support weak symbols.
1954
 
1955
@item dg-require-weak-override ""
1956
Skip the test if the target does not support overriding weak symbols.
1957
@end table
1958
 
1959
@node Final Actions
1960
@subsection Commands for use in @code{dg-final}
1961
 
1962
The GCC testsuite defines the following directives to be used within
1963
@code{dg-final}.
1964
 
1965
@subsubsection Scan a particular file
1966
 
1967
@table @code
1968
@item scan-file @var{filename} @var{regexp} [@{ target/xfail @var{selector} @}]
1969
Passes if @var{regexp} matches text in @var{filename}.
1970
@item scan-file-not @var{filename} @var{regexp} [@{ target/xfail @var{selector} @}]
1971
Passes if @var{regexp} does not match text in @var{filename}.
1972
@item scan-module @var{module} @var{regexp} [@{ target/xfail @var{selector} @}]
1973
Passes if @var{regexp} matches in Fortran module @var{module}.
1974
@end table
1975
 
1976
@subsubsection Scan the assembly output
1977
 
1978
@table @code
1979
@item scan-assembler @var{regex} [@{ target/xfail @var{selector} @}]
1980
Passes if @var{regex} matches text in the test's assembler output.
1981
 
1982
@item scan-assembler-not @var{regex} [@{ target/xfail @var{selector} @}]
1983
Passes if @var{regex} does not match text in the test's assembler output.
1984
 
1985
@item scan-assembler-times @var{regex} @var{num} [@{ target/xfail @var{selector} @}]
1986
Passes if @var{regex} is matched exactly @var{num} times in the test's
1987
assembler output.
1988
 
1989
@item scan-assembler-dem @var{regex} [@{ target/xfail @var{selector} @}]
1990
Passes if @var{regex} matches text in the test's demangled assembler output.
1991
 
1992
@item scan-assembler-dem-not @var{regex} [@{ target/xfail @var{selector} @}]
1993
Passes if @var{regex} does not match text in the test's demangled assembler
1994
output.
1995
 
1996
@item scan-hidden @var{symbol} [@{ target/xfail @var{selector} @}]
1997
Passes if @var{symbol} is defined as a hidden symbol in the test's
1998
assembly output.
1999
 
2000
@item scan-not-hidden @var{symbol} [@{ target/xfail @var{selector} @}]
2001
Passes if @var{symbol} is not defined as a hidden symbol in the test's
2002
assembly output.
2003
@end table
2004
 
2005
@subsubsection Scan optimization dump files
2006
 
2007
These commands are available for @var{kind} of @code{tree}, @code{rtl},
2008
and @code{ipa}.
2009
 
2010
@table @code
2011
@item scan-@var{kind}-dump @var{regex} @var{suffix} [@{ target/xfail @var{selector} @}]
2012
Passes if @var{regex} matches text in the dump file with suffix @var{suffix}.
2013
 
2014
@item scan-@var{kind}-dump-not @var{regex} @var{suffix} [@{ target/xfail @var{selector} @}]
2015
Passes if @var{regex} does not match text in the dump file with suffix
2016
@var{suffix}.
2017
 
2018
@item scan-@var{kind}-dump-times @var{regex} @var{num} @var{suffix} [@{ target/xfail @var{selector} @}]
2019
Passes if @var{regex} is found exactly @var{num} times in the dump file
2020
with suffix @var{suffix}.
2021
 
2022
@item scan-@var{kind}-dump-dem @var{regex} @var{suffix} [@{ target/xfail @var{selector} @}]
2023
Passes if @var{regex} matches demangled text in the dump file with
2024
suffix @var{suffix}.
2025
 
2026
@item scan-@var{kind}-dump-dem-not @var{regex} @var{suffix} [@{ target/xfail @var{selector} @}]
2027
Passes if @var{regex} does not match demangled text in the dump file with
2028
suffix @var{suffix}.
2029
@end table
2030
 
2031
@subsubsection Verify that an output files exists or not
2032
 
2033
@table @code
2034
@item output-exists [@{ target/xfail @var{selector} @}]
2035
Passes if compiler output file exists.
2036
 
2037
@item output-exists-not [@{ target/xfail @var{selector} @}]
2038
Passes if compiler output file does not exist.
2039
@end table
2040
 
2041
@subsubsection Check for LTO tests
2042
 
2043
@table @code
2044
@item scan-symbol @var{regexp} [@{ target/xfail @var{selector} @}]
2045
Passes if the pattern is present in the final executable.
2046
@end table
2047
 
2048
@subsubsection Checks for @command{gcov} tests
2049
 
2050
@table @code
2051
@item run-gcov @var{sourcefile}
2052
Check line counts in @command{gcov} tests.
2053
 
2054
@item run-gcov [branches] [calls] @{ @var{opts} @var{sourcefile} @}
2055
Check branch and/or call counts, in addition to line counts, in
2056
@command{gcov} tests.
2057
@end table
2058
 
2059
@subsubsection Clean up generated test files
2060
 
2061
@table @code
2062
@item cleanup-coverage-files
2063
Removes coverage data files generated for this test.
2064
 
2065
@item cleanup-ipa-dump @var{suffix}
2066
Removes IPA dump files generated for this test.
2067
 
2068
@item cleanup-modules
2069
Removes Fortran module files generated for this test.
2070
 
2071
@item cleanup-profile-file
2072
Removes profiling files generated for this test.
2073
 
2074
@item cleanup-repo-files
2075
Removes files generated for this test for @option{-frepo}.
2076
 
2077
@item cleanup-rtl-dump @var{suffix}
2078
Removes RTL dump files generated for this test.
2079
 
2080
@item cleanup-saved-temps
2081
Removes files for the current test which were kept for @option{-save-temps}.
2082
 
2083
@item cleanup-tree-dump @var{suffix}
2084
Removes tree dump files matching @var{suffix} which were generated for
2085
this test.
2086
@end table
2087
 
2088
@node Ada Tests
2089
@section Ada Language Testsuites
2090
 
2091
The Ada testsuite includes executable tests from the ACATS 2.5
2092
testsuite, publicly available at
2093
@uref{http://www.adaic.org/compilers/acats/2.5}.
2094
 
2095
These tests are integrated in the GCC testsuite in the
2096
@file{ada/acats} directory, and
2097
enabled automatically when running @code{make check}, assuming
2098
the Ada language has been enabled when configuring GCC@.
2099
 
2100
You can also run the Ada testsuite independently, using
2101
@code{make check-ada}, or run a subset of the tests by specifying which
2102
chapter to run, e.g.:
2103
 
2104
@smallexample
2105
$ make check-ada CHAPTERS="c3 c9"
2106
@end smallexample
2107
 
2108
The tests are organized by directory, each directory corresponding to
2109
a chapter of the Ada Reference Manual.  So for example, @file{c9} corresponds
2110
to chapter 9, which deals with tasking features of the language.
2111
 
2112
There is also an extra chapter called @file{gcc} containing a template for
2113
creating new executable tests, although this is deprecated in favor of
2114
the @file{gnat.dg} testsuite.
2115
 
2116
The tests are run using two @command{sh} scripts: @file{run_acats} and
2117
@file{run_all.sh}.  To run the tests using a simulator or a cross
2118
target, see the small
2119
customization section at the top of @file{run_all.sh}.
2120
 
2121
These tests are run using the build tree: they can be run without doing
2122
a @code{make install}.
2123
 
2124
@node C Tests
2125
@section C Language Testsuites
2126
 
2127
GCC contains the following C language testsuites, in the
2128
@file{gcc/testsuite} directory:
2129
 
2130
@table @file
2131
@item gcc.dg
2132
This contains tests of particular features of the C compiler, using the
2133
more modern @samp{dg} harness.  Correctness tests for various compiler
2134
features should go here if possible.
2135
 
2136
Magic comments determine whether the file
2137
is preprocessed, compiled, linked or run.  In these tests, error and warning
2138
message texts are compared against expected texts or regular expressions
2139
given in comments.  These tests are run with the options @samp{-ansi -pedantic}
2140
unless other options are given in the test.  Except as noted below they
2141
are not run with multiple optimization options.
2142
@item gcc.dg/compat
2143
This subdirectory contains tests for binary compatibility using
2144
@file{lib/compat.exp}, which in turn uses the language-independent support
2145
(@pxref{compat Testing, , Support for testing binary compatibility}).
2146
@item gcc.dg/cpp
2147
This subdirectory contains tests of the preprocessor.
2148
@item gcc.dg/debug
2149
This subdirectory contains tests for debug formats.  Tests in this
2150
subdirectory are run for each debug format that the compiler supports.
2151
@item gcc.dg/format
2152
This subdirectory contains tests of the @option{-Wformat} format
2153
checking.  Tests in this directory are run with and without
2154
@option{-DWIDE}.
2155
@item gcc.dg/noncompile
2156
This subdirectory contains tests of code that should not compile and
2157
does not need any special compilation options.  They are run with
2158
multiple optimization options, since sometimes invalid code crashes
2159
the compiler with optimization.
2160
@item gcc.dg/special
2161
FIXME: describe this.
2162
 
2163
@item gcc.c-torture
2164
This contains particular code fragments which have historically broken easily.
2165
These tests are run with multiple optimization options, so tests for features
2166
which only break at some optimization levels belong here.  This also contains
2167
tests to check that certain optimizations occur.  It might be worthwhile to
2168
separate the correctness tests cleanly from the code quality tests, but
2169
it hasn't been done yet.
2170
 
2171
@item gcc.c-torture/compat
2172
FIXME: describe this.
2173
 
2174
This directory should probably not be used for new tests.
2175
@item gcc.c-torture/compile
2176
This testsuite contains test cases that should compile, but do not
2177
need to link or run.  These test cases are compiled with several
2178
different combinations of optimization options.  All warnings are
2179
disabled for these test cases, so this directory is not suitable if
2180
you wish to test for the presence or absence of compiler warnings.
2181
While special options can be set, and tests disabled on specific
2182
platforms, by the use of @file{.x} files, mostly these test cases
2183
should not contain platform dependencies.  FIXME: discuss how defines
2184
such as @code{NO_LABEL_VALUES} and @code{STACK_SIZE} are used.
2185
@item gcc.c-torture/execute
2186
This testsuite contains test cases that should compile, link and run;
2187
otherwise the same comments as for @file{gcc.c-torture/compile} apply.
2188
@item gcc.c-torture/execute/ieee
2189
This contains tests which are specific to IEEE floating point.
2190
@item gcc.c-torture/unsorted
2191
FIXME: describe this.
2192
 
2193
This directory should probably not be used for new tests.
2194
@item gcc.misc-tests
2195
This directory contains C tests that require special handling.  Some
2196
of these tests have individual expect files, and others share
2197
special-purpose expect files:
2198
 
2199
@table @file
2200
@item @code{bprob*.c}
2201
Test @option{-fbranch-probabilities} using
2202
@file{gcc.misc-tests/bprob.exp}, which
2203
in turn uses the generic, language-independent framework
2204
(@pxref{profopt Testing, , Support for testing profile-directed
2205
optimizations}).
2206
 
2207
@item @code{gcov*.c}
2208
Test @command{gcov} output using @file{gcov.exp}, which in turn uses the
2209
language-independent support (@pxref{gcov Testing, , Support for testing gcov}).
2210
 
2211
@item @code{i386-pf-*.c}
2212
Test i386-specific support for data prefetch using @file{i386-prefetch.exp}.
2213
@end table
2214
 
2215
@item gcc.test-framework
2216
@table @file
2217
@item @code{dg-*.c}
2218
Test the testsuite itself using @file{gcc.test-framework/test-framework.exp}.
2219
@end table
2220
 
2221
@end table
2222
 
2223
FIXME: merge in @file{testsuite/README.gcc} and discuss the format of
2224
test cases and magic comments more.
2225
 
2226
@node libgcj Tests
2227
@section The Java library testsuites.
2228
 
2229
Runtime tests are executed via @samp{make check} in the
2230
@file{@var{target}/libjava/testsuite} directory in the build
2231
tree.  Additional runtime tests can be checked into this testsuite.
2232
 
2233
Regression testing of the core packages in libgcj is also covered by the
2234
Mauve testsuite.  The @uref{http://sourceware.org/mauve/,,Mauve Project}
2235
develops tests for the Java Class Libraries.  These tests are run as part
2236
of libgcj testing by placing the Mauve tree within the libjava testsuite
2237
sources at @file{libjava/testsuite/libjava.mauve/mauve}, or by specifying
2238
the location of that tree when invoking @samp{make}, as in
2239
@samp{make MAUVEDIR=~/mauve check}.
2240
 
2241
To detect regressions, a mechanism in @file{mauve.exp} compares the
2242
failures for a test run against the list of expected failures in
2243
@file{libjava/testsuite/libjava.mauve/xfails} from the source hierarchy.
2244
Update this file when adding new failing tests to Mauve, or when fixing
2245
bugs in libgcj that had caused Mauve test failures.
2246
 
2247
We encourage developers to contribute test cases to Mauve.
2248
 
2249
@node LTO Testing
2250
@section Support for testing link-time optimizations
2251
 
2252
Tests for link-time optimizations usually require multiple source files
2253
that are compiled separately, perhaps with different sets of options.
2254
There are several special-purpose test directives used for these tests.
2255
 
2256
@table @code
2257
@item @{ dg-lto-do @var{do-what-keyword} @}
2258
@var{do-what-keyword} specifies how the test is compiled and whether
2259
it is executed.  It is one of:
2260
 
2261
@table @code
2262
@item assemble
2263
Compile with @option{-c} to produce a relocatable object file.
2264
@item link
2265
Compile, assemble, and link to produce an executable file.
2266
@item run
2267
Produce and run an executable file, which is expected to return
2268
an exit code of 0.
2269
@end table
2270
 
2271
The default is @code{assemble}.  That can be overridden for a set of
2272
tests by redefining @code{dg-do-what-default} within the @code{.exp}
2273
file for those tests.
2274
 
2275
Unlike @code{dg-do}, @code{dg-lto-do} does not support an optional
2276
@samp{target} or @samp{xfail} list.  Use @code{dg-skip-if},
2277
@code{dg-xfail-if}, or @code{dg-xfail-run-if}.
2278
 
2279
@item @{ dg-lto-options @{ @{ @var{options} @} [@{ @var{options} @}] @} [@{ target @var{selector} @}]@}
2280
This directive provides a list of one or more sets of compiler options
2281
to override @var{LTO_OPTIONS}.  Each test will be compiled and run with
2282
each of these sets of options.
2283
 
2284
@item @{ dg-extra-ld-options @var{options} @}
2285
This directive adds @var{options} to the linker options used.
2286
 
2287
@item @{ dg-suppress-ld-options @var{options} @}
2288
This directive removes @var{options} from the set of linker options used.
2289
@end table
2290
 
2291
@node gcov Testing
2292
@section Support for testing @command{gcov}
2293
 
2294
Language-independent support for testing @command{gcov}, and for checking
2295
that branch profiling produces expected values, is provided by the
2296
expect file @file{lib/gcov.exp}.  @command{gcov} tests also rely on procedures
2297
in @file{lib/gcc-dg.exp} to compile and run the test program.  A typical
2298
@command{gcov} test contains the following DejaGnu commands within comments:
2299
 
2300
@smallexample
2301
@{ dg-options "-fprofile-arcs -ftest-coverage" @}
2302
@{ dg-do run @{ target native @} @}
2303
@{ dg-final @{ run-gcov sourcefile @} @}
2304
@end smallexample
2305
 
2306
Checks of @command{gcov} output can include line counts, branch percentages,
2307
and call return percentages.  All of these checks are requested via
2308
commands that appear in comments in the test's source file.
2309
Commands to check line counts are processed by default.
2310
Commands to check branch percentages and call return percentages are
2311
processed if the @command{run-gcov} command has arguments @code{branches}
2312
or @code{calls}, respectively.  For example, the following specifies
2313
checking both, as well as passing @option{-b} to @command{gcov}:
2314
 
2315
@smallexample
2316
@{ dg-final @{ run-gcov branches calls @{ -b sourcefile @} @} @}
2317
@end smallexample
2318
 
2319
A line count command appears within a comment on the source line
2320
that is expected to get the specified count and has the form
2321
@code{count(@var{cnt})}.  A test should only check line counts for
2322
lines that will get the same count for any architecture.
2323
 
2324
Commands to check branch percentages (@code{branch}) and call
2325
return percentages (@code{returns}) are very similar to each other.
2326
A beginning command appears on or before the first of a range of
2327
lines that will report the percentage, and the ending command
2328
follows that range of lines.  The beginning command can include a
2329
list of percentages, all of which are expected to be found within
2330
the range.  A range is terminated by the next command of the same
2331
kind.  A command @code{branch(end)} or @code{returns(end)} marks
2332
the end of a range without starting a new one.  For example:
2333
 
2334
@smallexample
2335
if (i > 10 && j > i && j < 20)  /* @r{branch(27 50 75)} */
2336
                                /* @r{branch(end)} */
2337
  foo (i, j);
2338
@end smallexample
2339
 
2340
For a call return percentage, the value specified is the
2341
percentage of calls reported to return.  For a branch percentage,
2342
the value is either the expected percentage or 100 minus that
2343
value, since the direction of a branch can differ depending on the
2344
target or the optimization level.
2345
 
2346
Not all branches and calls need to be checked.  A test should not
2347
check for branches that might be optimized away or replaced with
2348
predicated instructions.  Don't check for calls inserted by the
2349
compiler or ones that might be inlined or optimized away.
2350
 
2351
A single test can check for combinations of line counts, branch
2352
percentages, and call return percentages.  The command to check a
2353
line count must appear on the line that will report that count, but
2354
commands to check branch percentages and call return percentages can
2355
bracket the lines that report them.
2356
 
2357
@node profopt Testing
2358
@section Support for testing profile-directed optimizations
2359
 
2360
The file @file{profopt.exp} provides language-independent support for
2361
checking correct execution of a test built with profile-directed
2362
optimization.  This testing requires that a test program be built and
2363
executed twice.  The first time it is compiled to generate profile
2364
data, and the second time it is compiled to use the data that was
2365
generated during the first execution.  The second execution is to
2366
verify that the test produces the expected results.
2367
 
2368
To check that the optimization actually generated better code, a
2369
test can be built and run a third time with normal optimizations to
2370
verify that the performance is better with the profile-directed
2371
optimizations.  @file{profopt.exp} has the beginnings of this kind
2372
of support.
2373
 
2374
@file{profopt.exp} provides generic support for profile-directed
2375
optimizations.  Each set of tests that uses it provides information
2376
about a specific optimization:
2377
 
2378
@table @code
2379
@item tool
2380
tool being tested, e.g., @command{gcc}
2381
 
2382
@item profile_option
2383
options used to generate profile data
2384
 
2385
@item feedback_option
2386
options used to optimize using that profile data
2387
 
2388
@item prof_ext
2389
suffix of profile data files
2390
 
2391
@item PROFOPT_OPTIONS
2392
list of options with which to run each test, similar to the lists for
2393
torture tests
2394
 
2395
@item @{ dg-final-generate @{ @var{local-directive} @} @}
2396
This directive is similar to @code{dg-final}, but the
2397
@var{local-directive} is run after the generation of profile data.
2398
 
2399
@item @{ dg-final-use @{ @var{local-directive} @} @}
2400
The @var{local-directive} is run after the profile data have been
2401
used.
2402
@end table
2403
 
2404
@node compat Testing
2405
@section Support for testing binary compatibility
2406
 
2407
The file @file{compat.exp} provides language-independent support for
2408
binary compatibility testing.  It supports testing interoperability of
2409
two compilers that follow the same ABI, or of multiple sets of
2410
compiler options that should not affect binary compatibility.  It is
2411
intended to be used for testsuites that complement ABI testsuites.
2412
 
2413
A test supported by this framework has three parts, each in a
2414
separate source file: a main program and two pieces that interact
2415
with each other to split up the functionality being tested.
2416
 
2417
@table @file
2418
@item @var{testname}_main.@var{suffix}
2419
Contains the main program, which calls a function in file
2420
@file{@var{testname}_x.@var{suffix}}.
2421
 
2422
@item @var{testname}_x.@var{suffix}
2423
Contains at least one call to a function in
2424
@file{@var{testname}_y.@var{suffix}}.
2425
 
2426
@item @var{testname}_y.@var{suffix}
2427
Shares data with, or gets arguments from,
2428
@file{@var{testname}_x.@var{suffix}}.
2429
@end table
2430
 
2431
Within each test, the main program and one functional piece are
2432
compiled by the GCC under test.  The other piece can be compiled by
2433
an alternate compiler.  If no alternate compiler is specified,
2434
then all three source files are all compiled by the GCC under test.
2435
You can specify pairs of sets of compiler options.  The first element
2436
of such a pair specifies options used with the GCC under test, and the
2437
second element of the pair specifies options used with the alternate
2438
compiler.  Each test is compiled with each pair of options.
2439
 
2440
@file{compat.exp} defines default pairs of compiler options.
2441
These can be overridden by defining the environment variable
2442
@env{COMPAT_OPTIONS} as:
2443
 
2444
@smallexample
2445
COMPAT_OPTIONS="[list [list @{@var{tst1}@} @{@var{alt1}@}]
2446
  @dots{}[list @{@var{tstn}@} @{@var{altn}@}]]"
2447
@end smallexample
2448
 
2449
where @var{tsti} and @var{alti} are lists of options, with @var{tsti}
2450
used by the compiler under test and @var{alti} used by the alternate
2451
compiler.  For example, with
2452
@code{[list [list @{-g -O0@} @{-O3@}] [list @{-fpic@} @{-fPIC -O2@}]]},
2453
the test is first built with @option{-g -O0} by the compiler under
2454
test and with @option{-O3} by the alternate compiler.  The test is
2455
built a second time using @option{-fpic} by the compiler under test
2456
and @option{-fPIC -O2} by the alternate compiler.
2457
 
2458
An alternate compiler is specified by defining an environment
2459
variable to be the full pathname of an installed compiler; for C
2460
define @env{ALT_CC_UNDER_TEST}, and for C++ define
2461
@env{ALT_CXX_UNDER_TEST}.  These will be written to the
2462
@file{site.exp} file used by DejaGnu.  The default is to build each
2463
test with the compiler under test using the first of each pair of
2464
compiler options from @env{COMPAT_OPTIONS}.  When
2465
@env{ALT_CC_UNDER_TEST} or
2466
@env{ALT_CXX_UNDER_TEST} is @code{same}, each test is built using
2467
the compiler under test but with combinations of the options from
2468
@env{COMPAT_OPTIONS}.
2469
 
2470
To run only the C++ compatibility suite using the compiler under test
2471
and another version of GCC using specific compiler options, do the
2472
following from @file{@var{objdir}/gcc}:
2473
 
2474
@smallexample
2475
rm site.exp
2476
make -k \
2477
  ALT_CXX_UNDER_TEST=$@{alt_prefix@}/bin/g++ \
2478
  COMPAT_OPTIONS="@var{lists as shown above}" \
2479
  check-c++ \
2480
  RUNTESTFLAGS="compat.exp"
2481
@end smallexample
2482
 
2483
A test that fails when the source files are compiled with different
2484
compilers, but passes when the files are compiled with the same
2485
compiler, demonstrates incompatibility of the generated code or
2486
runtime support.  A test that fails for the alternate compiler but
2487
passes for the compiler under test probably tests for a bug that was
2488
fixed in the compiler under test but is present in the alternate
2489
compiler.
2490
 
2491
The binary compatibility tests support a small number of test framework
2492
commands that appear within comments in a test file.
2493
 
2494
@table @code
2495
@item dg-require-*
2496
These commands can be used in @file{@var{testname}_main.@var{suffix}}
2497
to skip the test if specific support is not available on the target.
2498
 
2499
@item dg-options
2500
The specified options are used for compiling this particular source
2501
file, appended to the options from @env{COMPAT_OPTIONS}.  When this
2502
command appears in @file{@var{testname}_main.@var{suffix}} the options
2503
are also used to link the test program.
2504
 
2505
@item dg-xfail-if
2506
This command can be used in a secondary source file to specify that
2507
compilation is expected to fail for particular options on particular
2508
targets.
2509
@end table
2510
 
2511
@node Torture Tests
2512
@section Support for torture testing using multiple options
2513
 
2514
Throughout the compiler testsuite there are several directories whose
2515
tests are run multiple times, each with a different set of options.
2516
These are known as torture tests.
2517
@file{lib/torture-options.exp} defines procedures to
2518
set up these lists:
2519
 
2520
@table @code
2521
@item torture-init
2522
Initialize use of torture lists.
2523
@item set-torture-options
2524
Set lists of torture options to use for tests with and without loops.
2525
Optionally combine a set of torture options with a set of other
2526
options, as is done with Objective-C runtime options.
2527
@item torture-finish
2528
Finalize use of torture lists.
2529
@end table
2530
 
2531
The @file{.exp} file for a set of tests that use torture options must
2532
include calls to these three procedures if:
2533
 
2534
@itemize @bullet
2535
@item It calls @code{gcc-dg-runtest} and overrides @var{DG_TORTURE_OPTIONS}.
2536
 
2537
@item It calls @var{$@{tool@}}@code{-torture} or
2538
@var{$@{tool@}}@code{-torture-execute}, where @var{tool} is @code{c},
2539
@code{fortran}, or @code{objc}.
2540
 
2541
@item It calls @code{dg-pch}.
2542
@end itemize
2543
 
2544
It is not necessary for a @file{.exp} file that calls @code{gcc-dg-runtest}
2545
to call the torture procedures if the tests should use the list in
2546
@var{DG_TORTURE_OPTIONS} defined in @file{gcc-dg.exp}.
2547
 
2548
Most uses of torture options can override the default lists by defining
2549
@var{TORTURE_OPTIONS} or add to the default list by defining
2550
@var{ADDITIONAL_TORTURE_OPTIONS}.  Define these in a @file{.dejagnurc}
2551
file or add them to the @file{site.exp} file; for example
2552
 
2553
@smallexample
2554
set ADDITIONAL_TORTURE_OPTIONS  [list \
2555
  @{ -O2 -ftree-loop-linear @} \
2556
  @{ -O2 -fpeel-loops @} ]
2557
@end smallexample

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.