https://gcc.gnu.org/bugzilla/show_bug.cgi?id=113688

--- Comment #21 from uecker at gcc dot gnu.org ---
(In reply to uecker from comment #20)
> This was based on a discussion with Richard.  TYPE_CANONICAL is used for
> aliasing decisions and the FE must set it to from equivalence classes for
> types that are
> compatible.  In C, the types
> 
> int[];
> int[3];
> int[n];
> 
> are  compatible, and this means that also the following types
> are compatible:
> 
> struct foo { int a; int b[]; };
> struct foo { int a; int b[3]; };
> struct foo { int a; int b[n]; };
> 
> Treating them as not compatible (by setting different TYPE_CANONICAL) causes
> subtle miscompilation issues in C.  I wonder how this works in Ada?

The actual bug here was

struct foo { int a; int b[]; };
struct foo { int a; int b[0]; };

but it also applies to the variable case (the FAM case is not compatible to the
others according to ISO rules, but they all end up in the same class)

Reply via email to