https://gcc.gnu.org/bugzilla/show_bug.cgi?id=113688
--- Comment #20 from uecker at gcc dot gnu.org --- 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?