This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: [PATCH 04/14] Add D front-end (GDC) config, Makefile, and manpages.
- From: Richard Sandiford <richard dot sandiford at arm dot com>
- To: Iain Buclaw <ibuclaw at gdcproject dot org>
- Cc: gcc-patches <gcc-patches at gcc dot gnu dot org>, nd at arm dot com
- Date: Tue, 16 Oct 2018 10:31:31 +0100
- Subject: Re: [PATCH 04/14] Add D front-end (GDC) config, Makefile, and manpages.
- References: <CABOHX+eZwts3LXVYp+7WwJc5-0vLAqJFBOqzoRSzH3LzzYppJg@mail.gmail.com>
I'll pretend to be a doc reviewer...
Iain Buclaw <ibuclaw@gdcproject.org> writes:
> +@page
> +@vskip 0pt plus 1filll
> +Published by the Free Software Foundation @*
> +51 Franklin Street, Fifth Floor@*
> +Boston, MA 02110-1301, USA@*
Would be good to copy the expanded GNU Press stuff from gcc.texi.
> +The @command{gdc} command is a frontend to @command{gcc} and supports many
> +of the same options.
A bit pedantic, but I think this should be something like:
The @command{gdc} command is the GNU compiler for the D language and
supports many of the same options as @command{gcc}.
> +@menu
> +* Input and Output files:: Controlling the kind of output:
> + an executable, object files, assembler files,
> +* Runtime Options:: Options controlling runtime behaviour
"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 influceing the linking step
"influencing"
> +* Developer Options:: Options you won't use
Don't know if this came from an earlier version of the main GCC manual,
but it seems a bit off-message for the FSF. Something boring like:
Options useful for developers of gdc
might be better.
> +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,
> +in which case they will all be compiled. If you specify a
The documentation convention is to avoid the future tense for things
like this. s/will all be/are all/ doesn't read very naturally so it
might need to be reworded.
> +@code{-o @var{file}} option, all the input files will be compiled together,
Same here.
> +@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 array extensively. Note that this
"uses arrays extensively"? Or maybe some markup is missing from "array".
> +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 will never throw a @code{RangeError}.
s/will never throw/never throws/
> +@item -fno-builtin
> +@cindex @option{-fbuiltin}
> +@cindex @option{-fno-builtin}
> +Don't recognize built-in functions that do not begin with
> +@samp{__builtin_} as prefix. By default, the compiler will recognize
> +when a function in the @code{core.stdc} package is a built-in function.
maybe "unless they begin with the prefix @samp{__builtin_}"?
s/will recognize/recognizes/
> +@table @samp
> +@item level
> +@cindex @option{-fdebug=level}
> +Sets the debug level to @var{level}, any @code{debug} code <= @var{level}
> +is compiled into the program.
> +@item ident
> +@cindex @option{-fdebug=ident}
> +Turns on compilation of any @code{debug} code identified by @var{ident}.
> +@end table
Should be @var rather than @samp in the @table. Also @var{...} in
the @option{...}s.
> +@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 will not be generated
s/will not be/are not/
> +include module constructor and destructors (@code{static this} and
s/constructor/constructors/? Or is there only one of each, in which
case maybe "the module constructor and destructor".
> +@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 behaviour.
"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 -fno-switch-errors
> +@cindex @option{-fswitch-errors}
> +@cindex @option{-fno-switch-errors}
> +This option controls what code should be generated when no case is
s/should be/is/
> +matched in a @code{final switch} statement. The default run time
> +behavior is that a @code{SwitchError} will be thrown. Turning off
"is to throw a @code{SwitchError}"
> +@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
> +@cindex @option{-fversion=level}
> +Sets the version level to @var{level}, any @code{version} code >= @var{level}
> +is compiled into the program.
> +@item ident
> +@cindex @option{-fversion=ident}
> +Turns on compilation of @code{version} code identified by @var{ident}.
> +@end table
Same comments as above about @var{}.
> +
> +@item -fno-weak
> +@cindex @option{-fweak}
> +@cindex @option{-fno-weak}
> +Turns off emission of instantiated declarations that can be defined in multiple
> +objects as weak or one-only symbols. The default is to emit all public symbols
> +as weak, unless there lacks target support. Disabling this options means that
> +common symbols are instead put in COMDAT or become private.
Maybe "unless the target lacks support for weak symbols"?
> +@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.
Should this be @var{file}?
> +@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 hierachy. Consider the following examples:
"hierarchy"
> +@item -imultilib @var{dir}
> +@cindex @option{-imultilib}
> +Use @var{dir} as a subdirectory of the gcc directory containing
> +target-specific D sources and interfaces.
Which gcc directory does this mean?
> +@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{'/'}.
Same here. What does a prefix without the "/" mean here? It doesn't
seem from the docs that it acts with a -iwithprefix option.
> +@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.
When's that appropriate for D?
> +@item -H
> +@cindex @option{-H}
> +Generates D interface files for all modules being compiled. The compiler
> +determines the output @var{file} based on the name of the input file,
> +removes any directory components and suffix, and applies the @file{.di}
> +suffix.
Marking up @var{file} looks odd here, since nothing else refers to it.
> +@item -Hd @var{dir}
> +@cindex @option{-Hd}
> +Same as @option{-H}, but writes interface files to @var{dir} directory.
"directory @var{dir}"?
> +@item -MD
> +@cindex @option{-MD}
> +This option is equivalent to @option{-M -MF @var{file}}. The driver
> +determines @var{file} based on the name of the input file, removes any
> +directory components and suffix, and applies a @file{.deps} suffix.
This sounded at first like the driver removes the components after
determining @var{file}, whereas I'm guessing that's how it determines
@var{file}. Maybe something like:
determines @var{file} by removing any directory components and suffix
from the input file and then adding a @file{.deps} suffix.
if so?
> +@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} based
> +on the name of the input file, removes any directory components and suffix,
> +and applies a @file{.json} suffix.
Same sort of thing here.
> +@item -fdoc
> +@cindex @option{-fdoc}
> +Generates @code{Ddoc} documentation and writes to a file. The compiler
> +determines @var{file} based on the name of the input file, removes any
> +directory components and suffix, and applies a @file{.html} suffix.
Here too. "writes it"?
> +@item -fdoc-dir=@var{dir}
> +@cindex @option{-fdoc-dir}
> +Same as @option{-fdoc}, but writes documentation to @var{dir} directory.
"directory @var{dir}"?
> +@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 legal code.
"valid code". But I assume this is "all" in the same way that it's
"all" for C and C++? Might be better to use something like the
invoke.texi entry, which says:
This enables all the warnings about constructions that some users
consider questionable, and that are easy to avoid (or modify to
prevent the warning), even in conjunction with macros.
> +@item -Wspeculative
> +@cindex @option{-Wspeculative}
> +@cindex @option{-Wno-speculative}
> +Report on 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.
"Report on all error messages" sounds a bit odd.
> +@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, will not get reported.
Future tense.
> +@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
> +only suppresses the generation of the object code, and can be used in
> +conjunction with @option{-fdoc} or @option{-H} options.
"object code" might be confusing since I assume we wouldn't generate
assembly code either.
> +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.
Two spaces before "They".
> +@item -fdump-d-original
> +@cindex @option{-fdump-d-original}
> +Dump the front-end AST after after parsing and running semantic on
> +the source program. Only really useful for debugging the compiler
> +itself.
"after running semantic" sounds odd. Based on -v, maybe "after the
@code{semantic} stage", if that's what it means?
Looks OK otherwise.
Thanks,
Richard