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