diff options
author | Jakub Jelinek <jakub@redhat.com> | 2019-11-22 22:45:27 +0100 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2019-11-22 22:45:27 +0100 |
commit | bdaf8be1b2e3514b8bbcdd1042136e7d91b3c3f3 (patch) | |
tree | 45bcd47159e0eaa0651fa0f09f2a27ff62f35a14 /gcc/c-family | |
parent | df418f1d3cba53a4d3d20c2f640a250dd4c1bfa3 (diff) | |
download | gcc-bdaf8be1b2e3514b8bbcdd1042136e7d91b3c3f3.zip gcc-bdaf8be1b2e3514b8bbcdd1042136e7d91b3c3f3.tar.gz gcc-bdaf8be1b2e3514b8bbcdd1042136e7d91b3c3f3.tar.bz2 |
re PR c/90677 (gcc-9.1.0 fails to build __gcc_diag__ souce: error: 'cgraph_node' is not defined as a type)
PR c/90677
* c-common.h (identifier_global_tag): Declare.
* c-format.c (get_pointer_to_named_type): Renamed to ...
(get_named_type): ... this. Use identifier_global_tag instead of
identifier_global_value, handle the return value being a TYPE_P.
(init_dynamic_diag_info): Adjust get_pointer_to_named_type callers
to call get_named_type instead. Formatting fixes.
c/
* c-decl.c (identifier_global_tag): Define.
cp/
* cp-objcp-common.c (identifier_global_tag): Define.
testsuite/
* c-c++-common/pr90677.c: New test.
From-SVN: r278634
Diffstat (limited to 'gcc/c-family')
-rw-r--r-- | gcc/c-family/ChangeLog | 8 | ||||
-rw-r--r-- | gcc/c-family/c-common.h | 1 | ||||
-rw-r--r-- | gcc/c-family/c-format.c | 40 |
3 files changed, 30 insertions, 19 deletions
diff --git a/gcc/c-family/ChangeLog b/gcc/c-family/ChangeLog index d0b2ba2..1cf0fef 100644 --- a/gcc/c-family/ChangeLog +++ b/gcc/c-family/ChangeLog @@ -1,5 +1,13 @@ 2019-11-22 Jakub Jelinek <jakub@redhat.com> + PR c/90677 + * c-common.h (identifier_global_tag): Declare. + * c-format.c (get_pointer_to_named_type): Renamed to ... + (get_named_type): ... this. Use identifier_global_tag instead of + identifier_global_value, handle the return value being a TYPE_P. + (init_dynamic_diag_info): Adjust get_pointer_to_named_type callers + to call get_named_type instead. Formatting fixes. + Implement P1920R1, Missing feature-test macros 2017-2019. * c-cppbuiltin.c (c_cpp_builtins): Bump __cpp_init_captures and __cpp_generic_lambdas for -std=c++2a. Define diff --git a/gcc/c-family/c-common.h b/gcc/c-family/c-common.h index bed4d0c..2bcb54f 100644 --- a/gcc/c-family/c-common.h +++ b/gcc/c-family/c-common.h @@ -811,6 +811,7 @@ extern void c_register_addr_space (const char *str, addr_space_t as); extern bool in_late_binary_op; extern const char *c_addr_space_name (addr_space_t as); extern tree identifier_global_value (tree); +extern tree identifier_global_tag (tree); extern bool names_builtin_p (const char *); extern tree c_linkage_bindings (tree); extern void record_builtin_type (enum rid, const char *, tree); diff --git a/gcc/c-family/c-format.c b/gcc/c-family/c-format.c index 3c291ca..d70d1e0 100644 --- a/gcc/c-family/c-format.c +++ b/gcc/c-family/c-format.c @@ -4899,31 +4899,32 @@ init_dynamic_gfc_info (void) } } -/* Lookup the type named NAME and return a pointer-to-NAME type if found. - Otherwise, return void_type_node if NAME has not been used yet, or NULL_TREE if - NAME is not a type (issuing an error). */ +/* Lookup the type named NAME and return a NAME type if found. + Otherwise, return void_type_node if NAME has not been used yet, + or NULL_TREE if NAME is not a type (issuing an error). */ static tree -get_pointer_to_named_type (const char *name) +get_named_type (const char *name) { - tree result; - if ((result = maybe_get_identifier (name))) + if (tree result = maybe_get_identifier (name)) { - result = identifier_global_value (result); + result = identifier_global_tag (result); if (result) { - if (TREE_CODE (result) != TYPE_DECL) + if (TYPE_P (result)) + ; + else if (TREE_CODE (result) == TYPE_DECL) + result = TREE_TYPE (result); + else { error ("%qs is not defined as a type", name); result = NULL_TREE; } - else - result = TREE_TYPE (result); } + return result; } else - result = void_type_node; - return result; + return void_type_node; } /* Determine the types of "tree" and "location_t" in the code being @@ -4953,23 +4954,24 @@ init_dynamic_diag_info (void) an extra type level. */ if ((local_tree_type_node = maybe_get_identifier ("tree"))) { - local_tree_type_node = identifier_global_value (local_tree_type_node); + local_tree_type_node + = identifier_global_value (local_tree_type_node); if (local_tree_type_node) { if (TREE_CODE (local_tree_type_node) != TYPE_DECL) { error ("%<tree%> is not defined as a type"); - local_tree_type_node = 0; + local_tree_type_node = NULL_TREE; } else if (TREE_CODE (TREE_TYPE (local_tree_type_node)) != POINTER_TYPE) { error ("%<tree%> is not defined as a pointer type"); - local_tree_type_node = 0; + local_tree_type_node = NULL_TREE; } else - local_tree_type_node = - TREE_TYPE (TREE_TYPE (local_tree_type_node)); + local_tree_type_node + = TREE_TYPE (TREE_TYPE (local_tree_type_node)); } } else @@ -4979,12 +4981,12 @@ init_dynamic_diag_info (void) /* Similar to the above but for gimple*. */ if (!local_gimple_ptr_node || local_gimple_ptr_node == void_type_node) - local_gimple_ptr_node = get_pointer_to_named_type ("gimple"); + local_gimple_ptr_node = get_named_type ("gimple"); /* Similar to the above but for cgraph_node*. */ if (!local_cgraph_node_ptr_node || local_cgraph_node_ptr_node == void_type_node) - local_cgraph_node_ptr_node = get_pointer_to_named_type ("cgraph_node"); + local_cgraph_node_ptr_node = get_named_type ("cgraph_node"); static tree hwi; |