debug_tree (node)
tree node;
{
- char *object = (char *) oballoc (0);
-
- table = (struct bucket **) oballoc (HASH_SIZE * sizeof (struct bucket *));
+ table = (struct bucket **) permalloc (HASH_SIZE * sizeof (struct bucket *));
bzero ((char *) table, HASH_SIZE * sizeof (struct bucket *));
print_node (stderr, "", node, 0);
table = 0;
- obfree (object);
fprintf (stderr, "\n");
}
{
fprintf (file, "-");
fprintf (file, HOST_WIDE_INT_PRINT_UNSIGNED,
- -TREE_INT_CST_LOW (node));
+ -TREE_INT_CST_LOW (node));
}
else
fprintf (file, HOST_WIDE_INT_PRINT_DOUBLE_HEX,
}
/* Add this node to the table. */
- b = (struct bucket *) oballoc (sizeof (struct bucket));
+ b = (struct bucket *) permalloc (sizeof (struct bucket));
b->node = node;
b->next = table[hash];
table[hash] = b;
print_node (file, "type", TREE_TYPE (node), indent + 4);
if (TREE_TYPE (node))
indent_to (file, indent + 3);
-
- if (!ggc_p)
- print_obstack_name ((char *) node, file, "");
- indent_to (file, indent + 3);
- }
-
- /* If a permanent object is in the wrong obstack, or the reverse, warn. */
- if (!ggc_p && object_permanent_p (node) != TREE_PERMANENT (node))
- {
- if (TREE_PERMANENT (node))
- fputs (" !!permanent object in non-permanent obstack!!", file);
- else
- fputs (" !!non-permanent object in permanent obstack!!", file);
- indent_to (file, indent + 3);
}
if (TREE_SIDE_EFFECTS (node))
fputs (" asm_written", file);
if (TREE_USED (node))
fputs (" used", file);
- if (TREE_RAISES (node))
- fputs (" raises", file);
- if (!ggc_p && TREE_PERMANENT (node))
- fputs (" permanent", file);
+ if (TREE_NOTHROW (node))
+ fputs (" nothrow", file);
if (TREE_PUBLIC (node))
fputs (" public", file);
if (TREE_PRIVATE (node))
fputs (" external", file);
if (DECL_REGISTER (node))
fputs (" regdecl", file);
- if (DECL_PACKED (node))
- fputs (" packed", file);
if (DECL_NONLOCAL (node))
fputs (" nonlocal", file);
- if (DECL_INLINE (node))
- fputs (" inline", file);
if (TREE_CODE (node) == TYPE_DECL && TYPE_DECL_SUPPRESS_DEBUG (node))
fputs (" suppress-debug", file);
+ if (TREE_CODE (node) == FUNCTION_DECL && DECL_INLINE (node))
+ fputs (" inline", file);
if (TREE_CODE (node) == FUNCTION_DECL && DECL_BUILT_IN (node))
fputs (" built-in", file);
if (TREE_CODE (node) == FUNCTION_DECL && DECL_BUILT_IN_NONANSI (node))
fputs (" built-in-nonansi", file);
+ if (TREE_CODE (node) == FIELD_DECL && DECL_PACKED (node))
+ fputs (" packed", file);
if (TREE_CODE (node) == FIELD_DECL && DECL_BIT_FIELD (node))
fputs (" bit-field", file);
+
if (TREE_CODE (node) == LABEL_DECL && DECL_TOO_LATE (node))
fputs (" too-late", file);
+
if (TREE_CODE (node) == VAR_DECL && DECL_IN_TEXT_SECTION (node))
fputs (" in-text-section", file);
+ if (TREE_CODE (node) == PARM_DECL && DECL_TRANSPARENT_UNION (node))
+ fputs (" transparent-union", file);
+
if (DECL_VIRTUAL_P (node))
fputs (" virtual", file);
if (DECL_DEFER_OUTPUT (node))
fputs (" defer-output", file);
- if (DECL_TRANSPARENT_UNION (node))
- fputs (" transparent-union", file);
if (DECL_LANG_FLAG_0 (node))
fputs (" decl_0", file);
print_node (file, "size", DECL_SIZE (node), indent + 4);
print_node (file, "unit size", DECL_SIZE_UNIT (node), indent + 4);
- indent_to (file, indent + 3);
+ if (TREE_CODE (node) != FUNCTION_DECL
+ || DECL_INLINE (node) || DECL_BUILT_IN (node))
+ indent_to (file, indent + 3);
+
if (TREE_CODE (node) != FUNCTION_DECL)
- fprintf (file, " align %d", DECL_ALIGN (node));
+ {
+ fprintf (file, " align %d", DECL_ALIGN (node));
+ if (TREE_CODE (node) == FIELD_DECL)
+ {
+ fprintf (file, " offset_align ");
+ fprintf (file, HOST_WIDE_INT_PRINT_UNSIGNED,
+ DECL_OFFSET_ALIGN (node));
+ }
+ }
else if (DECL_INLINE (node))
- fprintf (file, " frame_size %d", DECL_FRAME_SIZE (node));
+ {
+ fprintf (file, " frame_size ");
+ fprintf (file, HOST_WIDE_INT_PRINT_DEC, DECL_FRAME_SIZE (node));
+ }
else if (DECL_BUILT_IN (node))
- fprintf (file, " built-in code %d", DECL_FUNCTION_CODE (node));
- if (TREE_CODE (node) == FIELD_DECL)
- print_node (file, "bitpos", DECL_FIELD_BITPOS (node), indent + 4);
+ fprintf (file, " built-in %s:%s",
+ built_in_class_names[(int) DECL_BUILT_IN_CLASS (node)],
+ built_in_names[(int) DECL_FUNCTION_CODE (node)]);
+
if (DECL_POINTER_ALIAS_SET_KNOWN_P (node))
- fprintf (file, " alias set %d", DECL_POINTER_ALIAS_SET (node));
+ {
+ fprintf (file, " alias set ");
+ fprintf (file, HOST_WIDE_INT_PRINT_DEC,
+ DECL_POINTER_ALIAS_SET (node));
+ }
+
+ if (TREE_CODE (node) == FIELD_DECL)
+ {
+ print_node (file, "offset", DECL_FIELD_OFFSET (node), indent + 4);
+ print_node (file, "bit offset", DECL_FIELD_BIT_OFFSET (node),
+ indent + 4);
+ }
+
print_node_brief (file, "context", DECL_CONTEXT (node), indent + 4);
- print_node_brief (file, "machine_attributes", DECL_MACHINE_ATTRIBUTES (node), indent + 4);
+ print_node_brief (file, "machine_attributes",
+ DECL_MACHINE_ATTRIBUTES (node), indent + 4);
print_node_brief (file, "abstract_origin",
DECL_ABSTRACT_ORIGIN (node), indent + 4);
print_node (file, "arguments", DECL_ARGUMENTS (node), indent + 4);
- print_node (file, "result", DECL_RESULT (node), indent + 4);
+ print_node (file, "result", DECL_RESULT_FLD (node), indent + 4);
print_node_brief (file, "initial", DECL_INITIAL (node), indent + 4);
print_lang_decl (file, node, indent);
print_rtl (file, DECL_RTL (node));
}
- if (DECL_SAVED_INSNS (node) != 0)
+ if (TREE_CODE (node) == PARM_DECL && DECL_INCOMING_RTL (node) != 0)
{
indent_to (file, indent + 4);
- if (TREE_CODE (node) == PARM_DECL)
- {
- fprintf (file, "incoming-rtl ");
- print_rtl (file, DECL_INCOMING_RTL (node));
- }
- else if (TREE_CODE (node) == FUNCTION_DECL)
- {
- fprintf (file, "saved-insns ");
- fprintf (file, HOST_PTR_PRINTF,
- (char *) DECL_SAVED_INSNS (node));
- }
+ fprintf (file, "incoming-rtl ");
+ print_rtl (file, DECL_INCOMING_RTL (node));
+ }
+ else if (TREE_CODE (node) == FUNCTION_DECL
+ && DECL_SAVED_INSNS (node) != 0)
+ {
+ indent_to (file, indent + 4);
+ fprintf (file, "saved-insns ");
+ fprintf (file, HOST_PTR_PRINTF, (char *) DECL_SAVED_INSNS (node));
}
/* Print the decl chain only if decl is at second level. */
break;
case 't':
- if (TYPE_NO_FORCE_BLK (node))
+ /* The no-force-blk flag is used for different things in
+ different types. */
+ if ((TREE_CODE (node) == RECORD_TYPE
+ || TREE_CODE (node) == UNION_TYPE
+ || TREE_CODE (node) == QUAL_UNION_TYPE)
+ && TYPE_NO_FORCE_BLK (node))
fputs (" no-force-blk", file);
+ else if (TREE_CODE (node) == INTEGER_TYPE
+ && TYPE_IS_SIZETYPE (node))
+ fputs (" sizetype", file);
+ else if (TREE_CODE (node) == FUNCTION_TYPE
+ && TYPE_RETURNS_STACK_DEPRESSED (node))
+ fputs (" returns-stack-depressed", file);
+
if (TYPE_STRING_FLAG (node))
fputs (" string-flag", file);
if (TYPE_NEEDS_CONSTRUCTING (node))
fputs (" needs-constructing", file);
- if (TYPE_TRANSPARENT_UNION (node))
+
+ /* The transparent-union flag is used for different things in
+ different nodes. */
+ if (TREE_CODE (node) == UNION_TYPE && TYPE_TRANSPARENT_UNION (node))
fputs (" transparent-union", file);
+ else if (TREE_CODE (node) == ARRAY_TYPE
+ && TYPE_NONALIASED_COMPONENT (node))
+ fputs (" nonaliased-component", file);
+ else if (TREE_CODE (node) == FUNCTION_TYPE
+ && TYPE_AMBIENT_BOUNDEDNESS (node))
+ fputs (" ambient-boundedness", file);
+
if (TYPE_PACKED (node))
fputs (" packed", file);
fprintf (file, " align %d", TYPE_ALIGN (node));
fprintf (file, " symtab %d", TYPE_SYMTAB_ADDRESS (node));
- fprintf (file, " alias set %d", TYPE_ALIAS_SET (node));
+ fprintf (file, " alias set ");
+ fprintf (file, HOST_WIDE_INT_PRINT_DEC, TYPE_ALIAS_SET (node));
print_node (file, "attributes", TYPE_ATTRIBUTES (node), indent + 4);
|| TREE_CODE (node) == UNION_TYPE
|| TREE_CODE (node) == QUAL_UNION_TYPE)
print_node (file, "fields", TYPE_FIELDS (node), indent + 4);
- else if (TREE_CODE (node) == FUNCTION_TYPE || TREE_CODE (node) == METHOD_TYPE)
+ else if (TREE_CODE (node) == FUNCTION_TYPE
+ || TREE_CODE (node) == METHOD_TYPE)
{
if (TYPE_METHOD_BASETYPE (node))
- print_node_brief (file, "method basetype", TYPE_METHOD_BASETYPE (node), indent + 4);
+ print_node_brief (file, "method basetype",
+ TYPE_METHOD_BASETYPE (node), indent + 4);
print_node (file, "arg-types", TYPE_ARG_TYPES (node), indent + 4);
}
else if (TREE_CODE (node) == OFFSET_TYPE)
break;
}
- len = tree_code_length[(int) TREE_CODE (node)];
+ len = TREE_CODE_LENGTH (TREE_CODE (node));
+
/* Some nodes contain rtx's, not trees,
after a certain point. Print the rtx's as rtx's. */
first_rtl = first_rtl_op (TREE_CODE (node));
+
for (i = 0; i < len; i++)
{
if (i >= first_rtl)
EXPR_WFL_FILENAME (node) : "(no file info)"),
EXPR_WFL_LINENO (node), EXPR_WFL_COLNO (node));
}
+ print_node (file, "chain", BLOCK_CHAIN (node), indent + 4);
break;
case 'c':