Skip to content

Commit 2afbf55

Browse files
committed
Fix infinite recursion in gt_ggc_mx_lang_tree_node
1 parent 3f5934e commit 2afbf55

File tree

2 files changed

+20
-6
lines changed

2 files changed

+20
-6
lines changed

gcc/jit/dummy-frontend.cc

+6-6
Original file line numberDiff line numberDiff line change
@@ -518,12 +518,12 @@ struct GTY(()) lang_identifier
518518
/* The resulting tree type. */
519519

520520
union GTY((desc ("TREE_CODE (&%h.generic) == IDENTIFIER_NODE"),
521-
chain_next ("CODE_CONTAINS_STRUCT (TREE_CODE (&%h.generic), TS_COMMON) ? ((union lang_tree_node *) TREE_CHAIN (&%h.generic)) : NULL")))
522-
lang_tree_node
523-
{
524-
union tree_node GTY((tag ("0"),
525-
desc ("tree_node_structure (&%h)"))) generic;
526-
struct lang_identifier GTY((tag ("1"))) identifier;
521+
chain_next ("(union lang_tree_node *) jit_tree_chain_next (&%h.generic)"))) lang_tree_node
522+
{
523+
union tree_node GTY ((tag ("0"),
524+
desc ("tree_node_structure (&%h)")))
525+
generic;
526+
struct lang_identifier GTY ((tag ("1"))) identifier;
527527
};
528528

529529
/* We don't use language_function. */

gcc/jit/jit-common.h

+14
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,20 @@ const int NUM_GCC_JIT_TYPES = GCC_JIT_TYPE_INT128_T + 1;
9393
9494
End of comment for inclusion in the docs. */
9595

96+
static inline tree
97+
jit_tree_chain_next (tree t)
98+
{
99+
/* TREE_CHAIN of a type is TYPE_STUB_DECL, which is different
100+
kind of object, never a long chain of nodes. Prefer
101+
TYPE_NEXT_VARIANT for types. */
102+
if (CODE_CONTAINS_STRUCT (TREE_CODE (t), TS_TYPE_COMMON))
103+
return TYPE_NEXT_VARIANT (t);
104+
/* Otherwise, if there is TREE_CHAIN, return it. */
105+
if (CODE_CONTAINS_STRUCT (TREE_CODE (t), TS_COMMON))
106+
return TREE_CHAIN (t);
107+
return NULL;
108+
}
109+
96110
namespace gcc {
97111

98112
namespace jit {

0 commit comments

Comments
 (0)