Bump version to 24.0.0git (#209473)
This commit is contained in:
parent
fb423ba07c
commit
6af0a79d7a
10 changed files with 12 additions and 2542 deletions
|
|
@ -49,95 +49,6 @@ Major New Features
|
|||
Potentially Breaking Changes
|
||||
----------------------------
|
||||
|
||||
- The :doc:`modernize-use-using <clang-tidy/checks/modernize/use-using>` check
|
||||
now sets the `IgnoreExternC` option to `true` by default. The check will
|
||||
no longer transform ``typedef``\ s within ``extern "C"`` blocks.
|
||||
|
||||
- Deprecated the :program:`clang-tidy` check :doc:`performance-faster-string-find
|
||||
<clang-tidy/checks/performance/faster-string-find>`. It has been renamed to
|
||||
:doc:`performance-prefer-single-char-overloads
|
||||
<clang-tidy/checks/performance/prefer-single-char-overloads>`.
|
||||
The original check will be removed in the 25th release.
|
||||
|
||||
- Removed the :program:`clang-tidy` ``hicpp`` module. All checks have been moved
|
||||
to the other modules. Use the replacement checks instead:
|
||||
|
||||
================================== ========================================================================
|
||||
Removed check Replacement check
|
||||
================================== ========================================================================
|
||||
``hicpp-avoid-c-arrays`` :doc:`modernize-avoid-c-arrays
|
||||
<clang-tidy/checks/modernize/avoid-c-arrays>`
|
||||
``hicpp-avoid-goto`` :doc:`cppcoreguidelines-avoid-goto
|
||||
<clang-tidy/checks/cppcoreguidelines/avoid-goto>`
|
||||
``hicpp-braces-around-statements`` :doc:`readability-braces-around-statements
|
||||
<clang-tidy/checks/readability/braces-around-statements>`
|
||||
``hicpp-deprecated-headers`` :doc:`modernize-deprecated-headers
|
||||
<clang-tidy/checks/modernize/deprecated-headers>`
|
||||
``hicpp-exception-baseclass`` :doc:`bugprone-std-exception-baseclass
|
||||
<clang-tidy/checks/bugprone/std-exception-baseclass>`
|
||||
``hicpp-explicit-conversions`` :doc:`misc-explicit-constructor
|
||||
<clang-tidy/checks/misc/explicit-constructor>`
|
||||
``hicpp-function-size`` :doc:`readability-function-size
|
||||
<clang-tidy/checks/readability/function-size>`
|
||||
``hicpp-ignored-remove-result`` :doc:`bugprone-unused-return-value
|
||||
<clang-tidy/checks/bugprone/unused-return-value>`
|
||||
``hicpp-invalid-access-moved`` :doc:`bugprone-use-after-move
|
||||
<clang-tidy/checks/bugprone/use-after-move>`
|
||||
``hicpp-member-init`` :doc:`cppcoreguidelines-pro-type-member-init
|
||||
<clang-tidy/checks/cppcoreguidelines/pro-type-member-init>`
|
||||
``hicpp-move-const-arg`` :doc:`performance-move-const-arg
|
||||
<clang-tidy/checks/performance/move-const-arg>`
|
||||
``hicpp-multiway-paths-covered`` | :doc:`bugprone-unhandled-code-paths
|
||||
<clang-tidy/checks/bugprone/unhandled-code-paths>`
|
||||
| :doc:`readability-trivial-switch
|
||||
<clang-tidy/checks/readability/trivial-switch>`
|
||||
``hicpp-named-parameter`` :doc:`readability-named-parameter
|
||||
<clang-tidy/checks/readability/named-parameter>`
|
||||
``hicpp-new-delete-operators`` :doc:`misc-new-delete-overloads
|
||||
<clang-tidy/checks/misc/new-delete-overloads>`
|
||||
``hicpp-no-array-decay`` :doc:`cppcoreguidelines-pro-bounds-array-to-pointer-decay
|
||||
<clang-tidy/checks/cppcoreguidelines/pro-bounds-array-to-pointer-decay>`
|
||||
``hicpp-no-assembler`` :doc:`portability-no-assembler
|
||||
<clang-tidy/checks/portability/no-assembler>`
|
||||
``hicpp-no-malloc`` :doc:`cppcoreguidelines-no-malloc
|
||||
<clang-tidy/checks/cppcoreguidelines/no-malloc>`
|
||||
``hicpp-noexcept-move`` :doc:`performance-noexcept-move-constructor
|
||||
<clang-tidy/checks/performance/noexcept-move-constructor>`
|
||||
``hicpp-signed-bitwise`` :doc:`bugprone-signed-bitwise
|
||||
<clang-tidy/checks/bugprone/signed-bitwise>`
|
||||
``hicpp-special-member-functions`` :doc:`cppcoreguidelines-special-member-functions
|
||||
<clang-tidy/checks/cppcoreguidelines/special-member-functions>`
|
||||
``hicpp-static-assert`` :doc:`misc-static-assert
|
||||
<clang-tidy/checks/misc/static-assert>`
|
||||
``hicpp-uppercase-literal-suffix`` :doc:`readability-uppercase-literal-suffix
|
||||
<clang-tidy/checks/readability/uppercase-literal-suffix>`
|
||||
``hicpp-undelegated-constructor`` :doc:`bugprone-undelegated-constructor
|
||||
<clang-tidy/checks/bugprone/undelegated-constructor>`
|
||||
``hicpp-use-auto`` :doc:`modernize-use-auto
|
||||
<clang-tidy/checks/modernize/use-auto>`
|
||||
``hicpp-use-emplace`` :doc:`modernize-use-emplace
|
||||
<clang-tidy/checks/modernize/use-emplace>`
|
||||
``hicpp-use-equals-default`` :doc:`modernize-use-equals-default
|
||||
<clang-tidy/checks/modernize/use-equals-default>`
|
||||
``hicpp-use-equals-delete`` :doc:`modernize-use-equals-delete
|
||||
<clang-tidy/checks/modernize/use-equals-delete>`
|
||||
``hicpp-use-noexcept`` :doc:`modernize-use-noexcept
|
||||
<clang-tidy/checks/modernize/use-noexcept>`
|
||||
``hicpp-use-nullptr`` :doc:`modernize-use-nullptr
|
||||
<clang-tidy/checks/modernize/use-nullptr>`
|
||||
``hicpp-use-override`` :doc:`modernize-use-override
|
||||
<clang-tidy/checks/modernize/use-override>`
|
||||
``hicpp-vararg`` :doc:`cppcoreguidelines-pro-type-vararg
|
||||
<clang-tidy/checks/cppcoreguidelines/pro-type-vararg>`
|
||||
================================== ========================================================================
|
||||
|
||||
- Removed the :program:`clang-doc` deprecated Markdown generator. ``--format=md``
|
||||
now uses the new Mustache-backed MD generator. It is possible that there are some
|
||||
regressions in MD output.
|
||||
|
||||
- Removed the :program:`clang-doc` YAML generator. Prefer the JSON generator to
|
||||
get documentation information in a reusable format.
|
||||
|
||||
Improvements to clangd
|
||||
----------------------
|
||||
|
||||
|
|
@ -159,27 +70,9 @@ Hover
|
|||
Code completion
|
||||
^^^^^^^^^^^^^^^
|
||||
|
||||
- Now also provides include files without extension, if they are in a directory
|
||||
only called ``include``.
|
||||
|
||||
- Added support for ``InsertReplaceEdit`` in code completion (LSP 3.16),
|
||||
allowing clients that advertise ``insertReplaceSupport`` to receive both
|
||||
insert and replace ranges for completion items.
|
||||
|
||||
- Changed completion-style default to ``detailed``. This means function
|
||||
overloads will no longer be bundled together, but instead each have
|
||||
their own completion item. This gives the user a better overview of the
|
||||
possible overloads and also when accepting the item it will generate
|
||||
placeholder parameters, which was not possible due to ambiguity with
|
||||
``bundled``. To change back to the old behaviour, pass the argument
|
||||
``--completion-style=bundled`` to clangd.
|
||||
|
||||
Code actions
|
||||
^^^^^^^^^^^^
|
||||
|
||||
- A new tweak "Create function body out-of-line" was added that creates
|
||||
an implementation for a function declaration.
|
||||
|
||||
Signature help
|
||||
^^^^^^^^^^^^^^
|
||||
|
||||
|
|
@ -201,752 +94,15 @@ Improvements to clang-query
|
|||
Improvements to clang-tidy
|
||||
--------------------------
|
||||
|
||||
- Improved :program:`check_clang_tidy.py` script by adding the `-check-header`
|
||||
argument to simplify testing of header files. This argument automatically
|
||||
manages the creation of temporary header files and ensures that diagnostics
|
||||
and fixes are verified for the specified headers.
|
||||
|
||||
- Improved :program:`clang-tidy` ``-store-check-profile`` by generating valid
|
||||
JSON when the source file path contains characters that require JSON escaping.
|
||||
|
||||
- Improved :program:`clang-tidy` by preserving literal backslash characters in
|
||||
POSIX source paths.
|
||||
|
||||
- Ensured that :program:`clang-tidy` and the clang compiler uses the same logic
|
||||
for the suppression of compiler diagnostics in system headers and expansions
|
||||
of macros defined in system headers. Previously the default setting of tidy
|
||||
overzealously suppressed some diagnostics that would have been emitted by the
|
||||
compiler. (E.g. tidy suppressed many ``clang-diagnostic-invalid-offsetof``
|
||||
reports because they usually occur in expansion of the macro ``offsetof``.)
|
||||
|
||||
- :program:`clang-tidy` will no longer exit immediately if the only enabled
|
||||
checks are `clang-diagnostic-*` ones. This allows using
|
||||
:program:`clang-tidy` purely as a frontend to Clang's builtin warnings.
|
||||
|
||||
New checks
|
||||
^^^^^^^^^^
|
||||
|
||||
- New :doc:`bugprone-assignment-in-selection-statement
|
||||
<clang-tidy/checks/bugprone/assignment-in-selection-statement>` check.
|
||||
|
||||
Finds assignments within selection statements.
|
||||
|
||||
- New :doc:`bugprone-missing-end-comparison
|
||||
<clang-tidy/checks/bugprone/missing-end-comparison>` check.
|
||||
|
||||
Finds instances where the result of a standard algorithm is used in a Boolean
|
||||
context without being compared to the end iterator.
|
||||
|
||||
- New :doc:`bugprone-unsafe-to-allow-exceptions
|
||||
<clang-tidy/checks/bugprone/unsafe-to-allow-exceptions>` check.
|
||||
|
||||
Finds functions where throwing exceptions is unsafe but the function is still
|
||||
marked as potentially throwing.
|
||||
|
||||
- New :doc:`llvm-formatv-string
|
||||
<clang-tidy/checks/llvm/formatv-string>` check.
|
||||
|
||||
Validates ``llvm::formatv`` format strings against the provided arguments,
|
||||
diagnosing mismatched argument counts, unused arguments, and mixed index styles.
|
||||
|
||||
- New :doc:`llvm-redundant-casting
|
||||
<clang-tidy/checks/llvm/redundant-casting>` check.
|
||||
|
||||
Points out uses of ``cast<>``, ``dyn_cast<>`` and their ``or_null`` variants
|
||||
that are unnecessary because the argument already is of the target type, or a
|
||||
derived type thereof. Also does similar analysis for calls to ``isa<>`` that
|
||||
always return ``true``.
|
||||
|
||||
- New :doc:`llvm-type-switch-case-types
|
||||
<clang-tidy/checks/llvm/type-switch-case-types>` check.
|
||||
|
||||
Finds ``llvm::TypeSwitch::Case`` calls with redundant explicit template
|
||||
arguments that can be inferred from the lambda parameter type.
|
||||
|
||||
- New :doc:`llvm-use-vector-utils
|
||||
<clang-tidy/checks/llvm/use-vector-utils>` check.
|
||||
|
||||
Finds calls to ``llvm::to_vector(llvm::map_range(...))`` and
|
||||
``llvm::to_vector(llvm::make_filter_range(...))`` that can be replaced with
|
||||
``llvm::map_to_vector`` and ``llvm::filter_to_vector``.
|
||||
|
||||
- New :doc:`misc-static-initialization-cycle
|
||||
<clang-tidy/checks/misc/static-initialization-cycle>` check.
|
||||
|
||||
Finds cyclical initialization of static variables.
|
||||
|
||||
- New :doc:`modernize-use-std-bit
|
||||
<clang-tidy/checks/modernize/use-std-bit>` check.
|
||||
|
||||
Finds common idioms which can be replaced by standard functions from the
|
||||
``<bit>`` C++20 header.
|
||||
|
||||
- New :doc:`modernize-use-string-view
|
||||
<clang-tidy/checks/modernize/use-string-view>` check.
|
||||
|
||||
Looks for functions returning ``std::[w|u8|u16|u32]string`` and suggests to
|
||||
change it to ``std::[...]string_view`` for performance reasons if possible.
|
||||
|
||||
- New :doc:`modernize-use-structured-binding
|
||||
<clang-tidy/checks/modernize/use-structured-binding>` check.
|
||||
|
||||
Finds places where structured bindings could be used to decompose pairs and
|
||||
suggests replacing them.
|
||||
|
||||
- New :doc:`performance-string-view-conversions
|
||||
<clang-tidy/checks/performance/string-view-conversions>` check.
|
||||
|
||||
Finds and removes redundant conversions from ``std::[w|u8|u16|u32]string_view`` to
|
||||
``std::[...]string`` in call expressions expecting ``std::[...]string_view``.
|
||||
|
||||
- New :doc:`performance-use-std-move
|
||||
<clang-tidy/checks/performance/use-std-move>` check.
|
||||
|
||||
Suggests insertion of ``std::move(...)`` to turn copy assignment operator
|
||||
calls into move assignment ones, when deemed valid and profitable.
|
||||
|
||||
- New :doc:`readability-redundant-lambda-parameter-list
|
||||
<clang-tidy/checks/readability/redundant-lambda-parameter-list>` check.
|
||||
|
||||
Finds lambda expressions with a redundant empty parameter list and removes it.
|
||||
|
||||
- New :doc:`readability-redundant-nested-if
|
||||
<clang-tidy/checks/readability/redundant-nested-if>` check.
|
||||
|
||||
Finds nested ``if`` statements that can be merged into a single ``if`` by
|
||||
combining conditions with ``&&``.
|
||||
|
||||
- New :doc:`readability-redundant-qualified-alias
|
||||
<clang-tidy/checks/readability/redundant-qualified-alias>` check.
|
||||
|
||||
Finds redundant identity type aliases that re-expose a qualified name and can
|
||||
be replaced with a ``using`` declaration.
|
||||
|
||||
- New :doc:`readability-trailing-comma
|
||||
<clang-tidy/checks/readability/trailing-comma>` check.
|
||||
|
||||
Checks for presence or absence of trailing commas in enum definitions and
|
||||
initializer lists.
|
||||
|
||||
New check aliases
|
||||
^^^^^^^^^^^^^^^^^
|
||||
|
||||
- Renamed :doc:`cert-exp45-c <clang-tidy/checks/cert/exp45-c>`
|
||||
to :doc:`bugprone-assignment-in-selection-statement
|
||||
<clang-tidy/checks/bugprone/assignment-in-selection-statement>`.
|
||||
|
||||
- Renamed :doc:`cppcoreguidelines-explicit-constructor
|
||||
<clang-tidy/checks/cppcoreguidelines/explicit-constructor>`
|
||||
to :doc:`misc-explicit-constructor
|
||||
<clang-tidy/checks/misc/explicit-constructor>`. The
|
||||
`cppcoreguidelines-explicit-constructor` name is kept as an alias.
|
||||
|
||||
- Renamed :doc:`google-explicit-constructor
|
||||
<clang-tidy/checks/google/explicit-constructor>`
|
||||
to :doc:`misc-explicit-constructor
|
||||
<clang-tidy/checks/misc/explicit-constructor>`. The
|
||||
`google-explicit-constructor` name is kept as an alias.
|
||||
|
||||
- Renamed :doc:`performance-faster-string-find
|
||||
<clang-tidy/checks/performance/faster-string-find>` to
|
||||
:doc:`performance-prefer-single-char-overloads
|
||||
<clang-tidy/checks/performance/prefer-single-char-overloads>`.
|
||||
The `performance-faster-string-find` name is kept as an alias.
|
||||
|
||||
Changes in existing checks
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
- Improved :doc:`altera-id-dependent-backward-branch
|
||||
<clang-tidy/checks/altera/id-dependent-backward-branch>` check by fixing false
|
||||
positives when ordinary variable or field assignments are used in loop
|
||||
conditions and note locations for inferred ID-dependent fields.
|
||||
|
||||
- Improved :doc:`altera-unroll-loops
|
||||
<clang-tidy/checks/altera/unroll-loops>` check by fixing a crash when
|
||||
analyzing a ``for`` loop whose initialization statement declares multiple
|
||||
variables.
|
||||
|
||||
- Improved :doc:`bugprone-argument-comment
|
||||
<clang-tidy/checks/bugprone/argument-comment>`:
|
||||
|
||||
- Checks for C++11 inherited constructors.
|
||||
|
||||
- Adds `CommentAnonymousInitLists`, `CommentTypedInitLists`, and
|
||||
`CommentParenthesizedTemporaries` options to comment braced-init list
|
||||
arguments and explicit temporary constructions (for example, ``{}``,
|
||||
``Type{}``, and ``Type()``).
|
||||
|
||||
- Improved :doc:`bugprone-bad-signal-to-kill-thread
|
||||
<clang-tidy/checks/bugprone/bad-signal-to-kill-thread>` check by fixing false
|
||||
negatives when the ``SIGTERM`` macro is obtained from a precompiled header.
|
||||
|
||||
- Improved :doc:`bugprone-branch-clone
|
||||
<clang-tidy/checks/bugprone/branch-clone>` check by fixing a false positive
|
||||
where ``if``/``else`` branches containing inline assembly that differed only
|
||||
in the asm string or clobber list were reported as identical.
|
||||
|
||||
- Improved :doc:`bugprone-casting-through-void
|
||||
<clang-tidy/checks/bugprone/casting-through-void>` check by running only on
|
||||
C++ files because suggested ``reinterpret_cast`` is not available in pure C.
|
||||
|
||||
- Improved :doc:`bugprone-derived-method-shadowing-base-method
|
||||
<clang-tidy/checks/bugprone/derived-method-shadowing-base-method>` check by
|
||||
correctly ignoring function templates.
|
||||
|
||||
- Improved :doc:`bugprone-exception-escape
|
||||
<clang-tidy/checks/bugprone/exception-escape>` check by adding
|
||||
`TreatFunctionsWithoutSpecificationAsThrowing` option to support reporting
|
||||
for unannotated functions, enabling reporting when no explicit ``throw``
|
||||
is seen and allowing separate tuning for known and unknown implementations.
|
||||
|
||||
- Improved :doc:`bugprone-fold-init-type
|
||||
<clang-tidy/checks/bugprone/fold-init-type>` check by detecting precision
|
||||
loss in overloads with transparent standard functors (e.g. ``std::plus<>``)
|
||||
for ``std::accumulate``, ``std::reduce``, and ``std::inner_product``.
|
||||
|
||||
- Improved :doc:`bugprone-inc-dec-in-conditions
|
||||
<clang-tidy/checks/bugprone/inc-dec-in-conditions>` check by fixing a false
|
||||
positive when increment/decrement operators appear inside lambda bodies that
|
||||
are part of a condition expression.
|
||||
|
||||
- Improved :doc:`bugprone-incorrect-enable-if
|
||||
<clang-tidy/checks/bugprone/incorrect-enable-if>` check to not
|
||||
insert an extraneous ``typename`` on code like
|
||||
``typename std::enable_if<...>``, where there's already a ``typename`` and
|
||||
only the ``::type`` at the end is missing.
|
||||
|
||||
- Improved :doc:`bugprone-macro-parentheses
|
||||
<clang-tidy/checks/bugprone/macro-parentheses>` check by printing the macro
|
||||
definition in the warning message if the macro is defined on command line.
|
||||
|
||||
- Improved :doc:`bugprone-misplaced-widening-cast
|
||||
<clang-tidy/checks/bugprone/misplaced-widening-cast>` check by fixing a false
|
||||
positive on bit field assignments when the `CheckImplicitCasts` option is
|
||||
enabled. The check now uses the actual bit field width instead of the
|
||||
declared type to determine if widening occurs.
|
||||
|
||||
- Improved :doc:`bugprone-move-forwarding-reference
|
||||
<clang-tidy/checks/bugprone/move-forwarding-reference>` check by fixing some
|
||||
false positives in the context of moved lambda captures.
|
||||
|
||||
- Improved :doc:`bugprone-narrowing-conversions
|
||||
<clang-tidy/checks/bugprone/narrowing-conversions>` check by fixing a false
|
||||
positive when converting a ``bool`` to a signed integer type.
|
||||
|
||||
- Improved :doc:`bugprone-pointer-arithmetic-on-polymorphic-object
|
||||
<clang-tidy/checks/bugprone/pointer-arithmetic-on-polymorphic-object>` check
|
||||
by fixing a false positive when ``operator[]`` is used in a dependent context.
|
||||
|
||||
- Improved :doc:`bugprone-random-generator-seed
|
||||
<clang-tidy/checks/bugprone/random-generator-seed>` check by adding
|
||||
a new note at the location of the field if the generator is implicitly
|
||||
initialized with a default seed value.
|
||||
|
||||
- Improved :doc:`bugprone-std-namespace-modification
|
||||
<clang-tidy/checks/bugprone/std-namespace-modification>` check by fixing
|
||||
false positives when extending the standard library with a specialization of
|
||||
user-defined type and by removing detection of the compiler generated ``std``
|
||||
namespace extensions.
|
||||
|
||||
- Improved :doc:`bugprone-string-constructor
|
||||
<clang-tidy/checks/bugprone/string-constructor>` check to detect suspicious
|
||||
string constructor calls when the string class constructor has a default
|
||||
allocator argument.
|
||||
|
||||
- Improved :doc:`bugprone-throwing-static-initialization
|
||||
<clang-tidy/checks/bugprone/throwing-static-initialization>` check by adding
|
||||
the `AllowedTypes` option. With this option it is possible to exclude
|
||||
static declarations with specific types from the check.
|
||||
|
||||
- Improved :doc:`bugprone-unchecked-optional-access
|
||||
<clang-tidy/checks/bugprone/unchecked-optional-access>` to recognize common
|
||||
GoogleTest macros such as ``ASSERT_TRUE`` and ``ASSERT_FALSE``, reducing the
|
||||
number of false positives in test code.
|
||||
|
||||
- Improved :doc:`bugprone-unsafe-functions
|
||||
<clang-tidy/checks/bugprone/unsafe-functions>` check by adding the function
|
||||
``std::get_temporary_buffer`` to the default list of unsafe functions. (This
|
||||
function is unsafe, useless, deprecated in C++17 and removed in C++20).
|
||||
|
||||
- Improved :doc:`bugprone-use-after-move
|
||||
<clang-tidy/checks/bugprone/use-after-move>` check:
|
||||
|
||||
- Include the name of the invalidating function in the warning message when a
|
||||
custom invalidation function is used (via the `InvalidationFunctions`
|
||||
option).
|
||||
|
||||
- Add support for annotation of user-defined types as having the same
|
||||
moved-from semantics as standard smart pointers.
|
||||
|
||||
- Do not report explicit call to destructor after move as an invalid use.
|
||||
|
||||
- Avoid false positives when moving object to a base type then accessing
|
||||
non-base members.
|
||||
|
||||
- Avoid false positives when moving object is reinitialized via the base
|
||||
class's ``operator=``.
|
||||
|
||||
- Fix a false positive when a moved-from variable is reinitialized
|
||||
via a ``std::tie()`` assignment (e.g. ``std::tie(a, b) = f(std::move(a),
|
||||
std::move(b))``). The tuple assignment writes back through the stored
|
||||
references, which fully reinitializes the captured variables.
|
||||
|
||||
- Avoid false positives when forwarding a derived object to initialize a base
|
||||
class subobject.
|
||||
|
||||
- Improved :doc:`cert-err33-c
|
||||
<clang-tidy/checks/cert/err33-c>` check by not inheriting
|
||||
`CheckedReturnTypes` option from :doc:`bugprone-unused-return-value
|
||||
<clang-tidy/checks/bugprone/unused-return-value>`, which caused false
|
||||
positives on functions returning ``std::error_code`` or similar types.
|
||||
|
||||
- Improved :doc:`cppcoreguidelines-avoid-capturing-lambda-coroutines
|
||||
<clang-tidy/checks/cppcoreguidelines/avoid-capturing-lambda-coroutines>`
|
||||
check by adding the `AllowExplicitObjectParameters` option. When enabled,
|
||||
lambda coroutines using C++23 deducing ``this`` (explicit object parameter)
|
||||
are not flagged.
|
||||
|
||||
- Improved :doc:`cppcoreguidelines-avoid-non-const-global-variables
|
||||
<clang-tidy/checks/cppcoreguidelines/avoid-non-const-global-variables>`
|
||||
check by adding the `IgnoreMacros` option. When enabled, non-const global
|
||||
variables defined in macros are ignored.
|
||||
|
||||
- Improved :doc:`cppcoreguidelines-init-variables
|
||||
<clang-tidy/checks/cppcoreguidelines/init-variables>` check by ensuring that
|
||||
member pointers are correctly flagged as uninitialized.
|
||||
|
||||
- Fixed :doc:`cppcoreguidelines-init-variables
|
||||
<clang-tidy/checks/cppcoreguidelines/init-variables>` check by excluding
|
||||
Objective-C for-in loop variable declaration.
|
||||
|
||||
- Improved :doc:`cppcoreguidelines-missing-std-forward
|
||||
<clang-tidy/checks/cppcoreguidelines/missing-std-forward>` check by:
|
||||
|
||||
- Correctly handling forwarding in deeply nested lambdas.
|
||||
|
||||
- Fixed false negative when multiple parameters are used in a lambda and
|
||||
only some of them are forwarded.
|
||||
|
||||
- Fixed false positive for constrained template parameters
|
||||
|
||||
- Fixed false positive with ``std::forward`` in brace-init and paren-init
|
||||
lambda captures such as ``[t{std::forward<T>(t)}]``.
|
||||
|
||||
- Improved :doc:`cppcoreguidelines-pro-type-member-init
|
||||
<clang-tidy/checks/cppcoreguidelines/pro-type-member-init>` check by fixing
|
||||
a false positive when a base class has a forward declaration before its
|
||||
definition.
|
||||
|
||||
- Improved :doc:`cppcoreguidelines-pro-type-vararg
|
||||
<clang-tidy/checks/cppcoreguidelines/pro-type-vararg>` check by no longer
|
||||
warning on builtins with custom type checking (e.g., type-generic builtins
|
||||
like ``__builtin_clzg``) that use variadic declarations as an implementation
|
||||
detail.
|
||||
|
||||
- Improved :doc:`cppcoreguidelines-rvalue-reference-param-not-moved
|
||||
<clang-tidy/checks/cppcoreguidelines/rvalue-reference-param-not-moved>` check:
|
||||
|
||||
- Fixed a false positive on implicitly generated functions such as
|
||||
inherited constructors.
|
||||
|
||||
- Added `AllowImplicitMove` option to not warn when an rvalue reference
|
||||
parameter is returned without an explicit ``std::move``.
|
||||
|
||||
- Improved :doc:`cppcoreguidelines-special-member-functions
|
||||
<clang-tidy/checks/cppcoreguidelines/special-member-functions>` check by
|
||||
fixing a false positive with the `AllowImplicitlyDeletedCopyOrMove` option
|
||||
for classes whose copy operations are implicitly deleted by a non-copyable
|
||||
base class.
|
||||
|
||||
- Improved :doc:`cppcoreguidelines-use-enum-class
|
||||
<clang-tidy/checks/cppcoreguidelines/use-enum-class>` check by adding the
|
||||
`IgnoreMacros` option. When enabled, unscoped ``enum`` declarations within
|
||||
macros are ignored.
|
||||
|
||||
- Improved :doc:`fuchsia-statically-constructed-objects
|
||||
<clang-tidy/checks/fuchsia/statically-constructed-objects>` check by fixing a
|
||||
crash when checking value-dependent static member initializers in class templates.
|
||||
|
||||
- Improved :doc:`llvm-use-ranges
|
||||
<clang-tidy/checks/llvm/use-ranges>` check by adding support for the following
|
||||
algorithms: ``std::accumulate``, ``std::replace_copy``, and
|
||||
``std::replace_copy_if``.
|
||||
|
||||
- Improved :doc:`misc-const-correctness
|
||||
<clang-tidy/checks/misc/const-correctness>` check:
|
||||
|
||||
- Added support for analyzing function parameters with the `AnalyzeParameters`
|
||||
option.
|
||||
|
||||
- Fixed false positive where an array of pointers to ``const`` was
|
||||
incorrectly diagnosed as allowing the pointee to be made ``const``.
|
||||
|
||||
- Fixed false positive where a pointer used with placement new was
|
||||
incorrectly diagnosed as allowing the pointee to be made ``const``.
|
||||
|
||||
- Enabled the check for variables declared with ``auto`` (configurable
|
||||
via the `AnalyzeAutoVariables` option) and lambdas (configurable
|
||||
via `AnalyzeLambdas` option).
|
||||
|
||||
- Fixed false positive where calling a non-const member function on a
|
||||
pointer was incorrectly treated as mutating the pointer, when it only
|
||||
mutates the pointee.
|
||||
|
||||
- Fixed false positives when pointers were later passed or bound through
|
||||
``const``-qualified pointer references.
|
||||
|
||||
- Fixed false positive where a pointer returned as a non-const ``void *``
|
||||
was incorrectly diagnosed as allowing its pointee to be made ``const``.
|
||||
|
||||
- Improved :doc:`misc-multiple-inheritance
|
||||
<clang-tidy/checks/misc/multiple-inheritance>` by avoiding false positives when
|
||||
virtual inheritance causes concrete bases to be counted more than once.
|
||||
|
||||
- Improved :doc:`misc-redundant-expression
|
||||
<clang-tidy/checks/misc/redundant-expression>` check:
|
||||
|
||||
- Fixed a crash when evaluating bitwise comparisons against integer constants
|
||||
wider than 64 bits.
|
||||
|
||||
- Avoided false positives when comparing expressions that are structurally
|
||||
identical but use different type aliases.
|
||||
|
||||
- Improved :doc:`misc-throw-by-value-catch-by-reference
|
||||
<clang-tidy/checks/misc/throw-by-value-catch-by-reference>` check:
|
||||
|
||||
- Fixed the `WarnOnLargeObject` option to use the correct name when
|
||||
storing the configuration.
|
||||
|
||||
- Fixed the `CheckThrowTemporaries` option to correctly reflect its
|
||||
configured value in exported settings.
|
||||
|
||||
- Improved :doc:`misc-unused-parameters
|
||||
<clang-tidy/checks/misc/unused-parameters>` check by adding
|
||||
`IgnoreMacroParameters` option to suppress warnings for unused parameters
|
||||
whose declarations originate from macro expansions.
|
||||
|
||||
- Improved :doc:`misc-unused-using-decls
|
||||
<clang-tidy/checks/misc/unused-using-decls>` to not diagnose ``using``
|
||||
declarations as unused if they're exported from a module.
|
||||
|
||||
- Improved :doc:`misc-use-internal-linkage
|
||||
<clang-tidy/checks/misc/use-internal-linkage>` to not suggest giving
|
||||
internal linkage to entities defined in C++ module interface units.
|
||||
Because it only sees one file at a time, the check can't be sure
|
||||
such entities aren't referenced in any other files of that module.
|
||||
|
||||
- Improved :doc:`modernize-avoid-c-style-cast
|
||||
<clang-tidy/checks/modernize/avoid-c-style-cast>` check by fixing an invalid
|
||||
fix-it generated when replacing casts that directly follow a keyword or
|
||||
identifier.
|
||||
|
||||
- Improved :doc:`modernize-deprecated-headers
|
||||
<clang-tidy/checks/modernize/deprecated-headers>` check by avoiding false
|
||||
positives on project headers that use the same name as a standard library
|
||||
header.
|
||||
|
||||
- Improve :doc:`modernize-loop-convert
|
||||
<clang-tidy/checks/modernize/loop-convert>` checks to insert a space when
|
||||
replacing ``*it`` with the loop variable in expressions like ``delete*it``,
|
||||
where the missing space would cause the keyword and the new variable to
|
||||
merge into a single identifier.
|
||||
|
||||
- Improved :doc:`modernize-macro-to-enum
|
||||
<clang-tidy/checks/modernize/macro-to-enum>` check by preserving source file
|
||||
line endings in fix-it replacements.
|
||||
|
||||
- Improved :doc:`modernize-pass-by-value
|
||||
<clang-tidy/checks/modernize/pass-by-value>` check by adding `IgnoreMacros`
|
||||
option to suppress warnings in macros.
|
||||
|
||||
- Improved :doc:`modernize-redundant-void-arg
|
||||
<clang-tidy/checks/modernize/redundant-void-arg>` check to work in C23.
|
||||
|
||||
- Improved :doc:`modernize-return-braced-init-list
|
||||
<clang-tidy/checks/modernize/return-braced-init-list>` check to apply fix-it
|
||||
when type qualifiers and/or reference modifiers are used with parameters.
|
||||
|
||||
- Improved :doc:`modernize-type-traits
|
||||
<clang-tidy/checks/modernize/type-traits>` check to suggest usage of
|
||||
``std::remove_cvref_t`` when applicable.
|
||||
|
||||
- Improved :doc:`modernize-use-default-member-init
|
||||
<clang-tidy/checks/modernize/use-default-member-init>` check by fixing a
|
||||
false positive when a constructor initializer refers to a declaration that
|
||||
would not be visible from the inserted default member initializer. The
|
||||
`IgnoreNonVisibleReferences` option can be set to `false` to warn without
|
||||
emitting fix-its for these cases.
|
||||
|
||||
- Improved :doc:`modernize-use-equals-delete
|
||||
<clang-tidy/checks/modernize/use-equals-delete>` check by only warning on
|
||||
private deleted functions, if they do not have a public overload or are a
|
||||
special member function.
|
||||
|
||||
- Improved :doc:`modernize-use-nodiscard
|
||||
<clang-tidy/checks/modernize/use-nodiscard>` check by avoiding false
|
||||
positives on functions returning specializations of class templates marked
|
||||
``[[nodiscard]]``.
|
||||
|
||||
- Improved :doc:`modernize-use-override
|
||||
<clang-tidy/checks/modernize/use-override>` check by adding the
|
||||
`AllowVirtualAndOverride` option to allow keeping ``virtual`` on methods
|
||||
that are also marked ``override``.
|
||||
|
||||
- Improved :doc:`modernize-use-ranges
|
||||
<clang-tidy/checks/modernize/use-ranges>` check:
|
||||
|
||||
- Preserved used iterator results when replacing ``std::unique`` calls with
|
||||
``std::ranges::unique``.
|
||||
|
||||
- Preserved used iterator results when replacing ``std::remove``,
|
||||
``std::remove_if``, ``std::partition``, ``std::stable_partition``, and
|
||||
``std::rotate`` calls with their ``std::ranges`` counterparts.
|
||||
|
||||
- Improved :doc:`modernize-use-scoped-lock
|
||||
<clang-tidy/checks/modernize/use-scoped-lock>` check by fixing a false
|
||||
negative where multiple ``std::scoped_lock`` declarations, or a mix of
|
||||
``std::scoped_lock`` and ``std::lock_guard`` declarations, in the same scope
|
||||
were not flagged.
|
||||
|
||||
- Improved :doc:`modernize-use-std-format
|
||||
<clang-tidy/checks/modernize/use-std-format>` check:
|
||||
|
||||
- Fixed a crash when an argument is part of a macro expansion.
|
||||
|
||||
- Added missing ``#include`` insertion when the format function call
|
||||
appears as an argument to a macro.
|
||||
|
||||
- Improved :doc:`modernize-use-std-print
|
||||
<clang-tidy/checks/modernize/use-std-print>` check by adding missing
|
||||
``#include`` insertion when the format function call appears as an
|
||||
argument to a macro.
|
||||
|
||||
- Improved :doc:`modernize-use-trailing-return-type
|
||||
<clang-tidy/checks/modernize/use-trailing-return-type>` check by fixing
|
||||
spurious ``missing '(' after '__has_feature'`` errors caused by builtin
|
||||
macros appearing in the return type of a function.
|
||||
|
||||
- Improved :doc:`modernize-use-using
|
||||
<clang-tidy/checks/modernize/use-using>` check:
|
||||
|
||||
- Avoid generating invalid code for function types with redundant
|
||||
parentheses.
|
||||
|
||||
- Preserve inline comment blocks that appear between the ``typedef``'s parts.
|
||||
|
||||
- The `IgnoreExternC` option is now set to `true` by default.
|
||||
|
||||
- Improved :doc:`performance-enum-size
|
||||
<clang-tidy/checks/performance/enum-size>` check:
|
||||
|
||||
- Exclude ``enum`` in ``extern "C"`` blocks.
|
||||
|
||||
- Improved the ignore list to correctly handle ``typedef`` and ``enum``.
|
||||
|
||||
- Improved :doc:`performance-inefficient-string-concatenation
|
||||
<clang-tidy/checks/performance/inefficient-string-concatenation>` check by
|
||||
adding support for detecting inefficient string concatenation in ``do-while``
|
||||
loops.
|
||||
|
||||
- Improved :doc:`performance-inefficient-vector-operation
|
||||
<clang-tidy/checks/performance/inefficient-vector-operation>` check by
|
||||
correctly handling vector-like classes when ``push_back``/``emplace_back`` are
|
||||
inherited.
|
||||
|
||||
- Improved :doc:`performance-move-const-arg
|
||||
<clang-tidy/checks/performance/move-const-arg>` check by avoiding false
|
||||
positives on trivially copyable types with a non-public copy constructor.
|
||||
|
||||
- Improved :doc:`performance-prefer-single-char-overloads
|
||||
<clang-tidy/checks/performance/prefer-single-char-overloads>` check:
|
||||
|
||||
- Now analyzes calls to the ``starts_with``, ``ends_with``, ``contains``,
|
||||
and ``operator+=`` string member functions.
|
||||
|
||||
- Fixes false negatives when using ``std::set`` from ``libstdc++``.
|
||||
|
||||
- Improved :doc:`performance-trivially-destructible
|
||||
<clang-tidy/checks/performance/trivially-destructible>` check by fixing
|
||||
false positives when a class is seen through both a header include and
|
||||
a C++20 module import.
|
||||
|
||||
- Improved :doc:`readability-braces-around-statements
|
||||
<clang-tidy/checks/readability/braces-around-statements>` check by fixing a
|
||||
crash when diagnosing a statement that ends in the middle of a macro body
|
||||
expansion.
|
||||
|
||||
- Improved :doc:`readability-container-size-empty
|
||||
<clang-tidy/checks/readability/container-size-empty>` check:
|
||||
|
||||
- Fix a crash when a member expression has a non-identifier name.
|
||||
|
||||
- Reduce verbosity by removing the note indicating source location of the
|
||||
``empty`` function.
|
||||
|
||||
- Fixed a false positive with suggesting ``empty`` when comparing a container
|
||||
to a default-constructed object of an unrelated type.
|
||||
|
||||
- Extended to warn when the non-member ``std::size()`` function is used
|
||||
in a Boolean context or compared to ``0`` or ``1``, consistent with the
|
||||
existing ``size()``/``length()`` member call detection.
|
||||
|
||||
- Improved :doc:`readability-convert-member-functions-to-static
|
||||
<clang-tidy/checks/readability/convert-member-functions-to-static>` check:
|
||||
|
||||
- Fixing a false positive where ``const`` member functions were incorrectly
|
||||
flagged when they are part of a const/non-const overload pair.
|
||||
|
||||
- Correctly detecting ``this`` usage when a generic lambda calls an overloaded
|
||||
member function.
|
||||
|
||||
- Improved :doc:`readability-delete-null-pointer
|
||||
<clang-tidy/checks/readability/delete-null-pointer>` check by avoiding invalid
|
||||
fix-its for ``if`` statements with condition variables or initializers.
|
||||
|
||||
- Improved :doc:`readability-else-after-return
|
||||
<clang-tidy/checks/readability/else-after-return>` check:
|
||||
|
||||
- Fixed missed diagnostics when ``if`` statements appear in unbraced
|
||||
``switch`` case labels.
|
||||
|
||||
- Fixed a false positive involving ``if`` statements which contain
|
||||
a ``return``, ``break``, etc., jumped over by a ``goto``.
|
||||
|
||||
- Fixed the check potentially breaking code by deleting one too many
|
||||
characters following an ``else`` or a curly brace.
|
||||
|
||||
- Added support for handling attributed ``if`` then-branches such as
|
||||
``[[likely]]`` and ``[[unlikely]]``.
|
||||
|
||||
- Diagnose and remove redundant ``else`` branches after calls to
|
||||
``[[noreturn]]`` functions.
|
||||
|
||||
- Improved :doc:`readability-enum-initial-value
|
||||
<clang-tidy/checks/readability/enum-initial-value>` check: the warning message
|
||||
now uses separate note diagnostics for each uninitialized enumerator, making
|
||||
it easier to see which specific enumerators need explicit initialization.
|
||||
|
||||
- Improved :doc:`readability-function-size
|
||||
<clang-tidy/checks/readability/function-size>` check by adding an
|
||||
`IgnoreMacros` option to exclude statements, branches, nesting levels, and
|
||||
variable declarations inside macros from the reported metrics.
|
||||
|
||||
- Improved :doc:`readability-identifier-length
|
||||
<clang-tidy/checks/readability/identifier-length>` check:
|
||||
|
||||
- A new option, named `LineCountThreshold`, is added to silence warnings for
|
||||
short-lived variables, based on distance between declaration and last use.
|
||||
|
||||
- Support for structured bindings is added. Two new options, named
|
||||
`MinimumBindingNameLength` and `IgnoredBindingNames` respectively, are
|
||||
added to configure the behavior of the check regarding this new identifier
|
||||
kind. By default, names with at least 2 characters are required and the
|
||||
only exception allowed is `_`.
|
||||
|
||||
- Improved :doc:`readability-identifier-naming
|
||||
<clang-tidy/checks/readability/identifier-naming>` check:
|
||||
|
||||
- Fixed incorrect naming style application to C++17 structured bindings.
|
||||
|
||||
- Fixed a false positive where function templates could be diagnosed as generic
|
||||
identifiers when `DefaultCase` was enabled.
|
||||
|
||||
- Fixed a crash in dependent base lookup when
|
||||
`AggressiveDependentMemberLookup` option is enabled.
|
||||
|
||||
- Fixed a false positive from naming style lookup for declarations inside macro
|
||||
arguments.
|
||||
|
||||
- Improved :doc:`readability-implicit-bool-conversion
|
||||
<clang-tidy/checks/readability/implicit-bool-conversion>` check:
|
||||
|
||||
- Fixed a false positive where `AllowPointerConditions` and
|
||||
`AllowIntegerConditions` options did not suppress warnings when the
|
||||
condition expression involved temporaries (e.g. passing a string literal to
|
||||
a ``const std::string&`` parameter).
|
||||
|
||||
- Warn and provide fix-its when a macro defined in a system header (e.g.
|
||||
``NULL``) is implicitly converted to ``bool``.
|
||||
|
||||
- Added `AllowLogicalOperatorConversion` option to suppress warnings on
|
||||
implicit conversions of logical operator results (``&&``, ``||``, ``!``)
|
||||
to ``bool`` in C.
|
||||
|
||||
- Fixed a false positive where ``bool`` conditions in C conditional
|
||||
operators were diagnosed as implicit conversions to ``int``.
|
||||
|
||||
- Improved :doc:`readability-inconsistent-ifelse-braces
|
||||
<clang-tidy/checks/readability/inconsistent-ifelse-braces>` check to
|
||||
correctly handle labeled statements of ``if``/``else`` bodies.
|
||||
|
||||
- Improved :doc:`readability-non-const-parameter
|
||||
<clang-tidy/checks/readability/non-const-parameter>` check:
|
||||
|
||||
- Avoid false positives on parameters used in dependent expressions
|
||||
(e.g. inside generic lambdas), including constructor-style dependent initializers.
|
||||
|
||||
- Fixed a false positive in array subscript expressions where the types are
|
||||
not yet resolved.
|
||||
|
||||
- Fixed a false positive when adding ``const`` to a pointer parameter would
|
||||
conflict with an existing overload.
|
||||
|
||||
- Fixed a crash when analyzing a redeclaration whose initializer is attached
|
||||
to another declaration.
|
||||
|
||||
- Improved :doc:`readability-redundant-casting
|
||||
<clang-tidy/checks/readability/redundant-casting>` check by adding the
|
||||
`IgnoreImplicitCasts` option (default `false`) to flag casts as redundant
|
||||
when at least one operand of a binary operation matches the cast type due to
|
||||
implicit conversion. For example, ``static_cast<float>(1.0f + 1)`` is now
|
||||
identified as redundant since ``1`` is implicitly converted to ``float``.
|
||||
Setting this option to `true` restores the previous behavior.
|
||||
|
||||
- Improved :doc:`readability-redundant-member-init
|
||||
<clang-tidy/checks/readability/redundant-member-init>` check by adding an
|
||||
`IgnoreMacros` option to suppress warnings when the initializer involves
|
||||
macros that may expand differently in other configurations.
|
||||
|
||||
- Improved :doc:`readability-redundant-parentheses
|
||||
<clang-tidy/checks/readability/redundant-parentheses>` check:
|
||||
|
||||
- Fixed a false positive for parentheses present around an overloaded operator
|
||||
in the context of a binary operation.
|
||||
|
||||
- Fixed a bug where clients that apply fix-its without :program:`clang-tidy`'s
|
||||
cleanup could produce invalid code by joining adjacent tokens.
|
||||
|
||||
- Added support for parentheses around subscript operators (``(E1[E2])`` -> ``E1[E2]``).
|
||||
|
||||
- Improved :doc:`readability-redundant-preprocessor
|
||||
<clang-tidy/checks/readability/redundant-preprocessor>` check by fixing a
|
||||
false positive for nested ``#if`` directives using different builtin
|
||||
expressions such as ``__has_builtin`` and ``__has_cpp_attribute``.
|
||||
|
||||
- Improved :doc:`readability-simplify-boolean-expr
|
||||
<clang-tidy/checks/readability/simplify-boolean-expr>` check to provide valid
|
||||
fix suggestions for C23 and later by not using ``static_cast``.
|
||||
|
||||
- Improved :doc:`readability-simplify-subscript-expr
|
||||
<clang-tidy/checks/readability/simplify-subscript-expr>` check by fixing
|
||||
missing warnings when subscripting an object held inside a generic
|
||||
container (e.g. subscripting a ``std::string`` held inside a
|
||||
``std::vector<std::string>``).
|
||||
|
||||
- Improved :doc:`readability-suspicious-call-argument
|
||||
<clang-tidy/checks/readability/suspicious-call-argument>` check by avoiding a
|
||||
crash from invalid ``Abbreviations`` option.
|
||||
|
||||
- Improved :doc:`readability-trivial-switch
|
||||
<clang-tidy/checks/readability/trivial-switch>` check by adding an
|
||||
`IgnoreMacros` option. When enabled, the check will ignore switch
|
||||
statements originating from macros.
|
||||
|
||||
- Improved :doc:`readability-use-anyofallof
|
||||
<clang-tidy/checks/readability/use-anyofallof>` check by emitting a diagnostic
|
||||
note to suggest materializing the temporary range when iterating over temporary
|
||||
range expressions or initializer lists, as reusing them directly could be unsafe.
|
||||
|
||||
Removed checks
|
||||
^^^^^^^^^^^^^^
|
||||
|
||||
|
|
@ -959,8 +115,6 @@ Improvements to include-fixer
|
|||
Improvements to clang-include-fixer
|
||||
-----------------------------------
|
||||
|
||||
- Fixed crashes when command-line argument parsing failed at unknown tool options.
|
||||
|
||||
Improvements to modularize
|
||||
--------------------------
|
||||
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load diff
|
|
@ -1,7 +1,7 @@
|
|||
# The LLVM Version number information
|
||||
|
||||
if(NOT DEFINED LLVM_VERSION_MAJOR)
|
||||
set(LLVM_VERSION_MAJOR 23)
|
||||
set(LLVM_VERSION_MAJOR 24)
|
||||
endif()
|
||||
if(NOT DEFINED LLVM_VERSION_MINOR)
|
||||
set(LLVM_VERSION_MINOR 0)
|
||||
|
|
|
|||
|
|
@ -33,15 +33,8 @@ page](https://llvm.org/releases/).
|
|||
|
||||
## Non-comprehensive list of changes in this release
|
||||
|
||||
- Global, allocatable, and pointer arrays are now aligned to 64 bytes. The
|
||||
flang runtime allocator was updated to honor this alignment for allocatable
|
||||
and pointer arrays.
|
||||
|
||||
## New Compiler Flags
|
||||
|
||||
- The warning flags with prefixes -Wopen-mp and -Wopen-acc have been deprecated in favor of corrected spellings with the respective prefixes -Wopenmp and -Wopenacc. Removal of the deprecated options is planned for LLVM 25 (July 2027).
|
||||
- The `-Werror` flag will cause all warnings to become errors. This includes warnings about support for OpenMP versions, which will now prevent the compilation from happening with the `-Werror` flag. These OpenMP warnings can be disabled with `-Wno-experimental-option`.
|
||||
|
||||
## Windows Support
|
||||
|
||||
## Fortran Language Changes in Flang
|
||||
|
|
|
|||
|
|
@ -36,7 +36,7 @@
|
|||
// _LIBCPP_VERSION represents the version of libc++, which matches the version of LLVM.
|
||||
// Given a LLVM release LLVM XX.YY.ZZ (e.g. LLVM 17.0.1 == 17.00.01), _LIBCPP_VERSION is
|
||||
// defined to XXYYZZ.
|
||||
# define _LIBCPP_VERSION 230000
|
||||
# define _LIBCPP_VERSION 240000
|
||||
|
||||
# if defined(_LIBCPP_ABI_MICROSOFT) && !defined(_LIBCPP_NO_VCRUNTIME)
|
||||
# define _LIBCPP_ABI_VCRUNTIME
|
||||
|
|
|
|||
|
|
@ -29,149 +29,18 @@ Non-comprehensive list of changes in this release
|
|||
ELF Improvements
|
||||
----------------
|
||||
|
||||
* Input file loading is now parallelized, meaningfully reducing link time
|
||||
for large links.
|
||||
(`#191690 <https://github.com/llvm/llvm-project/pull/191690>`_)
|
||||
* ``--gc-sections`` mark phase is now parallelized.
|
||||
(`#189321 <https://github.com/llvm/llvm-project/pull/189321>`_)
|
||||
* Relocation scanning was rewritten as target-specific scanners for all
|
||||
targets with shared library support, devirtualizing the hot
|
||||
relocation-classification path.
|
||||
|
||||
* Added ``--bp-compression-sort-section=<glob>[=<layout_priority>[=<match_priority>]]``,
|
||||
replacing the old coarse ``--bp-compression-sort`` modes with a way to split
|
||||
input sections into multiple compression groups, run balanced partitioning
|
||||
independently per group, and leave out sections that are poor candidates for
|
||||
BP.
|
||||
``layout_priority`` controls group placement order (lower value = placed
|
||||
first, default 0). ``match_priority`` resolves conflicts when multiple globs
|
||||
match the same section (lower value = higher priority; explicit priority
|
||||
beats positional last-match-wins; default: positional). In ELF, the glob
|
||||
matches input section names (e.g. ``.text.unlikely.code1``).
|
||||
* Added ``-z memtag-{mode,heap,stack}`` as generic replacements for the
|
||||
Android-specific ``--android-memtag-*`` flags; ``--android-memtag-note``
|
||||
keeps the Android-specific memtag note opt-in.
|
||||
(`#188205 <https://github.com/llvm/llvm-project/pull/188205>`_)
|
||||
* Unused space in executable output sections is now filled with trap, primarily
|
||||
for ``-z separate-code`` mode.
|
||||
(`#176845 <https://github.com/llvm/llvm-project/pull/176845>`_)
|
||||
* ``.eh_frame_hdr`` now supports the ``DW_EH_PE_sdata8`` encoding,
|
||||
auto-upgrading from ``sdata4`` when a table entry or the frame pointer
|
||||
exceeds the 32-bit range, instead of erroring out for large executables.
|
||||
(`#179089 <https://github.com/llvm/llvm-project/pull/179089>`_)
|
||||
* ``vna_flags`` is now set to ``VER_FLG_WEAK`` when all undefined references
|
||||
to a version are weak, allowing glibc's dynamic loader to warn instead of
|
||||
error when the version is missing at runtime.
|
||||
(`#176673 <https://github.com/llvm/llvm-project/pull/176673>`_)
|
||||
* ``.ltext.*`` input sections are now merged into a single ``.ltext`` output
|
||||
section, matching the existing ``.ldata.*``/``.lrodata.*``/``.lbss.*``
|
||||
handling for the large code model with ``-ffunction-sections``.
|
||||
(`#190305 <https://github.com/llvm/llvm-project/pull/190305>`_)
|
||||
* ``.tbss`` output sections may now use an explicit address expression;
|
||||
previously it was silently overridden to follow the preceding ``.tbss``.
|
||||
(`#196447 <https://github.com/llvm/llvm-project/pull/196447>`_)
|
||||
* ``--discard-locals``/``--discard-all`` combined with ``-r``/``--emit-relocs``
|
||||
no longer discard local symbols that are referenced only from retained
|
||||
non-``SHF_ALLOC`` sections (e.g. ``.L`` symbols referenced by
|
||||
``.debug_info``), fixing DWARF corruption in the output.
|
||||
(`#209035 <https://github.com/llvm/llvm-project/pull/209035>`_)
|
||||
(`#209042 <https://github.com/llvm/llvm-project/pull/209042>`_)
|
||||
* ``--retain-symbols-file`` now filters ``.symtab`` instead of ``.dynsym``,
|
||||
matching GNU ld.
|
||||
(`#209063 <https://github.com/llvm/llvm-project/pull/209063>`_)
|
||||
* ``INCLUDE`` in linker scripts now fully parses its own content instead of
|
||||
sharing a lexer buffer stack with the includer, fixing spurious acceptance
|
||||
of malformed scripts.
|
||||
(`#193427 <https://github.com/llvm/llvm-project/pull/193427>`_)
|
||||
* The ``OVERLAY`` linker script command now accepts any
|
||||
output-section-command (e.g. symbol assignments), not just input section
|
||||
descriptions.
|
||||
(`#203524 <https://github.com/llvm/llvm-project/pull/203524>`_)
|
||||
* Thunks are no longer reused across an ``OVERLAY`` boundary unless the
|
||||
target output section is guaranteed to be resident at the same time.
|
||||
(`#200415 <https://github.com/llvm/llvm-project/pull/200415>`_)
|
||||
* When a ``SECTIONS`` command interleaves relro and non-relro sections, lld now
|
||||
emits one ``PT_GNU_RELRO`` segment per contiguous run of relro sections
|
||||
instead of reporting a ``not contiguous with other relro sections`` error.
|
||||
* ``SHT_NOBITS`` sections are now excluded from LMA overlap checks, matching
|
||||
GNU ld and allowing e.g. a startup section to share an LMA with ``.bss``
|
||||
in embedded linker scripts.
|
||||
(`#196423 <https://github.com/llvm/llvm-project/pull/196423>`_)
|
||||
* LTO: the middle-end no longer emits new references to, or internalizes,
|
||||
symbols defined in bitcode after the extracted-bitcode set has been fixed,
|
||||
preventing undefined symbol references from transforms that run after
|
||||
linking has determined which bitcode files to extract.
|
||||
(`#164916 <https://github.com/llvm/llvm-project/pull/164916>`_)
|
||||
* DTLTO: significantly improved the performance of adding backend output
|
||||
files to the link, especially on Windows.
|
||||
(`#186366 <https://github.com/llvm/llvm-project/pull/186366>`_)
|
||||
* For AArch64, fixed ``.relr.auth.dyn`` -> ``.rela.dyn`` movement to
|
||||
properly adjust ``__rela_iplt_start``/``__rela_iplt_end`` and size the
|
||||
``.dynamic`` section for both tags.
|
||||
(`#195649 <https://github.com/llvm/llvm-project/pull/195649>`_)
|
||||
* For AArch64, handle Memtag globals for ``R_AARCH64_AUTH_ABS64``.
|
||||
(`#173291 <https://github.com/llvm/llvm-project/pull/173291>`_)
|
||||
* For AArch64, fixed TLS GD against non-preemptible dynamic symbols (e.g.
|
||||
``protected`` or ``-Bsymbolic``) in DSOs, which previously produced an
|
||||
inconsistent GOT entry and spurious preemption.
|
||||
(`#207881 <https://github.com/llvm/llvm-project/pull/207881>`_)
|
||||
* For AArch64, ``adrp``+``ldr`` GOT relaxation is now decided per-symbol,
|
||||
all-or-nothing, avoiding invalid relaxation when a branch target sits
|
||||
between the ``adrp`` and ``ldr`` of a pair.
|
||||
(`#208396 <https://github.com/llvm/llvm-project/pull/208396>`_)
|
||||
* For AArch64, a redundant local-exec TLS ``add`` with a zero high-12-bits
|
||||
immediate is now relaxed to a ``nop``.
|
||||
(`#204286 <https://github.com/llvm/llvm-project/pull/204286>`_)
|
||||
* x86-64 CFI jump table relaxation reduces the runtime overhead of indirect
|
||||
calls under Control Flow Integrity by opportunistically moving eligible
|
||||
function bodies into the jump table itself.
|
||||
(`#147424 <https://github.com/llvm/llvm-project/pull/147424>`_)
|
||||
|
||||
Breaking changes
|
||||
----------------
|
||||
|
||||
* The symbol partition feature has been removed. lld no longer recognizes
|
||||
``SHT_LLVM_SYMPART`` sections, which are now treated as ordinary sections. The
|
||||
feature saw no adoption beyond a Chromium experiment that has since been
|
||||
retired.
|
||||
|
||||
* An OutputSection that has an address expression, and is also assigned
|
||||
to a MEMORY region, will now use the address expression in preference
|
||||
to the next available location in the MEMORY region. This brings LLD
|
||||
in line with GNU ld, but is a change in behavior from previous LLD
|
||||
releases.
|
||||
|
||||
* The default extension for time trace files is now ``.time-trace.json``.
|
||||
|
||||
COFF Improvements
|
||||
-----------------
|
||||
|
||||
* Added support for ``.obj.arm64ec`` sections to allow embedding ARM64EC object
|
||||
files inside ARM64 object files.
|
||||
|
||||
MinGW Improvements
|
||||
------------------
|
||||
|
||||
* Added ``--push-state`` and ``--pop-state``, offering the same semantics as
|
||||
when used with the ELF linker: The state of ``--Bstatic``/``--Bdynamic`` and
|
||||
``--whole-archive`` are pushed onto a stack and popped from it.
|
||||
|
||||
* Added the ``--native-def`` option to specify the native module-definition
|
||||
file for ARM64X targets. If a module-definition file is passed without this
|
||||
option, it is used for both native and EC views. ``--native-def=`` can be
|
||||
used to prevent the native view from using the default file.
|
||||
|
||||
MachO Improvements
|
||||
------------------
|
||||
|
||||
* ``--bp-compression-sort-section`` now accepts optional layout and match
|
||||
priorities (same syntax as ELF). In Mach-O, the glob matches the
|
||||
concatenated segment+section name (e.g. ``__TEXT__text``).
|
||||
* Restructure thunk generation algorithm to be more efficiently create thunks
|
||||
(`#193367 <https://github.com/llvm/llvm-project/pull/193367>`_)
|
||||
* Alphabetically sort LC_LINKER_OPTIONS before processing to match Apple linker behavior
|
||||
(`#201604 https://github.com/llvm/llvm-project/pull/201604`)
|
||||
|
||||
WebAssembly Improvements
|
||||
------------------------
|
||||
|
||||
|
|
|
|||
|
|
@ -54,181 +54,22 @@ Makes programs 10x faster by doing Special New Thing.
|
|||
|
||||
### Changes to the LLVM IR
|
||||
|
||||
* Removed `llvm.convert.to.fp16` and `llvm.convert.from.fp16`
|
||||
intrinsics. These are equivalent to `fptrunc` and `fpext` with half
|
||||
with a bitcast.
|
||||
|
||||
* "denormal-fp-math" and "denormal-fp-math-f32" string attributes were
|
||||
migrated to first-class denormal_fpenv attribute.
|
||||
|
||||
* The `"nooutline"` attribute is now writen as `nooutline`. Existing IR and
|
||||
bitcode will be automatically updated.
|
||||
|
||||
* `ConstantPointerNull` can now represent fixed and scalable vector splats of
|
||||
null pointers. Such constants may print as `splat (ptr null)` instead of
|
||||
`zeroinitializer`.
|
||||
|
||||
* LLVM IR floating-point literals have greatly changed:
|
||||
|
||||
* The old hexadecimal bitwise representation is deprecated and will be removed
|
||||
in the next revision. It is replaced with a unified `f0x` prefix.
|
||||
|
||||
* Hexadecimal literals akin to C99's syntax are supported.
|
||||
|
||||
* Special values for infinities and NaNs, including NaN payloads, are added.
|
||||
|
||||
* The standard textual output for floating-point literals is changed to take
|
||||
advantage of the new floating-point literals formats.
|
||||
|
||||
* The resume/destroy functions emitted for the switch-resume ABI (C++20
|
||||
coroutines) now use `CallingConv::C` instead of `CallingConv::Fast`. This
|
||||
stabilizes the coroutine ABI across LLVM versions and aligns it with other
|
||||
vendors. The change is observationally identical on targets where `fastcc`
|
||||
and `ccc` agree for `void(ptr)` (x86_64, AArch64, RISC-V, ...) but is an ABI
|
||||
break on i686, MIPS O32, PowerPC64 ELFv1, and Lanai.
|
||||
|
||||
* Assume bundles now only accept attributes that are actually handled.
|
||||
Specifically, they are ``align``, ``cold``, ``dereferenceable``,
|
||||
``dereferenceable_or_null``, ``nonnull``, ``noundef`` and
|
||||
``separate_storage``.
|
||||
|
||||
* Fast math flags are now permitted on `uitofp` and `sitofp`.
|
||||
|
||||
* The ``modular-format`` attribute now supports the ``fixed`` aspect for C
|
||||
ISO 18037 fixed-point ``printf`` specifiers.
|
||||
|
||||
* Added `noipa` attribute which disables interprocedural analyses that inspect
|
||||
the definition of the function. This attribute does *not* control inlining or
|
||||
outlining. Add the `noinline` and `nooutline` attributes as well in cases
|
||||
where inlining and outlining should additionally be disabled.
|
||||
|
||||
* Added support for ``callgraph`` metadata. The `!callgraph` metadata
|
||||
associates a function definition with its type identifier and is used for call
|
||||
graph section generation. See the [callgraph Metadata](https://llvm.org/docs/LangRef.html#callgraph-metadata)
|
||||
section of the LangRef for details.
|
||||
|
||||
* The `dereferenceable` and `dereferenceable_or_null` attributes (and
|
||||
corresponding metadata) now apply only at the point of definition, instead of
|
||||
for the execution of the function (for arguments) or forever (for returns).
|
||||
|
||||
* `alwaysinline` no longer bypasses inlining compatibility checks based on
|
||||
target features. Inlining will only be performed if it is safe to do so.
|
||||
|
||||
* Module-level inline assembly now accepts optional `target_features` and
|
||||
`target_cpu` properties. This resolves errors during LTO on some
|
||||
architectures.
|
||||
|
||||
### Changes to LLVM infrastructure
|
||||
|
||||
* Removed ``Constant::isZeroValue``. It was functionally identical to
|
||||
``Constant::isNullValue`` for all types except floating-point negative
|
||||
zero. All callers should use ``isNullValue`` instead. ``isZeroValue``
|
||||
will be reintroduced in the future with bitwise-all-zeros semantics
|
||||
to support non-zero null pointers.
|
||||
|
||||
* Added support for specifying the null pointer bit representation per
|
||||
address space in `DataLayout`. Pointer specifications (`p`) accept new
|
||||
flags: `z` (null is all-zeros) and `o` (null is all-ones). Address
|
||||
spaces without an explicit flag default to all-zeros. See the
|
||||
`DataLayout` section of the
|
||||
[LangRef](https://llvm.org/docs/LangRef.html#data-layout) for details.
|
||||
|
||||
* Removed TypePromoteFloat legalization from SelectionDAG
|
||||
|
||||
* Removed `bugpoint`. Usage has been replaced by `llvm-reduce` and
|
||||
`llvm/utils/reduce_pipeline.py`.
|
||||
|
||||
* The ``Br`` opcode was split into two opcodes separating unconditional
|
||||
(``UncondBr``) and conditional (``CondBr``) branches.
|
||||
|
||||
* ``BranchInst`` was deprecated in favor of ``UncondBrInst`` and ``CondBrInst``.
|
||||
|
||||
* The operand order of ``CondBr`` instructions was adjusted to match the
|
||||
successor order. This can cause subtle breakage when using ``getOperand`` or
|
||||
``setOperand`` to access successors.
|
||||
|
||||
* The ``llvm::sys::fs`` link creation API has been refactored:
|
||||
|
||||
* ``create_link`` now tries to create a symbolic link first, falling back to a
|
||||
hard link if that fails (previously it created a symlink on Unix and a hard
|
||||
link on Windows).
|
||||
* Added ``create_symlink``, which always creates a symbolic link. On windows
|
||||
this may fail if symlink permissions are not available.
|
||||
* Added ``readlink``, which reads the target of a symbolic link.
|
||||
|
||||
* Bitcode libraries can now implement compiler-managed library functions
|
||||
(libcalls) without causing incorrect API manipulation or undefined references
|
||||
([#177046](https://github.com/llvm/llvm-project/pull/125687)). Note that
|
||||
there are still issues with invalid compiler reasoning about some functions
|
||||
in bitcode, e.g. `malloc`. Not yet supported on MachO or when using
|
||||
distributed ThinLTO.
|
||||
|
||||
* ``ConstantFP`` now supports vector types and is the canonical form returned by
|
||||
``ConstantVector::getSplat(C)`` when ``C`` is a scalar ``ConstantFP``.
|
||||
|
||||
* ``DenseMap``, ``DenseSet``, ``StringMap``, and ``StringSet`` ``erase`` now
|
||||
invalidates all iterators and references into the container, not just the
|
||||
iterator for the erased element. Use the new ``remove_if`` member to erase
|
||||
matching elements in a single pass instead of erasing while iterating.
|
||||
|
||||
* ``TargetRegisterInfo::getMinimalPhysRegClass`` and related APIs have been
|
||||
refactored and no longer take a type. This API is also now precomputed in
|
||||
TableGen to improve compile-time.
|
||||
|
||||
* ``APInt::sqrt`` (square root rounded to nearest integer) has been replaced
|
||||
with ``APInt::sqrtFloor`` (floor of square root).
|
||||
|
||||
### Changes to building LLVM
|
||||
|
||||
### Changes to TableGen
|
||||
|
||||
* Outer let statements use ``ID{n-m}`` instead of ``ID<n-m>`` to be consistent
|
||||
with inner let statements.
|
||||
|
||||
### Changes to Interprocedural Optimizations
|
||||
|
||||
### Changes to Vectorizers
|
||||
|
||||
### Changes to the AArch64 Backend
|
||||
|
||||
* The `sysp`, `mrrs`, and `msrr` instructions are now accepted without
|
||||
requiring the `+d128` feature gating.
|
||||
* Added a new internal option `-aarch64-emit-debug-tls-location` to allow the
|
||||
emission of `DW_AT_location` for thread-local variables. This is currently
|
||||
disabled by default to maintain compatibility with Binutils and LLVM older
|
||||
toolchains that do not define the `R_AARCH64_TLS_DTPREL64` static relocation
|
||||
type for TLS offsets.
|
||||
* A bug was fixed that caused LLVM IR inline assembly clobbers of the x29 and
|
||||
x30 registers to be ignored when they were written using their xN names
|
||||
instead of the ABI names FP and LR. Note that LLVM IR produced by Clang
|
||||
always uses the ABI names, but other frontends may not.
|
||||
([#167783](https://github.com/llvm/llvm-project/pull/167783))
|
||||
|
||||
### Changes to the AMDGPU Backend
|
||||
|
||||
* Initial support for gfx1310
|
||||
|
||||
* The `"amdgpu-num-sgpr"` and `"amdgpu-num-vgpr"` IR function attributes
|
||||
(generated by the Clang `amdgpu_num_sgpr` and `amdgpu_num_vgpr` attributes)
|
||||
are now deprecated. Use `"amdgpu-waves-per-eu"` instead. The backend still
|
||||
honors the attributes; Clang emits a `-Wdeprecated-declarations` warning when
|
||||
the source attributes are used.
|
||||
* The `relaxed-buffer-oob-mode` subtarget feature has been replaced by two
|
||||
module flags, `amdgpu.buffer.oob.mode` and `amdgpu.tbuffer.oob.mode`, which
|
||||
control out-of-bounds semantics (see the AMDGPU User Guide). Frontends that
|
||||
previously relied on the subtarget feature to enable misaligned buffer merging
|
||||
must now set the corresponding module flag to `1` (relaxed). An absent flag is
|
||||
treated as strict by the backend.
|
||||
|
||||
* Changed triple naming system from "amdgcn" to "amdgpu" plus a subarch suffix.
|
||||
|
||||
### Changes to the ARM Backend
|
||||
|
||||
* The `r14` register can now be used as an alias for the link register `lr`
|
||||
in inline assembly. Clang always canonicalizes the name to `lr`, but other
|
||||
frontends may not.
|
||||
* `subs pc, lr, #imm` can now be predicated in Thumb2.
|
||||
|
||||
### Changes to the AVR Backend
|
||||
|
||||
### Changes to the DirectX Backend
|
||||
|
|
@ -237,262 +78,38 @@ Makes programs 10x faster by doing Special New Thing.
|
|||
|
||||
### Changes to the LoongArch Backend
|
||||
|
||||
* DWARF fission is now compatible with linker relaxations, allowing `-gsplit-dwarf` and `-mrelax`
|
||||
to be used together when building for the LoongArch platform.
|
||||
|
||||
### Changes to the MIPS Backend
|
||||
|
||||
### Changes to the NVPTX Backend
|
||||
|
||||
* The default SM version has been changed from `sm_30` to `sm_75`. `sm_75` is
|
||||
the oldest GPU variant compatible with the widest range of recent major CUDA
|
||||
Toolkit versions (11/12/13).
|
||||
|
||||
### Changes to the PowerPC Backend
|
||||
|
||||
### Changes to the RISC-V Backend
|
||||
|
||||
* `llvm-objdump` now has support for `--symbolize-operands` with RISC-V.
|
||||
* `-mcpu=spacemit-x100` was added.
|
||||
* Change P extension version to match the 0.21 draft specification.
|
||||
* Mnemonics for MOP/HINT-based instructions (`lpad`, `pause`, `ntl.*`, `c.ntl.*`,
|
||||
`sspush`, `sspopchk`, `ssrdp`, `c.sspush`, `c.sspopchk`) are now always
|
||||
available in the assembler and disassembler without requiring their respective
|
||||
extensions.
|
||||
* Adds experimental assembler support for the 'Zvabd` (RISC-V Integer Vector
|
||||
Absolute Difference) extension.
|
||||
* Adds CodeGen support for the 'Zvabd` extension.
|
||||
* `-mcpu=spacemit-a100` was added.
|
||||
* Adds assembler support for the `XSMTVDotII` (SpacemiT Vector Extension for Matrix 2.0) extension.
|
||||
* The opt-in `-riscv-enable-p-ext-simd-codegen` flag has been removed. P extension SIMD code generation is now enabled automatically if the P extension is supported.
|
||||
* `-mcpu=xt-c910v2` and `-mcpu=xt-c920v2` were added.
|
||||
* Adds experimental assembler support for the 'Zvzip` (RISC-V Vector
|
||||
Reordering Structured Data) extension.
|
||||
* `-mcpu=sifive-x160` and `-mcpu=sifive-x180` were added.
|
||||
* Support for the experimental `XRivosVisni` vendor extension has been removed.
|
||||
* Support for the experimental `XRivosVizip` vendor extension has been removed.
|
||||
* Adds experimental assembler support for the 'Zvvmm` (RISC-V Integer Matrix Multiply-Accumulate) extension.
|
||||
* Adds experimental assembler support for the 'Zvvfmm` (RISC-V Floating-Point Matrix Multiply-Accumulate) extension.
|
||||
* Adds experimental assembler support for the 'Zvvmtls` and 'Zvvmttls` (RISC-V
|
||||
Matrix Tile Load/Store) extensions.
|
||||
* Adds support for 'Ziccid' (Instruction/Data Coherence and Consistency) extension.
|
||||
* Adds experimental assembler support for the `Xqccmt` (Qualcomm 16-bit Table Jump) vendor extension.
|
||||
* `-mcpu=sifive-870` has been renamed `-mcpu=sifive-p870-d`.
|
||||
* Adds experimental assembler support for batched dot-product extensions(Zvqwbdota8i, Zvqwbdota16i, Zvfwbdota16bf, Zvfqwbdota8f and Zvfbdota32f).
|
||||
* Adds experimental assembler support for dot-product extensions(Zvqwdota8i, Zvqwdota16i, Zvfwdota16bf and Zvfqwdota8f).
|
||||
* `-mtune=generic` now uses the scheduling model from SpacemiT X60 instead of an empty scheduling model.
|
||||
* The Xqcilo pseudos now emit sequences that can be relaxed.
|
||||
|
||||
### Changes to the WebAssembly Backend
|
||||
|
||||
* WebAssembly reference types are now represented in LLVM IR as the target
|
||||
extension types `target("wasm.externref")` and `target("wasm.funcref")`,
|
||||
rather than as pointers in address spaces 10 and 20 (`ptr addrspace(10)` /
|
||||
`ptr addrspace(20)`).
|
||||
* As a consequence of the representation change, reference types are no longer
|
||||
treated as vectorizable pointers. This fixes a crash in the SLP vectorizer,
|
||||
which previously would attempt to gather `externref`/`funcref` values into a
|
||||
vector and then crash.
|
||||
|
||||
### Changes to the Windows Target
|
||||
|
||||
* The `.seh_startchained` and `.seh_endchained` assembly instructions have been removed and replaced
|
||||
with a new `.seh_splitchained` instruction.
|
||||
|
||||
### Changes to the X86 Backend
|
||||
|
||||
* `.att_syntax` directive is now emitted for assembly files when AT&T syntax is
|
||||
in use. This matches the behaviour of Intel syntax and aids with
|
||||
compatibility when changing the default Clang syntax to the Intel syntax.
|
||||
|
||||
* EGPR (R16-R31) now requires V3 unwind info on Windows x64. Using EGPR
|
||||
without V3 unwind produces a fatal error.
|
||||
* Implemented Win64 APX ABI callee-saved registers: R30 and R31 are now
|
||||
treated as non-volatile in the Win64 calling convention when APX is
|
||||
available, per the Microsoft x64 calling convention specification.
|
||||
|
||||
* Functions using setjmp with Win64 APX ABI now reserve R30/R31 from
|
||||
register allocation, as the unwinder cannot restore APX extended
|
||||
registers across longjmp. A warning is emitted for large functions
|
||||
where this reservation may impact performance.
|
||||
|
||||
* Added ``.seh_push2regs`` assembly directive for explicitly encoding a
|
||||
two-register push in Windows x64 V3 unwind info. The directive takes two
|
||||
register operands: ``.seh_push2regs %r12, %r13``.
|
||||
|
||||
* The `fp128` type is now returned via sret instead of XMM0 for some calling
|
||||
conventions to match GCC. The C and Win64 calling conventions now use
|
||||
sret, other calling conventions do not need to be compatible with
|
||||
GCC and still return via XMM0.
|
||||
|
||||
### Changes to the OCaml bindings
|
||||
|
||||
### Changes to the Python bindings
|
||||
|
||||
### Changes to the C API
|
||||
|
||||
* Replaced opcode ``LLVMBr`` with ``LLVMUncondBr`` and ``LLVMCondBr``.
|
||||
|
||||
* The operand order of ``CondBr`` instructions was adjusted to match the
|
||||
successor order. This can cause subtle breakage when using ``LLVMGetOperand``
|
||||
or ``LLVMSetOperand`` to access successors.
|
||||
|
||||
### Changes to the CodeGen infrastructure
|
||||
|
||||
* Renamed ISD::CTLZ_ZERO_UNDEF to ISD::CTLZ_ZERO_POISON opcode to make it clear that
|
||||
a zero input results in poison.
|
||||
|
||||
* Renamed ISD::CTTZ_ZERO_UNDEF to ISD::CTTZ_ZERO_POISON opcode to make it clear that
|
||||
a zero input results in poison.
|
||||
|
||||
* LLVM intrinsics can now declare required target features using the
|
||||
``TargetFeatures`` TableGen field. SelectionDAG and GlobalISel use this
|
||||
metadata to reject unsupported target intrinsics generically, so targets do
|
||||
not need custom lowering checks for each annotated intrinsic.
|
||||
|
||||
### Changes to the GlobalISel infrastructure
|
||||
|
||||
* Renamed G_CTLZ_ZERO_UNDEF to G_CTLZ_ZERO_POISON opcode to make it clear that
|
||||
a zero input results in poison.
|
||||
|
||||
* Renamed G_CTTZ_ZERO_UNDEF to G_CTTZ_ZERO_POISON opcode to make it clear that
|
||||
a zero input results in poison.
|
||||
|
||||
* GlobalISel's IRTranslator now supports the LLVM IR byte type (`bN`). Byte
|
||||
values are translated as the equi-sized integer scalar (`sN`), `ConstantByte`
|
||||
is materialised via `G_CONSTANT`, and `bitcast` between a byte type and a
|
||||
pointer is lowered to `G_INTTOPTR` / `G_PTRTOINT` rather than the
|
||||
verifier-illegal `G_BITCAST`.
|
||||
|
||||
### Changes to the Metadata Info
|
||||
|
||||
### Changes to the Debug Info
|
||||
|
||||
### Changes to the LLVM tools
|
||||
|
||||
* llvm-ml now supports the `/unwindv3` flag to enable V3 unwind information
|
||||
format for x64 exception handling.
|
||||
* llvm-ml now supports the `@UnwindVersion` built-in symbol, which returns the
|
||||
current unwind version (1 by default, 3 when `/unwindv3` is specified).
|
||||
* llvm-ml now supports the `.push2reg`, `.pop2reg`, `.beginepilog`, and
|
||||
`.endepilog` MASM directives for V3 unwind information.
|
||||
* llvm-ml now supports the `.popreg`, `.freestack`, `.restorereg`,
|
||||
`.restorexmm128`, and `.unsetframe` MASM epilog directives. These are the
|
||||
epilog counterparts of `.pushreg`, `.allocstack`, `.savereg`,
|
||||
`.savexmm128`, and `.setframe` respectively, and are valid only inside
|
||||
`.beginepilog`/`.endepilog` blocks and only for V3 unwind information.
|
||||
* llvm-ml now supports `.pushframe code` syntax (without the `@` prefix)
|
||||
for interrupt handlers with error codes.
|
||||
* llvm-ml now diagnoses:
|
||||
- Prolog directives (including `.allocstack`) used outside of prologs (after `.endprolog`).
|
||||
- Epilog directives used outside of epilogs (outside of `.beginepilog` + `.endepilog` blocks).
|
||||
- Beginning an epilog (`.beginepilog`) inside another epilog.
|
||||
|
||||
* `llvm-profgen` now supports ETM trace decoding using the OpenCSD library for Cortex-M targets. OpenCSD version 1.5.4 or higher is required.
|
||||
|
||||
* `llvm-objcopy` no longer corrupts the symbol table when `--update-section` is called for ELF files.
|
||||
* `llvm-objcopy` now reports an error when `--compress-sections` requests unavailable zlib or zstd support.
|
||||
The diagnostic is emitted while parsing the option, matching `--compress-debug-sections`.
|
||||
Such commands may now fail even if the input file contains no sections that would be compressed.
|
||||
* `FileCheck` option `-check-prefix` now accepts a comma-separated list of
|
||||
prefixes, making it an alias of the existing `-check-prefixes` option.
|
||||
* Add `-mtune` option to `llc`.
|
||||
* Add `-mtune` option to `opt`.
|
||||
* Fixed `llvm-ar` to correctly handle the `N` count modifier on Windows for archive members whose names differ only
|
||||
in case (e.g. `FOO.OBJ` and `foo.obj`). Previously, `-N 2` would fail with "not found" even when two matching members existed.
|
||||
* `llvm-readobj` and `llvm-readelf` now support the `--call-graph-section` option to dump the contents of the experimental [call graph section](CallGraphSection.md).
|
||||
* Added support for hybrid ARM64X object files to `llvm-ar` and `llvm-lib`. When these files are added to
|
||||
an archive, they are automatically split into separate native and EC members. Because the resulting members
|
||||
are no longer hybrid object files, consumers of these archives do not need to support the hybrid format themselves.
|
||||
|
||||
### Changes to LLDB
|
||||
|
||||
* A new ``webinspector-wasm`` platform was added to list and attach to WebAssembly processes in Safari.
|
||||
* The default for `load-script-from-symbol-file` was changed from `warn` to `trusted`. This means that scripts from
|
||||
code signed dSYM bundles are now loaded automatically, while untrusted bundles continue to produce a warning.
|
||||
* Pressing enter after `frame variable` repeats the command with an incremented `--depth` option, allowing quick
|
||||
expansion of nested data.
|
||||
* Breakpoint commands now accept `.` to refer to the location(s) at which the current thread is stopped. For
|
||||
example, `breakpoint disable .` disables the just-hit breakpoint location. Another usage is to automate a
|
||||
command to run at the current location: `breakpoint command add -o 'p my_var' .`.
|
||||
* The `apropos` command now:
|
||||
* Highlights matching keywords in its output when color is enabled.
|
||||
* Searches the components of settings paths. For example `apropos qemu-user` will now
|
||||
show `platform.plugin.qemu-user` as one of the results.
|
||||
* Reading global and static variables on WebAssembly targets now works correctly. Previously their
|
||||
values could not be read because data sections were mapped to the wrong address space.
|
||||
* A new `diagnostics report` command (aliased `bugreport`) assembles a diagnostics bundle and files
|
||||
a pre-filled GitHub issue, pointing at the bundle to attach. The GitHub reporter is built by
|
||||
default and can be disabled with the `LLDB_ENABLE_GITHUB_BUG_REPORTER=OFF` CMake option.
|
||||
|
||||
#### Deprecated APIs
|
||||
|
||||
* ``SBTarget::GetDataByteSize()``, ``SBTarget::GetCodeByteSize()``, and ``SBSection::GetTargetByteSize()``
|
||||
have been deprecated. They always return `1`, as before.
|
||||
|
||||
#### FreeBSD
|
||||
|
||||
##### Userspace Debugging
|
||||
|
||||
* Support for MIPS64 has been removed.
|
||||
* The minimum assumed FreeBSD version is now 14. The effect of which is that watchpoints are
|
||||
assumed to be supported.
|
||||
|
||||
##### Kernel Debugging
|
||||
|
||||
* The plugin that analyzes FreeBSD kernel core dump and live core has been renamed from `freebsd-kernel` to
|
||||
`freebsd-kernel-core`. Remote kernel debugging is still handled by the `gdb-remote` plugin.
|
||||
* Support for libfbsdvmcore has been removed. As a result, FreeBSD kernel dump debugging is now only
|
||||
available on FreeBSD hosts. Live kernel debugging through the GDB remote protocol is still available
|
||||
from any platform.
|
||||
* Support for ARM, PPC64le, and RISCV64 has been added.
|
||||
* The crashed thread is now automatically selected on start.
|
||||
* Threads are listed in incrmental order by pid then by tid.
|
||||
* Unread kernel messages saved in `msgbufp` are now printed when LLDB starts.
|
||||
* Writing to the core is now supported. For safety reasons, this feature is off by default. To enable it,
|
||||
`plugin.process.freebsd-kernel-core.read-only` must be set to `false`. This setting is available when
|
||||
using `/dev/mem` or a kernel dump. However, since `kvm_write()` does not support writing to kernel dumps,
|
||||
writes to a kernel dump will still fail when the setting is false.
|
||||
* Added a command `process plugin refresh-threads`, enabling on-demand thread-list reconstruction from `/dev/mem`
|
||||
so users can resync live kernel thread state without restarting LLDB. Note that this has no impact on full dump
|
||||
and minidump files.
|
||||
|
||||
#### Linux
|
||||
|
||||
* On Arm Linux, the `tpidruro` register can now be read. Writing to this register is not supported.
|
||||
* Thread local variables are now supported on Arm and RISC-V Linux if the program being debugged is using glibc.
|
||||
* LLDB now supports AArch64 Linux systems that only have SME (as opposed to
|
||||
SVE and SME). See the AArch64 Linux [documentation](https://lldb.llvm.org/use/aarch64-linux.html#sme-only-systems)
|
||||
for more details.
|
||||
|
||||
Prior to this version of LLDB, there was a bug that caused LLDB to crash on
|
||||
startup on these systems ([#138717](https://github.com/llvm/llvm-project/issues/138717)).
|
||||
This affected LLDB versions from 18 up to and including 22. 17 and below are not affected.
|
||||
If you are using such a system and cannot change LLDB version, or want to package
|
||||
an affected version in a way that is compatible with these systems, the issue
|
||||
contains details of backports that could be done to fix the affected versions.
|
||||
* When an ELF core file is loaded, LLDB now shows the command line that created the core file.
|
||||
If you need to see it again, use the command `process status -v`.
|
||||
* LLDB now supports debugging Linux [Memory Protection Keys](https://docs.kernel.org/core-api/protection-keys.html)
|
||||
on AArch64 systems that have the Permission Overlay Extension (POE / FEAT_S1POE).
|
||||
See the [LLDB on AArch64 Linux](https://lldb.llvm.org/use/aarch64-linux.html#permission-overlay-extension-poe)
|
||||
guide for more information.
|
||||
|
||||
#### Windows
|
||||
|
||||
* Python 3.11 or later is now recommended for building LLDB 23 on Windows. From LLDB 24, Python 3.11 or later will be required.
|
||||
* Messages from `OutputDebugString[A|W]` are now shown inline when using LLDB
|
||||
from the command-line and in the output window when using lldb-dap.
|
||||
* LLDB now uses `lldb-server.exe` to launch and manage the program being debugged,
|
||||
instead of running it within LLDB's own process. To revert to the previous behavior, set the environment variable `LLDB_USE_LLDB_SERVER=0`.
|
||||
|
||||
|
||||
### Changes to BOLT
|
||||
|
||||
### Changes to Sanitizers
|
||||
|
||||
* Add a random delay into ThreadSanitizer to help find rare thread interleavings.
|
||||
|
||||
### Other Changes
|
||||
|
||||
## External Open Source Projects Using LLVM {{env.config.release}}
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
llvm_version_major = 23
|
||||
llvm_version_major = 24
|
||||
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__ = (23, 0, 0)
|
||||
__versioninfo__ = (24, 0, 0)
|
||||
__version__ = ".".join(str(v) for v in __versioninfo__) + "dev"
|
||||
|
||||
__all__ = []
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@
|
|||
|
||||
from datetime import timezone, datetime
|
||||
|
||||
__versioninfo__ = (23, 0, 0)
|
||||
__versioninfo__ = (24, 0, 0)
|
||||
__version__ = (
|
||||
".".join(str(v) for v in __versioninfo__)
|
||||
+ "dev"
|
||||
|
|
|
|||
Loading…
Reference in a new issue