diff mbox

Kill -fdump-translation-unit

Message ID 964bab70-9a78-6812-4697-7c0c0f2dc096@acm.org
State New
Headers show

Commit Message

Nathan Sidwell May 9, 2017, 3:41 p.m. UTC
-fdump-translation-unit is an inscrutably opaque dump.  It turned out 
that most of the uses of the tree-dump header file was to indirectly get 
at dumpfile.h, and the dump_function entry point it had forwarded to a 
dumper in tree-cfg.c.  The gimple dumper would use its node dumper when 
asked for a raw dump, but that was about it.

We have prettier printers now.  This patch nukes the tu dumper.  ok?

nathan

Comments

Richard Biener May 10, 2017, 8:49 a.m. UTC | #1
On Tue, May 9, 2017 at 5:41 PM, Nathan Sidwell <nathan@acm.org> wrote:
> -fdump-translation-unit is an inscrutably opaque dump.  It turned out that
> most of the uses of the tree-dump header file was to indirectly get at
> dumpfile.h, and the dump_function entry point it had forwarded to a dumper
> in tree-cfg.c.  The gimple dumper would use its node dumper when asked for a
> raw dump, but that was about it.
>
> We have prettier printers now.  This patch nukes the tu dumper.  ok?

Ok if nobody objects within 24 hours.

Thanks,
Richard.

> nathan
>
> --
> Nathan Sidwell
Alexander Monakov May 10, 2017, 5:51 p.m. UTC | #2
On Wed, 10 May 2017, Richard Biener wrote:

> On Tue, May 9, 2017 at 5:41 PM, Nathan Sidwell <nathan@acm.org> wrote:
> > -fdump-translation-unit is an inscrutably opaque dump.  It turned out that
> > most of the uses of the tree-dump header file was to indirectly get at
> > dumpfile.h, and the dump_function entry point it had forwarded to a dumper
> > in tree-cfg.c.  The gimple dumper would use its node dumper when asked for a
> > raw dump, but that was about it.
> >
> > We have prettier printers now.  This patch nukes the tu dumper.  ok?
> 
> Ok if nobody objects within 24 hours.

There was a reasonable IMO objection on the IRC (sadly, I can't say the same
about the responses that person received from Nathan).

A quick search indicates that people have published .tu parsers in Perl, JS
(producing json), the person objecting on IRC apparently used Python, and I'm
aware of another Python-based parser by Bruce Merry.

My takeaway from this is that people cared enough about this to build and
publish parsers in their language of choice, and that apparently it is or was
feature-rich enough for them to use.  Despite the format being undocumented and
formally not supported.

The motivation put forward in the opening mail ("is an inscutably opaque dump")
seems like a weak reason for removal.

Alexander
Jakub Jelinek May 10, 2017, 5:58 p.m. UTC | #3
On Wed, May 10, 2017 at 08:51:22PM +0300, Alexander Monakov wrote:
> On Wed, 10 May 2017, Richard Biener wrote:
> 
> > On Tue, May 9, 2017 at 5:41 PM, Nathan Sidwell <nathan@acm.org> wrote:
> > > -fdump-translation-unit is an inscrutably opaque dump.  It turned out that
> > > most of the uses of the tree-dump header file was to indirectly get at
> > > dumpfile.h, and the dump_function entry point it had forwarded to a dumper
> > > in tree-cfg.c.  The gimple dumper would use its node dumper when asked for a
> > > raw dump, but that was about it.
> > >
> > > We have prettier printers now.  This patch nukes the tu dumper.  ok?
> > 
> > Ok if nobody objects within 24 hours.
> 
> There was a reasonable IMO objection on the IRC (sadly, I can't say the same
> about the responses that person received from Nathan).
> 
> A quick search indicates that people have published .tu parsers in Perl, JS
> (producing json), the person objecting on IRC apparently used Python, and I'm
> aware of another Python-based parser by Bruce Merry.
> 
> My takeaway from this is that people cared enough about this to build and
> publish parsers in their language of choice, and that apparently it is or was
> feature-rich enough for them to use.  Despite the format being undocumented and
> formally not supported.
> 
> The motivation put forward in the opening mail ("is an inscutably opaque dump")
> seems like a weak reason for removal.

Can it at least be taken out of -fdump-tree-all?  It is huge, often larger
than the sum of all the other dump files, and don't remember ever using it
for anything.  Instead of trying to write a parser for it and reconstructing
something you can then later analyze, isn't it better to just write a plugin
that can analyze it directly?

	Jakub
Alexander Monakov May 10, 2017, 8:52 p.m. UTC | #4
On Wed, 10 May 2017, Jakub Jelinek wrote:
> Can it at least be taken out of -fdump-tree-all?  It is huge, often larger
> than the sum of all the other dump files, and don't remember ever using it
> for anything.

Yes, apart from advertising the capability I don't imagine it's useful to
produce that dump without a special flag.


> Instead of trying to write a parser for it and reconstructing
> something you can then later analyze, isn't it better to just write a plugin
> that can analyze it directly?

I think I can understand people writing a parser when it's sufficient; it won't
need to be recompiled for a specific compiler version (with headers from that
compiler), won't crash the compiler if you did something wrong.  For people more
familiar with a dynamic language like Python than C/C++ it may be just more
comfortable to do it that way.

Alexander
Nathan Sidwell May 10, 2017, 9:18 p.m. UTC | #5
On 05/10/2017 01:58 PM, Jakub Jelinek wrote:

>> A quick search indicates that people have published .tu parsers in Perl, JS
>> (producing json), the person objecting on IRC apparently used Python, and I'm
>> aware of another Python-based parser by Bruce Merry.

Prior to Alex mentioning it, I was unaware of such parsers -- I'm 
surprised.  This is not a data interchange format, it's a debugging dump.

The fellow on IRC failed to mention that, and made the claim that the TU 
dump was the simplest way of determining sizeof (time_t) when one has a 
cross compiler.

nathan
diff mbox

Patch

2017-05-09  Nathan Sidwell  <nathan@acm.org>

	Remove -fdump-translation-unit.
	gcc/
	* Makefile.in (TREE_DUMP_H): Delete.
	(C_COMMON_OBJS): Remove c-family/c-dump.o.
	(OBJS): Remove tree-dump.o.
	(PLUGIN_HEADERS): Remove $(TREE_DUMP_H).
	* cgraphclones.c: Include dumpfile.h not tree-dump.h.
	* doc/invoke.texi: Remove -fdump-translation-unit.
	* dumpfile.h (TDI_tu): Delete.
	(dump_function): Declare.
	(dump_node): Delete.
	* dumpfile.c: Include tree-cfg.h.
	(dump_files): Remove ".tu" line.
	(FIRST_AUTO_NUMBERED_DUMP): Decrement.
	(dump_function): New, from tree-dump.c.
	* tree-dump.h: Delete.
	* tree-dump.c: Delete.
	* gimplify.h: Include splay-tree.h not tree-dump.h.
	* graphite-poly.c: Don't include tree-dump.h
	* langhooks-def.h (lhd_tree_dump_dump_tree,
	lhd_tree_dump_type_quals): Don't declare.
	(LANG_HOOKS_TREE_DUMP_DUMP_TREE_FN,
	LANG_HOOKS_TREE_DUMP_TYPE_QUALS_FN,
	LANG_HOOKS_TREE_DUMP_INITIALIZER): Delete.
	* langhooks.c (lhd_tree_dump_dump_tree,
	lhd_tree_dump_type_quals): Delete.
	* langhooks.h (lang_hooks_for_tree_dump): Delete.
	(lang_hooks): Remove tree_dump field.
	* print-tree.c: Include dumpfile.h not tree-dump.h.
	* stor-layout.c: Likewise.
	* tree-nested.c: Likewise.
	* tree-cfg.c (dump_function_to_file): Don't dump raw node.
	gcc/c/
	* c-decl.c (c_parse_final_cleanups): Don't dump cleanup nodes.
	* gimple-parser.c: Don't #include tree-dump.h
	gcc/c-family/
	* c-dump.c: Delete.
	* c-gimplify.c (c_genericize): Don't raw dump the saved tree.
	gcc/cp/
	* Make-lang.in (CXX_AND_OBJCXX_OBJS): Remove cp/dump.o.
	* decl2.c (dump_tu): Delete.
	(c_parse_final_cleanups): Don't dump_tu.
	* dump.c: Delete.
	gcc/fortran/
	* trans-decl.c: Include dumpfile.h, not tree-dump.h.

Index: Makefile.in
===================================================================
--- Makefile.in	(revision 247784)
+++ Makefile.in	(working copy)
@@ -970,7 +970,6 @@  OPTS_H = $(INPUT_H) $(VEC_H) opts.h $(OB
 SYMTAB_H = $(srcdir)/../libcpp/include/symtab.h $(OBSTACK_H)
 CPP_ID_DATA_H = $(CPPLIB_H) $(srcdir)/../libcpp/include/cpp-id-data.h
 CPP_INTERNAL_H = $(srcdir)/../libcpp/internal.h $(CPP_ID_DATA_H)
-TREE_DUMP_H = tree-dump.h $(SPLAY_TREE_H) $(DUMPFILE_H)
 TREE_PASS_H = tree-pass.h $(TIMEVAR_H) $(DUMPFILE_H)
 TREE_SSA_H = tree-ssa.h tree-ssa-operands.h \
 		$(BITMAP_H) sbitmap.h $(BASIC_BLOCK_H) $(GIMPLE_H) \
@@ -1181,7 +1180,7 @@  GCC_OBJS = gcc.o gcc-main.o ggc-none.o
 c-family-warn = $(STRICT_WARN)
 
 # Language-specific object files shared by all C-family front ends.
-C_COMMON_OBJS = c-family/c-common.o c-family/c-cppbuiltin.o c-family/c-dump.o \
+C_COMMON_OBJS = c-family/c-common.o c-family/c-cppbuiltin.o \
   c-family/c-format.o c-family/c-gimplify.o c-family/c-indentation.o \
   c-family/c-lex.o c-family/c-omp.o c-family/c-opts.o c-family/c-pch.o \
   c-family/c-ppoutput.o c-family/c-pragma.o c-family/c-pretty-print.o \
@@ -1483,7 +1482,6 @@  OBJS = \
 	tree-data-ref.o \
 	tree-dfa.o \
 	tree-diagnostic.o \
-	tree-dump.o \
 	tree-eh.o \
 	tree-emutls.o \
 	tree-if-conv.o \
@@ -3409,7 +3407,7 @@  PLUGIN_HEADERS = $(TREE_H) $(CONFIG_H) $
   toplev.h $(DIAGNOSTIC_CORE_H) $(BASIC_BLOCK_H) $(HASH_TABLE_H) \
   tree-ssa-alias.h $(INTERNAL_FN_H) gimple-fold.h tree-eh.h gimple-expr.h \
   gimple.h is-a.h memmodel.h $(TREE_PASS_H) $(GCC_PLUGIN_H) \
-  $(GGC_H) $(TREE_DUMP_H) $(PRETTY_PRINT_H) $(OPTS_H) $(PARAMS_H) \
+  $(GGC_H) $(PRETTY_PRINT_H) $(OPTS_H) $(PARAMS_H) \
   $(tm_file_list) $(tm_include_list) $(tm_p_file_list) $(tm_p_include_list) \
   $(host_xm_file_list) $(host_xm_include_list) $(xm_include_list) \
   intl.h $(PLUGIN_VERSION_H) $(DIAGNOSTIC_H) ${C_TREE_H} \
Index: c/c-decl.c
===================================================================
--- c/c-decl.c	(revision 247784)
+++ c/c-decl.c	(working copy)
@@ -11240,18 +11240,6 @@  c_parse_final_cleanups (void)
       dump_ada_specs (collect_all_refs, NULL);
     }
 
-  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);
-	}
-    }
-
   /* Process all file scopes in this compilation, and the external_scope,
      through wrapup_global_declarations.  */
   FOR_EACH_VEC_ELT (*all_translation_units, i, t)
Index: c/gimple-parser.c
===================================================================
--- c/gimple-parser.c	(revision 247784)
+++ c/gimple-parser.c	(working copy)
@@ -53,7 +53,6 @@  along with GCC; see the file COPYING3.
 #include "tree-ssanames.h"
 #include "gimple-ssa.h"
 #include "tree-dfa.h"
-#include "tree-dump.h"
 
 
 /* Gimple parsing functions.  */
Index: c-family/c-dump.c
===================================================================
--- c-family/c-dump.c	(revision 247784)
+++ c-family/c-dump.c	(working copy)
@@ -1,50 +0,0 @@ 
-/* Tree-dumping functionality for C-family languages.
-   Copyright (C) 2002-2017 Free Software Foundation, Inc.
-   Written by Mark Mitchell <mark@codesourcery.com>
-
-This file is part of GCC.
-
-GCC is free software; you can redistribute it and/or modify it under
-the terms of the GNU General Public License as published by the Free
-Software Foundation; either version 3, or (at your option) any later
-version.
-
-GCC is distributed in the hope that it will be useful, but WITHOUT ANY
-WARRANTY; without even the implied warranty of MERCHANTABILITY or
-FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-for more details.
-
-You should have received a copy of the GNU General Public License
-along with GCC; see the file COPYING3.  If not see
-<http://www.gnu.org/licenses/>.  */
-
-#include "config.h"
-#include "system.h"
-#include "coretypes.h"
-#include "c-common.h"
-#include "tree-dump.h"
-
-/* Dump any C-specific tree codes and attributes of common codes.  */
-
-bool
-c_dump_tree (void *dump_info, tree t)
-{
-  enum tree_code code;
-  dump_info_p di = (dump_info_p) dump_info;
-
-  /* Figure out what kind of node this is.  */
-  code = TREE_CODE (t);
-
-  switch (code)
-    {
-    case FIELD_DECL:
-      if (DECL_C_BIT_FIELD (t))
-	dump_string (di, "bitfield");
-      break;
-
-    default:
-      break;
-    }
-
-  return false;
-}
Index: c-family/c-gimplify.c
===================================================================
--- c-family/c-gimplify.c	(revision 247784)
+++ c-family/c-gimplify.c	(working copy)
@@ -141,11 +141,7 @@  c_genericize (tree fndecl)
       fprintf (dump_orig, ";; enabled by -%s\n", dump_flag_name (TDI_original));
       fprintf (dump_orig, "\n");
 
-      if (local_dump_flags & TDF_RAW)
-	dump_node (DECL_SAVED_TREE (fndecl),
-		   TDF_SLIM | local_dump_flags, dump_orig);
-      else
-	print_c_tree (dump_orig, DECL_SAVED_TREE (fndecl));
+      print_c_tree (dump_orig, DECL_SAVED_TREE (fndecl));
       fprintf (dump_orig, "\n");
     }
 
Index: cgraphclones.c
===================================================================
--- cgraphclones.c	(revision 247784)
+++ cgraphclones.c	(working copy)
@@ -78,7 +78,7 @@  along with GCC; see the file COPYING3.
 #include "tree-eh.h"
 #include "tree-cfg.h"
 #include "tree-inline.h"
-#include "tree-dump.h"
+#include "dumpfile.h"
 #include "gimple-pretty-print.h"
 
 /* Create clone of edge in the node N represented by CALL_EXPR
Index: cp/Make-lang.in
===================================================================
--- cp/Make-lang.in	(revision 247784)
+++ cp/Make-lang.in	(working copy)
@@ -74,7 +74,7 @@  CXX_C_OBJS = attribs.o incpath.o \
 CXX_AND_OBJCXX_OBJS = cp/call.o cp/decl.o cp/expr.o cp/pt.o cp/typeck2.o \
  cp/class.o cp/decl2.o cp/error.o cp/lex.o cp/parser.o cp/ptree.o cp/rtti.o \
  cp/typeck.o cp/cvt.o cp/except.o cp/friend.o cp/init.o cp/method.o \
- cp/search.o cp/semantics.o cp/tree.o cp/repo.o cp/dump.o cp/optimize.o \
+ cp/search.o cp/semantics.o cp/tree.o cp/repo.o cp/optimize.o \
  cp/mangle.o cp/cp-objcp-common.o cp/name-lookup.o cp/cxx-pretty-print.o \
  cp/cp-cilkplus.o \
  cp/cp-gimplify.o cp/cp-array-notation.o cp/lambda.o \
Index: cp/decl2.c
===================================================================
--- cp/decl2.c	(revision 247784)
+++ cp/decl2.c	(working copy)
@@ -4363,22 +4363,6 @@  generate_mangling_aliases ()
   defer_mangling_aliases = false;
 }
 
-/* The entire file is now complete.  If requested, dump everything
-   to a file.  */
-
-static void
-dump_tu (void)
-{
-  int flags;
-  FILE *stream = dump_begin (TDI_tu, &flags);
-
-  if (stream)
-    {
-      dump_node (global_namespace, flags & ~TDF_SLIM, stream);
-      dump_end (TDI_tu, stream);
-    }
-}
-
 static location_t locus_at_end_of_parsing;
 
 /* Check the deallocation functions for CODE to see if we want to warn that
@@ -4472,7 +4456,6 @@  c_parse_final_cleanups (void)
 	    || ! DECL_HARD_REGISTER (node->decl))
 	  DECL_ASSEMBLER_NAME (node->decl);
       c_common_write_pch ();
-      dump_tu ();
       /* Ensure even the callers don't try to finalize the CU.  */
       flag_syntax_only = 1;
       return;
@@ -4830,10 +4813,6 @@  c_parse_final_cleanups (void)
 
   fini_constexpr ();
 
-  /* The entire file is now complete.  If requested, dump everything
-     to a file.  */
-  dump_tu ();
-
   if (flag_detailed_statistics)
     {
       dump_tree_statistics ();
Index: cp/dump.c
===================================================================
--- cp/dump.c	(revision 247784)
+++ cp/dump.c	(working copy)
@@ -1,496 +0,0 @@ 
-/* Tree-dumping functionality for intermediate representation.
-   Copyright (C) 1999-2017 Free Software Foundation, Inc.
-   Written by Mark Mitchell <mark@codesourcery.com>
-
-This file is part of GCC.
-
-GCC is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 3, or (at your option)
-any later version.
-
-GCC is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GCC; see the file COPYING3.  If not see
-<http://www.gnu.org/licenses/>.  */
-
-#include "config.h"
-#include "system.h"
-#include "coretypes.h"
-#include "cp-tree.h"
-#include "tree-dump.h"
-
-static void dump_access (dump_info_p, tree);
-
-static void dump_op (dump_info_p, tree);
-
-/* Dump a representation of the accessibility information associated
-   with T.  */
-
-static void
-dump_access (dump_info_p di, tree t)
-{
-  if (TREE_PROTECTED(t))
-    dump_string_field (di, "accs", "prot");
-  else if (TREE_PRIVATE(t))
-    dump_string_field (di, "accs", "priv");
-  else
-    dump_string_field (di, "accs", "pub");
-}
-
-/* Dump a representation of the specific operator for an overloaded
-   operator associated with node t.  */
-
-static void
-dump_op (dump_info_p di, tree t)
-{
-  switch (DECL_OVERLOADED_OPERATOR_P (t)) {
-    case NEW_EXPR:
-      dump_string (di, "new");
-      break;
-    case VEC_NEW_EXPR:
-      dump_string (di, "vecnew");
-      break;
-    case DELETE_EXPR:
-      dump_string (di, "delete");
-      break;
-    case VEC_DELETE_EXPR:
-      dump_string (di, "vecdelete");
-      break;
-    case UNARY_PLUS_EXPR:
-      dump_string (di, "pos");
-      break;
-    case NEGATE_EXPR:
-      dump_string (di, "neg");
-      break;
-    case ADDR_EXPR:
-      dump_string (di, "addr");
-      break;
-    case INDIRECT_REF:
-      dump_string(di, "deref");
-      break;
-    case BIT_NOT_EXPR:
-      dump_string(di, "not");
-      break;
-    case TRUTH_NOT_EXPR:
-      dump_string(di, "lnot");
-      break;
-    case PREINCREMENT_EXPR:
-      dump_string(di, "preinc");
-      break;
-    case PREDECREMENT_EXPR:
-      dump_string(di, "predec");
-      break;
-    case PLUS_EXPR:
-      if (DECL_ASSIGNMENT_OPERATOR_P (t))
-	dump_string (di, "plusassign");
-      else
-	dump_string(di, "plus");
-      break;
-    case MINUS_EXPR:
-      if (DECL_ASSIGNMENT_OPERATOR_P (t))
-	dump_string (di, "minusassign");
-      else
-	dump_string(di, "minus");
-      break;
-    case MULT_EXPR:
-      if (DECL_ASSIGNMENT_OPERATOR_P (t))
-	dump_string (di, "multassign");
-      else
-	dump_string (di, "mult");
-      break;
-    case TRUNC_DIV_EXPR:
-      if (DECL_ASSIGNMENT_OPERATOR_P (t))
-	dump_string (di, "divassign");
-      else
-	dump_string (di, "div");
-      break;
-    case TRUNC_MOD_EXPR:
-      if (DECL_ASSIGNMENT_OPERATOR_P (t))
-	 dump_string (di, "modassign");
-      else
-	dump_string (di, "mod");
-      break;
-    case BIT_AND_EXPR:
-      if (DECL_ASSIGNMENT_OPERATOR_P (t))
-	dump_string (di, "andassign");
-      else
-	dump_string (di, "and");
-      break;
-    case BIT_IOR_EXPR:
-      if (DECL_ASSIGNMENT_OPERATOR_P (t))
-	dump_string (di, "orassign");
-      else
-	dump_string (di, "or");
-      break;
-    case BIT_XOR_EXPR:
-      if (DECL_ASSIGNMENT_OPERATOR_P (t))
-	dump_string (di, "xorassign");
-      else
-	dump_string (di, "xor");
-      break;
-    case LSHIFT_EXPR:
-      if (DECL_ASSIGNMENT_OPERATOR_P (t))
-	dump_string (di, "lshiftassign");
-      else
-	dump_string (di, "lshift");
-      break;
-    case RSHIFT_EXPR:
-      if (DECL_ASSIGNMENT_OPERATOR_P (t))
-	dump_string (di, "rshiftassign");
-      else
-	dump_string (di, "rshift");
-      break;
-    case EQ_EXPR:
-      dump_string (di, "eq");
-      break;
-    case NE_EXPR:
-      dump_string (di, "ne");
-      break;
-    case LT_EXPR:
-      dump_string (di, "lt");
-      break;
-    case GT_EXPR:
-      dump_string (di, "gt");
-      break;
-    case LE_EXPR:
-      dump_string (di, "le");
-      break;
-    case GE_EXPR:
-      dump_string (di, "ge");
-      break;
-    case TRUTH_ANDIF_EXPR:
-      dump_string (di, "land");
-      break;
-    case TRUTH_ORIF_EXPR:
-      dump_string (di, "lor");
-      break;
-    case COMPOUND_EXPR:
-      dump_string (di, "compound");
-      break;
-    case MEMBER_REF:
-      dump_string (di, "memref");
-      break;
-    case COMPONENT_REF:
-      dump_string (di, "ref");
-      break;
-    case ARRAY_REF:
-      dump_string (di, "subs");
-      break;
-    case POSTINCREMENT_EXPR:
-      dump_string (di, "postinc");
-      break;
-    case POSTDECREMENT_EXPR:
-      dump_string (di, "postdec");
-      break;
-    case CALL_EXPR:
-      dump_string (di, "call");
-      break;
-    case NOP_EXPR:
-      if (DECL_ASSIGNMENT_OPERATOR_P (t))
-	dump_string (di, "assign");
-      break;
-    default:
-      break;
-  }
-}
-
-/* Dump information common to statements from STMT.  */
-
-static void
-dump_stmt (dump_info_p di, const_tree t)
-{
-  if (EXPR_HAS_LOCATION (t))
-    dump_int (di, "line", EXPR_LINENO (t));
-}
-
-bool
-cp_dump_tree (void* dump_info, tree t)
-{
-  enum tree_code code;
-  dump_info_p di = (dump_info_p) dump_info;
-
-  /* Figure out what kind of node this is.  */
-  code = TREE_CODE (t);
-
-  if (DECL_P (t))
-    {
-      if (DECL_LANG_SPECIFIC (t) && DECL_LANGUAGE (t) != lang_cplusplus)
-	dump_string_field (di, "lang", language_to_string (DECL_LANGUAGE (t)));
-    }
-
-  switch (code)
-    {
-    case IDENTIFIER_NODE:
-      if (IDENTIFIER_OPNAME_P (t))
-	{
-	  dump_string_field (di, "note", "operator");
-	  return true;
-	}
-      else if (IDENTIFIER_TYPENAME_P (t))
-	{
-	  dump_child ("tynm", TREE_TYPE (t));
-	  return true;
-	}
-      break;
-
-    case OFFSET_TYPE:
-      dump_string_field (di, "note", "ptrmem");
-      dump_child ("ptd", TYPE_PTRMEM_POINTED_TO_TYPE (t));
-      dump_child ("cls", TYPE_PTRMEM_CLASS_TYPE (t));
-      return true;
-
-    case RECORD_TYPE:
-      if (TYPE_PTRMEMFUNC_P (t))
-	{
-	  dump_string_field (di, "note", "ptrmem");
-	  dump_child ("ptd", TYPE_PTRMEM_POINTED_TO_TYPE (t));
-	  dump_child ("cls", TYPE_PTRMEM_CLASS_TYPE (t));
-	  return true;
-	}
-      /* Fall through.  */
-
-    case UNION_TYPE:
-      /* Is it a type used as a base? */
-      if (TYPE_CONTEXT (t) && TREE_CODE (TYPE_CONTEXT (t)) == TREE_CODE (t)
-	  && CLASSTYPE_AS_BASE (TYPE_CONTEXT (t)) == t)
-	{
-	  dump_child ("bfld", TYPE_CONTEXT (t));
-	  return true;
-	}
-
-      if (! MAYBE_CLASS_TYPE_P (t))
-	break;
-
-      dump_child ("vfld", TYPE_VFIELD (t));
-      if (CLASSTYPE_TEMPLATE_SPECIALIZATION(t))
-	dump_string(di, "spec");
-
-      if (!dump_flag (di, TDF_SLIM, t) && TYPE_BINFO (t))
-	{
-	  int i;
-	  tree binfo;
-	  tree base_binfo;
-
-	  for (binfo = TYPE_BINFO (t), i = 0;
-	       BINFO_BASE_ITERATE (binfo, i, base_binfo); ++i)
-	    {
-	      dump_child ("base", BINFO_TYPE (base_binfo));
-	      if (BINFO_VIRTUAL_P (base_binfo))
-		dump_string_field (di, "spec", "virt");
-	      dump_access (di, base_binfo);
-	    }
-	}
-      break;
-
-    case FIELD_DECL:
-      dump_access (di, t);
-      if (DECL_MUTABLE_P (t))
-	dump_string_field (di, "spec", "mutable");
-      break;
-
-    case VAR_DECL:
-      if (TREE_CODE (CP_DECL_CONTEXT (t)) == RECORD_TYPE)
-	dump_access (di, t);
-      if (TREE_STATIC (t) && !TREE_PUBLIC (t))
-	dump_string_field (di, "link", "static");
-      break;
-
-    case FUNCTION_DECL:
-      if (!DECL_THUNK_P (t))
-	{
-	  if (DECL_OVERLOADED_OPERATOR_P (t)) {
-	    dump_string_field (di, "note", "operator");
-	    dump_op (di, t);
-	  }
-	  if (DECL_FUNCTION_MEMBER_P (t))
-	    {
-	      dump_string_field (di, "note", "member");
-	      dump_access (di, t);
-	    }
-	  if (DECL_PURE_VIRTUAL_P (t))
-	    dump_string_field (di, "spec", "pure");
-	  if (DECL_VIRTUAL_P (t))
-	    dump_string_field (di, "spec", "virt");
-	  if (DECL_CONSTRUCTOR_P (t))
-	    dump_string_field (di, "note", "constructor");
-	  if (DECL_DESTRUCTOR_P (t))
-	    dump_string_field (di, "note", "destructor");
-	  if (DECL_CONV_FN_P (t))
-	    dump_string_field (di, "note", "conversion");
-	  if (DECL_GLOBAL_CTOR_P (t))
-	    dump_string_field (di, "note", "global init");
-	  if (DECL_GLOBAL_DTOR_P (t))
-	    dump_string_field (di, "note", "global fini");
-	  if (DECL_FRIEND_PSEUDO_TEMPLATE_INSTANTIATION (t))
-	    dump_string_field (di, "note", "pseudo tmpl");
-	}
-      else
-	{
-	  tree virt = THUNK_VIRTUAL_OFFSET (t);
-
-	  dump_string_field (di, "note", "thunk");
-	  if (DECL_THIS_THUNK_P (t))
-	    dump_string_field (di, "note", "this adjusting");
-	  else
-	    {
-	      dump_string_field (di, "note", "result adjusting");
-	      if (virt)
-		virt = BINFO_VPTR_FIELD (virt);
-	    }
-	  dump_int (di, "fixd", THUNK_FIXED_OFFSET (t));
-	  if (virt)
-	    dump_int (di, "virt", tree_to_shwi (virt));
-	  dump_child ("fn", DECL_INITIAL (t));
-	}
-      break;
-
-    case NAMESPACE_DECL:
-      if (DECL_NAMESPACE_ALIAS (t))
-	dump_child ("alis", DECL_NAMESPACE_ALIAS (t));
-      else if (!dump_flag (di, TDF_SLIM, t))
-	dump_child ("dcls", cp_namespace_decls (t));
-      break;
-
-    case TEMPLATE_DECL:
-      dump_child ("rslt", DECL_TEMPLATE_RESULT (t));
-      dump_child ("inst", DECL_TEMPLATE_INSTANTIATIONS (t));
-      dump_child ("spcs", DECL_TEMPLATE_SPECIALIZATIONS (t));
-      dump_child ("prms", DECL_TEMPLATE_PARMS (t));
-      break;
-
-    case OVERLOAD:
-      dump_child ("crnt", OVL_CURRENT (t));
-      dump_child ("chan", OVL_CHAIN (t));
-      break;
-
-    case TRY_BLOCK:
-      dump_stmt (di, t);
-      if (CLEANUP_P (t))
-	dump_string_field (di, "note", "cleanup");
-      dump_child ("body", TRY_STMTS (t));
-      dump_child ("hdlr", TRY_HANDLERS (t));
-      break;
-
-    case EH_SPEC_BLOCK:
-      dump_stmt (di, t);
-      dump_child ("body", EH_SPEC_STMTS (t));
-      dump_child ("raises", EH_SPEC_RAISES (t));
-      break;
-
-    case PTRMEM_CST:
-      dump_child ("clas", PTRMEM_CST_CLASS (t));
-      dump_child ("mbr", PTRMEM_CST_MEMBER (t));
-      break;
-
-    case THROW_EXPR:
-      /* These nodes are unary, but do not have code class `1'.  */
-      dump_child ("op 0", TREE_OPERAND (t, 0));
-      break;
-
-    case AGGR_INIT_EXPR:
-      {
-	int i = 0;
-	tree arg;
-	aggr_init_expr_arg_iterator iter;
-	dump_int (di, "ctor", AGGR_INIT_VIA_CTOR_P (t));
-	dump_child ("fn", AGGR_INIT_EXPR_FN (t));
-	FOR_EACH_AGGR_INIT_EXPR_ARG (arg, iter, t)
-	  {
-	    char buffer[32];
-	    sprintf (buffer, "%u", i);
-	    dump_child (buffer, arg);
-	    i++;
-	  }
-	dump_child ("decl", AGGR_INIT_EXPR_SLOT (t));
-      }
-      break;
-
-    case HANDLER:
-      dump_stmt (di, t);
-      dump_child ("parm", HANDLER_PARMS (t));
-      dump_child ("body", HANDLER_BODY (t));
-      break;
-
-    case MUST_NOT_THROW_EXPR:
-      dump_stmt (di, t);
-      dump_child ("body", TREE_OPERAND (t, 0));
-      dump_child ("cond", MUST_NOT_THROW_COND (t));
-      break;
-
-    case USING_STMT:
-      dump_stmt (di, t);
-      dump_child ("nmsp", USING_STMT_NAMESPACE (t));
-      break;
-
-    case CLEANUP_STMT:
-      dump_stmt (di, t);
-      dump_child ("decl", CLEANUP_DECL (t));
-      dump_child ("expr", CLEANUP_EXPR (t));
-      dump_child ("body", CLEANUP_BODY (t));
-      break;
-
-    case IF_STMT:
-      dump_stmt (di, t);
-      dump_child ("cond", IF_COND (t));
-      dump_child ("then", THEN_CLAUSE (t));
-      dump_child ("else", ELSE_CLAUSE (t));
-      break;
-
-    case BREAK_STMT:
-    case CONTINUE_STMT:
-      dump_stmt (di, t);
-      break;
-
-    case DO_STMT:
-      dump_stmt (di, t);
-      dump_child ("body", DO_BODY (t));
-      dump_child ("cond", DO_COND (t));
-      break;
-
-    case FOR_STMT:
-      dump_stmt (di, t);
-      dump_child ("init", FOR_INIT_STMT (t));
-      dump_child ("cond", FOR_COND (t));
-      dump_child ("expr", FOR_EXPR (t));
-      dump_child ("body", FOR_BODY (t));
-      break;
-
-    case RANGE_FOR_STMT:
-      dump_stmt (di, t);
-      dump_child ("decl", RANGE_FOR_DECL (t));
-      dump_child ("expr", RANGE_FOR_EXPR (t));
-      dump_child ("body", RANGE_FOR_BODY (t));
-      break;
-
-    case SWITCH_STMT:
-      dump_stmt (di, t);
-      dump_child ("cond", SWITCH_STMT_COND (t));
-      dump_child ("body", SWITCH_STMT_BODY (t));
-      break;
-
-    case WHILE_STMT:
-      dump_stmt (di, t);
-      dump_child ("cond", WHILE_COND (t));
-      dump_child ("body", WHILE_BODY (t));
-      break;
-
-    case STMT_EXPR:
-      dump_child ("stmt", STMT_EXPR_STMT (t));
-      break;
-
-    case EXPR_STMT:
-      dump_stmt (di, t);
-      dump_child ("expr", EXPR_STMT_EXPR (t));
-      break;
-
-    default:
-      break;
-    }
-
-  return c_dump_tree (di, t);
-}
Index: doc/invoke.texi
===================================================================
--- doc/invoke.texi	(revision 247784)
+++ doc/invoke.texi	(working copy)
@@ -546,7 +546,6 @@  Objective-C and Objective-C++ Dialects}.
 -fdump-passes @gol
 -fdump-rtl-@var{pass}  -fdump-rtl-@var{pass}=@var{filename} @gol
 -fdump-statistics @gol
--fdump-translation-unit@r{[}-@var{n}@r{]} @gol
 -fdump-tree-all @gol
 -fdump-tree-@var{switch} @gol
 -fdump-tree-@var{switch}-@var{options} @gol
@@ -12985,16 +12984,6 @@  whole compilation unit while @samp{-deta
 the passes generate them.  The default with no option is to sum
 counters for each function compiled.
 
-@item -fdump-translation-unit @r{(C++ only)}
-@itemx -fdump-translation-unit-@var{options} @r{(C++ only)}
-@opindex fdump-translation-unit
-Dump a representation of the tree structure for the entire translation
-unit to a file.  The file name is made by appending @file{.tu} to the
-source file name, and the file is created in the same directory as the
-output file.  If the @samp{-@var{options}} form is used, @var{options}
-controls the details of the dump as described for the
-@option{-fdump-tree} options.
-
 @item -fdump-tree-all
 @itemx -fdump-tree-@var{switch}
 @itemx -fdump-tree-@var{switch}-@var{options}
Index: dumpfile.c
===================================================================
--- dumpfile.c	(revision 247784)
+++ dumpfile.c	(working copy)
@@ -26,6 +26,7 @@  along with GCC; see the file COPYING3.
 #include "diagnostic-core.h"
 #include "dumpfile.h"
 #include "context.h"
+#include "tree-cfg.h"
 
 /* If non-NULL, return one past-the-end of the matching SUBPART of
    the WHOLE string.  */
@@ -57,8 +58,6 @@  static struct dump_file_info dump_files[
    0, 0, 0, 0, 0, false, false},
   {".ipa-clones", "ipa-clones", NULL, NULL, NULL, NULL, NULL, TDF_IPA,
    0, 0, 0, 0, 0, false, false},
-  {".tu", "translation-unit", NULL, NULL, NULL, NULL, NULL, TDF_TREE,
-   0, 0, 0, 0, 1, false, false},
   {".class", "class-hierarchy", NULL, NULL, NULL, NULL, NULL, TDF_TREE,
    0, 0, 0, 0, 2, false, false},
   {".original", "tree-original", NULL, NULL, NULL, NULL, NULL, TDF_TREE,
@@ -67,7 +66,7 @@  static struct dump_file_info dump_files[
    0, 0, 0, 0, 4, false, false},
   {".nested", "tree-nested", NULL, NULL, NULL, NULL, NULL, TDF_TREE,
    0, 0, 0, 0, 5, false, false},
-#define FIRST_AUTO_NUMBERED_DUMP 6
+#define FIRST_AUTO_NUMBERED_DUMP 5
 
   {NULL, "tree-all", NULL, NULL, NULL, NULL, NULL, TDF_TREE,
    0, 0, 0, 0, 0, false, false},
@@ -982,6 +981,22 @@  dump_basic_block (int dump_kind, basic_b
     dump_bb (alt_dump_file, bb, indent, TDF_DETAILS);
 }
 
+/* Dump FUNCTION_DECL FN as tree dump PHASE.  */
+
+void
+dump_function (int phase, tree fn)
+{
+  FILE *stream;
+  int flags;
+
+  stream = dump_begin (phase, &flags);
+  if (stream)
+    {
+      dump_function_to_file (fn, stream, flags);
+      dump_end (phase, stream);
+    }
+}
+
 /* Print information from the combine pass on dump_file.  */
 
 void
Index: dumpfile.h
===================================================================
--- dumpfile.h	(revision 247784)
+++ dumpfile.h	(working copy)
@@ -30,7 +30,6 @@  enum tree_dump_index
   TDI_cgraph,                   /* dump function call graph.  */
   TDI_inheritance,              /* dump type inheritance graph.  */
   TDI_clones,			/* dump IPA cloning decisions.  */
-  TDI_tu,			/* dump the whole translation unit.  */
   TDI_class,			/* dump class hierarchy.  */
   TDI_original,			/* dump each function before optimizing it */
   TDI_generic,			/* dump each function after genericizing it */
@@ -138,6 +137,7 @@  extern const char *dump_flag_name (int);
 extern void dump_printf (int, const char *, ...) ATTRIBUTE_PRINTF_2;
 extern void dump_printf_loc (int, source_location,
                              const char *, ...) ATTRIBUTE_PRINTF_3;
+extern void dump_function (int phase, tree fn);
 extern void dump_basic_block (int, basic_block, int);
 extern void dump_generic_expr_loc (int, source_location, int, tree);
 extern void dump_generic_expr (int, int, tree);
@@ -146,9 +146,6 @@  extern void dump_gimple_stmt (int, int,
 extern void print_combine_total_stats (void);
 extern bool enable_rtl_dump_file (void);
 
-/* In tree-dump.c  */
-extern void dump_node (const_tree, int, FILE *);
-
 /* In combine.c  */
 extern void dump_combine_total_stats (FILE *);
 /* In cfghooks.c  */
Index: fortran/trans-decl.c
===================================================================
--- fortran/trans-decl.c	(revision 247784)
+++ fortran/trans-decl.c	(working copy)
@@ -35,7 +35,7 @@  along with GCC; see the file COPYING3.
 #include "stor-layout.h"
 #include "varasm.h"
 #include "attribs.h"
-#include "tree-dump.h"
+#include "dumpfile.h"
 #include "toplev.h"	/* For announce_function.  */
 #include "debug.h"
 #include "constructor.h"
Index: gimplify.c
===================================================================
--- gimplify.c	(revision 247784)
+++ gimplify.c	(working copy)
@@ -56,7 +56,7 @@  along with GCC; see the file COPYING3.
 #include "gimple-low.h"
 #include "cilk.h"
 #include "gomp-constants.h"
-#include "tree-dump.h"
+#include "splay-tree.h"
 #include "gimple-walk.h"
 #include "langhooks-def.h"	/* FIXME: for lhd_set_decl_assembler_name */
 #include "builtins.h"
Index: graphite-poly.c
===================================================================
--- graphite-poly.c	(revision 247784)
+++ graphite-poly.c	(working copy)
@@ -39,7 +39,6 @@  along with GCC; see the file COPYING3.
 #include "tree-data-ref.h"
 #include "pretty-print.h"
 #include "gimple-pretty-print.h"
-#include "tree-dump.h"
 #include "graphite.h"
 
 /* Print to STDERR the GMP value VAL.  */
Index: langhooks-def.h
===================================================================
--- langhooks-def.h	(revision 247784)
+++ langhooks-def.h	(working copy)
@@ -147,19 +147,8 @@  extern int lhd_type_dwarf_attribute (con
 /* Hooks for tree gimplification.  */
 #define LANG_HOOKS_GIMPLIFY_EXPR lhd_gimplify_expr
 
-/* Tree dump hooks.  */
-extern bool lhd_tree_dump_dump_tree (void *, tree);
-extern int lhd_tree_dump_type_quals (const_tree);
 extern tree lhd_make_node (enum tree_code);
 
-#define LANG_HOOKS_TREE_DUMP_DUMP_TREE_FN lhd_tree_dump_dump_tree
-#define LANG_HOOKS_TREE_DUMP_TYPE_QUALS_FN lhd_tree_dump_type_quals
-
-#define LANG_HOOKS_TREE_DUMP_INITIALIZER { \
-  LANG_HOOKS_TREE_DUMP_DUMP_TREE_FN, \
-  LANG_HOOKS_TREE_DUMP_TYPE_QUALS_FN \
-}
-
 /* Types hooks.  There are no reasonable defaults for most of them,
    so we create a compile-time error instead.  */
 extern tree lhd_unit_size_without_reusable_padding (tree);
@@ -319,7 +308,6 @@  extern void lhd_end_section (void);
   LANG_HOOKS_COMMON_ATTRIBUTE_TABLE, \
   LANG_HOOKS_FORMAT_ATTRIBUTE_TABLE, \
   LANG_HOOKS_TREE_INLINING_INITIALIZER, \
-  LANG_HOOKS_TREE_DUMP_INITIALIZER, \
   LANG_HOOKS_DECLS, \
   LANG_HOOKS_FOR_TYPES_INITIALIZER, \
   LANG_HOOKS_LTO, \
Index: langhooks.c
===================================================================
--- langhooks.c	(revision 247784)
+++ langhooks.c	(working copy)
@@ -236,25 +236,6 @@  lhd_types_compatible_p (tree x, tree y)
   return TYPE_MAIN_VARIANT (x) == TYPE_MAIN_VARIANT (y);
 }
 
-/* lang_hooks.tree_dump.dump_tree:  Dump language-specific parts of tree
-   nodes.  Returns nonzero if it does not want the usual dumping of the
-   second argument.  */
-
-bool
-lhd_tree_dump_dump_tree (void *di ATTRIBUTE_UNUSED, tree t ATTRIBUTE_UNUSED)
-{
-  return false;
-}
-
-/* lang_hooks.tree_dump.type_qual:  Determine type qualifiers in a
-   language-specific way.  */
-
-int
-lhd_tree_dump_type_quals (const_tree t)
-{
-  return TYPE_QUALS (t);
-}
-
 /* lang_hooks.gimplify_expr re-writes *EXPR_P into GIMPLE form.  */
 
 int
Index: langhooks.h
===================================================================
--- langhooks.h	(revision 247784)
+++ langhooks.h	(working copy)
@@ -44,18 +44,6 @@  struct lang_hooks_for_tree_inlining
   bool (*var_mod_type_p) (tree, tree);
 };
 
-/* The following hooks are used by tree-dump.c.  */
-
-struct lang_hooks_for_tree_dump
-{
-  /* Dump language-specific parts of tree nodes.  Returns nonzero if it
-     does not want the usual dumping of the second argument.  */
-  bool (*dump_tree) (void *, tree);
-
-  /* Determine type qualifiers in a language-specific way.  */
-  int (*type_quals) (const_tree);
-};
-
 /* Hooks related to types.  */
 
 struct lang_hooks_for_types
@@ -447,8 +435,6 @@  struct lang_hooks
 
   struct lang_hooks_for_tree_inlining tree_inlining;
 
-  struct lang_hooks_for_tree_dump tree_dump;
-
   struct lang_hooks_for_decls decls;
 
   struct lang_hooks_for_types types;
Index: print-tree.c
===================================================================
--- print-tree.c	(revision 247784)
+++ print-tree.c	(working copy)
@@ -32,7 +32,7 @@  along with GCC; see the file COPYING3.
 #include "tree-iterator.h"
 #include "gimple-pretty-print.h" /* FIXME */
 #include "tree-cfg.h"
-#include "tree-dump.h"
+#include "dumpfile.h"
 #include "print-tree.h"
 
 /* Define the hash table of nodes already seen.
Index: stor-layout.c
===================================================================
--- stor-layout.c	(revision 247784)
+++ stor-layout.c	(working copy)
@@ -38,7 +38,7 @@  along with GCC; see the file COPYING3.
 #include "print-tree.h"
 #include "langhooks.h"
 #include "tree-inline.h"
-#include "tree-dump.h"
+#include "dumpfile.h"
 #include "gimplify.h"
 #include "debug.h"
 
Index: tree-cfg.c
===================================================================
--- tree-cfg.c	(revision 247784)
+++ tree-cfg.c	(working copy)
@@ -7588,7 +7588,6 @@  dump_function_to_file (tree fndecl, FILE
 
   if (flags & TDF_RAW && !gimple_has_body_p (fndecl))
     {
-      dump_node (fndecl, TDF_SLIM | flags, file);
       current_function_decl = old_current_fndecl;
       return;
     }
Index: tree-dump.c
===================================================================
--- tree-dump.c	(revision 247784)
+++ tree-dump.c	(working copy)
@@ -1,772 +0,0 @@ 
-/* Tree-dumping functionality for intermediate representation.
-   Copyright (C) 1999-2017 Free Software Foundation, Inc.
-   Written by Mark Mitchell <mark@codesourcery.com>
-
-This file is part of GCC.
-
-GCC is free software; you can redistribute it and/or modify it under
-the terms of the GNU General Public License as published by the Free
-Software Foundation; either version 3, or (at your option) any later
-version.
-
-GCC is distributed in the hope that it will be useful, but WITHOUT ANY
-WARRANTY; without even the implied warranty of MERCHANTABILITY or
-FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-for more details.
-
-You should have received a copy of the GNU General Public License
-along with GCC; see the file COPYING3.  If not see
-<http://www.gnu.org/licenses/>.  */
-
-#include "config.h"
-#include "system.h"
-#include "coretypes.h"
-#include "tree.h"
-#include "tree-pretty-print.h"
-#include "tree-dump.h"
-#include "langhooks.h"
-#include "tree-iterator.h"
-#include "tree-cfg.h"
-
-static unsigned int queue (dump_info_p, const_tree, int);
-static void dump_index (dump_info_p, unsigned int);
-static void dequeue_and_dump (dump_info_p);
-static void dump_new_line (dump_info_p);
-static void dump_maybe_newline (dump_info_p);
-
-/* Add T to the end of the queue of nodes to dump.  Returns the index
-   assigned to T.  */
-
-static unsigned int
-queue (dump_info_p di, const_tree t, int flags)
-{
-  dump_queue_p dq;
-  dump_node_info_p dni;
-  unsigned int index;
-
-  /* Assign the next available index to T.  */
-  index = ++di->index;
-
-  /* Obtain a new queue node.  */
-  if (di->free_list)
-    {
-      dq = di->free_list;
-      di->free_list = dq->next;
-    }
-  else
-    dq = XNEW (struct dump_queue);
-
-  /* Create a new entry in the splay-tree.  */
-  dni = XNEW (struct dump_node_info);
-  dni->index = index;
-  dni->binfo_p = ((flags & DUMP_BINFO) != 0);
-  dq->node = splay_tree_insert (di->nodes, (splay_tree_key) t,
-				(splay_tree_value) dni);
-
-  /* Add it to the end of the queue.  */
-  dq->next = 0;
-  if (!di->queue_end)
-    di->queue = dq;
-  else
-    di->queue_end->next = dq;
-  di->queue_end = dq;
-
-  /* Return the index.  */
-  return index;
-}
-
-static void
-dump_index (dump_info_p di, unsigned int index)
-{
-  fprintf (di->stream, "@%-6u ", index);
-  di->column += 8;
-}
-
-/* If T has not already been output, queue it for subsequent output.
-   FIELD is a string to print before printing the index.  Then, the
-   index of T is printed.  */
-
-void
-queue_and_dump_index (dump_info_p di, const char *field, const_tree t, int flags)
-{
-  unsigned int index;
-  splay_tree_node n;
-
-  /* If there's no node, just return.  This makes for fewer checks in
-     our callers.  */
-  if (!t)
-    return;
-
-  /* See if we've already queued or dumped this node.  */
-  n = splay_tree_lookup (di->nodes, (splay_tree_key) t);
-  if (n)
-    index = ((dump_node_info_p) n->value)->index;
-  else
-    /* If we haven't, add it to the queue.  */
-    index = queue (di, t, flags);
-
-  /* Print the index of the node.  */
-  dump_maybe_newline (di);
-  fprintf (di->stream, "%-4s: ", field);
-  di->column += 6;
-  dump_index (di, index);
-}
-
-/* Dump the type of T.  */
-
-void
-queue_and_dump_type (dump_info_p di, const_tree t)
-{
-  queue_and_dump_index (di, "type", TREE_TYPE (t), DUMP_NONE);
-}
-
-/* Dump column control */
-#define SOL_COLUMN 25		/* Start of line column.  */
-#define EOL_COLUMN 55		/* End of line column.  */
-#define COLUMN_ALIGNMENT 15	/* Alignment.  */
-
-/* Insert a new line in the dump output, and indent to an appropriate
-   place to start printing more fields.  */
-
-static void
-dump_new_line (dump_info_p di)
-{
-  fprintf (di->stream, "\n%*s", SOL_COLUMN, "");
-  di->column = SOL_COLUMN;
-}
-
-/* If necessary, insert a new line.  */
-
-static void
-dump_maybe_newline (dump_info_p di)
-{
-  int extra;
-
-  /* See if we need a new line.  */
-  if (di->column > EOL_COLUMN)
-    dump_new_line (di);
-  /* See if we need any padding.  */
-  else if ((extra = (di->column - SOL_COLUMN) % COLUMN_ALIGNMENT) != 0)
-    {
-      fprintf (di->stream, "%*s", COLUMN_ALIGNMENT - extra, "");
-      di->column += COLUMN_ALIGNMENT - extra;
-    }
-}
-
-/* Dump FUNCTION_DECL FN as tree dump PHASE.  */
-
-void
-dump_function (int phase, tree fn)
-{
-  FILE *stream;
-  int flags;
-
-  stream = dump_begin (phase, &flags);
-  if (stream)
-    {
-      dump_function_to_file (fn, stream, flags);
-      dump_end (phase, stream);
-    }
-}
-
-/* Dump pointer PTR using FIELD to identify it.  */
-
-void
-dump_pointer (dump_info_p di, const char *field, void *ptr)
-{
-  dump_maybe_newline (di);
-  fprintf (di->stream, "%-4s: %-8" HOST_WIDE_INT_PRINT "x ", field,
-	   (unsigned HOST_WIDE_INT) (uintptr_t) ptr);
-  di->column += 15;
-}
-
-/* Dump integer I using FIELD to identify it.  */
-
-void
-dump_int (dump_info_p di, const char *field, int i)
-{
-  dump_maybe_newline (di);
-  fprintf (di->stream, "%-4s: %-7d ", field, i);
-  di->column += 14;
-}
-
-/* Dump the floating point value R, using FIELD to identify it.  */
-
-static void
-dump_real (dump_info_p di, const char *field, const REAL_VALUE_TYPE *r)
-{
-  char buf[32];
-  real_to_decimal (buf, r, sizeof (buf), 0, true);
-  dump_maybe_newline (di);
-  fprintf (di->stream, "%-4s: %s ", field, buf);
-  di->column += strlen (buf) + 7;
-}
-
-/* Dump the fixed-point value F, using FIELD to identify it.  */
-
-static void
-dump_fixed (dump_info_p di, const char *field, const FIXED_VALUE_TYPE *f)
-{
-  char buf[32];
-  fixed_to_decimal (buf, f, sizeof (buf));
-  dump_maybe_newline (di);
-  fprintf (di->stream, "%-4s: %s ", field, buf);
-  di->column += strlen (buf) + 7;
-}
-
-
-/* Dump the string S.  */
-
-void
-dump_string (dump_info_p di, const char *string)
-{
-  dump_maybe_newline (di);
-  fprintf (di->stream, "%-13s ", string);
-  if (strlen (string) > 13)
-    di->column += strlen (string) + 1;
-  else
-    di->column += 14;
-}
-
-/* Dump the string field S.  */
-
-void
-dump_string_field (dump_info_p di, const char *field, const char *string)
-{
-  dump_maybe_newline (di);
-  fprintf (di->stream, "%-4s: %-7s ", field, string);
-  if (strlen (string) > 7)
-    di->column += 6 + strlen (string) + 1;
-  else
-    di->column += 14;
-}
-
-/* Dump the next node in the queue.  */
-
-static void
-dequeue_and_dump (dump_info_p di)
-{
-  dump_queue_p dq;
-  splay_tree_node stn;
-  dump_node_info_p dni;
-  tree t;
-  unsigned int index;
-  enum tree_code code;
-  enum tree_code_class code_class;
-  const char* code_name;
-
-  /* Get the next node from the queue.  */
-  dq = di->queue;
-  stn = dq->node;
-  t = (tree) stn->key;
-  dni = (dump_node_info_p) stn->value;
-  index = dni->index;
-
-  /* Remove the node from the queue, and put it on the free list.  */
-  di->queue = dq->next;
-  if (!di->queue)
-    di->queue_end = 0;
-  dq->next = di->free_list;
-  di->free_list = dq;
-
-  /* Print the node index.  */
-  dump_index (di, index);
-  /* And the type of node this is.  */
-  if (dni->binfo_p)
-    code_name = "binfo";
-  else
-    code_name = get_tree_code_name (TREE_CODE (t));
-  fprintf (di->stream, "%-16s ", code_name);
-  di->column = 25;
-
-  /* Figure out what kind of node this is.  */
-  code = TREE_CODE (t);
-  code_class = TREE_CODE_CLASS (code);
-
-  /* Although BINFOs are TREE_VECs, we dump them specially so as to be
-     more informative.  */
-  if (dni->binfo_p)
-    {
-      unsigned ix;
-      tree base;
-      vec<tree, va_gc> *accesses = BINFO_BASE_ACCESSES (t);
-
-      dump_child ("type", BINFO_TYPE (t));
-
-      if (BINFO_VIRTUAL_P (t))
-	dump_string_field (di, "spec", "virt");
-
-      dump_int (di, "bases", BINFO_N_BASE_BINFOS (t));
-      for (ix = 0; BINFO_BASE_ITERATE (t, ix, base); ix++)
-	{
-	  tree access = (accesses ? (*accesses)[ix] : access_public_node);
-	  const char *string = NULL;
-
-	  if (access == access_public_node)
-	    string = "pub";
-	  else if (access == access_protected_node)
-	    string = "prot";
-	  else if (access == access_private_node)
-	    string = "priv";
-	  else
-	    gcc_unreachable ();
-
-	  dump_string_field (di, "accs", string);
-	  queue_and_dump_index (di, "binf", base, DUMP_BINFO);
-	}
-
-      goto done;
-    }
-
-  /* We can knock off a bunch of expression nodes in exactly the same
-     way.  */
-  if (IS_EXPR_CODE_CLASS (code_class))
-    {
-      /* If we're dumping children, dump them now.  */
-      queue_and_dump_type (di, t);
-
-      switch (code_class)
-	{
-	case tcc_unary:
-	  dump_child ("op 0", TREE_OPERAND (t, 0));
-	  break;
-
-	case tcc_binary:
-	case tcc_comparison:
-	  dump_child ("op 0", TREE_OPERAND (t, 0));
-	  dump_child ("op 1", TREE_OPERAND (t, 1));
-	  break;
-
-	case tcc_expression:
-	case tcc_reference:
-	case tcc_statement:
-	case tcc_vl_exp:
-	  /* These nodes are handled explicitly below.  */
-	  break;
-
-	default:
-	  gcc_unreachable ();
-	}
-    }
-  else if (DECL_P (t))
-    {
-      expanded_location xloc;
-      /* All declarations have names.  */
-      if (DECL_NAME (t))
-	dump_child ("name", DECL_NAME (t));
-      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));
-      /* And a source position.  */
-      xloc = expand_location (DECL_SOURCE_LOCATION (t));
-      if (xloc.file)
-	{
-	  const char *filename = lbasename (xloc.file);
-
-	  dump_maybe_newline (di);
-	  fprintf (di->stream, "srcp: %s:%-6d ", filename,
-		   xloc.line);
-	  di->column += 6 + strlen (filename) + 8;
-	}
-      /* And any declaration can be compiler-generated.  */
-      if (CODE_CONTAINS_STRUCT (TREE_CODE (t), TS_DECL_COMMON)
-	  && DECL_ARTIFICIAL (t))
-	dump_string_field (di, "note", "artificial");
-      if (DECL_CHAIN (t) && !dump_flag (di, TDF_SLIM, NULL))
-	dump_child ("chain", DECL_CHAIN (t));
-    }
-  else if (code_class == tcc_type)
-    {
-      /* All types have qualifiers.  */
-      int quals = lang_hooks.tree_dump.type_quals (t);
-
-      if (quals != TYPE_UNQUALIFIED)
-	{
-	  fprintf (di->stream, "qual: %c%c%c     ",
-		   (quals & TYPE_QUAL_CONST) ? 'c' : ' ',
-		   (quals & TYPE_QUAL_VOLATILE) ? 'v' : ' ',
-		   (quals & TYPE_QUAL_RESTRICT) ? 'r' : ' ');
-	  di->column += 14;
-	}
-
-      /* All types have associated declarations.  */
-      dump_child ("name", TYPE_NAME (t));
-
-      /* All types have a main variant.  */
-      if (TYPE_MAIN_VARIANT (t) != t)
-	dump_child ("unql", TYPE_MAIN_VARIANT (t));
-
-      /* And sizes.  */
-      dump_child ("size", TYPE_SIZE (t));
-
-      /* All types have alignments.  */
-      dump_int (di, "algn", TYPE_ALIGN (t));
-    }
-  else if (code_class == tcc_constant)
-    /* All constants can have types.  */
-    queue_and_dump_type (di, t);
-
-  /* Give the language-specific code a chance to print something.  If
-     it's completely taken care of things, don't bother printing
-     anything more ourselves.  */
-  if (lang_hooks.tree_dump.dump_tree (di, t))
-    goto done;
-
-  /* Now handle the various kinds of nodes.  */
-  switch (code)
-    {
-      int i;
-
-    case IDENTIFIER_NODE:
-      dump_string_field (di, "strg", IDENTIFIER_POINTER (t));
-      dump_int (di, "lngt", IDENTIFIER_LENGTH (t));
-      break;
-
-    case TREE_LIST:
-      dump_child ("purp", TREE_PURPOSE (t));
-      dump_child ("valu", TREE_VALUE (t));
-      dump_child ("chan", TREE_CHAIN (t));
-      break;
-
-    case STATEMENT_LIST:
-      {
-	tree_stmt_iterator it;
-	for (i = 0, it = tsi_start (t); !tsi_end_p (it); tsi_next (&it), i++)
-	  {
-	    char buffer[32];
-	    sprintf (buffer, "%u", i);
-	    dump_child (buffer, tsi_stmt (it));
-	  }
-      }
-      break;
-
-    case TREE_VEC:
-      dump_int (di, "lngt", TREE_VEC_LENGTH (t));
-      for (i = 0; i < TREE_VEC_LENGTH (t); ++i)
-	{
-	  char buffer[32];
-	  sprintf (buffer, "%u", i);
-	  dump_child (buffer, TREE_VEC_ELT (t, i));
-	}
-      break;
-
-    case INTEGER_TYPE:
-    case ENUMERAL_TYPE:
-      dump_int (di, "prec", TYPE_PRECISION (t));
-      dump_string_field (di, "sign", TYPE_UNSIGNED (t) ? "unsigned": "signed");
-      dump_child ("min", TYPE_MIN_VALUE (t));
-      dump_child ("max", TYPE_MAX_VALUE (t));
-
-      if (code == ENUMERAL_TYPE)
-	dump_child ("csts", TYPE_VALUES (t));
-      break;
-
-    case REAL_TYPE:
-      dump_int (di, "prec", TYPE_PRECISION (t));
-      break;
-
-    case FIXED_POINT_TYPE:
-      dump_int (di, "prec", TYPE_PRECISION (t));
-      dump_string_field (di, "sign", TYPE_UNSIGNED (t) ? "unsigned": "signed");
-      dump_string_field (di, "saturating",
-			 TYPE_SATURATING (t) ? "saturating": "non-saturating");
-      break;
-
-    case POINTER_TYPE:
-      dump_child ("ptd", TREE_TYPE (t));
-      break;
-
-    case REFERENCE_TYPE:
-      dump_child ("refd", TREE_TYPE (t));
-      break;
-
-    case METHOD_TYPE:
-      dump_child ("clas", TYPE_METHOD_BASETYPE (t));
-      /* Fall through.  */
-
-    case FUNCTION_TYPE:
-      dump_child ("retn", TREE_TYPE (t));
-      dump_child ("prms", TYPE_ARG_TYPES (t));
-      break;
-
-    case ARRAY_TYPE:
-      dump_child ("elts", TREE_TYPE (t));
-      dump_child ("domn", TYPE_DOMAIN (t));
-      break;
-
-    case RECORD_TYPE:
-    case UNION_TYPE:
-      if (TREE_CODE (t) == RECORD_TYPE)
-	dump_string_field (di, "tag", "struct");
-      else
-	dump_string_field (di, "tag", "union");
-
-      dump_child ("flds", TYPE_FIELDS (t));
-      dump_child ("fncs", TYPE_METHODS (t));
-      queue_and_dump_index (di, "binf", TYPE_BINFO (t),
-			    DUMP_BINFO);
-      break;
-
-    case CONST_DECL:
-      dump_child ("cnst", DECL_INITIAL (t));
-      break;
-
-    case DEBUG_EXPR_DECL:
-      dump_int (di, "-uid", DEBUG_TEMP_UID (t));
-      /* Fall through.  */
-
-    case VAR_DECL:
-    case PARM_DECL:
-    case FIELD_DECL:
-    case RESULT_DECL:
-      if (TREE_CODE (t) == PARM_DECL)
-	dump_child ("argt", DECL_ARG_TYPE (t));
-      else
-	dump_child ("init", DECL_INITIAL (t));
-      dump_child ("size", DECL_SIZE (t));
-      dump_int (di, "algn", DECL_ALIGN (t));
-
-      if (TREE_CODE (t) == FIELD_DECL)
-	{
-	  if (DECL_FIELD_OFFSET (t))
-	    dump_child ("bpos", bit_position (t));
-	}
-      else if (VAR_P (t) || TREE_CODE (t) == PARM_DECL)
-	{
-	  dump_int (di, "used", TREE_USED (t));
-	  if (DECL_REGISTER (t))
-	    dump_string_field (di, "spec", "register");
-	}
-      break;
-
-    case FUNCTION_DECL:
-      dump_child ("args", DECL_ARGUMENTS (t));
-      if (DECL_EXTERNAL (t))
-	dump_string_field (di, "body", "undefined");
-      if (TREE_PUBLIC (t))
-	dump_string_field (di, "link", "extern");
-      else
-	dump_string_field (di, "link", "static");
-      if (DECL_SAVED_TREE (t) && !dump_flag (di, TDF_SLIM, t))
-	dump_child ("body", DECL_SAVED_TREE (t));
-      break;
-
-    case INTEGER_CST:
-      fprintf (di->stream, "int: ");
-      print_decs (t, di->stream);
-      break;
-
-    case STRING_CST:
-      fprintf (di->stream, "strg: %-7s ", TREE_STRING_POINTER (t));
-      dump_int (di, "lngt", TREE_STRING_LENGTH (t));
-      break;
-
-    case REAL_CST:
-      dump_real (di, "valu", TREE_REAL_CST_PTR (t));
-      break;
-
-    case FIXED_CST:
-      dump_fixed (di, "valu", TREE_FIXED_CST_PTR (t));
-      break;
-
-    case TRUTH_NOT_EXPR:
-    case ADDR_EXPR:
-    case INDIRECT_REF:
-    case CLEANUP_POINT_EXPR:
-    case SAVE_EXPR:
-    case REALPART_EXPR:
-    case IMAGPART_EXPR:
-      /* These nodes are unary, but do not have code class `1'.  */
-      dump_child ("op 0", TREE_OPERAND (t, 0));
-      break;
-
-    case TRUTH_ANDIF_EXPR:
-    case TRUTH_ORIF_EXPR:
-    case INIT_EXPR:
-    case MODIFY_EXPR:
-    case COMPOUND_EXPR:
-    case PREDECREMENT_EXPR:
-    case PREINCREMENT_EXPR:
-    case POSTDECREMENT_EXPR:
-    case POSTINCREMENT_EXPR:
-      /* These nodes are binary, but do not have code class `2'.  */
-      dump_child ("op 0", TREE_OPERAND (t, 0));
-      dump_child ("op 1", TREE_OPERAND (t, 1));
-      break;
-
-    case COMPONENT_REF:
-    case BIT_FIELD_REF:
-      dump_child ("op 0", TREE_OPERAND (t, 0));
-      dump_child ("op 1", TREE_OPERAND (t, 1));
-      dump_child ("op 2", TREE_OPERAND (t, 2));
-      break;
-
-    case ARRAY_REF:
-    case ARRAY_RANGE_REF:
-      dump_child ("op 0", TREE_OPERAND (t, 0));
-      dump_child ("op 1", TREE_OPERAND (t, 1));
-      dump_child ("op 2", TREE_OPERAND (t, 2));
-      dump_child ("op 3", TREE_OPERAND (t, 3));
-      break;
-
-    case COND_EXPR:
-      dump_child ("op 0", TREE_OPERAND (t, 0));
-      dump_child ("op 1", TREE_OPERAND (t, 1));
-      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:
-      {
-	int i = 0;
-	tree arg;
-	call_expr_arg_iterator iter;
-	dump_child ("fn", CALL_EXPR_FN (t));
-	FOR_EACH_CALL_EXPR_ARG (arg, iter, t)
-	  {
-	    char buffer[32];
-	    sprintf (buffer, "%u", i);
-	    dump_child (buffer, arg);
-	    i++;
-	  }
-      }
-      break;
-
-    case CONSTRUCTOR:
-      {
-	unsigned HOST_WIDE_INT cnt;
-	tree index, value;
-	dump_int (di, "lngt", CONSTRUCTOR_NELTS (t));
-	FOR_EACH_CONSTRUCTOR_ELT (CONSTRUCTOR_ELTS (t), cnt, index, value)
-	  {
-	    dump_child ("idx", index);
-	    dump_child ("val", value);
-	  }
-      }
-      break;
-
-    case BIND_EXPR:
-      dump_child ("vars", TREE_OPERAND (t, 0));
-      dump_child ("body", TREE_OPERAND (t, 1));
-      break;
-
-    case LOOP_EXPR:
-      dump_child ("body", TREE_OPERAND (t, 0));
-      break;
-
-    case EXIT_EXPR:
-      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));
-      dump_child ("clnp", TREE_OPERAND (t, 2));
-      /* There really are two possible places the initializer can be.
-	 After RTL expansion, the second operand is moved to the
-	 position of the fourth operand, and the second operand
-	 becomes NULL.  */
-      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;
-    case OMP_CLAUSE:
-      {
-	int i;
-	fprintf (di->stream, "%s\n", omp_clause_code_name[OMP_CLAUSE_CODE (t)]);
-	for (i = 0; i < omp_clause_num_ops[OMP_CLAUSE_CODE (t)]; i++)
-	  dump_child ("op: ", OMP_CLAUSE_OPERAND (t, i));
-      }
-      break;
-    default:
-      /* There are no additional fields to print.  */
-      break;
-    }
-
- done:
-  if (dump_flag (di, TDF_ADDRESS, NULL))
-    dump_pointer (di, "addr", (void *)t);
-
-  /* Terminate the line.  */
-  fprintf (di->stream, "\n");
-}
-
-/* Return nonzero if FLAG has been specified for the dump, and NODE
-   is not the root node of the dump.  */
-
-int dump_flag (dump_info_p di, int flag, const_tree node)
-{
-  return (di->flags & flag) && (node != di->node);
-}
-
-/* Dump T, and all its children, on STREAM.  */
-
-void
-dump_node (const_tree t, int flags, FILE *stream)
-{
-  struct dump_info di;
-  dump_queue_p dq;
-  dump_queue_p next_dq;
-
-  /* Initialize the dump-information structure.  */
-  di.stream = stream;
-  di.index = 0;
-  di.column = 0;
-  di.queue = 0;
-  di.queue_end = 0;
-  di.free_list = 0;
-  di.flags = flags;
-  di.node = t;
-  di.nodes = splay_tree_new (splay_tree_compare_pointers, 0,
-			     (splay_tree_delete_value_fn) &free);
-
-  /* Queue up the first node.  */
-  queue (&di, t, DUMP_NONE);
-
-  /* Until the queue is empty, keep dumping nodes.  */
-  while (di.queue)
-    dequeue_and_dump (&di);
-
-  /* Now, clean up.  */
-  for (dq = di.free_list; dq; dq = next_dq)
-    {
-      next_dq = dq->next;
-      free (dq);
-    }
-  splay_tree_delete (di.nodes);
-}
Index: tree-dump.h
===================================================================
--- tree-dump.h	(revision 247784)
+++ tree-dump.h	(working copy)
@@ -1,93 +0,0 @@ 
-/* Tree-dumping functionality for intermediate representation.
-   Copyright (C) 1999-2017 Free Software Foundation, Inc.
-   Written by Mark Mitchell <mark@codesourcery.com>
-
-This file is part of GCC.
-
-GCC is free software; you can redistribute it and/or modify it under
-the terms of the GNU General Public License as published by the Free
-Software Foundation; either version 3, or (at your option) any later
-version.
-
-GCC is distributed in the hope that it will be useful, but WITHOUT ANY
-WARRANTY; without even the implied warranty of MERCHANTABILITY or
-FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-for more details.
-
-You should have received a copy of the GNU General Public License
-along with GCC; see the file COPYING3.  If not see
-<http://www.gnu.org/licenses/>.  */
-
-#ifndef GCC_TREE_DUMP_H
-#define GCC_TREE_DUMP_H
-
-#include "splay-tree.h"
-#include "dumpfile.h"
-
-typedef struct dump_info *dump_info_p;
-
-/* Flags used with queue functions.  */
-#define DUMP_NONE     0
-#define DUMP_BINFO    1
-
-/* Information about a node to be dumped.  */
-
-typedef struct dump_node_info
-{
-  /* The index for the node.  */
-  unsigned int index;
-  /* Nonzero if the node is a binfo.  */
-  unsigned int binfo_p : 1;
-} *dump_node_info_p;
-
-/* A dump_queue is a link in the queue of things to be dumped.  */
-
-typedef struct dump_queue
-{
-  /* The queued tree node.  */
-  splay_tree_node node;
-  /* The next node in the queue.  */
-  struct dump_queue *next;
-} *dump_queue_p;
-
-/* A dump_info gives information about how we should perform the dump
-   and about the current state of the dump.  */
-
-struct dump_info
-{
-  /* The stream on which to dump the information.  */
-  FILE *stream;
-  /* The original node.  */
-  const_tree node;
-  /* User flags.  */
-  int flags;
-  /* The next unused node index.  */
-  unsigned int index;
-  /* The next column.  */
-  unsigned int column;
-  /* The first node in the queue of nodes to be written out.  */
-  dump_queue_p queue;
-  /* The last node in the queue.  */
-  dump_queue_p queue_end;
-  /* Free queue nodes.  */
-  dump_queue_p free_list;
-  /* The tree nodes which we have already written out.  The
-     keys are the addresses of the nodes; the values are the integer
-     indices we assigned them.  */
-  splay_tree nodes;
-};
-
-/* Dump the CHILD and its children.  */
-#define dump_child(field, child) \
-  queue_and_dump_index (di, field, child, DUMP_NONE)
-
-extern void dump_pointer (dump_info_p, const char *, void *);
-extern void dump_int (dump_info_p, const char *, int);
-extern void dump_string (dump_info_p, const char *);
-extern void dump_string_field (dump_info_p, const char *, const char *);
-extern void queue_and_dump_index (dump_info_p, const char *, const_tree, int);
-extern void queue_and_dump_type (dump_info_p, const_tree);
-extern void dump_function (int, tree);
-extern int dump_flag (dump_info_p, int, const_tree);
-
-#endif /* ! GCC_TREE_DUMP_H */
Index: tree-nested.c
===================================================================
--- tree-nested.c	(revision 247784)
+++ tree-nested.c	(working copy)
@@ -31,7 +31,7 @@ 
 #include "cgraph.h"
 #include "fold-const.h"
 #include "stor-layout.h"
-#include "tree-dump.h"
+#include "dumpfile.h"
 #include "tree-inline.h"
 #include "gimplify.h"
 #include "gimple-iterator.h"