> On Apr 10, 2024, at 14:44, Joseph Myers <josmy...@redhat.com> wrote: > > On Wed, 10 Apr 2024, Qing Zhao wrote: > >> A stupid question first, the same scope means the same file? (Or same >> function) > > struct X { int a; }; > struct X { int a; }; > > is an example of the same scope (file scope, in this case). The > structures must have the same contents (in an appropriate sense) and are > then considered the same type. > > struct X { int a; }; > void f() { struct X { int a; }; } > > is not the same scope - but C23 makes the types compatible (not the same). > It's OK to have incompatible types with the same tag in different scopes > as well > > struct X { int a; }; > void f() { struct X { long b; }; } > > but if you use them in a way requiring compatibility, then the contents > must be compatible > > struct X { int a; } v; > void f() { struct X { int a; } *p = &v; }
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? > >> Is there a testing case for this feature in current GCC source tree I can >> take a look? (and >> Then I can use it to construct the new testing case for the counted-by >> attribute). > > See gcc.dg/c23-tag-*.c for many tests of different cases involving the tag > compatibility rules (and gcc.dg/gnu23-tag-* where GNU extensions are > involved). Got it. Will take a look on them. thanks. Qing > > -- > Joseph S. Myers > josmy...@redhat.com >