diff options
Diffstat (limited to 'libcc1/libcc1plugin.cc')
-rw-r--r-- | libcc1/libcc1plugin.cc | 19 |
1 files changed, 10 insertions, 9 deletions
diff --git a/libcc1/libcc1plugin.cc b/libcc1/libcc1plugin.cc index 00d3963..f1082d8 100644 --- a/libcc1/libcc1plugin.cc +++ b/libcc1/libcc1plugin.cc @@ -555,7 +555,7 @@ safe_lookup_builtin_type (const char *builtin_name) gcc_assert (TREE_CODE (result) == TYPE_DECL); result = TREE_TYPE (result); - return result; + return TREE_CODE (result) == ERROR_MARK ? nullptr : result; } static gcc_type @@ -592,13 +592,14 @@ plugin_int_type (cc1_plugin::connection *self, int is_unsigned, unsigned long size_in_bytes, const char *builtin_name) { - if (!builtin_name) - return plugin_int_type_v0 (self, is_unsigned, size_in_bytes); - - tree result = safe_lookup_builtin_type (builtin_name); - gcc_assert (!result || TREE_CODE (result) == INTEGER_TYPE); - - return plugin_int_check (self, is_unsigned, size_in_bytes, result); + if (builtin_name != nullptr) + { + tree result = safe_lookup_builtin_type (builtin_name); + gcc_assert (!result || TREE_CODE (result) == INTEGER_TYPE); + if (result != nullptr) + return plugin_int_check (self, is_unsigned, size_in_bytes, result); + } + return plugin_int_type_v0 (self, is_unsigned, size_in_bytes); } gcc_type @@ -631,7 +632,7 @@ plugin_float_type (cc1_plugin::connection *self, tree result = safe_lookup_builtin_type (builtin_name); if (!result) - return convert_out (error_mark_node); + return plugin_float_type_v0 (self, size_in_bytes); gcc_assert (SCALAR_FLOAT_TYPE_P (result)); gcc_assert (BITS_PER_UNIT * size_in_bytes == TYPE_PRECISION (result)); |