c-common.h (c_tree_chain_next): New static inline function.
authorJakub Jelinek <jakub@redhat.com>
Mon, 27 Jun 2011 16:56:08 +0000 (18:56 +0200)
committerJakub Jelinek <jakub@gcc.gnu.org>
Mon, 27 Jun 2011 16:56:08 +0000 (18:56 +0200)
* c-common.h (c_tree_chain_next): New static inline function.

* c-decl.c (union lang_tree_node): Use it in chain_next expression.

* cp-tree.h (union lang_tree_node): Use it in chain_next expression.

From-SVN: r175542

gcc/ChangeLog
gcc/c-decl.c
gcc/c-family/ChangeLog
gcc/c-family/c-common.h
gcc/cp/ChangeLog
gcc/cp/cp-tree.h

index 8ed86d29e23c5d78e402a0a9574de56eef4efc74..241a1f4b14939a77cdad26c3d2dc378be0e6463e 100644 (file)
@@ -1,5 +1,7 @@
 2011-06-27  Jakub Jelinek  <jakub@redhat.com>
 
+       * c-decl.c (union lang_tree_node): Use it in chain_next expression.
+
        * builtin-types.def (BT_FN_PTR_CONST_PTR_SIZE_VAR): New.
        * builtins.def (BUILT_IN_ASSUME_ALIGNED): New builtin.
        * tree-ssa-structalias.c (find_func_aliases_for_builtin_call,
index 1c7552b7589bf31b639b2429f36e88218b5be8cd..7198cb2d5d3bc7364eb052f33d90152cc9b9d036 100644 (file)
@@ -238,7 +238,7 @@ extern char C_SIZEOF_STRUCT_LANG_IDENTIFIER_isnt_accurate
 /* The resulting tree type.  */
 
 union GTY((desc ("TREE_CODE (&%h.generic) == IDENTIFIER_NODE"),
-       chain_next ("CODE_CONTAINS_STRUCT (TREE_CODE (&%h.generic), TS_TYPE_COMMON) ? (union lang_tree_node *) TYPE_NEXT_VARIANT (&%h.generic) : CODE_CONTAINS_STRUCT (TREE_CODE (&%h.generic), TS_COMMON) ? ((union lang_tree_node *) TREE_CHAIN (&%h.generic)) : NULL")))  lang_tree_node
+       chain_next ("(union lang_tree_node *) c_tree_chain_next (&%h.generic)"))) lang_tree_node
  {
   union tree_node GTY ((tag ("0"),
                        desc ("tree_node_structure (&%h)")))
index 0595cd1a7ac796825168aaea48a94cdf41501651..8cdeb3372b21b4ab7f79c44f848e8b1047597b9a 100644 (file)
@@ -1,5 +1,7 @@
 2011-06-27  Jakub Jelinek  <jakub@redhat.com>
 
+       * c-common.h (c_tree_chain_next): New static inline function.
+
        * c-common.c (check_builtin_function_arguments): Handle
        BUILT_IN_ASSUME_ALIGNED.
 
index c63b40d0360dd7e215cc02682516bdc95d05ed54..a80c0eaec4093ad49ac89328a2f23825fdd96af1 100644 (file)
@@ -1016,4 +1016,19 @@ extern bool c_omp_sharing_predetermined (tree);
 extern tree c_omp_remap_decl (tree, bool);
 extern void record_types_used_by_current_var_decl (tree);
 
+/* Return next tree in the chain for chain_next walking of tree nodes.  */
+static inline tree
+c_tree_chain_next (tree t)
+{
+  /* TREE_CHAIN of a type is TYPE_STUB_DECL, which is different
+     kind of object, never a long chain of nodes.  Prefer
+     TYPE_NEXT_VARIANT for types.  */
+  if (CODE_CONTAINS_STRUCT (TREE_CODE (t), TS_TYPE_COMMON))
+    return TYPE_NEXT_VARIANT (t);
+  /* Otherwise, if there is TREE_CHAIN, return it.  */
+  if (CODE_CONTAINS_STRUCT (TREE_CODE (t), TS_COMMON))
+    return TREE_CHAIN (t);
+  return NULL;
+}
+
 #endif /* ! GCC_C_COMMON_H */
index 6629549276010a268d524bea72fb73267ab00a8f..45b85302afc1a3b62e6f1205d6256db4ce44a5c2 100644 (file)
@@ -1,3 +1,7 @@
+2011-06-27  Jakub Jelinek  <jakub@redhat.com>
+
+       * cp-tree.h (union lang_tree_node): Use it in chain_next expression.
+
 2011-06-26  Jason Merrill  <jason@redhat.com>
 
        PR c++/49528
index 872ff6ffe89a21e0dcf7f1aed6c50a0461cae761..9afb33cc144a5f542823ed5b6d5cf20b0d9a69ae 100644 (file)
@@ -729,7 +729,7 @@ enum cp_tree_node_structure_enum {
 
 /* The resulting tree type.  */
 union GTY((desc ("cp_tree_node_structure (&%h)"),
-       chain_next ("CODE_CONTAINS_STRUCT (TREE_CODE (&%h.generic), TS_TYPE_COMMON) ? ((union lang_tree_node *) TYPE_NEXT_VARIANT (&%h.generic)) : CODE_CONTAINS_STRUCT (TREE_CODE (&%h.generic), TS_COMMON) ? ((union lang_tree_node *) TREE_CHAIN (&%h.generic)) : NULL"))) lang_tree_node {
+       chain_next ("(union lang_tree_node *) c_tree_chain_next (&%h.generic)"))) lang_tree_node {
   union tree_node GTY ((tag ("TS_CP_GENERIC"),
                        desc ("tree_node_structure (&%h)"))) generic;
   struct template_parm_index_s GTY ((tag ("TS_CP_TPI"))) tpi;