diff options
Diffstat (limited to 'clang/docs/ReleaseNotes.rst')
-rw-r--r-- | clang/docs/ReleaseNotes.rst | 262 |
1 files changed, 0 insertions, 262 deletions
diff --git a/clang/docs/ReleaseNotes.rst b/clang/docs/ReleaseNotes.rst index 5cc53e9ec27b..fa8860ba2027 100644 --- a/clang/docs/ReleaseNotes.rst +++ b/clang/docs/ReleaseNotes.rst @@ -52,70 +52,21 @@ 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. - -- Added diagnostic groups to control diagnostics for attribute extensions by - adding groups ``-Wc++N-attribute-extensions`` (where ``N`` is the standard - release being diagnosed against). These new groups are automatically implied - when passing ``-Wc++N-extensions``. Resolves PR33518. - -- Support ``-Wdeclaration-after-statement`` with C99 and later standards, and - not just C89, matching GCC's behaviour. A notable usecase is supporting style - guides that forbid mixing declarations and code, but want to move to newer C - standards. - 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. -- Configuration file syntax extended with ``<CFGDIR>`` token. This expands to - the base path of the current config file. See :ref:`configuration-files` for - details. - 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``. -- The ``-mno-bti-at-return-twice`` flag will make sure a BTI instruction won't - be added after a setjmp or possible other return-twice construct (ARM backend - only). - 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 ------------------------- -- ``-fno-experimental-new-pass-manager`` has been removed. - ``-flegacy-pass-manager`` can be used as a makeshift, - Using the legacy pass manager for the optimization pipeline was deprecated in - 13.0.0 and will be removed after 14.0.0. - New Pragmas in Clang -------------------- @@ -124,83 +75,12 @@ 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. - -- Add support for MSVC-compatible ``/hotpatch`` flag in clang-cl, and equivalent - -cc1 flag ``-fms-hotpatch``. Along with the linker flag ``/functionpadmin`` - this creates executable images suitable for runtime code patching. This flag - is only required for x86/x64 targets; ARM/ARM64 simply needs the linker - ``/functionpadmin``. - - With this addition, clang-cl can be used in live code patching scenarios, - along with tools such as Live++ or Recode. Microsoft Edit and Continue isn't - currently supported. - 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. -- Clang now supports the ``_BitInt(N)`` family of bit-precise integer types - from C23. This type was previously exposed as ``_ExtInt(N)``, which is now a - deprecated alias for ``_BitInt(N)`` (so diagnostics will mention ``_BitInt`` - even if source uses ``_ExtInt``). ``_BitInt(N)`` and ``_ExtInt(N)`` are the - same types in all respects beyond spelling and the deprecation warning. - ``_BitInt(N)`` is supported as an extension in older C modes and in all C++ - modes. Note: the ABI for ``_BitInt(N)`` is still in the process of being - stabilized, so this type should not yet be used in interfaces that require - ABI stability. The maximum width supported by Clang can be obtained from the - ``BITINT_MAXWIDTH`` macro in ``<limits.h>``. Currently, Clang supports bit - widths <= 128 because backends are not yet able to cope with some math - operations (like division) on wider integer types. See - `PR44994 <https://github.com/llvm/llvm-project/issues/44994>`_ for more - information. -- When using ``asm goto`` with outputs whose constraint modifier is ``"+"``, we - now change the numbering of the labels to occur after hidden tied inputs for - better compatibility with GCC. For better portability between different - compilers and versions, symbolic references rather than numbered references - should be preferred. See - `this thread <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=103640>` for more - info. - -- Implemented `WG14 N2412 <http://www.open-std.org/jtc1/sc22/wg14/www/docs/n2412.pdf>`_, - which adds ``*_WIDTH`` macros to limits.h and stdint.h to report the bit - width of various integer datatypes. - -- The ``ATOMIC_VAR_INIT`` macro from ``<stdatomic.h>`` is now diagnosed as - deprecated in C17 and later. The diagnostic can be disabled by defining the - ``_CLANG_DISABLE_CRT_DEPRECATION_WARNINGS`` macro prior to including the - header. - C++ Language Changes in Clang ----------------------------- @@ -209,27 +89,12 @@ C++ Language Changes in Clang C++20 Feature Support ^^^^^^^^^^^^^^^^^^^^^ -- The ``ATOMIC_VAR_INIT`` and ``ATOMIC_FLAG_INIT`` macros from the C standard - library ``<stdatomic.h>`` header are now diagnosed as deprecated in C++20 and - later. Note, the behavior is specific to the inclusion of ``<stdatomic.h>`` - in C++ code; the STL ``<atomic>`` header also controls the behavior of these - macros and is not affected by these changes. The ``<stdatomic.h>`` diagnostic - can be disabled by defining the ``_CLANG_DISABLE_CRT_DEPRECATION_WARNINGS`` - macro prior to including the header. - - 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 ------------------------------------- @@ -241,25 +106,9 @@ OpenCL C Language Changes in Clang ABI Changes in Clang -------------------- -- The ``_ExtInt(N)`` extension has been standardized in C23 as ``_BitInt(N)``. - The mangling of this type in C++ has accordingly changed: under the Microsoft - ABI it is now mangled using the ``_BitInt`` spelling, and under the Itanium ABI - it is now mangled using a dedicated production. Note: the ABI for ``_BitInt(N)`` - is still in the process of being stabilized, so this type should not yet be - used in interfaces that require ABI stability. - -- GCC doesn't pack non-POD members in packed structs unless the packed - attribute is also specified on the member. Clang historically did perform - such packing. Clang now matches the gcc behavior (except on Darwin and PS4). - You can switch back to the old ABI behavior with the flag: - ``-fclang-abi-compat=13.0``. - OpenMP Support in Clang ----------------------- -- ``clang-nvlink-wrapper`` tool introduced to support linking of cubin files archived in an archive. See :doc:`ClangNvlinkWrapper`. -- ``clang-linker-wrapper`` tool introduced to support linking using a new OpenMP target offloading method. See :doc:`ClangLinkerWrapper`. - CUDA Support in Clang --------------------- @@ -268,138 +117,27 @@ CUDA Support in Clang X86 Support in Clang -------------------- -- Support for ``AVX512-FP16`` instructions has been added. - DWARF Support in Clang ---------------------- -- The default DWARF version has increased from DWARFv4 to DWARFv5. You can opt - back in to the old behavior with ``-gdwarf-4`` or ``-fdebug-default-version=4``. - Some platforms (Darwin, Android, and SCE for instance) already opt out of this - version bump as is suitable for the platform - 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. - -- The --aarch64-none-elf target now uses the BareMetal driver rather than the - GNU driver. Programs that depend on clang invoking GCC as the linker driver - should use GCC as the linker in the build system. - -- The ``-mbranch-protection`` flag will now also work for the ARM backend. - -- The ``attribute((target("branch-protection=...)))`` attributes will now also - work for the ARM backend. - 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, whereas the (now corrected) default behavior is - -ffp-contract=on. - -ffp-model=precise is now exactly the default mode of the compiler. -- -fstrict-float-cast-overflow no longer has target specific behavior. Clang - will saturate towards the smallest and largest representable integer values. - NaNs will be converted to zero. Internal API Changes -------------------- -- A new sugar ``Type`` AST node represents types accessed via a C++ using - declaration. Given code ``using std::error_code; error_code x;``, ``x`` has - a ``UsingType`` which desugars to the previous ``RecordType``. - Build System Changes -------------------- -- Linux distros can specify ``-DCLANG_DEFAULT_PIE_ON_LINUX=On`` to use ``-fPIE`` and - ``-pie`` by default. This matches GCC installations on many Linux distros - (configured with ``--enable-default-pie``). - (`D113372 <https://reviews.llvm.org/D113372>`_) - 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>``. -- The ``usingType`` matcher is now available and needed to refer to types that - are referred to via using C++ using declarations. - The associated ``UsingShadowDecl`` can be matched using ``throughUsingDecl`` - and the underlying ``Type`` with ``hasUnderlyingType``. - ``hasDeclaration`` continues to see through the alias and apply to the - underlying type. -- Added the ``isConsteval`` matcher to match ``consteval`` function - declarations as well as `if consteval` and `if ! consteval` statements. -- Added the ``isConstinit`` matcher to match ``constinit`` variable - declarations. - clang-format ------------ -- Option ``AllowShortEnumsOnASingleLine: false`` has been improved, it now - correctly places the opening brace according to ``BraceWrapping.AfterEnum``. - -- Option ``AlignAfterOpenBracket: BlockIndent`` has been added. If set, it will - always break after an open bracket, if the parameters don't fit on a single - line. Closing brackets will be placed on a new line. - -- Option ``QualifierAlignment`` 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`. - -- Option ``RemoveBracesLLVM`` has been added to remove optional braces of - control statements for the LLVM style. - -- Option ``SeparateDefinitionBlocks`` has been added to insert or remove empty - lines between definition blocks including functions, classes, structs, enums, - and namespaces. - -- Add a ``Custom`` style to ``SpaceBeforeParens``, to better configure the - space before parentheses. The custom options can be set using - ``SpaceBeforeParensOptions``. - -- The command line argument `-style=<string>` has been extended so that a specific - format file at location <format_file_path> can be selected. This is supported - via the syntax: `-style=file:<format_file_path>`. - -- Improved C++20 Modules and Coroutines support. - -- Option ``AfterOverloadedOperator`` has been added in ``SpaceBeforeParensOptions`` - to allow space between overloaded operator and opening parentheses. - libclang -------- |