aboutsummaryrefslogtreecommitdiff
path: root/gcc/print-tree.c
diff options
context:
space:
mode:
authorkenner <kenner@138bc75d-0d04-0410-961f-82ee72b054a4>2000-08-16 01:23:46 +0000
committerkenner <kenner@138bc75d-0d04-0410-961f-82ee72b054a4>2000-08-16 01:23:46 +0000
commit2973ed282011ce93f8e30ab9e0b99ebedd9a7786 (patch)
treeb694b469192e5051776e7faa76af40a89d02b002 /gcc/print-tree.c
parentd490e2f2f1bcc2c534aa63496a502c829beaad03 (diff)
* calls.c (ECF_SP_DEPRESSED): New macro.
(calls_function_1): Treat calling sp-depressed function as alloca. (emit_call_1): Don't adjust SP if calling sp-depressed function. (expand_call): Set ECF_SP_DEPRESSED if TYPE_RETURNS_STACK_DEPRESSED. If sp-depressed, ensure block saves and restores SP. * fold-const.c (extract_muldiv): Only check TYPE_IS_SIZETYPE for INTEGER_TYPE. * function.c (keep_stack_depressed): New function. (thread_prologue_and_epilogue_insns): Call it. * print-tree.c (print_node): Use HOST_WIDE_INT_PRINT_UNSIGNED to print DECL_OFFSET_ALIGN. Print no-force-blk and transparent-union flags properly. * stmt.c (expand_goto_internal): Don't restore stack if last block and function returns with sp depressed. (fixup_gotos): Likewise. (save_stack_pointer): New function, from code in expand_decl. (expand_decl): Call new function. * tree.h (TYPE_IS_SIZETYPE): Call INTEGER_TYPE_CHECK. (TYPE_RETURNS_STACK_DEPRESSED): New macro. (save_stack_pointer): New declaration. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@35735 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/print-tree.c')
-rw-r--r--gcc/print-tree.c45
1 files changed, 32 insertions, 13 deletions
diff --git a/gcc/print-tree.c b/gcc/print-tree.c
index 7e69e4b6b22..c951766bfa3 100644
--- a/gcc/print-tree.c
+++ b/gcc/print-tree.c
@@ -412,7 +412,11 @@ print_node (file, prefix, node, indent)
{
fprintf (file, " align %d", DECL_ALIGN (node));
if (TREE_CODE (node) == FIELD_DECL)
- fprintf (file, " offset_align %d", DECL_OFFSET_ALIGN (node));
+ {
+ fprintf (file, " offset_align ");
+ fprintf (file, HOST_WIDE_INT_PRINT_UNSIGNED,
+ DECL_OFFSET_ALIGN (node));
+ }
}
else if (DECL_INLINE (node))
{
@@ -478,23 +482,36 @@ print_node (file, prefix, node, indent)
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);
+
/* The transparent-union flag is used for different things in
different nodes. */
- if (TYPE_CHECK (node)->type.transparent_union_flag)
- {
- if (TREE_CODE (node) == UNION_TYPE)
- fputs (" transparent-union", file);
- else if (TREE_CODE (node) == ARRAY_TYPE)
- fputs (" nonaliased-component", file);
- else
- fputs (" tu-flag", file);
- }
+ 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);
@@ -550,10 +567,12 @@ print_node (file, prefix, node, indent)
|| 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)