summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGabriel Dos Reis <gdr@integrable-solutions.net>2005-07-03 01:14:56 +0000
committerGabriel Dos Reis <gdr@gcc.gnu.org>2005-07-03 01:14:56 +0000
commit7f3b2bdaaffb46e225d7652507df297bcbf3b647 (patch)
tree8a78cec45f0a8ab8c42a0303b9473ffe104c02fb
parentea40ba9c04882ea2ddf987e2783f98cc38bac081 (diff)
downloadgcc-7f3b2bdaaffb46e225d7652507df297bcbf3b647.tar.gz
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. <TRY_FINALLY_EXPR>, <RETURN_EXPR>, <CASE_LABEL_EXPR>, <LABEL_EXPR>, <GOTO_EXPR>, <SWITCH_EXPR>: Add. (dump_enabled_p): Return TRUE if PHASE is TDI_all and any dump is enabled. Co-Authored-By: Christian Ehrhardt <ehrhardt@mathematik.uni-ulm.de> From-SVN: r101544
-rw-r--r--gcc/ChangeLog12
-rw-r--r--gcc/c-decl.c11
-rw-r--r--gcc/tree-dump.c55
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 <gdr@integrable-solutions.net>
+ Christian Ehrhardt <ehrhardt@mathematik.uni-ulm.de>
+
+ 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.
+ <TRY_FINALLY_EXPR>, <RETURN_EXPR>, <CASE_LABEL_EXPR>, <LABEL_EXPR>,
+ <GOTO_EXPR>, <SWITCH_EXPR>: Add.
+ (dump_enabled_p): Return TRUE if PHASE is TDI_all and any dump
+ is enabled.
+
2005-07-03 Joseph S. Myers <joseph@codesourcery.com>
* 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. */