From 7f3b2bdaaffb46e225d7652507df297bcbf3b647 Mon Sep 17 00:00:00 2001 From: Gabriel Dos Reis Date: Sun, 3 Jul 2005 01:14:56 +0000 Subject: [PATCH] re PR c++/18279 (missing function bodies from -fdump-translation-unit) PR c++/18279 * c-decl.c (c_write_global_declarations): Dump contents of external scope to. * tree-dump.c (dequeue_and_dump): Dump abstract origin of a decl. , , , , , : Add. (dump_enabled_p): Return TRUE if PHASE is TDI_all and any dump is enabled. Co-Authored-By: Christian Ehrhardt From-SVN: r101544 --- gcc/ChangeLog | 12 ++++++++++++ gcc/c-decl.c | 11 +++++++++++ gcc/tree-dump.c | 55 ++++++++++++++++++++++++++++++++++++++++++++++++++++--- 3 files changed, 75 insertions(+), 3 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 84e8a85ddc3..3ef3f0856e7 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,15 @@ +2005-07-02 Gabriel Dos Reis + Christian Ehrhardt + + PR c++/18279 + * c-decl.c (c_write_global_declarations): Dump contents of + external scope to. + * tree-dump.c (dequeue_and_dump): Dump abstract origin of a decl. + , , , , + , : Add. + (dump_enabled_p): Return TRUE if PHASE is TDI_all and any dump + is enabled. + 2005-07-03 Joseph S. Myers * c-common.h (GCC_DIAG_STYLE): Define. diff --git a/gcc/c-decl.c b/gcc/c-decl.c index 04d095c81c7..d516ffeb3bb 100644 --- a/gcc/c-decl.c +++ b/gcc/c-decl.c @@ -7541,6 +7541,17 @@ c_write_global_declarations (void) through wrapup_global_declarations and check_global_declarations. */ for (t = all_translation_units; t; t = TREE_CHAIN (t)) c_write_global_declarations_1 (BLOCK_VARS (DECL_INITIAL (t))); + if (ext_block) + { + tree tmp = BLOCK_VARS (ext_block); + int flags; + FILE * stream = dump_begin (TDI_tu, &flags); + if (stream && tmp) + { + dump_node (tmp, flags & ~TDF_SLIM, stream); + dump_end (TDI_tu, stream); + } + } c_write_global_declarations_1 (BLOCK_VARS (ext_block)); /* Generate functions to call static constructors and destructors diff --git a/gcc/tree-dump.c b/gcc/tree-dump.c index e4905336cea..b31c7b73862 100644 --- a/gcc/tree-dump.c +++ b/gcc/tree-dump.c @@ -322,6 +322,8 @@ dequeue_and_dump (dump_info_p di) if (DECL_ASSEMBLER_NAME_SET_P (t) && DECL_ASSEMBLER_NAME (t) != DECL_NAME (t)) dump_child ("mngl", DECL_ASSEMBLER_NAME (t)); + if (DECL_ABSTRACT_ORIGIN (t)) + dump_child ("orig", DECL_ABSTRACT_ORIGIN (t)); /* And types. */ queue_and_dump_type (di, t); dump_child ("scpe", DECL_CONTEXT (t)); @@ -572,6 +574,11 @@ dequeue_and_dump (dump_info_p di) dump_child ("op 2", TREE_OPERAND (t, 2)); break; + case TRY_FINALLY_EXPR: + dump_child ("op 0", TREE_OPERAND (t, 0)); + dump_child ("op 1", TREE_OPERAND (t, 1)); + break; + case CALL_EXPR: dump_child ("fn", TREE_OPERAND (t, 0)); dump_child ("args", TREE_OPERAND (t, 1)); @@ -594,6 +601,10 @@ dequeue_and_dump (dump_info_p di) dump_child ("cond", TREE_OPERAND (t, 0)); break; + case RETURN_EXPR: + dump_child ("expr", TREE_OPERAND (t, 0)); + break; + case TARGET_EXPR: dump_child ("decl", TREE_OPERAND (t, 0)); dump_child ("init", TREE_OPERAND (t, 1)); @@ -605,6 +616,29 @@ dequeue_and_dump (dump_info_p di) dump_child ("init", TREE_OPERAND (t, 3)); break; + case CASE_LABEL_EXPR: + dump_child ("name", CASE_LABEL (t)); + if (CASE_LOW (t)) { + dump_child ("low ", CASE_LOW (t)); + if (CASE_HIGH (t)) { + dump_child ("high", CASE_HIGH (t)); + } + } + break; + case LABEL_EXPR: + dump_child ("name", TREE_OPERAND (t,0)); + break; + case GOTO_EXPR: + dump_child ("labl", TREE_OPERAND (t, 0)); + break; + case SWITCH_EXPR: + dump_child ("cond", TREE_OPERAND (t, 0)); + dump_child ("body", TREE_OPERAND (t, 1)); + if (TREE_OPERAND (t, 2)) + { + dump_child ("labl", TREE_OPERAND (t,2)); + } + break; default: /* There are no additional fields to print. */ break; @@ -859,13 +893,28 @@ dump_begin (enum tree_dump_index phase, int *flag_ptr) return stream; } -/* Returns nonzero if tree dump PHASE is enabled. */ +/* Returns nonzero if tree dump PHASE is enabled. If PHASE is + TDI_tree_all, return nonzero if any dump is enabled. */ int dump_enabled_p (enum tree_dump_index phase) { - struct dump_file_info *dfi = get_dump_file_info (phase); - return dfi->state; + if (phase == TDI_tree_all) + { + size_t i; + for (i = TDI_none + 1; i < (size_t) TDI_end; i++) + if (dump_files[i].state) + return 1; + for (i = 0; i < extra_dump_files_in_use; i++) + if (extra_dump_files[i].state) + return 1; + return 0; + } + else + { + struct dump_file_info *dfi = get_dump_file_info (phase); + return dfi->state; + } } /* Returns nonzero if tree dump PHASE has been initialized. */ -- 2.11.4.GIT