martong created this revision. martong added reviewers: Szelethus, NoQ, baloghadamsoftware, balazske, steakhal. Herald added subscribers: cfe-commits, ASDenysPetrov, Charusso, gamesh411, dkrupp, donat.nagy, mikhail.ramalho, a.sidorin, rnkovacs, szepet, xazax.hun, whisperity. Herald added a project: clang.
If a given parameter in a FunctionDecl has a nonull attribute then the NonNull constraint in StdCLibraryFunctionsChecker has the same effect as NonNullParamChecker. I think it is better to emit diagnostics from the simpler checker. By making NonNullParamChecker as a dependency, in these cases it will be the first to emit a diagnostic and to stop the analysis on that path. Repository: rG LLVM Github Monorepo https://reviews.llvm.org/D79420 Files: clang/include/clang/StaticAnalyzer/Checkers/Checkers.td clang/test/Analysis/analyzer-enabled-checkers.c Index: clang/test/Analysis/analyzer-enabled-checkers.c =================================================================== --- clang/test/Analysis/analyzer-enabled-checkers.c +++ clang/test/Analysis/analyzer-enabled-checkers.c @@ -6,15 +6,15 @@ // CHECK: OVERVIEW: Clang Static Analyzer Enabled Checkers List // CHECK-EMPTY: -// CHECK-NEXT: apiModeling.StdCLibraryFunctions +// CHECK-NEXT: core.NonNullParamChecker // CHECK-NEXT: core.CallAndMessage +// CHECK-NEXT: apiModeling.StdCLibraryFunctions // CHECK-NEXT: apiModeling.StdCLibraryFunctionArgs // CHECK-NEXT: apiModeling.TrustNonnull // CHECK-NEXT: apiModeling.llvm.CastValue // CHECK-NEXT: apiModeling.llvm.ReturnValue // CHECK-NEXT: core.DivideZero // CHECK-NEXT: core.DynamicTypePropagation -// CHECK-NEXT: core.NonNullParamChecker // CHECK-NEXT: core.NonnilStringConstants // CHECK-NEXT: core.NullDereference // CHECK-NEXT: core.StackAddrEscapeBase Index: clang/include/clang/StaticAnalyzer/Checkers/Checkers.td =================================================================== --- clang/include/clang/StaticAnalyzer/Checkers/Checkers.td +++ clang/include/clang/StaticAnalyzer/Checkers/Checkers.td @@ -293,13 +293,14 @@ def StdCLibraryFunctionsChecker : Checker<"StdCLibraryFunctions">, HelpText<"Improve modeling of the C standard library functions">, + Dependencies<[NonNullParamChecker, CallAndMessageChecker]>, Documentation<NotDocumented>; def StdCLibraryFunctionArgsChecker : Checker<"StdCLibraryFunctionArgs">, HelpText<"Check constraints of arguments of C standard library functions, " "such as whether the parameter of isalpha is in the range [0, 255] " "or is EOF.">, - Dependencies<[StdCLibraryFunctionsChecker, CallAndMessageChecker]>, + Dependencies<[StdCLibraryFunctionsChecker]>, Documentation<NotDocumented>; def TrustNonnullChecker : Checker<"TrustNonnull">,
Index: clang/test/Analysis/analyzer-enabled-checkers.c =================================================================== --- clang/test/Analysis/analyzer-enabled-checkers.c +++ clang/test/Analysis/analyzer-enabled-checkers.c @@ -6,15 +6,15 @@ // CHECK: OVERVIEW: Clang Static Analyzer Enabled Checkers List // CHECK-EMPTY: -// CHECK-NEXT: apiModeling.StdCLibraryFunctions +// CHECK-NEXT: core.NonNullParamChecker // CHECK-NEXT: core.CallAndMessage +// CHECK-NEXT: apiModeling.StdCLibraryFunctions // CHECK-NEXT: apiModeling.StdCLibraryFunctionArgs // CHECK-NEXT: apiModeling.TrustNonnull // CHECK-NEXT: apiModeling.llvm.CastValue // CHECK-NEXT: apiModeling.llvm.ReturnValue // CHECK-NEXT: core.DivideZero // CHECK-NEXT: core.DynamicTypePropagation -// CHECK-NEXT: core.NonNullParamChecker // CHECK-NEXT: core.NonnilStringConstants // CHECK-NEXT: core.NullDereference // CHECK-NEXT: core.StackAddrEscapeBase Index: clang/include/clang/StaticAnalyzer/Checkers/Checkers.td =================================================================== --- clang/include/clang/StaticAnalyzer/Checkers/Checkers.td +++ clang/include/clang/StaticAnalyzer/Checkers/Checkers.td @@ -293,13 +293,14 @@ def StdCLibraryFunctionsChecker : Checker<"StdCLibraryFunctions">, HelpText<"Improve modeling of the C standard library functions">, + Dependencies<[NonNullParamChecker, CallAndMessageChecker]>, Documentation<NotDocumented>; def StdCLibraryFunctionArgsChecker : Checker<"StdCLibraryFunctionArgs">, HelpText<"Check constraints of arguments of C standard library functions, " "such as whether the parameter of isalpha is in the range [0, 255] " "or is EOF.">, - Dependencies<[StdCLibraryFunctionsChecker, CallAndMessageChecker]>, + Dependencies<[StdCLibraryFunctionsChecker]>, Documentation<NotDocumented>; def TrustNonnullChecker : Checker<"TrustNonnull">,
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits