Clear release notes for upcoming LLVM 20 dev cycle
diff --git a/clang-tools-extra/docs/ReleaseNotes.rst b/clang-tools-extra/docs/ReleaseNotes.rst
index 083b098..642ad39 100644
--- a/clang-tools-extra/docs/ReleaseNotes.rst
+++ b/clang-tools-extra/docs/ReleaseNotes.rst
@@ -48,10 +48,6 @@
Improvements to clangd
----------------------
-- Introduced exmperimental support for C++20 Modules. The experimental support can
- be enabled by `-experimental-modules-support` option. It is in an early development
- stage and may not perform efficiently in real-world scenarios.
-
Inlay hints
^^^^^^^^^^^
@@ -73,9 +69,6 @@
Code actions
^^^^^^^^^^^^
-- The tweak for turning unscoped into scoped enums now removes redundant prefixes
- from the enum values.
-
Signature help
^^^^^^^^^^^^^^
@@ -88,23 +81,12 @@
Miscellaneous
^^^^^^^^^^^^^
-- Added a boolean option `AnalyzeAngledIncludes` to `Includes` config section,
- which allows to enable unused includes detection for all angled ("system") headers.
- At this moment umbrella headers are not supported, so enabling this option
- may result in false-positives.
-
Improvements to clang-doc
-------------------------
Improvements to clang-query
---------------------------
-- Added the `file` command to dynamically load a list of commands and matchers
- from an external file, allowing the cost of reading the compilation database
- and building the AST to be imposed just once for faster prototyping.
-
-- Removed support for ``enable output srcloc``. Fixes #GH82591
-
Improvements to clang-rename
----------------------------
@@ -113,431 +95,21 @@
Improvements to clang-tidy
--------------------------
-- Improved :program:`run-clang-tidy.py` script. Added argument `-source-filter`
- to filter source files from the compilation database, via a RegEx. In a
- similar fashion to what `-header-filter` does for header files.
- Added progress indicator with a number of processed files and the runtime of
- each invocation after completion.
-
-- Improved :program:`check_clang_tidy.py` script. Added argument `-export-fixes`
- to aid in clang-tidy and test development.
-
-- Fixed bug where big values for unsigned check options overflowed into negative values
- when being printed with `--dump-config`.
-
-- Fixed `--verify-config` option not properly parsing checks when using the
- literal operator in the `.clang-tidy` config.
-
-- Added argument `--exclude-header-filter` and config option `ExcludeHeaderFilterRegex`
- to exclude headers from analysis via a RegEx.
-
-- Added argument `--allow-no-checks` to suppress "no checks enabled" error
- when disabling all of the checks by `--checks='-*'`.
-
New checks
^^^^^^^^^^
-- New :doc:`boost-use-ranges
- <clang-tidy/checks/boost/use-ranges>` check.
-
- Detects calls to standard library iterator algorithms that could be replaced
- with a Boost ranges version instead.
-
-- New :doc:`bugprone-crtp-constructor-accessibility
- <clang-tidy/checks/bugprone/crtp-constructor-accessibility>` check.
-
- Detects error-prone Curiously Recurring Template Pattern usage, when the CRTP
- can be constructed outside itself and the derived class.
-
-- New :doc:`bugprone-pointer-arithmetic-on-polymorphic-object
- <clang-tidy/checks/bugprone/pointer-arithmetic-on-polymorphic-object>` check.
-
- Finds pointer arithmetic performed on classes that contain a virtual function.
-
-- New :doc:`bugprone-return-const-ref-from-parameter
- <clang-tidy/checks/bugprone/return-const-ref-from-parameter>` check.
-
- Detects return statements that return a constant reference parameter as constant
- reference. This may cause use-after-free errors if the caller uses xvalues as
- arguments.
-
-- New :doc:`bugprone-suspicious-stringview-data-usage
- <clang-tidy/checks/bugprone/suspicious-stringview-data-usage>` check.
-
- Identifies suspicious usages of ``std::string_view::data()`` that could lead
- to reading out-of-bounds data due to inadequate or incorrect string null
- termination.
-
-- New :doc:`misc-use-internal-linkage
- <clang-tidy/checks/misc/use-internal-linkage>` check.
-
- Detects variables and functions that can be marked as static or moved into
- an anonymous namespace to enforce internal linkage.
-
-- New :doc:`modernize-min-max-use-initializer-list
- <clang-tidy/checks/modernize/min-max-use-initializer-list>` check.
-
- Replaces nested ``std::min`` and ``std::max`` calls with an initializer list
- where applicable.
-
-- New :doc:`modernize-use-designated-initializers
- <clang-tidy/checks/modernize/use-designated-initializers>` check.
-
- Finds initializer lists for aggregate types that could be
- written as designated initializers instead.
-
-- New :doc:`modernize-use-ranges
- <clang-tidy/checks/modernize/use-ranges>` check.
-
- Detects calls to standard library iterator algorithms that could be replaced
- with a ranges version instead.
-
-- New :doc:`modernize-use-std-format
- <clang-tidy/checks/modernize/use-std-format>` check.
-
- Converts calls to ``absl::StrFormat``, or other functions via
- configuration options, to C++20's ``std::format``, or another function
- via a configuration option, modifying the format string appropriately and
- removing now-unnecessary calls to ``std::string::c_str()`` and
- ``std::string::data()``.
-
-- New :doc:`readability-enum-initial-value
- <clang-tidy/checks/readability/enum-initial-value>` check.
-
- Enforces consistent style for enumerators' initialization, covering three
- styles: none, first only, or all initialized explicitly.
-
-- New :doc:`readability-math-missing-parentheses
- <clang-tidy/checks/readability/math-missing-parentheses>` check.
-
- Check for missing parentheses in mathematical expressions that involve
- operators of different priorities.
-
-- New :doc:`readability-use-std-min-max
- <clang-tidy/checks/readability/use-std-min-max>` check.
-
- Replaces certain conditional statements with equivalent calls to
- ``std::min`` or ``std::max``.
-
New check aliases
^^^^^^^^^^^^^^^^^
-- New alias :doc:`cert-ctr56-cpp <clang-tidy/checks/cert/ctr56-cpp>` to
- :doc:`bugprone-pointer-arithmetic-on-polymorphic-object
- <clang-tidy/checks/bugprone/pointer-arithmetic-on-polymorphic-object>`
- was added.
-
-- New alias :doc:`cert-int09-c <clang-tidy/checks/cert/int09-c>` to
- :doc:`readability-enum-initial-value <clang-tidy/checks/readability/enum-initial-value>`
- was added.
-
Changes in existing checks
^^^^^^^^^^^^^^^^^^^^^^^^^^
-- Improved :doc:`bugprone-assert-side-effect
- <clang-tidy/checks/bugprone/assert-side-effect>` check by detecting side
- effect from calling a method with non-const reference parameters.
-
-- Improved :doc:`bugprone-assignment-in-if-condition
- <clang-tidy/checks/bugprone/assignment-in-if-condition>` check by ignoring
- assignments in the C++20 ``requires`` clause.
-
-- Improved :doc:`bugprone-casting-through-void
- <clang-tidy/checks/bugprone/casting-through-void>` check by ignoring casts
- where source is already a ``void``` pointer, making middle ``void`` pointer
- casts bug-free.
-
-- Improved :doc:`bugprone-exception-escape
- <clang-tidy/checks/bugprone/exception-escape>` check to correctly detect exception
- handler of type ``CV void *`` as catching all ``CV`` compatible pointer types.
-
-- Improved :doc:`bugprone-forwarding-reference-overload
- <clang-tidy/checks/bugprone/forwarding-reference-overload>`
- check to ignore deleted constructors which won't hide other overloads.
-
-- Improved :doc:`bugprone-implicit-widening-of-multiplication-result
- <clang-tidy/checks/bugprone/implicit-widening-of-multiplication-result>` check
- by adding an option to ignore constant expressions of signed integer types
- that fit in the source expression type.
-
-- Improved :doc:`bugprone-inc-dec-in-conditions
- <clang-tidy/checks/bugprone/inc-dec-in-conditions>` check to ignore code
- within unevaluated contexts, such as ``decltype``.
-
-- Improved :doc:`bugprone-lambda-function-name<clang-tidy/checks/bugprone/lambda-function-name>`
- check by ignoring ``__func__`` macro in lambda captures, initializers of
- default parameters and nested function declarations.
-
-- Improved :doc:`bugprone-multi-level-implicit-pointer-conversion
- <clang-tidy/checks/bugprone/multi-level-implicit-pointer-conversion>` check
- by ignoring implicit pointer conversions that are part of a cast expression.
-
-- Improved :doc:`bugprone-non-zero-enum-to-bool-conversion
- <clang-tidy/checks/bugprone/non-zero-enum-to-bool-conversion>` check by
- eliminating false positives resulting from direct usage of bitwise operators
- within parentheses.
-
-- Improved :doc:`bugprone-optional-value-conversion
- <clang-tidy/checks/bugprone/optional-value-conversion>` check by eliminating
- false positives resulting from use of optionals in unevaluated context.
-
-- Improved :doc:`bugprone-sizeof-expression
- <clang-tidy/checks/bugprone/sizeof-expression>` check by clarifying the
- diagnostics, eliminating some false positives and adding a new
- (off-by-default) option `WarnOnSizeOfPointer` that reports all
- ``sizeof(pointer)`` expressions (except for a few that are idiomatic).
-
-- Improved :doc:`bugprone-suspicious-include
- <clang-tidy/checks/bugprone/suspicious-include>` check by replacing the local
- options `HeaderFileExtensions` and `ImplementationFileExtensions` by the
- global options of the same name.
-
-- Improved :doc:`bugprone-too-small-loop-variable
- <clang-tidy/checks/bugprone/too-small-loop-variable>` check by incorporating
- better support for ``const`` loop boundaries.
-
-- Improved :doc:`bugprone-unused-local-non-trivial-variable
- <clang-tidy/checks/bugprone/unused-local-non-trivial-variable>` check by
- ignoring local variable with ``[maybe_unused]`` attribute.
-
-- Improved :doc:`bugprone-unused-return-value
- <clang-tidy/checks/bugprone/unused-return-value>` check by updating the
- parameter `CheckedFunctions` to support regexp, avoiding false positive for
- function with the same prefix as the default argument, e.g. ``std::unique_ptr``
- and ``std::unique``, avoiding false positive for assignment operator overloading.
-
-- Improved :doc:`bugprone-use-after-move
- <clang-tidy/checks/bugprone/use-after-move>` check to also handle
- calls to ``std::forward``. Fixed sequencing of designated initializers. Fixed
- sequencing of callees: In C++17 and later, the callee of a function is guaranteed
- to be sequenced before the arguments, so don't warn if the use happens in the
- callee and the move happens in one of the arguments.
-
-- Improved :doc:`cppcoreguidelines-avoid-non-const-global-variables
- <clang-tidy/checks/cppcoreguidelines/avoid-non-const-global-variables>` check
- with a new option `AllowInternalLinkage` to disable the warning for variables
- with internal linkage.
-
-- Improved :doc:`cppcoreguidelines-macro-usage
- <clang-tidy/checks/cppcoreguidelines/macro-usage>` check by ignoring macro with
- hash preprocessing token.
-
-- Improved :doc:`cppcoreguidelines-missing-std-forward
- <clang-tidy/checks/cppcoreguidelines/missing-std-forward>` check by no longer
- giving false positives for deleted functions, by fixing false negatives when only
- a few parameters are forwarded and by ignoring parameters without a name (unused
- arguments).
-
-- Improved :doc:`cppcoreguidelines-owning-memory
- <clang-tidy/checks/cppcoreguidelines/owning-memory>` check to properly handle
- return type in lambdas and in nested functions.
-
-- Improved :doc:`cppcoreguidelines-prefer-member-initializer
- <clang-tidy/checks/cppcoreguidelines/prefer-member-initializer>` check
- by removing enforcement of rule `C.48
- <https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#c48-prefer-in-class-initializers-to-member-initializers-in-constructors-for-constant-initializers>`_,
- which was deprecated since :program:`clang-tidy` 17. This rule is now covered
- by :doc:`cppcoreguidelines-use-default-member-init
- <clang-tidy/checks/cppcoreguidelines/use-default-member-init>`. Fixed
- incorrect hints when using list-initialization.
-
-- Improved :doc:`cppcoreguidelines-special-member-functions
- <clang-tidy/checks/cppcoreguidelines/special-member-functions>` check with a
- new option `AllowImplicitlyDeletedCopyOrMove`, which removes the requirement
- for explicit copy or move special member functions when they are already
- implicitly deleted.
-
-- Improved :doc:`google-build-namespaces
- <clang-tidy/checks/google/build-namespaces>` check by replacing the local
- option `HeaderFileExtensions` by the global option of the same name.
-
-- Improved :doc:`google-explicit-constructor
- <clang-tidy/checks/google/explicit-constructor>` check to better handle
- C++20 `explicit(bool)`.
-
-- Improved :doc:`google-global-names-in-headers
- <clang-tidy/checks/google/global-names-in-headers>` check by replacing the local
- option `HeaderFileExtensions` by the global option of the same name.
-
-- Improved :doc:`google-runtime-int <clang-tidy/checks/google/runtime-int>`
- check performance through optimizations.
-
-- Improved :doc:`hicpp-signed-bitwise <clang-tidy/checks/hicpp/signed-bitwise>`
- check by ignoring false positives involving positive integer literals behind
- implicit casts when `IgnorePositiveIntegerLiterals` is enabled.
-
-- Improved :doc:`hicpp-ignored-remove-result <clang-tidy/checks/hicpp/ignored-remove-result>`
- check by ignoring other functions with same prefixes as the target specific
- functions.
-
-- Improved :doc:`linuxkernel-must-check-errs
- <clang-tidy/checks/linuxkernel/must-check-errs>` check documentation to
- consistently use the check's proper name.
-
-- Improved :doc:`llvm-header-guard
- <clang-tidy/checks/llvm/header-guard>` check by replacing the local
- option `HeaderFileExtensions` by the global option of the same name.
-
-- Improved :doc:`misc-const-correctness
- <clang-tidy/checks/misc/const-correctness>` check by avoiding infinite recursion
- for recursive functions with forwarding reference parameters and reference
- variables which refer to themselves. Also adapted the check to work with
- function-try-blocks.
-
-- Improved :doc:`misc-definitions-in-headers
- <clang-tidy/checks/misc/definitions-in-headers>` check by replacing the local
- option `HeaderFileExtensions` by the global option of the same name.
- Additionally, the option `UseHeaderFileExtensions` is removed, so that the
- check uses the `HeaderFileExtensions` option unconditionally.
-
-- Improved :doc:`misc-header-include-cycle
- <clang-tidy/checks/misc/header-include-cycle>` check by avoiding crash for self
- include cycles.
-
-- Improved :doc:`misc-unused-using-decls
- <clang-tidy/checks/misc/unused-using-decls>` check by replacing the local
- option `HeaderFileExtensions` by the global option of the same name.
-
-- Improved :doc:`misc-use-anonymous-namespace
- <clang-tidy/checks/misc/use-anonymous-namespace>` check by replacing the local
- option `HeaderFileExtensions` by the global option of the same name.
-
-- Improved :doc:`modernize-avoid-c-arrays
- <clang-tidy/checks/modernize/avoid-c-arrays>` check by introducing the new
- `AllowStringArrays` option, enabling the exclusion of array types with deduced
- length initialized from string literals.
-
-- Improved :doc:`modernize-loop-convert
- <clang-tidy/checks/modernize/loop-convert>` check by ensuring that fix-its
- don't remove parentheses used in ``sizeof`` calls when they have array index
- accesses as arguments.
-
-- Improved :doc:`modernize-use-constraints
- <clang-tidy/checks/modernize/use-constraints>` check by fixing a crash that
- occurred in some scenarios and excluding system headers from analysis.
-
-- Improved :doc:`modernize-use-nullptr
- <clang-tidy/checks/modernize/use-nullptr>` check to include support for C23,
- which also has introduced the ``nullptr`` keyword.
-
-- Improved :doc:`modernize-use-override
- <clang-tidy/checks/modernize/use-override>` check to also remove any trailing
- whitespace when deleting the ``virtual`` keyword.
-
-- Improved :doc:`modernize-use-starts-ends-with
- <clang-tidy/checks/modernize/use-starts-ends-with>` check to also handle
- calls to ``compare`` method.
-
-- Improved :doc:`modernize-use-std-print
- <clang-tidy/checks/modernize/use-std-print>` check to not crash if the
- format string parameter of the function to be replaced is not of the
- expected type.
-
-- Improved :doc:`modernize-use-using <clang-tidy/checks/modernize/use-using>`
- check by adding support for detection of typedefs declared on function level.
-
-- Improved :doc:`performance-inefficient-vector-operation
- <clang-tidy/checks/performance/inefficient-vector-operation>` fixing false
- negatives caused by different variable definition type and variable initial
- value type in loop initialization expression.
-
-- Improved :doc:`performance-move-const-arg
- <clang-tidy/checks/performance/move-const-arg>` check by ignoring
- ``std::move()`` calls when their target is used as an rvalue.
-
-- Improved :doc:`performance-unnecessary-copy-initialization
- <clang-tidy/checks/performance/unnecessary-copy-initialization>` check by
- detecting more cases of constant access. In particular, pointers can be
- analyzed, so the check now handles the common patterns
- `const auto e = (*vector_ptr)[i]` and `const auto e = vector_ptr->at(i);`.
- Calls to mutable function where there exists a `const` overload are also
- handled. Fix crash in the case of a non-member operator call.
-
-- Improved :doc:`performance-unnecessary-value-param
- <clang-tidy/checks/performance/unnecessary-value-param>` check
- detecting more cases for template functions including lambdas with ``auto``.
- E.g., ``std::sort(a.begin(), a.end(), [](auto x, auto y) { return a > b; });``
- will be detected for expensive to copy types. Fixed false positives for
- dependent call expressions.
-
-- Improved :doc:`readability-avoid-return-with-void-value
- <clang-tidy/checks/readability/avoid-return-with-void-value>` check by adding
- fix-its.
-
-- Improved :doc:`readability-const-return-type
- <clang-tidy/checks/readability/const-return-type>` check to eliminate false
- positives when returning types with const not at the top level.
-
-- Improved :doc:`readability-container-size-empty
- <clang-tidy/checks/readability/container-size-empty>` check to prevent false
- positives when utilizing ``size`` or ``length`` methods that accept parameter.
- Fixed crash when facing template user defined literals.
-
-- Improved :doc:`readability-duplicate-include
- <clang-tidy/checks/readability/duplicate-include>` check by excluding include
- directives that form the filename using macro.
-
-- Improved :doc:`readability-else-after-return
- <clang-tidy/checks/readability/else-after-return>` check to ignore
- `if consteval` statements, for which the `else` branch must not be removed.
-
-- Improved :doc:`readability-identifier-naming
- <clang-tidy/checks/readability/identifier-naming>` check in `GetConfigPerFile`
- mode by resolving symbolic links to header files. Fixed handling of Hungarian
- Prefix when configured to `LowerCase`. Added support for renaming designated
- initializers. Added support for renaming macro arguments. Fixed renaming
- conflicts arising from out-of-line member function template definitions.
-
-- Improved :doc:`readability-implicit-bool-conversion
- <clang-tidy/checks/readability/implicit-bool-conversion>` check to provide
- valid fix suggestions for ``static_cast`` without a preceding space and
- fixed problem with duplicate parentheses in double implicit casts. Corrected
- the fix suggestions for C23 and later by using C-style casts instead of
- ``static_cast``. Fixed false positives in C++20 spaceship operator by ignoring
- casts in implicit and defaulted functions.
-
-- Improved :doc:`readability-redundant-inline-specifier
- <clang-tidy/checks/readability/redundant-inline-specifier>` check to properly
- emit warnings for static data member with an in-class initializer.
-
-- Improved :doc:`readability-redundant-member-init
- <clang-tidy/checks/readability/redundant-member-init>` check to avoid
- false-positives when type of the member does not match the type of the
- initializer.
-
-- Improved :doc:`readability-static-accessed-through-instance
- <clang-tidy/checks/readability/static-accessed-through-instance>` check to
- support calls to overloaded operators as base expression and provide fixes to
- expressions with side-effects.
-
-- Improved :doc:`readability-simplify-boolean-expr
- <clang-tidy/checks/readability/simplify-boolean-expr>` check to avoid to emit
- warning for macro when IgnoreMacro option is enabled and improve messages
- when auto-fix does not work.
-
-- Improved :doc:`readability-static-definition-in-anonymous-namespace
- <clang-tidy/checks/readability/static-definition-in-anonymous-namespace>`
- check by resolving fix-it overlaps in template code by disregarding implicit
- instances.
-
-- Improved :doc:`readability-string-compare
- <clang-tidy/checks/readability/string-compare>` check to also detect
- usages of ``std::string_view::compare``. Added a `StringLikeClasses` option
- to detect usages of ``compare`` method in custom string-like classes.
-
Removed checks
^^^^^^^^^^^^^^
-- Removed `cert-dcl21-cpp`, which was deprecated since :program:`clang-tidy` 17,
- since the rule DCL21-CPP has been removed from the CERT guidelines.
-
Miscellaneous
^^^^^^^^^^^^^
-- Fixed incorrect formatting in :program:`clang-apply-replacements` when no
- `--format` option is specified. Now :program:`clang-apply-replacements`
- applies formatting only with the option.
-
Improvements to include-fixer
-----------------------------
diff --git a/clang/docs/ReleaseNotes.rst b/clang/docs/ReleaseNotes.rst
index 24d88ed..83fd5dc 100644
--- a/clang/docs/ReleaseNotes.rst
+++ b/clang/docs/ReleaseNotes.rst
@@ -37,136 +37,23 @@
Clang |release| because of the opportunity they pose for disruption to existing
code bases.
-- Setting the deprecated CMake variable ``GCC_INSTALL_PREFIX`` (which sets the
- default ``--gcc-toolchain=``) now leads to a fatal error.
-
C/C++ Language Potentially Breaking Changes
-------------------------------------------
-- Clang now supports raw string literals in ``-std=gnuXY`` mode as an extension in
- C99 and later. This behaviour can also be overridden using ``-f[no-]raw-string-literals``.
- Support of raw string literals in C++ is not affected. Fixes (#GH85703).
-
C++ Specific Potentially Breaking Changes
-----------------------------------------
-- Clang now diagnoses function/variable templates that shadow their own template parameters, e.g. ``template<class T> void T();``.
- This error can be disabled via `-Wno-strict-primary-template-shadow` for compatibility with previous versions of clang.
-
-- The behavior controlled by the `-frelaxed-template-template-args` flag is now
- on by default, and the flag is deprecated. Until the flag is finally removed,
- it's negative spelling can be used to obtain compatibility with previous
- versions of clang. The deprecation warning for the negative spelling can be
- disabled with `-Wno-deprecated-no-relaxed-template-template-args`.
-
-- Clang no longer tries to form pointer-to-members from qualified and parenthesized unevaluated expressions
- such as ``decltype(&(foo::bar))``. (#GH40906).
-
-- Clang now performs semantic analysis for unary operators with dependent operands
- that are known to be of non-class non-enumeration type prior to instantiation.
-
- This change uncovered a bug in libstdc++ 14.1.0 which may cause compile failures
- on systems using that version of libstdc++ and Clang 19, with an error that looks
- something like this:
-
- .. code-block:: text
-
- <source>:4:5: error: expression is not assignable
- 4 | ++this;
- | ^ ~~~~
-
- To fix this, update libstdc++ to version 14.1.1 or greater.
ABI Changes in This Version
---------------------------
-- Fixed Microsoft name mangling of implicitly defined variables used for thread
- safe static initialization of static local variables. This change resolves
- incompatibilities with code compiled by MSVC but might introduce
- incompatibilities with code compiled by earlier versions of Clang when an
- inline member function that contains a static local variable with a dynamic
- initializer is declared with ``__declspec(dllimport)``. (#GH83616).
-
-- Fixed Microsoft name mangling of lifetime extended temporary objects. This
- change corrects missing back reference registrations that could result in
- incorrect back reference indexes and suprising demangled name results. Since
- MSVC uses a different mangling for these objects, compatibility is not affected.
- (#GH85423).
-
-- Fixed Microsoft calling convention for returning certain classes with a
- templated constructor. If a class has a templated constructor, it should
- be returned indirectly even if it meets all the other requirements for
- returning a class in a register. This affects some uses of std::pair.
- (#GH86384).
-
-- Fixed Microsoft calling convention when returning classes that have a deleted
- copy assignment operator. Such a class should be returned indirectly.
-
-- Removed the global alias that was pointing to AArch64 Function Multiversioning
- ifuncs. Its purpose was to preserve backwards compatibility when the ".ifunc"
- suffix got removed from the name mangling. The alias interacts badly with
- GlobalOpt (see the issue #96197).
-
-- Fixed Microsoft name mangling for auto non-type template arguments of pointer
- type for MSVC 1920+. This change resolves incompatibilities with code compiled
- by MSVC 1920+ but will introduce incompatibilities with code compiled by
- earlier versions of Clang unless such code is built with the compiler option
- `-fms-compatibility-version=19.14` to imitate the MSVC 1914 mangling behavior.
-
-- Fixed Microsoft name mangling for auto non-type template arguments of pointer
- to member type for MSVC 1920+. This change resolves incompatibilities with code
- compiled by MSVC 1920+ but will introduce incompatibilities with code compiled by
- earlier versions of Clang unless such code is built with the compiler option
- `-fms-compatibility-version=19.14` to imitate the MSVC 1914 mangling behavior.
- (GH#70899).
AST Dumping Potentially Breaking Changes
----------------------------------------
-- The text ast-dumper has improved printing of TemplateArguments.
-- The text decl-dumper prints template parameters' trailing requires expressions now.
-
Clang Frontend Potentially Breaking Changes
-------------------------------------------
-- Removed support for constructing on-stack ``TemplateArgumentList``\ s; interfaces should instead
- use ``ArrayRef<TemplateArgument>`` to pass template arguments. Transitioning internal uses to
- ``ArrayRef<TemplateArgument>`` reduces AST memory usage by 0.4% when compiling clang, and is
- expected to show similar improvements on other workloads.
-
-- The ``-Wgnu-binary-literal`` diagnostic group no longer controls any
- diagnostics. Binary literals are no longer a GNU extension, they're now a C23
- extension which is controlled via ``-pedantic`` or ``-Wc23-extensions``. Use
- of ``-Wno-gnu-binary-literal`` will no longer silence this pedantic warning,
- which may break existing uses with ``-Werror``.
-
-- The normalization of 3 element target triples where ``-none-`` is the middle
- element has changed. For example, ``armv7m-none-eabi`` previously normalized
- to ``armv7m-none-unknown-eabi``, with ``none`` for the vendor and ``unknown``
- for the operating system. It now normalizes to ``armv7m-unknown-none-eabi``,
- which has ``unknown`` vendor and ``none`` operating system.
-
- The affected triples are primarily for bare metal Arm where it is intended
- that ``none`` means that there is no operating system. As opposed to an unknown
- type of operating system.
-
- This change my cause clang to not find libraries, or libraries to be built at
- different file system locations. This can be fixed by changing your builds to
- use the new normalized triple. However, we recommend instead getting the
- normalized triple from clang itself, as this will make your builds more
- robust in case of future changes::
-
- $ clang --target=<your target triple> -print-target-triple
- <the normalized target triple>
-
-- The ``hasTypeLoc`` AST matcher will no longer match a ``classTemplateSpecializationDecl``;
- existing uses should switch to ``templateArgumentLoc`` or ``hasAnyTemplateArgumentLoc`` instead.
Clang Python Bindings Potentially Breaking Changes
--------------------------------------------------
-- Renamed ``CursorKind`` variant 272 from ``OMP_TEAMS_DISTRIBUTE_DIRECTIVE``
- to ``OMP_TEAMS_DISTRIBUTE_SIMD_DIRECTIVE``. The previous name was incorrect, it was a duplicate
- of variant 271.
-- Renamed ``TypeKind`` variant 162 from ``OBJCCLASS`` to ``OBJCTYPEPARAM``.
- The previous name was incorrect, it was a duplicate of variant 28.
-- Refactored enum implementation, switching to the standard library `Enum` type.
What's New in Clang |release|?
==============================
@@ -175,961 +62,81 @@
infrastructure are described first, followed by language-specific
sections with improvements to Clang's support for those languages.
-- Implemented improvements to BMIs for C++20 Modules that can reduce
- the number of rebuilds during incremental recompilation. We are seeking
- feedback from Build System authors and other interested users, especially
- when you feel Clang changes the BMI and misses an opportunity to avoid
- recompilations or causes correctness issues. See StandardCPlusPlusModules
- `StandardCPlusPlusModules <StandardCPlusPlusModules.html>`_ for more details.
-
-- The ``\par`` documentation comment command now supports an optional
- argument, which denotes the header of the paragraph started by
- an instance of the ``\par`` command comment. The implementation
- of the argument handling matches its semantics
- `in Doxygen <https://www.doxygen.nl/manual/commands.html#cmdpar>`.
- Namely, any text on the same line as the ``\par`` command will become
- a header for the paragaph, and if there is no text then the command
- will start a new paragraph.
-
C++ Language Changes
--------------------
-- C++17 support is now completed, with the enablement of the
- relaxed temlate template argument matching rules introduced in P0522,
- which was retroactively applied as a defect report.
- While the implementation already existed since Clang 4, it was turned off by
- default, and was controlled with the `-frelaxed-template-template-args` flag.
- In this release, we implement provisional wording for a core defect on
- P0522 (CWG2398), which avoids the most serious compatibility issues caused
- by it, allowing us to enable it by default in this release.
- The flag is now deprecated, and will be removed in the next release, but can
- still be used to turn it off and regain compatibility with previous versions
- (#GH36505).
-- Implemented ``_BitInt`` literal suffixes ``__wb`` or ``__WB`` as a Clang extension with ``unsigned`` modifiers also allowed. (#GH85223).
C++17 Feature Support
^^^^^^^^^^^^^^^^^^^^^
-- Clang now exposes ``__GCC_DESTRUCTIVE_SIZE`` and ``__GCC_CONSTRUCTIVE_SIZE``
- predefined macros to support standard library implementations of
- ``std::hardware_destructive_interference_size`` and
- ``std::hardware_constructive_interference_size``, respectively. These macros
- are predefined in all C and C++ language modes. The values the macros
- expand to are not stable between releases of Clang and do not need to match
- the values produced by GCC, so these macros should not be used from header
- files because they may not be stable across multiple TUs (the values may vary
- based on compiler version as well as CPU tuning). #GH60174
C++14 Feature Support
^^^^^^^^^^^^^^^^^^^^^
-- Sized deallocation is enabled by default in C++14 onwards. The user may specify
- ``-fno-sized-deallocation`` to disable it if there are some regressions.
C++20 Feature Support
^^^^^^^^^^^^^^^^^^^^^
-- Clang won't perform ODR checks for decls in the global module fragment any
- more to ease the implementation and improve the user's using experience.
- This follows the MSVC's behavior. Users interested in testing the more strict
- behavior can use the flag '-Xclang -fno-skip-odr-check-in-gmf'.
- (#GH79240).
-
-- Implemented the `__is_layout_compatible` and `__is_pointer_interconvertible_base_of`
- intrinsics to support
- `P0466R5: Layout-compatibility and Pointer-interconvertibility Traits <https://wg21.link/P0466R5>`_.
-
-- Clang now implements [module.import]p7 fully. Clang now will import module
- units transitively for the module units coming from the same module of the
- current module units. Fixes #GH84002
-
-- Initial support for class template argument deduction (CTAD) for type alias
- templates (`P1814R0 <https://wg21.link/p1814r0>`_).
- (#GH54051).
-
-- We have sufficient confidence and experience with the concepts implementation
- to update the ``__cpp_concepts`` macro to `202002L`. This enables
- ``<expected>`` from libstdc++ to work correctly with Clang.
-
-- User defined constructors are allowed for copy-list-initialization with CTAD.
- (#GH62925).
-
C++23 Feature Support
^^^^^^^^^^^^^^^^^^^^^
-- Implemented `P2718R0: Lifetime extension in range-based for loops <https://wg21.link/P2718R0>`_. Also
- materialize temporary object which is a prvalue in discarded-value expression.
-- Implemented `P1774R8: Portable assumptions <https://wg21.link/P1774R8>`_.
-
-- Implemented `P2448R2: Relaxing some constexpr restrictions <https://wg21.link/P2448R2>`_.
- Note, the ``-Winvalid-constexpr`` diagnostic is now disabled in C++23 mode,
- but can be explicitly specified to retain the old diagnostic checking
- behavior.
-
-- Added a ``__reference_converts_from_temporary`` builtin, completing the necessary compiler support for
- `P2255R2: Type trait to determine if a reference binds to a temporary <https://wg21.link/P2255R2>`_.
-
-- Implemented `P2797R0: Static and explicit object member functions with the same parameter-type-lists <https://wg21.link/P2797R0>`_.
- This completes the support for "deducing this".
-
C++2c Feature Support
^^^^^^^^^^^^^^^^^^^^^
-- Implemented `P2662R3 Pack Indexing <https://wg21.link/P2662R3>`_.
-
-- Implemented `P2573R2: = delete("should have a reason"); <https://wg21.link/P2573R2>`_
-
-- Implemented `P0609R3: Attributes for Structured Bindings <https://wg21.link/P0609R3>`_
-
-- Implemented `P2748R5 Disallow Binding a Returned Glvalue to a Temporary <https://wg21.link/P2748R5>`_.
-
-- Implemented `P2809R3: Trivial infinite loops are not Undefined Behavior <https://wg21.link/P2809R3>`_.
-
-- Implemented `P3144R2 Deleting a Pointer to an Incomplete Type Should be Ill-formed <https://wg21.link/P3144R2>`_.
-
-- Implemented `P2963R3 Ordering of constraints involving fold expressions <https://wg21.link/P2963R3>`_.
-
-
Resolutions to C++ Defect Reports
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-- Substitute template parameter pack, when it is not explicitly specified
- in the template parameters, but is deduced from a previous argument. (#GH78449)
-
-- Type qualifications are now ignored when evaluating layout compatibility
- of two types.
- (`CWG1719: Layout compatibility and cv-qualification revisited <https://cplusplus.github.io/CWG/issues/1719.html>`_).
-
-- Alignment of members is now respected when evaluating layout compatibility
- of structs.
- (`CWG2583: Common initial sequence should consider over-alignment <https://cplusplus.github.io/CWG/issues/2583.html>`_).
-
-- ``[[no_unique_address]]`` is now respected when evaluating layout
- compatibility of two types.
- (`CWG2759: [[no_unique_address] and common initial sequence <https://cplusplus.github.io/CWG/issues/2759.html>`_).
-
-- Clang now diagnoses declarative nested-name-specifiers with pack-index-specifiers.
- (`CWG2858: Declarative nested-name-specifiers and pack-index-specifiers <https://cplusplus.github.io/CWG/issues/2858.html>`_).
-
-- Clang now allows attributes on concepts.
- (`CWG2428: Deprecating a concept <https://cplusplus.github.io/CWG/issues/2428.html>`_).
-
-- P0522 implementation is enabled by default in all language versions, and
- provisional wording for CWG2398 is implemented.
-
-- Clang now performs type-only lookup for the name in ``using enum`` declaration.
- (`CWG2877: Type-only lookup for using-enum-declarator <https://cplusplus.github.io/CWG/issues/2877.html>`_).
-
-- Clang now requires a template argument list after a template keyword.
- (`CWG96: Syntactic disambiguation using the template keyword <https://cplusplus.github.io/CWG/issues/96.html>`_).
-
-- Clang now considers ``noexcept(typeid(expr))`` more carefully, instead of always assuming that ``std::bad_typeid`` can be thrown.
- (`CWG2191: Incorrect result for noexcept(typeid(v)) <https://cplusplus.github.io/CWG/issues/2191.html>`_).
C Language Changes
------------------
C2y Feature Support
^^^^^^^^^^^^^^^^^^^
-- Clang now enables C2y mode with ``-std=c2y``. This sets ``__STDC_VERSION__``
- to ``202400L`` so that it's greater than the value for C23. The value of this
- macro is subject to change in the future.
C23 Feature Support
^^^^^^^^^^^^^^^^^^^
-- No longer diagnose use of binary literals as an extension in C23 mode. Fixes
- #GH72017.
-
-- Corrected parsing behavior for the ``alignas`` specifier/qualifier in C23. We
- previously handled it as an attribute as in C++, but there are parsing
- differences. The behavioral differences are:
-
- .. code-block:: c
-
- struct alignas(8) /* was accepted, now rejected */ S {
- char alignas(8) /* was rejected, now accepted */ C;
- };
- int i alignas(8) /* was accepted, now rejected */ ;
-
- Fixes (#GH81472).
-
-- Clang now generates predefined macros of the form ``__TYPE_FMTB__`` and
- ``__TYPE_FMTb__`` (e.g., ``__UINT_FAST64_FMTB__``) in C23 mode for use with
- macros typically exposed from ``<inttypes.h>``, such as ``PRIb8``. (#GH81896)
-
-- Clang now supports `N3018 The constexpr specifier for object definitions`
- <https://www.open-std.org/jtc1/sc22/wg14/www/docs/n3018.htm>`_.
-
-- Properly promote bit-fields of bit-precise integer types to the field's type
- rather than to ``int``. #GH87641
-
-- Added the ``INFINITY`` and ``NAN`` macros to Clang's ``<float.h>``
- freestanding implementation; these macros were defined in ``<math.h>`` in C99
- but C23 added them to ``<float.h>`` in
- `WG14 N2848 <https://www.open-std.org/jtc1/sc22/wg14/www/docs/n2848.pdf>`_.
-
-- Clang now supports `N3017 <https://www.open-std.org/jtc1/sc22/wg14/www/docs/n3017.htm>`_
- ``#embed`` - a scannable, tooling-friendly binary resource inclusion mechanism.
-
-- Added the ``FLT_NORM_MAX``, ``DBL_NORM_MAX``, and ``LDBL_NORM_MAX`` to the
- freestanding implementation of ``<float.h>`` that ships with Clang.
-
-- Compiler support for `N2653 char8_t: A type for UTF-8 characters and strings`
- <https://www.open-std.org/jtc1/sc22/wg14/www/docs/n2653.htm>`_: ``u8`` string
- literals are now of type ``char8_t[N]`` in C23 and expose
- ``__CLANG_ATOMIC_CHAR8_T_LOCK_FREE``/``__GCC_ATOMIC_CHAR8_T_LOCK_FREE`` to
- implement the corresponding macro in ``<stdatomic.h>``.
-
-Non-comprehensive list of changes in this release
--------------------------------------------------
-
-- Added ``__builtin_readsteadycounter`` for reading fixed frequency hardware
- counters.
-
-- ``__builtin_addc``, ``__builtin_subc``, and the other sizes of those
- builtins are now constexpr and may be used in constant expressions.
-
-- Added ``__builtin_popcountg`` as a type-generic alternative to
- ``__builtin_popcount{,l,ll}`` with support for any unsigned integer type. Like
- the previous builtins, this new builtin is constexpr and may be used in
- constant expressions.
-
-- Lambda expressions are now accepted in C++03 mode as an extension.
-
-- Added ``__builtin_clzg`` and ``__builtin_ctzg`` as type-generic alternatives
- to ``__builtin_clz{,s,l,ll}`` and ``__builtin_ctz{,s,l,ll}`` respectively,
- with support for any unsigned integer type. Like the previous builtins, these
- new builtins are constexpr and may be used in constant expressions.
-
-- ``__typeof_unqual__`` is available in all C modes as an extension, which behaves
- like ``typeof_unqual`` from C23, similar to ``__typeof__`` and ``typeof``.
-
-- ``__builtin_reduce_{add|mul|xor|or|and|min|max}`` builtins now support scalable vectors.
-
-* Shared libraries linked with either the ``-ffast-math``, ``-Ofast``, or
- ``-funsafe-math-optimizations`` flags will no longer enable flush-to-zero
- floating-point mode by default. This decision can be overridden with use of
- ``-mdaz-ftz``. This behavior now matches GCC's behavior.
- (`#57589 <https://github.com/llvm/llvm-project/issues/57589>`_)
-
-* ``-fdenormal-fp-math=preserve-sign`` is no longer implied by ``-ffast-math``
- on x86 systems.
-
-- Builtins ``__builtin_shufflevector()`` and ``__builtin_convertvector()`` may
- now be used within constant expressions.
-
-- When compiling a constexpr function, Clang will check to see whether the
- function can *never* be used in a constant expression context and issues a
- diagnostic under the ``-Winvalid-constexpr`` diagostic flag (which defaults
- to an error). This check can be expensive because the mere presence of a
- function marked ``constexpr`` will cause us to undergo constant expression
- evaluation, even if the function is not called within the translation unit
- being compiled. Due to the expense, Clang no longer checks constexpr function
- bodies when the function is defined in a system header file or when
- ``-Winvalid-constexpr`` is not enabled for the function definition, which
- should result in mild compile-time performance improvements.
-
-- Added ``__is_bitwise_cloneable`` which is used to check whether a type
- can be safely copied by memcpy/memmove.
-
-- ``#pragma GCC diagnostic warning "-Wfoo"`` can now downgrade ``-Werror=foo``
- errors and certain default-to-error ``-W`` diagnostics to warnings.
-
-- Support importing C++20 modules in clang-repl.
-
-- Added support for ``TypeLoc::dump()`` for easier debugging, and improved
- textual and JSON dumping for various ``TypeLoc``-related nodes.
-
-- Clang can now emit distinct type-based alias analysis tags for incompatible
- pointers, enabling more powerful alias analysis when accessing pointer types.
- The new behavior can be enabled using ``-fpointer-tbaa``.
-
-- The ``__atomic_always_lock_free`` and ``__atomic_is_lock_free``
- builtins may now return true if the pointer argument is a
- compile-time constant (e.g. ``(void*)4``), and constant pointer is
- sufficiently-aligned for the access requested. Previously, only the
- type of the pointer was taken into account. This improves
- compatibility with GCC's libstdc++.
New Compiler Flags
------------------
-- ``-fsanitize=implicit-bitfield-conversion`` checks implicit truncation and
- sign change.
-- ``-fsanitize=implicit-integer-conversion`` a group that replaces the previous
- group ``-fsanitize=implicit-conversion``.
-
-- ``-Wmissing-designated-field-initializers``, grouped under ``-Wmissing-field-initializers``.
- This diagnostic can be disabled to make ``-Wmissing-field-initializers`` behave
- like it did before Clang 18.x. Fixes #GH56628
-
-- ``-fexperimental-modules-reduced-bmi`` enables the Reduced BMI for C++20 named modules.
- See the document of standard C++ modules for details.
-
-- ``-fexperimental-late-parse-attributes`` enables an experimental feature to
- allow late parsing certain attributes in specific contexts where they would
- not normally be late parsed. Currently this allows late parsing the
- `counted_by` attribute in C. See `Attribute Changes in Clang`_.
-
-- ``-fseparate-named-sections`` uses separate unique sections for global
- symbols in named special sections (i.e. symbols annotated with
- ``__attribute__((section(...)))``. This enables linker GC to collect unused
- symbols without having to use a per-symbol section.
-
-- ``-fms-define-stdc`` and its clang-cl counterpart ``/Zc:__STDC__``.
- Matches MSVC behaviour by defining ``__STDC__`` to ``1`` when
- MSVC compatibility mode is used. It has no effect for C++ code.
-
-- ``-Wc++23-compat`` group was added to help migrating existing codebases
- to C++23.
-
-- ``-Wc++2c-compat`` group was added to help migrating existing codebases
- to upcoming C++26.
-
-- ``-fdisable-block-signature-string`` instructs clang not to emit the signature
- string for blocks. Disabling the string can potentially break existing code
- that relies on it. Users should carefully consider this possibiilty when using
- the flag.
-
-- For the ARM target, added ``-Warm-interrupt-vfp-clobber`` that will emit a
- diagnostic when an interrupt handler is declared and VFP is enabled.
-
-- ``-fpointer-tbaa`` enables emission of distinct type-based alias
- analysis tags for incompatible pointers.
Deprecated Compiler Flags
-------------------------
-- The ``-Ofast`` command-line option has been deprecated. This option both
- enables the ``-O3`` optimization-level, as well as enabling non-standard
- ``-ffast-math`` behaviors. As such, it is somewhat misleading as an
- "optimization level". Users are advised to switch to ``-O3 -ffast-math`` if
- the use of non-standard math behavior is intended, and ``-O3`` otherwise.
- See `RFC <https://discourse.llvm.org/t/rfc-deprecate-ofast/78687>`_ for details.
-
Modified Compiler Flags
-----------------------
-- Added a new diagnostic flag ``-Wreturn-mismatch`` which is grouped under
- ``-Wreturn-type``, and moved some of the diagnostics previously controlled by
- ``-Wreturn-type`` under this new flag. Fixes #GH72116.
-- ``-fsanitize=implicit-conversion`` is now a group for both
- ``-fsanitize=implicit-integer-conversion`` and
- ``-fsanitize=implicit-bitfield-conversion``.
-
-- Added ``-Wcast-function-type-mismatch`` under the ``-Wcast-function-type``
- warning group. Moved the diagnostic previously controlled by
- ``-Wcast-function-type`` to the new warning group and added
- ``-Wcast-function-type-mismatch`` to ``-Wextra``. #GH76872
-
- .. code-block:: c
-
- int x(long);
- typedef int (f2)(void*);
- typedef int (f3)();
-
- void func(void) {
- // Diagnoses under -Wcast-function-type, -Wcast-function-type-mismatch,
- // -Wcast-function-type-strict, -Wextra
- f2 *b = (f2 *)x;
- // Diagnoses under -Wcast-function-type, -Wcast-function-type-strict
- f3 *c = (f3 *)x;
- }
-
-- Carved out ``-Wformat`` warning about scoped enums into a subwarning and
- make it controlled by ``-Wformat-pedantic``. Fixes #GH88595.
-
-- Trivial infinite loops (i.e loops with a constant controlling expresion
- evaluating to ``true`` and an empty body such as ``while(1);``)
- are considered infinite, even when the ``-ffinite-loop`` flag is set.
-
-- Diagnostics groups about compatibility with a particular C++ Standard version
- now include dianostics about C++26 features that are not present in older
- versions.
-
-- Removed the "arm interrupt calling convention" warning that was included in
- ``-Wextra`` without its own flag. This warning suggested adding
- ``__attribute__((interrupt))`` to functions that are called from interrupt
- handlers to prevent clobbering VFP registers. Following this suggestion leads
- to unpredictable behavior by causing multiple exception returns from one
- exception. Fixes #GH34876.
Removed Compiler Flags
-------------------------
-- The ``-freroll-loops`` flag has been removed. It had no effect since Clang 13.
-- ``-m[no-]unaligned-access`` is removed for RISC-V and LoongArch.
- ``-m[no-]strict-align``, also supported by GCC, should be used instead. (#GH85350)
-
Attribute Changes in Clang
--------------------------
-- Introduced a new function attribute ``__attribute__((amdgpu_max_num_work_groups(x, y, z)))`` or
- ``[[clang::amdgpu_max_num_work_groups(x, y, z)]]`` for the AMDGPU target. This attribute can be
- attached to HIP or OpenCL kernel function definitions to provide an optimization hint. The parameters
- ``x``, ``y``, and ``z`` specify the maximum number of workgroups for the respective dimensions,
- and each must be a positive integer when provided. The parameter ``x`` is required, while ``y`` and
- ``z`` are optional with default value of 1.
-
-- The ``swiftasynccc`` attribute is now considered to be a Clang extension
- rather than a language standard feature. Please use
- ``__has_extension(swiftasynccc)`` to check the availability of this attribute
- for the target platform instead of ``__has_feature(swiftasynccc)``. Also,
- added a new extension query ``__has_extension(swiftcc)`` corresponding to the
- ``__attribute__((swiftcc))`` attribute.
-
-- The ``_Nullable`` and ``_Nonnull`` family of type attributes can now apply
- to certain C++ class types, such as smart pointers:
- ``void useObject(std::unique_ptr<Object> _Nonnull obj);``.
-
- This works for standard library types including ``unique_ptr``, ``shared_ptr``,
- and ``function``. See
- `the attribute reference documentation <https://llvm.org/docs/AttributeReference.html#nullability-attributes>`_
- for the full list.
-
-- The ``_Nullable`` attribute can be applied to C++ class declarations:
- ``template <class T> class _Nullable MySmartPointer {};``.
-
- This allows the ``_Nullable`` and ``_Nonnull`` family of type attributes to
- apply to this class.
-
-- Clang now warns that the ``exclude_from_explicit_instantiation`` attribute
- is ignored when applied to a local class or a member thereof.
-
-- The ``clspv_libclc_builtin`` attribute has been added to allow clspv
- (`OpenCL-C to Vulkan SPIR-V compiler <https://github.com/google/clspv>`_) to identify functions coming from libclc
- (`OpenCL-C builtin library <https://libclc.llvm.org>`_).
-- The ``counted_by`` attribute is now allowed on pointers that are members of a
- struct in C.
-
-- The ``counted_by`` attribute can now be late parsed in C when
- ``-fexperimental-late-parse-attributes`` is passed but only when attribute is
- used in the declaration attribute position. This allows using the
- attribute on existing code where it previously impossible to do so without
- re-ordering struct field declarations would break ABI as shown below.
-
- .. code-block:: c
-
- struct BufferTy {
- /* Refering to `count` requires late parsing */
- char* buffer __counted_by(count);
- /* Swapping `buffer` and `count` to avoid late parsing would break ABI */
- size_t count;
- };
-
-- The attributes ``sized_by``, ``counted_by_or_null`` and ``sized_by_or_null```
- have been added as variants on ``counted_by``, each with slightly different semantics.
- ``sized_by`` takes a byte size parameter instead of an element count, allowing pointees
- with unknown size. The ``counted_by_or_null`` and ``sized_by_or_null`` variants are equivalent
- to their base variants, except the pointer can be null regardless of count/size value.
- If the pointer is null the size is effectively 0. ``sized_by_or_null`` is needed to properly
- annotate allocator functions like ``malloc`` that return a buffer of a given byte size, but can
- also return null.
-
-- The ``guarded_by``, ``pt_guarded_by``, ``acquired_after``, ``acquired_before``
- attributes now support referencing struct members in C. The arguments are also
- now late parsed when ``-fexperimental-late-parse-attributes`` is passed like
- for ``counted_by``.
-
-- Introduced new function type attributes ``[[clang::nonblocking]]``, ``[[clang::nonallocating]]``,
- ``[[clang::blocking]]``, and ``[[clang::allocating]]``, with GNU-style variants as well.
- The attributes declare constraints about a function's behavior pertaining to blocking and
- heap memory allocation.
Improvements to Clang's diagnostics
-----------------------------------
-- Clang now emits an error instead of a warning for ``-Wundefined-internal``
- when compiling with `-pedantic-errors` to conform to the C standard
-
-- Clang now applies syntax highlighting to the code snippets it
- prints.
-
-- Clang now diagnoses member template declarations with multiple declarators.
-
-- Clang now diagnoses use of the ``template`` keyword after declarative nested
- name specifiers.
-
-- The ``-Wshorten-64-to-32`` diagnostic is now grouped under ``-Wimplicit-int-conversion`` instead
- of ``-Wconversion``. Fixes #GH69444.
-
-- Clang now uses thousand separators when printing large numbers in integer overflow diagnostics.
- Fixes #GH80939.
-
-- Clang now diagnoses friend declarations with an ``enum`` elaborated-type-specifier in language modes after C++98.
-
-- Added diagnostics for C11 keywords being incompatible with language standards
- before C11, under a new warning group: ``-Wpre-c11-compat``.
-
-- Now diagnoses an enumeration constant whose value is larger than can be
- represented by ``unsigned long long``, which can happen with a large constant
- using the ``wb`` or ``uwb`` suffix. The maximal underlying type is currently
- ``unsigned long long``, but this behavior may change in the future when Clang
- implements
- `WG14 N3029 <https://www.open-std.org/jtc1/sc22/wg14/www/docs/n3029.htm>`_.
- (#GH69352).
-
-- Clang now diagnoses extraneous template parameter lists as a language extension.
-
-- Clang now diagnoses declarative nested name specifiers that name alias templates.
-
-- Clang now diagnoses lambda function expressions being implicitly cast to boolean values, under ``-Wpointer-bool-conversion``.
- Fixes #GH82512.
-
-- Clang now provides improved warnings for the ``cleanup`` attribute to detect misuse scenarios,
- such as attempting to call ``free`` on an unallocated object. Fixes #GH79443.
-
-- Clang no longer warns when the ``bitand`` operator is used with boolean
- operands, distinguishing it from potential typographical errors or unintended
- bitwise operations. Fixes #GH77601.
-
-- Clang now correctly diagnoses no arguments to a variadic macro parameter as a C23/C++20 extension.
- Fixes #GH84495.
-
-- Clang no longer emits a ``-Wexit-time destructors`` warning on static variables explicitly
- annotated with the ``clang::always_destroy`` attribute.
- Fixes #GH68686, #GH86486
-
-- ``-Wmicrosoft``, ``-Wgnu``, or ``-pedantic`` is now required to diagnose C99
- flexible array members in a union or alone in a struct. Fixes GH#84565.
-
-- Clang now no longer diagnoses type definitions in ``offsetof`` in C23 mode.
- Fixes #GH83658.
-
-- New ``-Wformat-signedness`` diagnostic that warn if the format string requires an
- unsigned argument and the argument is signed and vice versa.
-
-- Clang now emits ``unused argument`` warning when the -fmodule-output flag is used
- with an input that is not of type c++-module.
-
-- Clang emits a ``-Wreturn-stack-address`` warning if a function returns a pointer or
- reference to a struct literal. Fixes #GH8678
-
-- Clang emits a ``-Wunused-but-set-variable`` warning on C++ variables whose declaration
- (with initializer) entirely consist the condition expression of a if/while/for construct
- but are not actually used in the body of the if/while/for construct. Fixes #GH41447
-
-- Clang emits a diagnostic when a tentative array definition is assumed to have
- a single element, but that diagnostic was never given a diagnostic group.
- Added the ``-Wtentative-definition-array`` warning group to cover this.
- Fixes #GH87766
-
-- Clang now uses the correct type-parameter-key (``class`` or ``typename``) when printing
- template template parameter declarations.
-
-- Clang now diagnoses requires expressions with explicit object parameters.
-
-- Clang now looks up members of the current instantiation in the template definition context
- if the current instantiation has no dependent base classes.
-
- .. code-block:: c++
-
- template<typename T>
- struct A {
- int f() {
- return this->x; // error: no member named 'x' in 'A<T>'
- }
- };
-
-- Clang emits a ``-Wparentheses`` warning for expressions with consecutive comparisons like ``x < y < z``.
- Fixes #GH20456.
-
-- Clang no longer emits a "declared here" note for a builtin function that has no declaration in source.
- Fixes #GH93369.
-
-- Clang now has an improved error message for captures that refer to a class member.
- Fixes #GH94764.
-
-- Clang now diagnoses unsupported class declarations for ``std::initializer_list<E>`` when they are
- used rather than when they are needed for constant evaluation or when code is generated for them.
- The check is now stricter to prevent crashes for some unsupported declarations (Fixes #GH95495).
-
-- Clang now diagnoses dangling cases where a pointer is assigned to a temporary
- that will be destroyed at the end of the full expression.
- Fixes #GH54492.
-
-- Clang now shows implicit deduction guides when diagnosing overload resolution failure. #GH92393.
-
-- Clang no longer emits a "no previous prototype" warning for Win32 entry points under ``-Wmissing-prototypes``.
- Fixes #GH94366.
-
-- For the ARM target, calling an interrupt handler from another function is now an error. #GH95359.
-
-- Clang now diagnoses integer constant expressions that are folded to a constant value as an extension in more circumstances. Fixes #GH59863
-
-- Clang now diagnoses dangling assignments for pointer-like objects (annotated with `[[gsl::Pointer]]`) under `-Wdangling-assignment-gsl` (off by default)
- Fixes #GH63310.
-
-- Clang now diagnoses uses of alias templates with a deprecated attribute. (Fixes #GH18236).
-
- .. code-block:: c++
-
- template <typename T>
- struct NoAttr {
- };
-
- template <typename T>
- using UsingWithAttr __attribute__((deprecated)) = NoAttr<T>;
-
- UsingWithAttr<int> objUsingWA; // warning: 'UsingWithAttr' is deprecated
Improvements to Clang's time-trace
----------------------------------
-- Clang now specifies that using ``auto`` in a lambda parameter is a C++14 extension when
- appropriate. (`#46059: <https://github.com/llvm/llvm-project/issues/46059>`_).
-
-- Clang now adds source file infomation for template instantiations as ``event["args"]["filename"]``. This
- added behind an option ``-ftime-trace-verbose``. This is expected to increase the size of trace by 2-3 times.
-
Improvements to Coverage Mapping
--------------------------------
-- Macros defined in system headers are not expanded in coverage
- mapping. Conditional expressions in system header macros are no
- longer taken into account for branch coverage. They can be included
- with ``-mllvm -system-headers-coverage``.
- (`#78920: <https://github.com/llvm/llvm-project/issues/78920>`_)
-- MC/DC Coverage has been improved.
- (`#82448: <https://github.com/llvm/llvm-project/pull/82448>`_)
-
- - The maximum number of conditions is no longer limited to 6. See
- `this <SourceBasedCodeCoverage.html#mc-dc-instrumentation>` for
- more details.
-
Bug Fixes in This Version
-------------------------
-- Clang's ``-Wundefined-func-template`` no longer warns on pure virtual
- functions. (#GH74016)
-
-- Fixed missing warnings when comparing mismatched enumeration constants
- in C (#GH29217)
-
-- Clang now accepts elaborated-type-specifiers that explicitly specialize
- a member class template for an implicit instantiation of a class template.
-
-- Fixed missing warnings when doing bool-like conversions in C23 (#GH79435).
-- Clang's ``-Wshadow`` no longer warns when an init-capture is named the same as
- a class field unless the lambda can capture this.
- Fixes (#GH71976)
-
-- Clang now accepts qualified partial/explicit specializations of variable templates that
- are not nominable in the lookup context of the specialization.
-
-- Clang now doesn't produce false-positive warning `-Wconstant-logical-operand`
- for logical operators in C23.
- Fixes (#GH64356).
-
-- ``__is_trivially_relocatable`` no longer returns ``false`` for volatile-qualified types.
- Fixes (#GH77091).
-
-- Clang no longer produces a false-positive `-Wunused-variable` warning
- for variables created through copy initialization having side-effects in C++17 and later.
- Fixes (#GH64356) (#GH79518).
-
-- Fix value of predefined macro ``__FUNCTION__`` in MSVC compatibility mode.
- Fixes (#GH66114).
-
-- Clang now emits errors for explicit specializations/instatiations of lambda call
- operator.
- Fixes (#GH83267).
-
-- Fix crash on ill-formed partial specialization with CRTP.
- Fixes (#GH89374).
-
-- Clang now correctly generates overloads for bit-precise integer types for
- builtin operators in C++. Fixes #GH82998.
-
-- Fix crash when destructor definition is preceded with an equals sign.
- Fixes (#GH89544).
-
-- When performing mixed arithmetic between ``_Complex`` floating-point types and integers,
- Clang now correctly promotes the integer to its corresponding real floating-point
- type only rather than to the complex type (e.g. ``_Complex float / int`` is now evaluated
- as ``_Complex float / float`` rather than ``_Complex float / _Complex float``), as mandated
- by the C standard. This significantly improves codegen of `*` and `/` especially.
- Fixes #GH31205.
-
-- Fixes an assertion failure on invalid code when trying to define member
- functions in lambdas.
-
-- Fixed a regression in CTAD that a friend declaration that befriends itself may cause
- incorrect constraint substitution. (#GH86769).
-
-- Fixed an assertion failure on invalid InitListExpr in C89 mode (#GH88008).
-
-- Fixed missing destructor calls when we branch from middle of an expression.
- This could happen through a branch in stmt-expr or in an expression containing a coroutine
- suspension. Fixes (#GH63818) (#GH88478).
-
-- Clang will no longer diagnose an erroneous non-dependent ``switch`` condition
- during instantiation, and instead will only diagnose it once, during checking
- of the function template.
-
-- Clang now allows the value of unroll count to be zero in ``#pragma GCC unroll`` and ``#pragma unroll``.
- The values of 0 and 1 block any unrolling of the loop. This keeps the same behavior with GCC.
- Fixes (`#88624 <https://github.com/llvm/llvm-project/issues/88624>`_).
-
-- Clang will no longer emit a duplicate -Wunused-value warning for an expression
- `(A, B)` which evaluates to glvalue `B` that can be converted to non ODR-use. (#GH45783)
-
-- Clang now correctly disallows VLA type compound literals, e.g. ``(int[size]){}``,
- as the C standard mandates. (#GH89835)
-
-- ``__is_array`` and ``__is_bounded_array`` no longer return ``true`` for
- zero-sized arrays. Fixes (#GH54705).
-
-- Correctly reject declarations where a statement is required in C.
- Fixes #GH92775
-
-- Fixed `static_cast` to array of unknown bound. Fixes (#GH62863).
-
-- Fixed Clang crashing when failing to perform some C++ Initialization Sequences. (#GH98102)
-
-- ``__is_trivially_equality_comparable`` no longer returns true for types which
- have a constrained defaulted comparison operator (#GH89293).
-
-- Fixed Clang from generating dangling StringRefs when deserializing Exprs & Stmts (#GH98667)
-
-- ``__has_unique_object_representations`` correctly handles arrays of unknown bounds of
- types by ensuring they are complete and instantiating them if needed. Fixes (#GH95311).
-
-- ``typeof_unqual`` now properly removes type qualifiers from arrays and their element types. (#GH92667)
-
-- Fixed an assertion failure when a template non-type parameter contains
- an invalid expression.
Bug Fixes to Compiler Builtins
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-- Fix crash when atomic builtins are called with pointer to zero-size struct (#GH90330)
-
-- Clang now allows pointee types of atomic builtin arguments to be complete template types
- that was not instantiated elsewhere.
-
Bug Fixes to Attribute Support
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Bug Fixes to C++ Support
^^^^^^^^^^^^^^^^^^^^^^^^
-- Fix crash when calling the constructor of an invalid class.
- (#GH10518) (#GH67914) (#GH78388)
-- Fix crash when using lifetimebound attribute in function with trailing return.
- (#GH73619)
-- Addressed an issue where constraints involving injected class types are perceived
- distinct from its specialization types. (#GH56482)
-- Fixed a bug where variables referenced by requires-clauses inside
- nested generic lambdas were not properly injected into the constraint scope. (#GH73418)
-- Fixed a crash where substituting into a requires-expression that refers to function
- parameters during the equivalence determination of two constraint expressions.
- (#GH74447)
-- Fixed deducing auto& from const int in template parameters of partial
- specializations. (#GH77189)
-- Fix for crash when using a erroneous type in a return statement.
- (#GH63244) (#GH79745)
-- Fixed an out-of-bounds error caused by building a recovery expression for ill-formed
- function calls while substituting into constraints. (#GH58548)
-- Fix incorrect code generation caused by the object argument
- of ``static operator()`` and ``static operator[]`` calls not being evaluated. (#GH67976)
-- Fix crash and diagnostic with const qualified member operator new.
- Fixes (#GH79748)
-- Fixed a crash where substituting into a requires-expression that involves parameter packs
- during the equivalence determination of two constraint expressions. (#GH72557)
-- Fix a crash when specializing an out-of-line member function with a default
- parameter where we did an incorrect specialization of the initialization of
- the default parameter. (#GH68490)
-- Fix a crash when trying to call a varargs function that also has an explicit object parameter.
- Fixes (#GH80971)
-- Reject explicit object parameters on `new` and `delete` operators. (#GH82249)
-- Fix a crash when trying to call a varargs function that also has an explicit object parameter. (#GH80971)
-- Fixed a bug where abbreviated function templates would append their invented template parameters to
- an empty template parameter lists.
-- Fix parsing of abominable function types inside type traits. Fixes #GH77585
-- Clang now classifies aggregate initialization in C++17 and newer as constant
- or non-constant more accurately. Previously, only a subset of the initializer
- elements were considered, misclassifying some initializers as constant. Partially fixes
- #GH80510.
-- Clang now ignores top-level cv-qualifiers on function parameters in template partial orderings. (#GH75404)
-- No longer reject valid use of the ``_Alignas`` specifier when declaring a
- local variable, which is supported as a C11 extension in C++. Previously, it
- was only accepted at namespace scope but not at local function scope.
-- Clang no longer tries to call consteval constructors at runtime when they appear in a member initializer. (#GH82154)
-- Fix crash when using an immediate-escalated function at global scope. (#GH82258)
-- Correctly immediate-escalate lambda conversion functions. (#GH82258)
-- Fixed an issue where template parameters of a nested abbreviated generic lambda within
- a requires-clause lie at the same depth as those of the surrounding lambda. This,
- in turn, results in the wrong template argument substitution during constraint checking.
- (#GH78524)
-- Clang no longer instantiates the exception specification of discarded candidate function
- templates when determining the primary template of an explicit specialization.
-- Fixed a crash in Microsoft compatibility mode where unqualified dependent base class
- lookup searches the bases of an incomplete class.
-- Fix a crash when an unresolved overload set is encountered on the RHS of a ``.*`` operator.
- (#GH53815)
-- In ``__restrict``-qualified member functions, attach ``__restrict`` to the pointer type of
- ``this`` rather than the pointee type.
- Fixes (#GH82941), (#GH42411) and (#GH18121).
-- Clang now properly reports supported C++11 attributes when using
- ``__has_cpp_attribute`` and parses attributes with arguments in C++03 (#GH82995)
-- Clang now properly diagnoses missing 'default' template arguments on a variety
- of templates. Previously we were diagnosing on any non-function template
- instead of only on class, alias, and variable templates, as last updated by
- CWG2032. Fixes (#GH83461)
-- Fixed an issue where an attribute on a declarator would cause the attribute to
- be destructed prematurely. This fixes a pair of Chromium that were brought to
- our attention by an attempt to fix in (#GH77703). Fixes (#GH83385).
-- Fix evaluation of some immediate calls in default arguments.
- Fixes (#GH80630)
-- Fixed an issue where the ``RequiresExprBody`` was involved in the lambda dependency
- calculation. (#GH56556), (#GH82849).
-- Fix a bug where overload resolution falsely reported an ambiguity when it was comparing
- a member-function against a non member function or a member-function with an
- explicit object parameter against a member function with no explicit object parameter
- when one of the function had more specialized templates. Fixes #GH82509 and #GH74494
-- Clang now supports direct lambda calls inside of a type alias template declarations.
- This addresses (#GH70601), (#GH76674), (#GH79555), (#GH81145) and (#GH82104).
-- Allow access to a public template alias declaration that refers to friend's
- private nested type. (#GH25708).
-- Fixed a crash in constant evaluation when trying to access a
- captured ``this`` pointer in a lambda with an explicit object parameter.
- Fixes (#GH80997)
-- Fix an issue where missing set friend declaration in template class instantiation.
- Fixes (#GH84368).
-- Fixed a crash while checking constraints of a trailing requires-expression of a lambda, that the
- expression references to an entity declared outside of the lambda. (#GH64808)
-- Clang's __builtin_bit_cast will now produce a constant value for records with empty bases. See:
- (#GH82383)
-- Fix a crash when instantiating a lambda that captures ``this`` outside of its context. Fixes (#GH85343).
-- Fix an issue where a namespace alias could be defined using a qualified name (all name components
- following the first `::` were ignored).
-- Fix an out-of-bounds crash when checking the validity of template partial specializations. (part of #GH86757).
-- Fix an issue caused by not handling invalid cases when substituting into the parameter mapping of a constraint. Fixes (#GH86757).
-- Fixed a bug that prevented member function templates of class templates declared with a deduced return type
- from being explicitly specialized for a given implicit instantiation of the class template.
-- Fixed a crash when ``this`` is used in a dependent class scope function template specialization
- that instantiates to a static member function.
-- Fix crash when inheriting from a cv-qualified type. Fixes #GH35603
-- Fix a crash when the using enum declaration uses an anonymous enumeration. Fixes (#GH86790).
-- Handled an edge case in ``getFullyPackExpandedSize`` so that we now avoid a false-positive diagnostic. (#GH84220)
-- Clang now correctly tracks type dependence of by-value captures in lambdas with an explicit
- object parameter.
- Fixes (#GH70604), (#GH79754), (#GH84163), (#GH84425), (#GH86054), (#GH86398), and (#GH86399).
-- Fix a crash when deducing ``auto`` from an invalid dereference (#GH88329).
-- Fix a crash in requires expression with templated base class member function. Fixes (#GH84020).
-- Fix a crash caused by defined struct in a type alias template when the structure
- has fields with dependent type. Fixes (#GH75221).
-- Fix the Itanium mangling of lambdas defined in a member of a local class (#GH88906)
-- Fixed a crash when trying to evaluate a user-defined ``static_assert`` message whose ``size()``
- function returns a large or negative value. Fixes (#GH89407).
-- Fixed a use-after-free bug in parsing of type constraints with default arguments that involve lambdas. (#GH67235)
-- Fixed bug in which the body of a consteval lambda within a template was not parsed as within an
- immediate function context.
-- Fix CTAD for ``std::initializer_list``. This allows ``std::initializer_list{1, 2, 3}`` to be deduced as
- ``std::initializer_list<int>`` as intended.
-- Fix a bug on template partial specialization whose template parameter is `decltype(auto)`.
-- Fix a bug on template partial specialization with issue on deduction of nontype template parameter
- whose type is `decltype(auto)`. Fixes (#GH68885).
-- Clang now correctly treats the noexcept-specifier of a friend function to be a complete-class context.
-- Fix an assertion failure when parsing an invalid members of an anonymous class. (#GH85447)
-- Fixed a misuse of ``UnresolvedLookupExpr`` for ill-formed templated expressions. Fixes (#GH48673), (#GH63243)
- and (#GH88832).
-- Clang now defers all substitution into the exception specification of a function template specialization
- until the noexcept-specifier is instantiated.
-- Fix a crash when an implicitly declared ``operator==`` function with a trailing requires-clause has its
- constraints compared to that of another declaration.
-- Fix a bug where explicit specializations of member functions/function templates would have substitution
- performed incorrectly when checking constraints. Fixes (#GH90349).
-- Clang now allows constrained member functions to be explicitly specialized for an implicit instantiation
- of a class template.
-- Fix a C++23 bug in implementation of P2564R3 which evaluates immediate invocations in place
- within initializers for variables that are usable in constant expressions or are constant
- initialized, rather than evaluating them as a part of the larger manifestly constant evaluated
- expression.
-- Fix a bug in access control checking due to dealyed checking of friend declaration. Fixes (#GH12361).
-- Correctly treat the compound statement of an ``if consteval`` as an immediate context. Fixes (#GH91509).
-- When partial ordering alias templates against template template parameters,
- allow pack expansions when the alias has a fixed-size parameter list. Fixes (#GH62529).
-- Clang now ignores template parameters only used within the exception specification of candidate function
- templates during partial ordering when deducing template arguments from a function declaration or when
- taking the address of a function template.
-- Fix a bug with checking constrained non-type template parameters for equivalence. Fixes (#GH77377).
-- Fix a bug where the last argument was not considered when considering the most viable function for
- explicit object argument member functions. Fixes (#GH92188).
-- Fix a C++11 crash when a non-const non-static member function is defined out-of-line with
- the ``constexpr`` specifier. Fixes (#GH61004).
-- Clang no longer transforms dependent qualified names into implicit class member access expressions
- until it can be determined whether the name is that of a non-static member.
-- Clang now correctly diagnoses when the current instantiation is used as an incomplete base class.
-- Clang no longer treats ``constexpr`` class scope function template specializations of non-static members
- as implicitly ``const`` in language modes after C++11.
-- Fixed a crash when trying to emit captures in a lambda call operator with an explicit object
- parameter that is called on a derived type of the lambda.
- Fixes (#GH87210), (GH89541).
-- Clang no longer tries to check if an expression is immediate-escalating in an unevaluated context.
- Fixes (#GH91308).
-- Fix a crash caused by a regression in the handling of ``source_location``
- in dependent contexts. Fixes (#GH92680).
-- Fixed a crash when diagnosing failed conversions involving template parameter
- packs. (#GH93076)
-- Fixed a regression introduced in Clang 18 causing a static function overloading a non-static function
- with the same parameters not to be diagnosed. (Fixes #GH93456).
-- Clang now diagnoses unexpanded parameter packs in attributes. (Fixes #GH93269).
-- Clang now allows ``@$``` in raw string literals. Fixes (#GH93130).
-- Fix an assertion failure when checking invalid ``this`` usage in the wrong context. (Fixes #GH91536).
-- Clang no longer models dependent NTTP arguments as ``TemplateParamObjectDecl`` s. Fixes (#GH84052).
-- Fix incorrect merging of modules which contain using declarations which shadow
- other declarations. This could manifest as ODR checker false positives.
- Fixes (`#80252 <https://github.com/llvm/llvm-project/issues/80252>`_)
-- Fix a regression introduced in Clang 18 causing incorrect overload resolution in the presence of functions only
- differering by their constraints when only one of these function was variadic.
-- Fix a crash when a variable is captured by a block nested inside a lambda. (Fixes #GH93625).
-- Fixed a type constraint substitution issue involving a generic lambda expression. (#GH93821)
-- Fix a crash caused by improper use of ``__array_extent``. (#GH80474)
-- Fixed several bugs in capturing variables within unevaluated contexts. (#GH63845), (#GH67260), (#GH69307),
- (#GH88081), (#GH89496), (#GH90669), (#GH91633) and (#GH97453).
-- Fixed a crash in constraint instantiation under nested lambdas with dependent parameters.
-- Fixed handling of brace ellison when building deduction guides. (#GH64625), (#GH83368).
-- Fixed a failed assertion when attempting to convert an integer representing the difference
- between the addresses of two labels (a GNU extension) to a pointer within a constant expression. (#GH95366).
-- Fix immediate escalation bugs in the presence of dependent call arguments. (#GH94935)
-- Clang now diagnoses explicit specializations with storage class specifiers in all contexts.
-- Fix an assertion failure caused by parsing a lambda used as a default argument for the value of a
- forward-declared class. (#GH93512).
-- Fixed a bug in access checking inside return-type-requirement of compound requirements. (#GH93788).
-- Fixed an assertion failure about invalid conversion when calling lambda. (#GH96205).
-- Fixed a bug where the first operand of binary ``operator&`` would be transformed as if it was the operand
- of the address of operator. (#GH97483).
-- Fixed an assertion failure about a constant expression which is a known integer but is not
- evaluated to an integer. (#GH96670).
-- Fixed a bug where references to lambda capture inside a ``noexcept`` specifier were not correctly
- instantiated. (#GH95735).
-- Fixed a CTAD substitution bug involving type aliases that reference outer template parameters. (#GH94614).
-- Clang now correctly handles unexpanded packs in the template parameter list of a generic lambda expression
- (#GH48937)
-- Fix a crash when parsing an invalid type-requirement in a requires expression. (#GH51868)
-- Fix parsing of built-in type-traits such as ``__is_pointer`` in libstdc++ headers. (#GH95598)
-- Fixed failed assertion when resolving context of defaulted comparison method outside of struct. (#GH96043).
-- Clang now diagnoses explicit object parameters in member pointers and other contexts where they should not appear.
- Fixes (#GH85992).
-- Fixed a crash-on-invalid bug involving extraneous template parameter with concept substitution. (#GH73885)
-- Fixed assertion failure by skipping the analysis of an invalid field declaration. (#GH99868)
-
Bug Fixes to AST Handling
^^^^^^^^^^^^^^^^^^^^^^^^^
-- Clang now properly preserves ``FoundDecls`` within a ``ConceptReference``. (#GH82628)
-- The presence of the ``typename`` keyword is now stored in ``TemplateTemplateParmDecl``.
-- Fixed malformed AST generated for anonymous union access in templates. (#GH90842)
-- Improved preservation of qualifiers and sugar in `TemplateNames`, including
- template keyword.
Miscellaneous Bug Fixes
^^^^^^^^^^^^^^^^^^^^^^^
-- Fixed an infinite recursion in ASTImporter, on return type declared inside
- body of C++11 lambda without trailing return (#GH68775).
-- Fixed declaration name source location of instantiated function definitions (GH71161).
-- Improve diagnostic output to print an expression instead of 'no argument` when comparing Values as template arguments.
-
Miscellaneous Clang Crashes Fixed
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-- Do not attempt to dump the layout of dependent types or invalid declarations
- when ``-fdump-record-layouts-complete`` is passed. Fixes #GH83684.
-- Unhandled StructuralValues in the template differ (#GH93068).
-
OpenACC Specific Changes
------------------------
@@ -1142,144 +149,36 @@
X86 Support
^^^^^^^^^^^
-- Remove knl/knm specific ISA supports: AVX512PF, AVX512ER, PREFETCHWT1
-- Support has been removed for the AMD "3DNow!" instruction-set.
- Neither modern AMD CPUs, nor any Intel CPUs implement these
- instructions, and they were never widely used.
-
- * The options ``-m3dnow`` and ``-m3dnowa`` are no longer honored, and will emit a warning if used.
- * The macros ``__3dNOW__`` and ``__3dNOW_A__`` are no longer ever set by the compiler.
- * The header ``<mm3dnow.h>`` is deprecated, and emits a warning if included.
- * The 3dNow intrinsic functions have been removed: ``_m_femms``,
- ``_m_pavgusb``, ``_m_pf2id``, ``_m_pfacc``, ``_m_pfadd``,
- ``_m_pfcmpeq``, ``_m_pfcmpge``, ``_m_pfcmpgt``, ``_m_pfmax``,
- ``_m_pfmin``, ``_m_pfmul``, ``_m_pfrcp``, ``_m_pfrcpit1``,
- ``_m_pfrcpit2``, ``_m_pfrsqrt``, ``_m_pfrsqrtit1``, ``_m_pfsub``,
- ``_m_pfsubr``, ``_m_pi2fd``, ``_m_pmulhrw``, ``_m_pf2iw``,
- ``_m_pfnacc``, ``_m_pfpnacc``, ``_m_pi2fw``, ``_m_pswapdsf``,
- ``_m_pswapdsi``.
- * The compiler builtins corresponding to each of the above
- intrinsics have also been removed (``__builtin_ia32_femms``, and so on).
- * "3DNow!" instructions remain supported in assembly code, including
- inside inline-assembly.
-
Arm and AArch64 Support
^^^^^^^^^^^^^^^^^^^^^^^
-- ARMv7+ targets now default to allowing unaligned access, except Armv6-M, and
- Armv8-M without the Main Extension. Baremetal targets should check that the
- new default will work with their system configurations, since it requires
- that SCTLR.A is 0, SCTLR.U is 1, and that the memory in question is
- configured as "normal" memory. This brings Clang in-line with the default
- settings for GCC and Arm Compiler. Aside from making Clang align with other
- compilers, changing the default brings major performance and code size
- improvements for most targets. We have not changed the default behavior for
- ARMv6, but may revisit that decision in the future. Users can restore the old
- behavior with -m[no-]unaligned-access.
-- An alias identifier (rdma) has been added for targeting the AArch64
- Architecture Extension which uses Rounding Doubling Multiply Accumulate
- instructions (rdm). The identifier is available on the command line as
- a feature modifier for -march and -mcpu as well as via target attributes
- like ``target_version`` or ``target_clones``.
-- Support has been added for the following processors (-mcpu identifiers in parenthesis):
- * Arm Cortex-R52+ (cortex-r52plus).
- * Arm Cortex-R82AE (cortex-r82ae).
- * Arm Cortex-A78AE (cortex-a78ae).
- * Arm Cortex-A520AE (cortex-a520ae).
- * Arm Cortex-A720AE (cortex-a720ae).
- * Arm Cortex-A725 (cortex-a725).
- * Arm Cortex-X925 (cortex-x925).
- * Arm Neoverse-N3 (neoverse-n3).
- * Arm Neoverse-V3 (neoverse-v3).
- * Arm Neoverse-V3AE (neoverse-v3ae).
-
Android Support
^^^^^^^^^^^^^^^
Windows Support
^^^^^^^^^^^^^^^
-- The clang-cl ``/Ot`` compiler option ("optimize for speed", also implied by
- ``/O2``) now maps to clang's ``-O3`` optimizataztion level instead of ``-O2``.
- Users who prefer the old behavior can use ``clang-cl /Ot /clang:-O2 ...``.
-
-- Clang-cl now supports function targets with intrinsic headers. This allows
- for runtime feature detection of intrinsics. Previously under clang-cl
- ``immintrin.h`` and similar intrinsic headers would only include the intrinsics
- if building with that feature enabled at compile time, e.g. ``avxintrin.h``
- would only be included if AVX was enabled at compile time. This was done to work
- around include times from MSVC STL including ``intrin.h`` under clang-cl.
- Clang-cl now provides ``intrin0.h`` for MSVC STL and therefore all intrinsic
- features without requiring enablement at compile time. Fixes #GH53520
-
-- Improved compile times with MSVC STL. MSVC provides ``intrin0.h`` which is a
- header that only includes intrinsics that are used by MSVC STL to avoid the
- use of ``intrin.h``. MSVC STL when compiled under clang uses ``intrin.h``
- instead. Clang-cl now provides ``intrin0.h`` for the same compiler throughput
- purposes as MSVC. Clang-cl also provides ``yvals_core.h`` to redefine
- ``_STL_INTRIN_HEADER`` to expand to ``intrin0.h`` instead of ``intrin.h``.
- This also means that if all intrinsic features are enabled at compile time
- including STL headers will no longer slow down compile times since ``intrin.h``
- is not included from MSVC STL.
-
-- When the target triple is `*-windows-msvc` strict aliasing is now disabled by default
- to ensure compatibility with msvc. Previously strict aliasing was only disabled if the
- driver mode was cl.
-
LoongArch Support
^^^^^^^^^^^^^^^^^
-- ``-march=la64v1.0`` and ``-march=la64v1.1`` have been added to select the
- ``la64v1.0`` and ``la64v1.1`` architecture respectively. And ``-march=la664``
- is added to support the ``la664`` micro-architecture.
-- The 128-bits SIMD extension (``LSX``) is enabled by default.
-- ``-msimd=`` has beend added to select the SIMD extension(s) to be enabled.
-- Predefined macros ``__loongarch_simd_width`` and ``__loongarch_frecipe`` are
- added.
-
RISC-V Support
^^^^^^^^^^^^^^
-- ``__attribute__((rvv_vector_bits(N)))`` is now supported for RVV vbool*_t types.
-- Profile names in ``-march`` option are now supported.
-- Passing empty structs/unions as arguments in C++ is now handled correctly. The behavior is similar to GCC's.
-- ``-m[no-]scalar-strict-align`` and ``-m[no-]vector-strict-align`` options have
- been added to give separate control of whether scalar or vector misaligned
- accesses may be created. ``-m[no-]strict-align`` applies to both scalar and
- vector.
-
CUDA/HIP Language Changes
^^^^^^^^^^^^^^^^^^^^^^^^^
-- PTX is no longer included by default when compiling for CUDA. Using
- ``--cuda-include-ptx=all`` will return the old behavior.
-
CUDA Support
^^^^^^^^^^^^
-- Clang now supports CUDA SDK up to 12.5
AIX Support
^^^^^^^^^^^
-- Introduced the ``-maix-small-local-dynamic-tls`` option to produce a faster
- access sequence for local-dynamic TLS variables where the offset from the TLS
- base is encoded as an immediate operand.
- This access sequence is not used for TLS variables larger than 32KB, and is
- currently only supported on 64-bit mode.
-
NetBSD Support
^^^^^^^^^^^^^^
-- Removed support for building NetBSD/i386 6.x or older binaries.
-
WebAssembly Support
^^^^^^^^^^^^^^^^^^^
-The -mcpu=generic configuration now enables multivalue and reference-types.
-These proposals are standardized and available in all major engines. Enabling
-multivalue here only enables the language feature but does not turn on the
-multivalue ABI (this enables non-ABI uses of multivalue, like exnref).
-
AVR Support
^^^^^^^^^^^
@@ -1289,138 +188,44 @@
Floating Point Support in Clang
-------------------------------
-- Add ``__builtin__fmaf16`` builtin for floating point types.
-
Fixed Point Support in Clang
----------------------------
-- Support fixed point precision macros according to ``7.18a.3`` of
- `ISO/IEC TR 18037:2008 <https://standards.iso.org/ittf/PubliclyAvailableStandards/c051126_ISO_IEC_TR_18037_2008.zip>`_.
-
AST Matchers
------------
-- Fixes a long-standing performance issue in parent map generation for
- ancestry-based matchers such as ``hasParent`` and ``hasAncestor``, making
- them significantly faster.
-- ``isInStdNamespace`` now supports Decl declared with ``extern "C++"``.
-- Add ``isExplicitObjectMemberFunction``.
-- Fixed ``forEachArgumentWithParam`` and ``forEachArgumentWithParamType`` to
- not skip the explicit object parameter for operator calls.
-- Fixed captureVars assertion failure if not capturesVariables. (#GH76425)
-- ``forCallable`` now properly preserves binding on successful match. (#GH89657)
-
clang-format
------------
-- ``AlwaysBreakTemplateDeclarations`` is deprecated and renamed to
- ``BreakTemplateDeclarations``.
-- ``AlwaysBreakAfterReturnType`` is deprecated and renamed to
- ``BreakAfterReturnType``.
-- Handles Java switch expressions.
-- Adds ``AllowShortCaseExpressionOnASingleLine`` option.
-- Adds ``AlignCaseArrows`` suboption to ``AlignConsecutiveShortCaseStatements``.
-- Adds ``LeftWithLastLine`` suboption to ``AlignEscapedNewlines``.
-- Adds ``KeepEmptyLines`` option to deprecate ``KeepEmptyLinesAtEOF``
- and ``KeepEmptyLinesAtTheStartOfBlocks``.
-- Add ``ExceptDoubleParentheses`` sub-option for ``SpacesInParensOptions``
- to override addition of spaces between multiple, non-redundant parentheses
- similar to the rules used for ``RemoveParentheses``.
-
libclang
--------
-- ``clang_getSpellingLocation`` now correctly resolves macro expansions; that
- is, it returns the spelling location instead of the expansion location.
-
Static Analyzer
---------------
New features
^^^^^^^^^^^^
-- The attribute ``[[clang::suppress]]`` can now be applied to declarations.
- (#GH80371)
-
-- Support C++23 static operator calls. (#GH84972)
-
Crash and bug fixes
^^^^^^^^^^^^^^^^^^^
-- Fixed crashing on loops if the loop variable was declared in switch blocks
- but not under any case blocks if ``unroll-loops=true`` analyzer config is
- set. (#GH68819)
-
-- Fixed a crash in ``security.cert.env.InvalidPtr`` checker when accidentally
- matched user-defined ``strerror`` and similar library functions. (#GH88181)
-
-- Fixed a crash when storing through an address that refers to the address of
- a label. (#GH89185)
-
-- Z3 crosschecking (aka. Z3 refutation) is now bounded, and can't consume
- more total time than the eymbolic execution itself. (#GH97298)
-
-- ``std::addressof``, ``std::as_const``, ``std::forward``,
- ``std::forward_like``, ``std::move``, ``std::move_if_noexcept``, are now
- modeled just like their builtin counterpart. (#GH94193)
-
Improvements
^^^^^^^^^^^^
Moved checkers
^^^^^^^^^^^^^^
-- Moved ``alpha.cplusplus.ArrayDelete`` out of the ``alpha`` package
- to ``cplusplus.ArrayDelete``. (#GH83985)
- `Documentation <https://clang.llvm.org/docs/analyzer/checkers.html#cplusplus-arraydelete-c>`__.
-
-- Moved ``alpha.unix.Stream`` out of the ``alpha`` package to
- ``unix.Stream``. (#GH89247)
- `Documentation <https://clang.llvm.org/docs/analyzer/checkers.html#unix-stream-c>`__.
-
-- Moved ``alpha.unix.BlockInCriticalSection`` out of the ``alpha`` package to
- ``unix.BlockInCriticalSection``. (#GH93815)
- `Documentation <https://clang.llvm.org/docs/analyzer/checkers.html#unix-blockincriticalsection-c-c>`__.
-
-- Moved ``alpha.security.cert.pos.34c`` out of the ``alpha`` package to
- ``security.PutenvStackArray``. (#GH92424, #GH93815)
- `Documentation <https://clang.llvm.org/docs/analyzer/checkers.html#security-putenvstackarray-c>`__.
-
-- Moved ``alpha.core.SizeofPtr`` into ``clang-tidy``
- ``bugprone-sizeof-expression``. (#GH95118, #GH94356)
- `Documentation <https://clang.llvm.org/extra/clang-tidy/checks/bugprone/sizeof-expression.html>`__.
-
.. _release-notes-sanitizers:
Sanitizers
----------
-- ``-fsanitize=signed-integer-overflow`` now instruments signed arithmetic even
- when ``-fwrapv`` is enabled. Previously, only division checks were enabled.
-
- Users with ``-fwrapv`` as well as a sanitizer group like
- ``-fsanitize=undefined`` or ``-fsanitize=integer`` enabled may want to
- manually disable potentially noisy signed integer overflow checks with
- ``-fno-sanitize=signed-integer-overflow``
-
-- ``-fsanitize=cfi -fsanitize-cfi-cross-dso`` (cross-DSO CFI instrumentation)
- now generates the ``__cfi_check`` function with proper target-specific
- attributes, for example allowing unwind table generation.
-
Python Binding Changes
----------------------
-- Exposed `CXRewriter` API as `class Rewriter`.
-- Add some missing kinds from Index.h (CursorKind: 149-156, 272-320, 420-437.
- TemplateArgumentKind: 5-9. TypeKind: 161-175 and 178).
-- Add support for retrieving binary operator information through
- Cursor.binary_operator().
-
OpenMP Support
--------------
-- Added support for the `[[omp::assume]]` attribute.
-
Additional Information
======================
diff --git a/libcxx/docs/ReleaseNotes.rst b/libcxx/docs/ReleaseNotes.rst
index 5d98ade..0454cfa 100644
--- a/libcxx/docs/ReleaseNotes.rst
+++ b/libcxx/docs/ReleaseNotes.rst
@@ -1,4 +1,4 @@
-.. include:: ReleaseNotes/19.rst
+.. include:: ReleaseNotes/20.rst
.. Make sure to reference the non-live release notes in a toctree to avoid Sphinx errors.
.. toctree::
diff --git a/lld/docs/ReleaseNotes.rst b/lld/docs/ReleaseNotes.rst
index 09081e4..6f60efd 100644
--- a/lld/docs/ReleaseNotes.rst
+++ b/lld/docs/ReleaseNotes.rst
@@ -26,70 +26,6 @@
ELF Improvements
----------------
-* ``EI_OSABI`` in the output is now inferred from input object files.
- (`#97144 <https://github.com/llvm/llvm-project/pull/97144>`_)
-* ``--compress-sections <section-glib>={none,zlib,zstd}[:level]`` is added to compress
- matched output sections without the ``SHF_ALLOC`` flag.
- (`#84855 <https://github.com/llvm/llvm-project/pull/84855>`_)
- (`#90567 <https://github.com/llvm/llvm-project/pull/90567>`_)
-* The default compression level for zlib is now independent of linker
- optimization level (``Z_BEST_SPEED``).
-* zstd compression parallelism no longer requires ``ZSTD_MULITHREAD`` build.
-* ``GNU_PROPERTY_AARCH64_FEATURE_PAUTH`` notes, ``R_AARCH64_AUTH_ABS64`` and
- ``R_AARCH64_AUTH_RELATIVE`` relocations are now supported.
- (`#72714 <https://github.com/llvm/llvm-project/pull/72714>`_)
-* ``--no-allow-shlib-undefined`` now rejects non-exported definitions in the
- ``def-hidden.so ref.so`` case.
- (`#86777 <https://github.com/llvm/llvm-project/issues/86777>`_)
-* ``--debug-names`` is added to create a merged ``.debug_names`` index
- from input ``.debug_names`` sections. Type units are not handled yet.
- (`#86508 <https://github.com/llvm/llvm-project/pull/86508>`_)
-* ``--enable-non-contiguous-regions`` option allows automatically packing input
- sections into memory regions by automatically spilling to later matches if a
- region would overflow. This reduces the toil of manually packing regions
- (typical for embedded). It also makes full LTO feasible in such cases, since
- IR merging currently prevents the linker script from referring to input
- files. (`#90007 <https://github.com/llvm/llvm-project/pull/90007>`_)
-* ``--default-script`/``-dT`` is implemented to specify a default script that is processed
- if ``--script``/``-T`` is not specified.
- (`#89327 <https://github.com/llvm/llvm-project/pull/89327>`_)
-* ``--force-group-allocation`` is implemented to discard ``SHT_GROUP`` sections
- and combine relocation sections if their relocated section group members are
- placed to the same output section.
- (`#94704 <https://github.com/llvm/llvm-project/pull/94704>`_)
-* ``--build-id`` now defaults to generating a 20-byte digest ("sha1") instead
- of 8-byte ("fast"). This improves compatibility with RPM packaging tools.
- (`#93943 <https://github.com/llvm/llvm-project/pull/93943>`_)
-* ``-z lrodata-after-bss`` is implemented to place ``.lrodata`` after ``.bss``.
- (`#81224 <https://github.com/llvm/llvm-project/pull/81224>`_)
-* ``--export-dynamic`` no longer creates dynamic sections for ``-no-pie`` static linking.
-* ``--lto-emit-asm`` is now added as the canonical spelling of ``--plugin-opt=emit-llvm``.
-* ``--lto-emit-llvm`` now uses the pre-codegen module.
- (`#97480 <https://github.com/llvm/llvm-project/pull/97480>`_)
-* When AArch64 PAuth is enabled, ``-z pack-relative-relocs`` now encodes ``R_AARCH64_AUTH_RELATIVE`` relocations in ``.rela.auth.dyn``.
- (`#96496 <https://github.com/llvm/llvm-project/pull/96496>`_)
-* ``-z gcs`` and ``-z gcs-report`` are now supported for AArch64 Guarded Control Stack extension.
-* ``-r`` now forces ``-Bstatic``.
-* Thumb2 PLT is now supported for Cortex-M processors.
- (`#93644 <https://github.com/llvm/llvm-project/pull/93644>`_)
-* ``DW_EH_sdata4`` of addresses larger than 0x80000000 is now supported for MIPS32.
- (`#92438 <https://github.com/llvm/llvm-project/pull/92438>`_)
-* Certain unknown section types are rejected.
- (`#85173 <https://github.com/llvm/llvm-project/pull/85173>`_)
-* ``PROVIDE(lhs = rhs) PROVIDE(rhs = ...)``, ``lhs`` is now defined only if ``rhs`` is needed.
- (`#74771 <https://github.com/llvm/llvm-project/issues/74771>`_)
- (`#87530 <https://github.com/llvm/llvm-project/pull/87530>`_)
-* ``OUTPUT_FORMAT(binary)`` is now supported.
- (`#98837 <https://github.com/llvm/llvm-project/pull/98837>`_)
-* ``NOCROSSREFS`` and ``NOCRFOSSREFS_TO`` commands now supported to prohibit
- cross references between certain output sections.
- (`#98773 <https://github.com/llvm/llvm-project/pull/98773>`_)
-* Orphan placement is refined to prefer the last similar section when its rank <= orphan's rank.
- (`#94099 <https://github.com/llvm/llvm-project/pull/94099>`_)
- Non-alloc orphan sections are now placed at the end.
- (`#94519 <https://github.com/llvm/llvm-project/pull/94519>`_)
-* R_X86_64_REX_GOTPCRELX of the addq form is no longer incorrectly optimized when the address is larger than 0x80000000.
-
Breaking changes
----------------
@@ -102,11 +38,6 @@
MachO Improvements
------------------
-* Chained fixups are now enabled by default when targeting macOS 13.0,
- iOS 13.4, tvOS 14.0, watchOS 7.0, and visionOS 1.0 or later.
- They can be disabled with the `-no_fixup_chains` flag.
- (`#99255 <https://github.com/llvm/llvm-project/pull/99255>`_)
-
WebAssembly Improvements
------------------------
diff --git a/llvm/docs/ReleaseNotes.rst b/llvm/docs/ReleaseNotes.rst
index a81caa1..46fa2a7 100644
--- a/llvm/docs/ReleaseNotes.rst
+++ b/llvm/docs/ReleaseNotes.rst
@@ -47,110 +47,30 @@
Update on required toolchains to build LLVM
-------------------------------------------
-* The minimum Python version has been raised from 3.6 to 3.8 across all of LLVM.
- This enables the use of many new Python features, aligning more closely with
- modern Python best practices, and improves CI maintainability
- See `#78828 <https://github.com/llvm/llvm-project/pull/78828>`_ for more info.
-
Changes to the LLVM IR
----------------------
-* Added Memory Model Relaxation Annotations (MMRAs).
-* Added ``nusw`` and ``nuw`` flags to ``getelementptr`` instruction.
-* Renamed ``llvm.experimental.vector.reverse`` intrinsic to ``llvm.vector.reverse``.
-* Renamed ``llvm.experimental.vector.splice`` intrinsic to ``llvm.vector.splice``.
-* Renamed ``llvm.experimental.vector.interleave2`` intrinsic to ``llvm.vector.interleave2``.
-* Renamed ``llvm.experimental.vector.deinterleave2`` intrinsic to ``llvm.vector.deinterleave2``.
-* The constant expression variants of the following instructions have been
- removed:
-
- * ``icmp``
- * ``fcmp``
- * ``shl``
-* LLVM has switched from using debug intrinsics in textual IR to using debug
- records by default. Details of the change and instructions on how to update
- any downstream tools and tests can be found in the `migration docs
- <https://llvm.org/docs/RemoveDIsDebugInfo.html>`_.
-* Semantics of MC/DC intrinsics have been changed.
-
- * ``llvm.instprof.mcdc.parameters``: 3rd argument has been changed
- from bytes to bits.
- * ``llvm.instprof.mcdc.condbitmap.update``: Removed.
- * ``llvm.instprof.mcdc.tvbitmap.update``: 3rd argument has been
- removed. The next argument has been changed from byte index to bit
- index.
-* Added ``llvm.experimental.vector.compress`` intrinsic.
-
Changes to LLVM infrastructure
------------------------------
Changes to building LLVM
------------------------
-* LLVM now has rpmalloc version 1.4.5 in-tree, as a replacement C allocator for
- hosted toolchains. This supports several host platforms such as Mac or Unix,
- however currently only the Windows 64-bit LLVM release uses it.
- This has a great benefit in terms of build times on Windows when using ThinLTO
- linking, especially on machines with lots of cores, to an order of magnitude
- or more. Clang compilation is also improved. Please see some build timings in
- (`#91862 <https://github.com/llvm/llvm-project/pull/91862#issue-2291033962>`_)
- For more information, refer to the **LLVM_ENABLE_RPMALLOC** option in `CMake variables <https://llvm.org/docs/CMake.html#llvm-related-variables>`_.
-
-* The ``LLVM_ENABLE_TERMINFO`` flag has been removed. LLVM no longer depends on
- terminfo and now always uses the ``TERM`` environment variable for color
- support autodetection.
-
Changes to TableGen
-------------------
-- We can define type aliases via new keyword ``deftype``.
-
Changes to Interprocedural Optimizations
----------------------------------------
Changes to the AArch64 Backend
------------------------------
-* Added support for Cortex-R82AE, Cortex-A78AE, Cortex-A520AE, Cortex-A720AE,
- Cortex-A725, Cortex-X925, Neoverse-N3, Neoverse-V3 and Neoverse-V3AE CPUs.
-
-* ``-mbranch-protection=standard`` now enables FEAT_PAuth_LR by
- default when the feature is enabled. The new behaviour results
- in ``standard`` being equal to ``bti+pac-ret+pc`` when ``+pauth-lr``
- is passed as part of ``-mcpu=`` options.
-
-* SVE and SVE2 have been moved to the default extensions list for ARMv9.0,
- making them optional per the Arm ARM. Existing v9.0+ CPUs in the backend that
- support these extensions continue to have these features enabled by default
- when specified via ``-march=`` or an ``-mcpu=`` that supports them. The
- attribute ``"target-features"="+v9a"`` no longer implies ``"+sve"`` and
- ``"+sve2"`` respectively.
-
Changes to the AMDGPU Backend
-----------------------------
-* Implemented the ``llvm.get.fpenv`` and ``llvm.set.fpenv`` intrinsics.
-* Added ``!amdgpu.no.fine.grained.memory`` and
- ``!amdgpu.no.remote.memory`` metadata to control atomic behavior.
-
-* Implemented :ref:`llvm.get.rounding <int_get_rounding>` and :ref:`llvm.set.rounding <int_set_rounding>`
-
-* Removed ``llvm.amdgcn.ds.fadd``, ``llvm.amdgcn.ds.fmin`` and
- ``llvm.amdgcn.ds.fmax`` intrinsics. Users should use the
- :ref:`atomicrmw <i_atomicrmw>` instruction with `fadd`, `fmin` and
- `fmax` with addrspace(3) instead.
-
-* AMDGPUAttributor is no longer run as part of the codegen pass
- pipeline. It is expected to run as part of the middle end
- optimizations.
-
Changes to the ARM Backend
--------------------------
-* Added support for Cortex-R52+ CPU.
-* FEAT_F32MM is no longer activated by default when using `+sve` on v8.6-A or greater. The feature is still available and can be used by adding `+f32mm` to the command line options.
-* armv8-r now implies only fp-armv8d16sp, rather than neon and full fp-armv8. These features are still included by default for cortex-r52. The default cpu for armv8-r is now "generic", for compatibility with variants that do not include neon, fp64, and d32.
-
Changes to the AVR Backend
--------------------------
@@ -163,17 +83,6 @@
Changes to the LoongArch Backend
--------------------------------
-* i32 is now a native type in the datalayout string. This enables
- LoopStrengthReduce for loops with i32 induction variables, among other
- optimizations.
-* Codegen support is added for TLS Desciptor.
-* Interleaved vectorization and vector shuffle are supported on LoongArch and
- the experimental feature ``auto-vec`` is removed.
-* Allow ``f16`` codegen with expansion to libcalls.
-* Clarify that emulated TLS is not supported.
-* A codegen issue for ``bstrins.w`` is fixed on loongarch32.
-* Assorted codegen improvements.
-
Changes to the MIPS Backend
---------------------------
@@ -183,36 +92,6 @@
Changes to the RISC-V Backend
-----------------------------
-* Added full support for the experimental Zabha (Byte and
- Halfword Atomic Memory Operations) extension.
-* Added assembler/disassembler support for the experimenatl Zalasr
- (Load-Acquire and Store-Release) extension.
-* The names of the majority of the S-prefixed (supervisor-level) extension
- names in the RISC-V profiles specification are now recognised.
-* Codegen support was added for the Zimop (May-Be-Operations) extension.
-* The experimental Ssnpm, Smnpm, Smmpm, Sspm, and Supm 1.0.0 Pointer Masking extensions are supported.
-* The experimental Ssqosid extension is supported.
-* Added the CSR names from the Resumable Non-Maskable Interrupts (Smrnmi) extension.
-* llvm-objdump now prints disassembled opcode bytes in groups of 2 or 4 bytes to
- match GNU objdump. The bytes within the groups are in big endian order.
-* Added smstateen extension to -march. CSR names for smstateen were already supported.
-* Zaamo and Zalrsc are no longer experimental.
-* Processors that enable post reg-alloc scheduling (PostMachineScheduler) by default should use the `UsePostRAScheduler` subtarget feature. Setting `PostRAScheduler = 1` in the scheduler model will have no effect on the enabling of the PostMachineScheduler.
-* Zabha is no longer experimental.
-* B (the collection of the Zba, Zbb, Zbs extensions) is supported.
-* Added smcdeleg, ssccfg, smcsrind, and sscsrind extensions to -march.
-* ``-mcpu=syntacore-scr3-rv32`` and ``-mcpu=syntacore-scr3-rv64`` were added.
-* The default atomics mapping was changed to emit an additional trailing fence
- for sequentially consistent stores, offering compatibility with a future
- mapping using load-acquire and store-release instructions while remaining
- fully compatible with objects produced prior to this change. The mapping
- (ABI) used is recorded as an ELF attribute.
-* Ztso is no longer experimental.
-* The WCH / Nanjing Qinheng Microelectronics QingKe "XW" compressed opcodes are
- supported under the name "Xwchc".
-* ``-mcpu=native`` now detects available features with hwprobe (RISC-V Hardware Probing Interface) on Linux 6.4 or later.
-* The version of Zicfilp/Zicfiss is updated to 1.0.
-
Changes to the WebAssembly Backend
----------------------------------
@@ -222,12 +101,6 @@
Changes to the X86 Backend
--------------------------
-- Removed knl/knm specific ISA intrinsics: AVX512PF, AVX512ER, PREFETCHWT1,
- while assembly encoding/decoding supports are kept.
-
-- Removed ``3DNow!``-specific ISA intrinsics and codegen support. The ``3dnow`` and ``3dnowa`` target features are no longer supported. The intrinsics ``llvm.x86.3dnow.*``, ``llvm.x86.3dnowa.*``, and ``llvm.x86.mmx.femms`` have been removed. Assembly encoding/decoding for the corresponding instructions remains supported.
-
-
Changes to the OCaml bindings
-----------------------------
@@ -237,104 +110,6 @@
Changes to the C API
--------------------
-* Added ``LLVMGetBlockAddressFunction`` and ``LLVMGetBlockAddressBasicBlock``
- functions for accessing the values in a blockaddress constant.
-
-* Added ``LLVMConstStringInContext2`` function, which better matches the C++
- API by using ``size_t`` for string length. Deprecated ``LLVMConstStringInContext``.
-
-* Added the following functions for accessing a function's prefix data:
-
- * ``LLVMHasPrefixData``
- * ``LLVMGetPrefixData``
- * ``LLVMSetPrefixData``
-
-* Added the following functions for accessing a function's prologue data:
-
- * ``LLVMHasPrologueData``
- * ``LLVMGetPrologueData``
- * ``LLVMSetPrologueData``
-
-* Deprecated ``LLVMConstNUWNeg`` and ``LLVMBuildNUWNeg``.
-
-* Added ``LLVMAtomicRMWBinOpUIncWrap`` and ``LLVMAtomicRMWBinOpUDecWrap`` to
- ``LLVMAtomicRMWBinOp`` enum for AtomicRMW instructions.
-
-* Added ``LLVMCreateConstantRangeAttribute`` function for creating ConstantRange Attributes.
-
-* Added the following functions for creating and accessing data for CallBr instructions:
-
- * ``LLVMBuildCallBr``
- * ``LLVMGetCallBrDefaultDest``
- * ``LLVMGetCallBrNumIndirectDests``
- * ``LLVMGetCallBrIndirectDest``
-
-* 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:
-
- * ``LLVMConstICmp``
- * ``LLVMConstFCmp``
- * ``LLVMConstShl``
-
-**Note:** The following changes are due to the removal of the debug info
-intrinsics from LLVM and to the introduction of debug records into LLVM.
-They are described in detail in the `debug info migration guide <https://llvm.org/docs/RemoveDIsDebugInfo.html>`_.
-
-* Added the following functions to insert before the indicated instruction but
- after any attached debug records.
-
- * ``LLVMPositionBuilderBeforeDbgRecords``
- * ``LLVMPositionBuilderBeforeInstrAndDbgRecords``
-
- Same as ``LLVMPositionBuilder`` and ``LLVMPositionBuilderBefore`` except the
- insertion position is set to before the debug records that precede the target
- instruction. ``LLVMPositionBuilder`` and ``LLVMPositionBuilderBefore`` are
- unchanged.
-
-* Added the following functions to get/set the new non-instruction debug info format.
- They will be deprecated in the future and they are just a transition aid.
-
- * ``LLVMIsNewDbgInfoFormat``
- * ``LLVMSetIsNewDbgInfoFormat``
-
-* Added the following functions to insert a debug record (new debug info format).
-
- * ``LLVMDIBuilderInsertDeclareRecordBefore``
- * ``LLVMDIBuilderInsertDeclareRecordAtEnd``
- * ``LLVMDIBuilderInsertDbgValueRecordBefore``
- * ``LLVMDIBuilderInsertDbgValueRecordAtEnd``
-
-* Deleted the following functions that inserted a debug intrinsic (old debug info format).
-
- * ``LLVMDIBuilderInsertDeclareBefore``
- * ``LLVMDIBuilderInsertDeclareAtEnd``
- * ``LLVMDIBuilderInsertDbgValueBefore``
- * ``LLVMDIBuilderInsertDbgValueAtEnd``
-
-* Added the following functions for accessing a Target Extension Type's data:
-
- * ``LLVMGetTargetExtTypeName``
- * ``LLVMGetTargetExtTypeNumTypeParams``/``LLVMGetTargetExtTypeTypeParam``
- * ``LLVMGetTargetExtTypeNumIntParams``/``LLVMGetTargetExtTypeIntParam``
-
-* Added the following functions for accessing/setting the no-wrap flags for a
- GetElementPtr instruction:
-
- * ``LLVMBuildGEPWithNoWrapFlags``
- * ``LLVMConstGEPWithNoWrapFlags``
- * ``LLVMGEPGetNoWrapFlags``
- * ``LLVMGEPSetNoWrapFlags``
-
-* Added the following functions for creating and accessing data for ConstantPtrAuth constants:
-
- * ``LLVMConstantPtrAuth``
- * ``LLVMGetConstantPtrAuthPointer``
- * ``LLVMGetConstantPtrAuthKey``
- * ``LLVMGetConstantPtrAuthDiscriminator``
- * ``LLVMGetConstantPtrAuthAddrDiscriminator``
-
Changes to the CodeGen infrastructure
-------------------------------------
@@ -344,106 +119,14 @@
Changes to the Debug Info
---------------------------------
-* LLVM has switched from using debug intrinsics internally to using debug
- records by default. This should happen transparently when using the DIBuilder
- to construct debug variable information, but will require changes for any code
- that interacts with debug intrinsics directly. Debug intrinsics will only be
- supported on a best-effort basis from here onwards; for more information, see
- the `migration docs <https://llvm.org/docs/RemoveDIsDebugInfo.html>`_.
-
-* When emitting DWARF v2 and not in strict DWARF mode, LLVM will now add
- a ``DW_AT_type`` to instances of ``DW_TAG_enumeration_type``. This is actually
- a DWARF v3 feature which tells tools what the enum's underlying type is.
- Emitting this for v2 as well will help users who have to build binaries with
- DWARF v2 but are using tools that understand newer DWARF standards. Older
- tools will ignore it. (`#98335 <https://github.com/llvm/llvm-project/pull/98335>`_)
-
Changes to the LLVM tools
---------------------------------
-* llvm-nm and llvm-objdump can now print symbol information from linked
- WebAssembly binaries, using information from exports or the "name"
- section for functions, globals and data segments. Symbol addresses and sizes
- are printed as offsets in the file, allowing for binary size analysis. Wasm
- files using reference types and GC are also supported (but also only for
- functions, globals, and data, and only for listing symbols and names).
-
-* llvm-ar now utilizes LLVM_DEFAULT_TARGET_TRIPLE to determine the archive format
- if it's not specified with the ``--format`` argument and cannot be inferred from
- input files.
-
-* llvm-ar now allows specifying COFF archive format with ``--format`` argument
- and uses it by default for COFF targets.
-
-* llvm-ranlib now supports ``-V`` as an alias for ``--version``.
- ``-v`` (``--verbose`` in llvm-ar) has been removed.
- (`#87661 <https://github.com/llvm/llvm-project/pull/87661>`_)
-
-* llvm-objcopy now supports ``--set-symbol-visibility`` and
- ``--set-symbols-visibility`` options for ELF input to change the
- visibility of symbols.
-
-* llvm-objcopy now supports ``--skip-symbol`` and ``--skip-symbols`` options
- for ELF input to skip the specified symbols when executing other options
- that can change a symbol's name, binding or visibility.
-
-* llvm-objcopy now supports ``--compress-sections`` to compress or decompress
- arbitrary sections not within a segment.
- (`#85036 <https://github.com/llvm/llvm-project/pull/85036>`_.)
-
-* llvm-profgen now supports COFF+DWARF binaries. This enables Sample-based PGO
- on Windows using Intel VTune's SEP. For details on usage, see the `end-user
- documentation for SPGO
- <https://clang.llvm.org/docs/UsersManual.html#using-sampling-profilers>`_.
-
-* llvm-readelf's ``-r`` output for RELR has been improved.
- (`#89162 <https://github.com/llvm/llvm-project/pull/89162>`_)
- ``--raw-relr`` has been removed.
-
-* llvm-mca now aborts by default if it is given bad input where previously it
- would continue. Additionally, it can now continue when it encounters
- instructions which lack scheduling information. The behaviour can be
- controlled by the newly introduced
- ``--skip-unsupported-instructions=<none|lack-sched|parse-failure|any>``, as
- documented in ``--help`` output and the command guide. (`#90474
- <https://github.com/llvm/llvm-project/pull/90474>`_)
-
-* llvm-readobj's LLVM output format for ELF core files has been changed.
- Similarly, the JSON format has been fixed for this case. The NT_FILE note
- now has a map for the mapped files. (`#92835
- <https://github.com/llvm/llvm-project/pull/92835>`_).
-
-* llvm-cov now generates HTML report with JavaScript code to allow simple
- jumping between uncovered parts (lines/regions/branches) of code
- using buttons on top-right corner of the page or using keys (L/R/B or
- jumping in reverse direction with shift+L/R/B). (`#95662
- <https://github.com/llvm/llvm-project/pull/95662>`_).
-
-* llvm-objcopy now verifies format of ``.note`` sections for ELF input. This can
- be disabled by ``--no-verify-note-sections``. (`#90458
- <https://github.com/llvm/llvm-project/pull/90458>`).
Changes to LLDB
---------------------------------
-* Register field information is now provided on AArch64 FreeBSD for live
- processes and core files (previously only provided on AArch64 Linux).
-
-* Register field information can now include enums to represent field
- values. Enums have been added for ``fpcr.RMode`` and ``mte_ctrl.TCF``
- for AArch64 targets::
-
- (lldb) register read fpcr
- fpcr = 0x00000000
- = (AHP = 0, DN = 0, FZ = 0, RMode = RN, <...>)
-
- If you need to know the values of the enum, these can be found in
- the output of ``register info`` for the same register.
-
Changes to BOLT
---------------------------------
-* Now supports ``--match-profile-with-function-hash`` to match profiled and
- binary functions with exact hash, allowing for the matching of renamed but
- identical functions.
Changes to Sanitizers
---------------------
diff --git a/openmp/docs/ReleaseNotes.rst b/openmp/docs/ReleaseNotes.rst
index df944c3..d4a4b1a 100644
--- a/openmp/docs/ReleaseNotes.rst
+++ b/openmp/docs/ReleaseNotes.rst
@@ -1,5 +1,5 @@
===========================
-OpenMP 19.0.0 Release Notes
+OpenMP 20.0.0 Release Notes
===========================
diff --git a/pstl/docs/ReleaseNotes.rst b/pstl/docs/ReleaseNotes.rst
index 342b2ea..941b029 100644
--- a/pstl/docs/ReleaseNotes.rst
+++ b/pstl/docs/ReleaseNotes.rst
@@ -1,5 +1,5 @@
=======================================
-PSTL 19.0.0 (In-Progress) Release Notes
+PSTL 20.0.0 (In-Progress) Release Notes
=======================================
.. contents::