Bump the trunk major version to 16
This commit is contained in:
parent
1f8ae9d7e7
commit
809855b56f
|
@ -53,7 +53,6 @@ Inlay hints
|
||||||
|
|
||||||
Diagnostics
|
Diagnostics
|
||||||
^^^^^^^^^^^
|
^^^^^^^^^^^
|
||||||
- Improved Fix-its of some clang-tidy checks when applied with clangd.
|
|
||||||
|
|
||||||
Semantic Highlighting
|
Semantic Highlighting
|
||||||
^^^^^^^^^^^^^^^^^^^^^
|
^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
@ -97,178 +96,15 @@ The improvements are...
|
||||||
Improvements to clang-tidy
|
Improvements to clang-tidy
|
||||||
--------------------------
|
--------------------------
|
||||||
|
|
||||||
- Added trace code to help narrow down any checks and the relevant source code
|
|
||||||
that result in crashes.
|
|
||||||
|
|
||||||
- Clang-tidy now consideres newlines as separators of single elements in the `Checks` section in
|
|
||||||
`.clang-tidy` configuration files. Where previously a comma had to be used to distinguish elements in
|
|
||||||
this list from each other, newline characters now also work as separators in the parsed YAML. That
|
|
||||||
means it is advised to use YAML's block style initiated by the pipe character `|` for the `Checks`
|
|
||||||
section in order to benefit from the easier syntax that works without commas.
|
|
||||||
|
|
||||||
- Fixed a regression introduced in clang-tidy 14.0.0, which prevented NOLINTs
|
|
||||||
from suppressing diagnostics associated with macro arguments. This fixes
|
|
||||||
`Issue 55134 <https://github.com/llvm/llvm-project/issues/55134>`_.
|
|
||||||
|
|
||||||
- Added an option -verify-config which will check the config file to ensure each
|
|
||||||
`Checks` and `CheckOptions` entries are recognised.
|
|
||||||
|
|
||||||
- .clang-tidy files can now use the more natural dictionary syntax for specifying `CheckOptions`.
|
|
||||||
|
|
||||||
New checks
|
New checks
|
||||||
^^^^^^^^^^
|
^^^^^^^^^^
|
||||||
|
|
||||||
- New :doc:`bugprone-shared-ptr-array-mismatch <clang-tidy/checks/bugprone/shared-ptr-array-mismatch>` check.
|
|
||||||
|
|
||||||
Finds initializations of C++ shared pointers to non-array type that are initialized with an array.
|
|
||||||
|
|
||||||
- New :doc:`bugprone-unchecked-optional-access
|
|
||||||
<clang-tidy/checks/bugprone/unchecked-optional-access>` check.
|
|
||||||
|
|
||||||
Warns when the code is unwrapping a `std::optional<T>`, `absl::optional<T>`,
|
|
||||||
or `base::Optional<T>` object without assuring that it contains a value.
|
|
||||||
|
|
||||||
- New :doc:`misc-confusable-identifiers <clang-tidy/checks/misc/confusable-identifiers>` check.
|
|
||||||
|
|
||||||
Detects confusable Unicode identifiers.
|
|
||||||
|
|
||||||
- New :doc:`bugprone-assignment-in-if-condition
|
|
||||||
<clang-tidy/checks/bugprone/assignment-in-if-condition>` check.
|
|
||||||
|
|
||||||
Warns when there is an assignment within an if statement condition expression.
|
|
||||||
|
|
||||||
- New :doc:`misc-const-correctness
|
|
||||||
<clang-tidy/checks/misc/const-correctness>` check.
|
|
||||||
|
|
||||||
Detects unmodified local variables and suggest adding ``const`` if the transformation is possible.
|
|
||||||
|
|
||||||
- New :doc:`modernize-macro-to-enum
|
|
||||||
<clang-tidy/checks/modernize/macro-to-enum>` check.
|
|
||||||
|
|
||||||
Replaces groups of adjacent macros with an unscoped anonymous enum.
|
|
||||||
|
|
||||||
- New :doc:`portability-std-allocator-const <clang-tidy/checks/portability/std-allocator-const>` check.
|
|
||||||
|
|
||||||
Report use of ``std::vector<const T>`` (and similar containers of const
|
|
||||||
elements). These are not allowed in standard C++ due to undefined
|
|
||||||
``std::allocator<const T>``. They do not compile with libstdc++ or MSVC.
|
|
||||||
Future libc++ will remove the extension (`D120996
|
|
||||||
<https://reviews.llvm.org/D120996>`).
|
|
||||||
|
|
||||||
New check aliases
|
New check aliases
|
||||||
^^^^^^^^^^^^^^^^^
|
^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
- New alias :doc:`cppcoreguidelines-macro-to-enum
|
|
||||||
<clang-tidy/checks/cppcoreguidelines/macro-to-enum>` to :doc:`modernize-macro-to-enum
|
|
||||||
<clang-tidy/checks/modernize/macro-to-enum>` was added.
|
|
||||||
|
|
||||||
Changes in existing checks
|
Changes in existing checks
|
||||||
^^^^^^^^^^^^^^^^^^^^^^^^^^
|
^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
- Fixed nonsensical suggestion of :doc:`altera-struct-pack-align
|
|
||||||
<clang-tidy/checks/altera/struct-pack-align>` check for empty structs.
|
|
||||||
|
|
||||||
- Fixed a false positive in :doc:`bugprone-branch-clone
|
|
||||||
<clang-tidy/checks/bugprone/branch-clone>` when the branches
|
|
||||||
involve unknown expressions.
|
|
||||||
|
|
||||||
- Fixed some false positives in :doc:`bugprone-infinite-loop
|
|
||||||
<clang-tidy/checks/bugprone/infinite-loop>` involving dependent expressions.
|
|
||||||
|
|
||||||
- Fixed a crash in :doc:`bugprone-sizeof-expression
|
|
||||||
<clang-tidy/checks/bugprone/sizeof-expression>` when `sizeof(...)` is
|
|
||||||
compared against a `__int128_t`.
|
|
||||||
|
|
||||||
- Fixed bugs in :doc:`bugprone-use-after-move
|
|
||||||
<clang-tidy/checks/bugprone/use-after-move>`:
|
|
||||||
|
|
||||||
- Treat a move in a lambda capture as happening in the function that defines
|
|
||||||
the lambda, not within the body of the lambda (as we were previously doing
|
|
||||||
erroneously).
|
|
||||||
|
|
||||||
- Don't emit an erroneous warning on self-moves.
|
|
||||||
|
|
||||||
- Improved :doc:`cert-dcl58-cpp
|
|
||||||
<clang-tidy/checks/cert/dcl58-cpp>` check.
|
|
||||||
|
|
||||||
The check now detects explicit template specializations that are handled specially.
|
|
||||||
|
|
||||||
- Made :doc:`cert-oop57-cpp <clang-tidy/checks/cert/oop57-cpp>` more sensitive
|
|
||||||
by checking for an arbitrary expression in the second argument of ``memset``.
|
|
||||||
|
|
||||||
- Made the fix-it of :doc:`cppcoreguidelines-init-variables
|
|
||||||
<clang-tidy/checks/cppcoreguidelines/init-variables>` use ``false`` to initialize
|
|
||||||
boolean variables.
|
|
||||||
|
|
||||||
- Improved :doc:`cppcoreguidelines-prefer-member-initializer
|
|
||||||
<clang-tidy/checks/cppcoreguidelines/prefer-member-initializer>` check.
|
|
||||||
|
|
||||||
Fixed an issue when there was already an initializer in the constructor and
|
|
||||||
the check would try to create another initializer for the same member.
|
|
||||||
|
|
||||||
- Fixed a false positive in :doc:`cppcoreguidelines-virtual-class-destructor
|
|
||||||
<clang-tidy/checks/cppcoreguidelines/virtual-class-destructor>` involving
|
|
||||||
``final`` classes. The check will not diagnose classes marked ``final``, since
|
|
||||||
those cannot be used as base classes, consequently, they can not violate the
|
|
||||||
rule.
|
|
||||||
|
|
||||||
- Fixed a crash in :doc:`llvmlibc-callee-namespace
|
|
||||||
<clang-tidy/checks/llvmlibc/callee-namespace>` when executing for C++ code
|
|
||||||
that contain calls to advanced constructs, e.g. overloaded operators.
|
|
||||||
|
|
||||||
- Fixed false positives in :doc:`misc-redundant-expression
|
|
||||||
<clang-tidy/checks/misc/redundant-expression>`:
|
|
||||||
|
|
||||||
- Fixed a false positive involving overloaded comparison operators.
|
|
||||||
|
|
||||||
- Fixed a false positive involving assignments in
|
|
||||||
conditions. This fixes `Issue 35853 <https://github.com/llvm/llvm-project/issues/35853>`_.
|
|
||||||
|
|
||||||
- Fixed a false positive in :doc:`misc-unused-parameters
|
|
||||||
<clang-tidy/checks/misc/unused-parameters>`
|
|
||||||
where invalid parameters were implicitly being treated as being unused.
|
|
||||||
This fixes `Issue 56152 <https://github.com/llvm/llvm-project/issues/56152>`_.
|
|
||||||
|
|
||||||
- Fixed false positives in :doc:`misc-unused-using-decls
|
|
||||||
<clang-tidy/checks/misc/unused-using-decls>` where `using` statements bringing
|
|
||||||
operators into the scope where incorrectly marked as unused.
|
|
||||||
This fixes `issue 55095 <https://github.com/llvm/llvm-project/issues/55095>`_.
|
|
||||||
|
|
||||||
- Fixed a false positive in :doc:`modernize-deprecated-headers
|
|
||||||
<clang-tidy/checks/modernize/deprecated-headers>` involving including
|
|
||||||
C header files from C++ files wrapped by ``extern "C" { ... }`` blocks.
|
|
||||||
Such includes will be ignored by now.
|
|
||||||
By default now it doesn't warn for including deprecated headers from header
|
|
||||||
files, since that header file might be used from C source files. By passing
|
|
||||||
the ``CheckHeaderFile=true`` option if header files of the project only
|
|
||||||
included by C++ source files.
|
|
||||||
|
|
||||||
- Improved :doc:`performance-inefficient-vector-operation
|
|
||||||
<clang-tidy/checks/performance/inefficient-vector-operation>` to work when
|
|
||||||
the vector is a member of a structure.
|
|
||||||
|
|
||||||
- Fixed a crash in :doc:`performance-unnecessary-value-param
|
|
||||||
<clang-tidy/checks/performance/unnecessary-value-param>` when the specialization
|
|
||||||
template has an unnecessary value parameter. Removed the fix for a template.
|
|
||||||
|
|
||||||
- Fixed a crash in :doc:`readability-const-return-type
|
|
||||||
<clang-tidy/checks/readability/const-return-type>` when a pure virtual function
|
|
||||||
overrided has a const return type. Removed the fix for a virtual function.
|
|
||||||
|
|
||||||
- Skipped addition of extra parentheses around member accesses (``a.b``) in fix-it for
|
|
||||||
:doc:`readability-container-data-pointer <clang-tidy/checks/readability/container-data-pointer>`.
|
|
||||||
|
|
||||||
- Fixed incorrect suggestions for :doc:`readability-container-size-empty
|
|
||||||
<clang-tidy/checks/readability/container-size-empty>` when smart pointers are involved.
|
|
||||||
|
|
||||||
- Fixed a false positive in :doc:`readability-non-const-parameter
|
|
||||||
<clang-tidy/checks/readability/non-const-parameter>` when the parameter is
|
|
||||||
referenced by an lvalue.
|
|
||||||
|
|
||||||
- Expanded :doc:`readability-simplify-boolean-expr
|
|
||||||
<clang-tidy/checks/readability/simplify-boolean-expr>` to simplify expressions
|
|
||||||
using DeMorgan's Theorem.
|
|
||||||
|
|
||||||
Removed checks
|
Removed checks
|
||||||
^^^^^^^^^^^^^^
|
^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
@ -290,7 +126,5 @@ The improvements are...
|
||||||
Improvements to pp-trace
|
Improvements to pp-trace
|
||||||
------------------------
|
------------------------
|
||||||
|
|
||||||
- Added `HashLoc` information to `InclusionDirective` callback output.
|
|
||||||
|
|
||||||
Clang-tidy Visual Studio plugin
|
Clang-tidy Visual Studio plugin
|
||||||
-------------------------------
|
-------------------------------
|
||||||
|
|
|
@ -47,324 +47,17 @@ sections with improvements to Clang's support for those languages.
|
||||||
Major New Features
|
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
|
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
|
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
|
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
|
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
|
Deprecated Compiler Flags
|
||||||
-------------------------
|
-------------------------
|
||||||
|
@ -374,188 +67,38 @@ Modified Compiler Flags
|
||||||
|
|
||||||
Removed 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
|
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
|
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
|
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
|
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
|
C Language Changes in Clang
|
||||||
---------------------------
|
---------------------------
|
||||||
|
|
||||||
C2x Feature Support
|
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
|
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
|
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
|
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
|
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
|
Objective-C Language Changes in Clang
|
||||||
-------------------------------------
|
-------------------------------------
|
||||||
|
|
||||||
|
@ -567,33 +110,8 @@ OpenCL C Language Changes in Clang
|
||||||
ABI 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
|
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
|
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
|
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
|
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
|
Floating Point Support in Clang
|
||||||
-------------------------------
|
-------------------------------
|
||||||
|
|
||||||
Internal API Changes
|
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
|
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
|
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
|
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
|
||||||
--------------------
|
--------------------
|
||||||
|
|
||||||
- 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
|
libclang
|
||||||
--------
|
--------
|
||||||
|
|
||||||
- The soversion for libclang will now change for each new LLVM major release. This matches
|
|
||||||
the behavior of clang <= 13.
|
|
||||||
|
|
||||||
Static Analyzer
|
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:
|
.. _release-notes-ubsan:
|
||||||
|
|
||||||
|
|
|
@ -49,9 +49,9 @@ copyright = u'2013-%d, Analyzer Team' % date.today().year
|
||||||
# built documents.
|
# built documents.
|
||||||
#
|
#
|
||||||
# The short version.
|
# The short version.
|
||||||
version = '15'
|
version = '16'
|
||||||
# The full version, including alpha/beta/rc tags.
|
# The full version, including alpha/beta/rc tags.
|
||||||
release = '15'
|
release = '16'
|
||||||
|
|
||||||
# The language for content autogenerated by Sphinx. Refer to documentation
|
# The language for content autogenerated by Sphinx. Refer to documentation
|
||||||
# for a list of supported languages.
|
# for a list of supported languages.
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
=========================================
|
=========================================
|
||||||
Libc++ 15.0.0 (In-Progress) Release Notes
|
Libc++ 16.0.0 (In-Progress) Release Notes
|
||||||
=========================================
|
=========================================
|
||||||
|
|
||||||
.. contents::
|
.. contents::
|
||||||
|
@ -10,7 +10,7 @@ Written by the `Libc++ Team <https://libcxx.llvm.org>`_
|
||||||
|
|
||||||
.. warning::
|
.. warning::
|
||||||
|
|
||||||
These are in-progress notes for the upcoming libc++ 15 release.
|
These are in-progress notes for the upcoming libc++ 16 release.
|
||||||
Release notes for previous releases can be found on
|
Release notes for previous releases can be found on
|
||||||
`the Download Page <https://releases.llvm.org/download.html>`_.
|
`the Download Page <https://releases.llvm.org/download.html>`_.
|
||||||
|
|
||||||
|
@ -18,7 +18,7 @@ Introduction
|
||||||
============
|
============
|
||||||
|
|
||||||
This document contains the release notes for the libc++ C++ Standard Library,
|
This document contains the release notes for the libc++ C++ Standard Library,
|
||||||
part of the LLVM Compiler Infrastructure, release 15.0.0. Here we describe the
|
part of the LLVM Compiler Infrastructure, release 16.0.0. Here we describe the
|
||||||
status of libc++ in some detail, including major improvements from the previous
|
status of libc++ in some detail, including major improvements from the previous
|
||||||
release and new feature work. For the general LLVM release notes, see `the LLVM
|
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
|
documentation <https://llvm.org/docs/ReleaseNotes.html>`_. All LLVM releases may
|
||||||
|
@ -32,237 +32,23 @@ main Libc++ web page, this document applies to the *next* release, not
|
||||||
the current one. To see the release notes for a specific release, please
|
the current one. To see the release notes for a specific release, please
|
||||||
see the `releases page <https://llvm.org/releases/>`_.
|
see the `releases page <https://llvm.org/releases/>`_.
|
||||||
|
|
||||||
What's New in Libc++ 15.0.0?
|
What's New in Libc++ 16.0.0?
|
||||||
============================
|
============================
|
||||||
|
|
||||||
The main focus of the libc++ team has been to implement new C++20 and C++23
|
|
||||||
features.
|
|
||||||
|
|
||||||
The C++20 ``format`` library is feature complete, but not all Standard LWG
|
|
||||||
issues have been addressed. Since it is expected that at least one of these
|
|
||||||
issues will cause an ABI break the ``format`` library is considered
|
|
||||||
experimental.
|
|
||||||
|
|
||||||
The C++20 ``ranges`` library has progressed a lot since the last release and is
|
|
||||||
almost complete. The ``ranges`` library is considered experimental.
|
|
||||||
|
|
||||||
|
|
||||||
Implemented Papers
|
Implemented Papers
|
||||||
------------------
|
------------------
|
||||||
|
|
||||||
- P0627R6 - Function to mark unreachable code
|
|
||||||
- P1165R1 - Make stateful allocator propagation more consistent for ``operator+(basic_string)``
|
|
||||||
- P0674R1 - Support arrays in ``make_shared`` and ``allocate_shared``
|
|
||||||
- P0980R1 - Making ``std::string`` constexpr
|
|
||||||
- P2216R3 - ``std::format`` improvements
|
|
||||||
- P0174R2 - Deprecating Vestigial Library Parts in C++17
|
|
||||||
- N4190 - Removing ``auto_ptr``, ``random_shuffle()``, And Old ``<functional>`` Stuff
|
|
||||||
- P0154R1 - Hardware inference size
|
|
||||||
- P0618R0 - Deprecating ``<codecvt>``
|
|
||||||
- P2418R2 - Add support for ``std::generator``-like types to ``std::format``
|
|
||||||
- LWG3659 - Consider ``ATOMIC_FLAG_INIT`` undeprecation
|
|
||||||
- P1423R3 - ``char8_t`` backward compatibility remediation
|
|
||||||
|
|
||||||
- Marked the following papers as "Complete" (note that some of those might have
|
|
||||||
been implemented in a previous release but not marked as such):
|
|
||||||
|
|
||||||
- P1207R4 - Movability of Single-pass Iterators
|
|
||||||
- P1474R1 - Helpful pointers for ``ContiguousIterator``
|
|
||||||
- P1522R1 - Iterator Difference Type and Integer Overflow
|
|
||||||
- P1523R1 - Views and Size Types
|
|
||||||
- P1456R1 - Move-only views
|
|
||||||
- P1870R1 - ``forwarding-range`` is too subtle
|
|
||||||
- P1878R1 - Constraining Readable Types
|
|
||||||
- P1970R2 - Consistency for ``size()`` functions: Add ``ranges::ssize``
|
|
||||||
- P1983R0 - Wording for GB301, US296, US292, US291, and US283
|
|
||||||
|
|
||||||
Improvements and New Features
|
Improvements and New Features
|
||||||
-----------------------------
|
-----------------------------
|
||||||
|
|
||||||
- ``std::pop_heap`` now uses an algorithm known as "bottom-up heapsort" or
|
|
||||||
"heapsort with bounce" to reduce the number of comparisons, and rearranges
|
|
||||||
elements using move-assignment instead of ``std::swap``.
|
|
||||||
|
|
||||||
- Libc++ now supports a variety of assertions that can be turned on to help catch
|
|
||||||
undefined behavior in user code. This new support is now separate from the old
|
|
||||||
(and incomplete) Debug Mode. Vendors can select whether the library they ship
|
|
||||||
should include assertions or not by default. For details, see
|
|
||||||
:ref:`the documentation <assertions-mode>` about this new feature.
|
|
||||||
|
|
||||||
- Clang now implements the ``-fexperimental-library`` flag. This flag can be used to
|
|
||||||
enable experimental library features such as TSes and other in-progress work like
|
|
||||||
``<ranges>`` and ``<format>``. Using this flag makes it unnecessary to manually link
|
|
||||||
against ``libc++experimental.a`` -- just use ``-fexperimental-library`` and the
|
|
||||||
compiler will do what's needed to make experimental features work. However, be
|
|
||||||
aware that experimental features are not stable!
|
|
||||||
|
|
||||||
- The implementation of the function ``std::to_chars`` for integral types using
|
|
||||||
base 10 has moved from the dylib to the header. This means the function no
|
|
||||||
longer has a minimum deployment target.
|
|
||||||
|
|
||||||
- The performance for ``std::to_chars``, for integral types using base 2, 8,
|
|
||||||
10, or 16 has been improved.
|
|
||||||
|
|
||||||
- The functions ``std::from_chars`` and ``std::to_chars`` now have 128-bit integral
|
|
||||||
support.
|
|
||||||
|
|
||||||
- The format functions (``std::format``, ``std::format_to``, ``std::format_to_n``, and
|
|
||||||
``std::formatted_size``) now validate the format string at compile time.
|
|
||||||
When the format string is invalid this will make the code ill-formed instead
|
|
||||||
of throwing an exception at run-time. (This does not affect the ``v``
|
|
||||||
functions.)
|
|
||||||
|
|
||||||
- All format functions in ``<format>`` allow the usage of non-copyable types as
|
|
||||||
argument for the formatting functions. This change causes bit fields to become
|
|
||||||
invalid arguments for the formatting functions.
|
|
||||||
|
|
||||||
- The ``_LIBCPP_ENABLE_CXX20_REMOVED_ALLOCATOR_VOID_SPECIALIZATION`` macro has been added to allow
|
|
||||||
re-enabling the ``allocator<void>`` specialization. When used in conjunction with
|
|
||||||
``_LIBCPP_ENABLE_CXX20_REMOVED_ALLOCATOR_MEMBERS``, this ensures that the members of
|
|
||||||
``allocator<void>`` removed in C++20 can be accessed.
|
|
||||||
|
|
||||||
- ``boyer_moore_searcher`` and ``boyer_moore_horspool_searcher`` have been implemented.
|
|
||||||
|
|
||||||
- ``vector<bool>::const_reference``, ``vector<bool>::const_iterator::reference``
|
|
||||||
and ``bitset::const_reference`` are now aliases for `bool` in the unstable ABI,
|
|
||||||
which improves libc++'s conformance to the Standard.
|
|
||||||
|
|
||||||
Deprecations and Removals
|
Deprecations and Removals
|
||||||
-------------------------
|
-------------------------
|
||||||
|
|
||||||
- The header ``<experimental/filesystem>`` has been removed. Instead, use
|
|
||||||
``<filesystem>`` header. The associated macro
|
|
||||||
``_LIBCPP_DEPRECATED_EXPERIMENTAL_FILESYSTEM`` has been removed too.
|
|
||||||
|
|
||||||
- The C++14 function ``std::quoted(const char*)`` is no longer supported in
|
|
||||||
C++03 or C++11 modes.
|
|
||||||
|
|
||||||
- Setting a custom debug handler with ``std::__libcpp_debug_function`` is not
|
|
||||||
supported anymore. Please migrate to using the new support for
|
|
||||||
:ref:`assertions <assertions-mode>` instead.
|
|
||||||
|
|
||||||
- ``std::function`` has been removed in C++03. If you are using it, please remove usages
|
|
||||||
or upgrade to C++11 or later. It is possible to re-enable ``std::function`` in C++03 by defining
|
|
||||||
``_LIBCPP_ENABLE_CXX03_FUNCTION``. This option will be removed in LLVM 16.
|
|
||||||
|
|
||||||
- ``unary_function`` and ``binary_function`` are no longer available in C++17 and C++20.
|
|
||||||
They can be re-enabled by defining ``_LIBCPP_ENABLE_CXX17_REMOVED_UNARY_BINARY_FUNCTION``.
|
|
||||||
They are also marked as ``[[deprecated]]`` in C++11 and later. To disable deprecation warnings
|
|
||||||
you have to define ``_LIBCPP_DISABLE_DEPRECATION_WARNINGS``. Note that this disables
|
|
||||||
all deprecation warnings.
|
|
||||||
|
|
||||||
- The contents of ``<codecvt>``, ``wstring_convert`` and ``wbuffer_convert`` have been marked as deprecated.
|
|
||||||
To disable deprecation warnings you have to define ``_LIBCPP_DISABLE_DEPRECATION_WARNINGS``. Note that this
|
|
||||||
disables all deprecation warnings.
|
|
||||||
|
|
||||||
- The ``_LIBCPP_DISABLE_EXTERN_TEMPLATE`` macro is not honored anymore when defined by
|
|
||||||
users of libc++. Instead, users not wishing to take a dependency on libc++ should link
|
|
||||||
against the static version of libc++, which will result in no dependency being
|
|
||||||
taken against the shared library.
|
|
||||||
|
|
||||||
- The ``_LIBCPP_ABI_UNSTABLE`` macro has been removed in favour of setting
|
|
||||||
``_LIBCPP_ABI_VERSION=2``. This should not have any impact on users because
|
|
||||||
they were not supposed to set ``_LIBCPP_ABI_UNSTABLE`` manually, however we
|
|
||||||
still feel that it is worth mentioning in the release notes in case some users
|
|
||||||
had been doing it.
|
|
||||||
|
|
||||||
- The integer distributions ``binomial_distribution``, ``discrete_distribution``,
|
|
||||||
``geometric_distribution``, ``negative_binomial_distribution``, ``poisson_distribution``,
|
|
||||||
and ``uniform_int_distribution`` now conform to the Standard by rejecting
|
|
||||||
template parameter types other than ``short``, ``int``, ``long``, ``long long``,
|
|
||||||
and the unsigned versions thereof. As an extension, ``int8_t``, ``__int128_t`` and
|
|
||||||
their unsigned versions are supported too. In particular, instantiating these
|
|
||||||
distributions with non-integer types like ``bool`` and ``char`` will not compile
|
|
||||||
anymore.
|
|
||||||
|
|
||||||
Upcoming Deprecations and Removals
|
Upcoming Deprecations and Removals
|
||||||
----------------------------------
|
----------------------------------
|
||||||
|
|
||||||
- The ``_LIBCPP_DEBUG`` macro is not supported anymore. It will be honoured until
|
|
||||||
LLVM 16, and then it will be an error to define that macro. To enable basic
|
|
||||||
assertions (previously ``_LIBCPP_DEBUG=0``), please use ``_LIBCPP_ENABLE_ASSERTIONS=1``.
|
|
||||||
To enable the debug mode (previously ``_LIBCPP_DEBUG=1|2``), please ensure that
|
|
||||||
the library has been built with support for the debug mode, and it will be
|
|
||||||
enabled automatically (no need to define ``_LIBCPP_DEBUG``).
|
|
||||||
|
|
||||||
- The experimental versions of ``boyer_moore_searcher`` and ``boyer_moore_horspool_searcher``
|
|
||||||
will be removed in LLVM 17. You can disable the deprecation warnings by defining
|
|
||||||
``_LIBCPP_NO_EXPERIMENTAL_DEPRECATION_WARNING_SEARCHERS``.
|
|
||||||
|
|
||||||
- The implementation of the Coroutines TS in ``std::experimental`` will be removed in LLVM 16.
|
|
||||||
|
|
||||||
- Libc++ is getting ready to remove unnecessary transitive inclusions. This may
|
|
||||||
break your code in the future. To future-proof your code to these removals,
|
|
||||||
please compile your code with ``_LIBCPP_REMOVE_TRANSITIVE_INCLUDES`` defined
|
|
||||||
and fix any compilation error resulting from missing includes.
|
|
||||||
|
|
||||||
ABI Affecting Changes
|
ABI Affecting Changes
|
||||||
---------------------
|
---------------------
|
||||||
|
|
||||||
- The ``_LIBCPP_ABI_USE_CXX03_NULLPTR_EMULATION`` macro controlling whether we use an
|
|
||||||
emulation for ``std::nullptr_t`` in C++03 mode has been removed. After this change,
|
|
||||||
``_LIBCPP_ABI_USE_CXX03_NULLPTR_EMULATION`` will not be honoured anymore and there
|
|
||||||
will be no way to opt back into the C++03 emulation of ``std::nullptr_t``.
|
|
||||||
|
|
||||||
- On FreeBSD, NetBSD, DragonFlyBSD and Solaris, ``std::random_device`` is now implemented on
|
|
||||||
top of ``arc4random()`` instead of reading from ``/dev/urandom``. Any implementation-defined
|
|
||||||
token used when constructing a ``std::random_device`` will now be ignored instead of
|
|
||||||
interpreted as a file to read entropy from.
|
|
||||||
|
|
||||||
- ``std::valarray``'s unary operators ``!``, ``+``, ``~`` and ``-`` now return an expression
|
|
||||||
object instead of a ``valarray``. This was done to fix an issue where any expression involving
|
|
||||||
other ``valarray`` operators and one of these unary operators would end up with a dangling
|
|
||||||
reference. This is a potential ABI break for code that exposes ``std::valarray`` on an ABI
|
|
||||||
boundary, specifically if the return type of an ABI-boundary function is ``auto``-deduced
|
|
||||||
from an expression involving unary operators on ``valarray``. If you are concerned by this,
|
|
||||||
you can audit whether your executable or library exports any function that returns a
|
|
||||||
``valarray``, and if so ensure that any such function uses ``std::valarray`` directly
|
|
||||||
as a return type instead of relying on the type of ``valarray``-expressions, which is
|
|
||||||
not guaranteed by the Standard anyway.
|
|
||||||
|
|
||||||
- By default, the legacy debug mode symbols are not provided with the library anymore. If
|
|
||||||
you are a vendor and need to re-enable them, please use the ``LIBCXX_ENABLE_BACKWARDS_COMPATIBILITY_DEBUG_MODE_SYMBOLS``
|
|
||||||
CMake flag, and contact the libc++ developers as this will be removed in LLVM 16.
|
|
||||||
Furthermore, please note that ``LIBCXX_ENABLE_DEBUG_MODE_SUPPORT`` is not honored anymore.
|
|
||||||
|
|
||||||
Build System Changes
|
Build System Changes
|
||||||
--------------------
|
--------------------
|
||||||
|
|
||||||
- Support for standalone builds have been entirely removed from libc++, libc++abi and
|
|
||||||
libunwind. Please use :ref:`these instructions <build instructions>` for building
|
|
||||||
libc++, libc++abi and/or libunwind.
|
|
||||||
|
|
||||||
- The ``{LIBCXX,LIBCXXABI,LIBUNWIND}_TARGET_TRIPLE``, ``{LIBCXX,LIBCXXABI,LIBUNWIND}_SYSROOT`` and
|
|
||||||
``{LIBCXX,LIBCXXABI,LIBUNWIND}_GCC_TOOLCHAIN`` CMake variables have been removed. Instead, please
|
|
||||||
use the ``CMAKE_CXX_COMPILER_TARGET``, ``CMAKE_SYSROOT`` and ``CMAKE_CXX_COMPILER_EXTERNAL_TOOLCHAIN``
|
|
||||||
variables provided by CMake.
|
|
||||||
|
|
||||||
- When building for Windows, vendors who want to avoid dll-exporting symbols from the static libc++abi
|
|
||||||
library should set ``LIBCXXABI_HERMETIC_STATIC_LIBRARY=ON`` when configuring CMake. The current
|
|
||||||
behavior, which tries to guess the correct dll-export semantics based on whether we're building
|
|
||||||
the libc++ shared library, will be removed in LLVM 16.
|
|
||||||
|
|
||||||
- Previously, the C++ ABI library headers would be installed inside ``<prefix>/include/c++/v1``
|
|
||||||
alongside the libc++ headers as part of building libc++. This is not the case anymore -- the
|
|
||||||
ABI library is expected to install its headers where it wants them as part of its own build.
|
|
||||||
Note that no action is required for most users, who build libc++ against libc++abi, since
|
|
||||||
libc++abi already installs its headers in the right location. However, vendors building
|
|
||||||
libc++ against alternate ABI libraries should make sure that their ABI library installs
|
|
||||||
its own headers.
|
|
||||||
|
|
||||||
- The legacy testing configuration is now deprecated and will be removed in LLVM 16. For
|
|
||||||
most users, this should not have any impact. However, if you are testing libc++, libc++abi, or
|
|
||||||
libunwind in a configuration or on a platform that used to be supported by the legacy testing
|
|
||||||
configuration and isn't supported by one of the configurations in ``libcxx/test/configs``,
|
|
||||||
``libcxxabi/test/configs``, or ``libunwind/test/configs``, please move to one of those
|
|
||||||
configurations or define your own.
|
|
||||||
|
|
||||||
- MinGW DLL builds of libc++ no longer use dllimport in their headers, which
|
|
||||||
means that the same set of installed headers works for both DLL and static
|
|
||||||
linkage. This means that distributors finally can build both library
|
|
||||||
versions with a single CMake invocation.
|
|
||||||
|
|
||||||
- The ``LIBCXX_HIDE_FROM_ABI_PER_TU_BY_DEFAULT`` configuration option has been removed. Indeed,
|
|
||||||
the risk of ODR violations from mixing different versions of libc++ in the same program has
|
|
||||||
been mitigated with a different technique that is simpler and does not have the drawbacks of
|
|
||||||
using internal linkage.
|
|
||||||
|
|
|
@ -48,9 +48,9 @@ copyright = u'2011-%d, LLVM Project' % date.today().year
|
||||||
# built documents.
|
# built documents.
|
||||||
#
|
#
|
||||||
# The short X.Y version.
|
# The short X.Y version.
|
||||||
version = '15.0'
|
version = '16.0'
|
||||||
# The full version, including alpha/beta/rc tags.
|
# The full version, including alpha/beta/rc tags.
|
||||||
release = '15.0'
|
release = '16.0'
|
||||||
|
|
||||||
# The language for content autogenerated by Sphinx. Refer to documentation
|
# The language for content autogenerated by Sphinx. Refer to documentation
|
||||||
# for a list of supported languages.
|
# for a list of supported languages.
|
||||||
|
|
|
@ -24,7 +24,7 @@
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
|
|
||||||
# define _LIBCPP_VERSION 15000
|
# define _LIBCPP_VERSION 16000
|
||||||
|
|
||||||
# define _LIBCPP_CONCAT_IMPL(_X, _Y) _X##_Y
|
# define _LIBCPP_CONCAT_IMPL(_X, _Y) _X##_Y
|
||||||
# define _LIBCPP_CONCAT(_X, _Y) _LIBCPP_CONCAT_IMPL(_X, _Y)
|
# define _LIBCPP_CONCAT(_X, _Y) _LIBCPP_CONCAT_IMPL(_X, _Y)
|
||||||
|
|
|
@ -48,9 +48,9 @@ copyright = u'2011-%d, LLVM Project' % date.today().year
|
||||||
# built documents.
|
# built documents.
|
||||||
#
|
#
|
||||||
# The short X.Y version.
|
# The short X.Y version.
|
||||||
version = '15.0'
|
version = '16.0'
|
||||||
# The full version, including alpha/beta/rc tags.
|
# The full version, including alpha/beta/rc tags.
|
||||||
release = '15.0'
|
release = '16.0'
|
||||||
|
|
||||||
# The language for content autogenerated by Sphinx. Refer to documentation
|
# The language for content autogenerated by Sphinx. Refer to documentation
|
||||||
# for a list of supported languages.
|
# for a list of supported languages.
|
||||||
|
|
|
@ -26,35 +26,12 @@ Non-comprehensive list of changes in this release
|
||||||
ELF Improvements
|
ELF Improvements
|
||||||
----------------
|
----------------
|
||||||
|
|
||||||
* ``-z pack-relative-relocs`` is now available to support ``DT_RELR`` for glibc 2.36+.
|
|
||||||
(`D120701 <https://reviews.llvm.org/D120701>`_)
|
|
||||||
* ``--no-fortran-common`` (pre 12.0.0 behavior) is now the default.
|
|
||||||
* ``FORCE_LLD_DIAGNOSTICS_CRASH`` environment variable is now available to force LLD to crash.
|
|
||||||
(`D128195 <https://reviews.llvm.org/D128195>`_)
|
|
||||||
|
|
||||||
Breaking changes
|
Breaking changes
|
||||||
----------------
|
----------------
|
||||||
|
|
||||||
* The GNU ld incompatible ``--no-define-common`` has been removed.
|
|
||||||
* The obscure ``-dc``/``-dp`` options have been removed.
|
|
||||||
* ``-d`` is now ignored.
|
|
||||||
* If a prevailing COMDAT group defines STB_WEAK symbol, having a STB_GLOBAL symbol in a non-prevailing group is now rejected with a diagnostic.
|
|
||||||
(`D120626 <https://reviews.llvm.org/D120626>`_)
|
|
||||||
* Support for the legacy ``.zdebug`` format has been removed. Run
|
|
||||||
``objcopy --decompress-debug-sections`` in case old object files use ``.zdebug``.
|
|
||||||
(`D126793 <https://reviews.llvm.org/D126793>`_)
|
|
||||||
* ``--time-trace-file=<file>`` has been removed.
|
|
||||||
Use ``--time-trace=<file>`` instead.
|
|
||||||
(`D128451 <https://reviews.llvm.org/D128451>`_)
|
|
||||||
|
|
||||||
COFF Improvements
|
COFF Improvements
|
||||||
-----------------
|
-----------------
|
||||||
|
|
||||||
* Added autodetection of MSVC toolchain, a la clang-cl. Also added
|
|
||||||
``/winsysroot:`` support for explicit specification of MSVC toolchain
|
|
||||||
location, similar to clang-cl's ``/winsysroot``. For now,
|
|
||||||
``/winsysroot:`` requires also passing in an explicit ``/machine:`` flag.
|
|
||||||
(`D118070 <https://reviews.llvm.org/D118070>`_)
|
|
||||||
* ...
|
* ...
|
||||||
|
|
||||||
MinGW Improvements
|
MinGW Improvements
|
||||||
|
@ -65,12 +42,6 @@ MinGW Improvements
|
||||||
MachO Improvements
|
MachO Improvements
|
||||||
------------------
|
------------------
|
||||||
|
|
||||||
* We now support proper relocation and pruning of EH frames. **Note:** this
|
|
||||||
comes at some performance overhead on x86_64 builds, and we recommend adding
|
|
||||||
the ``-femit-compact-unwind=no-compact-unwind`` compile flag to avoid it.
|
|
||||||
(`D129540 <https://reviews.llvm.org/D129540>`_,
|
|
||||||
`D122258 <https://reviews.llvm.org/D122258>`_)
|
|
||||||
|
|
||||||
WebAssembly Improvements
|
WebAssembly Improvements
|
||||||
------------------------
|
------------------------
|
||||||
|
|
||||||
|
|
|
@ -16,7 +16,7 @@ endif()
|
||||||
set(CMAKE_BUILD_WITH_INSTALL_NAME_DIR ON)
|
set(CMAKE_BUILD_WITH_INSTALL_NAME_DIR ON)
|
||||||
|
|
||||||
if(NOT DEFINED LLVM_VERSION_MAJOR)
|
if(NOT DEFINED LLVM_VERSION_MAJOR)
|
||||||
set(LLVM_VERSION_MAJOR 15)
|
set(LLVM_VERSION_MAJOR 16)
|
||||||
endif()
|
endif()
|
||||||
if(NOT DEFINED LLVM_VERSION_MINOR)
|
if(NOT DEFINED LLVM_VERSION_MINOR)
|
||||||
set(LLVM_VERSION_MINOR 0)
|
set(LLVM_VERSION_MINOR 0)
|
||||||
|
|
|
@ -47,71 +47,12 @@ Non-comprehensive list of changes in this release
|
||||||
Update on required toolchains to build LLVM
|
Update on required toolchains to build LLVM
|
||||||
-------------------------------------------
|
-------------------------------------------
|
||||||
|
|
||||||
With LLVM 15.x we will raise the version requirements of the toolchain used
|
|
||||||
to build LLVM. The new requirements are as follows:
|
|
||||||
|
|
||||||
* GCC >= 7.1
|
|
||||||
* Clang >= 5.0
|
|
||||||
* Apple Clang >= 9.3
|
|
||||||
* Visual Studio 2019 >= 16.7
|
|
||||||
|
|
||||||
In LLVM 15.x these requirements will be "soft" requirements and the version
|
|
||||||
check can be skipped by passing -DLLVM_TEMPORARILY_ALLOW_OLD_TOOLCHAIN=ON
|
|
||||||
to CMake.
|
|
||||||
|
|
||||||
With the release of LLVM 16.x these requirements will be hard and LLVM developers
|
|
||||||
can start using C++17 features, making it impossible to build with older
|
|
||||||
versions of these toolchains.
|
|
||||||
|
|
||||||
Changes to the LLVM IR
|
Changes to the LLVM IR
|
||||||
----------------------
|
----------------------
|
||||||
|
|
||||||
* LLVM now uses `opaque pointers <OpaquePointers.html>`__. This means that
|
|
||||||
different pointer types like ``i8*``, ``i32*`` or ``void()**`` are now
|
|
||||||
represented as a single ``ptr`` type. See the linked document for migration
|
|
||||||
instructions.
|
|
||||||
* Renamed ``llvm.experimental.vector.extract`` intrinsic to ``llvm.vector.extract``.
|
|
||||||
* Renamed ``llvm.experimental.vector.insert`` intrinsic to ``llvm.vector.insert``.
|
|
||||||
* The constant expression variants of the following instructions have been
|
|
||||||
removed:
|
|
||||||
* ``extractvalue``
|
|
||||||
* ``insertvalue``
|
|
||||||
* ``udiv``
|
|
||||||
* ``sdiv``
|
|
||||||
* ``urem``
|
|
||||||
* ``srem``
|
|
||||||
* ``fadd``
|
|
||||||
* ``fsub``
|
|
||||||
* ``fmul``
|
|
||||||
* ``fdiv``
|
|
||||||
* ``frem``
|
|
||||||
* Added the support for ``fmax`` and ``fmin`` in ``atomicrmw`` instruction. The
|
|
||||||
comparison is expected to match the behavior of ``llvm.maxnum.*`` and
|
|
||||||
``llvm.minnum.*`` respectively.
|
|
||||||
* ``callbr`` instructions no longer use ``blockaddress`` arguments for labels.
|
|
||||||
Instead, label constraints starting with ``!`` refer directly to entries in
|
|
||||||
the ``callbr`` indirect destination list.
|
|
||||||
|
|
||||||
.. code-block:: llvm
|
|
||||||
|
|
||||||
; Old representation
|
|
||||||
%res = callbr i32 asm "", "=r,r,i"(i32 %x, i8 *blockaddress(@foo, %indirect))
|
|
||||||
to label %fallthrough [label %indirect]
|
|
||||||
; New representation
|
|
||||||
%res = callbr i32 asm "", "=r,r,!i"(i32 %x)
|
|
||||||
to label %fallthrough [label %indirect]
|
|
||||||
|
|
||||||
Changes to building LLVM
|
Changes to building LLVM
|
||||||
------------------------
|
------------------------
|
||||||
|
|
||||||
* Omitting ``CMAKE_BUILD_TYPE`` when using a single configuration generator is now
|
|
||||||
an error. You now have to pass ``-DCMAKE_BUILD_TYPE=<type>`` in order to configure
|
|
||||||
LLVM. This is done to help new users of LLVM select the correct type: since building
|
|
||||||
LLVM in Debug mode is very resource intensive, we want to make sure that new users
|
|
||||||
make the choice that lines up with their usage. We have also improved documentation
|
|
||||||
around this setting that should help new users. You can find this documentation
|
|
||||||
`here <https://llvm.org/docs/CMake.html#cmake-build-type>`_.
|
|
||||||
|
|
||||||
Changes to TableGen
|
Changes to TableGen
|
||||||
-------------------
|
-------------------
|
||||||
|
|
||||||
|
@ -121,28 +62,9 @@ Changes to the AArch64 Backend
|
||||||
Changes to the AMDGPU Backend
|
Changes to the AMDGPU Backend
|
||||||
-----------------------------
|
-----------------------------
|
||||||
|
|
||||||
* 8 and 16-bit atomic loads and stores are now supported
|
|
||||||
|
|
||||||
|
|
||||||
Changes to the ARM Backend
|
Changes to the ARM Backend
|
||||||
--------------------------
|
--------------------------
|
||||||
|
|
||||||
* Added support for the Armv9-A, Armv9.1-A and Armv9.2-A architectures.
|
|
||||||
* Added support for the Armv8.1-M PACBTI-M extension.
|
|
||||||
* Added support for the Armv9-A, Armv9.1-A and Armv9.2-A architectures.
|
|
||||||
* Added support for the Armv8.1-M PACBTI-M extension.
|
|
||||||
* Removed the deprecation of ARMv8-A T32 Complex IT blocks. No deprecation
|
|
||||||
warnings will be generated and -mrestrict-it is now always off by default.
|
|
||||||
Previously it was on by default for Armv8 and off for all other architecture
|
|
||||||
versions.
|
|
||||||
* Added a pass to workaround Cortex-A57 Erratum 1742098 and Cortex-A72
|
|
||||||
Erratum 1655431. This is enabled by default when targeting either CPU.
|
|
||||||
* Implemented generation of Windows SEH unwind information.
|
|
||||||
* Switched the MinGW target to use SEH instead of DWARF for unwind information.
|
|
||||||
* Added support for the Cortex-M85 CPU.
|
|
||||||
* Added support for a new -mframe-chain=(none|aapcs|aapcs+leaf) command-line
|
|
||||||
option, which controls the generation of AAPCS-compliant Frame Records.
|
|
||||||
|
|
||||||
Changes to the AVR Backend
|
Changes to the AVR Backend
|
||||||
--------------------------
|
--------------------------
|
||||||
|
|
||||||
|
@ -151,13 +73,6 @@ Changes to the AVR Backend
|
||||||
Changes to the DirectX Backend
|
Changes to the DirectX Backend
|
||||||
------------------------------
|
------------------------------
|
||||||
|
|
||||||
* DirectX has been added as an experimental target. Specify
|
|
||||||
``-DLLVM_EXPERIMENTAL_TARGETS_TO_BUILD=DirectX`` in your CMake configuration
|
|
||||||
to enable it. The target is not packaged in pre-built binaries.
|
|
||||||
* The DirectX backend supports the ``dxil`` architecture which is based on LLVM
|
|
||||||
3.6 IR encoded as bitcode and is the format used for DirectX GPU Shader
|
|
||||||
programs.
|
|
||||||
|
|
||||||
Changes to the Hexagon Backend
|
Changes to the Hexagon Backend
|
||||||
------------------------------
|
------------------------------
|
||||||
|
|
||||||
|
@ -176,8 +91,6 @@ Changes to the PowerPC Backend
|
||||||
Changes to the RISC-V Backend
|
Changes to the RISC-V Backend
|
||||||
-----------------------------
|
-----------------------------
|
||||||
|
|
||||||
* The Zvfh extension was added.
|
|
||||||
|
|
||||||
Changes to the WebAssembly Backend
|
Changes to the WebAssembly Backend
|
||||||
----------------------------------
|
----------------------------------
|
||||||
|
|
||||||
|
@ -186,9 +99,6 @@ Changes to the WebAssembly Backend
|
||||||
Changes to the X86 Backend
|
Changes to the X86 Backend
|
||||||
--------------------------
|
--------------------------
|
||||||
|
|
||||||
* Support ``half`` type on SSE2 and above targets.
|
|
||||||
* Support ``rdpru`` instruction on Zen2 and above targets.
|
|
||||||
|
|
||||||
Changes to the OCaml bindings
|
Changes to the OCaml bindings
|
||||||
-----------------------------
|
-----------------------------
|
||||||
|
|
||||||
|
@ -196,57 +106,6 @@ Changes to the OCaml bindings
|
||||||
Changes to the C API
|
Changes to the C API
|
||||||
--------------------
|
--------------------
|
||||||
|
|
||||||
* Add ``LLVMGetCastOpcode`` function to aid users of ``LLVMBuildCast`` in
|
|
||||||
resolving the best cast operation given a source value and destination type.
|
|
||||||
This function is a direct wrapper of ``CastInst::getCastOpcode``.
|
|
||||||
|
|
||||||
* Add ``LLVMGetAggregateElement`` function as a wrapper for
|
|
||||||
``Constant::getAggregateElement``, which can be used to fetch an element of a
|
|
||||||
constant struct, array or vector, independently of the underlying
|
|
||||||
representation. The ``LLVMGetElementAsConstant`` function is deprecated in
|
|
||||||
favor of the new function, which works on all constant aggregates, rather than
|
|
||||||
only instances of ``ConstantDataSequential``.
|
|
||||||
|
|
||||||
* The following functions for creating constant expressions have been removed,
|
|
||||||
because the underlying constant expressions are no longer supported. Instead,
|
|
||||||
an instruction should be created using the ``LLVMBuildXYZ`` APIs, which will
|
|
||||||
constant fold the operands if possible and create an instruction otherwise:
|
|
||||||
* ``LLVMConstExtractValue``
|
|
||||||
* ``LLVMConstInsertValue``
|
|
||||||
* ``LLVMConstUDiv``
|
|
||||||
* ``LLVMConstExactUDiv``
|
|
||||||
* ``LLVMConstSDiv``
|
|
||||||
* ``LLVMConstExactSDiv``
|
|
||||||
* ``LLVMConstURem``
|
|
||||||
* ``LLVMConstSRem``
|
|
||||||
* ``LLVMConstFAdd``
|
|
||||||
* ``LLVMConstFSub``
|
|
||||||
* ``LLVMConstFMul``
|
|
||||||
* ``LLVMConstFDiv``
|
|
||||||
* ``LLVMConstFRem``
|
|
||||||
|
|
||||||
* Add ``LLVMDeleteInstruction`` function which allows deleting instructions that
|
|
||||||
are not inserted into a basic block.
|
|
||||||
|
|
||||||
* As part of the opaque pointer migration, the following APIs are deprecated and
|
|
||||||
will be removed in the next release:
|
|
||||||
* ``LLVMBuildLoad`` -> ``LLVMBuildLoad2``
|
|
||||||
* ``LLVMBuildCall`` -> ``LLVMBuildCall2``
|
|
||||||
* ``LLVMBuildInvoke`` -> ``LLVMBuildInvoke2``
|
|
||||||
* ``LLVMBuildGEP`` -> ``LLVMBuildGEP2``
|
|
||||||
* ``LLVMBuildInBoundsGEP`` -> ``LLVMBuildInBoundsGEP2``
|
|
||||||
* ``LLVMBuildStructGEP`` -> ``LLVMBuildStructGEP2``
|
|
||||||
* ``LLVMBuildPtrDiff`` -> ``LLVMBuildPtrDiff2``
|
|
||||||
* ``LLVMConstGEP`` -> ``LLVMConstGEP2``
|
|
||||||
* ``LLVMConstInBoundsGEP`` -> ``LLVMConstInBoundsGEP2``
|
|
||||||
* ``LLVMAddAlias`` -> ``LLVMAddAlias2``
|
|
||||||
|
|
||||||
* Refactor compression namespaces across the project, making way for a possible
|
|
||||||
introduction of alternatives to zlib compression in the llvm toolchain.
|
|
||||||
Changes are as follows:
|
|
||||||
* Relocate the ``llvm::zlib`` namespace to ``llvm::compression::zlib``.
|
|
||||||
* Remove crc32 from zlib compression namespace, people should use the ``llvm::crc32`` instead.
|
|
||||||
|
|
||||||
Changes to the Go bindings
|
Changes to the Go bindings
|
||||||
--------------------------
|
--------------------------
|
||||||
|
|
||||||
|
@ -274,50 +133,15 @@ During this release ...
|
||||||
Changes to the LLVM tools
|
Changes to the LLVM tools
|
||||||
---------------------------------
|
---------------------------------
|
||||||
|
|
||||||
* (Experimental) :manpage:`llvm-symbolizer(1)` now has ``--filter-markup`` to
|
|
||||||
filter :doc:`Symbolizer Markup </SymbolizerMarkupFormat>` into human-readable
|
|
||||||
form.
|
|
||||||
* :doc:`llvm-objcopy <CommandGuide/llvm-objcopy>` has removed support for the legacy ``zlib-gnu`` format.
|
|
||||||
* :doc:`llvm-objcopy <CommandGuide/llvm-objcopy>` now allows ``--set-section-flags src=... --rename-section src=tst``.
|
|
||||||
``--add-section=.foo1=... --rename-section=.foo1=.foo2`` now adds ``.foo1`` instead of ``.foo2``.
|
|
||||||
* The LLVM gold plugin now ignores bitcode from the ``.llvmbc`` section of ELF
|
|
||||||
files when doing LTO. https://github.com/llvm/llvm-project/issues/47216
|
|
||||||
|
|
||||||
Changes to LLDB
|
Changes to LLDB
|
||||||
---------------------------------
|
---------------------------------
|
||||||
|
|
||||||
* The "memory region" command now has a "--all" option to list all
|
|
||||||
memory regions (including unmapped ranges). This is the equivalent
|
|
||||||
of using address 0 then repeating the command until all regions
|
|
||||||
have been listed.
|
|
||||||
* Added "--show-tags" option to the "memory find" command. This is off by default.
|
|
||||||
When enabled, if the target value is found in tagged memory, the tags for that
|
|
||||||
memory will be shown inline with the memory contents.
|
|
||||||
* Various memory related parts of LLDB have been updated to handle
|
|
||||||
non-address bits (such as AArch64 pointer signatures):
|
|
||||||
|
|
||||||
* "memory read", "memory write" and "memory find" can now be used with
|
|
||||||
addresses with non-address bits.
|
|
||||||
* All the read and write memory methods on SBProccess and SBTarget can
|
|
||||||
be used with addreses with non-address bits.
|
|
||||||
* When printing a pointer expression, LLDB can now dereference the result
|
|
||||||
even if it has non-address bits.
|
|
||||||
* The memory cache now ignores non-address bits when looking up memory
|
|
||||||
locations. This prevents us reading locations multiple times, or not
|
|
||||||
writing out new values if the addresses have different non-address bits.
|
|
||||||
|
|
||||||
* LLDB now supports reading memory tags from AArch64 Linux core files.
|
|
||||||
|
|
||||||
Changes to Sanitizers
|
Changes to Sanitizers
|
||||||
---------------------
|
---------------------
|
||||||
|
|
||||||
|
|
||||||
Other Changes
|
Other Changes
|
||||||
-------------
|
-------------
|
||||||
* The code for the `LLVM Visual Studio integration
|
|
||||||
<https://marketplace.visualstudio.com/items?itemName=LLVMExtensions.llvm-toolchain>`_
|
|
||||||
has been removed. This had been obsolete and abandoned since Visual Studio
|
|
||||||
started including an integration by default in 2019.
|
|
||||||
|
|
||||||
External Open Source Projects Using LLVM 15
|
External Open Source Projects Using LLVM 15
|
||||||
===========================================
|
===========================================
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
llvm_version_major = 15
|
llvm_version_major = 16
|
||||||
llvm_version_minor = 0
|
llvm_version_minor = 0
|
||||||
llvm_version_patch = 0
|
llvm_version_patch = 0
|
||||||
llvm_version = "$llvm_version_major.$llvm_version_minor.$llvm_version_patch"
|
llvm_version = "$llvm_version_major.$llvm_version_minor.$llvm_version_patch"
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
|
|
||||||
__author__ = 'Daniel Dunbar'
|
__author__ = 'Daniel Dunbar'
|
||||||
__email__ = 'daniel@minormatter.com'
|
__email__ = 'daniel@minormatter.com'
|
||||||
__versioninfo__ = (15, 0, 0)
|
__versioninfo__ = (16, 0, 0)
|
||||||
__version__ = '.'.join(str(v) for v in __versioninfo__) + 'dev'
|
__version__ = '.'.join(str(v) for v in __versioninfo__) + 'dev'
|
||||||
|
|
||||||
__all__ = []
|
__all__ = []
|
||||||
|
|
|
@ -1,10 +1,10 @@
|
||||||
===========================
|
===========================
|
||||||
OpenMP 15.0.0 Release Notes
|
OpenMP 16.0.0 Release Notes
|
||||||
===========================
|
===========================
|
||||||
|
|
||||||
|
|
||||||
.. warning::
|
.. warning::
|
||||||
These are in-progress notes for the upcoming LLVM 15.0.0 release.
|
These are in-progress notes for the upcoming LLVM 16.0.0 release.
|
||||||
Release notes for previous releases can be found on
|
Release notes for previous releases can be found on
|
||||||
`the Download Page <https://releases.llvm.org/download.html>`_.
|
`the Download Page <https://releases.llvm.org/download.html>`_.
|
||||||
|
|
||||||
|
@ -12,7 +12,7 @@ OpenMP 15.0.0 Release Notes
|
||||||
Introduction
|
Introduction
|
||||||
============
|
============
|
||||||
|
|
||||||
This document contains the release notes for the OpenMP runtime, release 15.0.0.
|
This document contains the release notes for the OpenMP runtime, release 16.0.0.
|
||||||
Here we describe the status of OpenMP, including major improvements
|
Here we describe the status of OpenMP, including major improvements
|
||||||
from the previous release. All OpenMP releases may be downloaded
|
from the previous release. All OpenMP releases may be downloaded
|
||||||
from the `LLVM releases web site <https://llvm.org/releases/>`_.
|
from the `LLVM releases web site <https://llvm.org/releases/>`_.
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
=======================================
|
=======================================
|
||||||
PSTL 15.0.0 (In-Progress) Release Notes
|
PSTL 16.0.0 (In-Progress) Release Notes
|
||||||
=======================================
|
=======================================
|
||||||
|
|
||||||
.. contents::
|
.. contents::
|
||||||
|
@ -10,7 +10,7 @@ Written by the `PSTL Team <https://pstl.llvm.org>`_
|
||||||
|
|
||||||
.. warning::
|
.. warning::
|
||||||
|
|
||||||
These are in-progress notes for the upcoming pstl 15 release.
|
These are in-progress notes for the upcoming pstl 16 release.
|
||||||
Release notes for previous releases can be found on
|
Release notes for previous releases can be found on
|
||||||
`the Download Page <https://releases.llvm.org/download.html>`_.
|
`the Download Page <https://releases.llvm.org/download.html>`_.
|
||||||
|
|
||||||
|
@ -18,7 +18,7 @@ Introduction
|
||||||
============
|
============
|
||||||
|
|
||||||
This document contains the release notes for the PSTL parallel algorithms
|
This document contains the release notes for the PSTL parallel algorithms
|
||||||
library, part of the LLVM Compiler Infrastructure, release 15.0.0. Here we
|
library, part of the LLVM Compiler Infrastructure, release 16.0.0. Here we
|
||||||
describe the status of the library in some detail, including major improvements
|
describe the status of the library in some detail, including major improvements
|
||||||
from the previous release and new feature work. For the general LLVM release
|
from the previous release and new feature work. For the general LLVM release
|
||||||
notes, see `the LLVM documentation <https://llvm.org/docs/ReleaseNotes.html>`_.
|
notes, see `the LLVM documentation <https://llvm.org/docs/ReleaseNotes.html>`_.
|
||||||
|
@ -30,7 +30,7 @@ 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
|
To see the release notes for a specific release, please see the `releases
|
||||||
page <https://llvm.org/releases/>`_.
|
page <https://llvm.org/releases/>`_.
|
||||||
|
|
||||||
What's New in PSTL 15.0.0?
|
What's New in PSTL 16.0.0?
|
||||||
==========================
|
==========================
|
||||||
|
|
||||||
New Features
|
New Features
|
||||||
|
|
|
@ -13,7 +13,7 @@
|
||||||
#include <__pstl_config_site>
|
#include <__pstl_config_site>
|
||||||
|
|
||||||
// The version is XYYZ, where X is major, YY is minor, and Z is patch (i.e. X.YY.Z)
|
// The version is XYYZ, where X is major, YY is minor, and Z is patch (i.e. X.YY.Z)
|
||||||
#define _PSTL_VERSION 15000
|
#define _PSTL_VERSION 16000
|
||||||
#define _PSTL_VERSION_MAJOR (_PSTL_VERSION / 1000)
|
#define _PSTL_VERSION_MAJOR (_PSTL_VERSION / 1000)
|
||||||
#define _PSTL_VERSION_MINOR ((_PSTL_VERSION % 1000) / 10)
|
#define _PSTL_VERSION_MINOR ((_PSTL_VERSION % 1000) / 10)
|
||||||
#define _PSTL_VERSION_PATCH (_PSTL_VERSION % 10)
|
#define _PSTL_VERSION_PATCH (_PSTL_VERSION % 10)
|
||||||
|
|
|
@ -8,8 +8,8 @@
|
||||||
|
|
||||||
#include <pstl/internal/pstl_config.h>
|
#include <pstl/internal/pstl_config.h>
|
||||||
|
|
||||||
static_assert(_PSTL_VERSION == 15000);
|
static_assert(_PSTL_VERSION == 16000);
|
||||||
static_assert(_PSTL_VERSION_MAJOR == 15);
|
static_assert(_PSTL_VERSION_MAJOR == 16);
|
||||||
static_assert(_PSTL_VERSION_MINOR == 00);
|
static_assert(_PSTL_VERSION_MINOR == 00);
|
||||||
static_assert(_PSTL_VERSION_PATCH == 0);
|
static_assert(_PSTL_VERSION_PATCH == 0);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue