| ======================================== |
| Clang 14.0.0 (In-Progress) Release Notes |
| ======================================== |
| |
| .. contents:: |
| :local: |
| :depth: 2 |
| |
| Written by the `LLVM Team <https://llvm.org/>`_ |
| |
| .. warning:: |
| |
| These are in-progress notes for the upcoming Clang 14 release. |
| Release notes for previous releases can be found on |
| `the Download Page <https://releases.llvm.org/download.html>`_. |
| |
| Introduction |
| ============ |
| |
| This document contains the release notes for the Clang C/C++/Objective-C |
| frontend, part of the LLVM Compiler Infrastructure, release 14.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 <https://llvm.org/docs/ReleaseNotes.html>`_. All LLVM |
| releases may be downloaded from the `LLVM releases web |
| site <https://llvm.org/releases/>`_. |
| |
| For more information about Clang or LLVM, including information about the |
| latest release, please see the `Clang Web Site <https://clang.llvm.org>`_ or the |
| `LLVM Web Site <https://llvm.org>`_. |
| |
| Note that if you are reading this file from a Git checkout or the |
| main Clang web page, this document applies to the *next* release, not |
| the current one. To see the release notes for a specific release, please |
| see the `releases page <https://llvm.org/releases/>`_. |
| |
| What's New in Clang 14.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. |
| |
| Major New Features |
| ------------------ |
| |
| - ... |
| |
| Improvements to Clang's diagnostics |
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ |
| |
| - -Wbitwise-instead-of-logical (part of -Wbool-operation) warns about use of bitwise operators with boolean operands which have side effects. |
| |
| Non-comprehensive list of changes in this release |
| ------------------------------------------------- |
| |
| - Maximum _ExtInt size was decreased from 16,777,215 bits to 8,388,608 bits. |
| Motivation for this was discussed in PR51829. |
| |
| New Compiler Flags |
| ------------------ |
| |
| - Clang plugin arguments can now be passed through the compiler driver via |
| ``-fplugin-arg-pluginname-arg``, similar to GCC's ``-fplugin-arg``. |
| |
| Deprecated Compiler Flags |
| ------------------------- |
| |
| - -Wweak-template-vtables has been deprecated and no longer has any effect. The |
| flag will be removed in the next release. |
| |
| Modified Compiler Flags |
| ----------------------- |
| |
| - Support has been added for the following processors (``-mcpu`` identifiers in parentheses): |
| |
| - RISC-V SiFive E20 (``sifive-e20``). |
| - RISC-V SiFive E21 (``sifive-e21``). |
| - RISC-V SiFive E24 (``sifive-e24``). |
| - RISC-V SiFive E34 (``sifive-e34``). |
| - RISC-V SiFive S21 (``sifive-s21``). |
| - RISC-V SiFive S51 (``sifive-s51``). |
| - RISC-V SiFive S54 (``sifive-s54``). |
| - RISC-V SiFive S76 (``sifive-s76``). |
| |
| - Support has been added for the following architectures (``-march`` identifiers in parentheses): |
| |
| - Armv9-A (``armv9-a``). |
| - Armv9.1-A (``armv9.1-a``). |
| - Armv9.2-A (``armv9.2-a``). |
| |
| Removed Compiler Flags |
| ------------------------- |
| |
| - ... |
| |
| New Pragmas in Clang |
| -------------------- |
| |
| - ... |
| |
| Attribute Changes in Clang |
| -------------------------- |
| |
| - Attributes loaded as clang plugins which are sensitive to LangOpts must |
| now override ``acceptsLangOpts`` instead of ``diagLangOpts``. |
| Returning false will produce a generic "attribute ignored" diagnostic, as |
| with clang's built-in attributes. |
| If plugins want to provide richer diagnostics, they can do so when the |
| attribute is handled instead, e.g. in ``handleDeclAttribute``. |
| (This was changed in order to better support attributes in code completion). |
| |
| - __has_cpp_attribute, __has_c_attribute, __has_attribute, and __has_declspec |
| will now macro expand their argument. This causes a change in behavior for |
| code using ``__has_cpp_attribute(__clang__::attr)`` (and same for |
| ``__has_c_attribute``) where it would previously expand to ``0`` for all |
| attributes, but will now issue an error due to the expansion of the |
| predefined ``__clang__`` macro. |
| |
| Windows Support |
| --------------- |
| |
| - An MSVC compatibility workaround for C++ operator names was removed. As a |
| result, the ``<query.h>`` Windows SDK header may not compile out of the box. |
| Users should use a recent SDK and pass ``-DQUERY_H_RESTRICTION_PERMISSIVE`` |
| or pass ``/permissive`` to disable C++ operator names altogether. See |
| `PR42427 <https://llvm.org/pr42427>` for more info. |
| |
| C Language Changes in Clang |
| --------------------------- |
| |
| - The value of ``__STDC_VERSION__`` has been bumped to ``202000L`` when passing |
| ``-std=c2x`` so that it can be distinguished from C17 mode. This value is |
| expected to change again when C23 is published. |
| - Wide multi-characters literals such as ``L'ab'`` that would previously be interpreted as ``L'b'`` |
| are now ill-formed in all language modes. The motivation for this change is outlined in |
| `P2362 <wg21.link/P2362>`_. |
| - Support for ``__attribute__((error("")))`` and |
| ``__attribute__((warning("")))`` function attributes have been added. |
| - The maximum allowed alignment has been increased from 2^29 to 2^32. |
| |
| C++ Language Changes in Clang |
| ----------------------------- |
| |
| - ... |
| |
| C++20 Feature Support |
| ^^^^^^^^^^^^^^^^^^^^^ |
| ... |
| |
| C++2b Feature Support |
| ^^^^^^^^^^^^^^^^^^^^^ |
| - Implemented `P1938R3: if consteval <https://wg21.link/P1938R3>`_. |
| - Implemented `P2360R0: Extend init-statement to allow alias-declaration <https://wg21.link/P2360R0>`_. |
| |
| |
| CUDA Language Changes in Clang |
| ------------------------------ |
| |
| - Clang now supports CUDA versions up to 11.5. |
| - Default GPU architecture has been changed from sm_20 to sm_35. |
| |
| Objective-C Language Changes in Clang |
| ------------------------------------- |
| |
| OpenCL C Language Changes in Clang |
| ---------------------------------- |
| |
| ... |
| |
| ABI Changes in Clang |
| -------------------- |
| |
| OpenMP Support in Clang |
| ----------------------- |
| |
| - ``clang-nvlink-wrapper`` tool introduced to support linking of cubin files archived in an archive. See :doc:`ClangNvlinkWrapper`. |
| |
| |
| CUDA Support in Clang |
| --------------------- |
| |
| - ... |
| |
| X86 Support in Clang |
| -------------------- |
| |
| - Support for ``AVX512-FP16`` instructions has been added. |
| |
| Arm and AArch64 Support in Clang |
| -------------------------------- |
| |
| - Support has been added for the following processors (command-line identifiers in parentheses): |
| - Arm Cortex-A510 (``cortex-a510``) |
| - Arm Cortex-X2 (``cortex-x2``) |
| - Arm Cortex-A710 (``cortex-A710``) |
| |
| - The -mtune flag is no longer ignored for AArch64. It is now possible to |
| tune code generation for a particular CPU with -mtune without setting any |
| architectural features. For example, compiling with |
| "-mcpu=generic -mtune=cortex-a57" will not enable any Cortex-A57 specific |
| architecture features, but will enable certain optimizations specific to |
| Cortex-A57 CPUs and enable the use of a more accurate scheduling model. |
| |
| |
| Floating Point Support in Clang |
| ------------------------------- |
| - The default setting of FP contraction (FMA) is now -ffp-contract=on (for |
| languages other than CUDA/HIP) even when optimization is off. Previously, |
| the default behavior was equivalent to -ffp-contract=off (-ffp-contract |
| was not set). |
| Related to this, the switch -ffp-model=precise now implies -ffp-contract=on |
| rather than -ffp-contract=fast, and the documentation of these features has |
| been clarified. Previously, the documentation claimed that -ffp-model=precise |
| was the default, but this was incorrect because the precise model implied |
| -ffp-contract=fast, wheras the (now corrected) default behavior is |
| -ffp-contract=on. |
| -ffp-model=precise is now exactly the default mode of the compiler. |
| |
| Internal API Changes |
| -------------------- |
| |
| - ... |
| |
| Build System Changes |
| -------------------- |
| |
| - ... |
| |
| AST Matchers |
| ------------ |
| |
| - ``TypeLoc`` AST Matchers are now available. These matchers provide helpful |
| utilities for matching ``TypeLoc`` nodes, such as the ``pointerTypeLoc`` |
| matcher or the ``hasReturnTypeLoc`` matcher. The addition of these matchers |
| was made possible by changes to the handling of ``TypeLoc`` nodes that |
| allows them to enjoy the same static type checking as other AST node kinds. |
| - ``LambdaCapture`` AST Matchers are now available. These matchers allow for |
| the binding of ``LambdaCapture`` nodes. The ``LambdaCapture`` matchers added |
| include the ``lambdaCapture`` node matcher, the ``capturesVar`` traversal |
| matcher, and ``capturesThis`` narrowing matcher. |
| - The ``hasAnyCapture`` matcher now only accepts an inner matcher of type |
| ``Matcher<LambdaCapture>``. The matcher originally accepted an inner matcher |
| of type ``Matcher<CXXThisExpr>`` or ``Matcher<VarDecl>``. |
| |
| clang-format |
| ------------ |
| |
| - Option ``AllowShortEnumsOnASingleLine: false`` has been improved, it now |
| correctly places the opening brace according to ``BraceWrapping.AfterEnum``. |
| |
| - Option ``QualifierAligment`` has been added in order to auto-arrange the |
| positioning of specifiers/qualifiers |
| `const` `volatile` `static` `inline` `constexpr` `restrict` |
| in variable and parameter declarations to be either ``Right`` aligned |
| or ``Left`` aligned or ``Custom`` using ``QualifierOrder``. |
| |
| - Option ``QualifierOrder`` has been added to allow the order |
| `const` `volatile` `static` `inline` `constexpr` `restrict` |
| to be controlled relative to the `type`. |
| |
| - Add a ``Custom`` style to ``SpaceBeforeParens``, to better configure the |
| space before parentheses. The custom options can be set using |
| ``SpaceBeforeParensOptions``. |
| |
| - Improved Cpp20 Modules support. |
| |
| libclang |
| -------- |
| |
| - ... |
| |
| Static Analyzer |
| --------------- |
| |
| - ... |
| |
| .. _release-notes-ubsan: |
| |
| Undefined Behavior Sanitizer (UBSan) |
| ------------------------------------ |
| |
| Core Analysis Improvements |
| ========================== |
| |
| - ... |
| |
| New Issues Found |
| ================ |
| |
| - ... |
| |
| Python Binding Changes |
| ---------------------- |
| |
| The following methods have been added: |
| |
| - ... |
| |
| Significant Known Problems |
| ========================== |
| |
| Additional Information |
| ====================== |
| |
| A wide variety of additional information is available on the `Clang web |
| page <https://clang.llvm.org/>`_. The web page contains versions of the |
| API documentation which are up-to-date with the Git 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 <https://lists.llvm.org/mailman/listinfo/cfe-dev>`_. |