@@ -77,6 +77,8 @@ C++ Specific Potentially Breaking Changes
7777ABI Changes in This Version
7878---------------------------
7979
80+ - Fixed Microsoft name mangling of placeholder, auto and decltype(auto), return types for MSVC 1920+. This change resolves incompatibilities with code compiled by MSVC 1920+ but will introduce incompatibilities with code compiled by earlier versions of Clang unless such code is built with the compiler option -fms-compatibility-version=19.14 to imitate the MSVC 1914 mangling behavior.
81+
8082AST Dumping Potentially Breaking Changes
8183----------------------------------------
8284
@@ -107,19 +109,6 @@ C++ Language Changes
107109 constant expression. Supports the `V.xyzw ` syntax and other tidbits
108110 as seen in OpenCL. Selecting multiple elements is left as a future work.
109111
110- C++17 Feature Support
111- ^^^^^^^^^^^^^^^^^^^^^
112-
113- C++14 Feature Support
114- ^^^^^^^^^^^^^^^^^^^^^
115-
116- C++20 Feature Support
117- ^^^^^^^^^^^^^^^^^^^^^
118-
119- C++23 Feature Support
120- ^^^^^^^^^^^^^^^^^^^^^
121- - Removed the restriction to literal types in constexpr functions in C++23 mode.
122-
123112C++2c Feature Support
124113^^^^^^^^^^^^^^^^^^^^^
125114
@@ -131,6 +120,16 @@ C++2c Feature Support
131120
132121- Implemented `P2893R3 Variadic Friends <https://wg21.link/P2893 >`_
133122
123+ - Implemented `P2747R2 constexpr placement new <https://wg21.link/P2747R2 >`_.
124+
125+ C++23 Feature Support
126+ ^^^^^^^^^^^^^^^^^^^^^
127+ - Removed the restriction to literal types in constexpr functions in C++23 mode.
128+
129+ C++20 Feature Support
130+ ^^^^^^^^^^^^^^^^^^^^^
131+
132+
134133Resolutions to C++ Defect Reports
135134^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
136135
@@ -177,11 +176,13 @@ New Compiler Flags
177176Deprecated Compiler Flags
178177-------------------------
179178
179+ - ``-fheinous-gnu-extensions `` is deprecated; it is now equivalent to
180+ specifying ``-Wno-error=invalid-gnu-asm-cast `` and may be removed in the
181+ future.
182+
180183Modified Compiler Flags
181184-----------------------
182185
183- - The compiler flag `-fbracket-depth ` default value is increased from 256 to 2048.
184-
185186- The ``-ffp-model `` option has been updated to enable a more limited set of
186187 optimizations when the ``fast `` argument is used and to accept a new argument,
187188 ``aggressive ``. The behavior of ``-ffp-model=aggressive `` is equivalent
@@ -239,6 +240,20 @@ Improvements to Clang's diagnostics
239240
240241- Clang now diagnoses when the result of a [[nodiscard]] function is discarded after being cast in C. Fixes #GH104391.
241242
243+ - Don't emit duplicated dangling diagnostics. (#GH93386).
244+
245+ - Improved diagnostic when trying to befriend a concept. (#GH45182).
246+
247+ - Added the ``-Winvalid-gnu-asm-cast `` diagnostic group to control warnings
248+ about use of "noop" casts for lvalues (a GNU extension). This diagnostic is
249+ a warning which defaults to being an error, is enabled by default, and is
250+ also controlled by the now-deprecated ``-fheinous-gnu-extensions `` flag.
251+
252+ - Added the ``-Wdecls-in-multiple-modules `` option to assist users to identify
253+ multiple declarations in different modules, which is the major reason of the slow
254+ compilation speed with modules. This warning is disabled by default and it needs
255+ to be explicitly enabled or by ``-Weverything ``.
256+
242257Improvements to Clang's time-trace
243258----------------------------------
244259
@@ -292,6 +307,8 @@ Bug Fixes to C++ Support
292307- Correctly check constraints of explicit instantiations of member functions. (#GH46029)
293308- Fixed an assertion failure about a constraint of a friend function template references to a value with greater
294309 template depth than the friend function template. (#GH98258)
310+ - Clang now rebuilds the template parameters of out-of-line declarations and specializations in the context
311+ of the current instantiation in all cases.
295312
296313Bug Fixes to AST Handling
297314^^^^^^^^^^^^^^^^^^^^^^^^^
@@ -448,31 +465,42 @@ Moved checkers
448465
449466Sanitizers
450467----------
468+ - Introduced Realtime Sanitizer, activated by using the -fsanitize=realtime
469+ flag. This sanitizer detects unsafe system library calls, such as memory
470+ allocations and mutex locks. If any such function is called during invocation
471+ of a function marked with the ``[[clang::nonblocking]] `` attribute, an error
472+ is printed to the console and the process exits non-zero.
451473
452474- Added the ``-fsanitize-undefined-ignore-overflow-pattern `` flag which can be
453475 used to disable specific overflow-dependent code patterns. The supported
454- patterns are: ``add-overflow-test ``, ``negated-unsigned-const ``, and
455- ``post-decr-while ``. The sanitizer instrumentation can be toggled off for all
456- available patterns by specifying ``all ``. Conversely, you can disable all
457- exclusions with ``none ``.
476+ patterns are: ``add-signed-overflow-test ``, ``add-unsigned-overflow-test ``,
477+ ``negated-unsigned-const ``, and ``unsigned-post-decr-while ``. The sanitizer
478+ instrumentation can be toggled off for all available patterns by specifying
479+ ``all ``. Conversely, you may disable all exclusions with ``none `` which is
480+ the default.
458481
459482 .. code-block :: c++
460483
461- /// specified with ``-fsanitize-undefined-ignore-overflow-pattern=add-overflow-test ``
484+ /// specified with ``-fsanitize-undefined-ignore-overflow-pattern=add-unsigned- overflow-test ``
462485 int common_overflow_check_pattern(unsigned base, unsigned offset) {
463486 if (base + offset < base) { /* ... */ } // The pattern of `a + b < a`, and other re-orderings, won't be instrumented
464487 }
465488
489+ /// specified with ``-fsanitize-undefined-ignore-overflow-pattern=add-signed-overflow-test ``
490+ int common_overflow_check_pattern_signed(signed int base, signed int offset) {
491+ if (base + offset < base) { /* ... */ } // The pattern of `a + b < a`, and other re-orderings, won't be instrumented
492+ }
493+
466494 /// specified with ``-fsanitize-undefined-ignore-overflow-pattern=negated-unsigned-const ``
467495 void negation_overflow() {
468496 unsigned long foo = -1UL; // No longer causes a negation overflow warning
469497 unsigned long bar = -2UL; // and so on...
470498 }
471499
472- /// specified with ``-fsanitize-undefined-ignore-overflow-pattern=post-decr-while ``
500+ /// specified with ``-fsanitize-undefined-ignore-overflow-pattern=unsigned- post-decr-while ``
473501 void while_post_decrement() {
474502 unsigned char count = 16;
475- while (count--) { /* ... */} // No longer causes unsigned-integer-overflow sanitizer to trip
503+ while (count--) { /* ... */ } // No longer causes unsigned-integer-overflow sanitizer to trip
476504 }
477505
478506 Many existing projects have a large amount of these code patterns present.
0 commit comments