================
@@ -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
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits