diff options
author | kenner <kenner@138bc75d-0d04-0410-961f-82ee72b054a4> | 2000-08-16 01:23:46 +0000 |
---|---|---|
committer | kenner <kenner@138bc75d-0d04-0410-961f-82ee72b054a4> | 2000-08-16 01:23:46 +0000 |
commit | 2973ed282011ce93f8e30ab9e0b99ebedd9a7786 (patch) | |
tree | b694b469192e5051776e7faa76af40a89d02b002 /gcc/print-tree.c | |
parent | d490e2f2f1bcc2c534aa63496a502c829beaad03 (diff) | |
download | gcc-2973ed282011ce93f8e30ab9e0b99ebedd9a7786.tar.gz |
* 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.c | 45 |
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) |