diff --git a/clang-tools-extra/docs/ReleaseNotes.rst b/clang-tools-extra/docs/ReleaseNotes.rst index 434dcd955679..e602fceda6b1 100644 --- a/clang-tools-extra/docs/ReleaseNotes.rst +++ b/clang-tools-extra/docs/ReleaseNotes.rst @@ -81,8 +81,6 @@ Miscellaneous Improvements to clang-doc ------------------------- -- The default executor was changed to standalone to match other tools. - Improvements to clang-query --------------------------- @@ -96,134 +94,15 @@ The improvements are... Improvements to clang-tidy -------------------------- -- Change to Python 3 in the shebang of `add_new_check.py` and `rename_check.py`, - as the existing code is not compatible with Python 2. - -- Fix a minor bug in `add_new_check.py` to only traverse subdirectories - when updating the list of checks in the documentation. - -- Deprecate the global configuration file option `AnalyzeTemporaryDtors`, - which is no longer in use. The option will be fully removed in - :program:`clang-tidy` version 18. - New checks ^^^^^^^^^^ -- New :doc:`bugprone-suspicious-realloc-usage - ` check. - - Finds usages of ``realloc`` where the return value is assigned to the - same expression as passed to the first argument. - -- New :doc:`cppcoreguidelines-avoid-const-or-ref-data-members - ` check. - - Warns when a struct or class uses const or reference (lvalue or rvalue) data members. - -- New :doc:`cppcoreguidelines-avoid-do-while - ` check. - - Warns when using ``do-while`` loops. - -- New :doc:`cppcoreguidelines-avoid-reference-coroutine-parameters - ` check. - - Warns on coroutines that accept reference parameters. - -- New :doc:`misc-use-anonymous-namespace - ` check. - - Warns when using ``static`` function or variables at global scope, and suggests - moving them into an anonymous namespace. - -- New :doc:`bugprone-standalone-empty ` check. - - Warns when `empty()` is used on a range and the result is ignored. Suggests `clear()` - if it is an existing member function. - New check aliases ^^^^^^^^^^^^^^^^^ -- New alias :doc:`cert-msc54-cpp - ` to - :doc:`bugprone-signal-handler - ` was added. - - Changes in existing checks ^^^^^^^^^^^^^^^^^^^^^^^^^^ -- Fixed a false positive in :doc:`bugprone-assignment-in-if-condition - ` check when there - was an assignement in a lambda found in the condition of an ``if``. - -- Improved :doc:`bugprone-signal-handler - ` check. Partial - support for C++14 signal handler rules was added. Bug report generation was - improved. - -- Fixed a false positive in :doc:`cppcoreguidelines-pro-type-member-init - ` when warnings - would be emitted for uninitialized members of an anonymous union despite - there being an initializer for one of the other members. - -- Fixed false positives in :doc:`google-objc-avoid-throwing-exception - ` check for exceptions - thrown by code emitted from macros in system headers. - -- Improved :doc:`misc-redundant-expression ` - check. - - The check now skips concept definitions since redundant expressions still make sense - inside them. - -- Improved :doc:`modernize-loop-convert ` - to check for container functions ``begin``/``end`` etc on base classes of the container - type, instead of only as direct members of the container type itself. - -- Improved :doc:`modernize-use-emplace ` - check. - - The check now supports detecting inefficient invocations of ``push`` and - ``push_front`` on STL-style containers and replacing them with ``emplace`` - or ``emplace_front``. - - The check now supports detecting alias cases of ``push_back`` ``push`` and - ``push_front`` on STL-style containers and replacing them with ``emplace_back``, - ``emplace`` or ``emplace_front``. - -- Improved :doc:`modernize-use-equals-default ` - check. - - The check now skips unions/union-like classes since in this case a default constructor - with empty body is not equivalent to the explicitly defaulted one, variadic constructors - since they cannot be explicitly defaulted. The check also skips copy assignment operators - with nonstandard return types, template constructors, private/protected default constructors - for C++17 or earlier. The automatic fixit has been adjusted to avoid adding superfluous - semicolon. The check is restricted to C++11 or later. - -- Change the default behavior of :doc:`readability-avoid-const-params-in-decls - ` to not - warn about `const` value parameters of declarations inside macros. - -- Fixed crashes in :doc:`readability-braces-around-statements - ` and - :doc:`readability-simplify-boolean-expr ` - when using a C++23 ``if consteval`` statement. - -- Change the behavior of :doc:`readability-const-return-type - ` to not - warn about `const` return types in overridden functions since the derived - class cannot always choose to change the function signature. - -- Change the default behavior of :doc:`readability-const-return-type - ` to not - warn about `const` value parameters of declarations inside macros. - -- Support removing ``c_str`` calls from ``std::string_view`` constructor calls in - :doc:`readability-redundant-string-cstr ` - check. - Removed checks ^^^^^^^^^^^^^^ diff --git a/clang/docs/ReleaseNotes.rst b/clang/docs/ReleaseNotes.rst index 136f47bd2884..e105f3e57e57 100644 --- a/clang/docs/ReleaseNotes.rst +++ b/clang/docs/ReleaseNotes.rst @@ -42,160 +42,6 @@ These changes are ones which we think may surprise users when upgrading to Clang |release| because of the opportunity they pose for disruption to existing code bases. -- Clang will now correctly diagnose as ill-formed a constant expression where an - enum without a fixed underlying type is set to a value outside the range of - the enumeration's values. - - .. code-block:: c++ - - enum E { Zero, One, Two, Three, Four }; - constexpr E Val1 = (E)3; // Ok - constexpr E Val2 = (E)7; // Ok - constexpr E Val3 = (E)8; // Now diagnosed as out of the range [0, 7] - constexpr E Val4 = (E)-1; // Now diagnosed as out of the range [0, 7] - - Due to the extended period of time this bug was present in major C++ - implementations (including Clang), this error has the ability to be - downgraded into a warning (via: ``-Wno-error=enum-constexpr-conversion``) to - provide a transition period for users. This diagnostic is expected to turn - into an error-only diagnostic in the next Clang release. Fixes - `Issue 50055 `_. - -- The ``-Wimplicit-function-declaration`` and ``-Wimplicit-int`` warnings - now default to an error in C99, C11, and C17. As of C2x, - support for implicit function declarations and implicit int has been removed, - and the warning options will have no effect. Specifying ``-Wimplicit-int`` in - C89 mode will now issue warnings instead of being a noop. - - **NOTE**: We recommend that projects using configure scripts verify that the - results do not change before/after setting - ``-Werror=implicit-function-declarations`` or ``-Wimplicit-int`` to avoid - incompatibility with Clang 16. - -- ``-Wincompatible-function-pointer-types`` now defaults to an error in all C - language modes. It may be downgraded to a warning with - ``-Wno-error=incompatible-function-pointer-types`` or disabled entirely with - ``-Wno-incompatible-function-pointer-types``. - - **NOTE:** We recommend that projects using configure scripts verify that the - results do not change before/after setting - ``-Werror=incompatible-function-pointer-types`` to avoid incompatibility with - Clang 16. - - .. code-block:: c - - void func(const int *i); - void other(void) { - void (*fp)(int *) = func; // Previously a warning, now a downgradable error. - } - -- Clang now disallows types whose sizes aren't a multiple of their alignments - to be used as the element type of arrays. - - .. code-block:: c - - typedef char int8_a16 __attribute__((aligned(16))); - int8_a16 array[4]; // Now diagnosed as the element size not being a multiple of the array alignment. - -- When compiling for Windows in MSVC compatibility mode (for example by using - clang-cl), the compiler will now propagate dllimport/export declspecs in - explicit specializations of class template member functions (`Issue 54717 - `_): - - .. code-block:: c++ - - template struct __declspec(dllexport) S { - void f(); - }; - template<> void S::f() {} // clang-cl will now dllexport this. - - This matches what MSVC does, so it improves compatibility, but it can also - cause errors for code which clang-cl would previously accept, for example: - - .. code-block:: c++ - - template struct __declspec(dllexport) S { - void f(); - }; - template<> void S::f() = delete; // Error: cannot delete dllexport function. - - .. code-block:: c++ - - template struct __declspec(dllimport) S { - void f(); - }; - template<> void S::f() {}; // Error: cannot define dllimport function. - - These errors also match MSVC's behavior. - -- Clang now diagnoses indirection of ``void *`` in C++ mode as a warning which - defaults to an error. This is compatible with ISO C++, GCC, ICC, and MSVC. This - is also now a SFINAE error so constraint checking and SFINAE checking can be - compatible with other compilers. It is expected that this will be upgraded to - an error-only diagnostic in the next Clang release. - - .. code-block:: c++ - - void func(void *p) { - *p; // Now diagnosed as a warning-as-error. - } - -- Clang now diagnoses use of a bit-field as an instruction operand in Microsoft - style inline asm blocks as an error. Previously, a bit-field operand yielded - the address of the allocation unit the bit-field was stored within; reads or - writes therefore had the potential to read or write nearby bit-fields. This - change fixes `issue 57791 `_. - - .. code-block:: c++ - - typedef struct S { - unsigned bf:1; - } S; - void f(S s) { - __asm { - mov eax, s.bf // Now diagnosed as an error. - mov s.bf, eax // Now diagnosed as an error. - } - } - -- The ``-fexperimental-new-pass-manager`` and ``-fno-legacy-pass-manager`` - flags have been removed. These have been no-ops since 15.0.0. - -- As a side effect of implementing DR692/DR1395/DR1432, Clang now rejects some - overloaded function templates as ambiguous when one of the candidates has a - trailing parameter pack. - - .. code-block:: c++ - - template void g(T, T = T()); - template void g(T, U...); - void h() { - // This is rejected due to ambiguity between the pack and the - // default argument. Only parameters with arguments are considered during - // partial ordering of function templates. - g(42); - } - -- Clang's resource dir used to include the full clang version. It will now - include only the major version. The new resource directory is - ``$prefix/lib/clang/$CLANG_MAJOR_VERSION`` and can be queried using - ``clang -print-resource-dir``, just like before. - -- To match GCC, ``__ppc64__`` is no longer defined on PowerPC64 targets. Use - ``__powerpc64__`` instead. - -- ``-p`` is rejected for all targets which are not AIX or OpenBSD. ``-p`` led - to an ``-Wunused-command-line-argument`` warning in previous releases. - -- Clang now diagnoses non-inline externally-visible definitions in C++ - standard header units as per ``[module.import/6]``. Previously, in Clang-15, - these definitions were allowed. Note that such definitions are ODR - violations if the header is included more than once. - -- Clang now diagnoses if structs/unions with the same name are different in - different used modules. Behavior in C and Objective-C language modes now is - the same as in C++. - What's New in Clang |release|? ============================== Some of the major new features and improvements to Clang are listed @@ -208,385 +54,24 @@ Major New Features Bug Fixes --------- -- ``stdatomic.h`` will use the internal declarations when targeting pre-C++-23 - on Windows platforms as the MSVC support requires newer C++ standard. -- Correct ``_Static_assert`` to accept the same set of extended integer - constant expressions as is accpted in other contexts that accept them. - This fixes `Issue 57687 `_. -- Fixes an accepts-invalid bug in C when using a ``_Noreturn`` function - specifier on something other than a function declaration. This fixes - `Issue 56800 `_. -- Fix `#56772 `_ - invalid - destructor names were incorrectly accepted on template classes. -- Improve compile-times with large dynamic array allocations with trivial - constructors. This fixes - `Issue 56774 `_. -- No longer assert/miscompile when trying to make a vectorized ``_BitInt`` type - using the ``ext_vector_type`` attribute (the ``vector_size`` attribute was - already properly diagnosing this case). -- Fix clang not properly diagnosing the failing subexpression when chained - binary operators are used in a ``static_assert`` expression. -- Fix a crash when evaluating a multi-dimensional array's array filler - expression is element-dependent. This fixes - `Issue 50601 `_. -- Fixed a crash-on-valid with consteval evaluation of a list-initialized - constructor for a temporary object. This fixes - `Issue 55871 `_. -- Fix `#57008 `_ - Builtin - C++ language extension type traits instantiated by a template with unexpected - number of arguments cause an assertion fault. -- Fix multi-level pack expansion of undeclared function parameters. - This fixes `Issue 56094 `_. -- Fix `#57151 `_. - ``-Wcomma`` is emitted for void returning functions. -- ``-Wtautological-compare`` missed warnings for tautological comparisons - involving a negative integer literal. This fixes - `Issue 42918 `_. -- Fix a crash when generating code coverage information for an - ``if consteval`` statement. This fixes - `Issue 57377 `_. -- Fix assert that triggers a crash during template name lookup when a type was - incomplete but was not also a TagType. This fixes - `Issue 57387 `_. -- Fix a crash when emitting a concept-related diagnostic. This fixes - `Issue 57415 `_. -- Fix a crash when attempting to default a virtual constexpr non-special member - function in a derived class. This fixes - `Issue 57431 `_ -- Fix a crash where we attempt to define a deleted destructor. This fixes - `Issue 57516 `_ -- Fix ``__builtin_assume_aligned`` crash when the 1st arg is array type. This fixes - `Issue 57169 `_ -- Clang configuration files are now read through the virtual file system - rather than the physical one, if these are different. -- Clang will now no longer treat a C 'overloadable' function without a prototype as - a variadic function with the attribute. This should make further diagnostics more - clear. -- Fixes to builtin template emulation of regular templates. - `Issue 42102 `_ - `Issue 51928 `_ -- A SubstTemplateTypeParmType can now represent the pack index for a - substitution from an expanded pack. - `Issue 56099 `_ -- Fix `-Wpre-c++17-compat` crashing Clang when compiling C++20 code which - contains deduced template specializations. This Fixes - `Issue 57369 `_ - `Issue 57643 `_ - `Issue 57793 `_ -- Respect constructor constraints during class template argument deduction (CTAD). - This is the suggested resolution to CWG DR2628. - `Issue 57646 `_ - `Issue 43829 `_ -- Fixed a crash in C++20 mode in Clang and Clangd when compile source - with compilation errors. - `Issue 53628 `_ -- The template arguments of a variable template being accessed as a - member will now be represented in the AST. -- Fix incorrect handling of inline builtins with asm labels. -- Finished implementing C++ DR2565, which results in a requirement becoming - not satisfied in the event of an instantiation failures in a requires expression's - parameter list. We previously handled this correctly in a constraint evaluation - context, but not in a requires clause evaluated as a boolean. -- Address the thread identification problems in coroutines. - `Issue 47177 `_ - `Issue 47179 `_ -- Fix a crash upon stray coloncolon token in C2x mode. -- Reject non-type template arguments formed by casting a non-zero integer - to a pointer in pre-C++17 modes, instead of treating them as null - pointers. -- Fix template arguments of pointer and reference not taking the type as - part of their identity. - `Issue 47136 `_ -- Fix a crash when trying to form a recovery expression on a call inside a - constraint, which re-evaluated the same constraint. - `Issue 53213 `_ - `Issue 45736 `_ -- Fix an issue when performing constraints partial ordering on non-template - functions. `Issue 56154 `_ -- Fix handling of unexpanded packs in template argument expressions. - `Issue 58679 `_ -- Fix a crash when a ``btf_type_tag`` attribute is applied to the pointee of - a function pointer. -- Fix a number of recursively-instantiated constraint issues, which would possibly - result in a stack overflow. - `Issue 44304 `_ - `Issue 50891 `_ -- Clang 14 predeclared some builtin POSIX library functions in ``gnu2x`` mode, - and Clang 15 accidentally stopped predeclaring those functions in that - language mode. Clang 16 now predeclares those functions again. This fixes - `Issue 56607 `_. -- GNU attributes being applied prior to standard attributes would be handled - improperly, which was corrected to match the behaviour exhibited by GCC. - `Issue 58229 `_ -- The builtin type trait ``__is_aggregate`` now returns ``true`` for arrays of incomplete - types in accordance with the suggested fix for `LWG3823 `_ -- Fix bug with using enum that could lead to enumerators being treated as if - they were part of an overload set. This fixes - `Issue 58067 `_ - `Issue 59014 `_ - `Issue 54746 `_ -- Fix assert that triggers a crash during some types of list initialization that - generate a CXXTemporaryObjectExpr instead of a InitListExpr. This fixes - `Issue 58302 `_ - `Issue 58753 `_ - `Issue 59100 `_ -- Fix issue using __attribute__((format)) on non-variadic functions that expect - more than one formatted argument. -- Fix bug where constant evaluation treated a pointer to member that points to - a weak member as never being null. Such comparisons are now treated as - non-constant. -- Fix sanity check when value initializing an empty union so that it takes into - account anonymous structs which is a GNU extension. This fixes - `Issue 58800 `_ -- Fix an issue that triggers a crash if we instantiate a hidden friend functions. - This fixes `Issue 54457 `_ -- Fix an issue where -frewrite-includes generated line control directives with - incorrect line numbers in some cases when a header file used an end of line - character sequence that differed from the primary source file. - `Issue 59736 `_ -- In C mode, when ``e1`` has ``__attribute__((noreturn))`` but ``e2`` doesn't, - ``(c ? e1 : e2)`` is no longer considered noreturn. - `Issue 59792 `_ -- Fix an issue that makes Clang crash on lambda template parameters. This fixes - `Issue 57960 `_ -- Fix issue that the standard C++ modules importer will call global - constructor/destructor for the global varaibles in the importing modules. - This fixes `Issue 59765 `_ -- Reject in-class defaulting of previosly declared comparison operators. Fixes - `Issue 51227 `_. -- Fix the bug of inserting the ``ZeroInitializationFixit`` before the template - argument list of ``VarTemplateSpecializationDecl``. Improvements to Clang's diagnostics ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -- Disabled FIT-IT suggested for a case of bad conversion in system headers. -- Clang will now check compile-time determinable string literals as format strings. - Fixes `Issue 55805: `_. -- ``-Wformat`` now recognizes ``%b`` for the ``printf``/``scanf`` family of - functions and ``%B`` for the ``printf`` family of functions. Fixes - `Issue 56885: `_. -- Introduced ``-Wsingle-bit-bitfield-constant-conversion``, grouped under - ``-Wbitfield-constant-conversion``, which diagnoses implicit truncation when - ``1`` is assigned to a 1-bit signed integer bitfield. This fixes - `Issue 53253 `_. To reduce - potential false positives, this diagnostic will not diagnose use of the - ``true`` macro (from ``>`) in C language mode despite the macro - being defined to expand to ``1``. -- Clang will now print more information about failed static assertions. In - particular, simple static assertion expressions are evaluated to their - compile-time value and printed out if the assertion fails. -- Diagnostics about uninitialized ``constexpr`` varaibles have been improved - to mention the missing constant initializer. -- Correctly diagnose a future keyword if it exist as a keyword in the higher - language version and specifies in which version it will be a keyword. This - supports both c and c++ language. -- When diagnosing multi-level pack expansions of mismatched lengths, Clang will - now, in most cases, be able to point to the relevant outer parameter. -- ``no_sanitize("...")`` on a global variable for known but not relevant - sanitizers is now just a warning. It now says that this will be ignored - instead of incorrectly saying no_sanitize only applies to functions and - methods. -- No longer mention ``reinterpet_cast`` in the invalid constant expression - diagnostic note when in C mode. -- Clang will now give a more suitale diagnostic for declaration of block - scope identifiers that have external/internal linkage that has an initializer. - Fixes `Issue 57478: `_. -- New analysis pass will now help preserve sugar when combining deductions, in an - order agnostic way. This will be in effect when deducing template arguments, - when deducing function return type from multiple return statements, for the - conditional operator, and for most binary operations. Type sugar is combined - in a way that strips the sugar which is different between terms, and preserves - those which are common. -- Correctly diagnose use of an integer literal without a suffix whose - underlying type is ``long long`` or ``unsigned long long`` as an extension in - C89 mode . Clang previously only diagnosed if the literal had an explicit - ``LL`` suffix. -- Clang now correctly diagnoses index that refers past the last possible element - of FAM-like arrays. -- Clang now correctly diagnoses a warning when defercencing a void pointer in C mode. - This fixes `Issue 53631 `_ -- Clang will now diagnose an overload set where a candidate has a constraint that - refers to an expression with a previous error as nothing viable, so that it - doesn't generate strange cascading errors, particularly in cases where a - subsuming constraint fails, which would result in a less-specific overload to - be selected. -- Add a fix-it hint for the ``-Wdefaulted-function-deleted`` warning to - explicitly delete the function. -- Fixed an accidental duplicate diagnostic involving the declaration of a - function definition without a prototype which is preceded by a static - declaration of the function with a prototype. Fixes - `Issue 58181 `_. -- Copy-elided initialization of lock scopes is now handled differently in - ``-Wthread-safety-analysis``: annotations on the move constructor are no - longer taken into account, in favor of annotations on the function returning - the lock scope by value. This could result in new warnings if code depended - on the previous undocumented behavior. As a side effect of this change, - constructor calls outside of initializer expressions are no longer ignored, - which can result in new warnings (or make existing warnings disappear). -- The wording of diagnostics regarding arithmetic on fixed-sized arrays and - pointers is improved to include the type of the array and whether it's cast - to another type. This should improve comprehension for why an index is - out-of-bounds. -- Clang now correctly points to the problematic parameter for the ``-Wnonnull`` - warning. This fixes - `Issue 58273 `_. -- Introduced ``-Wcast-function-type-strict`` and - ``-Wincompatible-function-pointer-types-strict`` to warn about function type - mismatches in casts and assignments that may result in runtime indirect call - `Control-Flow Integrity (CFI) - `_ failures. The - ``-Wcast-function-type-strict`` diagnostic is grouped under - ``-Wcast-function-type`` as it identifies a more strict set of potentially - problematic function type casts. -- Clang will now disambiguate NTTP types when printing diagnostic that contain NTTP types. - Fixes `Issue 57562 `_. -- Better error recovery for pack expansion of expressions. - `Issue 58673 `_. -- Better diagnostics when the user has missed `auto` in a declaration. - `Issue 49129 `_. -- Clang now diagnoses use of invalid or reserved module names in a module - export declaration. Both are diagnosed as an error, but the diagnostic is - suppressed for use of reserved names in a system header. -- ``-Winteger-overflow`` will diagnose overflow in more cases. This fixes - `Issue 58944 `_. -- Clang has an internal limit of 2GB of preprocessed source code per - compilation, including source reachable through imported AST files such as - PCH or modules. When Clang hits this limit, it now produces notes mentioning - which header and source files are consuming large amounts of this space. - ``#pragma clang __debug sloc_usage`` can also be used to request this report. -- Clang no longer permits the keyword 'bool' in a concept declaration as a - concepts-ts compatibility extension. -- Clang now diagnoses overflow undefined behavior in a constant expression while - evaluating a compound assignment with remainder as operand. -- Add ``-Wreturn-local-addr``, a GCC alias for ``-Wreturn-stack-address``. -- Clang now suppresses ``-Wlogical-op-parentheses`` on ``(x && a || b)`` and ``(a || b && x)`` - only when ``x`` is a string literal. -- Clang will now reject the GNU extension address of label in coroutines explicitly. - This fixes `Issue 56436 `_. -- Clang now automatically adds ``[[clang::lifetimebound]]`` to the parameters of - ``std::move, std::forward`` et al, this enables Clang to diagnose more cases - where the returned reference outlives the object. Non-comprehensive list of changes in this release ------------------------------------------------- -- It's now possible to set the crash diagnostics directory through - the environment variable ``CLANG_CRASH_DIAGNOSTICS_DIR``. - The ``-fcrash-diagnostics-dir`` flag takes precedence. -- When using header modules, inclusion of a private header and violations of - the `use-declaration rules - `_ are now - diagnosed even when the includer is a textual header. This change can be - temporarily reversed with ``-Xclang - -fno-modules-validate-textual-header-includes``, but this flag will be - removed in a future Clang release. -- Unicode support has been updated to support Unicode 15.0. - New unicode codepoints are supported as appropriate in diagnostics, - C and C++ identifiers, and escape sequences. -- In identifiers, Clang allows a restricted set of additional mathematical symbols - as an extension. These symbols correspond to a proposed Unicode - `Mathematical notation profile for default identifiers - `_. - This resolves `Issue 54732 `_. -- Clang now supports loading multiple configuration files. The files from - default configuration paths are loaded first, unless ``--no-default-config`` - option is used. All files explicitly specified using ``--config=`` option - are loaded afterwards. -- When loading default configuration files, clang now unconditionally uses - the real target triple (respecting options such as ``--target=`` and ``-m32``) - rather than the executable prefix. The respective configuration files are - also loaded when clang is called via an executable without a prefix (e.g. - plain ``clang``). -- Default configuration paths were partially changed. Clang now attempts to load - ``-.cfg`` first, and falls back to loading both - ``.cfg`` and ``.cfg`` if the former is not found. `Triple` - is the target triple and `driver` first tries the canonical name - for the driver (respecting ``--driver-mode=``), and then the name found - in the executable. -- If the environment variable ``SOURCE_DATE_EPOCH`` is set, it specifies a UNIX - timestamp to be used in replacement of the current date and time in - the ``__DATE__``, ``__TIME__``, and ``__TIMESTAMP__`` macros. See - ``_. -- Clang now supports ``__has_constexpr_builtin`` function-like macro that - evaluates to 1 if the builtin is supported and can be constant evaluated. - It can be used to writing conditionally constexpr code that uses builtins. -- The time profiler (using ``-ftime-trace`` option) now traces various constant - evaluation events. -- Clang can now generate a PCH when using ``-fdelayed-template-parsing`` for - code with templates containing loop hint pragmas, OpenMP pragmas, and - ``#pragma unused``. -- Now diagnoses use of a member access expression or array subscript expression - within ``__builtin_offsetof`` and ``offsetof`` as being a Clang extension. New Compiler Flags ------------------ -- Implemented `-fcoro-aligned-allocation` flag. This flag implements - Option 2 of P2014R0 aligned allocation of coroutine frames - (`P2014R0 `_). - With this flag, the coroutines will try to lookup aligned allocation - function all the time. The compiler will emit an error if it fails to - find aligned allocation function. So if the user code implemented self - defined allocation function for coroutines, the existing code will be - broken. A little divergence with P2014R0 is that clang will lookup - `::operator new(size_­t, std::aligned_val_t, nothrow_­t)` if there is - `get_­return_­object_­on_­allocation_­failure`. We feel this is more consistent - with the intention. - -- Added ``--no-default-config`` to disable automatically loading configuration - files using default paths. - -- Added the new level, ``3``, to the ``-fstrict-flex-arrays=`` flag. The new - level is the strict, standards-conforming mode for flexible array members. It - recognizes only incomplete arrays as flexible array members (which is how the - feature is defined by the C standard). - - .. code-block:: c - - struct foo { - int a; - int b[]; // Flexible array member. - }; - - struct bar { - int a; - int b[0]; // NOT a flexible array member. - }; - -- Added ``-fmodule-output`` to enable the one-phase compilation model for - standard C++ modules. See - `Standard C++ Modules `_ - for more information. - -- Added ``-Rpass-analysis=stack-frame-layout`` which will emit new diagnostic - information about the layout of stack frames through the remarks - infrastructure. Since it uses remarks the diagnostic information is available - both on the CLI, and in a machine readable format. - Deprecated Compiler Flags ------------------------- -- ``-enable-trivial-auto-var-init-zero-knowing-it-will-be-removed-from-clang`` - has been deprecated. The flag will be removed in Clang 18. - ``-ftrivial-auto-var-init=zero`` is now available unconditionally, to be - compatible with GCC. -- ``-fcoroutines-ts`` has been deprecated. The flag will be removed in Clang 17. - Please use ``-std=c++20`` or higher to use standard C++ coroutines instead. -- ``-fmodules-ts`` has been deprecated. The flag will be removed in Clang 17. - Please use ``-std=c++20`` or higher to use standard C++ modules instead. Modified Compiler Flags ----------------------- -- Clang now permits specifying ``--config=`` multiple times, to load multiple - configuration files. - -- The option ``-rtlib=platform`` can now be used for all targets to override - a different option value (either one set earlier on the command line, or a - built-in hardcoded default). (Previously the MSVC and Darwin targets didn't - allow this parameter combination.) Removed Compiler Flags ------------------------- -- Clang now no longer supports ``-cc1 -fconcepts-ts``. This flag has been deprecated - and encouraged use of ``-std=c++20`` since Clang 10, so we're now removing it. New Pragmas in Clang -------------------- @@ -594,237 +79,31 @@ New Pragmas in Clang Attribute Changes in Clang -------------------------- -- Added support for ``__attribute__((guard(nocf)))`` and C++-style - ``[[clang::guard(nocf)]]``, which is equivalent to ``__declspec(guard(nocf))`` - when using the MSVC environment. This is to support enabling Windows Control - Flow Guard checks with the ability to disable them for specific functions when - using the MinGW environment. This attribute is only available for Windows - targets. - -- Introduced a new function attribute ``__attribute__((nouwtable))`` to suppress - LLVM IR ``uwtable`` function attribute. - -- Updated the value returned by ``__has_c_attribute(nodiscard)`` to ``202003L`` - based on the final date specified by the C2x committee draft. We already - supported the ability to specify a message in the attribute, so there were no - changes to the attribute behavior. - -- Updated the value returned by ``__has_c_attribute(fallthrough)`` to ``201910L`` - based on the final date specified by the C2x committee draft. We previously - used ``201904L`` (the date the proposal was seen by the committee) by mistake. - There were no other changes to the attribute behavior. - -- Introduced a new record declaration attribute ``__attribute__((enforce_read_only_placement))`` - to support analysis of instances of a given type focused on read-only program - memory placement. It emits a warning if something in the code provably prevents - an instance from a read-only memory placement. - -- Introduced new attribute ``__attribute__((target_version("cpu_features")))`` - and expanded the functionality of the existing attribute - ``__attribute__((target_clones("cpu_features1","cpu_features2",...)))`` to - support Function Multi Versioning on AArch64 target. It detects at runtime - which function versions are supported by CPU and calls the one with highest - priority. Refer to `clang attributes - `_ for - more details. Windows Support --------------- -- For the MinGW driver, added the options ``-mguard=none``, ``-mguard=cf`` and - ``-mguard=cf-nochecks`` (equivalent to ``/guard:cf-``, ``/guard:cf`` and - ``/guard:cf,nochecks`` in clang-cl) for enabling Control Flow Guard checks - and generation of address-taken function table. - -- Switched from SHA1 to BLAKE3 for PDB type hashing / ``-gcodeview-ghash`` - -- Fixed code generation with emulated TLS, when the emulated TLS is enabled - by default (with downstream patches; no upstream configurations default - to this configuration, but some mingw downstreams change the default - in this way). - -- Improved detection of MinGW cross sysroots for finding sysroots provided - by Linux distributions such as Fedora. Also improved such setups by - avoiding to include ``/usr/include`` among the include paths when cross - compiling with a cross sysroot based in ``/usr``. AIX Support ----------- -* When using ``-shared``, the clang driver now invokes llvm-nm to create an - export list if the user doesn't specify one via linker flag or pass an - alternative export control option. C Language Changes in Clang --------------------------- -- Adjusted ``-Wformat`` warnings according to `WG14 N2562 `_. - Clang will now consider default argument promotions in ``printf``, and remove - unnecessary warnings. Especially ``int`` argument with specifier ``%hhd`` and - ``%hd``. C2x Feature Support ------------------- -- Implemented `WG14 N2662 `_, - so the [[maybe_unused]] attribute may be applied to a label to silence an - ``-Wunused-label`` warning. -- Implemented `WG14 N2508 `_, - so labels can placed everywhere inside a compound statement. -- Implemented `WG14 N2927 `_, - the Not-so-magic ``typeof`` operator. Also implemented - `WG14 N2930 `_, - renaming ``remove_quals``, so the ``typeof_unqual`` operator is also - supported. Both of these operators are supported only in C2x mode. The - ``typeof`` operator specifies the type of the given parenthesized expression - operand or type name, including all qualifiers. The ``typeof_unqual`` - operator is similar to ``typeof`` except that all qualifiers are removed, - including atomic type qualification and type attributes which behave like a - qualifier, such as an address space attribute. - - .. code-block:: c - - __attribute__((address_space(1))) const _Atomic int Val; - typeof(Val) OtherVal; // type is '__attribute__((address_space(1))) const _Atomic int' - typeof_unqual(Val) OtherValUnqual; // type is 'int' - -- Implemented `WG14 N3042 `_, - Introduce the nullptr constant. This introduces a new type ``nullptr_t``, - declared in ```` which represents the type of the null pointer named - constant, ``nullptr``. This constant is implicitly convertible to any pointer - type and represents a type-safe null value. - - Note, there are some known incompatibilities with this same feature in C++. - The following examples were discovered during implementation and are subject - to change depending on how national body comments are resolved by WG14 (C - status is based on standard requirements, not necessarily implementation - behavior): - - .. code-block:: c - - nullptr_t null_val; - (nullptr_t)nullptr; // Rejected in C, accepted in C++, Clang accepts - (void)(1 ? nullptr : 0); // Rejected in C, accepted in C++, Clang rejects - (void)(1 ? null_val : 0); // Rejected in C, accepted in C++, Clang rejects - bool b1 = nullptr; // Accepted in C, rejected in C++, Clang rejects - b1 = null_val; // Accepted in C, rejected in C++, Clang rejects - null_val = 0; // Rejected in C, accepted in C++, Clang rejects - - void func(nullptr_t); - func(0); // Rejected in C, accepted in C++, Clang rejects - -- Implemented `WG14 N2975 `_, - Relax requirements for va_start. In C2x mode, functions can now be declared - fully variadic and the ``va_start`` macro no longer requires passing a second - argument (though it accepts a second argument for backwards compatibility). - If a second argument is passed, it is neither expanded nor evaluated in C2x - mode. - - .. code-block:: c - - void func(...) { // Invalid in C17 and earlier, valid in C2x and later. - va_list list; - va_start(list); // Invalid in C17 and earlier, valid in C2x and later. - va_end(list); - } - -- Diagnose type definitions in the ``type`` argument of ``__builtin_offsetof`` - as a conforming C extension according to - `WG14 N2350 `_. - Also documents the builtin appropriately. Note, a type definition in C++ - continues to be rejected. C++ Language Changes in Clang ----------------------------- -- Implemented `DR692 `_, `DR1395 `_, - and `DR1432 `_. The fix for DR1432 is speculative since the - issue is still open and has no proposed resolution at this time. A speculative fix - for DR1432 is needed to prevent regressions that would otherwise occur due to DR692. -- Clang's default C++/ObjC++ standard is now ``gnu++17`` instead of ``gnu++14``. - This means Clang will by default accept code using features from C++17 and - conforming GNU extensions. Projects incompatible with C++17 can add - ``-std=gnu++14`` to their build settings to restore the previous behaviour. -- Implemented DR2358 allowing init captures in lambdas in default arguments. -- implemented `DR2654 `_ which undeprecates - all compound assignements operations on volatile qualified variables. -- Implemented DR2631. Invalid ``consteval`` calls in default arguments and default - member initializers are diagnosed when and if the default is used. - This Fixes `Issue 56379 `_ - and changes the value of ``std::source_location::current()`` - used in default parameters calls compared to previous versions of Clang. C++20 Feature Support ^^^^^^^^^^^^^^^^^^^^^ -- Support capturing structured bindings in lambdas - (`P1091R3 `_ and `P1381R1 `_). - This fixes issues `Issue 52720 `_, - `Issue 54300 `_, - `Issue 54301 `_, - and `Issue 49430 `_. -- Consider explicitly defaulted constexpr/consteval special member function - template instantiation to be constexpr/consteval even though a call to such - a function cannot appear in a constant expression. - (C++14 [dcl.constexpr]p6 (CWG DR647/CWG DR1358)) -- Correctly defer dependent immediate function invocations until template instantiation. - This fixes `Issue 55601 `_. -- Implemented "Conditionally Trivial Special Member Functions" (`P0848 `_). - Note: The handling of deleted functions is not yet compliant, as Clang - does not implement `DR1496 `_ - and `DR1734 `_. -- Class member variables are now in scope when parsing a ``requires`` clause. Fixes - `Issue 55216 `_. -- Correctly set expression evaluation context as 'immediate function context' in - consteval functions. - This fixes `Issue 51182 `_. -- Fixes an assert crash caused by looking up missing vtable information on ``consteval`` - virtual functions. Fixes `Issue 55065 `_. -- Skip rebuilding lambda expressions in arguments of immediate invocations. - This fixes `Issue 56183 `_, - `Issue 51695 `_, - `Issue 50455 `_, - `Issue 54872 `_, - `Issue 54587 `_. -- Clang now correctly delays the instantiation of function constraints until - the time of checking, which should now allow the libstdc++ ranges implementation - to work for at least trivial examples. This fixes - `Issue 44178 `_. -- Clang implements DR2621, correcting a defect in ``using enum`` handling. The - name is found via ordinary lookup so typedefs are found. -- Implemented `P0634r3 `_, - which removes the requirement for the ``typename`` keyword in certain contexts. -- Implemented The Equality Operator You Are Looking For (`P2468 `_). -- Implemented `P2113R0: Proposed resolution for 2019 comment CA 112 `_ - ([temp.func.order]p6.2.1 is not implemented, matching GCC). -- Implemented `P0857R0 `_, - which specifies constrained lambdas and constrained template *template-parameter*\s. -- Required parameter pack to be provided at the end of the concept parameter list. This - fixes `Issue 48182 `_. - -- Do not hide templated base members introduced via using-decl in derived class - (useful specially for constrained members). Fixes `GH50886 `_. -- Implemented CWG2635 as a Defect Report, which prohibits structured bindings from being constrained. -- Correctly handle access-checks in requires expression. Fixes `GH53364 `_, - `GH53334 `_. - -- Implemented `P0960R3: `_ - and `P1975R0: `_, - which allows parenthesized aggregate-initialization. - -- Fixed an issue with concept requirement evaluation, where we incorrectly allowed implicit - conversions to bool for a requirement. This fixes `GH54524 `_. C++2b Feature Support ^^^^^^^^^^^^^^^^^^^^^ -- Support label at end of compound statement (`P2324 `_). -- Implemented `P1169R4: static operator() `_ and `P2589R1: static operator[] `_. -- Implemented "char8_t Compatibility and Portability Fix" (`P2513R3 `_). - This change was applied to C++20 as a Defect Report. -- Implemented "Permitting static constexpr variables in constexpr functions" (`P2647R1 _`). -- Implemented `CWG2640 Allow more characters in an n-char sequence _`. - CUDA/HIP Language Changes in Clang ---------------------------------- - - Allow the use of ``__noinline__`` as a keyword (instead of ``__attribute__((noinline))``) - in lambda declarations. - Objective-C Language Changes in Clang ------------------------------------- @@ -836,17 +115,6 @@ OpenCL C Language Changes in Clang ABI Changes in Clang -------------------- -- GCC doesn't pack non-POD members in packed structs unless the packed - attribute is also specified on the member. Clang historically did perform - such packing. Clang now matches the gcc behavior - (except on Darwin, PS4 and AIX). - You can switch back to the old ABI behavior with the flag: - ``-fclang-abi-compat=15.0``. -- GCC allows POD types to have defaulted special members. Clang historically - classified such types as non-POD (for the purposes of Itanium ABI). Clang now - matches the gcc behavior (except on Darwin, PS4, AIX and z/OS). You can switch - back to the old ABI behavior with the flag: ``-fclang-abi-compat=15.0``. - OpenMP Support in Clang ----------------------- @@ -855,113 +123,26 @@ OpenMP Support in Clang CUDA Support in Clang --------------------- -- Clang now supports CUDA SDK up to 11.8 -- Added support for targeting sm_{87,89,90} GPUs. - LoongArch Support in Clang -------------------------- -- Clang now supports LoongArch. Along with the backend, clang is able to build a - large corpus of Linux applications. Test-suite 100% pass. -- Support basic option ``-march=`` which is used to select the target - architecture, i.e. the basic set of ISA modules to be enabled. Possible values - are ``loongarch64`` and ``la464``. -- Support basic option ``-mabi=`` which is used to select the base ABI type. - Possible values are ``lp64d``, ``lp64f``, ``lp64s``, ``ilp32d``, ``ilp32f`` - and ``ilp32s``. -- Support extended options: ``-msoft-float``, ``-msingle-float``, ``-mdouble-float`` and ``mfpu=``. - See `LoongArch toolchain conventions `_. RISC-V Support in Clang ----------------------- -- ``sifive-7-rv32`` and ``sifive-7-rv64`` are no longer supported for ``-mcpu``. - Use ``sifive-e76``, ``sifive-s76``, or ``sifive-u74`` instead. -- Native detections via ``-mcpu=native`` and ``-mtune=native`` are supported. -- Fix interaction of ``-mcpu`` and ``-march``, RISC-V backend will take the - architecture extension union of ``-mcpu`` and ``-march`` before, and now will - take architecture extensions from ``-march`` if both are given. -- An ABI mismatch between GCC and Clang that related to the - sign/zero-extension of integer scalars was fixed. X86 Support in Clang -------------------- -- Support ``-mindirect-branch-cs-prefix`` for call and jmp to indirect thunk. -- Fix 32-bit ``__fastcall`` and ``__vectorcall`` ABI mismatch with MSVC. -- Add ISA of ``AMX-FP16`` which support ``_tile_dpfp16ps``. -- Switch ``AVX512-BF16`` intrinsics types from ``short`` to ``__bf16``. -- Add support for ``PREFETCHI`` instructions. -- Support ISA of ``CMPCCXADD``. - * Support intrinsic of ``_cmpccxadd_epi32``. - * Support intrinsic of ``_cmpccxadd_epi64``. -- Add support for ``RAO-INT`` instructions. - * Support intrinsic of ``_aadd_i32/64`` - * Support intrinsic of ``_aand_i32/64`` - * Support intrinsic of ``_aor_i32/64`` - * Support intrinsic of ``_axor_i32/64`` -- Support ISA of ``AVX-IFMA``. - * Support intrinsic of ``_mm(256)_madd52hi_avx_epu64``. - * Support intrinsic of ``_mm(256)_madd52lo_avx_epu64``. -- Support ISA of ``AVX-VNNI-INT8``. - * Support intrinsic of ``_mm(256)_dpbssd(s)_epi32``. - * Support intrinsic of ``_mm(256)_dpbsud(s)_epi32``. - * Support intrinsic of ``_mm(256)_dpbuud(s)_epi32``. -- Support ISA of ``AVX-NE-CONVERT``. - * Support intrinsic of ``_mm(256)_bcstnebf16_ps``. - * Support intrinsic of ``_mm(256)_bcstnesh_ps``. - * Support intrinsic of ``_mm(256)_cvtneebf16_ps``. - * Support intrinsic of ``_mm(256)_cvtneeph_ps``. - * Support intrinsic of ``_mm(256)_cvtneobf16_ps``. - * Support intrinsic of ``_mm(256)_cvtneoph_ps``. - * Support intrinsic of ``_mm(256)_cvtneps_avx_pbh``. -- ``-march=raptorlake``, ``-march=meteorlake`` and ``-march=emeraldrapids`` are now supported. -- ``-march=sierraforest``, ``-march=graniterapids`` and ``-march=grandridge`` are now supported. -- Lift _BitInt() supported max width from 128 to 8388608. -- Support intrinsics of ``_mm(256)_reduce_(add|mul|or|and)_epi8/16``. -- Support intrinsics of ``_mm(256)_reduce_(max|min)_ep[i|u]8/16``. WebAssembly Support in Clang ---------------------------- -The -mcpu=generic configuration now enables sign-ext and mutable-globals. These -proposals are standardized and available in all major engines. - DWARF Support in Clang ---------------------- -Previously when emitting DWARFv4 and tuning for GDB, Clang would use DWARF v2's -``DW_AT_bit_offset`` and ``DW_AT_data_member_location``. Clang now uses DWARF v4's -``DW_AT_data_bit_offset`` regardless of tuning. - -Support for ``DW_AT_data_bit_offset`` was added in GDB 8.0. For earlier versions, -you can use the ``-gdwarf-3`` option to emit compatible DWARF. - Arm and AArch64 Support in Clang -------------------------------- -- The target(..) function attributes for AArch64 now accept: - - * ``"arch="`` strings, that specify the architecture for a function as per the ``-march`` option. - * ``"cpu="`` strings, that specify the cpu for a function as per the ``-mcpu`` option. - * ``"tune="`` strings, that specify the tune cpu for a function as per ``-mtune``. - * ``"+"``, ``"+no"`` enables/disables the specific feature, for compatibility with GCC target attributes. - * ``""``, ``"no-"`` enabled/disables the specific feature, for backward compatibility with previous releases. -- ``-march`` values for targeting armv2, armv2A, armv3 and armv3M have been removed. - Their presence gave the impression that Clang can correctly generate code for - them, which it cannot. -- Support has been added for the following processors (-mcpu identifiers in parenthesis): - - * Arm Cortex-A715 (cortex-a715). - * Arm Cortex-X3 (cortex-x3). - * Arm Neoverse V2 (neoverse-v2) -- Strict floating point has been enabled for AArch64, which means that - ``-ftrapping-math``, ``-frounding-math``, ``-ffp-model=strict``, and - ``-ffp-exception-behaviour=`` are now accepted. - Floating Point Support in Clang ------------------------------- -- The driver option ``-menable-unsafe-fp-math`` has been removed. To enable - unsafe floating-point optimizations use ``-funsafe-math-optimizations`` or - ``-ffast-math`` instead. -- Add ``__builtin_elementwise_sin`` and ``__builtin_elementwise_cos`` builtins for floating point types only. Internal API Changes -------------------- @@ -971,69 +152,23 @@ Build System Changes AST Matchers ------------ -- Add ``isInAnoymousNamespace`` matcher to match declarations in an anonymous namespace. clang-format ------------ -- Add ``RemoveSemicolon`` option for removing ``;`` after a non-empty function definition. -- Add ``RequiresExpressionIndentation`` option for configuring the alignment of requires-expressions. - The default value of this option is ``OuterScope``, which differs in behavior from clang-format 15. - To match the default behavior of clang-format 15, use the ``Keyword`` value. -- Add ``IntegerLiteralSeparator`` option for fixing integer literal separators - in C++, C#, Java, and JavaScript. -- Add ``BreakAfterAttributes`` option for breaking after a group of C++11 - attributes before a function declaration/definition name. -- Add ``InsertNewlineAtEOF`` option for inserting a newline at EOF if missing. -- Add ``LineEnding`` option to deprecate ``DeriveLineEnding`` and ``UseCRLF``. clang-extdef-mapping -------------------- libclang -------- -- Introduced the new function ``clang_getUnqualifiedType``, which mimics - the behavior of ``QualType::getUnqualifiedType`` for ``CXType``. -- Introduced the new function ``clang_getNonReferenceType``, which mimics - the behavior of ``QualType::getNonReferenceType`` for ``CXType``. -- Introduced the new function ``clang_CXXMethod_isDeleted``, which queries - whether the method is declared ``= delete``. -- Introduced the new function ``clang_CXXMethod_isCopyAssignmentOperator``, - which identifies whether a method cursor is a copy-assignment - operator. -- Introduced the new function ``clang_CXXMethod_isMoveAssignmentOperator``, - which identifies whether a method cursor is a move-assignment - operator. -- ``clang_Cursor_getNumTemplateArguments``, ``clang_Cursor_getTemplateArgumentKind``, - ``clang_Cursor_getTemplateArgumentType``, ``clang_Cursor_getTemplateArgumentValue`` and - ``clang_Cursor_getTemplateArgumentUnsignedValue`` now work on struct, class, - and partial template specialization cursors in addition to function cursors. Static Analyzer --------------- -- Removed the deprecated ``-analyzer-store`` and - ``-analyzer-opt-analyze-nested-blocks`` analyzer flags. - ``scanbuild`` was also updated accordingly. - Passing these flags will result in a hard error. - -- Deprecate the ``consider-single-element-arrays-as-flexible-array-members`` - analyzer-config option. - This option will be still accepted, but a warning will be displayed. - This option will be rejected, thus turned into a hard error starting with - ``clang-17``. Use ``-fstrict-flex-array=`` instead if necessary. - -- Trailing array objects of structs with single elements will be considered - as flexible-array-members. Use ``-fstrict-flex-array=`` to define - what should be considered as flexible-array-member if needed. .. _release-notes-sanitizers: Sanitizers ---------- -- ``-fsanitize-memory-param-retval`` is turned on by default. With - ``-fsanitize=memory``, passing uninitialized variables to functions and - returning uninitialized variables from functions is more aggressively - reported. ``-fno-sanitize-memory-param-retval`` restores the previous - behavior. Core Analysis Improvements ========================== diff --git a/clang/docs/analyzer/conf.py b/clang/docs/analyzer/conf.py index 308d0235a0f3..ccd0393c4d3a 100644 --- a/clang/docs/analyzer/conf.py +++ b/clang/docs/analyzer/conf.py @@ -49,9 +49,9 @@ copyright = u'2013-%d, Analyzer Team' % date.today().year # built documents. # # The short version. -version = '16' +version = '17' # The full version, including alpha/beta/rc tags. -release = '16' +release = '17' # The language for content autogenerated by Sphinx. Refer to documentation # for a list of supported languages. diff --git a/libcxx/docs/ReleaseNotes.rst b/libcxx/docs/ReleaseNotes.rst index 060ab387fe5f..88a4859e093b 100644 --- a/libcxx/docs/ReleaseNotes.rst +++ b/libcxx/docs/ReleaseNotes.rst @@ -1,5 +1,5 @@ ========================================= -Libc++ 16.0.0 (In-Progress) Release Notes +Libc++ 17.0.0 (In-Progress) Release Notes ========================================= .. contents:: @@ -10,7 +10,7 @@ Written by the `Libc++ Team `_ .. warning:: - These are in-progress notes for the upcoming libc++ 16 release. + These are in-progress notes for the upcoming libc++ 17 release. Release notes for previous releases can be found on `the Download Page `_. @@ -18,7 +18,7 @@ Introduction ============ This document contains the release notes for the libc++ C++ Standard Library, -part of the LLVM Compiler Infrastructure, release 16.0.0. Here we describe the +part of the LLVM Compiler Infrastructure, release 17.0.0. Here we describe the status of libc++ in some detail, including major improvements from the previous release and new feature work. For the general LLVM release notes, see `the LLVM documentation `_. All LLVM releases may @@ -32,113 +32,20 @@ main Libc++ web page, this document applies to the *next* release, not the current one. To see the release notes for a specific release, please see the `releases page `_. -What's New in Libc++ 16.0.0? +What's New in Libc++ 17.0.0? ============================ -The main focus of the libc++ team has been to implement new C++20 and C++23 -features. - -The C++20 format library has improved but it not yet considered stable. The -main improvements are additional formatters for the chrono calendar types. Work -on formatting ranges has started. - -The C++20 ranges library has been completed and is no longer experimental. Some -``views`` have not been implemented yet. Work on C++23 ranges has started. - -The C++20 spaceship operator has been added to more types, the work is still -ongoing. - Implemented Papers ------------------ -- P2499R0 - ``string_view`` range constructor should be ``explicit`` -- P2417R2 - A more constexpr bitset -- P2445R1 - ``std::forward_like`` -- P2273R3 - Making ``std::unique_ptr`` constexpr -- P0591R4 - Utility functions to implement uses-allocator construction -- P2291R3 - Add Constexpr Modifiers to Functions ``to_chars`` and - ``from_chars`` for Integral Types in ```` Header -- P0220R1 - Adopt Library Fundamentals V1 TS Components for C++17 -- P0482R6 - char8_t: A type for UTF-8 characters and strings -- P2438R2 - ``std::string::substr() &&`` -- P0600R1 - ``nodiscard`` in the library -- P0339R6 - ``polymorphic_allocator<>`` as a vocabulary type -- P1169R4 - ``static operator()`` -- P0415R1 - ``constexpr`` for ``std::complex`` -- P1208R6 - ``std::source_location`` -- P0323R12 - ``std::expected`` -- P1035R7 - Input Range Adaptors -- P2325R3 - Views should not be required to be default constructible -- P2446R2 - ``views::as_rvalue`` -- P1020R1 - Smart pointer creation with default initialization -- P2210R2 - Superior String Splitting -- P2286R8 - Formatting Ranges Improvements and New Features ----------------------------- -- Declarations of ``std::c8rtomb()`` and ``std::mbrtoc8()`` from P0482R6 are - now provided when implementations in the global namespace are provided by - the C library. -- Implemented ```` header from C++17 -- `D122780 `_ Improved the performance of std::sort -- The ``ranges`` versions of ``copy``, ``move``, ``copy_backward`` and ``move_backward`` are now also optimized for - ``std::deque<>::iterator``, which can lead to up to 20x performance improvements on certain algorithms. -- The ``std`` and ``ranges`` versions of ``copy``, ``move``, ``copy_backward`` and ``move_backward`` are now also - optimized for ``join_view::iterator``, which can lead to up to 20x performance improvements on certain combinations of - iterators and algorithms. Deprecations and Removals ------------------------- -- ``unary_function`` and ``binary_function`` are no longer provided in C++17 and newer Standard modes. - They can be re-enabled with ``_LIBCPP_ENABLE_CXX17_REMOVED_UNARY_BINARY_FUNCTION``. - -- Several incidental transitive includes have been removed from libc++. Those - includes are removed based on the language version used. Incidental transitive - inclusions of the following headers have been removed: - - - C++11, C++14, C++17, and C++20: ``chrono`` - - C++2b: ``algorithm``, ``array``, ``atomic``, ``bit``, ``chrono``, - ``climits``, ``cmath``, ``compare``, ``concepts``, ``cstdarg``, ``cstddef``, - ``cstdint``, ``cstdlib``, ``cstring``, ``ctime``, ``exception``, - ``functional``, ``initializer_list``, ``iosfwd``, ``iterator``, ``limits``, - ``memory``, ``new``, ``numeric``, ``optional``, ``ratio``, ``stdexcept``, - ``string``, ``tuple``, ``type_traits``, ``typeinfo``, ``unordered_map``, - ``utility``, ``variant``, ``vector``. - - Users can also remove all incidental transitive includes by defining - ``_LIBCPP_REMOVE_TRANSITIVE_INCLUDES`` regardless of the language version - in use. Note that in the future, libc++ reserves the right to remove - incidental transitive includes more aggressively, in particular regardless - of the language version in use. - -- The legacy testing system for libc++, libc++abi, and libunwind has been removed. - All known clients have been migrated to the new configuration system, but please - reach out to the libc++ developers if you find something missing in the new - configuration system. - -- The functions ``to_chars`` and ``from_chars`` for integral types are - available starting with C++17. Libc++ offered these functions in C++11 and - C++14 as an undocumented extension. This extension makes it hard to implement - the C++23 paper that makes these functions ``constexpr``, therefore the - extension has been removed. - -- The ``_LIBCPP_ENABLE_CXX03_FUNCTION`` macro that allowed re-enabling the now-deprecated C++03 implementation of - ``std::function`` has been removed. Users who need to use ``std::function`` should switch to C++11 and above. - -- The contents of ```` are now deprecated since libc++ ships ```` now. - Please migrate to ```` instead. Per libc++'s TS deprecation policy, - ```` will be removed in LLVM 18. - -- The ``_LIBCPP_DEBUG`` macro is not honored anymore, and it is an error to try to use it. Please migrate to - ``_LIBCPP_ENABLE_DEBUG_MODE`` instead. Upcoming Deprecations and Removals ---------------------------------- -- The base template for ``std::char_traits`` has been marked as deprecated and will be removed in LLVM 18. If - you are using ``std::char_traits`` with types other than ``char``, ``wchar_t``, ``char8_t``, ``char16_t``, - ``char32_t`` or a custom character type for which you specialized ``std::char_traits``, your code will stop - working when we remove the base template. The Standard does not mandate that a base template is provided, - and such a base template is bound to be incorrect for some types, which could currently cause unexpected - behavior while going undetected. - The ``_LIBCPP_AVAILABILITY_CUSTOM_VERBOSE_ABORT_PROVIDED`` macro will not be honored anymore in LLVM 18. Please see the updated documentation about the safe libc++ mode and in particular the ``_LIBCPP_VERBOSE_ABORT`` @@ -146,37 +53,9 @@ Upcoming Deprecations and Removals API Changes ----------- -- The comparison operators on ``thread::id`` are now defined as free-standing - functions instead of as hidden friends, in conformance with the C++ standard. - Also see `issue 56187 `_. - -- ``_LIBCPP_ENABLE_NODISCARD`` and ``_LIBCPP_DISABLE_NODISCARD_AFTER_CXX17`` are no longer respected. - Any standards-required ``[[nodiscard]]`` applications in C++20 are now always enabled. Any extended applications - are now enabled by default and can be disabled by defining ``_LIBCPP_DISABLE_NODISCARD_EXT``. - -- ``_LIBCPP_VERSION`` was previously defined to e.g. ``15001`` to represent LLVM 15.0.01, but this value had been - left undocumented. Starting with LLVM 16, ``_LIBCPP_VERSION`` will contain the version of LLVM represented as - ``XXYYZZ``. In other words, ``_LIBCPP_VERSION`` is gaining a digit. This should not be an issue for existing - code, since using e.g. ``_LIBCPP_VERSION > 15000`` will still give the right answer now that ``_LIBCPP_VERSION`` - is defined as e.g. ``160000`` (with one more digit). ABI Affecting Changes --------------------- -- In freestanding mode, ``atomic`` does not contain a lock byte anymore if the platform - can implement lockfree atomics for that size. More specifically, in LLVM <= 11.0.1, an ``atomic`` - would not contain a lock byte. This was broken in LLVM >= 12.0.0, where it started including a lock byte despite - the platform supporting lockfree atomics for that size. Starting in LLVM 15.0.1, the ABI for these types has been - restored to what it used to be (no lock byte), which is the most efficient implementation. - - This ABI break only affects users that compile with ``-ffreestanding``, and only for ``atomic`` where ``T`` - is a non-builtin type that could be lockfree on the platform. See https://llvm.org/D133377 for more details. - -- When building libc++ against newlib/picolibc, the type of ``regex_type_traits::char_class_type`` was changed to - ``uint16_t`` since all values of ``ctype_base::mask`` are taken. This is technically an ABI break, but including - `` `` has triggered a ``static_assert`` failure since libc++ 14, so it is unlikely that this causes - problems for existing users. Build System Changes -------------------- -- Support for ``libcxx``, ``libcxxabi`` and ``libunwind`` in ``LLVM_ENABLE_PROJECTS`` has officially - been removed. Instead, please build according to :ref:`these instructions `. diff --git a/libcxx/docs/conf.py b/libcxx/docs/conf.py index 12876d18256d..f6809695a11e 100644 --- a/libcxx/docs/conf.py +++ b/libcxx/docs/conf.py @@ -48,9 +48,9 @@ copyright = u'2011-%d, LLVM Project' % date.today().year # built documents. # # The short X.Y version. -version = '16.0' +version = '17.0' # The full version, including alpha/beta/rc tags. -release = '16.0' +release = '17.0' # The language for content autogenerated by Sphinx. Refer to documentation # for a list of supported languages. diff --git a/libcxx/include/__config b/libcxx/include/__config index b9203e640a3e..e8a993f769b5 100644 --- a/libcxx/include/__config +++ b/libcxx/include/__config @@ -35,9 +35,9 @@ #ifdef __cplusplus // _LIBCPP_VERSION represents the version of libc++, which matches the version of LLVM. -// Given a LLVM release LLVM XX.YY.ZZ (e.g. LLVM 16.0.1 == 16.00.01), _LIBCPP_VERSION is +// Given a LLVM release LLVM XX.YY.ZZ (e.g. LLVM 17.0.1 == 17.00.01), _LIBCPP_VERSION is // defined to XXYYZZ. -# define _LIBCPP_VERSION 160000 +# define _LIBCPP_VERSION 170000 # define _LIBCPP_CONCAT_IMPL(_X, _Y) _X##_Y # define _LIBCPP_CONCAT(_X, _Y) _LIBCPP_CONCAT_IMPL(_X, _Y) diff --git a/libunwind/docs/conf.py b/libunwind/docs/conf.py index 404bcb068575..307ece60f0ff 100644 --- a/libunwind/docs/conf.py +++ b/libunwind/docs/conf.py @@ -48,9 +48,9 @@ copyright = u'2011-%d, LLVM Project' % date.today().year # built documents. # # The short X.Y version. -version = '16.0' +version = '17.0' # The full version, including alpha/beta/rc tags. -release = '16.0' +release = '17.0' # The language for content autogenerated by Sphinx. Refer to documentation # for a list of supported languages. diff --git a/lld/docs/ReleaseNotes.rst b/lld/docs/ReleaseNotes.rst index 00aaeff96d78..21dc9826db15 100644 --- a/lld/docs/ReleaseNotes.rst +++ b/lld/docs/ReleaseNotes.rst @@ -26,61 +26,15 @@ Non-comprehensive list of changes in this release ELF Improvements ---------------- -* ``ELFCOMPRESS_ZSTD`` compressed input sections are now supported. - (`D129406 `_) -* ``--compress-debug-sections=zstd`` is now available to compress debug - sections with zstd (``ELFCOMPRESS_ZSTD``). - (`D133548 `_) -* ``--no-warnings``/``-w`` is now available to suppress warnings. - (`D136569 `_) -* ``DT_RISCV_VARIANT_CC`` is now produced if at least one ``R_RISCV_JUMP_SLOT`` - relocation references a symbol with the ``STO_RISCV_VARIANT_CC`` bit. - (`D107951 `_) -* ``--no-undefined-version`` is now the default; symbols named in version - scripts that have no matching symbol in the output will be reported. Use - ``--undefined-version`` to revert to the old behavior. -* The output ``SHT_RISCV_ATTRIBUTES`` section now merges all input components - instead of picking the first input component. - (`D138550 `_) - Breaking changes ---------------- COFF Improvements ----------------- -* The linker command line entry in ``S_ENVBLOCK`` of the PDB is now stripped - from input files, to align with MSVC behavior. - (`D137723 `_) -* Switched from SHA1 to BLAKE3 for PDB type hashing / ``-gcodeview-ghash`` - (`D137101 `_) -* Improvements to the PCH.OBJ files handling. Now LLD behaves the same as MSVC - link.exe when merging PCH.OBJ files that don't have the same signature. - (`D136762 `_) -* Changed the OrdinalBase for DLLs from 0 to 1, matching the output from - both MS link.exe and GNU ld. (`D134140 `_) - MinGW Improvements ------------------ -* The lld-specific options ``--guard-cf``, ``--no-guard-cf``, - ``--guard-longjmp`` and ``--no-guard-longjmp`` has been added to allow - enabling Control Flow Guard and long jump hardening. These options are - disabled by default, but enabling ``--guard-cf`` will also enable - ``--guard-longjmp`` unless ``--no-guard-longjmp`` is also specified. - ``--guard-longjmp`` depends on ``--guard-cf`` and cannot be used by itself. - Note that these features require the ``_load_config_used`` symbol to contain - the load config directory and be filled with the required symbols. - (`D132808 `_) - -* Pick up libraries named ``.lib`` when linked with ``-l``, even - if ``-static`` has been specified. This fixes conformance to what - GNU ld does. (`D135651 `_) - -* Unwinding in Rust code on i386 in MinGW builds has been fixed, by avoiding - to leave out the ``rust_eh_personality`` symbol. - (`D136879 `_) - MachO Improvements ------------------ diff --git a/llvm/CMakeLists.txt b/llvm/CMakeLists.txt index cddca6b4822f..8a02f017cac7 100644 --- a/llvm/CMakeLists.txt +++ b/llvm/CMakeLists.txt @@ -16,7 +16,7 @@ include(${LLVM_COMMON_CMAKE_UTILS}/Modules/CMakePolicy.cmake set(CMAKE_BUILD_WITH_INSTALL_NAME_DIR ON) if(NOT DEFINED LLVM_VERSION_MAJOR) - set(LLVM_VERSION_MAJOR 16) + set(LLVM_VERSION_MAJOR 17) endif() if(NOT DEFINED LLVM_VERSION_MINOR) set(LLVM_VERSION_MINOR 0) diff --git a/llvm/docs/ReleaseNotes.rst b/llvm/docs/ReleaseNotes.rst index 90c682fd9c7a..0f48a9fc5685 100644 --- a/llvm/docs/ReleaseNotes.rst +++ b/llvm/docs/ReleaseNotes.rst @@ -42,76 +42,14 @@ Non-comprehensive list of changes in this release functionality, or simply have a lot to talk about), see the `NOTE` below for adding a new subsection. -* The ``readnone`` calls which are crossing suspend points in coroutines will - not be merged. Since ``readnone`` calls may access thread id and thread id - is not a constant in coroutines. This decision may cause unnecessary - performance regressions and we plan to fix it in later versions. - -* The LoongArch target is promoted to "official" (see below for more details). - * ... Update on required toolchains to build LLVM ------------------------------------------- -LLVM is now built with C++17 by default. This means C++17 can be used in -the code base. - -The previous "soft" toolchain requirements have now been changed to "hard". -This means that the the following versions are now required to build LLVM -and there is no way to suppress this error. - -* GCC >= 7.1 -* Clang >= 5.0 -* Apple Clang >= 10.0 -* Visual Studio 2019 >= 16.7 - -With LLVM 16.x we will raise the version requirement of CMake used to build -LLVM. The new requirements are as follows: - -* CMake >= 3.20.0 - -In LLVM 16.x this requirement will be "soft", there will only be a diagnostic. - -With the release of LLVM 17.x this requirement will be hard and LLVM developers -can start using CMake 3.20.0 features, making it impossible to build with older -versions of CMake. - Changes to the LLVM IR ---------------------- -* The ``readnone``, ``readonly``, ``writeonly``, ``argmemonly``, - ``inaccessiblememonly`` and ``inaccessiblemem_or_argmemonly`` function - attributes have been replaced by a single ``memory(...)`` attribute. The - old attributes may be mapped to the new one as follows: - - * ``readnone`` -> ``memory(none)`` - * ``readonly`` -> ``memory(read)`` - * ``writeonly`` -> ``memory(write)`` - * ``argmemonly`` -> ``memory(argmem: readwrite)`` - * ``argmemonly readonly`` -> ``memory(argmem: read)`` - * ``argmemonly writeonly`` -> ``memory(argmem: write)`` - * ``inaccessiblememonly`` -> ``memory(inaccessiblemem: readwrite)`` - * ``inaccessiblememonly readonly`` -> ``memory(inaccessiblemem: read)`` - * ``inaccessiblememonly writeonly`` -> ``memory(inaccessiblemem: write)`` - * ``inaccessiblemem_or_argmemonly`` -> - ``memory(argmem: readwrite, inaccessiblemem: readwrite)`` - * ``inaccessiblemem_or_argmemonly readonly`` -> - ``memory(argmem: read, inaccessiblemem: read)`` - * ``inaccessiblemem_or_argmemonly writeonly`` -> - ``memory(argmem: write, inaccessiblemem: write)`` - -* The constant expression variants of the following instructions has been - removed: - - * ``fneg`` - -* Target extension types have been added, which allow targets to have - types that need to be preserved through the optimizer, but otherwise are not - introspectable by target-independent optimizations. - -* Added ``uinc_wrap`` and ``udec_wrap`` operations to ``atomicrmw``. - Changes to building LLVM ------------------------ @@ -121,40 +59,15 @@ Changes to TableGen Changes to Interprocedural Optimizations ---------------------------------------- -* Function Specialization has been integrated into IPSCCP. -* Specialization of functions has been enabled by default at all - optimization levels except Os, Oz. This has exposed a mis-compilation - in SPEC/CINT2017rate/502.gcc_r when built via the LLVM Test Suite with - both LTO and PGO enabled, but without the option -fno-strict-aliasing. - Changes to the AArch64 Backend ------------------------------ -* Added support for the Cortex-A715 CPU. -* Added support for the Cortex-X3 CPU. -* Added support for the Neoverse V2 CPU. -* Added support for assembly for RME MEC (Memory Encryption Contexts). -* Added codegen support for the Armv8.3 Complex Number extension. -* Implemented `Function Multi Versioning - `_ - in accordance with Arm C Language Extensions specification. Currently in Beta - state. - Changes to the AMDGPU Backend ----------------------------- Changes to the ARM Backend -------------------------- -* Support for targeting Armv2, Armv2A, Armv3 and Armv3M has been removed. - LLVM did not, and was not ever likely to generate correct code for those - architecture versions so their presence was misleading. -* Added codegen support for the complex arithmetic instructions in MVE. -* Added Armv4 and Armv4T compatible thunks. LLD will no longer generate BX - instructions for Armv4 or BLX instructions for either Armv4 or Armv4T. Armv4T - is now fully supported. -* Added compiler-rt builtins support for Armv4T, Armv5TE and Armv6. - Changes to the AVR Backend -------------------------- @@ -171,19 +84,6 @@ Changes to the Hexagon Backend Changes to the LoongArch Backend -------------------------------- -* The LoongArch target is no longer "experimental"! It's now built by default, - rather than needing to be enabled with ``LLVM_EXPERIMENTAL_TARGETS_TO_BUILD``. - -* The backend has full codegen support for the base (both integer and - floating-point) instruction set and it conforms to psABI v2. Testing has been - performed with Linux, including native compilation of a large corpus of Linux - applications. - -* Support GHC calling convention. - -* Initial JITLink support is added. - (`D141036 `_) - Changes to the MIPS Backend --------------------------- @@ -197,12 +97,6 @@ Changes to the PowerPC Backend Changes to the RISC-V Backend ----------------------------- -* Support for the unratified Zbe, Zbf, Zbm, Zbp, Zbr, and Zbt extensions have - been removed. -* i32 is now a native type in the datalayout string. This enables - LoopStrengthReduce for loops with i32 induction variables, among other - optimizations. - Changes to the WebAssembly Backend ---------------------------------- @@ -211,51 +105,9 @@ Changes to the WebAssembly Backend Changes to the Windows Target ----------------------------- -* For MinGW, generate embedded ``-exclude-symbols:`` directives for symbols - with hidden visibility, omitting them from automatic export of all symbols. - This roughly makes hidden visibility work like it does for other object - file formats. - -* When using multi-threaded LLVM tools (such as LLD) on a Windows host with a - large number of processors or CPU sockets, previously the LLVM ThreadPool - would span out threads to use all processors. - Starting with Windows Server 2022 and Windows 11, the behavior has changed, - the OS now spans out threads automatically to all processors. This also fixes - an affinity mask issue. - (`D138747 `_) - -* When building LLVM and related tools for Windows with Clang in MinGW mode, - hidden symbol visiblity is now used to reduce the number of exports in - builds with dylibs (``LLVM_BUILD_LLVM_DYLIB`` or ``LLVM_LINK_LLVM_DYLIB``), - making such builds more manageable without running into the limit of - number of exported symbols. - -* AArch64 SEH unwind info generation bugs have been fixed; there were minor - cases of mismatches between the generated unwind info and actual - prologues/epilogues earlier in some cases. - -* AArch64 SEH unwind info is now generated correctly for the AArch64 - security features BTI (Branch Target Identification) and PAC (Pointer - Authentication Code). In particular, using PAC with older versions of LLVM - would generate code that would fail to unwind at runtime, if the host - actually would use the pointer authentication feature. - -* Fixed stack alignment on Windows on AArch64, for stack frames with a - large enough allocation that requires stack probing. - Changes to the X86 Backend -------------------------- -* Add support for the ``RDMSRLIST and WRMSRLIST`` instructions. -* Add support for the ``WRMSRNS`` instruction. -* Support ISA of ``AMX-FP16`` which contains ``tdpfp16ps`` instruction. -* Support ISA of ``CMPCCXADD``. -* Support ISA of ``AVX-IFMA``. -* Support ISA of ``AVX-VNNI-INT8``. -* Support ISA of ``AVX-NE-CONVERT``. -* ``-mcpu=raptorlake``, ``-mcpu=meteorlake`` and ``-mcpu=emeraldrapids`` are now supported. -* ``-mcpu=sierraforest``, ``-mcpu=graniterapids`` and ``-mcpu=grandridge`` are now supported. - Changes to the OCaml bindings ----------------------------- @@ -263,29 +115,6 @@ Changes to the OCaml bindings Changes to the C API -------------------- -* 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: - - * ``LLVMConstFNeg`` - - -* The following deprecated functions have been removed, because they are - incompatible with opaque pointers. Use the new functions accepting a separate - function/element type instead. - - * ``LLVMBuildLoad`` -> ``LLVMBuildLoad2`` - * ``LLVMBuildCall`` -> ``LLVMBuildCall2`` - * ``LLVMBuildInvoke`` -> ``LLVMBuildInvoke2`` - * ``LLVMBuildGEP`` -> ``LLVMBuildGEP2`` - * ``LLVMBuildInBoundsGEP`` -> ``LLVMBuildInBoundsGEP2`` - * ``LLVMBuildStructGEP`` -> ``LLVMBuildStructGEP2`` - * ``LLVMBuildPtrDiff`` -> ``LLVMBuildPtrDiff2`` - * ``LLVMConstGEP`` -> ``LLVMConstGEP2`` - * ``LLVMConstInBoundsGEP`` -> ``LLVMConstInBoundsGEP2`` - * ``LLVMAddAlias`` -> ``LLVMAddAlias2`` - Changes to the FastISel infrastructure -------------------------------------- @@ -298,73 +127,21 @@ Changes to the DAG infrastructure Changes to the Metadata Info --------------------------------- -* Add Module Flags Metadata ``stack-protector-guard-symbol`` which specify a - symbol for addressing the stack-protector guard. - Changes to the Debug Info --------------------------------- -Previously when emitting DWARF v4 and tuning for GDB, llc would use DWARF v2's -``DW_AT_bit_offset`` and ``DW_AT_data_member_location``. llc now uses DWARF v4's -``DW_AT_data_bit_offset`` regardless of tuning. - -Support for ``DW_AT_data_bit_offset`` was added in GDB 8.0. For earlier versions, -you can use llc's ``-dwarf-version=3`` option to emit compatible DWARF. - -When emitting CodeView debug information, LLVM will now emit S_CONSTANT records -for variables optimized into a constant via the SROA and SCCP passes. -(`D138995 `_) - Changes to the LLVM tools --------------------------------- -* ``llvm-readobj --elf-output-style=JSON`` no longer prefixes each JSON object - with the file name. Previously, each object file's output looked like - ``"main.o":{"FileSummary":{"File":"main.o"},...}`` but is now - ``{"FileSummary":{"File":"main.o"},...}``. This allows each JSON object to be - parsed in the same way, since each object no longer has a unique key. Tools - that consume ``llvm-readobj``'s JSON output should update their parsers - accordingly. - -* ``llvm-objdump`` now uses ``--print-imm-hex`` by default, which brings its - default behavior closer in line with ``objdump``. - -* ``llvm-objcopy`` no longer writes corrupt addresses to empty sections if - the input file had a nonzero address to an empty section. - Changes to LLDB --------------------------------- -* Initial support for debugging Linux LoongArch 64-bit binaries. - -* Improvements in COFF symbol handling; previously a DLL (without any other - debug info) would only use the DLL's exported symbols, while it now also - uses the full list of internal symbols, if available. - -* Avoiding duplicate DLLs in the runtime list of loaded modules on Windows. - Changes to Sanitizers --------------------- -* Many Sanitizers (asan, fuzzer, lsan, safestack, scudo, tsan, ubsan) have - support for Linux LoongArch 64-bit variant. Some of them may be rudimentary. - Other Changes ------------- -* lit no longer supports using substrings of the default target triple as - feature names in ``UNSUPPORTED:`` and ``XFAIL:`` directives. These have been - replaced by the ``target=`` feature, and tests can use regex - matching to achieve the same effect. For example, ``UNSUPPORTED: arm`` - would now be ``UNSUPPORTED: target=arm{{.*}}`` and ``XFAIL: windows`` - would now be ``XFAIL: target={{.*}}-windows{{.*}}``. - -* When cross compiling LLVM (or building with ``LLVM_OPTIMIZED_TABLEGEN``), - it is now possible to point the build to prebuilt versions of all the - host tools with one CMake variable, ``LLVM_NATIVE_TOOL_DIR``, instead of - having to point out each individual tool with variables such as - ``LLVM_TABLEGEN``, ``CLANG_TABLEGEN``, ``LLDB_TABLEGEN`` etc. - External Open Source Projects Using LLVM 15 =========================================== diff --git a/llvm/utils/gn/secondary/llvm/version.gni b/llvm/utils/gn/secondary/llvm/version.gni index 0940557b8876..33f40ec8c153 100644 --- a/llvm/utils/gn/secondary/llvm/version.gni +++ b/llvm/utils/gn/secondary/llvm/version.gni @@ -1,4 +1,4 @@ -llvm_version_major = 16 +llvm_version_major = 17 llvm_version_minor = 0 llvm_version_patch = 0 llvm_version = "$llvm_version_major.$llvm_version_minor.$llvm_version_patch" diff --git a/llvm/utils/lit/lit/__init__.py b/llvm/utils/lit/lit/__init__.py index 25223230691c..85c3e88042ea 100644 --- a/llvm/utils/lit/lit/__init__.py +++ b/llvm/utils/lit/lit/__init__.py @@ -2,7 +2,7 @@ __author__ = 'Daniel Dunbar' __email__ = 'daniel@minormatter.com' -__versioninfo__ = (16, 0, 0) +__versioninfo__ = (17, 0, 0) __version__ = '.'.join(str(v) for v in __versioninfo__) + 'dev' __all__ = [] diff --git a/openmp/docs/ReleaseNotes.rst b/openmp/docs/ReleaseNotes.rst index 994120472742..3eeaf5c900d8 100644 --- a/openmp/docs/ReleaseNotes.rst +++ b/openmp/docs/ReleaseNotes.rst @@ -1,10 +1,10 @@ =========================== -OpenMP 16.0.0 Release Notes +OpenMP 17.0.0 Release Notes =========================== .. warning:: - These are in-progress notes for the upcoming LLVM 16.0.0 release. + These are in-progress notes for the upcoming LLVM 17.0.0 release. Release notes for previous releases can be found on `the Download Page `_. @@ -12,89 +12,10 @@ OpenMP 16.0.0 Release Notes Introduction ============ -This document contains the release notes for the OpenMP runtime, release 16.0.0. +This document contains the release notes for the OpenMP runtime, release 17.0.0. Here we describe the status of OpenMP, including major improvements from the previous release. All OpenMP releases may be downloaded from the `LLVM releases web site `_. Non-comprehensive list of changes in this release ================================================= - -* OpenMP target offloading will no longer support on 32-bit Linux systems. - ``libomptarget`` and plugins will not be built on 32-bit systems. - -* OpenMP target offloading plugins are re-implemented and named as the NextGen - plugins. These have an internal unified interface that implement the common - behavior of all the plugins. This way, generic optimizations or features can - be implemented once, in the plugin interface, so all the plugins include them - with no additional effort. Also, all new plugins now behave more similarly and - debugging is simplified. The NextGen module includes the NVIDIA CUDA, the - AMDGPU and the GenericELF64bit plugins. These NextGen plugins are enabled by - default and replace the original ones. The new plugins can be disabled by - setting the environment variable ``LIBOMPTARGET_NEXTGEN_PLUGINS`` to ``false`` - (default: ``true``). - -* Support for building the OpenMP runtime for Windows on AArch64 and ARM - with MinGW based toolchains. - -* Made the OpenMP runtime tests run successfully on Windows. - -* Improved performance and internalization when compiling in LTO mode using - ``-foffload-lto``. - -* Created the ``nvptx-arch`` and ``amdgpu-arch`` tools to query the user's - installed GPUs. - -* Removed ``CLANG_OPENMP_NVPTX_DEFAULT_ARCH`` in favor of using the new - ``nvptx-arch`` tool. - -* Added support for ``--offload-arch=native`` which queries the user's locally - available GPU architectures. Now ``-fopenmp --offload-arch=native`` is - sufficient to target all of the user's GPUs. - -* Added ``-fopenmp-target-jit`` to enable JIT support. Only basic JIT feature is - supported in this release. A couple of JIT related environment variables were - added, which can be found on `LLVM/OpenMP runtimes page `. - -* OpenMP now supports ``-Xarch_host`` to control sending compiler arguments only - to the host compilation. - -* Improved ``clang-format`` when used on OpenMP offloading applications. - -* ``f16`` suffix is supported when compiling OpenMP programs if the target - supports it. - -* Python 3 is required to run OpenMP LIT tests now. - -* Fixed a number of bugs and regressions. - -* Improved host thread utilization on target nowait regions. Target tasks are - now continuously re-enqueued by the OpenMP runtime until their device-side - operations are completed, unblocking the host thread to execute other tasks. - -* Target tasks re-enqueue can be controlled on a per-thread basis based on - exponential backoff counting. ``OMPTARGET_QUERY_COUNT_THRESHOLD`` defines how - many target tasks must be re-enqueued before the thread starts blocking on the - device operations (defaults to 10). ``OMPTARGET_QUERY_COUNT_MAX`` defines the - maximum value for the per-thread re-enqueue counter (defaults to 5). - ``OMPTARGET_QUERY_COUNT_BACKOFF_FACTOR`` defines the decrement factor applied - to the counter when a target task is completed (defaults to 0.5). - -* GPU dynamic shared memory (aka. local data share (lds)) can now be allocated - per kernel via the ``ompx_dyn_cgroup_mem()`` clause. For an example, - see https://openmp.llvm.org/design/Runtimes.html#dynamic-shared-memory. - -* OpenMP-Opt (run as part of O1/O2/O3) will more effectively lower GPU resource - usage and improve performance. - -* Support record-and-replay functionality for individual OpenMP offload kernels. - Enabling recording in the host OpenMP target runtime library stores per-kernel - the device image, device memory state, and kernel launching information. The - newly added command-line tool `llvm-omp-kernel-replay` replays kernel execution. - Environment variables control recording/replaying: - * LIBOMPTARGET_RECORDING=<0|1>, 0: disable recording (default), 1: enable recording - * LIBOMPTARGET_RR_DEVMEM_SIZE = , default 64GB, amount of device - memory to pre-allocate for storing/loading when recording/replaying - * LIBOMPTARGET_RR_SAVE_OUTPUT=<0|1>, 0: disable saving device memory post-kernel execution - (default), 1: enable saving device memory post-kernel execution (used for verification - with `llvm-omp-kernel-replay`) diff --git a/pstl/docs/ReleaseNotes.rst b/pstl/docs/ReleaseNotes.rst index ada24a49eba6..804e2a5013d2 100644 --- a/pstl/docs/ReleaseNotes.rst +++ b/pstl/docs/ReleaseNotes.rst @@ -1,5 +1,5 @@ ======================================= -PSTL 16.0.0 (In-Progress) Release Notes +PSTL 17.0.0 (In-Progress) Release Notes ======================================= .. contents:: @@ -10,7 +10,7 @@ Written by the `PSTL Team `_ .. warning:: - These are in-progress notes for the upcoming pstl 16 release. + These are in-progress notes for the upcoming pstl 17 release. Release notes for previous releases can be found on `the Download Page `_. @@ -18,7 +18,7 @@ Introduction ============ This document contains the release notes for the PSTL parallel algorithms -library, part of the LLVM Compiler Infrastructure, release 16.0.0. Here we +library, part of the LLVM Compiler Infrastructure, release 17.0.0. Here we describe the status of the library in some detail, including major improvements from the previous release and new feature work. For the general LLVM release notes, see `the LLVM documentation `_. @@ -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 16.0.0? +What's New in PSTL 17.0.0? ========================== New Features diff --git a/pstl/include/pstl/internal/pstl_config.h b/pstl/include/pstl/internal/pstl_config.h index de89e7bd977e..830322695c74 100644 --- a/pstl/include/pstl/internal/pstl_config.h +++ b/pstl/include/pstl/internal/pstl_config.h @@ -13,7 +13,7 @@ #include <__pstl_config_site> // The version is XYYZ, where X is major, YY is minor, and Z is patch (i.e. X.YY.Z) -#define _PSTL_VERSION 16000 +#define _PSTL_VERSION 17000 #define _PSTL_VERSION_MAJOR (_PSTL_VERSION / 1000) #define _PSTL_VERSION_MINOR ((_PSTL_VERSION % 1000) / 10) #define _PSTL_VERSION_PATCH (_PSTL_VERSION % 10) diff --git a/pstl/test/pstl/version.pass.cpp b/pstl/test/pstl/version.pass.cpp index 8d462e00db63..820dabcc243e 100644 --- a/pstl/test/pstl/version.pass.cpp +++ b/pstl/test/pstl/version.pass.cpp @@ -8,8 +8,8 @@ #include -static_assert(_PSTL_VERSION == 16000); -static_assert(_PSTL_VERSION_MAJOR == 16); +static_assert(_PSTL_VERSION == 17000); +static_assert(_PSTL_VERSION_MAJOR == 17); static_assert(_PSTL_VERSION_MINOR == 00); static_assert(_PSTL_VERSION_PATCH == 0);