bwendling wrote:
> I'd expect some kind of diagnostic when the specified field doesn't have a
> corresponding counted_by field.
So there's a complication with that. The use case for this builtin is to
automatically set the `count` field during allocation in the Linux kernel. (It
could be used elsewhere, but Linux is why we're doing this now.) From my
understanding, @kees wants to have a way to get the `count` field without
having to change the allocator's prototype. (Is that correct?) That's not
currently possible, or at least we haven't found a way to do it yet.
The idea is to do something like:
```c
#define kmalloc(type, COUNT) ({ \
... \
if (__builtin_get_counted_by(__p->FAM)) \
*__builtin_get_counted_by(__p->FAM) = COUNT; \
__p; \
})
```
We want the builtin to return a `nullptr` for this reason (because Clang
doesn't have a `__builtin_has_attribute` builtin). But also we can use the same
`kmalloc` for all allocations and not have to have one special `kmalloc` for a
FAM that uses `counted_by` and one for every other allocation.
As you can see, this builtin has a very limited utility. Obviously, one
wouldn't write:
```c
*__builtin_get_counted_by(ptr->FAM) = 42;
```
when using `ptr->count = 42` is far easier.
https://github.com/llvm/llvm-project/pull/102549
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits