From 4706251a3186c34da0ee8fd894f7e6b095da8fdc Mon Sep 17 00:00:00 2001 From: Tobias Hieta Date: Tue, 25 Jul 2023 13:57:22 +0200 Subject: Clear release notes for 18.x --- clang-tools-extra/docs/ReleaseNotes.rst | 436 --------------- clang/docs/ReleaseNotes.rst | 927 -------------------------------- flang/docs/ReleaseNotes.md | 22 +- lld/docs/ReleaseNotes.rst | 76 --- llvm/docs/ReleaseNotes.rst | 288 ---------- openmp/docs/ReleaseNotes.rst | 10 - polly/docs/ReleaseNotes.rst | 12 - pstl/docs/ReleaseNotes.rst | 4 +- 8 files changed, 3 insertions(+), 1772 deletions(-) diff --git a/clang-tools-extra/docs/ReleaseNotes.rst b/clang-tools-extra/docs/ReleaseNotes.rst index 236226e..e602fce 100644 --- a/clang-tools-extra/docs/ReleaseNotes.rst +++ b/clang-tools-extra/docs/ReleaseNotes.rst @@ -94,451 +94,15 @@ The improvements are... Improvements to clang-tidy -------------------------- -- New global configuration file options `HeaderFileExtensions` and - `ImplementationFileExtensions`, replacing the check-local options of the - same name. - -- Support specifying `Checks` as a YAML list in the `.clang-tidy` configuration - file. - -- Fix a potential crash when using the `--dump-config` option. - -- Support specifying `SystemHeaders` in the `.clang-tidy` configuration file, - with the same functionality as the command-line option `--system-headers`. - -- `WarningsAsErrors` (`--warnings-as-errors=`) no longer promotes unlisted - warnings to errors. Only the warnings listed in `Checks` (`--checks=`) will - be promoted to errors. For custom error promotion, use `-Werror=` - on the compiler command-line, irrespective of `Checks` (`--checks=`) settings. - -- Fixed an issue where compiler warnings couldn't be suppressed using - `-Wno-` under C++20 and above. - New checks ^^^^^^^^^^ -- New :doc:`bugprone-empty-catch - ` check. - - Detects and suggests addressing issues with empty catch statements. - -- New :doc:`bugprone-multiple-new-in-one-expression - ` check. - - Finds multiple ``new`` operator calls in a single expression, where the allocated - memory by the first ``new`` may leak if the second allocation fails and throws exception. - -- New :doc:`bugprone-non-zero-enum-to-bool-conversion - ` check. - - Detect implicit and explicit casts of ``enum`` type into ``bool`` where ``enum`` type - doesn't have a zero-value enumerator. - -- New :doc:`bugprone-switch-missing-default-case - ` check. - - Ensures that switch statements without default cases are flagged, focuses only - on covering cases with non-enums where the compiler may not issue warnings. - -- New :doc:`bugprone-unique-ptr-array-mismatch - ` check. - - Finds initializations of C++ unique pointers to non-array type that are - initialized with an array. - -- New :doc:`bugprone-unsafe-functions - ` check. - - Checks for functions that have safer, more secure replacements available, or - are considered deprecated due to design flaws. - This check relies heavily on, but is not exclusive to, the functions from - the *Annex K. "Bounds-checking interfaces"* of C11. - -- New :doc:`cppcoreguidelines-avoid-capturing-lambda-coroutines - ` check. - - Flags C++20 coroutine lambdas with non-empty capture lists that may cause - use-after-free errors and suggests avoiding captures or ensuring the lambda - closure object has a guaranteed lifetime. - -- New :doc:`cppcoreguidelines-misleading-capture-default-by-value - ` check. - - Warns when lambda specify a by-value capture default and capture ``this``. - -- New :doc:`cppcoreguidelines-missing-std-forward - ` check. - - Warns when a forwarding reference parameter is not forwarded within the - function body. - -- New :doc:`cppcoreguidelines-rvalue-reference-param-not-moved - ` check. - - Warns when an rvalue reference function parameter is never moved within - the function body. - -- New :doc:`llvmlibc-inline-function-decl - ` check. - - Checks that all implicit and explicit inline functions in header files are - tagged with the ``LIBC_INLINE`` macro. - -- New :doc:`misc-header-include-cycle - ` check. - - Check detects cyclic ``#include`` dependencies between user-defined headers. - -- New :doc:`misc-include-cleaner - ` check. - - Checks for unused and missing includes. - -- New :doc:`modernize-type-traits - ` check. - - Converts standard library type traits of the form ``traits<...>::type`` and - ``traits<...>::value`` into ``traits_t<...>`` and ``traits_v<...>`` respectively. - -- New :doc:`modernize-use-std-print - ` check. - - Converts calls to ``printf``, ``fprintf``, ``absl::PrintF``, - ``absl::FPrintf`` or other functions via configuration options, to - equivalent calls to C++23's ``std::print`` and ``std::println``, or other - functions 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:`performance-avoid-endl - ` check. - - Finds uses of ``std::endl`` on streams and replaces them with ``'\n'``. - -- New :doc:`performance-noexcept-destructor - ` check. - - Finds user declared destructors which are not ``noexcept``. - -- New :doc:`performance-noexcept-swap - ` check. - - Finds user declared swap functions which are not ``noexcept``. - -- New :doc:`readability-avoid-unconditional-preprocessor-if - ` check. - - Finds code blocks that are constantly enabled or disabled in preprocessor - directives by analyzing ``#if`` conditions, such as ``#if 0`` and - ``#if 1``, etc. - -- New :doc:`readability-operators-representation - ` check. - - Enforces consistent token representation for invoked binary, unary and - overloaded operators in C++ code. - New check aliases ^^^^^^^^^^^^^^^^^ -- New alias :doc:`cert-msc24-c - ` to :doc:`bugprone-unsafe-functions - ` was added. - -- New alias :doc:`cert-msc33-c - ` to :doc:`bugprone-unsafe-functions - ` was added. - -- New alias :doc:`cppcoreguidelines-noexcept-destructor - ` to - :doc:`performance-noexcept-destructor - ` was added. - -- New alias :doc:`cppcoreguidelines-noexcept-move-operations - ` to - :doc:`performance-noexcept-move-constructor - ` was added. - -- New alias :doc:`cppcoreguidelines-noexcept-swap - ` to - :doc:`performance-noexcept-swap - ` was added. - -- New alias :doc:`cppcoreguidelines-use-default-member-init - ` to - :doc:`modernize-use-default-member-init - ` was added. - Changes in existing checks ^^^^^^^^^^^^^^^^^^^^^^^^^^ -- Fixed false-positives in :doc:`bugprone-branch-clone - ` check by ignoring auto-generated - code, template instances, implicit code patterns and duplicated switch cases - marked with the ``[[fallthrough]]`` attribute. - -- Improved :doc:`bugprone-dangling-handle - ` check enhancing detection of - handles behind type aliases. - -- Deprecated check-local options `HeaderFileExtensions` - in :doc:`bugprone-dynamic-static-initializers - ` check. - Global options of the same name should be used instead. - -- Improved :doc:`bugprone-exception-escape - ` check to not emit warnings for - forward declarations of functions, explicitly declared throwing functions, - coroutines throwing exceptions in their bodies and skip ``noexcept`` - functions during call stack analysis. - -- Improved :doc:`bugprone-fold-init-type - ` to handle iterators that do not - define `value_type` type aliases. - -- Improved :doc:`bugprone-forwarding-reference-overload - ` check to ignore - constructors with associated constraints (C++ concepts). - -- Improved :doc:`bugprone-incorrect-roundings - ` check by adding support for - other floating point representations in float constant like ``0.5L``. - -- Improved the performance of the :doc:`bugprone-reserved-identifier - ` check through optimizations. - -- Improved the :doc:`bugprone-reserved-identifier - ` check by enhancing the - `AllowedIdentifiers` option to support regular expressions. - -- Deprecated check-local options `HeaderFileExtensions` and `ImplementationFileExtensions` - in :doc:`bugprone-suspicious-include - ` check. - Global options of the same name should be used instead. - -- Improved :doc:`bugprone-too-small-loop-variable - ` check. Basic support - for bit-field and integer members as a loop variable or upper limit were added. - -- Improved :doc:`bugprone-unchecked-optional-access - ` check to properly handle calls - to ``std::forward`` and support for ``folly::Optional`` were added. - -- Extend :doc:`bugprone-unused-return-value - ` check to check for all functions - with specified return types using the ``CheckedReturnTypes`` option. - -- Improved :doc:`bugprone-use-after-move - ` check. Detect uses and moves in - constructor initializers. Correctly handle constructor arguments as being - sequenced when constructor call is written as list-initialization. Understand - that there is a sequence point between designated initializers. - -- Improved :doc:`bugprone-swapped-arguments - ` by enhancing handling of - implicit conversions, resulting in better detection of argument swaps - involving integral and floating-point types. - -- Deprecated :doc:`cert-dcl21-cpp - ` check. - -- Fixed :doc:`cppcoreguidelines-avoid-const-or-ref-data-members - ` check - to emit warnings only on classes that are copyable/movable, as required by the - corresponding rule. - -- Improved :doc:`cppcoreguidelines-owning-memory - ` check now finds more - issues, especially those related to implicit casts. - -- Deprecated C.48 enforcement from :doc:`cppcoreguidelines-prefer-member-initializer - `. Please use - :doc:`cppcoreguidelines-use-default-member-init - ` instead. - -- Improved :doc:`cppcoreguidelines-pro-bounds-constant-array-index - ` check - to cover type aliases of ``std::array``. - -- Fixed a false positive in :doc:`cppcoreguidelines-slicing - ` check when warning would be - emitted in constructor for virtual base class initialization. - -- Deprecated check-local options `HeaderFileExtensions` - in :doc:`google-build-namespaces - ` check. - Global options of the same name should be used instead. - -- Deprecated check-local options `HeaderFileExtensions` - in :doc:`google-global-names-in-headers - ` check. - Global options of the same name should be used instead. - -- Fixed an issue in :doc:`google-readability-avoid-underscore-in-googletest-name - ` when using - ``DISABLED_`` in the test suite name. - -- Deprecated check-local options `HeaderFileExtensions` - in :doc:`llvm-header-guard - ` check. - Global options of the same name should be used instead. - -- Fix false positive in :doc:`llvmlibc-inline-function-decl - ` when using templated - function with separate declarations and definitions. - -- Improved the performance of the :doc:`misc-confusable-identifiers - ` check through optimizations. - -- Deprecated check-local options `HeaderFileExtensions` - in :doc:`misc-definitions-in-headers - ` check. - Global options of the same name should be used instead. - -- Fixed false positive in :doc:`misc-definitions-in-headers - ` to avoid warning on - declarations inside anonymous namespaces. - -- Fixed false-positive in :doc:`misc-redundant-expression - ` check where expressions like - ``alignof`` or ``sizeof`` were incorrectly flagged as identical. - -- Improved :doc:`misc-unused-parameters - ` check with new `IgnoreVirtual` - option to optionally ignore virtual methods. - -- Deprecated check-local options `HeaderFileExtensions` - in :doc:`misc-unused-using-decls - ` check. - Global options of the same name should be used instead. - -- Improved :doc:`modernize-concat-nested-namespaces - ` to fix incorrect fixes when - using macro between namespace declarations, to fix false positive when using namespace - with attributes and to support nested inline namespace introduced in c++20. - -- Fixed an issue in :doc:`modernize-loop-convert - ` generating wrong code - when using structured bindings. - -- In :doc:`modernize-use-default-member-init - ` check, template - constructors are now counted towards hand-written constructors and skipped - if more than one exists. Additionally, a crash that occurred with array - members being value-initialized has been fixed. - -- Fixed false positive in :doc:`modernize-use-equals-default - ` check for special member - functions containing macros or preprocessor directives, and out-of-line special - member functions in unions. - -- Improved :doc:`modernize-use-override - ` check with new - `IgnoreTemplateInstantiations` option to optionally ignore virtual function - overrides that are part of template instantiations. - -- Improved :doc:`performance-for-range-copy - ` - check by extending const usage analysis to include the type's members. - -- Improved :doc:`performance-inefficient-vector-operation - ` - check by extending const usage analysis to include the type's members. - -- Improved :doc:`performance-move-const-arg - ` check to warn when move - special member functions are not available. - -- Improved :doc:`performance-no-automatic-move - ` check to warn on - ``const &&`` constructors and ignore ``const`` local variable to which NRVO - is applied. - -- Fixed an issue in the :doc:`performance-noexcept-move-constructor - ` checker that was causing - false-positives when the move constructor or move assign operator were defaulted. - -- Improved :doc:`performance-unnecessary-copy-initialization - ` - check by extending const usage analysis to include the type's members. - -- Improved :doc:`performance-unnecessary-value-param - ` - check by extending const usage analysis to include the type's members. - -- Improved :doc:`readability-container-data-pointer - ` check with new - `IgnoredContainers` option to ignore some containers. - -- Fixed a false positive in :doc:`readability-container-size-empty - ` check when comparing - ``std::array`` objects to default constructed ones. The behavior for this and - other relevant classes can now be configured with a new option. - -- Fixed a false negative in :doc:`readability-convert-member-functions-to-static - ` when a - nested class in a member function uses a ``this`` pointer. - -- Fixed reading `HungarianNotation.CString.*` options in - :doc:`readability-identifier-naming - ` check. - -- Renamed `HungarianNotation.CString` options `CharPrinter` and - `WideCharPrinter` to `CharPointer` and `WideCharPointer` respectively in - :doc:`readability-identifier-naming - ` check. - -- Updated the Hungarian prefixes for enums in C files to match those used in C++ - files for improved readability, as checked by :doc:`readability-identifier-naming - `. To preserve the previous - behavior of using `i` as the prefix for enum tags, set the `EnumConstantPrefix` - option to `i` instead of using `EnumConstantHungarianPrefix`. - -- Fixed a hungarian notation issue in :doc:`readability-identifier-naming - ` which failed to indicate - the number of asterisks. - -- Fixed an issue in :doc:`readability-identifier-naming - ` when specifying an empty - string for `Prefix` or `Suffix` options could result in the style not - being used. - -- Improved the performance of the :doc:`readability-identifier-naming - ` check through optimizations. - -- Fixed a false positive in :doc:`readability-implicit-bool-conversion - ` check warning would - be unnecessarily emitted for explicit cast using direct list initialization. - -- Added support to optionally ignore user-defined literals in - :doc:`readability-magic-numbers ` - check and improved it to allow magic numbers in type aliases such as ``using`` - and ``typedef`` declarations if the new `IgnoreTypeAliases` option is set to - `true`. - -- Fixed a false positive in :doc:`readability-misleading-indentation - ` check when warning would - be unnecessarily emitted for template dependent ``if constexpr``. - -- Fixed a false positive in :doc:`readability-named-parameter - ` for defaulted out-of-line - special member functions. - -- Fixed incorrect fixes in :doc:`readability-redundant-declaration - ` check when linkage - (like ``extern "C"``) is explicitly specified. - -- Improved :doc:`readability-redundant-string-cstr - ` check to recognise - unnecessary ``std::string::c_str()`` and ``std::string::data()`` calls in - arguments to ``std::print``, ``std::format`` or other functions listed in - the `StringParameterFunction` check option. - -- Improved :doc:`readability-static-accessed-through-instance - ` check to - support unscoped enumerations through instances and fixed usage of anonymous - structs or classes. - Removed checks ^^^^^^^^^^^^^^ diff --git a/clang/docs/ReleaseNotes.rst b/clang/docs/ReleaseNotes.rst index 0e711cb..d8655e5 100644 --- a/clang/docs/ReleaseNotes.rst +++ b/clang/docs/ReleaseNotes.rst @@ -40,35 +40,12 @@ code bases. C/C++ Language Potentially Breaking Changes ------------------------------------------- -- Indirect edges of asm goto statements under certain circumstances may now be - split. In previous releases of clang, that means for the following code the - two inputs may have compared equal in the inline assembly. This is no longer - guaranteed (and necessary to support outputs along indirect edges, which is - now supported as of this release). This change is more consistent with the - behavior of GCC. - - .. code-block:: c - - foo: asm goto ("# %0 %1"::"i"(&&foo)::foo); - -- ``__builtin_object_size`` and ``__builtin_dynamic_object_size`` now add the - ``sizeof`` the elements specified in designated initializers of flexible - array members for structs that contain them. This change is more consistent - with the behavior of GCC. C++ Specific Potentially Breaking Changes ----------------------------------------- -- Clang won't search for coroutine_traits in std::experimental namespace any more. - Clang will only search for std::coroutine_traits for coroutines then. -- Clang no longer allows dereferencing of a ``void *`` as an extension. Clang 16 - converted this to a default-error as ``-Wvoid-ptr-dereference``, as well as a - SFINAE error. This flag is still valid however, as it disables the equivalent - warning in C. ABI Changes in This Version --------------------------- -- A bug in evaluating the ineligibility of some special member functions has been fixed. This can - make some classes trivially copyable that were not trivially copyable before. (`#62555 `_) What's New in Clang |release|? ============================== @@ -79,1032 +56,128 @@ sections with improvements to Clang's support for those languages. C++ Language Changes -------------------- -- Improved ``-O0`` code generation for calls to ``std::forward_like``. Similarly to - ``std::move, std::forward`` et al. it is now treated as a compiler builtin and implemented - directly rather than instantiating the definition from the standard library. -- Implemented `CWG2518 `_ which allows ``static_assert(false)`` - to not be ill-formed when its condition is evaluated in the context of a template definition. -- Declaring namespace std to be an inline namespace is now prohibited, `[namespace.std]p7`. C++20 Feature Support ^^^^^^^^^^^^^^^^^^^^^ -- Implemented the rule introduced by `CA104 `_ for comparison of - constraint-expressions. Improved support for out-of-line definitions of constrained templates. - This fixes: - `#49620 `_, - `#60231 `_, - `#61414 `_, - `#61809 `_. -- Lambda templates with a requires clause directly after the template parameters now parse - correctly if the requires clause consists of a variable with a dependent type. - (`#61278 `_) -- Announced C++20 Coroutines is fully supported on all targets except Windows, which - still has some stability and ABI issues. -- Downgraded use of a reserved identifier in a module export declaration from - an error to a warning under the ``-Wreserved-module-identifier`` warning - group. This warning is enabled by default. This addresses `#61446 - `_ and allows easier - building of standard modules. This diagnostic may be strengthened into an - error again in the future once there is a less fragile way to mark a module - as being part of the implementation rather than a user module. -- Clang now implements `[temp.deduct]p9`. Substitution failures inside lambdas from - unevaluated contexts will be surfaced as errors. They were previously handled as - SFINAE. -- Clang now supports `requires cplusplus20` for module maps. -- Implemented missing parts of `P2002R1: Consistent comparison operators `_ -- Clang now defines `__cpp_consteval` macro. -- Implemented `P1816R0: `_ and `P2082R1: `_, - which allows CTAD for aggregates. C++23 Feature Support ^^^^^^^^^^^^^^^^^^^^^ -- Implemented `P2036R3: Change scope of lambda trailing-return-type `_ - and `P2579R0 Mitigation strategies for P2036 `_. - These proposals modify how variables captured in lambdas can appear in trailing return type - expressions and how their types are deduced therein, in all C++ language versions. -- Implemented partial support for `P2448R2: Relaxing some constexpr restrictions `_ - Explicitly defaulted functions no longer have to be constexpr-compatible but merely constexpr suitable. - We do not support outside of defaulted special memeber functions the change that constexpr functions no - longer have to be constexpr compatible but rather support a less restricted requirements for constexpr - functions. Which include allowing non-literal types as return values and parameters, allow calling of - non-constexpr functions and constructors. -- Clang now supports `requires cplusplus23` for module maps. -- Implemented `P2564R3: consteval needs to propagate up `_. - C++2c Feature Support ^^^^^^^^^^^^^^^^^^^^^ -- Compiler flags ``-std=c++2c`` and ``-std=gnu++2c`` have been added for experimental C++2c implementation work. -- Implemented `P2738R1: constexpr cast from void* `_. -- Partially implemented `P2361R6: Unevaluated strings `_. - The changes to attributes declarations are not part of this release. -- Implemented `P2741R3: user-generated static_assert messages `_. Resolutions to C++ Defect Reports ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -- Implemented `DR2397 `_ which allows ``auto`` specifier for pointers - and reference to arrays. -- Implemented `CWG2521 `_ which reserves using ``__`` in user-defined - literal suffixes and deprecates literal operator function declarations using an identifier. - Taught ``-Wuser-defined-literals`` for the former, on by default, and added - ``-Wdeprecated-literal-operator`` for the latter, off by default for now. - - .. code-block:: c++ - - // What follows is warned by -Wuser-defined-literals - // albeit "ill-formed, no diagnostic required". - // Its behavior is undefined, [reserved.names.general]p2. - string operator ""__i18n(const char*, std::size_t); - - // Assume this declaration is not in the global namespace. - // -Wdeprecated-literal-operator diagnoses the extra space. - string operator "" _i18n(const char*, std::size_t); - // ^ an extra space C Language Changes ------------------ -- Support for outputs from asm goto statements along indirect edges has been - added. (`#53562 `_) -- Fixed a bug that prevented initialization of an ``_Atomic``-qualified pointer - from a null pointer constant. -- Fixed a bug that prevented casting to an ``_Atomic``-qualified type. - (`#39596 `_) -- Added an extension to ``_Generic`` which allows the first operand to be a - type rather than an expression. The type does not undergo any conversions, - which makes this feature suitable for matching qualified types, incomplete - types, and function or array types. - - .. code-block:: c - - const int i = 12; - _Generic(i, int : 0, const int : 1); // Warns about unreachable code, the - // result is 0, not 1. - _Generic(typeof(i), int : 0, const int : 1); // Result is 1, not 0. C2x Feature Support ^^^^^^^^^^^^^^^^^^^ -- Implemented the ``unreachable`` macro in freestanding ```` for - `WG14 N2826 `_ - -- Removed the ``ATOMIC_VAR_INIT`` macro in C2x and later standards modes, which - implements `WG14 N2886 `_ - -- Implemented `WG14 N2934 `_ - which introduces the ``bool``, ``static_assert``, ``alignas``, ``alignof``, - and ``thread_local`` keywords in C2x. - -- Implemented `WG14 N2900 `_ - and `WG14 N3011 `_ - which allows for empty braced initialization in C. - - .. code-block:: c - - struct S { int x, y } s = {}; // Initializes s.x and s.y to 0 - - As part of this change, the ``-Wgnu-empty-initializer`` warning group was - removed, as this is no longer a GNU extension but a C2x extension. You can - use ``-Wno-c2x-extensions`` to silence the extension warning instead. - -- Updated the implementation of - `WG14 N3042 `_ - based on decisions reached during the WG14 CD Ballot Resolution meetings held - in Jan and Feb 2023. This should complete the implementation of ``nullptr`` - and ``nullptr_t`` in C. The specific changes are: - - .. code-block:: c - - void func(nullptr_t); - func(0); // Previously required to be rejected, is now accepted. - func((void *)0); // Previously required to be rejected, is now accepted. - - nullptr_t val; - val = 0; // Previously required to be rejected, is now accepted. - val = (void *)0; // Previously required to be rejected, is now accepted. - - bool b = nullptr; // Was incorrectly rejected by Clang, is now accepted. - -- Implemented `WG14 N3124 _`, - which allows any universal character name to appear in character and string literals. - Non-comprehensive list of changes in this release ------------------------------------------------- -- Clang now saves the address of ABI-indirect function parameters on the stack, - improving the debug information available in programs compiled without - optimizations. -- Clang now supports ``__builtin_nondeterministic_value`` that returns a - nondeterministic value of the same type as the provided argument. -- Clang now supports ``__builtin_FILE_NAME()`` which returns the same - information as the ``__FILE_NAME__`` macro (the presumed file name - from the invocation point, with no path components included). -- Clang now supports ``__builtin_assume_separate_storage`` that indicates that - its arguments point to objects in separate storage allocations. -- Clang now supports expressions in ``#pragma clang __debug dump``. -- Clang now supports declaration of multi-dimensional arrays with - ``__declspec(property)``. -- A new builtin type trait ``__is_trivially_equality_comparable`` has been added, - which checks whether comparing two instances of a type is equivalent to - ``memcmp(&lhs, &rhs, sizeof(T)) == 0``. -- Clang now ignores null directives outside of the include guard when deciding - whether a file can be enabled for the multiple-include optimization. -- Clang now support ``__builtin_FUNCSIG()`` which returns the same information - as the ``__FUNCSIG__`` macro (available only with ``-fms-extensions`` flag). - This fixes (`#58951 `_). -- Clang now supports the `NO_COLOR `_ environment - variable as a way to disable color diagnostics. -- Clang now supports ``__builtin_isfpclass``, which checks if the specified - floating-point value falls into any of the specified data classes. -- Added ``__builtin_elementwise_round`` for builtin for floating - point types. This allows access to ``llvm.round`` for - arbitrary floating-point and vector of floating-point types. -- Added ``__builtin_elementwise_rint`` for floating point types. This - allows access to ``llvm.rint`` for arbitrary floating-point and - vector of floating-point types. -- Added ``__builtin_elementwise_nearbyint`` for floating point - types. This allows access to ``llvm.nearbyint`` for arbitrary - floating-point and vector of floating-point types. -- Clang AST matcher now matches concept declarations with `conceptDecl`. New Compiler Flags ------------------ -- The flag ``-std=c++23`` has been added. This behaves the same as the existing - flag ``-std=c++2b``. -- ``-dumpdir`` has been implemented to specify auxiliary and dump output - filenames for features like ``-gsplit-dwarf``. -- ``-fcaret-diagnostics-max-lines=`` has been added as a driver options, which - lets users control the maximum number of source lines printed for a - caret diagnostic. -- ``-fkeep-persistent-storage-variables`` has been implemented to keep all - variables that have a persistent storage duration—including global, static - and thread-local variables—to guarantee that they can be directly addressed. - Since this inhibits the merging of the affected variables, the number of - individual relocations in the program will generally increase. Deprecated Compiler Flags ------------------------- -- ``-fdouble-square-bracket-attributes`` has been deprecated. It is ignored now - and will be removed in Clang 18. - Modified Compiler Flags ----------------------- -- ``clang -g -gsplit-dwarf a.c -o obj/x`` (compile and link) now generates the - ``.dwo`` file at ``obj/x-a.dwo``, instead of a file in the temporary - directory (``/tmp`` on \*NIX systems, if none of the environment variables - TMPDIR, TMP, and TEMP are specified). - -- ``-ffat-lto-objects`` can now be used to emit object files with both object - code and LLVM bitcode. Previously this flag was ignored for GCC compatibility. - (`See related patch `_). - Removed Compiler Flags ------------------------- -- The deprecated flag `-fmodules-ts` is removed. Please use ``-std=c++20`` - or higher to use standard C++ modules instead. -- The deprecated flag `-fcoroutines-ts` is removed. Please use ``-std=c++20`` - or higher to use standard C++ coroutines instead. -- The CodeGen flag `-lower-global-dtors-via-cxa-atexit` which affects how global - destructors are lowered for MachO is removed without replacement. The default - of `-lower-global-dtors-via-cxa-atexit=true` is now the only supported way. -- The cc1 flag ``-no-opaque-pointers`` has been removed. Attribute Changes in Clang -------------------------- -- Introduced a new function attribute ``__attribute__((unsafe_buffer_usage))`` - to be worn by functions containing buffer operations that could cause out of - bounds memory accesses. It emits warnings at call sites to such functions when - the flag ``-Wunsafe-buffer-usage`` is enabled. -- ``__declspec`` attributes can now be used together with the using keyword. Before - the attributes on ``__declspec`` was ignored, while now it will be forwarded to the - point where the alias is used. -- Introduced a new ``USR`` (unified symbol resolution) clause inside of the - existing ``__attribute__((external_source_symbol))`` attribute. Clang's indexer - uses the optional USR value when indexing Clang's AST. This value is expected - to be generated by an external compiler when generating C++ bindings during - the compilation of the foreign language sources (e.g. Swift). -- The ``__has_attribute``, ``__has_c_attribute`` and ``__has_cpp_attribute`` - preprocessor operators now return 1 also for attributes defined by plugins. -- Improve the AST fidelity of ``alignas`` and ``_Alignas`` attribute. Before, we - model ``alignas(type-id)`` as though the user wrote ``alignas(alignof(type-id))``, - now we directly use ``alignas(type-id)``. Improvements to Clang's diagnostics ----------------------------------- -- We now generate a diagnostic for signed integer overflow due to unary minus - in a non-constant expression context. - (`#31643 `_) -- Clang now warns by default for C++20 and later about deprecated capture of - ``this`` with a capture default of ``=``. This warning can be disabled with - ``-Wno-deprecated-this-capture``. -- Clang had failed to emit some ``-Wundefined-internal`` for members of a local - class if that class was first introduced with a forward declaration. -- Diagnostic notes and fix-its are now generated for ``ifunc``/``alias`` attributes - which point to functions whose names are mangled. -- Diagnostics relating to macros on the command line of a preprocessed assembly - file or precompiled header are now reported as coming from the file - ```` instead of ````. -- Clang constexpr evaluator now provides a more concise diagnostic when calling - function pointer that is known to be null. -- Clang now avoids duplicate warnings on unreachable ``[[fallthrough]];`` statements - previously issued from ``-Wunreachable-code`` and ``-Wunreachable-code-fallthrough`` - by prioritizing ``-Wunreachable-code-fallthrough``. -- Clang now correctly diagnoses statement attributes ``[[clang::always_inline]]`` and - ``[[clang::noinline]]`` when used on a statement with dependent call expressions. -- Clang now checks for completeness of the second and third arguments in the - conditional operator. - (`#59718 `_) -- There were some cases in which the diagnostic for the unavailable attribute - might not be issued, this fixes those cases. - (`61815 `_) -- Clang now avoids unnecessary diagnostic warnings for obvious expressions in - the case of binary operators with logical OR operations. - (`#57906 `_) -- Clang's "static assertion failed" diagnostic now points to the static assertion - expression instead of pointing to the ``static_assert`` token. - (`#61951 `_) -- ``-Wformat`` now recognizes ``%lb`` for the ``printf``/``scanf`` family of - functions. - (`#62247: `_). -- Clang now diagnoses shadowing of lambda's template parameter by a capture. - (`#61105: `_). -- Address a false positive in ``-Wpacked`` when applied to a non-pod type using - Clang ABI >= 15. - (`#62353: `_, - fallout from the non-POD packing ABI fix in LLVM 15). -- Clang constexpr evaluator now prints subobject's name instead of its type in notes - when a constexpr variable has uninitialized subobjects after its constructor call. - (`#58601 `_) -- Clang's `-Wshadow` warning now warns about shadowings by static local variables - (`#62850: `_). -- Clang now warns when any predefined macro is undefined or redefined, instead - of only some of them. -- Clang now correctly diagnoses when the argument to ``alignas`` or ``_Alignas`` - is an incomplete type. - (`#55175: `_, and fixes an - incorrect mention of ``alignof`` in a diagnostic about ``alignas``). -- Clang will now show a margin with line numbers to the left of each line - of code it prints for diagnostics. This can be disabled using - ``-fno-diagnostics-show-line-numbers``. At the same time, the maximum - number of code lines it prints has been increased from 1 to 16. This - can be controlled using ``-fcaret-diagnostics-max-lines=``. -- Clang no longer emits ``-Wunused-variable`` warnings for variables declared - with ``__attribute__((cleanup(...)))`` to match GCC's behavior. -- Clang now issues expected warnings for situations of comparing with NULL pointers. - (`#42992: `_) -- Clang now diagnoses unused const-qualified variable template as - "unused variable template" rather than "unused variable". -- When diagnosing a constant expression where an enum without a fixed underlying - type is set to a value outside the range of the enum's values, clang will now - print the name of the enum in question. -- Clang no longer diagnoses a read of an empty structure as use of an - uninitialized variable. - (`#26842: `_) -- The Fix-It emitted for unused labels used to expand to the next line, which caused - visual oddities now that Clang shows more than one line of code snippet. This has - been fixed and the Fix-It now only spans to the end of the ``:``. -- Clang now underlines the parameter list of function declaration when emitting - a note about the mismatch in the number of arguments. -- Clang now diagnoses unexpected tokens after a - ``#pragma clang|GCC diagnostic push|pop`` directive. - (`#13920: `_) -- Clang now does not try to analyze cast validity on variables with dependent alignment (`#63007: `_). -- Clang constexpr evaluator now displays member function calls more precisely - by making use of the syntactical structure of function calls. This avoids display - of syntactically invalid codes in diagnostics. - (`#57081: `_) -- Clang no longer emits inappropriate notes about the loss of ``__unaligned`` qualifier - on overload resolution, when the actual reason for the failure is loss of other qualifiers. -- The note emitted when an ``operator==`` was defaulted as deleted used to refer to - the lack of a data member's "three-way comparison operator". It now refers correctly - to the data member's ``operator==``. - (`#63960: `_) -- Clang's notes about unconvertible types in overload resolution failure now covers - the source range of parameter declaration of the candidate function declaration. - - *Example Code*: - - .. code-block:: c++ - - void func(int aa, int bb); - void test() { func(1, "two"); } - - *BEFORE*: - - .. code-block:: text - - source:2:15: error: no matching function for call to 'func' - void test() { func(1, "two"); } - ^~~~ - source:1:6: note: candidate function not viable: no known conversion from 'const char[4]' to 'int' for 2nd argument - void func(int aa, int bb); - ^ - - *AFTER*: - - .. code-block:: text - - source:2:15: error: no matching function for call to 'func' - void test() { func(1, "two"); } - ^~~~ - source:1:6: note: candidate function not viable: no known conversion from 'const char[4]' to 'int' for 2nd argument - void func(int aa, int bb); - ^ ~~~~~~ - -- ``-Wformat`` cast fix-its will now suggest ``static_cast`` instead of C-style casts - for C++ code. -- ``-Wformat`` will no longer suggest a no-op fix-it for fixing scoped enum format - warnings. Instead, it will suggest casting the enum object to the type specified - in the format string. -- Clang now emits ``-Wconstant-logical-operand`` warning even when constant logical - operand is on left side. - (`#37919 `_) Bug Fixes in This Version ------------------------- -- Added a new diagnostic warning group - ``-Wdeprecated-redundant-constexpr-static-def``, under the existing - ``-Wdeprecated`` group. This controls warnings about out-of-line definitions - of 'static constexpr' data members that are unnecessary from C++17 onwards. -- Fix segfault while running clang-rename on a non existing file. - (`#36471 `_) -- Fix crash when diagnosing incorrect usage of ``_Nullable`` involving alias - templates. - (`#60344 `_) -- Fix confusing warning message when ``/clang:-x`` is passed in ``clang-cl`` - driver mode and emit an error which suggests using ``/TC`` or ``/TP`` - ``clang-cl`` options instead. - (`#59307 `_) -- Fix assert that fails when the expression causing the this pointer to be - captured by a block is part of a constexpr if statement's branch and - instantiation of the enclosing method causes the branch to be discarded. -- Fix __VA_OPT__ implementation so that it treats the concatenation of a - non-placemaker token and placemaker token as a non-placemaker token. - (`#60268 `_) -- Fix crash when taking the address of a consteval lambda call operator. - (`#57682 `_) -- Clang now support export declarations in the language linkage. - (`#60405 `_) -- Fix aggregate initialization inside lambda constexpr. - (`#60936 `_) -- No longer issue a false positive diagnostic about a catch handler that cannot - be reached despite being reachable. This fixes - `#61177 `_ in anticipation - of `CWG2699 _` being accepted by WG21. -- Fix crash when parsing fold expression containing a delayed typo correction. - (`#61326 `_) -- Fix crash when dealing with some member accesses outside of class or member - function context. - (`#37792 `_) and - (`#48405 `_) -- Fix crash when using ``[[clang::always_inline]]`` or ``[[clang::noinline]]`` - statement attributes on a call to a template function in the body of a - template function. -- Fix coroutines issue where ``get_return_object()`` result was always eagerly - converted to the return type. Eager initialization (allowing RVO) is now only - performed when these types match, otherwise deferred initialization is used, - enabling short-circuiting coroutines use cases. This fixes - (`#56532 `_) in - anticipation of `CWG2563 _`. -- Fix highlighting issue with ``_Complex`` and initialization list with more than - 2 items. (`#61518 `_) -- Fix ``getSourceRange`` on ``VarTemplateSpecializationDecl`` and - ``VarTemplatePartialSpecializationDecl``, which represents variable with - the initializer, so it behaves consistently with other ``VarDecls`` and ends - on the last token of initializer, instead of right angle bracket of - the template argument list. -- Fix false-positive diagnostic issued for consteval initializers of temporary - objects. - (`#60286 `_) -- Correct restriction of trailing requirements clauses on a templated function. - Previously we only rejected non-'templated' things, but the restrictions ALSO need - to limit non-defined/non-member functions as well. Additionally, we now diagnose - requires on lambdas when not allowed, which we previously missed. - (`#61748 `_) -- Fix confusing diagnostic for incorrect use of qualified concepts names. -- Fix handling of comments in function like macros so they are ignored in -CC - mode. - (`#60887 `_) -- Fix incorrect merging of lambdas across modules. - (`#60985 `_) -- Fix crash when handling nested immediate invocations in initializers of global - variables. - (`#58207 `_) -- Fix crash when generating code coverage information for `PseudoObjectExpr` in - Clang AST. - (`#45481 `_) -- Fix the assertion hit when a template consteval function appears in a nested - consteval/constexpr call chain. - (`#61142 `_) -- Clang now better diagnose placeholder types constrained with a concept that is - not a type concept. -- Fix crash when a doc comment contains a line splicing. - (`#62054 `_) -- Work around with a clang coverage crash which happens when visiting - expressions/statements with invalid source locations in non-assert builds. - Assert builds may still see assertions triggered from this. -- Fix a failed assertion due to an invalid source location when trying to form - a coverage report for an unresolved constructor expression. - (`#62105 `_) -- Fix defaulted equality operator so that it does not attempt to compare unnamed - bit-fields. This fixes: - (`#61355 `_) and - (`#61417 `_) -- Fix crash after suggesting typo correction to constexpr if condition. - (`#61885 `_) -- Clang constexpr evaluator now treats comparison of [[gnu::weak]]-attributed - member pointer as an invalid expression. -- Fix crash when member function contains invalid default argument. - (`#62122 `_) -- Fix crash when handling undefined template partial specialization - (`#61356 `_) -- Fix premature substitution into the constraints of an inherited constructor. -- Fix crash when attempting to perform parenthesized initialization of an - aggregate with a base class with only non-public constructors. - (`#62296 `_) -- Fix crash when handling initialization candidates for invalid deduction guide. - (`#62408 `_) -- Fix crash when redefining a variable with an invalid type again with an - invalid type. (`#62447 `_) -- Fix a stack overflow issue when evaluating ``consteval`` default arguments. - (`#60082 `_) -- Fix the assertion hit when generating code for global variable initializer of - _BitInt(1) type. - (`#62207 `_) -- Fix lambdas and other anonymous function names not respecting ``-fdebug-prefix-map`` - (`#62192 `_) -- Fix crash when attempting to pass a non-pointer type as first argument of - ``__builtin_assume_aligned``. - (`#62305 `_) -- A default argument for a non-type template parameter is evaluated and checked - at the point where it is required. This fixes: - (`#62224 `_) and - (`#62596 `_) -- Fix an assertion when instantiating the body of a Class Template Specialization - when it had been instantiated from a partial template specialization with different - template arguments on the containing class. This fixes: - (`#60778 `_). -- Fix a crash when an enum constant has a dependent-type recovery expression for - C. - (`#62446 `_). -- Propagate the value-dependent bit for VAArgExpr. Fixes a crash where a - __builtin_va_arg call has invalid arguments. - (`#62711 `_). -- Fix crash on attempt to initialize union with flexible array member. - (`#61746 `_). -- Clang `TextNodeDumper` enabled through `-ast-dump` flag no longer evaluates the - initializer of constexpr `VarDecl` if the declaration has a dependent type. -- Match GCC's behavior for ``__builtin_object_size`` and - ``__builtin_dynamic_object_size`` on structs containing flexible array - members. - (`#62789 `_). -- Fix a crash when instantiating a non-type template argument in a dependent scope. - (`#62533 `_). -- Fix crash when diagnosing default comparison method. - (`#62791 `_) and - (`#62102 `_). -- Fix crash when passing a braced initializer list to a parentehsized aggregate - initialization expression. - (`#63008 `_). -- Reject increment of bool value in unevaluated contexts after C++17. - (`#47517 `_). -- Fix assertion and quality of diagnostic messages in a for loop - containing multiple declarations and a range specifier - (`#63010 `_). -- Fix rejects-valid when consteval operator appears inside of a template. - (`#62886 `_). -- Fix crash for code using ``_Atomic`` types in C++ - (`See patch `_). -- Fix crash when passing a value larger then 64 bits to the aligned attribute. - (`#50534 `_). -- CallExpr built for C error-recovery now is always type-dependent. Fixes a - crash when we encounter a unresolved TypoExpr during diagnostic emission. - (`#50244 `_). -- Apply ``-fmacro-prefix-map`` to anonymous tags in template arguments - (`#63219 `_). -- Clang now properly diagnoses format string mismatches involving scoped - enumeration types. A scoped enumeration type is not promoted to an integer - type by the default argument promotions, and thus this is UB. Clang's - behavior now matches GCC's behavior in C++. - (`#38717 `_). -- Fixed a failing assertion when implicitly defining a function within a GNU - statement expression that appears outside of a function block scope. The - assertion was benign outside of asserts builds and would only fire in C. - (`#48579 `_). -- Fixed a failing assertion when applying an attribute to an anonymous union. - The assertion was benign outside of asserts builds and would only fire in C++. - (`#48512 `_). -- Fixed a failing assertion when parsing incomplete destructor. - (`#63503 `_) -- Fix C++17 mode assert when parsing malformed code and the compiler is - attempting to see if it could be type template for class template argument - deduction. This fixes - (`Issue 57495 `_) -- Fix missing destructor calls and therefore memory leaks in generated code - when an immediate invocation appears as a part of an expression that produces - temporaries. - (`#60709 `_). -- Fixed a missed integer overflow warning with temporary values. - (`#63629 `_) -- Fixed parsing of elaborated type specifier inside of a new expression. - (`#34341 `_) -- Clang now correctly evaluates ``__has_extension (cxx_defaulted_functions)`` - and ``__has_extension (cxx_default_function_template_args)`` to 1. - (`#61758 `_) -- Stop evaluating a constant expression if the condition expression which in - switch statement contains errors. - (`#63453 _`) -- Fixed false positive error diagnostic when pack expansion appears in template - parameters of a member expression. - (`#48731 `_) -- Fix the contains-errors bit not being set for DeclRefExpr that refers to a - VarDecl with invalid initializer. This fixes: - (`#50236 `_), - (`#50243 `_), - (`#48636 `_), - (`#50320 `_). -- Fix an assertion when using ``\u0024`` (``$``) as an identifier, by disallowing - that construct (`#62133 _`). -- Fix crash caused by PseudoObjectExprBitfields: NumSubExprs overflow. - (`#63169 _`) -- Fix crash when casting an object to an array type. - (`#63758 _`) -- Fixed false positive error diagnostic observed from mixing ``asm goto`` with - ``__attribute__((cleanup()))`` variables falsely warning that jumps to - non-targets would skip cleanup. -- Correcly diagnose jumps into statement expressions. - This ensures the behavior of Clang is consistent with GCC. - (`#63682 `_) -- Invalidate BlockDecl with implicit return type, in case any of the return - value exprs is invalid. Propagating the error info up by replacing BlockExpr - with a RecoveryExpr. This fixes: - (`#63863 _`) -- Invalidate BlockDecl with invalid ParmVarDecl. Remove redundant dump of - BlockDecl's ParmVarDecl - (`#64005 _`) -- Fix crash on nested templated class with template function call. - (`#61159 _`) - Bug Fixes to Compiler Builtins ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Bug Fixes to Attribute Support ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -- Fixed a bug where attribute annotations on type specifiers (enums, classes, - structs, unions, and scoped enums) were not properly ignored, resulting in - misleading warning messages. Now, such attribute annotations are correctly - ignored. (`#61660 `_) -- GNU attributes preceding C++ style attributes on templates were not properly - handled, resulting in compilation error. This has been corrected to match the - behavior exhibited by GCC, which permits mixed ordering of GNU and C++ - attributes. Bug Fixes to C++ Support ^^^^^^^^^^^^^^^^^^^^^^^^ -- Fix crash on invalid code when looking up a destructor in a templated class - inside a namespace. - (`#59446 `_) -- Fix crash when evaluating consteval constructor of derived class whose base - has more than one field. - (`#60166 `_) -- Fix an issue about ``decltype`` in the members of class templates derived from - templates with related parameters. - (`#58674 `_) -- Fix incorrect deletion of the default constructor of unions in some - cases. (`#48416 `_) -- No longer issue a pre-C++23 compatibility warning in ``-pedantic`` mode - regarding overloaded `operator[]` with more than one parameter or for static - lambdas. (`#61582 `_) -- Stop stripping CV qualifiers from the type of ``this`` when capturing it by value in - a lambda. - (`#50866 `_) -- Fix ordering of function templates by constraints when they have template - template parameters with different nested constraints. -- Fix type equivalence comparison between auto types to take constraints into - account. -- Fix bug in the computation of the ``__has_unique_object_representations`` - builtin for types with unnamed bitfields. - (`#61336 `_) -- Fix default member initializers sometimes being ignored when performing - parenthesized aggregate initialization of templated types. - (`#62266 `_) -- Fix overly aggressive lifetime checks for parenthesized aggregate - initialization. - (`#61567 `_) -- Fix a crash when expanding a pack as the index of a subscript expression. -- Fix handling of constexpr dynamic memory allocations in template - arguments. (`#62462 `_) -- Some predefined expressions are now treated as string literals in MSVC - compatibility mode. - (`#114 `_) -- Fix parsing of `auto(x)`, when it is surrounded by parentheses. - (`#62494 `_) -- Fix handling of generic lambda used as template arguments. - (`#62611 `_) -- Allow omitting ``typename`` in the parameter declaration of a friend - constructor declaration. - (`#63119 `_) -- Fix access of a friend class declared in a local class. Clang previously - emitted an error when a friend of a local class tried to access it's - private data members. -- Allow abstract parameter and return types in functions that are - either deleted or not defined. - (`#63012 `_) -- Fix handling of using-declarations in the init statements of for - loop declarations. - (`#63627 `_) -- Fix crash when emitting diagnostic for out of order designated initializers - in C++. - (`#63605 `_) -- Fix crash when using standard C++ modules with OpenMP. - (`#62359 `_) -- Fix crash when using consteval non static data member initialization in - standard C++ modules. - (`#60275 `_) -- Fix handling of ADL for dependent expressions in standard C++ modules. - (`#60488 `_) -- Fix crash when combining `-ftime-trace` within standard C++ modules. - (`#60544 `_) -- Don't generate template specializations when importing standard C++ modules. - (`#60693 `_) -- Fix the visibility of `initializer list` in the importer of standard C++ - modules. This addresses - (`#60775 `_) -- Allow the use of constrained friend in standard C++ modules. - (`#60890 `_) -- Don't evaluate initializer of used variables in every importer of standard - C++ modules. - (`#61040 `_) -- Fix the issue that the default `operator==` in standard C++ modules will - cause duplicate symbol linker error. - (`#61067 `_) -- Fix the false positive ODR check for template names. This addresses the issue - that we can't include `` in multiple module units. - (`#61317 `_) -- Fix crash for inconsistent exported declarations in standard C++ modules. - (`#61321 `_) -- Fix ignoring `#pragma comment` and `#pragma detect_mismatch` directives in - standard C++ modules. - (`#61733 `_) -- Don't generate virtual tables if the class is defined in another module units - for Itanium ABI. - (`#61940 `_) -- Fix false postive check for constrained satisfaction in standard C++ modules. - (`#62589 `_) -- Serialize the evaluated constant values for variable declarations in standard - C++ modules. - (`#62796 `_) -- Merge lambdas in require expressions in standard C++ modules. - (`#63544 `_) - -- Fix location of default member initialization in parenthesized aggregate - initialization. - (`#63903 `_) -- Fix constraint checking of non-generic lambdas. - (`#63181 `_) - Bug Fixes to AST Handling ^^^^^^^^^^^^^^^^^^^^^^^^^ -- Preserve ``namespace`` definitions that follow malformed declarations. - Miscellaneous Bug Fixes ^^^^^^^^^^^^^^^^^^^^^^^ Miscellaneous Clang Crashes Fixed ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -- Dumping the AST to JSON no longer causes a failed assertion when targetting - the Microsoft ABI and the AST to be dumped contains dependent names that - would not typically be mangled. - (`#61440 `_) - Target Specific Changes ----------------------- AMDGPU Support ^^^^^^^^^^^^^^ -- Linking for AMDGPU now uses ``--no-undefined`` by default. This causes - undefined symbols in the created module to be a linker error. To prevent this, - pass ``-Wl,--undefined`` if compiling directly, or ``-Xoffload-linker - --undefined`` if using an offloading language. -- The deprecated ``-mcode-object-v3`` and ``-mno-code-object-v3`` command-line - options have been removed. -- A new option ``-mprintf-kind`` has been introduced that controls printf lowering - scheme. It is currently supported only for HIP and takes following values, - ``hostcall`` - printing happens during kernel execution via series of hostcalls, - The scheme requires the system to support pcie atomics.(default) - ``buffered`` - Scheme uses a debug buffer to populate printf varargs, does not - rely on pcie atomics support. - X86 Support ^^^^^^^^^^^ -- Add ISA of ``AMX-COMPLEX`` which supports ``tcmmimfp16ps`` and - ``tcmmrlfp16ps``. -- Support ISA of ``SHA512``. - * Support intrinsic of ``_mm256_sha512msg1_epi64``. - * Support intrinsic of ``_mm256_sha512msg2_epi64``. - * Support intrinsic of ``_mm256_sha512rnds2_epi64``. -- Support ISA of ``SM3``. - * Support intrinsic of ``_mm_sm3msg1_epi32``. - * Support intrinsic of ``_mm_sm3msg2_epi32``. - * Support intrinsic of ``_mm_sm3rnds2_epi32``. -- Support ISA of ``SM4``. - * Support intrinsic of ``_mm(256)_sm4key4_epi32``. - * Support intrinsic of ``_mm(256)_sm4rnds4_epi32``. -- Support ISA of ``AVX-VNNI-INT16``. - * Support intrinsic of ``_mm(256)_dpwsud(s)_epi32``. - * Support intrinsic of ``_mm(256)_dpwusd(s)_epi32``. - * Support intrinsic of ``_mm(256)_dpwuud(s)_epi32``. -- ``-march=graniterapids-d`` is now supported. - Arm and AArch64 Support ^^^^^^^^^^^^^^^^^^^^^^^ -- The hard-float ABI is now available in Armv8.1-M configurations that - have integer MVE instructions (and therefore have FP registers) but - no scalar or vector floating point computation. Previously, trying - to select the hard-float ABI on such a target (via - ``-mfloat-abi=hard`` or a triple ending in ``hf``) would silently - use the soft-float ABI instead. - -- Clang builtin ``__arithmetic_fence`` and the command line option ``-fprotect-parens`` - are now enabled for AArch64. - -- Clang supports flag output operands by which conditions in the NZCV could be outputs - of inline assembly for AArch64. This change is more consistent with the behavior of - GCC. - - .. code-block:: c - - // int a = foo(); int* b = bar(); - asm("ands %w[a], %w[a], #3" : [a] "+r"(a), "=@cceq"(*b)); - -- Fix a crash when ``preserve_all`` calling convention is used on AArch64. - `Issue 58145 `_ - Windows Support ^^^^^^^^^^^^^^^ LoongArch Support ^^^^^^^^^^^^^^^^^ -- Patchable function entry (``-fpatchable-function-entry``) is now supported - on LoongArch. -- Unaligned memory accesses can be toggled by ``-m[no-]unaligned-access`` or the - aliases ``-m[no-]strict-align``. -- Non ``$``-prefixed GPR names (e.g. ``r4`` and ``a0``) are allowed in inlineasm - like GCC does. - RISC-V Support ^^^^^^^^^^^^^^ -- Added ``-mrvv-vector-bits=`` option to give an upper and lower bound on vector - length. Valid values are powers of 2 between 64 and 65536. A value of 32 - should eventually be supported. We also accept "zvl" to use the Zvl*b - extension from ``-march`` or ``-mcpu`` to the be the upper and lower bound. -- Fixed incorrect ABI lowering of ``_Float16`` in the case of structs - containing ``_Float16`` that are eligible for passing via GPR+FPR or - FPR+FPR. -- Removed support for ``__attribute__((interrupt("user")))``. User-level - interrupts are not in version 1.12 of the privileged specification. -- Added ``attribute(riscv_rvv_vector_bits(__riscv_v_fixed_vlen))`` to allow - the size of a RVV (RISC-V Vector) scalable type to be specified. This allows - RVV scalable vector types to be used in structs or in global variables. -- The rules for ordering of extensions in ``-march`` strings were relaxed. A - canonical ordering is no longer enforced on ``z*``, ``s*``, and ``x*`` - prefixed extensions. CUDA/HIP Language Changes ^^^^^^^^^^^^^^^^^^^^^^^^^ -- Clang has been updated to align its default language standard for CUDA/HIP with - that of C++. The standard has now been enhanced to gnu++17, supplanting the - previously used c++14. CUDA Support ^^^^^^^^^^^^ -- Clang now supports CUDA SDK up to 12.1 AIX Support ^^^^^^^^^^^ -- Add an AIX-only link-time option, `-mxcoff-build-id=0xHEXSTRING`, to allow users - to embed a hex id in their binary such that it's readable by the program itself. - This option is an alternative to the `--build-id=0xHEXSTRING` GNU linker option - which is currently not supported by the AIX linker. - -- Introduced the ``-mxcoff-roptr`` option to place constant objects with - relocatable address values in the read-only data section. This option should - be used with the ``-fdata-sections`` option, and is not supported with - ``-fno-data-sections``. When ``-mxcoff-roptr`` is in effect at link time, - read-only data sections with relocatable address values that resolve to - imported symbols are made writable. WebAssembly Support ^^^^^^^^^^^^^^^^^^^ -- Shared library support (and PIC code generation) for WebAssembly is no longer - limited to the Emscripten target OS and now works with other targets such as - wasm32-wasi. Note that the `format - `_ - is not yet stable and may change between LLVM versions. Also, WASI does not - yet have facilities to load dynamic libraries. AVR Support ^^^^^^^^^^^ -- The definition of ``USHRT_MAX`` in the freestanding ```` no longer - overflows on AVR (where ``sizeof(int) == sizeof(unsigned short)``). The type - of ``USHRT_MAX`` is now ``unsigned int`` instead of ``int``, as required by - the C standard. DWARF Support in Clang ---------------------- Floating Point Support in Clang ------------------------------- -- Add ``__builtin_elementwise_log`` builtin for floating point types only. -- Add ``__builtin_elementwise_log10`` builtin for floating point types only. -- Add ``__builtin_elementwise_log2`` builtin for floating point types only. -- Add ``__builtin_elementwise_exp`` builtin for floating point types only. -- Add ``__builtin_elementwise_exp2`` builtin for floating point types only. -- Add ``__builtin_set_flt_rounds`` builtin for X86, x86_64, Arm and AArch64 only. -- Add ``__builtin_elementwise_pow`` builtin for floating point types only. AST Matchers ------------ -- Add ``coroutineBodyStmt`` matcher. - -- The ``hasBody`` matcher now matches coroutine body nodes in - ``CoroutineBodyStmts``. - -- Add ``arrayInitIndexExpr`` and ``arrayInitLoopExpr`` matchers. - clang-format ------------ -- Add ``NextLineOnly`` style to option ``PackConstructorInitializers``. - Compared to ``NextLine`` style, ``NextLineOnly`` style will not try to - put the initializers on the current line first, instead, it will try to - put the initializers on the next line only. -- Add additional Qualifier Ordering support for special cases such - as templates, requires clauses, long qualified names. -- Fix all known issues associated with ``LambdaBodyIndentation: OuterScope``. -- Add ``BracedInitializerIndentWidth`` which can be used to configure - the indentation level of the contents of braced init lists. -- Add ``KeepEmptyLinesAtEOF`` to keep empty lines at end of file. -- Add ``RemoveParentheses`` to remove redundant parentheses. -- Add ``TypeNames`` to treat listed non-keyword identifiers as type names. -- Add ``AlignConsecutiveShortCaseStatements`` which can be used to align case - labels in conjunction with ``AllowShortCaseLabelsOnASingleLine``. -- Add ``SpacesInParens`` style with ``SpacesInParensOptions`` to replace - ``SpacesInConditionalStatement``, ``SpacesInCStyleCastParentheses``, - ``SpaceInEmptyParentheses``, and ``SpacesInParentheses``. - libclang -------- -- Introduced the new function ``clang_CXXMethod_isExplicit``, - which identifies whether a constructor or conversion function cursor - was marked with the explicit identifier. - -- Introduced the new ``CXIndex`` constructor function - ``clang_createIndexWithOptions``, which allows storing precompiled preambles - in memory or overriding the precompiled preamble storage path. - -- Deprecated two functions ``clang_CXIndex_setGlobalOptions`` and - ``clang_CXIndex_setInvocationEmissionPathOption`` in favor of the new - function ``clang_createIndexWithOptions`` in order to improve thread safety. - -- Added check in ``clang_getFieldDeclBitWidth`` for whether a bit-field - has an evaluable bit width. Fixes undefined behavior when called on a - bit-field whose width depends on a template parameter. - -- Added ``CXBinaryOperatorKind`` and ``CXUnaryOperatorKind``. - (`#29138 `_) - Static Analyzer --------------- -- Fix incorrect alignment attribute on the this parameter of certain - non-complete destructors when using the Microsoft ABI. - (`#60465 `_) - -- Removed the deprecated - ``consider-single-element-arrays-as-flexible-array-members`` analyzer option. - Any use of this flag will result in an error. - Use `-fstrict-flex-arrays= - `_ - -- Better modeling of lifetime-extended memory regions. As a result, the - ``MoveChecker`` raises more true-positive reports. - -- Fixed some bugs (including crashes) around the handling of constant global - arrays and their initializer expressions. - -- The ``CStringChecker`` will invalidate less if the copy operation is - inferable to be bounded. For example, if the arguments of ``strcpy`` are - known to be of certain lengths and that are in-bounds. - - .. code-block:: c++ - - struct { - void *ptr; - char arr[4]; - } x; - x.ptr = malloc(1); - // extent of 'arr' is 4, and writing "hi\n" (4 characters), - // thus no buffer overflow can happen - strcpy(x.arr, "hi\n"); - free(x.ptr); // no longer reports memory leak here - - Similarly, functions like ``strsep`` now won't invalidate the object - containing the destination buffer, because it can never overflow. - Note that, ``std::copy`` is still not modeled, and as such, it will still - invalidate the enclosing object on call. - (`#55019 `_) - -- Implement ``BufferOverlap`` check for ``sprint``/``snprintf`` - The ``CStringChecker`` checks for buffer overlaps for ``sprintf`` and - ``snprintf``. - -- Objective-C support was improved around checking ``_Nonnull`` and - ``_Nullable`` including block pointers and literal objects. - -- Let the ``StreamChecker`` detect ``NULL`` streams instead of by - ``StdCLibraryFunctions``. - ``StreamChecker`` improved on the ``fseek`` modeling for the ``SEEK_SET``, - ``SEEK_END``, ``SEEK_CUR`` arguments. - -- ``StdCLibraryFunctionArgs`` was merged into the ``StdCLibraryFunctions``. - The diagnostics of the ``StdCLibraryFunctions`` was improved. - -- ``QTimer::singleShot`` now doesn't raise false-positives for memory leaks by - the ``MallocChecker``. - (`#39713 `_) - -- Fixed the infamous unsigned index false-positives in the - ``ArrayBoundCheckerV2`` checker. - (`#44493 `_) - -- Now, taint propagations are tracked further back until the real taint source. - This improves all taint-related diagnostics. - -- Fixed a null-pointer dereference crash inside the ``MoveChecker``. - .. _release-notes-sanitizers: Sanitizers ---------- -- Several more sanitizers are now ported to LoongArch: MSan, DFsan, Profile, XRay and libFuzzer. Python Binding Changes ---------------------- -The following methods have been added: - -- ``clang_Location_isInSystemHeader`` exposed via the ``is_in_system_header`` - property of the `Location` class. Additional Information ====================== diff --git a/flang/docs/ReleaseNotes.md b/flang/docs/ReleaseNotes.md index abf054d..f0c9562 100644 --- a/flang/docs/ReleaseNotes.md +++ b/flang/docs/ReleaseNotes.md @@ -24,31 +24,11 @@ page](https://llvm.org/releases/). ## Major New Features -* Flang now supports loading LLVM pass plugins with the `-fpass-plugin` option - which is also available in clang. The option mimics the behavior of the - corresponding option in clang and has the same capabilities and limitations. -* Flang also supports statically linked LLVM pass extensions. Projects can be - linked statically into `flang-new` if the cmake command includes - `-DLLVM_${NAME}_LINK_INTO_TOOLS=ON`. This behavior is also similar to clang. - ## Bug Fixes ## Non-comprehensive list of changes in this release -* The bash wrapper script, `flang`, is renamed as `flang-to-external-fc`. -* In contrast to Clang, Flang will not default to using `-fpie` when linking - executables. This is only a temporary solution and the goal is to align with - Clang in the near future. First, however, the frontend driver needs to be - extended so that it can generate position independent code (that requires - adding support for e.g. `-fpic` and `-mrelocation-model` in `flang-new - -fc1`). Once that is available, support for the `-fpie` can officially be - added and the default behaviour updated. ## New Compiler Flags -* Refined how `-f{no-}color-diagnostics` is treated to better align with Clang. - In particular, both `-fcolor-diagnostics` and `-fno-color-diagnostics` are - now available in `flang-new` (the diagnostics are formatted by default). In - the frontend driver, `flang-new -fc1`, only `-fcolor-diagnostics` is - available (by default, the diagnostics are not formatted). ## Windows Support @@ -65,5 +45,5 @@ Flang's documentation is located in the `flang/docs/` directory in the LLVM monorepo. If you have any questions or comments about Flang, please feel free to -contact us on the [Discourse +contact us on the [Discourse forums](https://discourse.llvm.org/c/subprojects/flang/33). diff --git a/lld/docs/ReleaseNotes.rst b/lld/docs/ReleaseNotes.rst index d8e34d1..6f60efd 100644 --- a/lld/docs/ReleaseNotes.rst +++ b/lld/docs/ReleaseNotes.rst @@ -26,84 +26,12 @@ Non-comprehensive list of changes in this release ELF Improvements ---------------- -* When ``--threads=`` is not specified, the number of concurrency is now capped to 16. - A large ``--thread=`` can harm performance, especially with some system - malloc implementations like glibc's. - (`D147493 `_) -* ``--remap-inputs=`` and ``--remap-inputs-file=`` are added to remap input files. - (`D148859 `_) -* ``--lto=`` is now available to support ``clang -funified-lto`` - (`D123805 `_) -* ``--lto-CGO[0-3]`` is now available to control ``CodeGenOpt::Level`` independent of the LTO optimization level. - (`D141970 `_) -* ``--check-dynamic-relocations=`` is now correct 32-bit targets when the addend is larger than 0x80000000. - (`D149347 `_) -* ``--print-memory-usage`` has been implemented for memory regions. - (`D150644 `_) -* ``SHF_MERGE``, ``--icf=``, and ``--build-id=fast`` have switched to 64-bit xxh3. - (`D154813 `_) -* Quoted output section names can now be used in linker scripts. - (`#60496 `_) -* ``MEMORY`` can now be used without a ``SECTIONS`` command. - (`D145132 `_) -* ``REVERSE`` can now be used in input section descriptions to reverse the order of input sections. - (`D145381 `_) -* Program header assignment can now be used within ``OVERLAY``. This functionality was accidentally lost in 2020. - (`D150445 `_) -* Operators ``^`` and ``^=`` can now be used in linker scripts. -* LoongArch is now supported. -* ``DT_AARCH64_MEMTAG_*`` dynamic tags are now supported. - (`D143769 `_) -* AArch32 port now supports BE-8 and BE-32 modes for big-endian. - (`D140201 `_) - (`D140202 `_) - (`D150870 `_) -* ``R_ARM_THM_ALU_ABS_G*`` relocations are now supported. - (`D153407 `_) -* ``.ARM.exidx`` sections may start at non-zero output section offset. - (`D148033 `_) -* Arm Cortex-M Security Extensions is now implemented. - (`D139092 `_) -* BTI landing pads are now added to PLT entries accessed by range extension thunks or relative vtables. - (`D148704 `_) - (`D153264 `_) -* AArch64 short range thunk has been implemented to mitigate the performance loss of a long range thunk. - (`D148701 `_) -* ``R_AVR_8_LO8/R_AVR_8_HI8/R_AVR_8_HLO8/R_AVR_LO8_LDI_GS/R_AVR_HI8_LDI_GS`` have been implemented. - (`D147100 `_) - (`D147364 `_) -* ``--no-power10-stubs`` now works for PowerPC64. -* ``DT_PPC64_OPT`` is now supported; - (`D150631 `_) -* ``PT_RISCV_ATTRIBUTES`` is added to include the SHT_RISCV_ATTRIBUTES section. - (`D152065 `_) -* ``R_RISCV_PLT32`` is added to support C++ relative vtables. - (`D143115 `_) -* RISC-V global pointer relaxation has been implemented. Specify ``--relax-gp`` to enable the linker relaxation. - (`D143673 `_) -* The symbol value of ``foo`` is correctly handled when ``--wrap=foo`` and RISC-V linker relaxation are used. - (`D151768 `_) -* x86-64 large data sections are now placed away from code sections to alleviate relocation overflow pressure. - (`D150510 `_) - Breaking changes ---------------- COFF Improvements ----------------- -* lld-link can now find libraries with relative paths that are relative to - `/libpath`. Before it would only be able to find libraries relative to the - current directory. - I.e. ``lld-link /libpath:c:\relative\root relative\path\my.lib`` where before - we would have to do ``lld-link /libpath:c:\relative\root\relative\path my.lib`` -* lld-link learned -print-search-paths that will print all the paths where it will - search for libraries. -* By default lld-link will now search for libraries in the toolchain directories. - Specifically it will search: - ``/lib``, ``/lib/clang//lib`` and - ``/lib/clang//lib/windows``. - MinGW Improvements ------------------ @@ -115,7 +43,3 @@ WebAssembly Improvements Fixes ##### - -* Arm exception index tables (.ARM.exidx sections) are now output - correctly when they are at a non zero offset within their output - section. (`D148033 `_) diff --git a/llvm/docs/ReleaseNotes.rst b/llvm/docs/ReleaseNotes.rst index a1ca57e..9bb824f 100644 --- a/llvm/docs/ReleaseNotes.rst +++ b/llvm/docs/ReleaseNotes.rst @@ -47,131 +47,26 @@ Non-comprehensive list of changes in this release Update on required toolchains to build LLVM ------------------------------------------- -With LLVM 17.x we raised the version requirement of CMake used to build LLVM. -The new requirements are as follows: - -* CMake >= 3.20.0 - Changes to the LLVM IR ---------------------- -* Typed pointers are no longer supported and the ``-opaque-pointers`` option - has been removed. See the `opaque pointers `__ - documentation for migration instructions. - -* The ``nofpclass`` attribute was introduced. This allows more - optimizations around special floating point value comparisons. - -* Introduced new ``llvm.ldexp`` and ``llvm.experimental.constrained.ldexp`` intrinsics. - -* Introduced new ``llvm.frexp`` intrinsic. - -* The constant expression variants of the following instructions have been - removed: - - * ``select`` - -* Introduced a set of experimental `convergence control intrinsics - `__ to explicitly define the semantics of convergent - operations. - Changes to LLVM infrastructure ------------------------------ -* The legacy optimization pipeline has been removed. - -* Alloca merging in the inliner has been removed, since it only worked with the - legacy inliner pass. Backend stack coloring should handle cases alloca - merging initially set out to handle. - -* InstructionSimplify APIs now require instructions be inserted into a - parent function. - -* A new FatLTO pipeline was added to support generating object files that have - both machine code and LTO compatible bitcode. See the :doc:`FatLTO` - documentation and the original - `RFC `_ - for more details. - Changes to building LLVM ------------------------ Changes to TableGen ------------------- -* Named arguments are supported. Arguments can be specified in the form of - ``name=value``. - Changes to Interprocedural Optimizations ---------------------------------------- Changes to the AArch64 Backend ------------------------------ -* Added Assembly Support for the 2022 A-profile extensions FEAT_GCS (Guarded - Control Stacks), FEAT_CHK (Check Feature Status), and FEAT_ATS1A. -* Support for preserve_all calling convention is added. -* Added support for missing arch extensions in the assembly directives - ``.arch +`` and ``.arch_extension``. -* Fixed handling of ``.arch `` in assembly, without using any ``+`` - suffix. Previously this had no effect at all if no extensions were supplied. - Now ``.arch `` can be used to enable all the extensions that are - included in a higher level than what is specified on the command line, - or for disabling unwanted extensions if setting it to a lower level. - This fixes `PR32873 `. - Changes to the AMDGPU Backend ----------------------------- -* More fine-grained synchronization around barriers for newer architectures - (gfx90a+, gfx10+). The AMDGPU backend now omits previously automatically - generated waitcnt instructions before barriers, allowing for more precise - control. Users must now use memory fences to implement fine-grained - synchronization strategies around barriers. Refer to `AMDGPU memory model - `__. - -* Address space 7, used for *buffer fat pointers* has been added. - It is non-integral and has 160-bit pointers (a 128-bit raw buffer resource and a - 32-bit offset) and 32-bit indices. This is part of ongoing work to improve - the usability of buffer operations. Refer to `AMDGPU address spaces - `__. - -* Address space 8, used for *buffer resources* has been added. - It is non-integral and has 128-bit pointers, which correspond to buffer - resources in the underlying hardware. These pointers should not be used with - `getelementptr` or other LLVM memory instructions, and can be created with - the `llvm.amdgcn.make.buffer.rsrc` intrinsic. Refer to `AMDGPU address spaces - `__. - -* New versions of the intrinsics for working with buffer resources have been added. - These `llvm.amdgcn.*.ptr.[t]buffer.*` intrinsics have the same semantics as - the old `llvm.amdgcn.*.[t]buffer.*` intrinsics, except that their `rsrc` - arguments are represented by a `ptr addrspace(8)` instead of a `<4 x i32>`. This - improves the interaction between AMDGPU buffer operations and the LLVM memory - model, and so the non `.ptr` intrinsics are deprecated. - -* Removed ``llvm.amdgcn.atomic.inc`` and ``llvm.amdgcn.atomic.dec`` - intrinsics. :ref:`atomicrmw ` should be used instead - with ``uinc_wrap`` and ``udec_wrap``. - -* Added llvm.amdgcn.log.f32 intrinsic. This provides direct access to - v_log_f32. - -* Added llvm.amdgcn.exp2.f32 intrinsic. This provides direct access to - v_exp_f32. - -* llvm.log2.f32, llvm.log10.f32, and llvm.log.f32 are now lowered - accurately. Use llvm.amdgcn.log.f32 to access the old behavior for - llvm.log2.f32. - -* llvm.exp2.f32 and llvm.exp.f32 are now lowered accurately. Use - llvm.amdgcn.exp2.f32 to access the old behavior for llvm.exp2.f32. - -* Implemented new 1ulp IEEE lowering strategy for float reciprocal - which saves 2 instructions. This is used by default for OpenCL on - gfx9+. With ``contract`` flags, this will fold into a 1 ulp rsqrt. - -* Implemented new 2ulp IEEE lowering strategy for float - reciprocal. This is used by default for OpenCL on gfx9+. * `llvm.sqrt.f64` is now lowered correctly. Use `llvm.amdgcn.sqrt.f64` for raw instruction access. @@ -179,134 +74,36 @@ Changes to the AMDGPU Backend Changes to the ARM Backend -------------------------- -- The hard-float ABI is now available in Armv8.1-M configurations that - have integer MVE instructions (and therefore have FP registers) but - no scalar or vector floating point computation. - -- The ``.arm`` directive now aligns code to the next 4-byte boundary, and - the ``.thumb`` directive aligns code to the next 2-byte boundary. - Changes to the AVR Backend -------------------------- -* ... - Changes to the DirectX Backend ------------------------------ Changes to the Hexagon Backend ------------------------------ -* ... - Changes to the LoongArch Backend -------------------------------- -* Adds assembler/disassembler support for the LSX, LASX, LVZ and LBT ISA extensions. -* The ``lp64s`` ABI is supported now and has been tested on Rust bare-matal target. -* A target feature ``ual`` is introduced to allow unaligned memory accesses and - this feature is enabled by default for generic 64-bit processors. -* Adds support for the ``large`` code model, which is equivalent to GCC's ``extreme`` one. -* Assorted codegen improvements. -* llvm-objcopy now supports processing LoongArch objects. - Changes to the MIPS Backend --------------------------- -* ... - Changes to the PowerPC Backend ------------------------------ -* A new option ``-mxcoff-roptr`` is added to ``clang`` and ``llc``. When this - option is present, constant objects with relocatable address values are put - into the RO data section. This option should be used with the ``-fdata-sections`` - option, and is not supported with ``-fno-data-sections``. The option is - only supported on AIX. -* On AIX, teach the profile runtime to check for a build-id string; such string - can be created by the -mxcoff-build-id option. -* Removed ``-ppc-quadword-atomics`` which only affected lock-free quadword - atomics on AIX. Now backend generates lock-free quadword atomics code on AIX - by default. To support lock-free quadword atomics in libatomic, the OS level - must be at least AIX 7.2 TL5 SP3 with libc++.rte of version 17.1.1 or above - installed. - Changes to the RISC-V Backend ----------------------------- -* Assembler support for version 1.0.1 of the Zcb extension was added. -* Zca, Zcf, and Zcd extensions were upgraded to version 1.0.1. -* vsetvli intrinsics no longer have side effects. They may now be combined, - moved, deleted, etc. by optimizations. -* Adds support for the vendor-defined XTHeadBa (address-generation) extension. -* Adds support for the vendor-defined XTHeadBb (basic bit-manipulation) extension. -* Adds support for the vendor-defined XTHeadBs (single-bit) extension. -* Adds support for the vendor-defined XTHeadCondMov (conditional move) extension. -* Adds support for the vendor-defined XTHeadMac (multiply-accumulate instructions) extension. -* Added support for the vendor-defined XTHeadMemPair (two-GPR memory operations) - extension disassembler/assembler. -* Added support for the vendor-defined XTHeadMemIdx (indexed memory operations) - extension disassembler/assembler. -* Added support for the vendor-defined Xsfvcp (SiFive VCIX) extension - disassembler/assembler. -* Added support for the vendor-defined Xsfcie (SiFive CIE) extension - disassembler/assembler. -* Support for the now-ratified Zawrs extension is no longer experimental. -* Adds support for the vendor-defined XTHeadCmo (cache management operations) extension. -* Adds support for the vendor-defined XTHeadSync (multi-core synchronization instructions) extension. -* Added support for the vendor-defined XTHeadFMemIdx (indexed memory operations for floating point) extension. -* Assembler support for RV64E was added. -* Assembler support was added for the experimental Zicond (integer conditional - operations) extension. -* I, F, D, and A extension versions have been update to the 20191214 spec versions. - New version I2.1, F2.2, D2.2, A2.1. This should not impact code generation. - Immpacts versions accepted in ``-march`` and reported in ELF attributes. -* Changed the ShadowCallStack register from ``x18`` (``s2``) to ``x3`` - (``gp``). Note this breaks the existing non-standard ABI for ShadowCallStack - on RISC-V, but conforms with the new "platform register" defined in the - RISC-V psABI (for more details see the - `psABI discussion `_). -* Added support for Zfa extension version 0.2. -* Updated support experimental vector crypto extensions to version 0.5.1 of - the specification. -* Removed N extension (User-Level Interrupts) CSR names in the assembler. -* ``RISCV::parseCPUKind`` and ``RISCV::checkCPUKind`` were merged into a single - ``RISCV::parseCPU``. The ``CPUKind`` enum is no longer part of the - RISCVTargetParser.h interface. Similar for ``parseTuneCPUkind`` and - ``checkTuneCPUKind``. -* Add sifive-x280 processor. -* Zve32f is no longer allowed with Zfinx. Zve64d is no longer allowed with - Zdinx. -* Assembly support was added for the experimental Zfbfmin (scalar BF16 - conversions), Zvfbfmin (vector BF16 conversions), and Zvfbfwma (vector BF16 - widening mul-add) extensions. -* Added assembler/disassembler support for the experimental Zacas (atomic - compare-and-swap) extension. -* Zvfh extension version was upgraded to 1.0 and is no longer experimental. - Changes to the WebAssembly Backend ---------------------------------- -* Function annotations (``__attribute__((annotate()))``) - now generate custom sections in the Wasm output file. A custom section - for each unique name will be created that contains each function - index the annotation applies to. - Changes to the Windows Target ----------------------------- Changes to the X86 Backend -------------------------- -* ``__builtin_unpredictable`` (unpredictable metadata in LLVM IR), is handled by X86 Backend. - ``X86CmovConversion`` pass now respects this builtin and does not convert CMOVs to branches. -* Add support for the ``PBNDKB`` instruction. -* Support ISA of ``SHA512``. -* Support ISA of ``SM3``. -* Support ISA of ``SM4``. -* Support ISA of ``AVX-VNNI-INT16``. -* ``-mcpu=graniterapids-d`` is now supported. - Changes to the OCaml bindings ----------------------------- @@ -319,112 +116,27 @@ Changes to the Python bindings Changes to the C API -------------------- -* ``LLVMContextSetOpaquePointers``, a temporary API to pin to legacy typed - pointer, has been removed. -* Functions for adding legacy passes like ``LLVMAddInstructionCombiningPass`` - have been removed. -* Removed ``LLVMPassManagerBuilderRef`` and functions interacting with it. - These belonged to the no longer supported legacy pass manager. -* Functions for initializing legacy passes like ``LLVMInitializeInstCombine`` - have been removed. Calls to such functions can simply be dropped, as they are - no longer necessary. -* ``LLVMPassRegistryRef`` and ``LLVMGetGlobalPassRegistry``, which were only - useful in conjunction with initialization functions, have been removed. -* As part of the opaque pointer transition, ``LLVMGetElementType`` no longer - gives the pointee type of a pointer type. -* 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: - - * ``LLVMConstSelect`` - Changes to the CodeGen infrastructure ------------------------------------- -* ``llvm.memcpy``, ``llvm.memmove`` and ``llvm.memset`` are now - expanded into loops by default for targets which do not report the - corresponding library function is available. - Changes to the Metadata Info --------------------------------- Changes to the Debug Info --------------------------------- -* The DWARFv5 feature of attaching ``DW_AT_default_value`` to defaulted template - parameters will now be available in any non-strict DWARF mode and in a wider - range of cases than previously. - (`D139953 `_, - `D139988 `_) - -* The ``DW_AT_name`` on ``DW_AT_typedef``\ s for alias templates will now omit - defaulted template parameters. (`D142268 `_) - -* The experimental ``@llvm.dbg.addr`` intrinsic has been removed (`D144801 - `_). IR inputs with this intrinsic are - auto-upgraded to ``@llvm.dbg.value`` with ``DW_OP_deref`` appended to the - ``DIExpression`` (`D144793 `_). - -* When a template class annotated with the ``[[clang::preferred_name]]`` attribute - were to appear in a ``DW_AT_type``, the type will now be that of the preferred_name - instead. This change is only enabled when compiling with `-glldb`. - (`D145803 `_) - Changes to the LLVM tools --------------------------------- -* llvm-lib now supports the /def option for generating a Windows import library from a definition file. - -* Made significant changes to JSON output format of `llvm-readobj`/`llvm-readelf` - to improve correctness and clarity. Changes to LLDB --------------------------------- -* In the results of commands such as ``expr`` and ``frame var``, type summaries will now - omit defaulted template parameters. The full template parameter list can still be - viewed with ``expr --raw-output``/``frame var --raw-output``. (`D141828 `_) - -* LLDB is now able to show the subtype of signals found in a core file. For example - memory tagging specific segfaults such as ``SIGSEGV: sync tag check fault``. - -* LLDB can now display register fields if they are described in target XML sent - by a debug server such as ``gdbserver`` (``lldb-server`` does not currently produce - this information). Fields are only printed when reading named registers, for - example ``register read cpsr``. They are not shown when reading a register set, - ``register read -s 0``. - -* A new command ``register info`` was added. This command will tell you everything that - LLDB knows about a register. Based on what LLDB already knows and what the debug - server tells it. Including but not limited to, the size, where it is read from and - the fields that the register contains. - Changes to Sanitizers --------------------- -* For Darwin users that override weak symbols, note that the dynamic linker will - only consider symbols in other mach-o modules which themselves contain at - least one weak symbol. A consequence is that if your program or dylib contains - an intended override of a weak symbol, then it must contain at least one weak - symbol as well for the override to take effect. - - Example: - - .. code-block:: c - - // Add this to make sure your override takes effect - __attribute__((weak,unused)) unsigned __enableOverrides; - - // Example override - extern "C" const char *__asan_default_options() { ... } Other Changes ------------- -* ``llvm::demangle`` now takes a ``std::string_view`` rather than a - ``const std::string&``. Be careful passing temporaries into - ``llvm::demangle`` that don't outlive the expression using - ``llvm::demangle``. - External Open Source Projects Using LLVM 15 =========================================== diff --git a/openmp/docs/ReleaseNotes.rst b/openmp/docs/ReleaseNotes.rst index 5a89ee6..3eeaf5c 100644 --- a/openmp/docs/ReleaseNotes.rst +++ b/openmp/docs/ReleaseNotes.rst @@ -19,13 +19,3 @@ from the `LLVM releases web site `_. Non-comprehensive list of changes in this release ================================================= - -- Removed the "old" device plugins along with support for the ``remote`` and - ``ve`` plugins -- Added basic experimental support for ``libc`` functions on the GPU via the - `LLVM C Library for GPUs `_. -- Added minimal support for calling host functions from the device using the - ``libc`` interface, see this `example - `_. -- Fixed the implementation of ``omp_get_wtime`` for AMDGPU targets. -- Added vendor agnostic OMPT callback support for OpenMP-based device offload. diff --git a/polly/docs/ReleaseNotes.rst b/polly/docs/ReleaseNotes.rst index 691b6e6..f7c9689 100644 --- a/polly/docs/ReleaseNotes.rst +++ b/polly/docs/ReleaseNotes.rst @@ -11,15 +11,3 @@ In Polly |version| the following important changes have been incorporated. the new features that have recently been committed to our development branch. - -- Support for -polly-vectorizer=polly has been removed. Polly's internal - vectorizer is not well maintained and is known to not work in some cases - such as region ScopStmts. Unlike LLVM's LoopVectorize pass it also does - not have a target-dependent cost heuristics, and we recommend using - LoopVectorize instead of -polly-vectorizer=polly. - - In the future we hope that Polly can collaborate better with LoopVectorize, - like Polly marking a loop is safe to vectorize with a specific simd width, - instead of replicating its functionality. - -- Polly-ACC has been removed. diff --git a/pstl/docs/ReleaseNotes.rst b/pstl/docs/ReleaseNotes.rst index 804e2a5..61bee08 100644 --- a/pstl/docs/ReleaseNotes.rst +++ b/pstl/docs/ReleaseNotes.rst @@ -1,5 +1,5 @@ ======================================= -PSTL 17.0.0 (In-Progress) Release Notes +PSTL 18.0.0 (In-Progress) Release Notes ======================================= .. contents:: @@ -30,7 +30,7 @@ web page, this document applies to the *next* release, not the current one. To see the release notes for a specific release, please see the `releases page `_. -What's New in PSTL 17.0.0? +What's New in PSTL 18.0.0? ========================== New Features -- cgit v1.1