[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