\input texinfo @c -*-texinfo-*-
@setfilename gdc.info
@settitle The GNU D Compiler

@c Merge the standard indexes into a single one.
@syncodeindex fn cp
@syncodeindex vr cp
@syncodeindex ky cp
@syncodeindex pg cp
@syncodeindex tp cp

@include gcc-common.texi

@c Copyright years for this manual.
@set copyrights-d 2006-2022

@copying
@c man begin COPYRIGHT
Copyright @copyright{} @value{copyrights-d} Free Software Foundation, Inc.

Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.3 or
any later version published by the Free Software Foundation; with no
Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.
A copy of the license is included in the
@c man end
section entitled ``GNU Free Documentation License''.
@ignore
@c man begin COPYRIGHT
man page gfdl(7).
@c man end
@end ignore
@end copying

@ifinfo
@format
@dircategory Software development
@direntry
* gdc: (gdc).               A GCC-based compiler for the D language
@end direntry
@end format

@insertcopying
@end ifinfo

@titlepage
@title The GNU D Compiler
@versionsubtitle
@author David Friedman, Iain Buclaw

@page
@vskip 0pt plus 1filll
Published by the Free Software Foundation @*
51 Franklin Street, Fifth Floor@*
Boston, MA 02110-1301, USA@*
@sp 1
@insertcopying
@end titlepage
@contents
@page

@node Top
@top Introduction

This manual describes how to use @command{gdc}, the GNU compiler for
the D programming language.  This manual is specifically about
@command{gdc}.  For more information about the D programming
language in general, including language specifications and standard
package documentation, see @uref{https://dlang.org/}.

@menu
* Copying::                     The GNU General Public License.
* GNU Free Documentation License::
                                How you can share and copy this manual.
* Invoking gdc::                How to run gdc.
* Index::                       Index.
@end menu


@include gpl_v3.texi

@include fdl.texi


@node Invoking gdc
@chapter Invoking gdc

@c man title gdc A GCC-based compiler for the D language

@ignore
@c man begin SYNOPSIS gdc
gdc [@option{-c}|@option{-S}] [@option{-g}] [@option{-pg}]
    [@option{-O}@var{level}] [@option{-W}@var{warn}@dots{}]
    [@option{-I}@var{dir}@dots{}] [@option{-L}@var{dir}@dots{}]
    [@option{-f}@var{option}@dots{}] [@option{-m}@var{machine-option}@dots{}]
    [@option{-o} @var{outfile}] [@@@var{file}] @var{infile}@dots{}

Only the most useful options are listed here; see below for the
remainder.
@c man end
@c man begin SEEALSO
gpl(7), gfdl(7), fsf-funding(7), gcc(1)
and the Info entries for @file{gdc} and @file{gcc}.
@c man end
@end ignore

@c man begin DESCRIPTION gdc

The @command{gdc} command is the GNU compiler for the D language and
supports many of the same options as @command{gcc}.  @xref{Option Summary, ,
Option Summary, gcc, Using the GNU Compiler Collection (GCC)}.
This manual only documents the options specific to @command{gdc}.

@c man end

@menu
* Input and Output files::  Controlling the kind of output:
                            an executable, object files, assembler files,
* Runtime Options::         Options controlling runtime behavior
* Directory Options::       Where to find module files
* Code Generation::         Options controlling the output of gdc
* Warnings::                Options controlling warnings specific to gdc
* Linking::                 Options influencing the linking step
* Developer Options::       Options useful for developers of gdc
@end menu

@c man begin OPTIONS

@node Input and Output files
@section Input and Output files
@cindex suffixes for D source
@cindex D source file suffixes

For any given input file, the file name suffix determines what kind of
compilation is done.  The following kinds of input file names are supported:

@table @gcctabopt
@item @var{file}.d
D source files.
@item @var{file}.dd
Ddoc source files.
@item @var{file}.di
D interface files.
@end table

You can specify more than one input file on the @command{gdc} command line,
each being compiled separately in the compilation process.  If you specify a
@code{-o @var{file}} option, all the input files are compiled together,
producing a single output file, named @var{file}.  This is allowed even
when using @code{-S} or @code{-c}.

@cindex D interface files.
A D interface file contains only what an import of the module needs,
rather than the whole implementation of that module.  They can be created
by @command{gdc} from a D source file by using the @code{-H} option.
When the compiler resolves an import declaration, it searches for matching
@file{.di} files first, then for @file{.d}.

@cindex Ddoc source files.
A Ddoc source file contains code in the D macro processor language.  It is
primarily designed for use in producing user documentation from embedded
comments, with a slight affinity towards HTML generation.  If a @file{.d}
source file starts with the string @code{Ddoc} then it is treated as general
purpose documentation, not as a D source file.

@node Runtime Options
@section Runtime Options
@cindex options, runtime

These options affect the runtime behavior of programs compiled with
@command{gdc}.

@table @gcctabopt

@item -fall-instantiations
@cindex @option{-fall-instantiations}
@cindex @option{-fno-all-instantiations}
Generate code for all template instantiations.  The default template emission
strategy is to not generate code for declarations that were either
instantiated speculatively, such as from @code{__traits(compiles, ...)}, or
that come from an imported module not being compiled.

@item -fno-assert
@cindex @option{-fassert}
@cindex @option{-fno-assert}
Turn off code generation for @code{assert} contracts.

@item -fno-bounds-check
@cindex @option{-fbounds-check}
@cindex @option{-fno-bounds-check}
Turns off array bounds checking for all functions, which can improve
performance for code that uses arrays extensively.  Note that this
can result in unpredictable behavior if the code in question actually
does violate array bounds constraints.  It is safe to use this option
if you are sure that your code never throws a @code{RangeError}.

@item -fbounds-check=@var{value}
@cindex @option{-fbounds-check=}
An alternative to @option{-fbounds-check} that allows more control
as to where bounds checking is turned on or off.  The following values
are supported:

@table @samp
@item on
Turns on array bounds checking for all functions.
@item safeonly
Turns on array bounds checking only for @code{@@safe} functions.
@item off
Turns off array bounds checking completely.
@end table

@item -fno-builtin
@cindex @option{-fbuiltin}
@cindex @option{-fno-builtin}
Don't recognize built-in functions unless they begin with the prefix
@samp{__builtin_}.  By default, the compiler will recognize when a
function in the @code{core.stdc} package is a built-in function.

@item -fcheckaction=@var{value}
@cindex @option{-fcheckaction}
This option controls what code is generated on an assertion, bounds check, or
final switch failure.  The following values are supported:

@table @samp
@item context
Throw an @code{AssertError} with extra context information.
@item halt
Halt the program execution.
@item throw
Throw an @code{AssertError} (the default).
@end table

@item -fdebug
@item -fdebug=@var{value}
@cindex @option{-fdebug}
@cindex @option{-fno-debug}
Turn on compilation of conditional @code{debug} code into the program.
The @option{-fdebug} option itself sets the debug level to @code{1},
while @option{-fdebug=} enables @code{debug} code that are identified
by any of the following values:

@table @samp
@item level
Sets the debug level to @var{level}, any @code{debug} code <= @var{level}
is compiled into the program.
@item ident
Turns on compilation of any @code{debug} code identified by @var{ident}.
@end table

@item -fno-druntime
@cindex @option{-fdruntime}
@cindex @option{-fno-druntime}
Implements @uref{https://dlang.org/spec/betterc.html}.  Assumes that
compilation targets an environment without a D runtime library.

This is equivalent to compiling with the following options:

@example
gdc -nophoboslib -fno-exceptions -fno-moduleinfo -fno-rtti
@end example

@item -fextern-std=@var{standard}
@cindex @option{-fextern-std}
Sets the C++ name mangling compatibility to the version identified by
@var{standard}.  The following values are supported:

@table @samp
@item c++98
@item c++03
Sets @code{__traits(getTargetInfo, "cppStd")} to @code{199711}.
@item c++11
Sets @code{__traits(getTargetInfo, "cppStd")} to @code{201103}.
@item c++14
Sets @code{__traits(getTargetInfo, "cppStd")} to @code{201402}.
@item c++17
Sets @code{__traits(getTargetInfo, "cppStd")} to @code{201703}.
This is the default.
@item c++20
Sets @code{__traits(getTargetInfo, "cppStd")} to @code{202002}.
@end table

@item -fno-invariants
@cindex @option{-finvariants}
@cindex @option{-fno-invariants}
Turns off code generation for class @code{invariant} contracts.

@item -fmain
@cindex @option{-fmain}
Generates a default @code{main()} function when compiling.  This is useful when
unittesting a library, as it enables running the unittests in a library without
having to manually define an entry-point function.  This option does nothing
when @code{main} is already defined in user code.

@item -fno-moduleinfo
@cindex @option{-fmoduleinfo}
@cindex @option{-fno-moduleinfo}
Turns off generation of the @code{ModuleInfo} and related functions
that would become unreferenced without it, which may allow linking
to programs not written in D.  Functions that are not be generated
include module constructors and destructors (@code{static this} and
@code{static ~this}), @code{unittest} code, and @code{DSO} registry
functions for dynamically linked code.

@item -fonly=@var{filename}
@cindex @option{-fonly}
Tells the compiler to parse and run semantic analysis on all modules
on the command line, but only generate code for the module specified
by @var{filename}.

@item -fno-postconditions
@cindex @option{-fpostconditions}
@cindex @option{-fno-postconditions}
Turns off code generation for postcondition @code{out} contracts.

@item -fno-preconditions
@cindex @option{-fpreconditions}
@cindex @option{-fno-preconditions}
Turns off code generation for precondition @code{in} contracts.

@item -fpreview=@var{id}
@cindex @option{-fpreview}
Turns on an upcoming D language change identified by @var{id}.  The following
values are supported:

@table @samp
@item all
Turns on all upcoming D language features.
@item dip1000
Implements @uref{https://github.com/dlang/DIPs/blob/master/DIPs/other/DIP1000.md}
(Scoped pointers).
@item dip1008
Implements @uref{https://github.com/dlang/DIPs/blob/master/DIPs/other/DIP1008.md}
(Allow exceptions in @code{@@nogc} code).
@item dip1021
Implements @uref{https://github.com/dlang/DIPs/blob/master/DIPs/accepted/DIP1021.md}
(Mutable function arguments).
@item dip25
Implements @uref{https://github.com/dlang/DIPs/blob/master/DIPs/archive/DIP25.md}
(Sealed references).
@item dtorfields
Turns on generation for destructing fields of partially constructed objects.
@item fieldwise
Turns on generation of struct equality to use field-wise comparisons.
@item fixaliasthis
Implements new lookup rules that check the current scope for @code{alias this}
before searching in upper scopes.
@item in
Implements @code{in} parameters to mean @code{scope const [ref]} and accepts
rvalues.
@item inclusiveincontracts
Implements @code{in} contracts of overridden methods to be a superset of parent
contract.
@item intpromote
Implements C-style integral promotion for unary @code{+}, @code{-} and @code{~}
expressions.
@item nosharedaccess
Turns off and disallows all access to shared memory objects.
@item rvaluerefparam
Implements rvalue arguments to @code{ref} parameters.
@item shortenedmethods
Implements use of @code{=>} for methods and top-level functions in addition to
lambdas.
@end table

@item -frelease
@cindex @option{-frelease}
@cindex @option{-fno-release}
Turns on compiling in release mode, which means not emitting runtime
checks for contracts and asserts.  Array bounds checking is not done
for @code{@@system} and @code{@@trusted} functions, and assertion
failures are undefined behavior.

This is equivalent to compiling with the following options:

@example
gdc -fno-assert -fbounds-check=safe -fno-invariants \
    -fno-postconditions -fno-preconditions -fno-switch-errors
@end example

@item -frevert=
@cindex @option{-frevert}
Turns off a D language feature identified by @var{id}.  The following values
are supported:

@table @samp
@item all
Turns off all revertable D language features.
@item dip25
Reverts @uref{https://github.com/dlang/DIPs/blob/master/DIPs/archive/DIP25.md}
(Sealed references).
@item dtorfields
Turns off generation for destructing fields of partially constructed objects.
@item markdown
Turns off Markdown replacements in Ddoc comments.
@end table

@item -fno-rtti
@cindex @option{-frtti}
@cindex @option{-fno-rtti}
Turns off generation of run-time type information for all user defined types.
Any code that uses features of the language that require access to this
information will result in an error.

@item -fno-switch-errors
@cindex @option{-fswitch-errors}
@cindex @option{-fno-switch-errors}
This option controls what code is generated when no case is matched
in a @code{final switch} statement.  The default run time behavior
is to throw a @code{SwitchError}.  Turning off @option{-fswitch-errors}
means that instead the execution of the program is immediately halted.

@item -funittest
@cindex @option{-funittest}
@cindex @option{-fno-unittest}
Turns on compilation of @code{unittest} code, and turns on the
@code{version(unittest)} identifier.  This implies @option{-fassert}.

@item -fversion=@var{value}
@cindex @option{-fversion}
Turns on compilation of conditional @code{version} code into the program
identified by any of the following values:

@table @samp
@item level
Sets the version level to @var{level}, any @code{version} code >= @var{level}
is compiled into the program.
@item ident
Turns on compilation of @code{version} code identified by @var{ident}.
@end table

@item -fno-weak-templates
@cindex @option{-fweak-templates}
@cindex @option{-fno-weak-templates}
Turns off emission of declarations that can be defined in multiple objects as
weak symbols.  The default is to emit all public symbols as weak, unless the
target lacks support for weak symbols.  Disabling this option means that common
symbols are instead put in COMDAT or become private.

@end table

@node Directory Options
@section Options for Directory Search
@cindex directory options
@cindex options, directory search
@cindex search path

These options specify directories to search for files, libraries, and
other parts of the compiler:

@table @gcctabopt

@item -I@var{dir}
@cindex @option{-I}
Specify a directory to use when searching for imported modules at
compile time.  Multiple @option{-I} options can be used, and the
paths are searched in the same order.

@item -J@var{dir}
@cindex @option{-J}
Specify a directory to use when searching for files in string imports
at compile time.  This switch is required in order to use
@code{import(file)} expressions.  Multiple @option{-J} options can be
used, and the paths are searched in the same order.

@item -L@var{dir}
@cindex @option{-L}
When linking, specify a library search directory, as with @command{gcc}.

@item -B@var{dir}
@cindex @option{-B}
This option specifies where to find the executables, libraries,
source files, and data files of the compiler itself, as with @command{gcc}.

@item -fmodule-file=@var{module}=@var{spec}
@cindex @option{-fmodule-file}
This option manipulates file paths of imported modules, such that if an
imported module matches all or the leftmost part of @var{module}, the file
path in @var{spec} is used as the location to search for D sources.
This is used when the source file path and names are not the same as the
package and module hierarchy.  Consider the following examples:

@example
gdc test.d -fmodule-file=A.B=foo.d -fmodule-file=C=bar
@end example

This will tell the compiler to search in all import paths for the source
file @var{foo.d} when importing @var{A.B}, and the directory @var{bar/}
when importing @var{C}, as annotated in the following D code:

@example
module test;
import A.B;     // Matches A.B, searches for foo.d
import C.D.E;   // Matches C, searches for bar/D/E.d
import A.B.C;   // No match, searches for A/B/C.d
@end example

@item -imultilib @var{dir}
@cindex @option{-imultilib}
Use @var{dir} as a subdirectory of the gcc directory containing
target-specific D sources and interfaces.

@item -iprefix @var{prefix}
@cindex @option{-iprefix}
Specify @var{prefix} as the prefix for the gcc directory containing
target-specific D sources and interfaces.  If the @var{prefix} represents
a directory, you should include the final @code{'/'}.

@item -nostdinc
@cindex @option{-nostdinc}
Do not search the standard system directories for D source and interface
files.  Only the directories that have been specified with @option{-I} options
(and the directory of the current file, if appropriate) are searched.

@end table

@node Code Generation
@section Code Generation
@cindex options, code generation

In addition to the many @command{gcc} options controlling code generation,
@command{gdc} has several options specific to itself.

@table @gcctabopt

@item -H
@cindex @option{-H}
Generates D interface files for all modules being compiled.  The compiler
determines the output file based on the name of the input file, removes
any directory components and suffix, and applies the @file{.di} suffix.

@item -Hd @var{dir}
@cindex @option{-Hd}
Same as @option{-H}, but writes interface files to directory @var{dir}.
This option can be used with @option{-Hf @var{file}} to independently set the
output file and directory path.

@item -Hf @var{file}
@cindex @option{-Hf}
Same as @option{-H} but writes interface files to @var{file}.  This option can
be used with @option{-Hd @var{dir}} to independently set the output file and
directory path.

@item -M
@cindex @option{-M}
Output the module dependencies of all source files being compiled in a
format suitable for @command{make}.  The compiler outputs one
@command{make} rule containing the object file name for that source file,
a colon, and the names of all imported files.

@item -MM
@cindex @option{-MM}
Like @option{-M} but does not mention imported modules from the D standard
library package directories.

@item -MF @var{file}
@cindex @option{-MF}
When used with @option{-M} or @option{-MM}, specifies a @var{file} to write
the dependencies to.  When used with the driver options @option{-MD} or
@option{-MMD}, @option{-MF} overrides the default dependency output file.

@item -MG
@cindex @option{-MG}
This option is for compatibility with @command{gcc}, and is ignored by the
compiler.

@item -MP
@cindex @option{-MP}
Outputs a phony target for each dependency other than the modules being
compiled, causing each to depend on nothing.

@item -MT @var{target}
@cindex @option{-MT}
Change the @var{target} of the rule emitted by dependency generation
to be exactly the string you specify.  If you want multiple targets,
you can specify them as a single argument to @option{-MT}, or use
multiple @option{-MT} options.

@item -MQ @var{target}
@cindex @option{-MQ}
Same as @option{-MT}, but it quotes any characters which are special to
@command{make}.

@item -MD
@cindex @option{-MD}
This option is equivalent to @option{-M -MF @var{file}}.  The driver
determines @var{file} by removing any directory components and suffix
from the input file, and then adding a @file{.deps} suffix.

@item -MMD
@cindex @option{-MMD}
Like @option{-MD} but does not mention imported modules from the D standard
library package directories.

@item -X
@cindex @option{-X}
Output information describing the contents of all source files being
compiled in JSON format to a file.  The driver determines @var{file} by
removing any directory components and suffix from the input file, and then
adding a @file{.json} suffix.

@item -Xf @var{file}
@cindex @option{-Xf}
Same as @option{-X}, but writes all JSON contents to the specified
@var{file}.

@item -fdoc
@cindex @option{-fdoc}
Generates @code{Ddoc} documentation and writes it to a file.  The compiler
determines @var{file} by removing any directory components and suffix
from the input file, and then adding a @file{.html} suffix.

@item -fdoc-dir=@var{dir}
@cindex @option{-fdoc-dir}
Same as @option{-fdoc}, but writes documentation to directory @var{dir}.
This option can be used with @option{-fdoc-file=@var{file}} to
independently set the output file and directory path.

@item -fdoc-file=@var{file}
@cindex @option{-fdoc-file}
Same as @option{-fdoc}, but writes documentation to @var{file}.  This
option can be used with @option{-fdoc-dir=@var{dir}} to independently
set the output file and directory path.

@item -fdoc-inc=@var{file}
@cindex @option{-fdoc-inc}
Specify @var{file} as a @var{Ddoc} macro file to be read.  Multiple
@option{-fdoc-inc} options can be used, and files are read and processed
in the same order.

@item -fdump-c++-spec=@var{file}
For D source files, generate corresponding C++ declarations in @var{file}.

@item -fdump-c++-spec-verbose
In conjunction with @option{-fdump-c++-spec=} above, add comments for ignored
declarations in the generated C++ header.

@item -fsave-mixins=@var{file}
@cindex @option{-fsave-mixins}
Generates code expanded from D @code{mixin} statements and writes the
processed sources to @var{file}.  This is useful to debug errors in compilation
and provides source for debuggers to show when requested.

@end table

@node Warnings
@section Warnings
@cindex options to control warnings
@cindex warning messages
@cindex messages, warning
@cindex suppressing warnings

Warnings are diagnostic messages that report constructions that
are not inherently erroneous but that are risky or suggest there
is likely to be a bug in the program.  Unless @option{-Werror} is
specified, they do not prevent compilation of the program.

@table @gcctabopt

@item -Wall
@cindex @option{-Wall}
@cindex @option{-Wno-all}
Turns on all warnings messages.  Warnings are not a defined part of
the D language, and all constructs for which this may generate a
warning message are valid code.

@item -Walloca
@cindex @option{-Walloca}
This option warns on all uses of "alloca" in the source.

@item -Walloca-larger-than=@var{n}
@cindex @option{-Walloca-larger-than}
@cindex @option{-Wno-alloca-larger-than}
Warn on unbounded uses of alloca, and on bounded uses of alloca
whose bound can be larger than @var{n} bytes.
@option{-Wno-alloca-larger-than} disables
@option{-Walloca-larger-than} warning and is equivalent to
@option{-Walloca-larger-than=@var{SIZE_MAX}} or larger.

@item -Wcast-result
@cindex @option{-Wcast-result}
@cindex @option{-Wno-cast-result}
Warn about casts that will produce a null or zero result.  Currently
this is only done for casting between an imaginary and non-imaginary
data type, or casting between a D and C++ class.

@item -Wno-deprecated
@cindex @option{-Wdeprecated}
@cindex @option{-Wno-deprecated}
Do not warn about usage of deprecated features and symbols with
@code{deprecated} attributes.

@item -Werror
@cindex @option{-Werror}
@cindex @option{-Wno-error}
Turns all warnings into errors.

@item -Wspeculative
@cindex @option{-Wspeculative}
@cindex @option{-Wno-speculative}
List all error messages from speculative compiles, such as
@code{__traits(compiles, ...)}.  This option does not report
messages as warnings, and these messages therefore never become
errors when the @option{-Werror} option is also used.

@item -Wtemplates
@cindex @option{-Wtemplates}
@cindex @option{-Wno-templates}
Warn when a template instantiation is encountered.  Some coding
rules disallow templates, and this may be used to enforce that rule.

@item -Wunknown-pragmas
@cindex @option{-Wunknown-pragmas}
@cindex @option{-Wno-unknown-pragmas}
Warn when a @code{pragma()} is encountered that is not understood by
@command{gdc}.  This differs from @option{-fignore-unknown-pragmas}
where a pragma that is part of the D language, but not implemented by
the compiler, won't get reported.

@item -Wno-varargs
@cindex Wvarargs
@cindex Wno-varargs
Do not warn upon questionable usage of the macros used to handle variable
arguments like @code{va_start}.

@item -fignore-unknown-pragmas
@cindex @option{-fignore-unknown-pragmas}
@cindex @option{-fno-ignore-unknown-pragmas}
Turns off errors for unsupported pragmas.

@item -fmax-errors=@var{n}
@cindex @option{-fmax-errors}
Limits the maximum number of error messages to @var{n}, at which point
@command{gdc} bails out rather than attempting to continue processing the
source code.  If @var{n} is 0 (the default), there is no limit on the
number of error messages produced.

@item -fsyntax-only
@cindex @option{-fsyntax-only}
@cindex @option{-fno-syntax-only}
Check the code for syntax errors, but do not actually compile it.  This
can be used in conjunction with @option{-fdoc} or @option{-H} to generate
files for each module present on the command-line, but no other output
file.

@item -ftransition=@var{id}
@cindex @option{-ftransition}
Report additional information about D language changes identified by
@var{id}.  The following values are supported:

@table @samp
@item all
List information on all D language transitions.
@item complex
List all usages of complex or imaginary types.
@item field
List all non-mutable fields which occupy an object instance.
@item in
List all usages of @code{in} on parameter.
@item nogc
List all hidden GC allocations.
@item templates
List statistics on template instantiations.
@item tls
List all variables going into thread local storage.
@item vmarkdown
List instances of Markdown replacements in Ddoc.
@end table

@end table

@node Linking
@section Options for Linking
@cindex options, linking
@cindex linking, static

These options come into play when the compiler links object files into an
executable output file.  They are meaningless if the compiler is not doing
a link step.

@table @gcctabopt

@item -defaultlib=@var{libname}
@cindex @option{-defaultlib=}
Specify the library to use instead of libphobos when linking.  Options
specifying the linkage of libphobos, such as @option{-static-libphobos}
or @option{-shared-libphobos}, are ignored.

@item -debuglib=@var{libname}
@cindex @option{-debuglib=}
Specify the debug library to use instead of libphobos when linking.
This option has no effect unless the @option{-g} option was also given
on the command line.  Options specifying the linkage of libphobos, such
as @option{-static-libphobos} or @option{-shared-libphobos}, are ignored.

@item -nophoboslib
@cindex @option{-nophoboslib}
Do not use the Phobos or D runtime library when linking.  Options specifying
the linkage of libphobos, such as @option{-static-libphobos} or
@option{-shared-libphobos}, are ignored.  The standard system libraries are
used normally, unless @option{-nostdlib} or @option{-nodefaultlibs} is used.

@item -shared-libphobos
@cindex @option{-shared-libphobos}
On systems that provide @file{libgphobos} and @file{libgdruntime} as a
shared and a static library, this option forces the use of the shared
version.  If no shared version was built when the compiler was configured,
this option has no effect.

@item -static-libphobos
@cindex @option{-static-libphobos}
On systems that provide @file{libgphobos} and @file{libgdruntime} as a
shared and a static library, this option forces the use of the static
version.  If no static version was built when the compiler was configured,
this option has no effect.

@end table

@node Developer Options
@section Developer Options
@cindex developer options
@cindex debug dump options
@cindex dump options

This section describes command-line options that are primarily of
interest to developers or language tooling.

@table @gcctabopt

@item -fdump-d-original
@cindex @option{-fdump-d-original}
Output the internal front-end AST after the @code{semantic3} stage.
This option is only useful for debugging the GNU D compiler itself.

@item -v
@cindex @option{-v}
Dump information about the compiler language processing stages as the source
program is being compiled.  This includes listing all modules that are
processed through the @code{parse}, @code{semantic}, @code{semantic2}, and
@code{semantic3} stages; all @code{import} modules and their file paths;
and all @code{function} bodies that are being compiled.

@end table

@c man end

@node Index
@unnumbered Index

@printindex cp

@bye
