================
@@ -4122,6 +4122,9 @@ def RestrictDocs : Documentation {
 The ``malloc`` attribute indicates that the function acts like a system memory
 allocation function, returning a pointer to allocated storage disjoint from the
 storage for any other object accessible to the caller.
+
+The form of ``malloc`` with one or two arguments (supported by GCC 11) is
+currently ignored by Clang.
----------------
aloisklink wrote:

In this PR, it's completely ignored, it's not even added to the Clang AST.

It just reaches the end of this function where nothing happens (let me know if 
I can improve the comment!):

https://github.com/llvm/llvm-project/blob/f9c914729a5f5ac7f8b61ea2d39509ff0236a228/clang/lib/Sema/SemaDeclAttr.cpp#L2084-L2087

We can't treat it as if has no arguments because in GCC it means two different 
things:
  - `__attribute__((malloc))` with no args means the return value is guaranteed 
not to alias to any other pointer (aka like [`__declspec(restrict)` in 
MSVC](https://learn.microsoft.com/en-us/cpp/cpp/restrict?view=msvc-170)) and 
that the function will normally return non-`NULL`, allowing optimizations,
  - `__attribute__((malloc(deallocator)))` instead says the returned pointer 
should be deallocated by the specified deallocator, allowing a static analyzer 
to print warnings.

See the `malloc` section of 
https://gcc.gnu.org/onlinedocs/gcc/Common-Function-Attributes.html for more 
info.

To be honest, I feel like GCC should have given the one/two argument form a 
different attribute name to make things less confusing, but GCC 11 has already 
been out for years unfortunately.

https://github.com/llvm/llvm-project/pull/68059
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to