[clang] [analyzer] Conversion to CheckerFamily: NullabilityChecker (PR #143735)
DonĂ¡t Nagy via cfe-commits
cfe-commits at lists.llvm.org
Thu Jun 12 04:57:35 PDT 2025
================
@@ -113,25 +114,21 @@ class NullabilityChecker
void printState(raw_ostream &Out, ProgramStateRef State, const char *NL,
const char *Sep) const override;
- enum CheckKind {
- CK_NullPassedToNonnull,
- CK_NullReturnedFromNonnull,
- CK_NullableDereferenced,
- CK_NullablePassedToNonnull,
- CK_NullableReturnedFromNonnull,
- CK_NumCheckKinds
- };
-
- bool ChecksEnabled[CK_NumCheckKinds] = {false};
- CheckerNameRef CheckNames[CK_NumCheckKinds];
- mutable std::unique_ptr<BugType> BTs[CK_NumCheckKinds];
-
- const std::unique_ptr<BugType> &getBugType(CheckKind Kind) const {
- if (!BTs[Kind])
- BTs[Kind].reset(new BugType(CheckNames[Kind], "Nullability",
- categories::MemoryError));
- return BTs[Kind];
- }
+ StringRef getDebugTag() const override { return "NullabilityChecker"; }
+
+ // FIXME: All bug types share the same Description ("Nullability") since the
+ // creation of this checker. We should write more descriptive descriptions...
+ // or just eliminate the Description field if it is meaningless?
----------------
NagyDonat wrote:
> How is the `Description` displayed to the user?
The `Description` is included in the `plist` output (which is a machine-friendly "raw" output format), so tools that consume `plist` may display it to the user -- but e.g. CodeChecker ignores it. (In the HTML output, the `Description` of the bug type appears within a `<!-- BUGTYPE ... -->` comment, i.e. it's there perhaps for debugging purposes but not actually visible.)
Moreover, the `Description` of the `BugType` affects the hash and the ordering of the `PathDiagnostic` objects, so perturbing it will influence the analyzer results.
> Can we use the `HelpText` from `Checkers.td` as the Description?
No, the `HelpText` is associated with a whole checker (more precisely, a user-facing `CheckerFrontend` like `nullability.NullPassedToNonnull`), while this `Description` is a data member of a `BugType` -- and a single `CheckerFrontend` may "own" multiple `BugType`s. (In this particular checker there is 1:1 correspondence between the `CheckerFrontend`s and `BugType`s, so I'm using the trivial convenience wrapper `CheckerFrontendWithBugType` to initialize a `CheckerFrontend` and the single `BugType` which belongs to it, but this is not the general case.)
Also, AFAIK the `Description` of the bug type is usually a very short name-like string, while the `HelpText` is a somewhat longer documentation-like text.
https://github.com/llvm/llvm-project/pull/143735
More information about the cfe-commits
mailing list