Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/llvm/llvm-project.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'clang/docs/ReleaseNotes.rst')
-rw-r--r--clang/docs/ReleaseNotes.rst567
1 files changed, 0 insertions, 567 deletions
diff --git a/clang/docs/ReleaseNotes.rst b/clang/docs/ReleaseNotes.rst
index 84c74335ea5d..4f5e71e0ba80 100644
--- a/clang/docs/ReleaseNotes.rst
+++ b/clang/docs/ReleaseNotes.rst
@@ -47,324 +47,17 @@ sections with improvements to Clang's support for those languages.
Major New Features
------------------
-- Clang now supports the ``-fzero-call-used-regs`` feature for x86. The purpose
- of this feature is to limit Return-Oriented Programming (ROP) exploits and
- information leakage. It works by zeroing out a selected class of registers
- before function return --- e.g., all GPRs that are used within the function.
- There is an analogous ``zero_call_used_regs`` attribute to allow for finer
- control of this feature.
-
-- Clang now supports randomizing structure layout in C. This feature is a
- compile-time hardening technique, making it more difficult for an attacker to
- retrieve data from structures. Specify randomization with the
- ``randomize_layout`` attribute. The corresponding ``no_randomize_layout``
- attribute can be used to turn the feature off.
-
- A seed value is required to enable randomization, and is deterministic based
- on a seed value. Use the ``-frandomize-layout-seed=`` or
- ``-frandomize-layout-seed-file=`` flags.
-
- .. note::
-
- Randomizing structure layout is a C-only feature.
-
-- Clang now supports the ``-fstrict-flex-arrays=<arg>`` option to control which
- array bounds lead to flexible array members. The option yields more accurate
- ``__builtin_object_size`` and ``__builtin_dynamic_object_size`` results in
- most cases but may be overly conservative for some legacy code.
-- Experimental support for HLSL has been added. The implementation is
- incomplete and highly experimental. For more information about the ongoing
- work to support HLSL see the `documentation
- <https://clang.llvm.org/docs/HLSLSupport.html>`_, or the `GitHub project
- <https://github.com/orgs/llvm/projects/4>`_.
-
Bug Fixes
---------
-- ``CXXNewExpr::getArraySize()`` previously returned a ``llvm::Optional``
- wrapping a ``nullptr`` when the ``CXXNewExpr`` did not have an array
- size expression. This was fixed and ``::getArraySize()`` will now always
- either return ``None`` or a ``llvm::Optional`` wrapping a valid ``Expr*``.
- This fixes `Issue 53742 <https://github.com/llvm/llvm-project/issues/53742>`_.
-- We now ignore full expressions when traversing cast subexpressions. This
- fixes `Issue 53044 <https://github.com/llvm/llvm-project/issues/53044>`_.
-- Allow ``-Wno-gnu`` to silence GNU extension diagnostics for pointer
- arithmetic diagnostics. Fixes `Issue 54444
- <https://github.com/llvm/llvm-project/issues/54444>`_.
-- Placeholder constraints, as in ``Concept auto x = f();``, were not checked
- when modifiers like ``auto&`` or ``auto**`` were added. These constraints are
- now checked.
- This fixes `Issue 53911 <https://github.com/llvm/llvm-project/issues/53911>`_
- and `Issue 54443 <https://github.com/llvm/llvm-project/issues/54443>`_.
-- Previously invalid member variables with template parameters would crash clang.
- Now fixed by setting identifiers for them.
- This fixes `Issue 28475 (PR28101) <https://github.com/llvm/llvm-project/issues/28475>`_.
-- Now allow the ``restrict`` and ``_Atomic`` qualifiers to be used in
- conjunction with ``__auto_type`` to match the behavior in GCC. This fixes
- `Issue 53652 <https://github.com/llvm/llvm-project/issues/53652>`_.
-- No longer crash when specifying a variably-modified parameter type in a
- function with the ``naked`` attribute. This fixes
- `Issue 50541 <https://github.com/llvm/llvm-project/issues/50541>`_.
-- Allow multiple ``#pragma weak`` directives to name the same undeclared (if an
- alias, target) identifier instead of only processing one such ``#pragma weak``
- per identifier.
- Fixes `Issue 28985 <https://github.com/llvm/llvm-project/issues/28985>`_.
-- Assignment expressions in C11 and later mode now properly strip the _Atomic
- qualifier when determining the type of the assignment expression. Fixes
- `Issue 48742 <https://github.com/llvm/llvm-project/issues/48742>`_.
-- Improved the diagnostic when accessing a member of an atomic structure or
- union object in C; was previously an unhelpful error, but now issues a
- ``-Watomic-access`` warning which defaults to an error. Fixes
- `Issue 54563 <https://github.com/llvm/llvm-project/issues/54563>`_.
-- Unevaluated lambdas in dependant contexts no longer result in clang crashing.
- This fixes Issues `50376 <https://github.com/llvm/llvm-project/issues/50376>`_,
- `51414 <https://github.com/llvm/llvm-project/issues/51414>`_,
- `51416 <https://github.com/llvm/llvm-project/issues/51416>`_,
- and `51641 <https://github.com/llvm/llvm-project/issues/51641>`_.
-- The builtin function __builtin_dump_struct would crash clang when the target
- struct contains a bitfield. It now correctly handles bitfields.
- This fixes Issue `Issue 54462 <https://github.com/llvm/llvm-project/issues/54462>`_.
-- Statement expressions are now disabled in default arguments in general.
- This fixes Issue `Issue 53488 <https://github.com/llvm/llvm-project/issues/53488>`_.
-- According to `CWG 1394 <https://wg21.link/cwg1394>`_ and
- `C++20 [dcl.fct.def.general]p2 <https://timsong-cpp.github.io/cppwp/n4868/dcl.fct.def#general-2.sentence-3>`_,
- Clang should not diagnose incomplete types in function definitions if the function body is "= delete;".
- This fixes Issue `Issue 52802 <https://github.com/llvm/llvm-project/issues/52802>`_.
-- Unknown type attributes with a ``[[]]`` spelling are no longer diagnosed twice.
- This fixes Issue `Issue 54817 <https://github.com/llvm/llvm-project/issues/54817>`_.
-- Clang should no longer incorrectly diagnose a variable declaration inside of
- a lambda expression that shares the name of a variable in a containing
- if/while/for/switch init statement as a redeclaration.
- This fixes `Issue 54913 <https://github.com/llvm/llvm-project/issues/54913>`_.
-- Overload resolution for constrained function templates could use the partial
- order of constraints to select an overload, even if the parameter types of
- the functions were different. It now diagnoses this case correctly as an
- ambiguous call and an error. Fixes
- `Issue 53640 <https://github.com/llvm/llvm-project/issues/53640>`_.
-- No longer crash when trying to determine whether the controlling expression
- argument to a generic selection expression has side effects in the case where
- the expression is result dependent. This fixes
- `Issue 50227 <https://github.com/llvm/llvm-project/issues/50227>`_.
-- Fixed an assertion when constant evaluating an initializer for a GCC/Clang
- floating-point vector type when the width of the initialization is exactly
- the same as the elements of the vector being initialized.
- Fixes `Issue 50216 <https://github.com/llvm/llvm-project/issues/50216>`_.
-- Fixed a crash when the ``__bf16`` type is used such that its size or
- alignment is calculated on a target which does not support that type. This
- fixes `Issue 50171 <https://github.com/llvm/llvm-project/issues/50171>`_.
-- Fixed a false positive diagnostic about an unevaluated expression having no
- side effects when the expression is of VLA type and is an operand of the
- ``sizeof`` operator. Fixes `Issue 48010 <https://github.com/llvm/llvm-project/issues/48010>`_.
-- Fixed a false positive diagnostic about scoped enumerations being a C++11
- extension in C mode. A scoped enumeration's enumerators cannot be named in C
- because there is no way to fully qualify the enumerator name, so this
- "extension" was unintentional and useless. This fixes
- `Issue 42372 <https://github.com/llvm/llvm-project/issues/42372>`_.
-- Clang will now find and emit a call to an allocation function in a
- promise_type body for coroutines if there is any allocation function
- declaration in the scope of promise_type. Additionally, to implement CWG2585,
- a coroutine will no longer generate a call to a global allocation function
- with the signature (std::size_t, p0, ..., pn).
- This fixes Issue `Issue 54881 <https://github.com/llvm/llvm-project/issues/54881>`_.
-- Implement `CWG 2394 <https://wg21.link/cwg2394>`_: Const class members
- may be initialized with a defaulted default constructor under the same
- conditions it would be allowed for a const object elsewhere.
-- ``__has_unique_object_representations`` no longer reports that ``_BitInt`` types
- have unique object representations if they have padding bits.
-- Unscoped and scoped enumeration types can no longer be initialized from a
- brace-init-list containing a single element of a different scoped enumeration
- type.
-- Allow use of an elaborated type specifier as a ``_Generic`` selection
- association in C++ mode. This fixes
- `Issue 55562 <https://github.com/llvm/llvm-project/issues/55562>`_.
-- Clang will allow calling a ``consteval`` function in a default argument. This
- fixes `Issue 48230 <https://github.com/llvm/llvm-project/issues/48230>`_.
-- Fixed memory leak due to ``VarTemplateSpecializationDecl`` using
- ``TemplateArgumentListInfo`` instead of ``ASTTemplateArgumentListInfo``.
-- An initializer for a static variable declaration, which is nested
- inside a statement expression in an aggregate initializer, is now
- emitted as a dynamic initializer. Previously the variable would
- incorrectly be zero-initialized. In contexts where a dynamic
- initializer is not allowed this is now diagnosed as an error.
-- Clang now correctly emits symbols for implicitly instantiated constexpr
- template function. Fixes `Issue 55560 <https://github.com/llvm/llvm-project/issues/55560>`_.
-- Clang now checks ODR violations when merging concepts from different modules.
- Note that this may possibly break existing code, and is done so intentionally.
- Fixes `Issue 56310 <https://github.com/llvm/llvm-project/issues/56310>`_.
-- Clang will now look through type sugar when checking a member function is a
- move assignment operator. Fixes `Issue 56456 <https://github.com/llvm/llvm-project/issues/56456>`_.
-- Fixed a crash when a variable with a bool enum type that has no definition
- used in comparison operators. Fixes `Issue 56560 <https://github.com/llvm/llvm-project/issues/56560>`_.
-- Fix that ``if consteval`` could evaluate to ``true`` at runtime because it was incorrectly
- constant folded. Fixes `Issue 55638 <https://github.com/llvm/llvm-project/issues/55638>`_.
-- Fixed incompatibility of Clang's ``<stdatomic.h>`` with MSVC ``<atomic>``.
- Fixes `MSVC STL Issue 2862 <https://github.com/microsoft/STL/issues/2862>`_.
-- Empty enums and enums with a single enumerator with value zero will be
- considered to have one positive bit in order to represent the underlying
- value. This effects whether we consider the store of the value one to be well
- defined.
-- An operator introduced to the scope via a `using` statement now correctly references this
- statement in clangd (hover over the symbol, jump to definition) as well as in the AST dump.
- This also fixes `issue 55095 <https://github.com/llvm/llvm-project/issues/#55095>`_ as a
- side-effect.
Improvements to Clang's diagnostics
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-- ``-Wliteral-range`` will warn on floating-point equality comparisons with
- constants that are not representable in a casted value. For example,
- ``(float) f == 0.1`` is always false.
-- ``-Winline-namespace-reopened-noninline`` now takes into account that the
- ``inline`` keyword must appear on the original but not necessarily all
- extension definitions of an inline namespace and therefore points its note
- at the original definition. This fixes `Issue 50794 (PR51452)
- <https://github.com/llvm/llvm-project/issues/50794>`_.
-- ``-Wunused-but-set-variable`` now also warns if the variable is only used
- by unary operators.
-- ``-Wunused-variable`` no longer warn for references extending the lifetime
- of temporaries with side effects. This fixes `Issue 54489
- <https://github.com/llvm/llvm-project/issues/54489>`_.
-- Modified the behavior of ``-Wstrict-prototypes`` and added a new, related
- diagnostic ``-Wdeprecated-non-prototype``. The strict prototypes warning will
- now only diagnose deprecated declarations and definitions of functions
- without a prototype where the behavior in C2x will remain correct. This
- diagnostic remains off by default but is now enabled via ``-pedantic`` due to
- it being a deprecation warning. ``-Wstrict-prototypes`` has no effect in C2x
- or when ``-fno-knr-functions`` is enabled. ``-Wdeprecated-non-prototype``
- will diagnose cases where the deprecated declarations or definitions of a
- function without a prototype will change behavior in C2x. Additionally, it
- will diagnose calls which pass arguments to a function without a prototype.
- This warning is enabled only when the ``-Wdeprecated-non-prototype`` option
- is enabled at the function declaration site, which allows a developer to
- disable the diagnostic for all callers at the point of declaration. This
- diagnostic is grouped under the ``-Wstrict-prototypes`` warning group, but is
- enabled by default. ``-Wdeprecated-non-prototype`` has no effect in C2x or
- when ``-fno-knr-functions`` is enabled.
-- Clang now appropriately issues an error in C when a definition of a function
- without a prototype and with no arguments is an invalid redeclaration of a
- function with a prototype. e.g., ``void f(int); void f() {}`` is now properly
- diagnosed.
-- The ``-Wimplicit-function-declaration`` warning diagnostic now defaults to
- an error in C99 and later. Prior to C2x, it may be downgraded to a warning
- with ``-Wno-error=implicit-function-declaration``, or disabled entirely with
- ``-Wno-implicit-function-declaration``. As of C2x, support for implicit
- function declarations has been removed, and the warning options will have no
- effect.
-- The ``-Wimplicit-int`` warning diagnostic now defaults to an error in C99 and
- later. Prior to C2x, it may be downgraded to a warning with
- ``-Wno-error=implicit-int``, or disabled entirely with ``-Wno-implicit-int``.
- As of C2x, support for implicit int has been removed, and the warning options
- will have no effect. Specifying ``-Wimplicit-int`` in C89 mode will now issue
- warnings instead of being a noop.
-- No longer issue a "declaration specifiers missing, defaulting to int"
- diagnostic in C89 mode because it is not an extension in C89, it was valid
- code. The diagnostic has been removed entirely as it did not have a
- diagnostic group to disable it, but it can be covered wholly by
- ``-Wimplicit-int``.
-- ``-Wmisexpect`` warns when the branch weights collected during profiling
- conflict with those added by ``llvm.expect``.
-- ``-Wthread-safety-analysis`` now considers overloaded compound assignment and
- increment/decrement operators as writing to their first argument, thus
- requiring an exclusive lock if the argument is guarded.
-- ``-Wenum-conversion`` now warns on converting a signed enum of one type to an
- unsigned enum of a different type (or vice versa) rather than
- ``-Wsign-conversion``.
-- Added the ``-Wunreachable-code-generic-assoc`` diagnostic flag (grouped under
- the ``-Wunreachable-code`` flag) which is enabled by default and warns the
- user about ``_Generic`` selection associations which are unreachable because
- the type specified is an array type or a qualified type.
-- Added the ``-Wgnu-line-marker`` diagnostic flag (grouped under the ``-Wgnu``
- flag) which is a portability warning about use of GNU linemarker preprocessor
- directives. Fixes `Issue 55067 <https://github.com/llvm/llvm-project/issues/55067>`_.
-- Using ``#warning``, ``#elifdef`` and ``#elifndef`` that are incompatible with C/C++
- standards before C2x/C++2b are now warned via ``-pedantic``. Additionally,
- on such language mode, ``-Wpre-c2x-compat`` and ``-Wpre-c++2b-compat``
- diagnostic flags report a compatibility issue.
- Fixes `Issue 55306 <https://github.com/llvm/llvm-project/issues/55306>`_.
-- Clang now checks for stack resource exhaustion when recursively parsing
- declarators in order to give a diagnostic before we run out of stack space.
- This fixes `Issue 51642 <https://github.com/llvm/llvm-project/issues/51642>`_.
-- Unknown preprocessor directives in a skipped conditional block are now given
- a typo correction suggestion if the given directive is sufficiently similar
- to another preprocessor conditional directive. For example, if ``#esle``
- appears in a skipped block, we will warn about the unknown directive and
- suggest ``#else`` as an alternative. ``#elifdef`` and ``#elifndef`` are only
- suggested when in C2x or C++2b mode. Fixes
- `Issue 51598 <https://github.com/llvm/llvm-project/issues/51598>`_.
-- The ``-Wdeprecated`` diagnostic will now warn on out-of-line ``constexpr``
- declarations downgraded to definitions in C++1z, in addition to the
- existing warning on out-of-line ``const`` declarations.
-- ``-Wshift-overflow`` will not warn for signed left shifts in C++20 mode
- (and newer), as it will always wrap and never overflow. This fixes
- `Issue 52873 <https://github.com/llvm/llvm-project/issues/52873>`_.
-- When using class templates without arguments, clang now tells developers
- that template arguments are missing in certain contexts.
- This fixes `Issue 55962 <https://github.com/llvm/llvm-project/issues/55962>`_.
-- Printable Unicode characters within `static_assert` messages are no longer
- escaped.
-- The ``-Winfinite-recursion`` diagnostic no longer warns about
- unevaluated operands of a ``typeid`` expression, as they are now
- modeled correctly in the CFG. This fixes
- `Issue 21668 <https://github.com/llvm/llvm-project/issues/21668>`_.
-- ``-Wself-assign``, ``-Wself-assign-overloaded`` and ``-Wself-move`` will
- suggest a fix if the decl being assigned is a parameter that shadows a data
- member of the contained class.
-- Added ``-Winvalid-utf8`` which diagnoses invalid UTF-8 code unit sequences in
- comments.
-- The ``-Wint-conversion`` warning diagnostic for implicit int <-> pointer
- conversions now defaults to an error in all C language modes. It may be
- downgraded to a warning with ``-Wno-error=int-conversion``, or disabled
- entirely with ``-Wno-int-conversion``.
-
Non-comprehensive list of changes in this release
-------------------------------------------------
-- Improve __builtin_dump_struct:
-
- - Support bitfields in struct and union.
- - Improve the dump format, dump both bitwidth(if its a bitfield) and field
- value.
- - Remove anonymous tag locations and flatten anonymous struct members.
- - Beautify dump format, add indent for struct members.
- - Support passing additional arguments to the formatting function, allowing
- use with ``fprintf`` and similar formatting functions.
- - Support use within constant evaluation in C++, if a ``constexpr``
- formatting function is provided.
- - Support formatting of base classes in C++.
- - Support calling a formatting function template in C++, which can provide
- custom formatting for non-aggregate types.
-
-- Previously disabled sanitizer options now enabled by default:
- - ASAN_OPTIONS=detect_stack_use_after_return=1 (only on Linux).
- - MSAN_OPTIONS=poison_in_dtor=1.
-
-- Some type-trait builtins, such as ``__has_trivial_assign``, have been documented
- as deprecated for a while because their semantics don't mix well with post-C++11 type-traits.
- Clang now emits deprecation warnings for them under the flag ``-Wdeprecated-builtins``.
-
New Compiler Flags
------------------
-- Added the ``-fno-knr-functions`` flag to allow users to opt into the C2x
- behavior where a function with an empty parameter list is treated as though
- the parameter list were ``void``. There is no ``-fknr-functions`` or
- ``-fno-no-knr-functions`` flag; this feature cannot be disabled in language
- modes where it is required, such as C++ or C2x.
-- A new ARM pass to workaround Cortex-A57 Erratum 1742098 and Cortex-A72 Erratum
- 1655431 can be enabled using ``-mfix-cortex-a57-aes-1742098`` or
- ``-mfix-cortex-a72-aes-1655431``. The pass is enabled when using either of
- these cpus with ``-mcpu=`` and can be disabled using
- ``-mno-fix-cortex-a57-aes-1742098`` or ``-mno-fix-cortex-a72-aes-1655431``.
-- Added the ``-fexperimental-max-bitint-width=`` option to increase the maximum
- allowed bit width of ``_BitInt`` types beyond the default of 128 bits. Some
- operations, such as division or float-to-integer conversion, on ``_BitInt``
- types with more than 128 bits currently crash clang. This option will be
- removed in the future once clang supports all such operations.
-- Added the ``-print-diagnostic-options`` option, which prints a list of
- warnings the compiler supports.
-- Added the ``-Warray-parameter`` warning. It diagnoses differences between
- array parameters between function redeclarations (arrays of different extents,
- etc). This flag is related to the same flag in GCC, but is different in that
- it does not accept an explicitly- specified warning level and use of this flag
- has no effect on ``-Warray-bounds``.
Deprecated Compiler Flags
-------------------------
@@ -374,188 +67,38 @@ Modified Compiler Flags
Removed Compiler Flags
-------------------------
-- Removed the ``-fno-concept-satisfaction-caching`` flag. The flag was added
- at the time when the draft of C++20 standard did not permit caching of
- atomic constraints. The final standard permits such caching, see
- `WG21 P2104R0 <http://wg21.link/p2104r0>`_.
New Pragmas in Clang
--------------------
-- Added support for MSVC's ``#pragma function``, which tells the compiler to
- generate calls to functions listed in the pragma instead of using the
- builtins.
-- Added support for MSVC's ``#pragma alloc_text``. The pragma names the code
- section functions are placed in. The pragma only applies to functions with
- C linkage.
-- Added support for an empty optimization list for MSVC's ``#pragma optimize``.
- The pragma takes a list of optimizations to turn on or off which applies to
- all functions following the pragma. At the moment, only an empty list is
- supported.
-
- ...
Attribute Changes in Clang
--------------------------
-- Added support for parameter pack expansion in ``clang::annotate``.
-
-- The ``overloadable`` attribute can now be written in all of the syntactic
- locations a declaration attribute may appear.
- This fixes `Issue 53805 <https://github.com/llvm/llvm-project/issues/53805>`_.
-
-- Improved namespace attributes handling:
-
- - Handle GNU attributes before a namespace identifier and subsequent
- attributes of different kinds.
- - Emit error on GNU attributes for a nested namespace definition.
-
-- Statement attributes ``[[clang::noinline]]`` and ``[[clang::always_inline]]``
- can be used to control inlining decisions at callsites.
-
-- ``#pragma clang attribute push`` now supports multiple attributes within a single directive.
-
-- The ``__declspec(naked)`` attribute can no longer be written on a member
- function in Microsoft compatibility mode, matching the behavior of cl.exe.
-
-- Attribute ``no_builtin`` should now affect the generated code. It now disables
- builtins (corresponding to the specific names listed in the attribute) in the
- body of the function the attribute is on.
-
-- When the ``weak`` attribute is applied to a const qualified variable clang no longer
- tells the backend it is allowed to optimize based on initializer value.
-
-- Added the ``clang::annotate_type`` attribute, which can be used to add
- annotations to types (see documentation for details).
-
-- Added half float to types that can be represented by ``__attribute__((mode(XX)))``.
-
-- The ``format`` attribute can now be applied to non-variadic functions. The
- format string must correctly format the fixed parameter types of the function.
- Using the attribute this way emits a GCC compatibility diagnostic.
-
-- Support was added for ``__attribute__((function_return("thunk-extern")))``
- to X86 to replace ``ret`` instructions with ``jmp __x86_return_thunk``. The
- corresponding attribute to disable this,
- ``__attribute__((function_return("keep")))`` was added. This is intended to
- be used by the Linux kernel to mitigate RETBLEED.
-
-- Ignore the `__preferred_name__` attribute when writing for C++20 module interfaces.
- This is a short-term workaround intentionally since clang doesn't take care of the
- serialization and deserialization of `__preferred_name__`. See
- https://github.com/llvm/llvm-project/issues/56490 for example.
-
Windows Support
---------------
-- Add support for MSVC-compatible ``/JMC``/``/JMC-`` flag in clang-cl (supports
- X86/X64/ARM/ARM64). ``/JMC`` could only be used when ``/Zi`` or ``/Z7`` is
- turned on. With this addition, clang-cl can be used in Visual Studio for the
- JustMyCode feature. Note, you may need to manually add ``/JMC`` as additional
- compile options in the Visual Studio since it currently assumes clang-cl does not support ``/JMC``.
-
-- Implemented generation of SEH unwind information on ARM. (C++ exception
- handling in MSVC mode is still unimplemented though.)
-
-- Switched MinGW mode on ARM to use SEH instead of DWARF for unwind information.
-
AIX Support
-----------
-- The driver no longer adds ``-mignore-xcoff-visibility`` by default for AIX
- targets when no other visibility command-line options are in effect, as
- ignoring hidden visibility can silently have undesirable side effects (e.g
- when libraries depend on visibility to hide non-ABI facing entities). The
- ``-mignore-xcoff-visibility`` option can be manually specified on the
- command-line to recover the previous behavior if desired.
-
C Language Changes in Clang
---------------------------
C2x Feature Support
-------------------
-- Implemented `WG14 N2674 The noreturn attribute <http://www.open-std.org/jtc1/sc22/wg14/www/docs/n2764.pdf>`_.
-- Implemented `WG14 N2935 Make false and true first-class language features <http://www.open-std.org/jtc1/sc22/wg14/www/docs/n2935.pdf>`_.
-- Implemented `WG14 N2763 Adding a fundamental type for N-bit integers <http://www.open-std.org/jtc1/sc22/wg14/www/docs/n2763.pdf>`_.
-- Implemented `WG14 N2775 Literal suffixes for bit-precise integers <http://www.open-std.org/jtc1/sc22/wg14/www/docs/n2775.pdf>`_.
-- Implemented the ``*_WIDTH`` macros to complete support for
- `WG14 N2412 Two's complement sign representation for C2x <https://www9.open-std.org/jtc1/sc22/wg14/www/docs/n2412.pdf>`_.
-- Implemented `WG14 N2418 Adding the u8 character prefix <http://www.open-std.org/jtc1/sc22/wg14/www/docs/n2418.pdf>`_.
-- Removed support for implicit function declarations. This was a C89 feature
- that was removed in C99, but cannot be supported in C2x because it requires
- support for functions without prototypes, which no longer exist in C2x.
-- Implemented `WG14 N2841 No function declarators without prototypes <https://www9.open-std.org/jtc1/sc22/wg14/www/docs/n2841.htm>`_
- and `WG14 N2432 Remove support for function definitions with identifier lists <https://www9.open-std.org/jtc1/sc22/wg14/www/docs/n2432.pdf>`_.
-- Implemented `WG14 N2836 Identifier Syntax using Unicode Standard Annex 31 <https://www.open-std.org/jtc1/sc22/wg14/www/docs/n2836.pdf>`_.
-
C++ Language Changes in Clang
-----------------------------
-- Improved ``-O0`` code generation for calls to ``std::move``, ``std::forward``,
- ``std::move_if_noexcept``, ``std::addressof``, and ``std::as_const``. These
- are now treated as compiler builtins and implemented directly, rather than
- instantiating the definition from the standard library.
-- Fixed mangling of nested dependent names such as ``T::a::b``, where ``T`` is a
- template parameter, to conform to the Itanium C++ ABI and be compatible with
- GCC. This breaks binary compatibility with code compiled with earlier versions
- of clang; use the ``-fclang-abi-compat=14`` option to get the old mangling.
-- Preprocessor character literals with a ``u8`` prefix are now correctly treated as
- unsigned character literals. This fixes `Issue 54886 <https://github.com/llvm/llvm-project/issues/54886>`_.
-- Stopped allowing constraints on non-template functions to be compliant with
- dcl.decl.general p4.
-- Improved ``copy elision`` optimization. It's possible to apply ``NRVO`` for an object if at the moment when
- any return statement of this object is executed, the ``return slot`` won't be occupied by another object.
-
-
C++20 Feature Support
^^^^^^^^^^^^^^^^^^^^^
-- Diagnose consteval and constexpr issues that happen at namespace scope. This
- partially addresses `Issue 51593 <https://github.com/llvm/llvm-project/issues/51593>`_.
-- No longer attempt to evaluate a consteval UDL function call at runtime when
- it is called through a template instantiation. This fixes
- `Issue 54578 <https://github.com/llvm/llvm-project/issues/54578>`_.
-
-- Implemented ``__builtin_source_location()``, which enables library support
- for ``std::source_location``.
-
-- The mangling scheme for C++20 modules has incompatibly changed. The
- initial mangling was discovered not to be reversible, and the weak
- ownership design decision did not give the backwards compatibility
- that was hoped for. C++20 since added ``extern "C++"`` semantics
- that can be used for such compatibility. The demangler now demangles
- symbols with named module attachment.
-
-- Enhanced the support for C++20 Modules, including: Partitions,
- Reachability, Header Unit and ``extern "C++"`` semantics.
-
-- Implemented `P1103R3: Merging Modules <https://wg21.link/P1103R3>`_.
-- Implemented `P1779R3: ABI isolation for member functions <https://wg21.link/P1779R3>`_.
-- Implemented `P1874R1: Dynamic Initialization Order of Non-Local Variables in Modules <https://wg21.link/P1874R1>`_.
-- Partially implemented `P1815R2: Translation-unit-local entities <https://wg21.link/P1815R2>`_.
-
-- As per "Conditionally Trivial Special Member Functions" (P0848), it is
- now possible to overload destructors using concepts. Note that the rest
- of the paper about other special member functions is not yet implemented.
C++2b Feature Support
^^^^^^^^^^^^^^^^^^^^^
-- Implemented `P2128R6: Multidimensional subscript operator <https://wg21.link/P2128R6>`_.
-- Implemented `P0849R8: auto(x): decay-copy in the language <https://wg21.link/P0849R8>`_.
-- Implemented `P2242R3: Non-literal variables (and labels and gotos) in constexpr functions <https://wg21.link/P2242R3>`_.
-- Implemented `LWG3659: Consider ATOMIC_FLAG_INIT undeprecation <https://wg21.link/LWG3659>`_.
-- Implemented `P2290R3 Delimited escape sequences <https://wg21.link/P2290R3>`_.
- This feature is available as an extension in all C and C++ language modes.
-- Implemented `P2071R2 Named universal character escapes <https://wg21.link/P2290R2>`_.
- This feature is available as an extension in all C and C++ language modes.
-- Implemented `P2327R1 De-deprecating volatile compound operations <https://wg21.link/P2327R1>`_
-
CUDA/HIP Language Changes in Clang
----------------------------------
-- Added `__noinline__` as a keyword to avoid diagnostics due to usage of
- `__attribute__((__noinline__))` in CUDA/HIP programs.
-
Objective-C Language Changes in Clang
-------------------------------------
@@ -567,33 +110,8 @@ OpenCL C Language Changes in Clang
ABI Changes in Clang
--------------------
-- 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=14.0``.
-- When compiling C for ARM or AArch64, a zero-length bitfield in a ``struct``
- (e.g. ``int : 0``) no longer prevents the structure from being considered a
- homogeneous floating-point or vector aggregate. The new behavior agrees with
- the AAPCS specification, and matches the similar bug fix in GCC 12.1.
-- Targeting AArch64, since D127209 LLVM now only preserves the z8-z23
- and p4-p15 registers across a call if the registers z0-z7 or p0-p3 are
- used to pass data into or out of a subroutine. The new behavior
- matches the AAPCS. Previously LLVM preserved z8-z23 and p4-p15 across
- a call if the callee had an SVE type anywhere in its signature. This
- would cause an incorrect use of the caller-preserved z8-z23 and p4-p15
- ABI for example if the 9th argument or greater were the first SVE type
- in the signature of a function.
-- All copy constructors can now be trivial if they are not user-provided,
- regardless of the type qualifiers of the argument of the defaulted constructor,
- fixing dr2171.
- You can switch back to the old ABI behavior with the flag:
- ``-fclang-abi-compat=14.0``.
-
OpenMP Support in Clang
-----------------------
-* Added the support for ``atomic compare`` and ``atomic compare capture``
- (``-fopenmp-version=51`` is required).
...
@@ -605,120 +123,35 @@ CUDA Support in Clang
X86 Support in Clang
--------------------
-- Support ``-mharden-sls=[none|all|return|indirect-jmp]`` for straight-line
- speculation hardening.
-- Support for the ``_Float16`` type has been added for all targets with SSE2.
- When AVX512-FP16 is not available, arithmetic on ``_Float16`` is emulated
- using ``float``.
-- Added the ``-m[no-]rdpru`` flag to enable/disable the RDPRU instruction
- provided by AMD Zen2 and later processors. Defined intrinsics for using
- this instruction (see rdpruintrin.h).
-- Support ``-mstack-protector-guard-symbol=[SymbolName]`` to use the given
- symbol for addressing the stack protector guard.
-- ``-mfunction-return=thunk-extern`` support was added to clang for x86. This
- will be used by Linux kernel mitigations for RETBLEED. The corresponding flag
- ``-mfunction-return=keep`` may be appended to disable the feature.
-
DWARF Support in Clang
----------------------
-- clang now adds DWARF information for inline strings in C/C++ programs,
- allowing ``line:column`` symbolization of strings. Some debugging programs may
- require updating, as this takes advantage of DWARF ``DW_TAG_variable``
- structures *without* a ``DW_AT_name`` field, which is valid DWARF, but may be
- handled incorrectly by some software (e.g. new failures with incorrect
- assertions).
-
Arm and AArch64 Support in Clang
--------------------------------
-- clang now supports the Cortex-M85 CPU, which can be chosen with
- `-mcpu=cortex-m85`. By default, this has PACBTI turned on, but it can be
- disabled with `-mcpu=cortex-m85+nopacbti`.
-
Floating Point Support in Clang
-------------------------------
Internal API Changes
--------------------
-- Added a new attribute flag ``AcceptsExprPack`` that when set allows
- expression pack expansions in the parsed arguments of the corresponding
- attribute. Additionally it introduces delaying of attribute arguments, adding
- common handling for creating attributes that cannot be fully initialized
- prior to template instantiation.
-
Build System Changes
--------------------
-* CMake ``-DCLANG_DEFAULT_PIE_ON_LINUX=ON`` is now the default. This is used by
- linux-gnu systems to decide whether ``-fPIE -pie`` is the default (instead of
- ``-fno-pic -no-pie``). This matches GCC installations on many Linux distros.
- Note: linux-android and linux-musl always default to ``-fPIE -pie``, ignoring
- this variable. ``-DCLANG_DEFAULT_PIE_ON_LINUX`` may be removed in the future.
-
AST Matchers
------------
-- Expanded ``isInline`` narrowing matcher to support C++17 inline variables.
-
-- Added ``forEachTemplateArgument`` matcher which creates a match every
- time a ``templateArgument`` matches the matcher supplied to it.
-
-- Added ``objcStringLiteral`` matcher which matches ObjectiveC String
- literal expressions.
-
clang-format
------------
-- **Important change**: Renamed ``IndentRequires`` to ``IndentRequiresClause``
- and changed the default for all styles from ``false`` to ``true``.
-
-- Reworked and improved handling of concepts and requires. Added the
- ``RequiresClausePosition`` option as part of that.
-
-- Changed ``BreakBeforeConceptDeclarations`` from ``Boolean`` to an enum.
-
-- Option ``InsertBraces`` has been added to insert optional braces after control
- statements.
-
clang-extdef-mapping
--------------------
-- clang-extdef-mapping now accepts .ast files as input. This is faster than to
- recompile the files from sources when extracting method definitons. This can
- be really beneficial when creating .ast files for input to the clang-static-analyzer.
-
libclang
--------
-- The soversion for libclang will now change for each new LLVM major release. This matches
- the behavior of clang <= 13.
-
Static Analyzer
---------------
-- `New CTU implementation
- <https://discourse.llvm.org/t/rfc-much-faster-cross-translation-unit-ctu-analysis-implementation/61728>`_
- that keeps the slow-down around 2x compared to the single-TU analysis, even
- in case of complex C++ projects. Still, it finds the majority of the "old"
- CTU findings. Besides, not more than ~3% of the bug reports are lost compared
- to single-TU analysis, the lost reports are highly likely to be false
- positives.
-
-- Added a new checker ``alpha.unix.cstring.UninitializedRead`` this will check for uninitialized reads
- from common memory copy/manipulation functions such as ``memcpy``, ``mempcpy``, ``memmove``, ``memcmp``, `
- `strcmp``, ``strncmp``, ``strcpy``, ``strlen``, ``strsep`` and many more. Although
- this checker currently is in list of alpha checkers due to a false positive.
-
-- Added a new checker ``alpha.unix.Errno``. This can find the first read
- of ``errno`` after successful standard function calls, such use of ``errno``
- could be unsafe.
-
-- Deprecate the ``-analyzer-store region`` and
- ``-analyzer-opt-analyze-nested-blocks`` analyzer flags.
- These flags are still accepted, but a warning will be displayed.
- These flags will be rejected, thus turned into a hard error starting with
- ``clang-16``.
.. _release-notes-ubsan: