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