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