re PR c++/18279 (missing function bodies from -fdump-translation-unit)
authorGabriel Dos Reis <gdr@integrable-solutions.net>
Sun, 3 Jul 2005 01:14:56 +0000 (01:14 +0000)
committerGabriel Dos Reis <gdr@gcc.gnu.org>
Sun, 3 Jul 2005 01:14:56 +0000 (01:14 +0000)
        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

gcc/ChangeLog
gcc/c-decl.c
gcc/tree-dump.c

index 84e8a85..3ef3f08 100644 (file)
@@ -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.
index 04d095c..d516ffe 100644 (file)
@@ -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
index e490533..b31c7b7 100644 (file)
@@ -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.  */