On Wed, 10 Apr 2024, Qing Zhao wrote: > Okay, the above is very clear, thanks a lot for the explanation. > So, basically, for “counted-by” attribute: > **The following is good: > struct f { > int b; > int c; > int a[] __attribute__ ((counted_by (b))) }; > struct f { > int b; > int c; > int a[] __attribute__ ((counted_by (b))) }; > > **The following should error: > > struct f { > int b; > int c; > int a[] __attribute__ ((counted_by (b))) }; > struct f { > int b; > int c; > int a[] __attribute__ ((counted_by (c))) }; /* error here */ > > For the same tag in different scopes case: > > struct f { > int b; > int c; > int a[] __attribute__ ((counted_by (b))) } y0; > > void test1(void) > { > struct f { > int b; > int c; > int a[] __attribute__ ((counted_by (c))) } x; > > y0 = x; /* will report incompatible type error here */ > } > > Are the above complete? Yes, that looks like what should be tested (with the addition of the case of same tag, different scopes, same counted_by so compatible). -- Joseph S. Myers josmyers@redhat.com