[clang] [NFC][analyzer] Rename `CheckerBase::getCheckerName` to `getName` (PR #130953)

DonĂ¡t Nagy via cfe-commits cfe-commits at lists.llvm.org
Wed Mar 12 06:39:53 PDT 2025


================
@@ -41,19 +41,19 @@ class BugType {
         Checker(nullptr), SuppressOnSink(SuppressOnSink) {}
   BugType(const CheckerBase *Checker, StringRef Desc,
           StringRef Cat = categories::LogicError, bool SuppressOnSink = false)
-      : CheckerName(Checker->getCheckerName()), Description(Desc),
-        Category(Cat), Checker(Checker), SuppressOnSink(SuppressOnSink) {}
+      : CheckerName(), Description(Desc), Category(Cat), Checker(Checker),
+        SuppressOnSink(SuppressOnSink) {}
   virtual ~BugType() = default;
 
   StringRef getDescription() const { return Description; }
   StringRef getCategory() const { return Category; }
   StringRef getCheckerName() const {
-    // FIXME: This is a workaround to ensure that the correct checerk name is
+    // FIXME: This is a workaround to ensure that the correct checker name is
     // used. The checker names are set after the constructors are run.
     // In case the BugType object is initialized in the checker's ctor
     // the CheckerName field will be empty. To circumvent this problem we use
     // CheckerBase whenever it is possible.
-    StringRef Ret = Checker ? Checker->getCheckerName() : CheckerName;
----------------
NagyDonat wrote:

Under the current system we still need `CheckerName`, but we will be able to remove it when I implement my new multipart checker framework and all multipart checkers are transferred to it.

Right now both constructors of `BugType` are used and needed:
- In simple straightforward checkers `Checker->getCheckerName()` can return the (single) name of the checker, so we can directly initialize the bug types as `BugType BT{this, ...}` with the constructor which takes `CheckerBase *Checker` and default initializes `CheckerName`.
- In multipart checkers the `BugType` wouldn't be able to query the name of the relevant checker part from a `CheckerBase *` (because currently each multipart checker implements its own custom array of checker names), so we need to initialize the `BugType` with a `CheckerNameRef`, which requires lazy initialization (the ugly `mutable std::unique_ptr<BugType>`) because the names of the sub-checkers are not yet available when the checker object is constructed.

The main effect of my multipart checker change is (roughly speaking) that I will provide a `CheckerBase::getName(unsigned CheckerPartIdx)` and then `BugType`s can exactly reference a checker part with a pair of a `CheckerBase*` (the singleton instance of the checker class) and a numerical index (which identifies the part). After this, we can directly initialize each bug type object with either a `CheckerBase*` (simple checkers) or a `<CheckerBase*, unsigned>` pair (multipart checkers), so we can get rid of the `BugType` constructor that takes a raw `CheckerName` (and needs the awkward lazy initialization).

https://github.com/llvm/llvm-project/pull/130953


More information about the cfe-commits mailing list