[clang] [Clang][Sema] Disallow applying `onwership_returns` to functions that return non-pointers (PR #99564)

Aaron Ballman via cfe-commits cfe-commits at lists.llvm.org
Sat Jul 27 08:06:44 PDT 2024


================
@@ -1481,6 +1481,15 @@ static void handleOwnershipAttr(Sema &S, Decl *D, const ParsedAttr &AL) {
     break;
   }
 
+  // Allow only pointers to be return type for functions with ownership_returns
+  // attribute. This matches with current OwnershipAttr::Takes semantics
+  if (K == OwnershipAttr::Returns) {
+    if (!getFunctionOrMethodResultType(D)->isPointerType()) {
+      S.Diag(AL.getLoc(), diag::err_ownership_takes_return_type) << AL;
+      return;
+    }
+  }
----------------
AaronBallman wrote:

```suggestion
  if (K == OwnershipAttr::Returns && 
     !getFunctionOrMethodResultType(D)->isPointerType()) {
    S.Diag(AL.getLoc(), diag::err_ownership_takes_return_type) << AL;
    return;
  }
```
(combining the two predicates, may need reformatting.)

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


More information about the cfe-commits mailing list