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; } > 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). -- Joseph S. Myers josmy...@redhat.com