Skip to content

Commit 3e406bb

Browse files
committed
[analyzer][docs] CSA release notes for clang-21
The commits were gathered using: ```sh git log --reverse --oneline llvmorg-20-init..llvm/main \ clang/{lib/StaticAnalyzer,include/clang/StaticAnalyzer} | grep -v NFC | \ grep -v OpenACC | grep -v -i revert | grep -v -i "webkit" ``` FYI, I also ignored Webkit changes because I assue it's fairly specific for them, and they likely already know what they ship xD. I used the `LLVM_ENABLE_SPHINX=ON` and `LLVM_ENABLE_DOXYGEN=ON` cmake options to enable the `docs-clang-html` build target, which generates the html into `build/tools/clang/docs/html/ReleaseNotes.html` of which I attach the screenshots to let you judge if it looks all good or not.
1 parent 306481b commit 3e406bb

File tree

1 file changed

+88
-9
lines changed

1 file changed

+88
-9
lines changed

clang/docs/ReleaseNotes.rst

Lines changed: 88 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1234,33 +1234,112 @@ Code Completion
12341234

12351235
Static Analyzer
12361236
---------------
1237-
- Fixed a crash when C++20 parenthesized initializer lists are used. This issue
1238-
was causing a crash in clang-tidy. (#GH136041)
12391237

12401238
New features
12411239
^^^^^^^^^^^^
12421240

1241+
- Added support for the ``[[clang::assume(cond)]]`` attribute, treating it as
1242+
``__builtin_assume(cond)`` for better static analysis. (#GH129234)
1243+
1244+
- Introduced per-entry-point statistics to provide more detailed analysis metrics.
1245+
Documentation: :doc:`analyzer/developer-docs/Statistics` (#GH131175)
1246+
1247+
- Added time-trace scopes for high-level analyzer steps to improve performance
1248+
debugging. Documentation: :doc:`analyzer/developer-docs/PerformanceInvestigation`
1249+
(#GH125508, #GH125884)
1250+
1251+
- Enhanced the ``check::BlockEntrance`` checker callback to provide more granular
1252+
control over block-level analysis.
1253+
`Documentation (check::BlockEntrance)
1254+
<https://clang.llvm.org/doxygen/CheckerDocumentation_8cpp_source.html>`_
1255+
(#GH140924)
1256+
1257+
- Added a new checker ``core.FixedAddressDereference`` to detect dereferences
1258+
of fixed addresses, which can be useful for finding hard-coded memory
1259+
accesses. (#GH127191, #GH132404)
1260+
12431261
Crash and bug fixes
12441262
^^^^^^^^^^^^^^^^^^^
12451263

1246-
- Fixed a crash in ``UnixAPIMisuseChecker`` and ``MallocChecker`` when analyzing
1264+
- Fixed a crash when C++20 parenthesized initializer lists are used.
1265+
This affected a crash of the well-known lambda overloaded pattern.
1266+
(#GH136041, #GH135665)
1267+
1268+
- Dropped an unjustified assertion, that was triggered in ``BugReporterVisitors.cpp``
1269+
for variable initialization detection. (#GH125044)
1270+
1271+
- Fixed a crash in ``unix.API`` and ``unix.Malloc`` when analyzing
12471272
code with non-standard ``getline`` or ``getdelim`` function signatures. (#GH144884)
12481273

1274+
- Fixed crashes involving ``__builtin_bit_cast``. (#GH139188)
1275+
1276+
- ``__datasizeof`` (C++) and ``_Countof`` (C) no longer cause a failed assertion
1277+
when given an operand of VLA type. (#GH151711)
1278+
1279+
- Fixed a crash in ``alpha.core.CastSize``. (#GH134387)
1280+
1281+
- Some ``cplusplus.PlacementNew`` false positives were fixed. (#GH150161)
1282+
12491283
Improvements
12501284
^^^^^^^^^^^^
12511285

1286+
- Added option to assume at least one iteration in loops to reduce false positives.
1287+
(#GH125494)
1288+
12521289
- The checker option ``optin.cplusplus.VirtualCall:PureOnly`` was removed,
1253-
because it had been deprecated since 2019 and it is completely useless (it
1254-
was kept only for compatibility with pre-2019 versions, setting it to true is
1255-
equivalent to completely disabling the checker).
1290+
because it had been deprecated since 2019. (#GH131823)
1291+
1292+
- Enhanced the ``core.StackAddressEscape`` to detect more cases of stack address
1293+
escapes, including return values for child stack frames. (#GH126620, #GH126986)
1294+
1295+
- Improved the ``unix.BlockInCriticalSection`` to recognize ``O_NONBLOCK``
1296+
streams and suppress reports in those cases. (#GH127049)
1297+
1298+
- Better support for lambda-converted function pointers in analysis. (#GH144906)
1299+
1300+
- Improved modeling of ``getcwd`` function in ``unix.StdCLibraryFunctions`` checker.
1301+
(#GH141076)
1302+
1303+
- Enhanced the ``optin.core.EnumCastOutOfRange`` checker to ignore ``[[clang::flag_enum]]``
1304+
enums. (#GH141232)
1305+
1306+
- Improved handling of structured bindings captured by lambdas. (#GH132579, #GH91835)
1307+
1308+
- Fixed unnamed bitfield handling in ``optin.cplusplus.UninitializedObject``. (#GH132427, #GH132001)
1309+
1310+
- Enhanced iterator checker modeling for ``insert`` operations. (#GH132596)
1311+
1312+
- Improved ``format`` attribute handling in ``optin.taint.GenericTaint``. (#GH132765)
1313+
1314+
- Added support for ``consteval`` in ``ConditionBRVisitor::VisitTerminator``.
1315+
(#GH146859, #GH139130)
1316+
1317+
- C standard streams are no longer invalidated by all C library function calls.
1318+
(#GH147766)
1319+
1320+
- Enhanced store management with region-store-binding-limit to improve performance.
1321+
See `region-store-max-binding-fanout
1322+
<https://clang.llvm.org/docs/analyzer/user-docs/Options.html#region-store-max-binding-fanout>`_
1323+
config option. Overriding these options are discouraged, unless you know what you do.
1324+
(#GH127602)
1325+
1326+
- Updated undefined assignment checker (``core.uninitialized.Assign``) diagnostics
1327+
to avoid using the term ``garbage``. (#GH126596)
1328+
1329+
- Fixed false memory leak reports involving placement new. (#GH144341)
1330+
1331+
- Avoided unnecessary super region invalidation in ``unix.cstring.*`` checkers.
1332+
(#GH146212, #GH143807)
1333+
1334+
- Enhanced handling of tainted division-by-zero error paths in the
1335+
``optin.taint.TaintedDiv`` checker. (#GH144491)
12561336

12571337
Moved checkers
12581338
^^^^^^^^^^^^^^
12591339

1260-
- After lots of improvements, the checker ``alpha.security.ArrayBoundV2`` is
1340+
- After lots of improvements, the checker ``alpha.security.ArrayBoundV2`` was
12611341
renamed to ``security.ArrayBound``. As this checker is stable now, the old
1262-
checker ``alpha.security.ArrayBound`` (which was searching for the same kind
1263-
of bugs with an different, simpler and less accurate algorithm) is removed.
1342+
checker ``alpha.security.ArrayBound`` was removed.
12641343

12651344
.. _release-notes-sanitizers:
12661345

0 commit comments

Comments
 (0)