• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1.. title:: clang-tidy - llvm-prefer-isa-or-dyn-cast-in-conditionals
2
3llvm-prefer-isa-or-dyn-cast-in-conditionals
4===========================================
5
6Looks at conditionals and finds and replaces cases of ``cast<>``,
7which will assert rather than return a null pointer, and
8``dyn_cast<>`` where the return value is not captured. Additionally,
9finds and replaces cases that match the pattern ``var &&
10isa<X>(var)``, where ``var`` is evaluated twice.
11
12.. code-block:: c++
13
14  // Finds these:
15  if (auto x = cast<X>(y)) {}
16  // is replaced by:
17  if (auto x = dyn_cast<X>(y)) {}
18
19  if (cast<X>(y)) {}
20  // is replaced by:
21  if (isa<X>(y)) {}
22
23  if (dyn_cast<X>(y)) {}
24  // is replaced by:
25  if (isa<X>(y)) {}
26
27  if (var && isa<T>(var)) {}
28  // is replaced by:
29  if (isa_and_nonnull<T>(var.foo())) {}
30
31  // Other cases are ignored, e.g.:
32  if (auto f = cast<Z>(y)->foo()) {}
33  if (cast<Z>(y)->foo()) {}
34  if (X.cast(y)) {}
35