[all-commits] [llvm/llvm-project] de6ba9: [analyzer][Casting] Support isa, cast, dyn_cast of...

Balazs Benics via All-commits all-commits at lists.llvm.org
Tue Jun 14 04:43:29 PDT 2022


  Branch: refs/heads/main
  Home:   https://github.com/llvm/llvm-project
  Commit: de6ba9704d0b4fa047a030b5bf369e425b937198
      https://github.com/llvm/llvm-project/commit/de6ba9704d0b4fa047a030b5bf369e425b937198
  Author: Balazs Benics <balazs.benics at sigmatechnology.se>
  Date:   2022-06-14 (Tue, 14 Jun 2022)

  Changed paths:
    M clang/include/clang/StaticAnalyzer/Core/PathSensitive/SVals.h
    M clang/lib/StaticAnalyzer/Checkers/BasicObjCFoundationChecks.cpp

  Log Message:
  -----------
  [analyzer][Casting] Support isa, cast, dyn_cast of SVals

This change specializes the LLVM RTTI mechanism for SVals.
After this change, we can use the well-known `isa`, `cast`, `dyn_cast`.

Examples:

  // SVal V = ...;
  // Loc MyLoc = ...;

  bool IsInteresting = isa<loc::MemRegionVal, loc::GotoLabel>(MyLoc);
  auto MRV = cast<loc::MemRegionVal>(MyLoc);
  Optional<loc::MemRegionVal> MaybeMRV = dyn_cast<loc::MemRegionVal>(V)

The current `SVal::getAs` and `castAs` member functions are redundant at
this point, but I believe that they are still handy.

The member function version is terse and reads left-to-right, which IMO
is a great plus. However, we should probably add a variadic `isa` member
function version to have the same casting API in both cases.

Thanks for the extensive TMP help @bzcheeseman!

Reviewed By: bzcheeseman

Differential Revision: https://reviews.llvm.org/D125709




More information about the All-commits mailing list