=========================
Clang 6.0.0 Release Notes
=========================

.. contents::
   :local:
   :depth: 2

Written by the `LLVM Team <http://llvm.org/>`_

Introduction
============

This document contains the release notes for the Clang C/C++/Objective-C
frontend, part of the LLVM Compiler Infrastructure, release 6.0.0. Here we
describe the status of Clang in some detail, including major
improvements from the previous release and new feature work. For the
general LLVM release notes, see `the LLVM
documentation <http://llvm.org/docs/ReleaseNotes.html>`_. All LLVM
releases may be downloaded from the `LLVM releases web
site <http://llvm.org/releases/>`_.

For more information about Clang or LLVM, including information about the
latest release, please see the `Clang Web Site <http://clang.llvm.org>`_ or the
`LLVM Web Site <http://llvm.org>`_.

What's New in Clang 6.0.0?
==========================

Some of the major new features and improvements to Clang are listed
here. Generic improvements to Clang as a whole or to its underlying
infrastructure are described first, followed by language-specific
sections with improvements to Clang's support for those languages.

Non-comprehensive list of changes in this release
-------------------------------------------------

- Support for `retpolines <https://support.google.com/faqs/answer/7625886>`_
  was added to help mitigate "branch target injection" (variant #2) of the
  "Spectre" speculative side channels described by `Project Zero
  <https://googleprojectzero.blogspot.com/2018/01/reading-privileged-memory-with-side.html>`_
  and the `Spectre paper <https://spectreattack.com/spectre.pdf>`_.

- Bitrig OS was merged back into OpenBSD, so Bitrig support has been
  removed from Clang/LLVM.

- The default value of ``_MSC_VER`` was raised from 1800 to 1911, making it
  compatible with the Visual Studio 2015 and 2017 C++ standard library headers.
  Users should generally expect this to be regularly raised to match the most
  recently released version of the Visual C++ compiler.

- clang now defaults to ``.init_array`` if no gcc installation can be found.
  If a gcc installation is found, it still prefers ``.ctors`` if the found
  gcc is older than 4.7.0.

- The new builtin preprocessor macros ``__is_target_arch``,
  ``__is_target_vendor``, ``__is_target_os``, and ``__is_target_environment``
  can be used to to examine the individual components of the target triple.


Improvements to Clang's diagnostics
-----------------------------------

- ``-Wpragma-pack`` is a new warning that warns in the following cases:

  - When a translation unit is missing terminating ``#pragma pack (pop)``
    directives.

  - When leaving an included file that changes the current alignment value,
    i.e. when the alignment before ``#include`` is different to the alignment
    after ``#include``.

  - ``-Wpragma-pack-suspicious-include`` (disabled by default) warns on an
    ``#include`` when the included file contains structures or unions affected by
    a non-default alignment that has been specified using a ``#pragma pack``
    directive prior to the ``#include``.

- ``-Wobjc-messaging-id`` is a new, non-default warning that warns about
  message sends to unqualified ``id`` in Objective-C. This warning is useful
  for projects that would like to avoid any potential future compiler
  errors/warnings, as the system frameworks might add a method with the same
  selector which could make the message send to ``id`` ambiguous.

- ``-Wtautological-compare`` now warns when comparing an unsigned integer and 0
  regardless of whether the constant is signed or unsigned.

- ``-Wtautological-compare`` now warns about comparing a signed integer and 0
  when the signed integer is coerced to an unsigned type for the comparison.
  ``-Wsign-compare`` was adjusted not to warn in this case.

- ``-Wtautological-constant-compare`` is a new warning that warns on
  tautological comparisons between integer variable of the type ``T`` and the
  largest/smallest possible integer constant of that same type.

- For C code, ``-Wsign-compare``, ``-Wsign-conversion``,
  ``-Wtautological-constant-compare`` and
  ``-Wtautological-constant-out-of-range-compare`` were adjusted to use the
  underlying datatype of ``enum``.

- ``-Wnull-pointer-arithmetic`` now warns about performing pointer arithmetic
  on a null pointer. Such pointer arithmetic has an undefined behavior if the
  offset is nonzero. It also now warns about arithmetic on a null pointer
  treated as a cast from integer to pointer (GNU extension).

- ``-Wzero-as-null-pointer-constant`` was adjusted not to warn on null pointer
  constants that originate from system macros, except ``NULL`` macro.

- ``-Wdelete-non-virtual-dtor`` can now fire in system headers, so that
  ``std::unique_ptr<>`` deleting through a non-virtual dtor is now diagnosed.

- ``-Wunreachable-code`` can now reason about ``__try``, ``__except`` and
  ``__leave``.


New Compiler Flags
------------------

- Clang supports the ``-mretpoline`` flag to enable `retpolines
  <https://support.google.com/faqs/answer/7625886>`_. Code compiled with this
  flag will be hardened against variant #2 of the Spectre attack. Indirect
  branches from switches or gotos removed from the code, and indirect calls
  will be made through a "retpoline" thunk. The necessary thunks will
  automatically be inserted into the generated code. Clang also supports
  ``-mretpoline-external-thunk`` which works like ``-mretpoline`` but requires
  the user to provide their own thunk definitions. The external thunk names
  start with ``__x86_indirect_thunk_`` and end in a register name. For 64-bit
  platforms, only an ``r11`` thunk is used, but for 32-bit platforms ``eax``,
  ``ecx``, ``edx``, and ``edi`` thunks are used.

- Clang now supports configuration files. These are collections of driver
  options, which can be applied by specifying the configuration file, either
  using command line option ``--config foo.cfg`` or encoding it into executable
  name ``foo-clang``. Clang behaves as if the options from this file were inserted
  before the options specified in command line. This feature is primary intended
  to facilitate cross compilation. Details can be found in
  `Clang Compiler User's Manual <UsersManual.html#configuration-files>`_.

- The ``-fdouble-square-bracket-attributes`` and corresponding
  ``-fno-double-square-bracket-attributes`` flags were added to enable or
  disable ``[[]]`` attributes in any language mode. Currently, only a limited
  number of attributes are supported outside of C++ mode. See the Clang
  `attribute documentation <AttributeReference.html>`_ for more information
  about which attributes are supported for each syntax.

- Added the ``-std=c17``, ``-std=gnu17``, and ``-std=iso9899:2017`` language
  mode flags for compatibility with GCC. This enables support for the next
  version of the C standard, expected to be published by ISO in 2018. The only
  difference between the ``-std=c17`` and ``-std=c11`` language modes is the
  value of the ``__STDC_VERSION__`` macro, as C17 is a bug fix release.

- Added the ``-fexperimental-isel`` and ``-fno-experimental-isel`` flags to
  enable/disable the new GlobalISel instruction selection framework. This
  feature is enabled by default for AArch64 at the ``-O0`` optimization level.
  Support for other targets or optimization levels is currently incomplete.

- New ``-nostdlib++`` flag to disable linking the C++ standard library. Similar
  to using ``clang`` instead of ``clang++`` but doesn't disable ``-lm``.


Attribute Changes in Clang
--------------------------

- Clang now supports the majority of its attributes under both the GNU-style
  spelling (``__attribute((name))``) and the double square-bracket spelling
  in the ``clang`` vendor namespace (``[[clang::name]]``). Attributes whose
  syntax is specified by some other standard (such as CUDA and OpenCL
  attributes) continue to follow their respective specification.

- Added the ``__has_c_attribute()`` builtin preprocessor macro which allows
  users to dynamically detect whether a double square-bracket attribute is
  supported in C mode. This attribute syntax can be enabled with the
  ``-fdouble-square-bracket-attributes`` flag.

- The presence of ``__attribute__((availability(...)))`` on a declaration no
  longer implies default visibility for that declaration on macOS.


Windows Support
---------------

- Clang now has initial, preliminary support for targeting Windows on
  ARM64.

- clang-cl now exposes the ``--version`` flag.


C++ Language Changes in Clang
-----------------------------

- Clang's default C++ dialect is now ``gnu++14`` instead of ``gnu++98``. This
  means Clang will by default accept code using features from C++14 and
  conforming GNU extensions. Projects incompatible with C++14 can add
  ``-std=gnu++98`` to their build settings to restore the previous behaviour.

- Added support for some features from the C++ standard after C++17
  (provisionally known as C++2a but expected to be C++20). This support can be
  enabled with the ``-std=c++2a`` flag. This enables:

  - Support for ``__VA_OPT__``, to allow variadic macros to easily provide
    different expansions when they are invoked without variadic arguments.

  - Recognition of the ``<=>`` token (the C++2a three-way comparison operator).

  - Support for default member initializers for bit-fields.

  - Lambda capture of ``*this``.

  - Pointer-to-member calls using ``const &``-qualified pointers on temporary objects.

  All of these features other than ``__VA_OPT__`` and ``<=>`` are made
  available with a warning in earlier C++ language modes.

- A warning has been added for a ``<=`` token followed immediately by a ``>``
  character. Code containing such constructs will change meaning in C++2a due
  to the addition of the ``<=>`` operator.

- Clang implements the "destroying operator delete" feature described in C++
  committee paper `P0722R1
  <http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/p0722r1.html>`,
  which is targeting inclusion in C++2a but has not yet been voted into the C++
  working draft. Support for this feature is enabled by the presence of the
  standard library type ``std::destroying_delete_t``.

OpenCL C Language Changes in Clang
----------------------------------

- Added subgroup builtins to enqueue kernel support.

- Added CL2.0 atomics as Clang builtins that now accept
  an additional memory scope parameter propagated to atomic IR instructions
  (this is to align with the corresponding change in LLVM IR) (see `spec s6.13.11.4
  <https://www.khronos.org/registry/OpenCL/specs/opencl-2.0-openclc.pdf#107>`_).

- Miscellaneous fixes in the CL header.

- Allow per target selection of address space during CodeGen of certain OpenCL types.
  Default target implementation is provided mimicking old behavior.

- Macro ``__IMAGE_SUPPORT__`` is now automatically added (as per `spec s6.10
  <https://www.khronos.org/registry/OpenCL/specs/opencl-2.0-openclc.pdf#55>`_).

- Added ``cl_intel_subgroups`` and ``cl_intel_subgroups_short`` extensions.

- All function calls are marked by `the convergent attribute
  <https://clang.llvm.org/docs/AttributeReference.html#convergent-clang-convergent>`_
  to prevent optimizations that break SPMD program semantics. This will be removed
  by LLVM passes if it can be proved that the function does not use convergent
  operations.

- Create a kernel wrapper for enqueued blocks, which simplifies enqueue support by
  providing common functionality.

- Added private address space explicitly in AST and refactored address space support
  with several simplifications and bug fixes (`PR33419 <https://llvm.org/pr33419>`_
  and `PR33420 <https://llvm.org/pr33420>`_).

- OpenCL now allows functions with empty parameters to be treated as if they had a
  void parameter list (inspired from C++ support). OpenCL C spec update to follow.

- General miscellaneous refactoring and cleanup of blocks support for OpenCL to
  remove unused parts inherited from Objective C implementation.

- Miscellaneous improvements in vector diagnostics.

- Added half float load and store builtins without enabling half as a legal type
  (``__builtin_store_half`` for double, ``__builtin_store_halff`` for float,
  ``__builtin_load_half`` for double, ``__builtin_load_halff`` for float).


OpenMP Support in Clang
----------------------------------

- Added options ``-f[no]-openmp-simd`` that support code emission only for OpenMP
  SIMD-based directives, like ``#pragma omp simd``, ``#pragma omp parallel for simd``
  etc. The code is emitted only for SIMD-based part of the combined directives
  and clauses.

- Added support for almost all target-based directives except for
  ``#pragma omp target teams distribute parallel for [simd]``. Although, please
  note that ``depend`` clauses on target-based directives are not supported yet.
  Clang supports offloading to X86_64, AArch64 and PPC64[LE] devices.

- Added support for ``reduction``-based clauses on ``task``-based directives from
  upcoming OpenMP 5.0.

- The LLVM OpenMP runtime ``libomp`` now supports the OpenMP Tools Interface (OMPT)
  on x86, x86_64, AArch64, and PPC64 on Linux, Windows, and macOS. If you observe
  a measurable performance impact on one of your applications without a tool
  attached, please rebuild the runtime library with ``-DLIBOMP_OMPT_SUPPORT=OFF`` and
  file a bug at `LLVM's Bugzilla <https://bugs.llvm.org/>`_ or send a message to the
  `OpenMP development list <http://lists.llvm.org/cgi-bin/mailman/listinfo/openmp-dev>`_.


AST Matchers
------------

The ``hasDeclaration`` matcher now works the same for ``Type`` and ``QualType`` and only
ever looks through one level of sugaring in a limited number of cases.

There are two main patterns affected by this:

-  ``qualType(hasDeclaration(recordDecl(...)))``: previously, we would look through
   sugar like ``TypedefType`` to get at the underlying ``recordDecl``; now, we need
   to explicitly remove the sugaring:
   ``qualType(hasUnqualifiedDesugaredType(hasDeclaration(recordDecl(...))))``

-  ``hasType(recordDecl(...))``: ``hasType`` internally uses ``hasDeclaration``; previously,
   this matcher used to match for example ``TypedefTypes`` of the ``RecordType``, but
   after the change they don't; to fix, use:

   .. code-block:: c

      hasType(hasUnqualifiedDesugaredType(
          recordType(hasDeclaration(recordDecl(...)))))

-  ``templateSpecializationType(hasDeclaration(classTemplateDecl(...)))``:
   previously, we would directly match the underlying ``ClassTemplateDecl``;
   now, we can explicitly match the ``ClassTemplateSpecializationDecl``, but that
   requires to explicitly get the ``ClassTemplateDecl``:

   .. code-block:: c

      templateSpecializationType(hasDeclaration(
          classTemplateSpecializationDecl(
              hasSpecializedTemplate(classTemplateDecl(...)))))


clang-format
------------

* Option ``IndentPPDirectives`` added to indent preprocessor directives on
  conditionals.

  +----------------------+----------------------+
  | Before               | After                |
  +======================+======================+
  |  .. code-block:: c++ | .. code-block:: c++  |
  |                      |                      |
  |    #if FOO           |   #if FOO            |
  |    #if BAR           |   #  if BAR          |
  |    #include <foo>    |   #    include <foo> |
  |    #endif            |   #  endif           |
  |    #endif            |   #endif             |
  +----------------------+----------------------+

* Option ``-verbose`` added to the command line.
  Shows the list of processed files.

* Option ``IncludeBlocks`` added to merge and regroup multiple ``#include`` blocks during sorting.

  +-------------------------+-------------------------+-------------------------+
  | Before (Preserve)       | Merge                   | Regroup                 |
  +=========================+=========================+=========================+
  |  .. code-block:: c++    | .. code-block:: c++     | .. code-block:: c++     |
  |                         |                         |                         |
  |   #include "b.h"        |   #include "a.h"        |   #include "a.h"        |
  |                         |   #include "b.h"        |   #include "b.h"        |
  |   #include "a.b"        |   #include <lib/main.h> |                         |
  |   #include <lib/main.h> |                         |   #include <lib/main.h> |
  +-------------------------+-------------------------+-------------------------+


Static Analyzer
---------------

- The Static Analyzer can now properly detect and diagnose unary pre-/post-
  increment/decrement on an uninitialized value.


Undefined Behavior Sanitizer (UBSan)
------------------------------------

* A minimal runtime is now available. It is suitable for use in production
  environments, and has a small attack surface. It only provides very basic
  issue logging and deduplication, and does not support ``-fsanitize=vptr``
  checking.


Additional Information
======================

A wide variety of additional information is available on the `Clang web
page <http://clang.llvm.org/>`_. The web page contains versions of the
API documentation which are up-to-date with the Subversion version of
the source code. You can access versions of these documents specific to
this release by going into the "``clang/docs/``" directory in the Clang
tree.

If you have any questions or comments about Clang, please feel free to
contact us via the `mailing
list <http://lists.llvm.org/mailman/listinfo/cfe-dev>`_.
