http://gcc.gnu.org/bugzilla/show_bug.cgi?id=54038
--- Comment #5 from Richard Guenther <rguenth at gcc dot gnu.org> 2012-07-20 11:33:38 UTC --- I doubt that it is a good idea to put TYPE_CANONICAL in type variant lists. At most they should be the main variant itself, but in this case you can end up merging two type variant chains. That is, the following should hold true: TYPE_MAIN_VARIANT (TYPE_CANONICAL (x)) == TYPE_CANONICAL (x) so if TYPE_CANONICAL made any sense when it was introduced (in addition to TYPE_MAIN_VARIANT) making TYPE_CANONICALs part of the variant chain certainly shows that it didn't make sense. In conclusion it cannot be correct to require that TYPE_CANONICAL (t) appears in the variant chain of TYPE_MAIN_VARIANT (t) (it can be, of course still be equal to TYPE_MAIN_VARIANT).