mirror of
https://gcc.gnu.org/git/gcc.git
synced 2024-12-18 08:23:50 +08:00
Additional small changes to support opaque modes
After building some larger codes using opaque types and some c++ codes using opaque types it became clear I needed to go through and look for places where opaque types and modes needed to be handled. A whole pile of one-liners. gcc/ * typeclass.h: Add opaque_type_class. * builtins.c (type_to_class): Identify opaque type class. * dwarf2out.c (is_base_type): Handle opaque types. (gen_type_die_with_usage): Handle opaque types. * expr.c (count_type_elements): Opaque types should never have initializers. * ipa-devirt.c (odr_types_equivalent_p): No type-specific handling for opaque types is needed as it eventually checks the underlying mode which is what is important. * tree-streamer.c (record_common_node): Handle opaque types. * tree.c (type_contains_placeholder_1): Handle opaque types. (type_cache_hasher::equal): No additional comparison needed for opaque types. gcc/c-family * c-pretty-print.c (c_pretty_printer::simple_type_specifier): Treat opaque types like other types. (c_pretty_printer::direct_abstract_declarator): Opaque types are supported types. gcc/c * c-aux-info.c (gen_type): Support opaque types. gcc/cp * error.c (dump_type): Handle opaque types. (dump_type_prefix): Handle opaque types. (dump_type_suffix): Handle opaque types. (dump_expr): Handle opaque types. * pt.c (tsubst): Allow opaque types in templates. (unify): Allow opaque types in templates. * typeck.c (structural_comptypes): Handle comparison of opaque types.
This commit is contained in:
parent
a345413076
commit
1e2d8575ac
@ -2228,6 +2228,7 @@ type_to_class (tree type)
|
||||
case ARRAY_TYPE: return (TYPE_STRING_FLAG (type)
|
||||
? string_type_class : array_type_class);
|
||||
case LANG_TYPE: return lang_type_class;
|
||||
case OPAQUE_TYPE: return opaque_type_class;
|
||||
default: return no_type_class;
|
||||
}
|
||||
}
|
||||
|
@ -342,6 +342,7 @@ c_pretty_printer::simple_type_specifier (tree t)
|
||||
break;
|
||||
|
||||
case VOID_TYPE:
|
||||
case OPAQUE_TYPE:
|
||||
case BOOLEAN_TYPE:
|
||||
case INTEGER_TYPE:
|
||||
case REAL_TYPE:
|
||||
@ -662,6 +663,7 @@ c_pretty_printer::direct_abstract_declarator (tree t)
|
||||
|
||||
case IDENTIFIER_NODE:
|
||||
case VOID_TYPE:
|
||||
case OPAQUE_TYPE:
|
||||
case BOOLEAN_TYPE:
|
||||
case INTEGER_TYPE:
|
||||
case REAL_TYPE:
|
||||
|
@ -409,6 +409,7 @@ gen_type (const char *ret_val, tree t, formals_style style)
|
||||
data_type = concat ("unsigned ", data_type, NULL);
|
||||
break;
|
||||
|
||||
case OPAQUE_TYPE:
|
||||
case REAL_TYPE:
|
||||
data_type = IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (t)));
|
||||
break;
|
||||
|
@ -529,6 +529,7 @@ dump_type (cxx_pretty_printer *pp, tree t, int flags)
|
||||
case INTEGER_TYPE:
|
||||
case REAL_TYPE:
|
||||
case VOID_TYPE:
|
||||
case OPAQUE_TYPE:
|
||||
case BOOLEAN_TYPE:
|
||||
case COMPLEX_TYPE:
|
||||
case VECTOR_TYPE:
|
||||
@ -874,6 +875,7 @@ dump_type_prefix (cxx_pretty_printer *pp, tree t, int flags)
|
||||
case UNION_TYPE:
|
||||
case LANG_TYPE:
|
||||
case VOID_TYPE:
|
||||
case OPAQUE_TYPE:
|
||||
case TYPENAME_TYPE:
|
||||
case COMPLEX_TYPE:
|
||||
case VECTOR_TYPE:
|
||||
@ -997,6 +999,7 @@ dump_type_suffix (cxx_pretty_printer *pp, tree t, int flags)
|
||||
case UNION_TYPE:
|
||||
case LANG_TYPE:
|
||||
case VOID_TYPE:
|
||||
case OPAQUE_TYPE:
|
||||
case TYPENAME_TYPE:
|
||||
case COMPLEX_TYPE:
|
||||
case VECTOR_TYPE:
|
||||
@ -2810,6 +2813,7 @@ dump_expr (cxx_pretty_printer *pp, tree t, int flags)
|
||||
case ENUMERAL_TYPE:
|
||||
case REAL_TYPE:
|
||||
case VOID_TYPE:
|
||||
case OPAQUE_TYPE:
|
||||
case BOOLEAN_TYPE:
|
||||
case INTEGER_TYPE:
|
||||
case COMPLEX_TYPE:
|
||||
|
@ -15376,6 +15376,7 @@ tsubst (tree t, tree args, tsubst_flags_t complain, tree in_decl)
|
||||
case ERROR_MARK:
|
||||
case IDENTIFIER_NODE:
|
||||
case VOID_TYPE:
|
||||
case OPAQUE_TYPE:
|
||||
case REAL_TYPE:
|
||||
case COMPLEX_TYPE:
|
||||
case VECTOR_TYPE:
|
||||
@ -23588,6 +23589,7 @@ unify (tree tparms, tree targs, tree parm, tree arg, int strict,
|
||||
case BOOLEAN_TYPE:
|
||||
case ENUMERAL_TYPE:
|
||||
case VOID_TYPE:
|
||||
case OPAQUE_TYPE:
|
||||
case NULLPTR_TYPE:
|
||||
if (TREE_CODE (arg) != TREE_CODE (parm))
|
||||
return unify_type_mismatch (explain_p, parm, arg);
|
||||
|
@ -1314,6 +1314,7 @@ structural_comptypes (tree t1, tree t2, int strict)
|
||||
/* All void and bool types are the same. */
|
||||
break;
|
||||
|
||||
case OPAQUE_TYPE:
|
||||
case INTEGER_TYPE:
|
||||
case FIXED_POINT_TYPE:
|
||||
case REAL_TYPE:
|
||||
|
@ -13038,6 +13038,7 @@ is_base_type (tree type)
|
||||
return 1;
|
||||
|
||||
case VOID_TYPE:
|
||||
case OPAQUE_TYPE:
|
||||
case ARRAY_TYPE:
|
||||
case RECORD_TYPE:
|
||||
case UNION_TYPE:
|
||||
@ -25776,6 +25777,7 @@ gen_type_die_with_usage (tree type, dw_die_ref context_die,
|
||||
return;
|
||||
|
||||
case VOID_TYPE:
|
||||
case OPAQUE_TYPE:
|
||||
case INTEGER_TYPE:
|
||||
case REAL_TYPE:
|
||||
case FIXED_POINT_TYPE:
|
||||
|
@ -6171,6 +6171,7 @@ count_type_elements (const_tree type, bool for_ctor_p)
|
||||
return 0;
|
||||
|
||||
case VOID_TYPE:
|
||||
case OPAQUE_TYPE:
|
||||
case METHOD_TYPE:
|
||||
case FUNCTION_TYPE:
|
||||
case LANG_TYPE:
|
||||
|
@ -1521,6 +1521,7 @@ odr_types_equivalent_p (tree t1, tree t2, bool warn, bool *warned,
|
||||
break;
|
||||
}
|
||||
case VOID_TYPE:
|
||||
case OPAQUE_TYPE:
|
||||
case NULLPTR_TYPE:
|
||||
break;
|
||||
|
||||
|
@ -317,6 +317,7 @@ record_common_node (struct streamer_tree_cache_d *cache, tree node)
|
||||
case TREE_LIST:
|
||||
case VOID_CST:
|
||||
case VOID_TYPE:
|
||||
case OPAQUE_TYPE:
|
||||
/* No recursive trees. */
|
||||
break;
|
||||
case ARRAY_TYPE:
|
||||
|
@ -3972,6 +3972,7 @@ type_contains_placeholder_1 (const_tree type)
|
||||
switch (TREE_CODE (type))
|
||||
{
|
||||
case VOID_TYPE:
|
||||
case OPAQUE_TYPE:
|
||||
case COMPLEX_TYPE:
|
||||
case ENUMERAL_TYPE:
|
||||
case BOOLEAN_TYPE:
|
||||
@ -7100,6 +7101,7 @@ type_cache_hasher::equal (type_hash *a, type_hash *b)
|
||||
switch (TREE_CODE (a->type))
|
||||
{
|
||||
case VOID_TYPE:
|
||||
case OPAQUE_TYPE:
|
||||
case COMPLEX_TYPE:
|
||||
case POINTER_TYPE:
|
||||
case REFERENCE_TYPE:
|
||||
|
@ -37,7 +37,7 @@ enum type_class
|
||||
function_type_class, method_type_class,
|
||||
record_type_class, union_type_class,
|
||||
array_type_class, string_type_class,
|
||||
lang_type_class
|
||||
lang_type_class, opaque_type_class
|
||||
};
|
||||
|
||||
#endif /* GCC_TYPECLASS_H */
|
||||
|
Loading…
Reference in New Issue
Block a user