1\input texinfo @c -*-texinfo-*-
2@setfilename gdc.info
3@settitle The GNU D Compiler
4
5@c Merge the standard indexes into a single one.
6@syncodeindex fn cp
7@syncodeindex vr cp
8@syncodeindex ky cp
9@syncodeindex pg cp
10@syncodeindex tp cp
11
12@include gcc-common.texi
13
14@c Copyright years for this manual.
15@set copyrights-d 2006-2021
16
17@copying
18@c man begin COPYRIGHT
19Copyright @copyright{} @value{copyrights-d} Free Software Foundation, Inc.
20
21Permission is granted to copy, distribute and/or modify this document
22under the terms of the GNU Free Documentation License, Version 1.3 or
23any later version published by the Free Software Foundation; with no
24Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.
25A copy of the license is included in the
26@c man end
27section entitled ``GNU Free Documentation License''.
28@ignore
29@c man begin COPYRIGHT
30man page gfdl(7).
31@c man end
32@end ignore
33@end copying
34
35@ifinfo
36@format
37@dircategory Software development
38@direntry
39* gdc: (gdc).               A GCC-based compiler for the D language
40@end direntry
41@end format
42
43@insertcopying
44@end ifinfo
45
46@titlepage
47@title The GNU D Compiler
48@versionsubtitle
49@author David Friedman, Iain Buclaw
50
51@page
52@vskip 0pt plus 1filll
53Published by the Free Software Foundation @*
5451 Franklin Street, Fifth Floor@*
55Boston, MA 02110-1301, USA@*
56@sp 1
57@insertcopying
58@end titlepage
59@contents
60@page
61
62@node Top
63@top Introduction
64
65This manual describes how to use @command{gdc}, the GNU compiler for
66the D programming language.  This manual is specifically about
67@command{gdc}.  For more information about the D programming
68language in general, including language specifications and standard
69package documentation, see @uref{http://dlang.org/}.
70
71@menu
72* Copying::                     The GNU General Public License.
73* GNU Free Documentation License::
74                                How you can share and copy this manual.
75* Invoking gdc::                How to run gdc.
76* Index::                       Index.
77@end menu
78
79
80@include gpl_v3.texi
81
82@include fdl.texi
83
84
85@node Invoking gdc
86@chapter Invoking gdc
87
88@c man title gdc A GCC-based compiler for the D language
89
90@ignore
91@c man begin SYNOPSIS gdc
92gdc [@option{-c}|@option{-S}] [@option{-g}] [@option{-pg}]
93    [@option{-O}@var{level}] [@option{-W}@var{warn}@dots{}]
94    [@option{-I}@var{dir}@dots{}] [@option{-L}@var{dir}@dots{}]
95    [@option{-f}@var{option}@dots{}] [@option{-m}@var{machine-option}@dots{}]
96    [@option{-o} @var{outfile}] [@@@var{file}] @var{infile}@dots{}
97
98Only the most useful options are listed here; see below for the
99remainder.
100@c man end
101@c man begin SEEALSO
102gpl(7), gfdl(7), fsf-funding(7), gcc(1)
103and the Info entries for @file{gdc} and @file{gcc}.
104@c man end
105@end ignore
106
107@c man begin DESCRIPTION gdc
108
109The @command{gdc} command is the GNU compiler for the D language and
110supports many of the same options as @command{gcc}.  @xref{Option Summary, ,
111Option Summary, gcc, Using the GNU Compiler Collection (GCC)}.
112This manual only documents the options specific to @command{gdc}.
113
114@c man end
115
116@menu
117* Input and Output files::  Controlling the kind of output:
118                            an executable, object files, assembler files,
119* Runtime Options::         Options controlling runtime behavior
120* Directory Options::       Where to find module files
121* Code Generation::         Options controlling the output of gdc
122* Warnings::                Options controlling warnings specific to gdc
123* Linking::                 Options influencing the linking step
124* Developer Options::       Options useful for developers of gdc
125@end menu
126
127@c man begin OPTIONS
128
129@node Input and Output files
130@section Input and Output files
131@cindex suffixes for D source
132@cindex D source file suffixes
133
134For any given input file, the file name suffix determines what kind of
135compilation is done.  The following kinds of input file names are supported:
136
137@table @gcctabopt
138@item @var{file}.d
139D source files.
140@item @var{file}.dd
141Ddoc source files.
142@item @var{file}.di
143D interface files.
144@end table
145
146You can specify more than one input file on the @command{gdc} command line,
147each being compiled separately in the compilation process.  If you specify a
148@code{-o @var{file}} option, all the input files are compiled together,
149producing a single output file, named @var{file}.  This is allowed even
150when using @code{-S} or @code{-c}.
151
152@cindex D interface files.
153A D interface file contains only what an import of the module needs,
154rather than the whole implementation of that module.  They can be created
155by @command{gdc} from a D source file by using the @code{-H} option.
156When the compiler resolves an import declaration, it searches for matching
157@file{.di} files first, then for @file{.d}.
158
159@cindex Ddoc source files.
160A Ddoc source file contains code in the D macro processor language.  It is
161primarily designed for use in producing user documentation from embedded
162comments, with a slight affinity towards HTML generation.  If a @file{.d}
163source file starts with the string @code{Ddoc} then it is treated as general
164purpose documentation, not as a D source file.
165
166@node Runtime Options
167@section Runtime Options
168@cindex options, runtime
169
170These options affect the runtime behavior of programs compiled with
171@command{gdc}.
172
173@table @gcctabopt
174
175@item -fall-instantiations
176@cindex @option{-fall-instantiations}
177@cindex @option{-fno-all-instantiations}
178Generate code for all template instantiations.  The default template emission
179strategy is to not generate code for declarations that were either
180instantiated speculatively, such as from @code{__traits(compiles, ...)}, or
181that come from an imported module not being compiled.
182
183@item -fno-assert
184@cindex @option{-fassert}
185@cindex @option{-fno-assert}
186Turn off code generation for @code{assert} contracts.
187
188@item -fno-bounds-check
189@cindex @option{-fbounds-check}
190@cindex @option{-fno-bounds-check}
191Turns off array bounds checking for all functions, which can improve
192performance for code that uses arrays extensively.  Note that this
193can result in unpredictable behavior if the code in question actually
194does violate array bounds constraints.  It is safe to use this option
195if you are sure that your code never throws a @code{RangeError}.
196
197@item -fbounds-check=@var{value}
198@cindex @option{-fbounds-check=}
199An alternative to @option{-fbounds-check} that allows more control
200as to where bounds checking is turned on or off.  The following values
201are supported:
202
203@table @samp
204@item on
205Turns on array bounds checking for all functions.
206@item safeonly
207Turns on array bounds checking only for @code{@@safe} functions.
208@item off
209Turns off array bounds checking completely.
210@end table
211
212@item -fno-builtin
213@cindex @option{-fbuiltin}
214@cindex @option{-fno-builtin}
215Don't recognize built-in functions unless they begin with the prefix
216@samp{__builtin_}.  By default, the compiler will recognize when a
217function in the @code{core.stdc} package is a built-in function.
218
219@item -fcheckaction=@var{value}
220@cindex @option{-fcheckaction}
221This option controls what code is generated on an assertion, bounds check, or
222final switch failure.  The following values are supported:
223
224@table @samp
225@item context
226Throw an @code{AssertError} with extra context information.
227@item halt
228Halt the program execution.
229@item throw
230Throw an @code{AssertError} (the default).
231@end table
232
233@item -fdebug
234@item -fdebug=@var{value}
235@cindex @option{-fdebug}
236@cindex @option{-fno-debug}
237Turn on compilation of conditional @code{debug} code into the program.
238The @option{-fdebug} option itself sets the debug level to @code{1},
239while @option{-fdebug=} enables @code{debug} code that are identified
240by any of the following values:
241
242@table @samp
243@item level
244Sets the debug level to @var{level}, any @code{debug} code <= @var{level}
245is compiled into the program.
246@item ident
247Turns on compilation of any @code{debug} code identified by @var{ident}.
248@end table
249
250@item -fno-druntime
251@cindex @option{-fdruntime}
252@cindex @option{-fno-druntime}
253Implements @uref{https://dlang.org/spec/betterc.html}.  Assumes that
254compilation targets an environment without a D runtime library.
255
256This is equivalent to compiling with the following options:
257
258@example
259gdc -nophoboslib -fno-exceptions -fno-moduleinfo -fno-rtti
260@end example
261
262@item -fextern-std=@var{standard}
263@cindex @option{-fextern-std}
264Sets the C++ name mangling compatibility to the version identified by
265@var{standard}.  The following values are supported:
266
267@table @samp
268@item c++98
269@item c++03
270Sets @code{__traits(getTargetInfo "cppStd")} to @code{199711}.
271@item c++11
272Sets @code{__traits(getTargetInfo "cppStd")} to @code{201103}.
273@item c++14
274Sets @code{__traits(getTargetInfo "cppStd")} to @code{201402}.
275@item c++17
276Sets @code{__traits(getTargetInfo "cppStd")} to @code{201703}.
277@item c++20
278Sets @code{__traits(getTargetInfo "cppStd")} to @code{202002}.
279@end table
280
281@item -fno-invariants
282@cindex @option{-finvariants}
283@cindex @option{-fno-invariants}
284Turns off code generation for class @code{invariant} contracts.
285
286@item -fno-moduleinfo
287@cindex @option{-fmoduleinfo}
288@cindex @option{-fno-moduleinfo}
289Turns off generation of the @code{ModuleInfo} and related functions
290that would become unreferenced without it, which may allow linking
291to programs not written in D.  Functions that are not be generated
292include module constructors and destructors (@code{static this} and
293@code{static ~this}), @code{unittest} code, and @code{DSO} registry
294functions for dynamically linked code.
295
296@item -fonly=@var{filename}
297@cindex @option{-fonly}
298Tells the compiler to parse and run semantic analysis on all modules
299on the command line, but only generate code for the module specified
300by @var{filename}.
301
302@item -fno-postconditions
303@cindex @option{-fpostconditions}
304@cindex @option{-fno-postconditions}
305Turns off code generation for postcondition @code{out} contracts.
306
307@item -fno-preconditions
308@cindex @option{-fpreconditions}
309@cindex @option{-fno-preconditions}
310Turns off code generation for precondition @code{in} contracts.
311
312@item -fpreview=@var{id}
313@cindex @option{-fpreview}
314Turns on an upcoming D language change identified by @var{id}.  The following
315values are supported:
316
317@table @samp
318@item all
319Turns on all upcoming D language features.
320@item dip1000
321Implements @uref{http://wiki.dlang.org/DIP1000} (Scoped pointers).
322@item dip1008
323Implements @uref{http://wiki.dlang.org/DIP1008} (Allow exceptions in
324@code{@@nogc} code).
325@item dip1021
326Implements @uref{http://wiki.dlang.org/DIP1021} (Mutable function arguments).
327@item dip25
328Implements @uref{http://wiki.dlang.org/DIP25} (Sealed references).
329@item dtorfields
330Turns on generation for destructing fields of partially constructed objects.
331@item fieldwise
332Turns on generation of struct equality to use field-wise comparisons.
333@item fixaliasthis
334Implements new lookup rules that check the current scope for @code{alias this}
335before searching in upper scopes.
336@item in
337Implements @code{in} parameters to mean @code{scope const [ref]} and accepts
338rvalues.
339@item inclusiveincontracts
340Implements @code{in} contracts of overridden methods to be a superset of parent
341contract.
342@item intpromote
343Implements C-style integral promotion for unary @code{+}, @code{-} and @code{~}
344expressions.
345@item nosharedaccess
346Turns off and disallows all access to shared memory objects.
347@item rvaluerefparam
348Implements rvalue arguments to @code{ref} parameters.
349@item shortenedmethods
350Implements use of @code{=>} for methods and top-level functions in addition to
351lambdas.
352@end table
353
354@item -frelease
355@cindex @option{-frelease}
356@cindex @option{-fno-release}
357Turns on compiling in release mode, which means not emitting runtime
358checks for contracts and asserts.  Array bounds checking is not done
359for @code{@@system} and @code{@@trusted} functions, and assertion
360failures are undefined behavior.
361
362This is equivalent to compiling with the following options:
363
364@example
365gdc -fno-assert -fbounds-check=safe -fno-invariants \
366    -fno-postconditions -fno-preconditions -fno-switch-errors
367@end example
368
369@item -frevert=
370@cindex @option{-frevert}
371Turns off a D language feature identified by @var{id}.  The following values
372are supported:
373
374@table @samp
375@item all
376Turns off all revertable D language features.
377@item dip25
378Reverts @uref{http://wiki.dlang.org/DIP25} (Sealed references).
379@item dtorfields
380Turns off generation for destructing fields of partially constructed objects.
381@item markdown
382Turns off Markdown replacements in Ddoc comments.
383@end table
384
385@item -fno-rtti
386@cindex @option{-frtti}
387@cindex @option{-fno-rtti}
388Turns off generation of run-time type information for all user defined types.
389Any code that uses features of the language that require access to this
390information will result in an error.
391
392@item -fno-switch-errors
393@cindex @option{-fswitch-errors}
394@cindex @option{-fno-switch-errors}
395This option controls what code is generated when no case is matched
396in a @code{final switch} statement.  The default run time behavior
397is to throw a @code{SwitchError}.  Turning off @option{-fswitch-errors}
398means that instead the execution of the program is immediately halted.
399
400@item -funittest
401@cindex @option{-funittest}
402@cindex @option{-fno-unittest}
403Turns on compilation of @code{unittest} code, and turns on the
404@code{version(unittest)} identifier.  This implies @option{-fassert}.
405
406@item -fversion=@var{value}
407@cindex @option{-fversion}
408Turns on compilation of conditional @code{version} code into the program
409identified by any of the following values:
410
411@table @samp
412@item level
413Sets the version level to @var{level}, any @code{version} code >= @var{level}
414is compiled into the program.
415@item ident
416Turns on compilation of @code{version} code identified by @var{ident}.
417@end table
418
419@item -fno-weak-templates
420@cindex @option{-fweak-templates}
421@cindex @option{-fno-weak-templates}
422Turns off emission of declarations that can be defined in multiple objects as
423weak symbols.  The default is to emit all public symbols as weak, unless the
424target lacks support for weak symbols.  Disabling this option means that common
425symbols are instead put in COMDAT or become private.
426
427@end table
428
429@node Directory Options
430@section Options for Directory Search
431@cindex directory options
432@cindex options, directory search
433@cindex search path
434
435These options specify directories to search for files, libraries, and
436other parts of the compiler:
437
438@table @gcctabopt
439
440@item -I@var{dir}
441@cindex @option{-I}
442Specify a directory to use when searching for imported modules at
443compile time.  Multiple @option{-I} options can be used, and the
444paths are searched in the same order.
445
446@item -J@var{dir}
447@cindex @option{-J}
448Specify a directory to use when searching for files in string imports
449at compile time.  This switch is required in order to use
450@code{import(file)} expressions.  Multiple @option{-J} options can be
451used, and the paths are searched in the same order.
452
453@item -L@var{dir}
454@cindex @option{-L}
455When linking, specify a library search directory, as with @command{gcc}.
456
457@item -B@var{dir}
458@cindex @option{-B}
459This option specifies where to find the executables, libraries,
460source files, and data files of the compiler itself, as with @command{gcc}.
461
462@item -fmodule-file=@var{module}=@var{spec}
463@cindex @option{-fmodule-file}
464This option manipulates file paths of imported modules, such that if an
465imported module matches all or the leftmost part of @var{module}, the file
466path in @var{spec} is used as the location to search for D sources.
467This is used when the source file path and names are not the same as the
468package and module hierarchy.  Consider the following examples:
469
470@example
471gdc test.d -fmodule-file=A.B=foo.d -fmodule-file=C=bar
472@end example
473
474This will tell the compiler to search in all import paths for the source
475file @var{foo.d} when importing @var{A.B}, and the directory @var{bar/}
476when importing @var{C}, as annotated in the following D code:
477
478@example
479module test;
480import A.B;     // Matches A.B, searches for foo.d
481import C.D.E;   // Matches C, searches for bar/D/E.d
482import A.B.C;   // No match, searches for A/B/C.d
483@end example
484
485@item -imultilib @var{dir}
486@cindex @option{-imultilib}
487Use @var{dir} as a subdirectory of the gcc directory containing
488target-specific D sources and interfaces.
489
490@item -iprefix @var{prefix}
491@cindex @option{-iprefix}
492Specify @var{prefix} as the prefix for the gcc directory containing
493target-specific D sources and interfaces.  If the @var{prefix} represents
494a directory, you should include the final @code{'/'}.
495
496@item -nostdinc
497@cindex @option{-nostdinc}
498Do not search the standard system directories for D source and interface
499files.  Only the directories that have been specified with @option{-I} options
500(and the directory of the current file, if appropriate) are searched.
501
502@end table
503
504@node Code Generation
505@section Code Generation
506@cindex options, code generation
507
508In addition to the many @command{gcc} options controlling code generation,
509@command{gdc} has several options specific to itself.
510
511@table @gcctabopt
512
513@item -H
514@cindex @option{-H}
515Generates D interface files for all modules being compiled.  The compiler
516determines the output file based on the name of the input file, removes
517any directory components and suffix, and applies the @file{.di} suffix.
518
519@item -Hd @var{dir}
520@cindex @option{-Hd}
521Same as @option{-H}, but writes interface files to directory @var{dir}.
522This option can be used with @option{-Hf @var{file}} to independently set the
523output file and directory path.
524
525@item -Hf @var{file}
526@cindex @option{-Hf}
527Same as @option{-H} but writes interface files to @var{file}.  This option can
528be used with @option{-Hd @var{dir}} to independently set the output file and
529directory path.
530
531@item -M
532@cindex @option{-M}
533Output the module dependencies of all source files being compiled in a
534format suitable for @command{make}.  The compiler outputs one
535@command{make} rule containing the object file name for that source file,
536a colon, and the names of all imported files.
537
538@item -MM
539@cindex @option{-MM}
540Like @option{-M} but does not mention imported modules from the D standard
541library package directories.
542
543@item -MF @var{file}
544@cindex @option{-MF}
545When used with @option{-M} or @option{-MM}, specifies a @var{file} to write
546the dependencies to.  When used with the driver options @option{-MD} or
547@option{-MMD}, @option{-MF} overrides the default dependency output file.
548
549@item -MG
550@cindex @option{-MG}
551This option is for compatibility with @command{gcc}, and is ignored by the
552compiler.
553
554@item -MP
555@cindex @option{-MP}
556Outputs a phony target for each dependency other than the modules being
557compiled, causing each to depend on nothing.
558
559@item -MT @var{target}
560@cindex @option{-MT}
561Change the @var{target} of the rule emitted by dependency generation
562to be exactly the string you specify.  If you want multiple targets,
563you can specify them as a single argument to @option{-MT}, or use
564multiple @option{-MT} options.
565
566@item -MQ @var{target}
567@cindex @option{-MQ}
568Same as @option{-MT}, but it quotes any characters which are special to
569@command{make}.
570
571@item -MD
572@cindex @option{-MD}
573This option is equivalent to @option{-M -MF @var{file}}.  The driver
574determines @var{file} by removing any directory components and suffix
575from the input file, and then adding a @file{.deps} suffix.
576
577@item -MMD
578@cindex @option{-MMD}
579Like @option{-MD} but does not mention imported modules from the D standard
580library package directories.
581
582@item -X
583@cindex @option{-X}
584Output information describing the contents of all source files being
585compiled in JSON format to a file.  The driver determines @var{file} by
586removing any directory components and suffix from the input file, and then
587adding a @file{.json} suffix.
588
589@item -Xf @var{file}
590@cindex @option{-Xf}
591Same as @option{-X}, but writes all JSON contents to the specified
592@var{file}.
593
594@item -fdoc
595@cindex @option{-fdoc}
596Generates @code{Ddoc} documentation and writes it to a file.  The compiler
597determines @var{file} by removing any directory components and suffix
598from the input file, and then adding a @file{.html} suffix.
599
600@item -fdoc-dir=@var{dir}
601@cindex @option{-fdoc-dir}
602Same as @option{-fdoc}, but writes documentation to directory @var{dir}.
603This option can be used with @option{-fdoc-file=@var{file}} to
604independently set the output file and directory path.
605
606@item -fdoc-file=@var{file}
607@cindex @option{-fdoc-file}
608Same as @option{-fdoc}, but writes documentation to @var{file}.  This
609option can be used with @option{-fdoc-dir=@var{dir}} to independently
610set the output file and directory path.
611
612@item -fdoc-inc=@var{file}
613@cindex @option{-fdoc-inc}
614Specify @var{file} as a @var{Ddoc} macro file to be read.  Multiple
615@option{-fdoc-inc} options can be used, and files are read and processed
616in the same order.
617
618@item -fdump-c++-spec=@var{file}
619For D source files, generate corresponding C++ declarations in @var{file}.
620
621@item -fdump-c++-spec-verbose
622In conjunction with @option{-fdump-c++-spec=} above, add comments for ignored
623declarations in the generated C++ header.
624
625@item -fsave-mixins=@var{file}
626@cindex @option{-fsave-mixins}
627Generates code expanded from D @code{mixin} statements and writes the
628processed sources to @var{file}.  This is useful to debug errors in compilation
629and provides source for debuggers to show when requested.
630
631@end table
632
633@node Warnings
634@section Warnings
635@cindex options to control warnings
636@cindex warning messages
637@cindex messages, warning
638@cindex suppressing warnings
639
640Warnings are diagnostic messages that report constructions that
641are not inherently erroneous but that are risky or suggest there
642is likely to be a bug in the program.  Unless @option{-Werror} is
643specified, they do not prevent compilation of the program.
644
645@table @gcctabopt
646
647@item -Wall
648@cindex @option{-Wall}
649@cindex @option{-Wno-all}
650Turns on all warnings messages.  Warnings are not a defined part of
651the D language, and all constructs for which this may generate a
652warning message are valid code.
653
654@item -Walloca
655@cindex @option{-Walloca}
656This option warns on all uses of "alloca" in the source.
657
658@item -Walloca-larger-than=@var{n}
659@cindex @option{-Walloca-larger-than}
660@cindex @option{-Wno-alloca-larger-than}
661Warn on unbounded uses of alloca, and on bounded uses of alloca
662whose bound can be larger than @var{n} bytes.
663@option{-Wno-alloca-larger-than} disables
664@option{-Walloca-larger-than} warning and is equivalent to
665@option{-Walloca-larger-than=@var{SIZE_MAX}} or larger.
666
667@item -Wcast-result
668@cindex @option{-Wcast-result}
669@cindex @option{-Wno-cast-result}
670Warn about casts that will produce a null or zero result.  Currently
671this is only done for casting between an imaginary and non-imaginary
672data type, or casting between a D and C++ class.
673
674@item -Wno-deprecated
675@cindex @option{-Wdeprecated}
676@cindex @option{-Wno-deprecated}
677Do not warn about usage of deprecated features and symbols with
678@code{deprecated} attributes.
679
680@item -Werror
681@cindex @option{-Werror}
682@cindex @option{-Wno-error}
683Turns all warnings into errors.
684
685@item -Wspeculative
686@cindex @option{-Wspeculative}
687@cindex @option{-Wno-speculative}
688List all error messages from speculative compiles, such as
689@code{__traits(compiles, ...)}.  This option does not report
690messages as warnings, and these messages therefore never become
691errors when the @option{-Werror} option is also used.
692
693@item -Wtemplates
694@cindex @option{-Wtemplates}
695@cindex @option{-Wno-templates}
696Warn when a template instantiation is encountered.  Some coding
697rules disallow templates, and this may be used to enforce that rule.
698
699@item -Wunknown-pragmas
700@cindex @option{-Wunknown-pragmas}
701@cindex @option{-Wno-unknown-pragmas}
702Warn when a @code{pragma()} is encountered that is not understood by
703@command{gdc}.  This differs from @option{-fignore-unknown-pragmas}
704where a pragma that is part of the D language, but not implemented by
705the compiler, won't get reported.
706
707@item -Wno-varargs
708@cindex Wvarargs
709@cindex Wno-varargs
710Do not warn upon questionable usage of the macros used to handle variable
711arguments like @code{va_start}.
712
713@item -fignore-unknown-pragmas
714@cindex @option{-fignore-unknown-pragmas}
715@cindex @option{-fno-ignore-unknown-pragmas}
716Turns off errors for unsupported pragmas.
717
718@item -fmax-errors=@var{n}
719@cindex @option{-fmax-errors}
720Limits the maximum number of error messages to @var{n}, at which point
721@command{gdc} bails out rather than attempting to continue processing the
722source code.  If @var{n} is 0 (the default), there is no limit on the
723number of error messages produced.
724
725@item -fsyntax-only
726@cindex @option{-fsyntax-only}
727@cindex @option{-fno-syntax-only}
728Check the code for syntax errors, but do not actually compile it.  This
729can be used in conjunction with @option{-fdoc} or @option{-H} to generate
730files for each module present on the command-line, but no other output
731file.
732
733@item -ftransition=@var{id}
734@cindex @option{-ftransition}
735Report additional information about D language changes identified by
736@var{id}.  The following values are supported:
737
738@table @samp
739@item all
740List information on all D language transitions.
741@item complex
742List all usages of complex or imaginary types.
743@item field
744List all non-mutable fields which occupy an object instance.
745@item nogc
746List all hidden GC allocations.
747@item templates
748List statistics on template instantiations.
749@item tls
750List all variables going into thread local storage.
751@item vmarkdown
752List instances of Markdown replacements in Ddoc.
753@end table
754
755@end table
756
757@node Linking
758@section Options for Linking
759@cindex options, linking
760@cindex linking, static
761
762These options come into play when the compiler links object files into an
763executable output file.  They are meaningless if the compiler is not doing
764a link step.
765
766@table @gcctabopt
767
768@item -defaultlib=@var{libname}
769@cindex @option{-defaultlib=}
770Specify the library to use instead of libphobos when linking.  Options
771specifying the linkage of libphobos, such as @option{-static-libphobos}
772or @option{-shared-libphobos}, are ignored.
773
774@item -debuglib=@var{libname}
775@cindex @option{-debuglib=}
776Specify the debug library to use instead of libphobos when linking.
777This option has no effect unless the @option{-g} option was also given
778on the command line.  Options specifying the linkage of libphobos, such
779as @option{-static-libphobos} or @option{-shared-libphobos}, are ignored.
780
781@item -nophoboslib
782@cindex @option{-nophoboslib}
783Do not use the Phobos or D runtime library when linking.  Options specifying
784the linkage of libphobos, such as @option{-static-libphobos} or
785@option{-shared-libphobos}, are ignored.  The standard system libraries are
786used normally, unless @option{-nostdlib} or @option{-nodefaultlibs} is used.
787
788@item -shared-libphobos
789@cindex @option{-shared-libphobos}
790On systems that provide @file{libgphobos} and @file{libgdruntime} as a
791shared and a static library, this option forces the use of the shared
792version.  If no shared version was built when the compiler was configured,
793this option has no effect.
794
795@item -static-libphobos
796@cindex @option{-static-libphobos}
797On systems that provide @file{libgphobos} and @file{libgdruntime} as a
798shared and a static library, this option forces the use of the static
799version.  If no static version was built when the compiler was configured,
800this option has no effect.
801
802@end table
803
804@node Developer Options
805@section Developer Options
806@cindex developer options
807@cindex debug dump options
808@cindex dump options
809
810This section describes command-line options that are primarily of
811interest to developers or language tooling.
812
813@table @gcctabopt
814
815@item -fdump-d-original
816@cindex @option{-fdump-d-original}
817Output the internal front-end AST after the @code{semantic3} stage.
818This option is only useful for debugging the GNU D compiler itself.
819
820@item -v
821@cindex @option{-v}
822Dump information about the compiler language processing stages as the source
823program is being compiled.  This includes listing all modules that are
824processed through the @code{parse}, @code{semantic}, @code{semantic2}, and
825@code{semantic3} stages; all @code{import} modules and their file paths;
826and all @code{function} bodies that are being compiled.
827
828@end table
829
830@c man end
831
832@node Index
833@unnumbered Index
834
835@printindex cp
836
837@bye
838