Bump the trunk major version to 17

This commit is contained in:
Tom Stellard 2023-01-24 22:55:53 -08:00
parent b0daacf58f
commit 603c286334
16 changed files with 25 additions and 1480 deletions

View File

@ -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
<clang-tidy/checks/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
<clang-tidy/checks/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
<clang-tidy/checks/cppcoreguidelines/avoid-do-while>` check.
Warns when using ``do-while`` loops.
- New :doc:`cppcoreguidelines-avoid-reference-coroutine-parameters
<clang-tidy/checks/cppcoreguidelines/avoid-reference-coroutine-parameters>` check.
Warns on coroutines that accept reference parameters.
- New :doc:`misc-use-anonymous-namespace
<clang-tidy/checks/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 <clang-tidy/checks/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
<clang-tidy/checks/cert/msc54-cpp>` to
:doc:`bugprone-signal-handler
<clang-tidy/checks/bugprone/signal-handler>` was added.
Changes in existing checks
^^^^^^^^^^^^^^^^^^^^^^^^^^
- Fixed a false positive in :doc:`bugprone-assignment-in-if-condition
<clang-tidy/checks/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
<clang-tidy/checks/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
<clang-tidy/checks/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
<clang-tidy/checks/google/objc-avoid-throwing-exception>` check for exceptions
thrown by code emitted from macros in system headers.
- Improved :doc:`misc-redundant-expression <clang-tidy/checks/misc/redundant-expression>`
check.
The check now skips concept definitions since redundant expressions still make sense
inside them.
- Improved :doc:`modernize-loop-convert <clang-tidy/checks/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 <clang-tidy/checks/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 <clang-tidy/checks/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
<clang-tidy/checks/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
<clang-tidy/checks/readability/braces-around-statements>` and
:doc:`readability-simplify-boolean-expr <clang-tidy/checks/readability/simplify-boolean-expr>`
when using a C++23 ``if consteval`` statement.
- Change the behavior of :doc:`readability-const-return-type
<clang-tidy/checks/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
<clang-tidy/checks/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 <clang-tidy/checks/readability/redundant-string-cstr>`
check.
Removed checks
^^^^^^^^^^^^^^

View File

@ -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 <https://github.com/llvm/llvm-project/issues/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
<https://github.com/llvm/llvm-project/issues/54717>`_):
.. code-block:: c++
template <typename> struct __declspec(dllexport) S {
void f();
};
template<> void S<int>::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 <typename> struct __declspec(dllexport) S {
void f();
};
template<> void S<int>::f() = delete; // Error: cannot delete dllexport function.
.. code-block:: c++
template <typename> struct __declspec(dllimport) S {
void f();
};
template<> void S<int>::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 <https://github.com/llvm/llvm-project/issues/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 <typename T> void g(T, T = T());
template <typename T, typename... U> 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 <https://github.com/llvm/llvm-project/issues/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 <https://github.com/llvm/llvm-project/issues/56800>`_.
- Fix `#56772 <https://github.com/llvm/llvm-project/issues/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 <https://github.com/llvm/llvm-project/issues/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 <https://github.com/llvm/llvm-project/issues/56016>`_.
- Fixed a crash-on-valid with consteval evaluation of a list-initialized
constructor for a temporary object. This fixes
`Issue 55871 <https://github.com/llvm/llvm-project/issues/55871>`_.
- Fix `#57008 <https://github.com/llvm/llvm-project/issues/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 <https://github.com/llvm/llvm-project/issues/56094>`_.
- Fix `#57151 <https://github.com/llvm/llvm-project/issues/57151>`_.
``-Wcomma`` is emitted for void returning functions.
- ``-Wtautological-compare`` missed warnings for tautological comparisons
involving a negative integer literal. This fixes
`Issue 42918 <https://github.com/llvm/llvm-project/issues/42918>`_.
- Fix a crash when generating code coverage information for an
``if consteval`` statement. This fixes
`Issue 57377 <https://github.com/llvm/llvm-project/issues/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 <https://github.com/llvm/llvm-project/issues/57387>`_.
- Fix a crash when emitting a concept-related diagnostic. This fixes
`Issue 57415 <https://github.com/llvm/llvm-project/issues/57415>`_.
- Fix a crash when attempting to default a virtual constexpr non-special member
function in a derived class. This fixes
`Issue 57431 <https://github.com/llvm/llvm-project/issues/57431>`_
- Fix a crash where we attempt to define a deleted destructor. This fixes
`Issue 57516 <https://github.com/llvm/llvm-project/issues/57516>`_
- Fix ``__builtin_assume_aligned`` crash when the 1st arg is array type. This fixes
`Issue 57169 <https://github.com/llvm/llvm-project/issues/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 <https://github.com/llvm/llvm-project/issues/42102>`_
`Issue 51928 <https://github.com/llvm/llvm-project/issues/51928>`_
- A SubstTemplateTypeParmType can now represent the pack index for a
substitution from an expanded pack.
`Issue 56099 <https://github.com/llvm/llvm-project/issues/56099>`_
- Fix `-Wpre-c++17-compat` crashing Clang when compiling C++20 code which
contains deduced template specializations. This Fixes
`Issue 57369 <https://github.com/llvm/llvm-project/issues/57369>`_
`Issue 57643 <https://github.com/llvm/llvm-project/issues/57643>`_
`Issue 57793 <https://github.com/llvm/llvm-project/issues/57793>`_
- Respect constructor constraints during class template argument deduction (CTAD).
This is the suggested resolution to CWG DR2628.
`Issue 57646 <https://github.com/llvm/llvm-project/issues/57646>`_
`Issue 43829 <https://github.com/llvm/llvm-project/issues/43829>`_
- Fixed a crash in C++20 mode in Clang and Clangd when compile source
with compilation errors.
`Issue 53628 <https://github.com/llvm/llvm-project/issues/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 <https://github.com/llvm/llvm-project/issues/47177>`_
`Issue 47179 <https://github.com/llvm/llvm-project/issues/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 <https://github.com/llvm/llvm-project/issues/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 <https://github.com/llvm/llvm-project/issues/53213>`_
`Issue 45736 <https://github.com/llvm/llvm-project/issues/45736>`_
- Fix an issue when performing constraints partial ordering on non-template
functions. `Issue 56154 <https://github.com/llvm/llvm-project/issues/56154>`_
- Fix handling of unexpanded packs in template argument expressions.
`Issue 58679 <https://github.com/llvm/llvm-project/issues/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 <https://github.com/llvm/llvm-project/issues/44304>`_
`Issue 50891 <https://github.com/llvm/llvm-project/issues/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 <https://github.com/llvm/llvm-project/issues/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 <https://github.com/llvm/llvm-project/issues/58229>`_
- The builtin type trait ``__is_aggregate`` now returns ``true`` for arrays of incomplete
types in accordance with the suggested fix for `LWG3823 <https://cplusplus.github.io/LWG/issue3823>`_
- 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 <https://github.com/llvm/llvm-project/issues/58057>`_
`Issue 59014 <https://github.com/llvm/llvm-project/issues/59014>`_
`Issue 54746 <https://github.com/llvm/llvm-project/issues/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 <https://github.com/llvm/llvm-project/issues/58302>`_
`Issue 58753 <https://github.com/llvm/llvm-project/issues/58753>`_
`Issue 59100 <https://github.com/llvm/llvm-project/issues/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 <https://github.com/llvm/llvm-project/issues/58800>`_
- Fix an issue that triggers a crash if we instantiate a hidden friend functions.
This fixes `Issue 54457 <https://github.com/llvm/llvm-project/issues/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 <https://github.com/llvm/llvm-project/issues/59736>`_
- In C mode, when ``e1`` has ``__attribute__((noreturn))`` but ``e2`` doesn't,
``(c ? e1 : e2)`` is no longer considered noreturn.
`Issue 59792 <https://github.com/llvm/llvm-project/issues/59792>`_
- Fix an issue that makes Clang crash on lambda template parameters. This fixes
`Issue 57960 <https://github.com/llvm/llvm-project/issues/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 <https://github.com/llvm/llvm-project/issues/59765>`_
- Reject in-class defaulting of previosly declared comparison operators. Fixes
`Issue 51227 <https://github.com/llvm/llvm-project/issues/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: <https://github.com/llvm/llvm-project/issues/55805>`_.
- ``-Wformat`` now recognizes ``%b`` for the ``printf``/``scanf`` family of
functions and ``%B`` for the ``printf`` family of functions. Fixes
`Issue 56885: <https://github.com/llvm/llvm-project/issues/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 <https://github.com/llvm/llvm-project/issues/53253>`_. To reduce
potential false positives, this diagnostic will not diagnose use of the
``true`` macro (from ``<stdbool.h>>`) 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: <https://github.com/llvm/llvm-project/issues/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 <https://github.com/llvm/llvm-project/issues/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 <https://github.com/llvm/llvm-project/issues/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 <https://github.com/llvm/llvm-project/issues/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)
<https://clang.llvm.org/docs/ControlFlowIntegrity.html>`_ 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 <https://github.com/llvm/llvm-project/issues/57562>`_.
- Better error recovery for pack expansion of expressions.
`Issue 58673 <https://github.com/llvm/llvm-project/issues/58673>`_.
- Better diagnostics when the user has missed `auto` in a declaration.
`Issue 49129 <https://github.com/llvm/llvm-project/issues/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 <https://github.com/llvm/llvm-project/issues/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 <https://github.com/llvm/llvm-project/issues/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
<https://clang.llvm.org/docs/Modules.html#use-declaration>`_ 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
<https://www.unicode.org/L2/L2022/22230-math-profile.pdf>`_.
This resolves `Issue 54732 <https://github.com/llvm/llvm-project/issues/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
``<triple>-<driver>.cfg`` first, and falls back to loading both
``<driver>.cfg`` and ``<triple>.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
`<https://reproducible-builds.org/docs/source-date-epoch/>`_.
- 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 <https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2020/p2014r0.pdf>`_).
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 <https://clang.llvm.org/docs/StandardCPlusPlusModules.html>`_
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
<https://clang.llvm.org/docs/AttributeReference.html#target-version>`_ 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 <https://www.open-std.org/jtc1/sc22/wg14/www/docs/n2562.pdf>`_.
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 <https://www.open-std.org/jtc1/sc22/wg14/www/docs/n2662.pdf>`_,
so the [[maybe_unused]] attribute may be applied to a label to silence an
``-Wunused-label`` warning.
- Implemented `WG14 N2508 <https://www.open-std.org/jtc1/sc22/wg14/www/docs/n2508.pdf>`_,
so labels can placed everywhere inside a compound statement.
- Implemented `WG14 N2927 <https://www.open-std.org/jtc1/sc22/wg14/www/docs/n2927.htm>`_,
the Not-so-magic ``typeof`` operator. Also implemented
`WG14 N2930 <https://www.open-std.org/jtc1/sc22/wg14/www/docs/n2930.pdf>`_,
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 <https://www.open-std.org/jtc1/sc22/wg14/www/docs/n3042.htm>`_,
Introduce the nullptr constant. This introduces a new type ``nullptr_t``,
declared in ``<stddef.h>`` 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 <https://www.open-std.org/jtc1/sc22/wg14/www/docs/n2975.pdf>`_,
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 <https://www.open-std.org/jtc1/sc22/wg14/www/docs/n2350.htm>`_.
Also documents the builtin appropriately. Note, a type definition in C++
continues to be rejected.
C++ Language Changes in Clang
-----------------------------
- Implemented `DR692 <https://wg21.link/cwg692>`_, `DR1395 <https://wg21.link/cwg1395>`_,
and `DR1432 <https://wg21.link/cwg1432>`_. 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 <https://wg21.link/cwg2654>`_ 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 <https://github.com/llvm/llvm-project/issues/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 <https://wg21.link/p1091r3>`_ and `P1381R1 <https://wg21.link/P1381R1>`_).
This fixes issues `Issue 52720 <https://github.com/llvm/llvm-project/issues/52720>`_,
`Issue 54300 <https://github.com/llvm/llvm-project/issues/54300>`_,
`Issue 54301 <https://github.com/llvm/llvm-project/issues/54301>`_,
and `Issue 49430 <https://github.com/llvm/llvm-project/issues/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 <https://github.com/llvm/llvm-project/issues/55601>`_.
- Implemented "Conditionally Trivial Special Member Functions" (`P0848 <https://wg21.link/p0848r3>`_).
Note: The handling of deleted functions is not yet compliant, as Clang
does not implement `DR1496 <https://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#1496>`_
and `DR1734 <https://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#1734>`_.
- Class member variables are now in scope when parsing a ``requires`` clause. Fixes
`Issue 55216 <https://github.com/llvm/llvm-project/issues/55216>`_.
- Correctly set expression evaluation context as 'immediate function context' in
consteval functions.
This fixes `Issue 51182 <https://github.com/llvm/llvm-project/issues/51182>`_.
- Fixes an assert crash caused by looking up missing vtable information on ``consteval``
virtual functions. Fixes `Issue 55065 <https://github.com/llvm/llvm-project/issues/55065>`_.
- Skip rebuilding lambda expressions in arguments of immediate invocations.
This fixes `Issue 56183 <https://github.com/llvm/llvm-project/issues/56183>`_,
`Issue 51695 <https://github.com/llvm/llvm-project/issues/51695>`_,
`Issue 50455 <https://github.com/llvm/llvm-project/issues/50455>`_,
`Issue 54872 <https://github.com/llvm/llvm-project/issues/54872>`_,
`Issue 54587 <https://github.com/llvm/llvm-project/issues/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 <https://github.com/llvm/llvm-project/issues/44178>`_.
- Clang implements DR2621, correcting a defect in ``using enum`` handling. The
name is found via ordinary lookup so typedefs are found.
- Implemented `P0634r3 <https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0634r3.html>`_,
which removes the requirement for the ``typename`` keyword in certain contexts.
- Implemented The Equality Operator You Are Looking For (`P2468 <http://wg21.link/p2468r2>`_).
- Implemented `P2113R0: Proposed resolution for 2019 comment CA 112 <https://wg21.link/P2113R0>`_
([temp.func.order]p6.2.1 is not implemented, matching GCC).
- Implemented `P0857R0 <https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/p0857r0.html>`_,
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 <https://github.com/llvm/llvm-project/issues/48182>`_.
- Do not hide templated base members introduced via using-decl in derived class
(useful specially for constrained members). Fixes `GH50886 <https://github.com/llvm/llvm-project/issues/50886>`_.
- Implemented CWG2635 as a Defect Report, which prohibits structured bindings from being constrained.
- Correctly handle access-checks in requires expression. Fixes `GH53364 <https://github.com/llvm/llvm-project/issues/53364>`_,
`GH53334 <https://github.com/llvm/llvm-project/issues/53334>`_.
- Implemented `P0960R3: <https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p0960r3.html>`_
and `P1975R0: <https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p1975r0.html>`_,
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 <https://github.com/llvm/llvm-project/issues/54524>`_.
C++2b Feature Support
^^^^^^^^^^^^^^^^^^^^^
- Support label at end of compound statement (`P2324 <https://wg21.link/p2324r2>`_).
- Implemented `P1169R4: static operator() <https://wg21.link/P1169R4>`_ and `P2589R1: static operator[] <https://wg21.link/P2589R1>`_.
- Implemented "char8_t Compatibility and Portability Fix" (`P2513R3 <https://wg21.link/P2513R3>`_).
This change was applied to C++20 as a Defect Report.
- Implemented "Permitting static constexpr variables in constexpr functions" (`P2647R1 <https://wg21.link/P2647R1>_`).
- Implemented `CWG2640 Allow more characters in an n-char sequence <https://wg21.link/CWG2640>_`.
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 <https://loongson.github.io/LoongArch-Documentation/LoongArch-toolchain-conventions-EN.html>`_.
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=<arch>"`` strings, that specify the architecture for a function as per the ``-march`` option.
* ``"cpu=<cpu>"`` strings, that specify the cpu for a function as per the ``-mcpu`` option.
* ``"tune=<cpu>"`` strings, that specify the tune cpu for a function as per ``-mtune``.
* ``"+<feature>"``, ``"+no<feature>"`` enables/disables the specific feature, for compatibility with GCC target attributes.
* ``"<feature>"``, ``"no-<feature>"`` 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=<arg>`` 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=<N>`` instead if necessary.
- Trailing array objects of structs with single elements will be considered
as flexible-array-members. Use ``-fstrict-flex-array=<N>`` 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
==========================

View File

@ -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.

View File

@ -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 <https://libcxx.llvm.org>`_
.. 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 <https://releases.llvm.org/download.html>`_.
@ -18,7 +18,7 @@ Introduction
============
This document contains the release notes for the libc++ C++ Standard Library,
part of the LLVM Compiler Infrastructure, release 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 <https://llvm.org/docs/ReleaseNotes.html>`_. 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 <https://llvm.org/releases/>`_.
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 ``<charconv>`` 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 ``<memory_resource>`` header from C++17
- `D122780 <https://reviews.llvm.org/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 ``<experimental/memory_resource>`` are now deprecated since libc++ ships ``<memory_resource>`` now.
Please migrate to ``<memory_resource>`` instead. Per libc++'s TS deprecation policy,
``<experimental/memory_resource>`` 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 <https://github.com/llvm/llvm-project/issues/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<small enum class>`` 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<small enum class>``
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<T>`` 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
``<regex> `` 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 <build instructions>`.

View File

@ -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.

View File

@ -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)

View File

@ -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.

View File

@ -26,61 +26,15 @@ Non-comprehensive list of changes in this release
ELF Improvements
----------------
* ``ELFCOMPRESS_ZSTD`` compressed input sections are now supported.
(`D129406 <https://reviews.llvm.org/D129406>`_)
* ``--compress-debug-sections=zstd`` is now available to compress debug
sections with zstd (``ELFCOMPRESS_ZSTD``).
(`D133548 <https://reviews.llvm.org/D133548>`_)
* ``--no-warnings``/``-w`` is now available to suppress warnings.
(`D136569 <https://reviews.llvm.org/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 <https://reviews.llvm.org/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 <https://reviews.llvm.org/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 <https://reviews.llvm.org/D137723>`_)
* Switched from SHA1 to BLAKE3 for PDB type hashing / ``-gcodeview-ghash``
(`D137101 <https://reviews.llvm.org/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 <https://reviews.llvm.org/D136762>`_)
* Changed the OrdinalBase for DLLs from 0 to 1, matching the output from
both MS link.exe and GNU ld. (`D134140 <https://reviews.llvm.org/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 <https://reviews.llvm.org/D132808>`_)
* Pick up libraries named ``<name>.lib`` when linked with ``-l<name>``, even
if ``-static`` has been specified. This fixes conformance to what
GNU ld does. (`D135651 <https://reviews.llvm.org/D135651>`_)
* Unwinding in Rust code on i386 in MinGW builds has been fixed, by avoiding
to leave out the ``rust_eh_personality`` symbol.
(`D136879 <https://reviews.llvm.org/D136879>`_)
MachO Improvements
------------------

View File

@ -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)

View File

@ -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
<https://arm-software.github.io/acle/main/acle.html#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 <https://reviews.llvm.org/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 <https://reviews.llvm.org/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 <https://reviews.llvm.org/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=<triple>`` 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
===========================================

View File

@ -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"

View File

@ -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__ = []

View File

@ -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 <https://releases.llvm.org/download.html>`_.
@ -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 <https://llvm.org/releases/>`_.
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 <https://openmp.llvm.org/design/Runtimes.html#libomptarget-jit-opt-level>`.
* 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(<Bytes>)`` 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 = <integer in bytes>, 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`)

View File

@ -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 <https://pstl.llvm.org>`_
.. 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 <https://releases.llvm.org/download.html>`_.
@ -18,7 +18,7 @@ Introduction
============
This document contains the release notes for the PSTL parallel algorithms
library, part of the LLVM Compiler Infrastructure, release 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 <https://llvm.org/docs/ReleaseNotes.html>`_.
@ -30,7 +30,7 @@ web page, this document applies to the *next* release, not the current one.
To see the release notes for a specific release, please see the `releases
page <https://llvm.org/releases/>`_.
What's New in PSTL 16.0.0?
What's New in PSTL 17.0.0?
==========================
New Features

View File

@ -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)

View File

@ -8,8 +8,8 @@
#include <pstl/internal/pstl_config.h>
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);