clang-tools 22.0.0git
clang::tidy::bugprone::StringviewNullptrCheck Class Reference

Checks for various ways that the const CharT* constructor of std::basic_string_view can be passed a null argument and replaces them with the default constructor in most cases. More...

#include <StringviewNullptrCheck.h>

Inheritance diagram for clang::tidy::bugprone::StringviewNullptrCheck:
[legend]

Public Member Functions

 StringviewNullptrCheck (StringRef Name, ClangTidyContext *Context)
bool isLanguageVersionSupported (const LangOptions &LangOpts) const override
Public Member Functions inherited from clang::tidy::utils::TransformerClangTidyCheck
 TransformerClangTidyCheck (StringRef Name, ClangTidyContext *Context)
 TransformerClangTidyCheck (std::function< std::optional< transformer::RewriteRuleWith< std::string > >(const LangOptions &, const OptionsView &)> MakeRule, StringRef Name, ClangTidyContext *Context)
 DEPRECATED: prefer the two argument constructor in conjunction with setRule.
 TransformerClangTidyCheck (transformer::RewriteRuleWith< std::string > R, StringRef Name, ClangTidyContext *Context)
 Convenience overload of the constructor when the rule doesn't have any dependencies.
void registerPPCallbacks (const SourceManager &SM, Preprocessor *PP, Preprocessor *ModuleExpanderPP) override
void registerMatchers (ast_matchers::MatchFinder *Finder) final
void check (const ast_matchers::MatchFinder::MatchResult &Result) final
void storeOptions (ClangTidyOptions::OptionMap &Opts) override
 Derived classes that override this function should call this method from the overridden method.
void setRule (transformer::RewriteRuleWith< std::string > R)
 Set the rule that this check implements.

Detailed Description

Checks for various ways that the const CharT* constructor of std::basic_string_view can be passed a null argument and replaces them with the default constructor in most cases.

For the comparison operators, braced initializer list does not compile so instead a call to .empty() or the empty string literal are used, where appropriate.

This prevents code from invoking behavior which is unconditionally undefined. The single-argument const CharT* constructor does not check for the null case before dereferencing its input. The standard is slated to add an explicitly-deleted overload to catch some of these cases: wg21.link/p2166

To catch the additional cases of NULL (which expands to __null) and 0, first run the modernize-use-nullptr check to convert the callers / to nullptr.

For the user-facing documentation see:
https://clang.llvm.org/extra/clang-tidy/checks/bugprone/stringview-nullptr.html 

Definition at line 34 of file StringviewNullptrCheck.h.

Constructor & Destructor Documentation

◆ StringviewNullptrCheck()

clang::tidy::bugprone::StringviewNullptrCheck::StringviewNullptrCheck ( StringRef Name,
ClangTidyContext * Context )

Member Function Documentation

◆ isLanguageVersionSupported()

bool clang::tidy::bugprone::StringviewNullptrCheck::isLanguageVersionSupported ( const LangOptions & LangOpts) const
inlineoverride

Definition at line 38 of file StringviewNullptrCheck.h.


The documentation for this class was generated from the following files: