Skip to content

Commit 2708bed

Browse files
committed
Remove hidden dummy checker part NullabilityBase
As far as I see it was just a hacky implementation detail within the old solution for registering the "real" checker parts. I'm placing this into a separate commit to make the review easier.
1 parent d4878a6 commit 2708bed

File tree

5 files changed

+41
-51
lines changed

5 files changed

+41
-51
lines changed

clang/include/clang/StaticAnalyzer/Checkers/Checkers.td

Lines changed: 27 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -326,39 +326,37 @@ def StdVariantChecker : Checker<"StdVariant">,
326326

327327
let ParentPackage = Nullability in {
328328

329-
def NullabilityBase : Checker<"NullabilityBase">,
330-
HelpText<"Stores information during the analysis about nullability.">,
331-
Documentation<NotDocumented>,
332-
Hidden;
333-
334-
def NullPassedToNonnullChecker : Checker<"NullPassedToNonnull">,
335-
HelpText<"Warns when a null pointer is passed to a pointer which has a "
336-
"_Nonnull type.">,
337-
Dependencies<[NullabilityBase]>,
338-
Documentation<HasDocumentation>;
329+
def NullPassedToNonnullChecker
330+
: Checker<"NullPassedToNonnull">,
331+
HelpText<"Warns when a null pointer is passed to a pointer which has a "
332+
"_Nonnull type.">,
333+
Documentation<HasDocumentation>;
339334

340-
def NullReturnedFromNonnullChecker : Checker<"NullReturnedFromNonnull">,
341-
HelpText<"Warns when a null pointer is returned from a function that has "
342-
"_Nonnull return type.">,
343-
Dependencies<[NullabilityBase]>,
344-
Documentation<HasDocumentation>;
335+
def NullReturnedFromNonnullChecker
336+
: Checker<"NullReturnedFromNonnull">,
337+
HelpText<
338+
"Warns when a null pointer is returned from a function that has "
339+
"_Nonnull return type.">,
340+
Documentation<HasDocumentation>;
345341

346-
def NullableDereferencedChecker : Checker<"NullableDereferenced">,
347-
HelpText<"Warns when a nullable pointer is dereferenced.">,
348-
Dependencies<[NullabilityBase]>,
349-
Documentation<HasDocumentation>;
342+
def NullableDereferencedChecker
343+
: Checker<"NullableDereferenced">,
344+
HelpText<"Warns when a nullable pointer is dereferenced.">,
345+
Documentation<HasDocumentation>;
350346

351-
def NullablePassedToNonnullChecker : Checker<"NullablePassedToNonnull">,
352-
HelpText<"Warns when a nullable pointer is passed to a pointer which has a "
353-
"_Nonnull type.">,
354-
Dependencies<[NullabilityBase]>,
355-
Documentation<HasDocumentation>;
347+
def NullablePassedToNonnullChecker
348+
: Checker<"NullablePassedToNonnull">,
349+
HelpText<
350+
"Warns when a nullable pointer is passed to a pointer which has a "
351+
"_Nonnull type.">,
352+
Documentation<HasDocumentation>;
356353

357-
def NullableReturnedFromNonnullChecker : Checker<"NullableReturnedFromNonnull">,
358-
HelpText<"Warns when a nullable pointer is returned from a function that has "
359-
"_Nonnull return type.">,
360-
Dependencies<[NullabilityBase]>,
361-
Documentation<NotDocumented>;
354+
def NullableReturnedFromNonnullChecker
355+
: Checker<"NullableReturnedFromNonnull">,
356+
HelpText<"Warns when a nullable pointer is returned from a function "
357+
"that has "
358+
"_Nonnull return type.">,
359+
Documentation<NotDocumented>;
362360

363361
} // end "nullability"
364362

clang/lib/StaticAnalyzer/Checkers/NullabilityChecker.cpp

Lines changed: 13 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -114,12 +114,7 @@ class NullabilityChecker
114114

115115
// FIXME: This enumeration of checker parts is extremely similar to the
116116
// ErrorKind enum. It would be nice to unify them to simplify the code.
117-
// FIXME: The modeling checker NullabilityBase is a dummy "empty checker
118-
// part" that registers this checker class without enabling any of the real
119-
// checker parts. As far as I understand no other checker references it, so
120-
// it should be removed.
121117
enum : CheckerPartIdx {
122-
NullabilityBase,
123118
NullPassedToNonnullChecker,
124119
NullReturnedFromNonnullChecker,
125120
NullableDereferencedChecker,
@@ -130,10 +125,7 @@ class NullabilityChecker
130125

131126
// FIXME: Currently the `Description` fields of these `BugType`s are all
132127
// identical ("Nullability") -- they should be more descriptive than this.
133-
// NOTE: NullabilityBase is a dummy checker part that does nothing, so its
134-
// bug type is left empty.
135128
BugType BugTypes[NumCheckerParts] = {
136-
{this, NullabilityBase, "", ""},
137129
{this, NullPassedToNonnullChecker, "Nullability",
138130
categories::MemoryError},
139131
{this, NullReturnedFromNonnullChecker, "Nullability",
@@ -1412,25 +1404,27 @@ void NullabilityChecker::printState(raw_ostream &Out, ProgramStateRef State,
14121404
}
14131405

14141406
#define REGISTER_CHECKER(Part, TrackingRequired) \
1415-
void ento::register##Part(CheckerManager &Mgr) { \
1416-
auto *Checker = \
1417-
Mgr.registerChecker<NullabilityChecker, NullabilityChecker::Part>(); \
1407+
void ento::register##Part##Checker(CheckerManager &Mgr) { \
1408+
auto *Checker = Mgr.registerChecker<NullabilityChecker, \
1409+
NullabilityChecker::Part##Checker>(); \
14181410
Checker->NeedTracking = Checker->NeedTracking || TrackingRequired; \
14191411
Checker->NoDiagnoseCallsToSystemHeaders = \
14201412
Checker->NoDiagnoseCallsToSystemHeaders || \
14211413
Mgr.getAnalyzerOptions().getCheckerBooleanOption( \
1422-
Checker, "NoDiagnoseCallsToSystemHeaders", true); \
1414+
Mgr.getCurrentCheckerName(), "NoDiagnoseCallsToSystemHeaders", \
1415+
true); \
14231416
} \
14241417
\
1425-
bool ento::shouldRegister##Part(const CheckerManager &) { return true; }
1418+
bool ento::shouldRegister##Part##Checker(const CheckerManager &) { \
1419+
return true; \
1420+
}
14261421

14271422
// These checker parts are likely to be turned on by default and they don't
14281423
// need the tracking of nullability related information. As an optimization
14291424
// nullability information won't be tracked when the rest are disabled.
1430-
REGISTER_CHECKER(NullabilityBase, false)
1431-
REGISTER_CHECKER(NullPassedToNonnullChecker, false)
1432-
REGISTER_CHECKER(NullReturnedFromNonnullChecker, false)
1425+
REGISTER_CHECKER(NullPassedToNonnull, false)
1426+
REGISTER_CHECKER(NullReturnedFromNonnull, false)
14331427

1434-
REGISTER_CHECKER(NullableDereferencedChecker, true)
1435-
REGISTER_CHECKER(NullablePassedToNonnullChecker, true)
1436-
REGISTER_CHECKER(NullableReturnedFromNonnullChecker, true)
1428+
REGISTER_CHECKER(NullableDereferenced, true)
1429+
REGISTER_CHECKER(NullablePassedToNonnull, true)
1430+
REGISTER_CHECKER(NullableReturnedFromNonnull, true)

clang/test/Analysis/analyzer-enabled-checkers.c

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,6 @@
3333
// CHECK-NEXT: core.uninitialized.CapturedBlockVariable
3434
// CHECK-NEXT: core.uninitialized.UndefReturn
3535
// CHECK-NEXT: deadcode.DeadStores
36-
// CHECK-NEXT: nullability.NullabilityBase
3736
// CHECK-NEXT: nullability.NullPassedToNonnull
3837
// CHECK-NEXT: nullability.NullReturnedFromNonnull
3938
// CHECK-NEXT: security.insecureAPI.SecuritySyntaxChecker

clang/test/Analysis/bugfix-124477.m

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// RUN: %clang_analyze_cc1 -analyzer-checker=core,apiModeling,nullability.NullableDereferenced,nullability.NullabilityBase -x objective-c %s
1+
// RUN: %clang_analyze_cc1 -analyzer-checker=core,apiModeling,nullability.NullableDereferenced -x objective-c %s
22
/*
33
This test is reduced from a static analyzer crash. The bug causing
44
the crash is explained in #124477. It can only be triggered in some

clang/test/Analysis/std-c-library-functions-arg-enabled-checkers.c

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,6 @@
4141
// CHECK-NEXT: core.uninitialized.CapturedBlockVariable
4242
// CHECK-NEXT: core.uninitialized.UndefReturn
4343
// CHECK-NEXT: deadcode.DeadStores
44-
// CHECK-NEXT: nullability.NullabilityBase
4544
// CHECK-NEXT: nullability.NullPassedToNonnull
4645
// CHECK-NEXT: nullability.NullReturnedFromNonnull
4746
// CHECK-NEXT: security.insecureAPI.SecuritySyntaxChecker

0 commit comments

Comments
 (0)