clang-tools 22.0.0git
clang::tidy::llvm_check::PreferIsaOrDynCastInConditionalsCheck Class Reference

Looks at conditionals and finds and replaces cases of cast<>, which will / assert rather than return a null pointer, and dyn_cast<> where / the return value is not captured. More...

#include <PreferIsaOrDynCastInConditionalsCheck.h>

Inheritance diagram for clang::tidy::llvm_check::PreferIsaOrDynCastInConditionalsCheck:
[legend]

Public Member Functions

 PreferIsaOrDynCastInConditionalsCheck (StringRef Name, ClangTidyContext *Context)
bool isLanguageVersionSupported (const LangOptions &LangOpts) const override
void registerMatchers (ast_matchers::MatchFinder *Finder) override
void check (const ast_matchers::MatchFinder::MatchResult &Result) override

Detailed Description

Looks at conditionals and finds and replaces cases of cast<>, which will / assert rather than return a null pointer, and dyn_cast<> where / the return value is not captured.

Additionally, finds and replaces cases / that match the pattern var && isa<X>(var), where var is evaluated twice.

Finds cases like these:

if (auto x = cast<X>(y)) {}
// is replaced by:
if (auto x = dyn_cast<X>(y)) {}
if (cast<X>(y)) {}
// is replaced by:
if (isa<X>(y)) {}
if (dyn_cast<X>(y)) {}
// is replaced by:
if (isa<X>(y)) {}
if (var && isa<T>(var)) {}
// is replaced by:
if (isa_and_nonnull<T>(var.foo())) {}
Symbol var(llvm::StringRef Name)
Definition TestIndex.cpp:78

// Other cases are ignored, e.g.:

if (auto f = cast<Z>(y)->foo()) {}
if (cast<Z>(y)->foo()) {}
if (X.cast(y)) {}
int foo()
Definition foo.cpp:2
static ClangTidyModuleRegistry::Add< altera::AlteraModule > X("altera-module", "Adds Altera FPGA OpenCL lint checks.")

For the user-facing documentation see: https://clang.llvm.org/extra/clang-tidy/checks/llvm/prefer-isa-or-dyn-cast-in-conditionals.html

Definition at line 50 of file PreferIsaOrDynCastInConditionalsCheck.h.

Constructor & Destructor Documentation

◆ PreferIsaOrDynCastInConditionalsCheck()

clang::tidy::llvm_check::PreferIsaOrDynCastInConditionalsCheck::PreferIsaOrDynCastInConditionalsCheck ( StringRef Name,
ClangTidyContext * Context )
inline

Definition at line 52 of file PreferIsaOrDynCastInConditionalsCheck.h.

Member Function Documentation

◆ check()

void clang::tidy::llvm_check::PreferIsaOrDynCastInConditionalsCheck::check ( const ast_matchers::MatchFinder::MatchResult & Result)
override

Definition at line 61 of file PreferIsaOrDynCastInConditionalsCheck.cpp.

◆ isLanguageVersionSupported()

bool clang::tidy::llvm_check::PreferIsaOrDynCastInConditionalsCheck::isLanguageVersionSupported ( const LangOptions & LangOpts) const
inlineoverride

Definition at line 55 of file PreferIsaOrDynCastInConditionalsCheck.h.

◆ registerMatchers()

void clang::tidy::llvm_check::PreferIsaOrDynCastInConditionalsCheck::registerMatchers ( ast_matchers::MatchFinder * Finder)
override

Definition at line 23 of file PreferIsaOrDynCastInConditionalsCheck.cpp.


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