(In reply to Siddhesh Poyarekar from comment #1)
> ```
> When no size-index argument is specified, the pointer argument must be
> either null or point to a space that is suitably aligned and large for __at
> least one object__ of the referenced type (this implies that a past-the-end
> pointer is not a valid argument).
> ```
>
> Well technically, the pointer argument *is* suitably aligned and large for
> 16 objects of 0 size, but the implication that it is hence not a
> past-the-end pointer is invalid. I'll drop the access attribute (since the
> additional value from having it is not really significant enough) but IMO
> -Wstringop-overflow needs to be fixed to handle pointers to zero-sized
> structs, i.e. it needs to ignore them and not conjure up an access size of 1
> out of nowhere.
Actually, no, I was wrong. The referenced type is void*, which is why the warning is 'correct'. Maybe there's scope for better wording, but it does make sense to warn in such cases:
(In reply to Siddhesh Poyarekar from comment #1)
> ```
> When no size-index argument is specified, the pointer argument must be
> either null or point to a space that is suitably aligned and large for __at
> least one object__ of the referenced type (this implies that a past-the-end
> pointer is not a valid argument).
> ```
>
> Well technically, the pointer argument *is* suitably aligned and large for
> 16 objects of 0 size, but the implication that it is hence not a
> past-the-end pointer is invalid. I'll drop the access attribute (since the
> additional value from having it is not really significant enough) but IMO
> -Wstringop-overflow needs to be fixed to handle pointers to zero-sized
> structs, i.e. it needs to ignore them and not conjure up an access size of 1
> out of nowhere.
Actually, no, I was wrong. The referenced type is void*, which is why the warning is 'correct'. Maybe there's scope for better wording, but it does make sense to warn in such cases:
extern void f2 (void *) __attribute__ ((__access__ (__write_only__, 1)));
void
f1 (void)
{
struct A {} a[16];
f2 (a);
}