[clang] [Clang SA]: add support for mismatched ownership_returns+ownership_takes calls for custom allocation classes (PR #98941)

Balazs Benics via cfe-commits cfe-commits at lists.llvm.org
Wed Jul 17 21:58:17 PDT 2024


================
@@ -1877,16 +1923,43 @@ static bool didPreviousFreeFail(ProgramStateRef State,
   return false;
 }
 
+static void printOwnershipTakesList(raw_ostream &os, CheckerContext &C,
+                                    const Expr *E) {
+  if (const CallExpr *CE = dyn_cast<CallExpr>(E)) {
+    const FunctionDecl *FD = CE->getDirectCallee();
+    if (!FD)
+      return;
+
+    if (!FD->hasAttrs())
+      return;
+
+    // Only one ownership_takes attribute is allowed
+    for (const auto *I : FD->specific_attrs<OwnershipAttr>()) {
+      OwnershipAttr::OwnershipKind OwnKind = I->getOwnKind();
+
+      if (OwnKind != OwnershipAttr::Takes)
----------------
steakhal wrote:

```suggestion
      if (I->getOwnKind() != OwnershipAttr::Takes)
```
It seems like inlining this variable would make it more readable actually.

https://github.com/llvm/llvm-project/pull/98941


More information about the cfe-commits mailing list