Am Mittwoch, dem 12.11.2025 um 22:07 +0000 schrieb Joseph Myers:
> On Wed, 12 Nov 2025, Qing Zhao wrote:
> 
> > > There are the various extensions (-fms-extensions / -fplan9-extensions) 
> > > to 
> > > consider as well, but it might be reasonable to say that only genuinely 
> > > anonymous struct / union members get the special counted_by handling,
> > 
> > So, in C FE, what’s the best way to determine whether the anonymous 
> > struct/union is
> > genuine or not? (The DECL_CONTEXT of this anonymous structure/union is 
> > NULL_TREE?)
> 
> You can't tell until some time after the definition is complete, because 
> you need to see whether the type is used as the type of an unnamed field 
> (possibly with qualifiers).
> 
> Maybe this suggests that, as in other cases, an anonymous structure or 
> union involving counted_by should actually be required to be valid without 
> reference to the containing struct or union after all - that's how things 
> generally work with anonymous structs and unions.  That is, it would be OK 
> for an outer struct or union to have counted_by pointing to a count in an 
> inner anonymous struct or union, but not vice versa.

Without -fms-extensions, anonymous structs are supported only
if they are defined inline. The following is rejected with
--pedantic-errors but even without it an access to .buf would
be rejected.

typedef struct { char *buf; } x_t;

struct foo {
    int n;
    x_t;
};


But if they are declined inline

struct foo {
   int n;
   struct { char *buf; };
};

In this, counted_by could be supported and you would need to check
for the field name to NULL_TREE, i.e. DECL_NAME (...) == NULL_TREE and
also c_type_tag (...) == NULL_TREE.   

You would then check correctness of the attribute only when the parent 
type is complete.

If we want to support counted_by in even more generic cases, I think
checking would need to deferred to declaration of variables, but
I am not sure this is a good idea.

Martin

Reply via email to