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
[email protected]