Based on all your comments so far, I changed the documentation as the following:

-The counted_by attribute is not allowed for a pointer field whose pointee
-has type @code{void}.
+The counted_by attribute is not allowed for a pointer to @code{void},
+a pointer to function, or a pointer to a structure or union that includes
+a flexible array member. However, it is allowed for a pointer to
+non-void incomplte structure or union types, as long as the type could
+be completed before the first dereference to the pointer.
  
And also updated the code and testing cases according to the above. 

Let me know if I still miss anything.

Thanks a lot.

Qing

> On Jun 11, 2025, at 15:45, Joseph Myers <josmy...@redhat.com> wrote:
> 
> On Wed, 11 Jun 2025, Qing Zhao wrote:
> 
>> 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?
> 
> Since the standard doesn't allow a structure with a flexible array member 
> (or a union containing such a structure, recursively) to be an element of 
> an array, it seems reasonable to reject such cases as well.
> 
> -- 
> Joseph S. Myers
> josmy...@redhat.com


Reply via email to