> On Jun 11, 2025, at 09:36, Qing Zhao <qing.z...@oracle.com> wrote:
> 
> 
> 
>> On Jun 10, 2025, at 17:01, Joseph Myers <josmy...@redhat.com> wrote:
>> 
>> On Tue, 13 May 2025, Qing Zhao wrote:
>> 
>>> +  /* This attribute cannot be applied to a pointer type whose pointee type
>>> +     is void.  */
>>> +  else if (TREE_CODE (TREE_TYPE (decl)) == POINTER_TYPE
>>> +   && TREE_CODE (TREE_TYPE (TREE_TYPE (decl))) == VOID_TYPE)
>>> +    {
>>> +      error_at (DECL_SOURCE_LOCATION (decl),
>>> + "%qE attribute is not allowed for a pointer field"
>>> + " with void pointee type", name);
>>> +      *no_add_attrs = true;
>>> +    }
>> 
>> I think it should also be disallowed for a pointer to function, since the 
>> number of elements of the array makes no sense in that case.  (This will 
>> need test and documentation updates as well.)
> 
> Yes, that’s right, I will update the patch with this. 
>> 
>> However, I think it should be allowed for a pointer to non-void incomplete 
>> types (incomplete structure or union); in that case, the type would need 
>> to be completed in the context where a dereference occurs.  Since that's 
>> already supported in the code, there should probably be tests added for 
>> that case.
> 
> Sure, I will check for this and add tests. 

When I was adding more testing cases for the pointee type being 
structure/union, I have a question for the following case:

struct item5 {
  int a;
  float b[];
};

struct pointer_array_9 {
   ...
  int count5;
  struct item5 *array_5 __attribute__ ((counted_by (count5)));
}; 

In the above, “struct item5” is a structure type with flexible array member, 
whose size is not know during compilation time, as 
a result, the size of the whole structure is unknown during compilation time, 
shall we reject such cases?

Thanks.

Qing

> 
>> 
>> I think saying "pointer to void" is better than "pointer field with void 
>> pointee type".
> 
> Okay, will update.
> 
> Thanks a lot.
> 
> Qing
>> 
>> -- 
>> Joseph S. Myers
>> josmy...@redhat.com


Reply via email to