# Extra Clang Tools 20.1.8 documentation

## Extra Clang Tools 20.1.8 Release Notes

Written by the LLVM Team

## Introduction

This document contains the release notes for the Extra Clang Tools, part of the Clang release 20.1.8. Here we describe the status of the Extra Clang Tools in some detail, including major improvements from the previous release and new feature work. All LLVM releases may be downloaded from the LLVM releases web site.

For more information about Clang or LLVM, including information about the latest release, please see the Clang Web Site or the LLVM Web Site.

Note that if you are reading this file from a Git checkout or the main Clang 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.

## What’s New in Extra Clang Tools 20.1.8?

Some of the major new features and improvements to Extra Clang Tools are listed here. Generic improvements to Extra Clang Tools as a whole or to its underlying infrastructure are described first, followed by tool-specific sections.

### Major New Features

- The `clang-pseudo` tool is incomplete and does not have active maintainers, so it has been removed. See the RFC for more details.

…

### Improvements to clangd

#### Inlay hints

- Added support for inlay hints for default arguments, enabled using the DefaultArguments config option (#GH95712)

#### Diagnostics

#### Semantic Highlighting

#### Compile flags

- Fixed a bug where clangd would unnecessarily reparse open files whose compile command did not change when receiving a new compile command via an LSP workspace/configuration request (#GH115438)

#### Hover

- Hovering over a function name now shows the function’s documentation comment even if the comment is written above the function’s out-of-line definition in a different source file (#GH67802)

#### Code completion

- Added an ArgumentLists config option under Completion. This is a more flexible version of the –function-arg-placeholders command line flag, allowing users more detailed control of what is inserted in argument list position when clangd completes the name of a function in a function call context. (#GH111322)

- Clangd now supports configuring which headers should be inserted using <> vs. “” syntax using the QuotedHeaders and AngledHeaders config options under Style (#GH67749)

- Added completion for C++20 keywords.

- Improved code completion behaviour in dependent/templated code

- Completion items now include documentation comments in more cases (#GH120099)

#### Code actions

- Added Swap operands tweak for certain binary operators.

- Improved the extract-to-function code action to allow extracting statements with overloaded operators like `<<` of `std::ostream`.

- Define outline now handles member functions of class templates, and member function templates.

- Extract variable can now operate on the top-level expression in an expression statement (#GH112525)

#### Signature help

#### Cross-references

- Clangd now supports the “outgoing calls” direction of call hierarchy (#GH77556)

- Call hierarchy can now be invoked on fields and namespace-scope variables (#GH113900)

- Improved heuristics for filtering out generated Protobuf symbol names during indexing (#GH110091)

- Compiler intrinsics defined in *intrin.h system headers are now indexed even if they have reserved names (#GH119735)

- Various improvements to go-to-definition in templated code

#### Objective-C

#### Clang-tidy integration

- Improved robustness in handling clang-tidy check names (#GH109421)

#### C++20 Modules Support

- Support code completion for symbols defined in modules (#GH110083)

- Improve performance when opening files that import modules (#GH106683)

- Compile commands for modules now respect modifications specified in .clangd files (#GH122606)

#### Miscellaneous

- Fixed an OOM affecting some versions of libcxx headers compiled in C++20 mode (#GH108866)

- Various other stability improvements, e.g. crash fixes

### Improvements to clang-doc

### Improvements to clang-query

- Added set enable-profile true/false command for basic matcher profiling.

### Improvements to clang-tidy

- Improved clang-tidy-diff.py script. Add the -only-check-in-db option to exclude files not present in the compilation database, avoiding false-negative results.

- Improved run-clang-tidy.py script. Fixed minor shutdown noise happening on certain platforms when interrupting the script.

- Improved clang-tidy:

  - add support for –verify-config flag to check the configuration options of the Clang Static Analyzer Checks.

  - accept parameters file in command line.

  - fix incorrect configuration file path resolving when file paths contain `..`.

  - remove global options for most of checks. All options are changed to local options except IncludeStyle, StrictMode and IgnoreMacros. Global scoped StrictMode and IgnoreMacros are deprecated and will be removed in further releases.

Check | Options removed from global option
--- | ---
bugprone-reserved-identifier | AggressiveDependentMemberLookup
bugprone-unchecked-optional-access | IgnoreSmartPointerDereference
cppcoreguidelines-pro-type-member-init | UseAssignment
cppcoreguidelines-rvalue-reference-param-not-moved | AllowPartialMove; IgnoreUnnamedParams; IgnoreNonDeducedTemplateTypes
misc-include-cleaner | IgnoreHeaders; DeduplicateFindings
performance-inefficient-vector-operation | EnableProto
readability-identifier-naming | AggressiveDependentMemberLookup
readability-inconsistent-declaration-parameter-name | Strict
readability-redundant-access-specifiers | CheckFirstDeclaration
readability-redundant-casting | IgnoreTypeAliases

- Fixed bug in clang-tidy by which HeaderFilterRegex did not take effect when passed via the .clang-tidy file.

- Fixed bug in run_clang_tidy.py where the program would not correctly display the checks enabled by the top-level .clang-tidy file.

#### New checks

- New bugprone-bitwise-pointer-cast check.

  Warns about code that tries to cast between pointers by means of `std::bit_cast` or `memcpy`.

- New bugprone-incorrect-enable-shared-from-this check.

  Detect classes or structs that do not publicly inherit from `std::enable_shared_from_this`, because unintended behavior will otherwise occur when calling `shared_from_this`.

- New bugprone-nondeterministic-pointer-iteration-order check.

  Finds nondeterministic usages of pointers in unordered containers.

- New bugprone-tagged-union-member-count check.

  Gives warnings for tagged unions, where the number of tags is different from the number of data members inside the union.

- New modernize-use-integer-sign-comparison check.

  Replace comparisons between signed and unsigned integers with their safe C++20 `std::cmp_*` alternative, if available.

- New portability-template-virtual-member-function check.

  Finds cases when an uninstantiated virtual member function in a template class causes cross-compiler incompatibility.

#### New check aliases

- New alias cert-arr39-c to bugprone-sizeof-expression was added.

#### Changes in existing checks

- Improved altera-id-dependent-backward-branch check by fixing crashes from invalid code.

- Improved bugprone-branch-clone check to improve detection of branch clones by now detecting duplicate inner and outer if statements.

- Improved bugprone-casting-through-void check to suggest replacing the offending code with `reinterpret_cast`, to more clearly express intent.

- Improved bugprone-dangling-handle check to treat `std::span` as a handle class.

- Improved bugprone-exception-escape by fixing false positives when a consteval function with throw statements.

- Improved bugprone-forwarding-reference-overload check by fixing a crash when determining if an `enable_if[_t]` was found.

- Improve bugprone-narrowing-conversions to avoid incorrect check results when floating point type is not `float`, `double` and `long double`.

- Improved bugprone-optional-value-conversion to support detecting conversion directly by `std::make_unique` and `std::make_shared`.

- Improved bugprone-posix-return check to support integer literals as LHS and posix call as RHS of comparison.

- Improved bugprone-return-const-ref-from-parameter check to diagnose potential dangling references when returning a `const &` parameter by using the conditional operator `cond ? var1 : var2` and fixing false positives for functions which contain lambda and ignore parameters with `[[clang::lifetimebound]]` attribute.

- Improved bugprone-sizeof-expression check to find suspicious usages of `sizeof()`, `alignof()`, and `offsetof()` when adding or subtracting from a pointer directly or when used to scale a numeric value and fix false positive when sizeof expression with template types.

- Improved bugprone-throw-keyword-missing by fixing a false positive when using non-static member initializers and a constructor.

- Improved bugprone-unchecked-optional-access to support `bsl::optional` and `bdlb::NullableValue` from <https://github.com/bloomberg/bde>_.

- Improved bugprone-unhandled-self-assignment check by fixing smart pointer check against std::unique_ptr type.

- Improved bugprone-unsafe-functions check to allow specifying additional functions to match.

- Improved bugprone-unused-local-non-trivial-variable check to avoid false positives when using name-independent variables after C++26.

- Improved bugprone-use-after-move to avoid triggering on `reset()` calls on moved-from `std::optional` and `std::any` objects, similarly to smart pointers.

- Improved cert-flp30-c check to fix false positive that floating point variable is only used in increment expression.

- Improved cppcoreguidelines-avoid-const-or-ref-data-members check to avoid false positives when detecting a templated class with inheritance.

- Improved cppcoreguidelines-init-variables check by fixing the insertion location for function pointers.

- Improved cppcoreguidelines-prefer-member-initializer check to avoid false positive when member initialization depends on a structured binding variable.

- Fixed cppcoreguidelines-pro-type-union-access check to report a location even when the member location is not valid.

- Improved misc-definitions-in-headers check by rewording the diagnostic note that suggests adding `inline`.

- Improved misc-redundant-expression check by extending the checker to detect floating point and integer literals in redundant expressions.

- Improved misc-unconventional-assign-operator check to avoid false positive for C++23 deducing this.

- Improved misc-use-internal-linkage check to insert `static` keyword before type qualifiers such as `const` and `volatile`. Also, fix false positives for function declaration without body, C++20 consteval functions, C++20 export declarations, and global scoped overloaded `operator new` and `operator delete`.

- Improved modernize-avoid-c-arrays check to suggest using `std::span` as a replacement for parameters of incomplete C array type in C++20 and `std::array` or `std::vector` before C++20.

- Improved modernize-loop-convert check to fix false positive when using loop variable in initializer of lambda capture.

- Improved modernize-min-max-use-initializer-list check by fixing a false positive when only an implicit conversion happened inside an initializer list.

- Improved modernize-raw-string-literal check to fix incorrect fix-it when the string contains a user-defined suffix.

- Improved modernize-use-designated-initializers check to fix a crash when a class is declared but not defined.

- Improved modernize-use-integer-sign-comparison check to add an option `EnableQtSupport`, that makes C++17 `q20::cmp_*` alternative available for Qt-based applications.

- Improved modernize-use-nullptr check to also recognize `NULL`/`__null` (but not `0`) when used with a templated type.

- Improved modernize-use-starts-ends-with check to handle two new cases from `rfind` and `compare` to `ends_with`, and one new case from `substr` to `starts_with`, and a small adjustment to the diagnostic message.

- Improved modernize-use-std-format check to support replacing member function calls too and to only expand macros starting with `PRI` and `__PRI` from `<inttypes.h>` in the format string.

- Improved modernize-use-std-print check to support replacing member function calls too and to only expand macros starting with `PRI` and `__PRI` from `<inttypes.h>` in the format string.

- Improved modernize-use-using check by not expanding macros.

- Improved performance-avoid-endl check to use `std::endl` as placeholder when lexer cannot get source text.

- Improved performance-move-const-arg check to fix a crash when an argument type is declared but not defined.

- Improved performance-unnecessary-copy-initialization check to consider static member functions the same way as free functions.

- Improved readability-container-contains check to let it work on any class that has a `contains` method. Fix some false negatives in the `find()` case.

- Improved readability-enum-initial-value check by only issuing diagnostics for the definition of an `enum`, by not emitting a redundant file path for anonymous enums in the diagnostic, and by fixing a typo in the diagnostic.

- Improved readability-identifier-naming check to validate `namespace` aliases.

- Improved readability-implicit-bool-conversion check by adding the option UseUpperCaseLiteralSuffix to select the case of the literal suffix in fixes and fixing false positive for implicit conversion of comparison result in C23.

- Improved readability-redundant-casting check by addressing a false positive in aggregate initialization through parenthesized list.

- Improved readability-redundant-smartptr-get check to remove `->`, when redundant `get()` is removed.

- Improved readability-use-std-min-max check to use correct template type in `std::min` and `std::max` when operand is integer literal.

#### Removed checks

#### Miscellaneous

- The bugprone-narrowing-conversions check is no longer an alias of cppcoreguidelines-narrowing-conversions. Instead, cppcoreguidelines-narrowing-conversions is now an alias of bugprone-narrowing-conversions.

### Improvements to include-fixer

The improvements are…

### Improvements to clang-include-fixer

The improvements are…

### Improvements to modularize

The improvements are…

### Improvements to pp-trace

### Clang-tidy Visual Studio plugin