aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2019-11-22 22:45:27 +0100
committerJakub Jelinek <jakub@gcc.gnu.org>2019-11-22 22:45:27 +0100
commitbdaf8be1b2e3514b8bbcdd1042136e7d91b3c3f3 (patch)
tree45bcd47159e0eaa0651fa0f09f2a27ff62f35a14
parentdf418f1d3cba53a4d3d20c2f640a250dd4c1bfa3 (diff)
downloadgcc-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
-rw-r--r--gcc/c-family/ChangeLog8
-rw-r--r--gcc/c-family/c-common.h1
-rw-r--r--gcc/c-family/c-format.c40
-rw-r--r--gcc/c/ChangeLog5
-rw-r--r--gcc/c/c-decl.c14
-rw-r--r--gcc/cp/ChangeLog3
-rw-r--r--gcc/cp/cp-objcp-common.c9
-rw-r--r--gcc/testsuite/ChangeLog3
-rw-r--r--gcc/testsuite/c-c++-common/pr90677.c11
9 files changed, 75 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;
diff --git a/gcc/c/ChangeLog b/gcc/c/ChangeLog
index 7b37842..cb1ea09 100644
--- a/gcc/c/ChangeLog
+++ b/gcc/c/ChangeLog
@@ -1,3 +1,8 @@
+2019-11-22 Jakub Jelinek <jakub@redhat.com>
+
+ PR c/90677
+ * c-decl.c (identifier_global_tag): Define.
+
2019-11-20 Richard Biener <rguenther@suse.de>
PR c/92088
diff --git a/gcc/c/c-decl.c b/gcc/c/c-decl.c
index caa9c85..7fd3cc2 100644
--- a/gcc/c/c-decl.c
+++ b/gcc/c/c-decl.c
@@ -10168,6 +10168,20 @@ identifier_global_value (tree t)
return NULL_TREE;
}
+/* Return the global value of tag T as a symbol. */
+
+tree
+identifier_global_tag (tree t)
+{
+ struct c_binding *b;
+
+ for (b = I_TAG_BINDING (t); b; b = b->shadowed)
+ if (B_IN_FILE_SCOPE (b) || B_IN_EXTERNAL_SCOPE (b))
+ return b->decl;
+
+ return NULL_TREE;
+}
+
/* Returns true if NAME refers to a built-in function or function-like
operator. */
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index 93cf9e9..762da08 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,5 +1,8 @@
2019-11-22 Jakub Jelinek <jakub@redhat.com>
+ PR c/90677
+ * cp-objcp-common.c (identifier_global_tag): Define.
+
PR c++/92458
* init.c (nsdmi_inst): Change type to
decl_tree_cache_map * from tree_cache_map *.
diff --git a/gcc/cp/cp-objcp-common.c b/gcc/cp/cp-objcp-common.c
index d168e2a..a65802f 100644
--- a/gcc/cp/cp-objcp-common.c
+++ b/gcc/cp/cp-objcp-common.c
@@ -349,6 +349,15 @@ identifier_global_value (tree name)
return get_global_binding (name);
}
+/* Similarly, but return struct/class/union NAME instead. */
+
+tree
+identifier_global_tag (tree name)
+{
+ return lookup_qualified_name (global_namespace, name, /*prefer_type*/2,
+ /*complain*/false);
+}
+
/* Returns true if NAME refers to a built-in function or function-like
operator. */
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 6f8c791..201d044 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,5 +1,8 @@
2019-11-22 Jakub Jelinek <jakub@redhat.com>
+ PR c/90677
+ * c-c++-common/pr90677.c: New test.
+
PR c++/92458
* g++.dg/pch/pr92458.C: New test.
* g++.dg/pch/pr92458.Hs: New test.
diff --git a/gcc/testsuite/c-c++-common/pr90677.c b/gcc/testsuite/c-c++-common/pr90677.c
new file mode 100644
index 0000000..897fbc6
--- /dev/null
+++ b/gcc/testsuite/c-c++-common/pr90677.c
@@ -0,0 +1,11 @@
+/* PR c/90677 */
+/* { dg-do compile } */
+/* { dg-options "-W -Wall" } */
+
+struct cgraph_node;
+union tree_node;
+typedef union tree_node *tree;
+union gimple_statement_d;
+typedef union gimple_statement_d *gimple;
+struct cgraph_node *cgraph_node (tree);
+void foo (int, const char *, ...) __attribute__((__format__(__gcc_diag__, 2, 3)));