Bump the trunk major version to 17
This commit is contained in:
parent
b0daacf58f
commit
603c286334
|
@ -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
|
||||
^^^^^^^^^^^^^^
|
||||
|
||||
|
|
|
@ -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
|
||||
==========================
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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>`.
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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
|
||||
------------------
|
||||
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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
|
||||
===========================================
|
||||
|
||||
|
|
|
@ -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"
|
||||
|
|
|
@ -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__ = []
|
||||
|
|
|
@ -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`)
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user