n3294 - The restrict function attribute as a replacement of the restrict qualifier
Alejandro Colomar
alx@kernel.org
Fri Jul 26 21:14:52 GMT 2024
Hi Joseph,
On Fri, Jul 26, 2024 at 08:30:33PM GMT, Joseph Myers wrote:
> On Fri, 26 Jul 2024, Alejandro Colomar via Gcc wrote:
>
> > I don't see why it should not apply to void*. memcpy(3) should get this
> > attribute:
> >
> > [[alx::restrict(1)]]
> > [[alx::restrict(2)]]
> > void *memcpy(void *dst, const void *src, size_t n);
>
> That would disallow copying between disjoint subarrays within the same
> toplevel object (and there's no way to specify an array size for void *),
> which hardly seems right.
Hmmm, I sometimes forget that ISO C is so painful about void.
Has WG14 discussed in the past about the GNU extension that defines
sizeof(void) == 1?
Maybe wording that also considers compiler-specific attributes and
extensions would allow for the following:
[[gnu::access(write_only, 1, 3)]]
[[gnu::access(read_only, 2, 3)]]
[[alx::restrict(1)]]
[[alx::restrict(2)]]
void *memcpy(void *dst, const void *src, size_t n);
The GNU attribute specifies the number of elements of the subarrays, and
the GNU extension sizeof(void)==1 specifies the size of each element.
That gives us the size of the subarrays to be considered for the
restrictness.
So, ISO C wouldn't be allowed to mark malloc(3) as [[alx::restrict]]
(unless they add these GNU extensions), but GNU C could.
> > BTW, the author of n2529 didn't follow up, right? I'd like that in, so
> > I'll prepare something after n2906 is merged. Martin, would you mind
> > pinging me about it?
>
> See reflector message SC22WG14.18575, 17 Nov 2020 (the former convenor
> replying when I asked about just that paper).
Where can I find reflector messages?
> As far as I know the author
> has not yet provided an updated version / asked for it to be added to a
> meeting agenda.
I think you mentioned that to me some time ago. I guess I'll take over
then. I'll ask for a number to propose _Nitems().
And another one to propose that [n] means the same as [static n] except
for the nonnull property of static.
Have a lovely night!
Alex
>
> --
> Joseph S. Myers
> josmyers@redhat.com
>
>
--
<https://www.alejandro-colomar.es/>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 833 bytes
Desc: not available
URL: <https://gcc.gnu.org/pipermail/gcc/attachments/20240726/93dd6e40/attachment.sig>
More information about the Gcc
mailing list