[PATCH] D118657: Adds TrustReturnsNonnullChecker

Artem Dergachev via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Mon Jan 31 17:46:32 PST 2022


NoQ edited reviewers, added: NoQ; removed: dergachev.a.
NoQ added a comment.

Lovely! I have some nits.

@NoQ is my actual account, sorry for the mess >.<



================
Comment at: clang/lib/StaticAnalyzer/Checkers/TrustReturnsNonnullChecker.cpp:1-2
+//== TrustReturnsNonnullChecker.cpp --------- API nullability modeling -*- C++
+//-*--==//
+//
----------------
This line broke.


================
Comment at: clang/lib/StaticAnalyzer/Checkers/TrustReturnsNonnullChecker.cpp:42
+  /// \returns Whether the method declaration has the attribute returns_nonnull.
+  bool isNonNullPtr(const CallEvent &Call, CheckerContext &C) const {
+    QualType ExprRetType = Call.getResultType();
----------------
Parameter `C` appears to be unused.


================
Comment at: clang/lib/StaticAnalyzer/Checkers/TrustReturnsNonnullChecker.cpp:47
+
+    if (Call.getDecl()->hasAttr<ReturnsNonNullAttr>()) {
+      return true;
----------------
`Call.getDecl()` has to be checked for null. Calls with null decls appear when the function being called is unknown, eg. during calls through unknown/symbolic [[ https://cdecl.org/?q=void+*%28*f%29%28void%29 | pointer-to-function ]]:
```lang=c
void test(void *(*f)(void)) {
  // will probably crash the compiler, worth a test case
  f();
}
```


================
Comment at: clang/lib/StaticAnalyzer/Checkers/TrustReturnsNonnullChecker.cpp:48
+    if (Call.getDecl()->hasAttr<ReturnsNonNullAttr>()) {
+      return true;
+    }
----------------
```lang=c++
if (x) {
  return true;
}
return false;
```
can usually be shortened to
```lang=c
return x;
```
.


CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D118657/new/

https://reviews.llvm.org/D118657



More information about the llvm-commits mailing list