Hi, this patch removes call to comp_type_attributes (wich happens for METHOD_TYPE and FUNCTION_TYPE only). This does not make sense, because type attributes may change in variants and pointers should be considered compatible.
We did not get any trouble from this only because we do not really use canonical types of functions for anything. Bootstrapped/regtested x86_64-linux, OK? Honza * tree.c (gimple_canonical_types_compatible_p) Do not compare type attributes. (verify_type): Drop METHOD_TYPE FIXME; update FUNCTION_TYPE FIXME. Index: tree.c =================================================================== --- tree.c (revision 223490) +++ tree.c (working copy) @@ -12837,9 +12837,6 @@ gimple_canonical_types_compatible_p (con trust_type_canonical)) return false; - if (!comp_type_attributes (t1, t2)) - return false; - if (TYPE_ARG_TYPES (t1) == TYPE_ARG_TYPES (t2)) return true; else @@ -12939,10 +12936,9 @@ verify_type (const_tree t) /* Method and function types can not be used to address memory and thus TYPE_CANONICAL really matters only for determining useless conversions. - FIXME: C++ FE does not agree with gimple_canonical_types_compatible_p - here. gimple_canonical_types_compatible_p calls comp_type_attributes - while for C++ FE the attributes does not make difference. */ - else if (TREE_CODE (t) == FUNCTION_TYPE || TREE_CODE (t) == METHOD_TYPE) + FIXME: C++ FE produce declarations of builtin functions that are not + compatible with main variants. */ + else if (TREE_CODE (t) == FUNCTION_TYPE) ; else if (t != ct /* FIXME: gimple_canonical_types_compatible_p can not compare types