clang - the Clang C, C++, and Objective-C compiler
==================================================

SYNOPSIS
--------

:program:`clang` [*options*] *filename ...*

DESCRIPTION
-----------

:program:`clang` is a C, C++, and Objective-C compiler which encompasses
preprocessing, parsing, optimization, code generation, assembly, and linking.
Depending on which high-level mode setting is passed, Clang will stop before
doing a full link.  While Clang is highly integrated, it is important to
understand the stages of compilation, to understand how to invoke it.  These
stages are:

Driver
    The clang executable is actually a small driver which controls the overall
    execution of other tools such as the compiler, assembler and linker.
    Typically you do not need to interact with the driver, but you
    transparently use it to run the other tools.

Preprocessing
    This stage handles tokenization of the input source file, macro expansion,
    #include expansion and handling of other preprocessor directives.  The
    output of this stage is typically called a ".i" (for C), ".ii" (for C++),
    ".mi" (for Objective-C), or ".mii" (for Objective-C++) file.

Parsing and Semantic Analysis
    This stage parses the input file, translating preprocessor tokens into a
    parse tree.  Once in the form of a parse tree, it applies semantic
    analysis to compute types for expressions as well and determine whether
    the code is well formed. This stage is responsible for generating most of
    the compiler warnings as well as parse errors. The output of this stage is
    an "Abstract Syntax Tree" (AST).

Code Generation and Optimization
    This stage translates an AST into low-level intermediate code (known as
    "LLVM IR") and ultimately to machine code.  This phase is responsible for
    optimizing the generated code and handling target-specific code generation.
    The output of this stage is typically called a ".s" file or "assembly" file.

    Clang also supports the use of an integrated assembler, in which the code
    generator produces object files directly. This avoids the overhead of
    generating the ".s" file and of calling the target assembler.

Assembler
    This stage runs the target assembler to translate the output of the
    compiler into a target object file. The output of this stage is typically
    called a ".o" file or "object" file.

Linker
    This stage runs the target linker to merge multiple object files into an
    executable or dynamic library. The output of this stage is typically called
    an "a.out", ".dylib" or ".so" file.

:program:`Clang Static Analyzer`

The Clang Static Analyzer is a tool that scans source code to try to find bugs
through code analysis.  This tool uses many parts of Clang and is built into
the same driver.  Please see <https://clang-analyzer.llvm.org> for more details
on how to use the static analyzer.

OPTIONS
-------

Stage Selection Options
~~~~~~~~~~~~~~~~~~~~~~~

.. option:: -E

 Run the preprocessor stage.

.. option:: -fsyntax-only

 Run the preprocessor, parser and type checking stages.

.. option:: -S

 Run the previous stages as well as LLVM generation and optimization stages
 and target-specific code generation, producing an assembly file.

.. option:: -c

 Run all of the above, plus the assembler, generating a target ".o" object file.

.. option:: no stage selection option

 If no stage selection option is specified, all stages above are run, and the
 linker is run to combine the results into an executable or shared library.

Language Selection and Mode Options
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

.. option:: -x <language>

 Treat subsequent input files as having type language.

.. option:: -std=<standard>

 Specify the language standard to compile for.

 Supported values for the C language are:

  | ``c89``
  | ``c90``
  | ``iso9899:1990``

   ISO C 1990

  | ``iso9899:199409``

   ISO C 1990 with amendment 1

  | ``gnu89``
  | ``gnu90``

   ISO C 1990 with GNU extensions

  | ``c99``
  | ``iso9899:1999``

   ISO C 1999

  | ``gnu99``

   ISO C 1999 with GNU extensions

  | ``c11``
  | ``iso9899:2011``

   ISO C 2011

  | ``gnu11``

   ISO C 2011 with GNU extensions

  | ``c17``
  | ``iso9899:2017``

   ISO C 2017

  | ``gnu17``

   ISO C 2017 with GNU extensions

 The default C language standard is ``gnu17``, except on PS4, where it is
 ``gnu99``.

 Supported values for the C++ language are:

  | ``c++98``
  | ``c++03``

   ISO C++ 1998 with amendments

  | ``gnu++98``
  | ``gnu++03``

   ISO C++ 1998 with amendments and GNU extensions

  | ``c++11``

   ISO C++ 2011 with amendments

  | ``gnu++11``

    ISO C++ 2011 with amendments and GNU extensions

  | ``c++14``

   ISO C++ 2014 with amendments

  | ``gnu++14``

   ISO C++ 2014 with amendments and GNU extensions

  | ``c++17``

   ISO C++ 2017 with amendments

  | ``gnu++17``

   ISO C++ 2017 with amendments and GNU extensions

  | ``c++2a``

   Working draft for ISO C++ 2020

  | ``gnu++2a``

   Working draft for ISO C++ 2020 with GNU extensions

 The default C++ language standard is ``gnu++14``.

 Supported values for the OpenCL language are:

  | ``cl1.0``

   OpenCL 1.0

  | ``cl1.1``

   OpenCL 1.1

  | ``cl1.2``

   OpenCL 1.2

  | ``cl2.0``

   OpenCL 2.0

 The default OpenCL language standard is ``cl1.0``.

 Supported values for the CUDA language are:

  | ``cuda``

   NVIDIA CUDA(tm)

.. option:: -stdlib=<library>

 Specify the C++ standard library to use; supported options are libstdc++ and
 libc++. If not specified, platform default will be used.

.. option:: -rtlib=<library>

 Specify the compiler runtime library to use; supported options are libgcc and
 compiler-rt. If not specified, platform default will be used.

.. option:: -ansi

 Same as -std=c89.

.. option:: -ObjC, -ObjC++

 Treat source input files as Objective-C and Object-C++ inputs respectively.

.. option:: -trigraphs

 Enable trigraphs.

.. option:: -ffreestanding

 Indicate that the file should be compiled for a freestanding, not a hosted,
 environment. Note that it is assumed that a freestanding environment will
 additionally provide `memcpy`, `memmove`, `memset` and `memcmp`
 implementations, as these are needed for efficient codegen for many programs.

.. option:: -fno-builtin

 Disable special handling and optimizations of builtin functions like
 :c:func:`strlen` and :c:func:`malloc`.

.. option:: -fmath-errno

 Indicate that math functions should be treated as updating :c:data:`errno`.

.. option:: -fpascal-strings

 Enable support for Pascal-style strings with "\\pfoo".

.. option:: -fms-extensions

 Enable support for Microsoft extensions.

.. option:: -fmsc-version=

 Set _MSC_VER. Defaults to 1300 on Windows. Not set otherwise.

.. option:: -fborland-extensions

 Enable support for Borland extensions.

.. option:: -fwritable-strings

 Make all string literals default to writable.  This disables uniquing of
 strings and other optimizations.

.. option:: -flax-vector-conversions, -flax-vector-conversions=<kind>, -fno-lax-vector-conversions

 Allow loose type checking rules for implicit vector conversions.
 Possible values of <kind>:

 - ``none``: allow no implicit conversions between vectors
 - ``integer``: allow implicit bitcasts between integer vectors of the same
   overall bit-width
 - ``all``: allow implicit bitcasts between any vectors of the same
   overall bit-width

 <kind> defaults to ``integer`` if unspecified.

.. option:: -fblocks

 Enable the "Blocks" language feature.

.. option:: -fobjc-abi-version=version

 Select the Objective-C ABI version to use. Available versions are 1 (legacy
 "fragile" ABI), 2 (non-fragile ABI 1), and 3 (non-fragile ABI 2).

.. option:: -fobjc-nonfragile-abi-version=<version>

 Select the Objective-C non-fragile ABI version to use by default. This will
 only be used as the Objective-C ABI when the non-fragile ABI is enabled
 (either via :option:`-fobjc-nonfragile-abi`, or because it is the platform
 default).

.. option:: -fobjc-nonfragile-abi, -fno-objc-nonfragile-abi

 Enable use of the Objective-C non-fragile ABI. On platforms for which this is
 the default ABI, it can be disabled with :option:`-fno-objc-nonfragile-abi`.

Target Selection Options
~~~~~~~~~~~~~~~~~~~~~~~~

Clang fully supports cross compilation as an inherent part of its design.
Depending on how your version of Clang is configured, it may have support for a
number of cross compilers, or may only support a native target.

.. option:: -arch <architecture>

  Specify the architecture to build for.

.. option:: -mmacosx-version-min=<version>

  When building for macOS, specify the minimum version supported by your
  application.

.. option:: -miphoneos-version-min

  When building for iPhone OS, specify the minimum version supported by your
  application.

.. option:: --print-supported-cpus

  Print out a list of supported processors for the given target (specified
  through ``--target=<architecture>`` or :option:`-arch` ``<architecture>``). If no
  target is specified, the system default target will be used.

.. option:: -mcpu=?, -mtune=?

  Acts as an alias for :option:`--print-supported-cpus`.

.. option:: -march=<cpu>

  Specify that Clang should generate code for a specific processor family
  member and later.  For example, if you specify -march=i486, the compiler is
  allowed to generate instructions that are valid on i486 and later processors,
  but which may not exist on earlier ones.


Code Generation Options
~~~~~~~~~~~~~~~~~~~~~~~

.. option:: -O0, -O1, -O2, -O3, -Ofast, -Os, -Oz, -Og, -O, -O4

  Specify which optimization level to use:

    :option:`-O0` Means "no optimization": this level compiles the fastest and
    generates the most debuggable code.

    :option:`-O1` Somewhere between :option:`-O0` and :option:`-O2`.

    :option:`-O2` Moderate level of optimization which enables most
    optimizations.

    :option:`-O3` Like :option:`-O2`, except that it enables optimizations that
    take longer to perform or that may generate larger code (in an attempt to
    make the program run faster).

    :option:`-Ofast` Enables all the optimizations from :option:`-O3` along
    with other aggressive optimizations that may violate strict compliance with
    language standards.

    :option:`-Os` Like :option:`-O2` with extra optimizations to reduce code
    size.

    :option:`-Oz` Like :option:`-Os` (and thus :option:`-O2`), but reduces code
    size further.

    :option:`-Og` Like :option:`-O1`. In future versions, this option might
    disable different optimizations in order to improve debuggability.

    :option:`-O` Equivalent to :option:`-O1`.

    :option:`-O4` and higher

      Currently equivalent to :option:`-O3`

.. option:: -g, -gline-tables-only, -gmodules

  Control debug information output.  Note that Clang debug information works
  best at :option:`-O0`.  When more than one option starting with `-g` is
  specified, the last one wins:

    :option:`-g` Generate debug information.

    :option:`-gline-tables-only` Generate only line table debug information. This
    allows for symbolicated backtraces with inlining information, but does not
    include any information about variables, their locations or types.

    :option:`-gmodules` Generate debug information that contains external
    references to types defined in Clang modules or precompiled headers instead
    of emitting redundant debug type information into every object file.  This
    option transparently switches the Clang module format to object file
    containers that hold the Clang module together with the debug information.
    When compiling a program that uses Clang modules or precompiled headers,
    this option produces complete debug information with faster compile
    times and much smaller object files.

    This option should not be used when building static libraries for
    distribution to other machines because the debug info will contain
    references to the module cache on the machine the object files in the
    library were built on.

.. option:: -fstandalone-debug -fno-standalone-debug

  Clang supports a number of optimizations to reduce the size of debug
  information in the binary. They work based on the assumption that the
  debug type information can be spread out over multiple compilation units.
  For instance, Clang will not emit type definitions for types that are not
  needed by a module and could be replaced with a forward declaration.
  Further, Clang will only emit type info for a dynamic C++ class in the
  module that contains the vtable for the class.

  The :option:`-fstandalone-debug` option turns off these optimizations.
  This is useful when working with 3rd-party libraries that don't come with
  debug information.  This is the default on Darwin.  Note that Clang will
  never emit type information for types that are not referenced at all by the
  program.

.. option:: -feliminate-unused-debug-types

  By default, Clang does not emit type information for types that are defined
  but not used in a program. To retain the debug info for these unused types,
  the negation **-fno-eliminate-unused-debug-types** can be used.

.. option:: -fexceptions

  Enable generation of unwind information. This allows exceptions to be thrown
  through Clang compiled stack frames.  This is on by default in x86-64.

.. option:: -ftrapv

  Generate code to catch integer overflow errors.  Signed integer overflow is
  undefined in C. With this flag, extra code is generated to detect this and
  abort when it happens.

.. option:: -fvisibility

  This flag sets the default visibility level.

.. option:: -fcommon, -fno-common

  This flag specifies that variables without initializers get common linkage.
  It can be disabled with :option:`-fno-common`.

.. option:: -ftls-model=<model>

  Set the default thread-local storage (TLS) model to use for thread-local
  variables. Valid values are: "global-dynamic", "local-dynamic",
  "initial-exec" and "local-exec". The default is "global-dynamic". The default
  model can be overridden with the tls_model attribute. The compiler will try
  to choose a more efficient model if possible.

.. option:: -flto, -flto=full, -flto=thin, -emit-llvm

  Generate output files in LLVM formats, suitable for link time optimization.
  When used with :option:`-S` this generates LLVM intermediate language
  assembly files, otherwise this generates LLVM bitcode format object files
  (which may be passed to the linker depending on the stage selection options).

  The default for :option:`-flto` is "full", in which the
  LLVM bitcode is suitable for monolithic Link Time Optimization (LTO), where
  the linker merges all such modules into a single combined module for
  optimization. With "thin", :doc:`ThinLTO <../ThinLTO>`
  compilation is invoked instead.

  .. note::

     On Darwin, when using :option:`-flto` along with :option:`-g` and
     compiling and linking in separate steps, you also need to pass
     ``-Wl,-object_path_lto,<lto-filename>.o`` at the linking step to instruct the
     ld64 linker not to delete the temporary object file generated during Link
     Time Optimization (this flag is automatically passed to the linker by Clang
     if compilation and linking are done in a single step). This allows debugging
     the executable as well as generating the ``.dSYM`` bundle using :manpage:`dsymutil(1)`.

Driver Options
~~~~~~~~~~~~~~

.. option:: -###

  Print (but do not run) the commands to run for this compilation.

.. option:: --help

  Display available options.

.. option:: -Qunused-arguments

  Do not emit any warnings for unused driver arguments.

.. option:: -Wa,<args>

  Pass the comma separated arguments in args to the assembler.

.. option:: -Wl,<args>

  Pass the comma separated arguments in args to the linker.

.. option:: -Wp,<args>

  Pass the comma separated arguments in args to the preprocessor.

.. option:: -Xanalyzer <arg>

  Pass arg to the static analyzer.

.. option:: -Xassembler <arg>

  Pass arg to the assembler.

.. option:: -Xlinker <arg>

  Pass arg to the linker.

.. option:: -Xpreprocessor <arg>

  Pass arg to the preprocessor.

.. option:: -o <file>

  Write output to file.

.. option:: -print-file-name=<file>

  Print the full library path of file.

.. option:: -print-libgcc-file-name

  Print the library path for the currently used compiler runtime library
  ("libgcc.a" or "libclang_rt.builtins.*.a").

.. option:: -print-prog-name=<name>

  Print the full program path of name.

.. option:: -print-search-dirs

  Print the paths used for finding libraries and programs.

.. option:: -save-temps

  Save intermediate compilation results.

.. option:: -save-stats, -save-stats=cwd, -save-stats=obj

  Save internal code generation (LLVM) statistics to a file in the current
  directory (:option:`-save-stats`/"-save-stats=cwd") or the directory
  of the output file ("-save-state=obj").

.. option:: -integrated-as, -no-integrated-as

  Used to enable and disable, respectively, the use of the integrated
  assembler. Whether the integrated assembler is on by default is target
  dependent.

.. option:: -time

  Time individual commands.

.. option:: -ftime-report

  Print timing summary of each stage of compilation.

.. option:: -v

  Show commands to run and use verbose output.


Diagnostics Options
~~~~~~~~~~~~~~~~~~~

.. option:: -fshow-column, -fshow-source-location, -fcaret-diagnostics, -fdiagnostics-fixit-info, -fdiagnostics-parseable-fixits, -fdiagnostics-print-source-range-info, -fprint-source-range-info, -fdiagnostics-show-option, -fmessage-length

  These options control how Clang prints out information about diagnostics
  (errors and warnings). Please see the Clang User's Manual for more information.

Preprocessor Options
~~~~~~~~~~~~~~~~~~~~

.. option:: -D<macroname>=<value>

  Adds an implicit #define into the predefines buffer which is read before the
  source file is preprocessed.

.. option:: -U<macroname>

  Adds an implicit #undef into the predefines buffer which is read before the
  source file is preprocessed.

.. option:: -include <filename>

  Adds an implicit #include into the predefines buffer which is read before the
  source file is preprocessed.

.. option:: -I<directory>

  Add the specified directory to the search path for include files.

.. option:: -F<directory>

  Add the specified directory to the search path for framework include files.

.. option:: -nostdinc

  Do not search the standard system directories or compiler builtin directories
  for include files.

.. option:: -nostdlibinc

  Do not search the standard system directories for include files, but do
  search compiler builtin include directories.

.. option:: -nobuiltininc

  Do not search clang's builtin directory for include files.


ENVIRONMENT
-----------

.. envvar:: TMPDIR, TEMP, TMP

  These environment variables are checked, in order, for the location to write
  temporary files used during the compilation process.

.. envvar:: CPATH

  If this environment variable is present, it is treated as a delimited list of
  paths to be added to the default system include path list. The delimiter is
  the platform dependent delimiter, as used in the PATH environment variable.

  Empty components in the environment variable are ignored.

.. envvar:: C_INCLUDE_PATH, OBJC_INCLUDE_PATH, CPLUS_INCLUDE_PATH, OBJCPLUS_INCLUDE_PATH

  These environment variables specify additional paths, as for :envvar:`CPATH`, which are
  only used when processing the appropriate language.

.. envvar:: MACOSX_DEPLOYMENT_TARGET

  If :option:`-mmacosx-version-min` is unspecified, the default deployment
  target is read from this environment variable. This option only affects
  Darwin targets.

BUGS
----

To report bugs, please visit <https://bugs.llvm.org/>.  Most bug reports should
include preprocessed source files (use the :option:`-E` option) and the full
output of the compiler, along with information to reproduce.

SEE ALSO
--------

:manpage:`as(1)`, :manpage:`ld(1)`
