| =========================================== |
| Clang |release| |ReleaseNotesTitle| |
| =========================================== |
| |
| .. contents:: |
| :local: |
| :depth: 2 |
| |
| Written by the `LLVM Team <https://llvm.org/>`_ |
| |
| .. only:: PreRelease |
| |
| .. warning:: |
| These are in-progress notes for the upcoming Clang |version| release. |
| Release notes for previous releases can be found on |
| `the Releases Page <https://llvm.org/releases/>`_. |
| |
| Introduction |
| ============ |
| |
| This document contains the release notes for the Clang C/C++/Objective-C |
| frontend, part of the LLVM Compiler Infrastructure, release |release|. Here we |
| describe the status of Clang 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>`_. For the libc++ release notes, |
| see `this page <https://libcxx.llvm.org/ReleaseNotes.html>`_. All LLVM releases |
| may be downloaded from the `LLVM releases web site <https://llvm.org/releases/>`_. |
| |
| For more information about Clang or LLVM, including information about the |
| latest release, please see the `Clang Web Site <https://clang.llvm.org>`_ or the |
| `LLVM Web Site <https://llvm.org>`_. |
| |
| Potentially Breaking Changes |
| ============================ |
| |
| - The Objective-C ARC migrator (ARCMigrate) has been removed. |
| - Fix missing diagnostics for uses of declarations when performing typename access, |
| such as when performing member access on a '[[deprecated]]' type alias. |
| (#GH58547) |
| - For ARM targets when compiling assembly files, the features included in the selected CPU |
| or Architecture's FPU are included. If you wish not to use a specific feature, |
| the relevant ``+no`` option will need to be amended to the command line option. |
| |
| C/C++ Language Potentially Breaking Changes |
| ------------------------------------------- |
| |
| - New LLVM optimizations have been implemented that optimize pointer arithmetic on |
| null pointers more aggressively. As part of this, clang has implemented a special |
| case for old-style offsetof idioms like ``((int)(&(((struct S *)0)->field)))``, to |
| ensure they are not caught by these optimizations. It is also possible to use |
| ``-fwrapv-pointer`` or ``-fno-delete-null-pointer-checks`` to make pointer arithmetic |
| on null pointers well-defined. (#GH130734, #GH130742, #GH130952) |
| |
| C++ Specific Potentially Breaking Changes |
| ----------------------------------------- |
| |
| - The type trait builtin ``__is_referenceable`` has been removed, since it has |
| very few users and all the type traits that could benefit from it in the |
| standard library already have their own bespoke builtins. |
| |
| ABI Changes in This Version |
| --------------------------- |
| |
| - Return larger CXX records in memory instead of using AVX registers. Code compiled with older clang will be incompatible with newer version of the clang unless -fclang-abi-compat=20 is provided. (#GH120670) |
| |
| AST Dumping Potentially Breaking Changes |
| ---------------------------------------- |
| |
| - Added support for dumping template arguments of structural value kinds. |
| |
| Clang Frontend Potentially Breaking Changes |
| ------------------------------------------- |
| |
| - The ``-Wglobal-constructors`` flag now applies to ``[[gnu::constructor]]`` and |
| ``[[gnu::destructor]]`` attributes. |
| |
| Clang Python Bindings Potentially Breaking Changes |
| -------------------------------------------------- |
| |
| What's New in Clang |release|? |
| ============================== |
| |
| C++ Language Changes |
| -------------------- |
| |
| - Added a :ref:`__builtin_structured_binding_size <builtin_structured_binding_size-doc>` (T) |
| builtin that returns the number of structured bindings that would be produced by destructuring ``T``. |
| |
| - Similarly to GCC, Clang now supports constant expressions in |
| the strings of a GNU ``asm`` statement. |
| |
| .. code-block:: c++ |
| |
| int foo() { |
| asm((std::string_view("nop")) ::: (std::string_view("memory"))); |
| } |
| |
| - Clang now implements the changes to overload resolution proposed by section 1 and 2 of |
| `P3606 <https://wg21.link/P3606R0>`_. If a non-template candidate exists in an overload set that is |
| a perfect match (all conversion sequences are identity conversions) template candidates are not instantiated. |
| Diagnostics that would have resulted from the instantiation of these template candidates are no longer |
| produced. This aligns Clang closer to the behavior of GCC, and fixes (#GH62096), (#GH74581), and (#GH74581). |
| |
| C++2c Feature Support |
| ^^^^^^^^^^^^^^^^^^^^^ |
| |
| - Implemented `P1061R10 Structured Bindings can introduce a Pack <https://wg21.link/P1061R10>`_. |
| |
| - Implemented `P0963R3 Structured binding declaration as a condition <https://wg21.link/P0963R3>`_. |
| |
| - Implemented `P2719R4 Type-aware allocation and deallocation functions <https://wg21.link/P2719>`_. |
| |
| C++23 Feature Support |
| ^^^^^^^^^^^^^^^^^^^^^ |
| |
| C++20 Feature Support |
| ^^^^^^^^^^^^^^^^^^^^^ |
| |
| C++17 Feature Support |
| ^^^^^^^^^^^^^^^^^^^^^ |
| |
| Resolutions to C++ Defect Reports |
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ |
| |
| - The flag `-frelaxed-template-template-args` |
| and its negation have been removed, having been deprecated since the previous |
| two releases. The improvements to template template parameter matching implemented |
| in the previous release, as described in P3310 and P3579, made this flag unnecessary. |
| |
| - Implemented `CWG2918 Consideration of constraints for address of overloaded ` |
| `function <https://cplusplus.github.io/CWG/issues/2918.html>`_ |
| |
| - Bumped the ``__cpp_constexpr`` feature-test macro to ``202002L`` in C++20 mode as indicated in |
| `P2493R0 <https://wg21.link/P2493R0>`_. |
| |
| C Language Changes |
| ------------------ |
| |
| - Clang now allows an ``inline`` specifier on a typedef declaration of a |
| function type in Microsoft compatibility mode. #GH124869 |
| - Clang now allows ``restrict`` qualifier for array types with pointer elements (#GH92847). |
| - Added ``-Wimplicit-void-ptr-cast``, grouped under ``-Wc++-compat``, which |
| diagnoses implicit conversion from ``void *`` to another pointer type as |
| being incompatible with C++. (#GH17792) |
| |
| C2y Feature Support |
| ^^^^^^^^^^^^^^^^^^^ |
| - Implement `WG14 N3409 <https://www.open-std.org/jtc1/sc22/wg14/www/docs/n3409.pdf>`_ |
| which removes UB around use of ``void`` expressions. In practice, this means |
| that ``_Generic`` selection associations may now have ``void`` type, but it |
| also removes UB with code like ``(void)(void)1;``. |
| - Implemented `WG14 N3411 <https://www.open-std.org/jtc1/sc22/wg14/www/docs/n3411.pdf>`_ |
| which allows a source file to not end with a newline character. Note, |
| ``-pedantic`` will no longer diagnose this in either C or C++ modes. This |
| feature was adopted as applying to obsolete versions of C in WG14 and as a |
| defect report in WG21 (CWG787). |
| - Implemented `WG14 N3353 <https://www.open-std.org/jtc1/sc22/wg14/www/docs/n3353.htm>`_ |
| which adds the new ``0o`` and ``0O`` ocal literal prefixes and deprecates |
| octal literals other than ``0`` which do not start with the new prefix. This |
| feature is exposed in earlier language modes and in C++ as an extension. The |
| paper also introduced octal and hexadecimal delimited escape sequences (e.g., |
| ``"\x{12}\o{12}"``) which are also supported as an extension in older C |
| language modes. |
| - Implemented `WG14 N3369 <https://www.open-std.org/jtc1/sc22/wg14/www/docs/n3369.pdf>`_ |
| which introduces the ``_Lengthof`` operator, and `WG14 N3469 <https://www.open-std.org/jtc1/sc22/wg14/www/docs/n3469.htm>`_ |
| which renamed ``_Lengthof`` to ``_Countof``. This feature is implemented as |
| a conforming extension in earlier C language modes, but not in C++ language |
| modes (``std::extent`` and ``std::size`` already provide the same |
| functionality but with more granularity). The feature can be tested via |
| ``__has_feature(c_countof)`` or ``__has_extension(c_countof)``. |
| |
| C23 Feature Support |
| ^^^^^^^^^^^^^^^^^^^ |
| - Added ``__builtin_c23_va_start()`` for compatibility with GCC and to enable |
| better diagnostic behavior for the ``va_start()`` macro in C23 and later. |
| This also updates the definition of ``va_start()`` in ``<stdarg.h>`` to use |
| the new builtin. Fixes #GH124031. |
| - Implemented `WG14 N2819 <https://www.open-std.org/jtc1/sc22/wg14/www/docs/n2819.pdf>`_ |
| which clarified that a compound literal used within a function prototype is |
| treated as if the compound literal were within the body rather than at file |
| scope. |
| - Fixed a bug where you could not cast a null pointer constant to type |
| ``nullptr_t``. Fixes #GH133644. |
| - Fixed a failed assertion with an invalid parameter to the ``#embed`` |
| directive. Fixes #GH126940. |
| |
| C11 Feature Support |
| ^^^^^^^^^^^^^^^^^^^ |
| - Implemented `WG14 N1285 <https://www.open-std.org/jtc1/sc22/wg14/www/docs/n1285.htm>`_ |
| which introduces the notion of objects with a temporary lifetime. When an |
| expression resulting in an rvalue with structure or union type and that type |
| contains a member of array type, the expression result is an automatic storage |
| duration object with temporary lifetime which begins when the expression is |
| evaluated and ends at the evaluation of the containing full expression. This |
| functionality is also implemented for earlier C language modes because the |
| C99 semantics will never be implemented (it would require dynamic allocations |
| of memory which leaks, which users would not appreciate). |
| |
| Non-comprehensive list of changes in this release |
| ------------------------------------------------- |
| |
| - Support parsing the `cc` operand modifier and alias it to the `c` modifier (#GH127719). |
| - Added `__builtin_elementwise_exp10`. |
| - For AMDPGU targets, added `__builtin_v_cvt_off_f32_i4` that maps to the `v_cvt_off_f32_i4` instruction. |
| - Added `__builtin_elementwise_minnum` and `__builtin_elementwise_maxnum`. |
| |
| New Compiler Flags |
| ------------------ |
| |
| - New option ``-Wundef-true`` added and enabled by default to warn when `true` is used in the C preprocessor without being defined before C23. |
| |
| - New option ``-fprofile-continuous`` added to enable continuous profile syncing to file (#GH124353, `docs <https://clang.llvm.org/docs/UsersManual.html#cmdoption-fprofile-continuous>`_). |
| The feature has `existed <https://clang.llvm.org/docs/SourceBasedCodeCoverage.html#running-the-instrumented-program>`_) |
| for a while and this is just a user facing option. |
| |
| Deprecated Compiler Flags |
| ------------------------- |
| |
| Modified Compiler Flags |
| ----------------------- |
| |
| - The ARM AArch32 ``-mtp`` option accepts and defaults to ``auto``, a value of ``auto`` uses the best available method of providing the frame pointer supported by the hardware. This matches |
| the behavior of ``-mtp`` in gcc. This changes the default behavior for ARM targets that provide the ``TPIDRURO`` register as this will be used instead of a call to the ``__aeabi_read_tp``. |
| Programs that use ``__aeabi_read_tp`` but do not use the ``TPIDRURO`` register must use ``-mtp=soft``. Fixes #123864 |
| |
| - The compiler flag `-fbracket-depth` default value is increased from 256 to 2048. (#GH94728) |
| |
| - `-Wpadded` option implemented for the `x86_64-windows-msvc` target. Fixes #61702 |
| |
| - The ``-mexecute-only`` and ``-mpure-code`` flags are now accepted for AArch64 targets. (#GH125688) |
| |
| Removed Compiler Flags |
| ------------------------- |
| |
| Attribute Changes in Clang |
| -------------------------- |
| Adding [[clang::unsafe_buffer_usage]] attribute to a method definition now turns off all -Wunsafe-buffer-usage |
| related warnings within the method body. |
| |
| - The ``no_sanitize`` attribute now accepts both ``gnu`` and ``clang`` names. |
| - The ``ext_vector_type(n)`` attribute can now be used as a generic type attribute. |
| - Clang now diagnoses use of declaration attributes on void parameters. (#GH108819) |
| - Clang now allows ``__attribute__((model("small")))`` and |
| ``__attribute__((model("large")))`` on non-TLS globals in x86-64 compilations. |
| This forces the global to be considered small or large in regards to the |
| x86-64 code model, regardless of the code model specified for the compilation. |
| - Clang now emits a warning ``-Wreserved-init-priority`` instead of a hard error |
| when ``__attribute__((init_priority(n)))`` is used with values of n in the |
| reserved range [0, 100]. The warning will be treated as an error by default. |
| |
| - There is a new ``format_matches`` attribute to complement the existing |
| ``format`` attribute. ``format_matches`` allows the compiler to verify that |
| a format string argument is equivalent to a reference format string: it is |
| useful when a function accepts a format string without its accompanying |
| arguments to format. For instance: |
| |
| .. code-block:: c |
| |
| static int status_code; |
| static const char *status_string; |
| |
| void print_status(const char *fmt) { |
| fprintf(stderr, fmt, status_code, status_string); |
| // ^ warning: format string is not a string literal [-Wformat-nonliteral] |
| } |
| |
| void stuff(void) { |
| print_status("%s (%#08x)\n"); |
| // order of %s and %x is swapped but there is no diagnostic |
| } |
| |
| Before the introducion of ``format_matches``, this code cannot be verified |
| at compile-time. ``format_matches`` plugs that hole: |
| |
| .. code-block:: c |
| |
| __attribute__((format_matches(printf, 1, "%x %s"))) |
| void print_status(const char *fmt) { |
| fprintf(stderr, fmt, status_code, status_string); |
| // ^ `fmt` verified as if it was "%x %s" here; no longer triggers |
| // -Wformat-nonliteral, would warn if arguments did not match "%x %s" |
| } |
| |
| void stuff(void) { |
| print_status("%s (%#08x)\n"); |
| // warning: format specifier 's' is incompatible with 'x' |
| // warning: format specifier 'x' is incompatible with 's' |
| } |
| |
| Like with ``format``, the first argument is the format string flavor and the |
| second argument is the index of the format string parameter. |
| ``format_matches`` accepts an example valid format string as its third |
| argument. For more information, see the Clang attributes documentation. |
| |
| - Introduced a new statement attribute ``[[clang::atomic]]`` that enables |
| fine-grained control over atomic code generation on a per-statement basis. |
| Supported options include ``[no_]remote_memory``, |
| ``[no_]fine_grained_memory``, and ``[no_]ignore_denormal_mode``. These are |
| particularly relevant for AMDGPU targets, where they map to corresponding IR |
| metadata. |
| |
| - Clang now disallows the use of attributes applied before an |
| ``extern template`` declaration (#GH79893). |
| |
| Improvements to Clang's diagnostics |
| ----------------------------------- |
| |
| - Improve the diagnostics for deleted default constructor errors for C++ class |
| initializer lists that don't explicitly list a class member and thus attempt |
| to implicitly default construct that member. |
| - The ``-Wunique-object-duplication`` warning has been added to warn about objects |
| which are supposed to only exist once per program, but may get duplicated when |
| built into a shared library. |
| - Fixed a bug where Clang's Analysis did not correctly model the destructor behavior of ``union`` members (#GH119415). |
| - A statement attribute applied to a ``case`` label no longer suppresses |
| 'bypassing variable initialization' diagnostics (#84072). |
| - The ``-Wunsafe-buffer-usage`` warning has been updated to warn |
| about unsafe libc function calls. Those new warnings are emitted |
| under the subgroup ``-Wunsafe-buffer-usage-in-libc-call``. |
| - Diagnostics on chained comparisons (``a < b < c``) are now an error by default. This can be disabled with |
| ``-Wno-error=parentheses``. |
| - Clang now better preserves the sugared types of pointers to member. |
| - Clang now better preserves the presence of the template keyword with dependent |
| prefixes. |
| - Clang now in more cases avoids printing 'type-parameter-X-X' instead of the name of |
| the template parameter. |
| - Clang now respects the current language mode when printing expressions in |
| diagnostics. This fixes a bunch of `bool` being printed as `_Bool`, and also |
| a bunch of HLSL types being printed as their C++ equivalents. |
| - Clang now consistently quotes expressions in diagnostics. |
| - When printing types for diagnostics, clang now doesn't suppress the scopes of |
| template arguments contained within nested names. |
| - The ``-Wshift-bool`` warning has been added to warn about shifting a boolean. (#GH28334) |
| - Fixed diagnostics adding a trailing ``::`` when printing some source code |
| constructs, like base classes. |
| - The :doc:`ThreadSafetyAnalysis` now supports ``-Wthread-safety-pointer``, |
| which enables warning on passing or returning pointers to guarded variables |
| as function arguments or return value respectively. Note that |
| :doc:`ThreadSafetyAnalysis` still does not perform alias analysis. The |
| feature will be default-enabled with ``-Wthread-safety`` in a future release. |
| - Clang will now do a better job producing common nested names, when producing |
| common types for ternary operator, template argument deduction and multiple return auto deduction. |
| - The ``-Wsign-compare`` warning now treats expressions with bitwise not(~) and minus(-) as signed integers |
| except for the case where the operand is an unsigned integer |
| and throws warning if they are compared with unsigned integers (##18878). |
| - The ``-Wunnecessary-virtual-specifier`` warning has been added to warn about |
| methods which are marked as virtual inside a ``final`` class, and hence can |
| never be overridden. |
| |
| - Improve the diagnostics for chained comparisons to report actual expressions and operators (#GH129069). |
| |
| - Improve the diagnostics for shadows template parameter to report correct location (#GH129060). |
| |
| - Improve the ``-Wundefined-func-template`` warning when a function template is not instantiated due to being unreachable in modules. |
| |
| - Fixed an assertion when referencing an out-of-bounds parameter via a function |
| attribute whose argument list refers to parameters by index and the function |
| is variadic. e.g., |
| |
| .. code-block:: c |
| |
| __attribute__ ((__format_arg__(2))) void test (int i, ...) { } |
| |
| Fixes #GH61635 |
| |
| - Split diagnosing base class qualifiers from the ``-Wignored-Qualifiers`` diagnostic group into a new ``-Wignored-base-class-qualifiers`` diagnostic group (which is grouped under ``-Wignored-qualifiers``). Fixes #GH131935. |
| |
| - ``-Wc++98-compat`` no longer diagnoses use of ``__auto_type`` or |
| ``decltype(auto)`` as though it was the extension for ``auto``. (#GH47900) |
| - Clang now issues a warning for missing return in ``main`` in C89 mode. (#GH21650) |
| |
| - Now correctly diagnose a tentative definition of an array with static |
| storage duration in pedantic mode in C. (#GH50661) |
| - No longer diagnosing idiomatic function pointer casts on Windows under |
| ``-Wcast-function-type-mismatch`` (which is enabled by ``-Wextra``). Clang |
| would previously warn on this construct, but will no longer do so on Windows: |
| |
| .. code-block:: c |
| |
| typedef void (WINAPI *PGNSI)(LPSYSTEM_INFO); |
| HMODULE Lib = LoadLibrary("kernel32"); |
| PGNSI FnPtr = (PGNSI)GetProcAddress(Lib, "GetNativeSystemInfo"); |
| |
| |
| - An error is now emitted when a ``musttail`` call is made to a function marked with the ``not_tail_called`` attribute. (#GH133509). |
| |
| - ``-Whigher-precisision-for-complex-divison`` warns when: |
| |
| - The divisor is complex. |
| - When the complex division happens in a higher precision type due to arithmetic promotion. |
| - When using the divide and assign operator (``/=``). |
| |
| Fixes #GH131127 |
| |
| - ``-Wuninitialized`` now diagnoses when a class does not declare any |
| constructors to initialize their non-modifiable members. The diagnostic is |
| not new; being controlled via a warning group is what's new. Fixes #GH41104 |
| |
| - Analysis-based diagnostics (like ``-Wconsumed`` or ``-Wunreachable-code``) |
| can now be correctly controlled by ``#pragma clang diagnostic``. #GH42199 |
| |
| - Improved Clang's error recovery for invalid function calls. |
| |
| - Improved bit-field diagnostics to consider the type specified by the |
| ``preferred_type`` attribute. These diagnostics are controlled by the flags |
| ``-Wpreferred-type-bitfield-enum-conversion`` and |
| ``-Wpreferred-type-bitfield-width``. These warnings are on by default as they |
| they're only triggered if the authors are already making the choice to use |
| ``preferred_type`` attribute. |
| |
| - ``-Winitializer-overrides`` and ``-Wreorder-init-list`` are now grouped under |
| the ``-Wc99-designator`` diagnostic group, as they also are about the |
| behavior of the C99 feature as it was introduced into C++20. Fixes #GH47037 |
| |
| Improvements to Clang's time-trace |
| ---------------------------------- |
| |
| Improvements to Coverage Mapping |
| -------------------------------- |
| |
| Bug Fixes in This Version |
| ------------------------- |
| |
| - Clang now outputs correct values when #embed data contains bytes with negative |
| signed char values (#GH102798). |
| - Fixed a crash when merging named enumerations in modules (#GH114240). |
| - Fixed rejects-valid problem when #embed appears in std::initializer_list or |
| when it can affect template argument deduction (#GH122306). |
| - Fix crash on code completion of function calls involving partial order of function templates |
| (#GH125500). |
| - Fixed clang crash when #embed data does not fit into an array |
| (#GH128987). |
| - Non-local variable and non-variable declarations in the first clause of a ``for`` loop in C are no longer incorrectly |
| considered an error in C23 mode and are allowed as an extension in earlier language modes. |
| |
| - Remove the ``static`` specifier for the value of ``_FUNCTION_`` for static functions, in MSVC compatibility mode. |
| - Fixed a modules crash where exception specifications were not propagated properly (#GH121245, relanded in #GH129982) |
| - Fixed a problematic case with recursive deserialization within ``FinishedDeserializing()`` where |
| ``PassInterestingDeclsToConsumer()`` was called before the declarations were safe to be passed. (#GH129982) |
| - Fixed a modules crash where an explicit Constructor was deserialized. (#GH132794) |
| - Defining an integer literal suffix (e.g., ``LL``) before including |
| ``<stdint.h>`` in a freestanding build no longer causes invalid token pasting |
| when using the ``INTn_C`` macros. (#GH85995) |
| - Fixed an assertion failure in the expansion of builtin macros like ``__has_embed()`` with line breaks before the |
| closing paren. (#GH133574) |
| - Fixed a crash in error recovery for expressions resolving to templates. (#GH135621) |
| - Clang no longer accepts invalid integer constants which are too large to fit |
| into any (standard or extended) integer type when the constant is unevaluated. |
| Merely forming the token is sufficient to render the program invalid. Code |
| like this was previously accepted and is now rejected (#GH134658): |
| .. code-block:: c |
| |
| #if 1 ? 1 : 999999999999999999999 |
| #endif |
| - ``#embed`` directive now diagnoses use of a non-character file (device file) |
| such as ``/dev/urandom`` as an error. This restriction may be relaxed in the |
| future. See (#GH126629). |
| - Fixed a clang 20 regression where diagnostics attached to some calls to member functions |
| using C++23 "deducing this" did not have a diagnostic location (#GH135522) |
| |
| - Fixed a crash when a ``friend`` function is redefined as deleted. (#GH135506) |
| - Fixed a crash when ``#embed`` appears as a part of a failed constant |
| evaluation. The crashes were happening during diagnostics emission due to |
| unimplemented statement printer. (#GH132641) |
| |
| Bug Fixes to Compiler Builtins |
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ |
| |
| - The behvaiour of ``__add_pointer`` and ``__remove_pointer`` for Objective-C++'s ``id`` and interfaces has been fixed. |
| |
| - The signature for ``__builtin___clear_cache`` was changed from |
| ``void(char *, char *)`` to ``void(void *, void *)`` to match GCC's signature |
| for the same builtin. (#GH47833) |
| |
| Bug Fixes to Attribute Support |
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ |
| - Fixed crash when a parameter to the ``clang::annotate`` attribute evaluates to ``void``. See #GH119125 |
| |
| - Clang now emits a warning instead of an error when using the one or two |
| argument form of GCC 11's ``__attribute__((malloc(deallocator)))`` |
| or ``__attribute__((malloc(deallocator, ptr-index)))`` |
| (`#51607 <https://github.com/llvm/llvm-project/issues/51607>`_). |
| |
| - Corrected the diagnostic for the ``callback`` attribute when passing too many |
| or too few attribute argument indicies for the specified callback function. |
| (#GH47451) |
| |
| - No longer crashing on ``__attribute__((align_value(N)))`` during template |
| instantiation when the function parameter type is not a pointer or reference. |
| (#GH26612) |
| - Now allowing the ``[[deprecated]]``, ``[[maybe_unused]]``, and |
| ``[[nodiscard]]`` to be applied to a redeclaration after a definition in both |
| C and C++ mode for the standard spellings (other spellings, such as |
| ``__attribute__((unused))`` are still ignored after the definition, though |
| this behavior may be relaxed in the future). (#GH135481) |
| |
| Bug Fixes to C++ Support |
| ^^^^^^^^^^^^^^^^^^^^^^^^ |
| |
| - Clang now supports implicitly defined comparison operators for friend declarations. (#GH132249) |
| - Clang now diagnoses copy constructors taking the class by value in template instantiations. (#GH130866) |
| - Clang is now better at keeping track of friend function template instance contexts. (#GH55509) |
| - Clang now prints the correct instantiation context for diagnostics suppressed |
| by template argument deduction. |
| - Clang is now better at instantiating the function definition after its use inside |
| of a constexpr lambda. (#GH125747) |
| - Fixed a local class member function instantiation bug inside dependent lambdas. (#GH59734), (#GH132208) |
| - Clang no longer crashes when trying to unify the types of arrays with |
| certain differences in qualifiers (this could happen during template argument |
| deduction or when building a ternary operator). (#GH97005) |
| - Fixed type alias CTAD issues involving default template arguments. (#GH134471) |
| - The initialization kind of elements of structured bindings |
| direct-list-initialized from an array is corrected to direct-initialization. |
| - Clang no longer crashes when a coroutine is declared ``[[noreturn]]``. (#GH127327) |
| - Clang now uses the parameter location for abbreviated function templates in ``extern "C"``. (#GH46386) |
| - Clang will emit an error instead of crash when use co_await or co_yield in |
| C++26 braced-init-list template parameter initialization. (#GH78426) |
| - Improved fix for an issue with pack expansions of type constraints, where this |
| now also works if the constraint has non-type or template template parameters. |
| (#GH131798) |
| - Fixes to partial ordering of non-type template parameter packs. (#GH132562) |
| - Fix crash when evaluating the trailing requires clause of generic lambdas which are part of |
| a pack expansion. |
| - Fixes matching of nested template template parameters. (#GH130362) |
| - Correctly diagnoses template template paramters which have a pack parameter |
| not in the last position. |
| - Disallow overloading on struct vs class on dependent types, which is IFNDR, as |
| this makes the problem diagnosable. |
| - Improved preservation of the presence or abscence of typename specifier when |
| printing types in diagnostics. |
| - Clang now correctly parses ``if constexpr`` expressions in immediate function context. (#GH123524) |
| - Fixed an assertion failure affecting code that uses C++23 "deducing this". (#GH130272) |
| - Clang now properly instantiates destructors for initialized members within non-delegating constructors. (#GH93251) |
| - Correctly diagnoses if unresolved using declarations shadows template paramters (#GH129411) |
| - Fixed C++20 aggregate initialization rules being incorrectly applied in certain contexts. (#GH131320) |
| - Clang was previously coalescing volatile writes to members of volatile base class subobjects. |
| The issue has been addressed by propagating qualifiers during derived-to-base conversions in the AST. (#GH127824) |
| - Correctly propagates the instantiated array type to the ``DeclRefExpr`` that refers to it. (#GH79750), (#GH113936), (#GH133047) |
| - Fixed a Clang regression in C++20 mode where unresolved dependent call expressions were created inside non-dependent contexts (#GH122892) |
| - Clang now emits the ``-Wunused-variable`` warning when some structured bindings are unused |
| and the ``[[maybe_unused]]`` attribute is not applied. (#GH125810) |
| - Declarations using class template argument deduction with redundant |
| parentheses around the declarator are no longer rejected. (#GH39811) |
| - Fixed a crash caused by invalid declarations of ``std::initializer_list``. (#GH132256) |
| - Clang no longer crashes when establishing subsumption between some constraint expressions. (#GH122581) |
| - Clang now issues an error when placement new is used to modify a const-qualified variable |
| in a ``constexpr`` function. (#GH131432) |
| - Clang now emits a warning when class template argument deduction for alias templates is used in C++17. (#GH133806) |
| |
| Bug Fixes to AST Handling |
| ^^^^^^^^^^^^^^^^^^^^^^^^^ |
| - Fixed type checking when a statement expression ends in an l-value of atomic type. (#GH106576) |
| - Fixed uninitialized use check in a lambda within CXXOperatorCallExpr. (#GH129198) |
| - Fixed a malformed printout of ``CXXParenListInitExpr`` in certain contexts. |
| |
| Miscellaneous Bug Fixes |
| ^^^^^^^^^^^^^^^^^^^^^^^ |
| |
| - HTML tags in comments that span multiple lines are now parsed correctly by Clang's comment parser. (#GH120843) |
| |
| Miscellaneous Clang Crashes Fixed |
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ |
| |
| - Fixed crash when ``-print-stats`` is enabled in compiling IR files. (#GH131608) |
| |
| OpenACC Specific Changes |
| ------------------------ |
| |
| Target Specific Changes |
| ----------------------- |
| |
| AMDGPU Support |
| ^^^^^^^^^^^^^^ |
| |
| - Bump the default code object version to 6. ROCm 6.3 is required to run any program compiled with COV6. |
| |
| NVPTX Support |
| ^^^^^^^^^^^^^^ |
| |
| Hexagon Support |
| ^^^^^^^^^^^^^^^ |
| |
| - The default compilation target has been changed from V60 to V68. |
| |
| X86 Support |
| ^^^^^^^^^^^ |
| |
| - The 256-bit maximum vector register size control was removed from |
| `AVX10 whitepaper <https://cdrdv2.intel.com/v1/dl/getContent/784343>_`. |
| * Re-target ``m[no-]avx10.1`` to enable AVX10.1 with 512-bit maximum vector register size. |
| * Emit warning for ``mavx10.x-256``, noting AVX10/256 is not supported. |
| * Emit warning for ``mavx10.x-512``, noting to use ``m[no-]avx10.x`` instead. |
| * Emit warning for ``m[no-]evex512``, noting AVX10/256 is not supported. |
| * The features avx10.x-256/512 keep unchanged and will be removed in the next release. |
| |
| Arm and AArch64 Support |
| ^^^^^^^^^^^^^^^^^^^^^^^ |
| - For ARM targets, cc1as now considers the FPU's features for the selected CPU or Architecture. |
| - The ``+nosimd`` attribute is now fully supported for ARM. Previously, this had no effect when being used with |
| ARM targets, however this will now disable NEON instructions being generated. The ``simd`` option is |
| also now printed when the ``--print-supported-extensions`` option is used. |
| |
| - Support for __ptrauth type qualifier has been added. |
| |
| - For AArch64, added support for generating executable-only code sections by using the |
| ``-mexecute-only`` or ``-mpure-code`` compiler flags. (#GH125688) |
| |
| Android Support |
| ^^^^^^^^^^^^^^^ |
| |
| Windows Support |
| ^^^^^^^^^^^^^^^ |
| |
| - Clang now defines ``_CRT_USE_BUILTIN_OFFSETOF`` macro in MSVC-compatible mode, |
| which makes ``offsetof`` provided by Microsoft's ``<stddef.h>`` to be defined |
| correctly. (#GH59689) |
| |
| - Clang now can process the `i128` and `ui128` integeral suffixes when MSVC |
| extensions are enabled. This allows for properly processing ``intsafe.h`` in |
| the Windows SDK. |
| |
| LoongArch Support |
| ^^^^^^^^^^^^^^^^^ |
| |
| RISC-V Support |
| ^^^^^^^^^^^^^^ |
| |
| - Add support for `-mtune=generic-ooo` (a generic out-of-order model). |
| |
| - Adds support for `__attribute__((interrupt("qci-nest")))` and |
| `__attribute__((interrupt("qci-nonest")))`. These use instructions from |
| Qualcomm's `Xqciint` extension to save and restore some GPRs in interrupt |
| service routines. |
| |
| CUDA/HIP Language Changes |
| ^^^^^^^^^^^^^^^^^^^^^^^^^ |
| |
| CUDA Support |
| ^^^^^^^^^^^^ |
| |
| AIX Support |
| ^^^^^^^^^^^ |
| |
| NetBSD Support |
| ^^^^^^^^^^^^^^ |
| |
| WebAssembly Support |
| ^^^^^^^^^^^^^^^^^^^ |
| |
| AVR Support |
| ^^^^^^^^^^^ |
| |
| DWARF Support in Clang |
| ---------------------- |
| |
| Floating Point Support in Clang |
| ------------------------------- |
| |
| Fixed Point Support in Clang |
| ---------------------------- |
| |
| AST Matchers |
| ------------ |
| |
| - Ensure ``isDerivedFrom`` matches the correct base in case more than one alias exists. |
| - Extend ``templateArgumentCountIs`` to support function and variable template |
| specialization. |
| |
| clang-format |
| ------------ |
| |
| - Adds ``BreakBeforeTemplateCloser`` option. |
| - Adds ``BinPackLongBracedList`` option to override bin packing options in |
| long (20 item or more) braced list initializer lists. |
| - Add the C language instead of treating it like C++. |
| - Allow specifying the language (C, C++, or Objective-C) for a ``.h`` file by |
| adding a special comment (e.g. ``// clang-format Language: ObjC``) near the |
| top of the file. |
| - Add ``EnumTrailingComma`` option for inserting/removing commas at the end of |
| ``enum`` enumerator lists. |
| |
| libclang |
| -------- |
| - Fixed a bug in ``clang_File_isEqual`` that sometimes led to different |
| in-memory files to be considered as equal. |
| - Added ``clang_visitCXXMethods``, which allows visiting the methods |
| of a class. |
| - Added ``clang_getFullyQualifiedName``, which provides fully qualified type names as |
| instructed by a PrintingPolicy. |
| |
| - Fixed a buffer overflow in ``CXString`` implementation. The fix may result in |
| increased memory allocation. |
| |
| Code Completion |
| --------------- |
| |
| Static Analyzer |
| --------------- |
| - Fixed a crash when C++20 parenthesized initializer lists are used. This issue |
| was causing a crash in clang-tidy. (#GH136041) |
| |
| New features |
| ^^^^^^^^^^^^ |
| |
| A new flag - `-static-libclosure` was introduced to support statically linking |
| the runtime for the Blocks extension on Windows. This flag currently only |
| changes the code generation, and even then, only on Windows. This does not |
| impact the linker behaviour like the other `-static-*` flags. |
| |
| Crash and bug fixes |
| ^^^^^^^^^^^^^^^^^^^ |
| |
| Improvements |
| ^^^^^^^^^^^^ |
| |
| - The checker option ``optin.cplusplus.VirtualCall:PureOnly`` was removed, |
| because it had been deprecated since 2019 and it is completely useless (it |
| was kept only for compatibility with pre-2019 versions, setting it to true is |
| equivalent to completely disabling the checker). |
| |
| Moved checkers |
| ^^^^^^^^^^^^^^ |
| |
| - After lots of improvements, the checker ``alpha.security.ArrayBoundV2`` is |
| renamed to ``security.ArrayBound``. As this checker is stable now, the old |
| checker ``alpha.security.ArrayBound`` (which was searching for the same kind |
| of bugs with an different, simpler and less accurate algorithm) is removed. |
| |
| .. _release-notes-sanitizers: |
| |
| Sanitizers |
| ---------- |
| |
| - ``-fsanitize=vptr`` is no longer a part of ``-fsanitize=undefined``. |
| |
| Python Binding Changes |
| ---------------------- |
| - Made ``Cursor`` hashable. |
| - Added ``Cursor.has_attrs``, a binding for ``clang_Cursor_hasAttrs``, to check |
| whether a cursor has any attributes. |
| - Added ``Cursor.specialized_template``, a binding for |
| ``clang_getSpecializedCursorTemplate``, to retrieve the primary template that |
| the cursor is a specialization of. |
| - Added ``Type.get_methods``, a binding for ``clang_visitCXXMethods``, which |
| allows visiting the methods of a class. |
| - Added ``Type.get_fully_qualified_name``, which provides fully qualified type names as |
| instructed by a PrintingPolicy. |
| - Add equality comparison operators for ``File`` type |
| |
| OpenMP Support |
| -------------- |
| - Added support 'no_openmp_constructs' assumption clause. |
| - Added support for 'self_maps' in map and requirement clause. |
| - Added support for 'omp stripe' directive. |
| |
| Improvements |
| ^^^^^^^^^^^^ |
| |
| Additional Information |
| ====================== |
| |
| A wide variety of additional information is available on the `Clang web |
| page <https://clang.llvm.org/>`_. The web page contains versions of the |
| API documentation which are up-to-date with the Git version of |
| the source code. You can access versions of these documents specific to |
| this release by going into the "``clang/docs/``" directory in the Clang |
| tree. |
| |
| If you have any questions or comments about Clang, please feel free to |
| contact us on the `Discourse forums (Clang Frontend category) |
| <https://discourse.llvm.org/c/clang/6>`_. |