https://gcc.gnu.org/bugzilla/show_bug.cgi?id=62077
--- Comment #27 from Sven C. Dack <sven.c.dack at virginmedia dot com> --- (In reply to Richard Biener from comment #24) > Or "real" fix for the type_hash_canon issue (untested) > > Index: gcc/tree.c > =================================================================== > --- gcc/tree.c (revision 213814) > +++ gcc/tree.c (working copy) > @@ -6593,7 +6593,9 @@ type_hash_eq (const void *va, const void > || !attribute_list_equal (TYPE_ATTRIBUTES (a->type), > TYPE_ATTRIBUTES (b->type)) > || (TREE_CODE (a->type) != COMPLEX_TYPE > - && TYPE_NAME (a->type) != TYPE_NAME (b->type))) > + && TYPE_NAME (a->type) != TYPE_NAME (b->type)) > + || ((TYPE_MAIN_VARIANT (a->type) == TYPE_MAIN_VARIANT (a->type)) > + != (TYPE_MAIN_VARIANT (b->type) == TYPE_MAIN_VARIANT (b->type)))) > return 0; > > /* Be careful about comparing arrays before and after the element type This looks wrong. It looks like you are doing "... || ((true) != (true))".