diff options
author | Aaron Sawdey <acsawdey@linux.ibm.com> | 2020-11-17 17:17:44 -0600 |
---|---|---|
committer | Aaron Sawdey <acsawdey@linux.ibm.com> | 2020-11-21 07:37:06 -0600 |
commit | 1e2d8575ace4e12dbe95ae2d4a49a4d89c6f67eb (patch) | |
tree | 56df58c192ba5bedc0e5a16cba6c1ccf1a7365ec | |
parent | a3454130760bf51b76495663c60ac6dffbe3d130 (diff) | |
download | gcc-1e2d8575ace4e12dbe95ae2d4a49a4d89c6f67eb.zip gcc-1e2d8575ace4e12dbe95ae2d4a49a4d89c6f67eb.tar.gz gcc-1e2d8575ace4e12dbe95ae2d4a49a4d89c6f67eb.tar.bz2 |
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.
-rw-r--r-- | gcc/builtins.c | 1 | ||||
-rw-r--r-- | gcc/c-family/c-pretty-print.c | 2 | ||||
-rw-r--r-- | gcc/c/c-aux-info.c | 1 | ||||
-rw-r--r-- | gcc/cp/error.c | 4 | ||||
-rw-r--r-- | gcc/cp/pt.c | 2 | ||||
-rw-r--r-- | gcc/cp/typeck.c | 1 | ||||
-rw-r--r-- | gcc/dwarf2out.c | 2 | ||||
-rw-r--r-- | gcc/expr.c | 1 | ||||
-rw-r--r-- | gcc/ipa-devirt.c | 1 | ||||
-rw-r--r-- | gcc/tree-streamer.c | 1 | ||||
-rw-r--r-- | gcc/tree.c | 2 | ||||
-rw-r--r-- | gcc/typeclass.h | 2 |
12 files changed, 19 insertions, 1 deletions
diff --git a/gcc/builtins.c b/gcc/builtins.c index a75b24c..40e77c7 100644 --- a/gcc/builtins.c +++ b/gcc/builtins.c @@ -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; } } diff --git a/gcc/c-family/c-pretty-print.c b/gcc/c-family/c-pretty-print.c index 8953e3b..3027703 100644 --- a/gcc/c-family/c-pretty-print.c +++ b/gcc/c-family/c-pretty-print.c @@ -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: diff --git a/gcc/c/c-aux-info.c b/gcc/c/c-aux-info.c index ffc8099..bdeef52 100644 --- a/gcc/c/c-aux-info.c +++ b/gcc/c/c-aux-info.c @@ -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; diff --git a/gcc/cp/error.c b/gcc/cp/error.c index 396558b..d27545d 100644 --- a/gcc/cp/error.c +++ b/gcc/cp/error.c @@ -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: diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c index 463b1c3..b037786 100644 --- a/gcc/cp/pt.c +++ b/gcc/cp/pt.c @@ -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); diff --git a/gcc/cp/typeck.c b/gcc/cp/typeck.c index 700e166..729c706 100644 --- a/gcc/cp/typeck.c +++ b/gcc/cp/typeck.c @@ -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: diff --git a/gcc/dwarf2out.c b/gcc/dwarf2out.c index 07e1a92..01e7ae1 100644 --- a/gcc/dwarf2out.c +++ b/gcc/dwarf2out.c @@ -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: diff --git a/gcc/ipa-devirt.c b/gcc/ipa-devirt.c index 6e6df0b2..0f2b814 100644 --- a/gcc/ipa-devirt.c +++ b/gcc/ipa-devirt.c @@ -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; diff --git a/gcc/tree-streamer.c b/gcc/tree-streamer.c index b0afa1d..a393983 100644 --- a/gcc/tree-streamer.c +++ b/gcc/tree-streamer.c @@ -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: diff --git a/gcc/typeclass.h b/gcc/typeclass.h index 434e6ac..b4e3dda2 100644 --- a/gcc/typeclass.h +++ b/gcc/typeclass.h @@ -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 */ |