xref: /dflybsd-src/contrib/gcc-4.7/gcc/cp/dump.c (revision 04febcfb30580676d3e95f58a16c5137ee478b32)
1*e4b17023SJohn Marino /* Tree-dumping functionality for intermediate representation.
2*e4b17023SJohn Marino    Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2007, 2008, 2010
3*e4b17023SJohn Marino    Free Software Foundation, Inc.
4*e4b17023SJohn Marino    Written by Mark Mitchell <mark@codesourcery.com>
5*e4b17023SJohn Marino 
6*e4b17023SJohn Marino This file is part of GCC.
7*e4b17023SJohn Marino 
8*e4b17023SJohn Marino GCC is free software; you can redistribute it and/or modify
9*e4b17023SJohn Marino it under the terms of the GNU General Public License as published by
10*e4b17023SJohn Marino the Free Software Foundation; either version 3, or (at your option)
11*e4b17023SJohn Marino any later version.
12*e4b17023SJohn Marino 
13*e4b17023SJohn Marino GCC is distributed in the hope that it will be useful,
14*e4b17023SJohn Marino but WITHOUT ANY WARRANTY; without even the implied warranty of
15*e4b17023SJohn Marino MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16*e4b17023SJohn Marino GNU General Public License for more details.
17*e4b17023SJohn Marino 
18*e4b17023SJohn Marino You should have received a copy of the GNU General Public License
19*e4b17023SJohn Marino along with GCC; see the file COPYING3.  If not see
20*e4b17023SJohn Marino <http://www.gnu.org/licenses/>.  */
21*e4b17023SJohn Marino 
22*e4b17023SJohn Marino #include "config.h"
23*e4b17023SJohn Marino #include "system.h"
24*e4b17023SJohn Marino #include "coretypes.h"
25*e4b17023SJohn Marino #include "tm.h"
26*e4b17023SJohn Marino #include "tree.h"
27*e4b17023SJohn Marino #include "cp-tree.h"
28*e4b17023SJohn Marino #include "tree-dump.h"
29*e4b17023SJohn Marino 
30*e4b17023SJohn Marino static void dump_access (dump_info_p, tree);
31*e4b17023SJohn Marino 
32*e4b17023SJohn Marino static void dump_op (dump_info_p, tree);
33*e4b17023SJohn Marino 
34*e4b17023SJohn Marino /* Dump a representation of the accessibility information associated
35*e4b17023SJohn Marino    with T.  */
36*e4b17023SJohn Marino 
37*e4b17023SJohn Marino static void
dump_access(dump_info_p di,tree t)38*e4b17023SJohn Marino dump_access (dump_info_p di, tree t)
39*e4b17023SJohn Marino {
40*e4b17023SJohn Marino   if (TREE_PROTECTED(t))
41*e4b17023SJohn Marino     dump_string_field (di, "accs", "prot");
42*e4b17023SJohn Marino   else if (TREE_PRIVATE(t))
43*e4b17023SJohn Marino     dump_string_field (di, "accs", "priv");
44*e4b17023SJohn Marino   else
45*e4b17023SJohn Marino     dump_string_field (di, "accs", "pub");
46*e4b17023SJohn Marino }
47*e4b17023SJohn Marino 
48*e4b17023SJohn Marino /* Dump a representation of the specific operator for an overloaded
49*e4b17023SJohn Marino    operator associated with node t.  */
50*e4b17023SJohn Marino 
51*e4b17023SJohn Marino static void
dump_op(dump_info_p di,tree t)52*e4b17023SJohn Marino dump_op (dump_info_p di, tree t)
53*e4b17023SJohn Marino {
54*e4b17023SJohn Marino   switch (DECL_OVERLOADED_OPERATOR_P (t)) {
55*e4b17023SJohn Marino     case NEW_EXPR:
56*e4b17023SJohn Marino       dump_string (di, "new");
57*e4b17023SJohn Marino       break;
58*e4b17023SJohn Marino     case VEC_NEW_EXPR:
59*e4b17023SJohn Marino       dump_string (di, "vecnew");
60*e4b17023SJohn Marino       break;
61*e4b17023SJohn Marino     case DELETE_EXPR:
62*e4b17023SJohn Marino       dump_string (di, "delete");
63*e4b17023SJohn Marino       break;
64*e4b17023SJohn Marino     case VEC_DELETE_EXPR:
65*e4b17023SJohn Marino       dump_string (di, "vecdelete");
66*e4b17023SJohn Marino       break;
67*e4b17023SJohn Marino     case UNARY_PLUS_EXPR:
68*e4b17023SJohn Marino       dump_string (di, "pos");
69*e4b17023SJohn Marino       break;
70*e4b17023SJohn Marino     case NEGATE_EXPR:
71*e4b17023SJohn Marino       dump_string (di, "neg");
72*e4b17023SJohn Marino       break;
73*e4b17023SJohn Marino     case ADDR_EXPR:
74*e4b17023SJohn Marino       dump_string (di, "addr");
75*e4b17023SJohn Marino       break;
76*e4b17023SJohn Marino     case INDIRECT_REF:
77*e4b17023SJohn Marino       dump_string(di, "deref");
78*e4b17023SJohn Marino       break;
79*e4b17023SJohn Marino     case BIT_NOT_EXPR:
80*e4b17023SJohn Marino       dump_string(di, "not");
81*e4b17023SJohn Marino       break;
82*e4b17023SJohn Marino     case TRUTH_NOT_EXPR:
83*e4b17023SJohn Marino       dump_string(di, "lnot");
84*e4b17023SJohn Marino       break;
85*e4b17023SJohn Marino     case PREINCREMENT_EXPR:
86*e4b17023SJohn Marino       dump_string(di, "preinc");
87*e4b17023SJohn Marino       break;
88*e4b17023SJohn Marino     case PREDECREMENT_EXPR:
89*e4b17023SJohn Marino       dump_string(di, "predec");
90*e4b17023SJohn Marino       break;
91*e4b17023SJohn Marino     case PLUS_EXPR:
92*e4b17023SJohn Marino       if (DECL_ASSIGNMENT_OPERATOR_P (t))
93*e4b17023SJohn Marino 	dump_string (di, "plusassign");
94*e4b17023SJohn Marino       else
95*e4b17023SJohn Marino 	dump_string(di, "plus");
96*e4b17023SJohn Marino       break;
97*e4b17023SJohn Marino     case MINUS_EXPR:
98*e4b17023SJohn Marino       if (DECL_ASSIGNMENT_OPERATOR_P (t))
99*e4b17023SJohn Marino 	dump_string (di, "minusassign");
100*e4b17023SJohn Marino       else
101*e4b17023SJohn Marino 	dump_string(di, "minus");
102*e4b17023SJohn Marino       break;
103*e4b17023SJohn Marino     case MULT_EXPR:
104*e4b17023SJohn Marino       if (DECL_ASSIGNMENT_OPERATOR_P (t))
105*e4b17023SJohn Marino 	dump_string (di, "multassign");
106*e4b17023SJohn Marino       else
107*e4b17023SJohn Marino 	dump_string (di, "mult");
108*e4b17023SJohn Marino       break;
109*e4b17023SJohn Marino     case TRUNC_DIV_EXPR:
110*e4b17023SJohn Marino       if (DECL_ASSIGNMENT_OPERATOR_P (t))
111*e4b17023SJohn Marino 	dump_string (di, "divassign");
112*e4b17023SJohn Marino       else
113*e4b17023SJohn Marino 	dump_string (di, "div");
114*e4b17023SJohn Marino       break;
115*e4b17023SJohn Marino     case TRUNC_MOD_EXPR:
116*e4b17023SJohn Marino       if (DECL_ASSIGNMENT_OPERATOR_P (t))
117*e4b17023SJohn Marino 	 dump_string (di, "modassign");
118*e4b17023SJohn Marino       else
119*e4b17023SJohn Marino 	dump_string (di, "mod");
120*e4b17023SJohn Marino       break;
121*e4b17023SJohn Marino     case BIT_AND_EXPR:
122*e4b17023SJohn Marino       if (DECL_ASSIGNMENT_OPERATOR_P (t))
123*e4b17023SJohn Marino 	dump_string (di, "andassign");
124*e4b17023SJohn Marino       else
125*e4b17023SJohn Marino 	dump_string (di, "and");
126*e4b17023SJohn Marino       break;
127*e4b17023SJohn Marino     case BIT_IOR_EXPR:
128*e4b17023SJohn Marino       if (DECL_ASSIGNMENT_OPERATOR_P (t))
129*e4b17023SJohn Marino 	dump_string (di, "orassign");
130*e4b17023SJohn Marino       else
131*e4b17023SJohn Marino 	dump_string (di, "or");
132*e4b17023SJohn Marino       break;
133*e4b17023SJohn Marino     case BIT_XOR_EXPR:
134*e4b17023SJohn Marino       if (DECL_ASSIGNMENT_OPERATOR_P (t))
135*e4b17023SJohn Marino 	dump_string (di, "xorassign");
136*e4b17023SJohn Marino       else
137*e4b17023SJohn Marino 	dump_string (di, "xor");
138*e4b17023SJohn Marino       break;
139*e4b17023SJohn Marino     case LSHIFT_EXPR:
140*e4b17023SJohn Marino       if (DECL_ASSIGNMENT_OPERATOR_P (t))
141*e4b17023SJohn Marino 	dump_string (di, "lshiftassign");
142*e4b17023SJohn Marino       else
143*e4b17023SJohn Marino 	dump_string (di, "lshift");
144*e4b17023SJohn Marino       break;
145*e4b17023SJohn Marino     case RSHIFT_EXPR:
146*e4b17023SJohn Marino       if (DECL_ASSIGNMENT_OPERATOR_P (t))
147*e4b17023SJohn Marino 	dump_string (di, "rshiftassign");
148*e4b17023SJohn Marino       else
149*e4b17023SJohn Marino 	dump_string (di, "rshift");
150*e4b17023SJohn Marino       break;
151*e4b17023SJohn Marino     case EQ_EXPR:
152*e4b17023SJohn Marino       dump_string (di, "eq");
153*e4b17023SJohn Marino       break;
154*e4b17023SJohn Marino     case NE_EXPR:
155*e4b17023SJohn Marino       dump_string (di, "ne");
156*e4b17023SJohn Marino       break;
157*e4b17023SJohn Marino     case LT_EXPR:
158*e4b17023SJohn Marino       dump_string (di, "lt");
159*e4b17023SJohn Marino       break;
160*e4b17023SJohn Marino     case GT_EXPR:
161*e4b17023SJohn Marino       dump_string (di, "gt");
162*e4b17023SJohn Marino       break;
163*e4b17023SJohn Marino     case LE_EXPR:
164*e4b17023SJohn Marino       dump_string (di, "le");
165*e4b17023SJohn Marino       break;
166*e4b17023SJohn Marino     case GE_EXPR:
167*e4b17023SJohn Marino       dump_string (di, "ge");
168*e4b17023SJohn Marino       break;
169*e4b17023SJohn Marino     case TRUTH_ANDIF_EXPR:
170*e4b17023SJohn Marino       dump_string (di, "land");
171*e4b17023SJohn Marino       break;
172*e4b17023SJohn Marino     case TRUTH_ORIF_EXPR:
173*e4b17023SJohn Marino       dump_string (di, "lor");
174*e4b17023SJohn Marino       break;
175*e4b17023SJohn Marino     case COMPOUND_EXPR:
176*e4b17023SJohn Marino       dump_string (di, "compound");
177*e4b17023SJohn Marino       break;
178*e4b17023SJohn Marino     case MEMBER_REF:
179*e4b17023SJohn Marino       dump_string (di, "memref");
180*e4b17023SJohn Marino       break;
181*e4b17023SJohn Marino     case COMPONENT_REF:
182*e4b17023SJohn Marino       dump_string (di, "ref");
183*e4b17023SJohn Marino       break;
184*e4b17023SJohn Marino     case ARRAY_REF:
185*e4b17023SJohn Marino       dump_string (di, "subs");
186*e4b17023SJohn Marino       break;
187*e4b17023SJohn Marino     case POSTINCREMENT_EXPR:
188*e4b17023SJohn Marino       dump_string (di, "postinc");
189*e4b17023SJohn Marino       break;
190*e4b17023SJohn Marino     case POSTDECREMENT_EXPR:
191*e4b17023SJohn Marino       dump_string (di, "postdec");
192*e4b17023SJohn Marino       break;
193*e4b17023SJohn Marino     case CALL_EXPR:
194*e4b17023SJohn Marino       dump_string (di, "call");
195*e4b17023SJohn Marino       break;
196*e4b17023SJohn Marino     case NOP_EXPR:
197*e4b17023SJohn Marino       if (DECL_ASSIGNMENT_OPERATOR_P (t))
198*e4b17023SJohn Marino 	dump_string (di, "assign");
199*e4b17023SJohn Marino       break;
200*e4b17023SJohn Marino     default:
201*e4b17023SJohn Marino       break;
202*e4b17023SJohn Marino   }
203*e4b17023SJohn Marino }
204*e4b17023SJohn Marino 
205*e4b17023SJohn Marino bool
cp_dump_tree(void * dump_info,tree t)206*e4b17023SJohn Marino cp_dump_tree (void* dump_info, tree t)
207*e4b17023SJohn Marino {
208*e4b17023SJohn Marino   enum tree_code code;
209*e4b17023SJohn Marino   dump_info_p di = (dump_info_p) dump_info;
210*e4b17023SJohn Marino 
211*e4b17023SJohn Marino   /* Figure out what kind of node this is.  */
212*e4b17023SJohn Marino   code = TREE_CODE (t);
213*e4b17023SJohn Marino 
214*e4b17023SJohn Marino   if (DECL_P (t))
215*e4b17023SJohn Marino     {
216*e4b17023SJohn Marino       if (DECL_LANG_SPECIFIC (t) && DECL_LANGUAGE (t) != lang_cplusplus)
217*e4b17023SJohn Marino 	dump_string_field (di, "lang", language_to_string (DECL_LANGUAGE (t)));
218*e4b17023SJohn Marino     }
219*e4b17023SJohn Marino 
220*e4b17023SJohn Marino   switch (code)
221*e4b17023SJohn Marino     {
222*e4b17023SJohn Marino     case IDENTIFIER_NODE:
223*e4b17023SJohn Marino       if (IDENTIFIER_OPNAME_P (t))
224*e4b17023SJohn Marino 	{
225*e4b17023SJohn Marino 	  dump_string_field (di, "note", "operator");
226*e4b17023SJohn Marino 	  return true;
227*e4b17023SJohn Marino 	}
228*e4b17023SJohn Marino       else if (IDENTIFIER_TYPENAME_P (t))
229*e4b17023SJohn Marino 	{
230*e4b17023SJohn Marino 	  dump_child ("tynm", TREE_TYPE (t));
231*e4b17023SJohn Marino 	  return true;
232*e4b17023SJohn Marino 	}
233*e4b17023SJohn Marino       break;
234*e4b17023SJohn Marino 
235*e4b17023SJohn Marino     case OFFSET_TYPE:
236*e4b17023SJohn Marino       dump_string_field (di, "note", "ptrmem");
237*e4b17023SJohn Marino       dump_child ("ptd", TYPE_PTRMEM_POINTED_TO_TYPE (t));
238*e4b17023SJohn Marino       dump_child ("cls", TYPE_PTRMEM_CLASS_TYPE (t));
239*e4b17023SJohn Marino       return true;
240*e4b17023SJohn Marino 
241*e4b17023SJohn Marino     case RECORD_TYPE:
242*e4b17023SJohn Marino       if (TYPE_PTRMEMFUNC_P (t))
243*e4b17023SJohn Marino 	{
244*e4b17023SJohn Marino 	  dump_string_field (di, "note", "ptrmem");
245*e4b17023SJohn Marino 	  dump_child ("ptd", TYPE_PTRMEM_POINTED_TO_TYPE (t));
246*e4b17023SJohn Marino 	  dump_child ("cls", TYPE_PTRMEM_CLASS_TYPE (t));
247*e4b17023SJohn Marino 	  return true;
248*e4b17023SJohn Marino 	}
249*e4b17023SJohn Marino       /* Fall through.  */
250*e4b17023SJohn Marino 
251*e4b17023SJohn Marino     case UNION_TYPE:
252*e4b17023SJohn Marino       /* Is it a type used as a base? */
253*e4b17023SJohn Marino       if (TYPE_CONTEXT (t) && TREE_CODE (TYPE_CONTEXT (t)) == TREE_CODE (t)
254*e4b17023SJohn Marino 	  && CLASSTYPE_AS_BASE (TYPE_CONTEXT (t)) == t)
255*e4b17023SJohn Marino 	{
256*e4b17023SJohn Marino 	  dump_child ("bfld", TYPE_CONTEXT (t));
257*e4b17023SJohn Marino 	  return true;
258*e4b17023SJohn Marino 	}
259*e4b17023SJohn Marino 
260*e4b17023SJohn Marino       if (! MAYBE_CLASS_TYPE_P (t))
261*e4b17023SJohn Marino 	break;
262*e4b17023SJohn Marino 
263*e4b17023SJohn Marino       dump_child ("vfld", TYPE_VFIELD (t));
264*e4b17023SJohn Marino       if (CLASSTYPE_TEMPLATE_SPECIALIZATION(t))
265*e4b17023SJohn Marino 	dump_string(di, "spec");
266*e4b17023SJohn Marino 
267*e4b17023SJohn Marino       if (!dump_flag (di, TDF_SLIM, t) && TYPE_BINFO (t))
268*e4b17023SJohn Marino 	{
269*e4b17023SJohn Marino 	  int i;
270*e4b17023SJohn Marino 	  tree binfo;
271*e4b17023SJohn Marino 	  tree base_binfo;
272*e4b17023SJohn Marino 
273*e4b17023SJohn Marino 	  for (binfo = TYPE_BINFO (t), i = 0;
274*e4b17023SJohn Marino 	       BINFO_BASE_ITERATE (binfo, i, base_binfo); ++i)
275*e4b17023SJohn Marino 	    {
276*e4b17023SJohn Marino 	      dump_child ("base", BINFO_TYPE (base_binfo));
277*e4b17023SJohn Marino 	      if (BINFO_VIRTUAL_P (base_binfo))
278*e4b17023SJohn Marino 		dump_string_field (di, "spec", "virt");
279*e4b17023SJohn Marino 	      dump_access (di, base_binfo);
280*e4b17023SJohn Marino 	    }
281*e4b17023SJohn Marino 	}
282*e4b17023SJohn Marino       break;
283*e4b17023SJohn Marino 
284*e4b17023SJohn Marino     case FIELD_DECL:
285*e4b17023SJohn Marino       dump_access (di, t);
286*e4b17023SJohn Marino       if (DECL_MUTABLE_P (t))
287*e4b17023SJohn Marino 	dump_string_field (di, "spec", "mutable");
288*e4b17023SJohn Marino       break;
289*e4b17023SJohn Marino 
290*e4b17023SJohn Marino     case VAR_DECL:
291*e4b17023SJohn Marino       if (TREE_CODE (CP_DECL_CONTEXT (t)) == RECORD_TYPE)
292*e4b17023SJohn Marino 	dump_access (di, t);
293*e4b17023SJohn Marino       if (TREE_STATIC (t) && !TREE_PUBLIC (t))
294*e4b17023SJohn Marino 	dump_string_field (di, "link", "static");
295*e4b17023SJohn Marino       break;
296*e4b17023SJohn Marino 
297*e4b17023SJohn Marino     case FUNCTION_DECL:
298*e4b17023SJohn Marino       if (!DECL_THUNK_P (t))
299*e4b17023SJohn Marino 	{
300*e4b17023SJohn Marino 	  if (DECL_OVERLOADED_OPERATOR_P (t)) {
301*e4b17023SJohn Marino 	    dump_string_field (di, "note", "operator");
302*e4b17023SJohn Marino 	    dump_op (di, t);
303*e4b17023SJohn Marino 	  }
304*e4b17023SJohn Marino 	  if (DECL_FUNCTION_MEMBER_P (t))
305*e4b17023SJohn Marino 	    {
306*e4b17023SJohn Marino 	      dump_string_field (di, "note", "member");
307*e4b17023SJohn Marino 	      dump_access (di, t);
308*e4b17023SJohn Marino 	    }
309*e4b17023SJohn Marino 	  if (DECL_PURE_VIRTUAL_P (t))
310*e4b17023SJohn Marino 	    dump_string_field (di, "spec", "pure");
311*e4b17023SJohn Marino 	  if (DECL_VIRTUAL_P (t))
312*e4b17023SJohn Marino 	    dump_string_field (di, "spec", "virt");
313*e4b17023SJohn Marino 	  if (DECL_CONSTRUCTOR_P (t))
314*e4b17023SJohn Marino 	    dump_string_field (di, "note", "constructor");
315*e4b17023SJohn Marino 	  if (DECL_DESTRUCTOR_P (t))
316*e4b17023SJohn Marino 	    dump_string_field (di, "note", "destructor");
317*e4b17023SJohn Marino 	  if (DECL_CONV_FN_P (t))
318*e4b17023SJohn Marino 	    dump_string_field (di, "note", "conversion");
319*e4b17023SJohn Marino 	  if (DECL_GLOBAL_CTOR_P (t))
320*e4b17023SJohn Marino 	    dump_string_field (di, "note", "global init");
321*e4b17023SJohn Marino 	  if (DECL_GLOBAL_DTOR_P (t))
322*e4b17023SJohn Marino 	    dump_string_field (di, "note", "global fini");
323*e4b17023SJohn Marino 	  if (DECL_FRIEND_PSEUDO_TEMPLATE_INSTANTIATION (t))
324*e4b17023SJohn Marino 	    dump_string_field (di, "note", "pseudo tmpl");
325*e4b17023SJohn Marino 	}
326*e4b17023SJohn Marino       else
327*e4b17023SJohn Marino 	{
328*e4b17023SJohn Marino 	  tree virt = THUNK_VIRTUAL_OFFSET (t);
329*e4b17023SJohn Marino 
330*e4b17023SJohn Marino 	  dump_string_field (di, "note", "thunk");
331*e4b17023SJohn Marino 	  if (DECL_THIS_THUNK_P (t))
332*e4b17023SJohn Marino 	    dump_string_field (di, "note", "this adjusting");
333*e4b17023SJohn Marino 	  else
334*e4b17023SJohn Marino 	    {
335*e4b17023SJohn Marino 	      dump_string_field (di, "note", "result adjusting");
336*e4b17023SJohn Marino 	      if (virt)
337*e4b17023SJohn Marino 		virt = BINFO_VPTR_FIELD (virt);
338*e4b17023SJohn Marino 	    }
339*e4b17023SJohn Marino 	  dump_int (di, "fixd", THUNK_FIXED_OFFSET (t));
340*e4b17023SJohn Marino 	  if (virt)
341*e4b17023SJohn Marino 	    dump_int (di, "virt", tree_low_cst (virt, 0));
342*e4b17023SJohn Marino 	  dump_child ("fn", DECL_INITIAL (t));
343*e4b17023SJohn Marino 	}
344*e4b17023SJohn Marino       break;
345*e4b17023SJohn Marino 
346*e4b17023SJohn Marino     case NAMESPACE_DECL:
347*e4b17023SJohn Marino       if (DECL_NAMESPACE_ALIAS (t))
348*e4b17023SJohn Marino 	dump_child ("alis", DECL_NAMESPACE_ALIAS (t));
349*e4b17023SJohn Marino       else if (!dump_flag (di, TDF_SLIM, t))
350*e4b17023SJohn Marino 	dump_child ("dcls", cp_namespace_decls (t));
351*e4b17023SJohn Marino       break;
352*e4b17023SJohn Marino 
353*e4b17023SJohn Marino     case TEMPLATE_DECL:
354*e4b17023SJohn Marino       dump_child ("rslt", DECL_TEMPLATE_RESULT (t));
355*e4b17023SJohn Marino       dump_child ("inst", DECL_TEMPLATE_INSTANTIATIONS (t));
356*e4b17023SJohn Marino       dump_child ("spcs", DECL_TEMPLATE_SPECIALIZATIONS (t));
357*e4b17023SJohn Marino       dump_child ("prms", DECL_TEMPLATE_PARMS (t));
358*e4b17023SJohn Marino       break;
359*e4b17023SJohn Marino 
360*e4b17023SJohn Marino     case OVERLOAD:
361*e4b17023SJohn Marino       dump_child ("crnt", OVL_CURRENT (t));
362*e4b17023SJohn Marino       dump_child ("chan", OVL_CHAIN (t));
363*e4b17023SJohn Marino       break;
364*e4b17023SJohn Marino 
365*e4b17023SJohn Marino     case TRY_BLOCK:
366*e4b17023SJohn Marino       dump_stmt (di, t);
367*e4b17023SJohn Marino       if (CLEANUP_P (t))
368*e4b17023SJohn Marino 	dump_string_field (di, "note", "cleanup");
369*e4b17023SJohn Marino       dump_child ("body", TRY_STMTS (t));
370*e4b17023SJohn Marino       dump_child ("hdlr", TRY_HANDLERS (t));
371*e4b17023SJohn Marino       break;
372*e4b17023SJohn Marino 
373*e4b17023SJohn Marino     case EH_SPEC_BLOCK:
374*e4b17023SJohn Marino       dump_stmt (di, t);
375*e4b17023SJohn Marino       dump_child ("body", EH_SPEC_STMTS (t));
376*e4b17023SJohn Marino       dump_child ("raises", EH_SPEC_RAISES (t));
377*e4b17023SJohn Marino       break;
378*e4b17023SJohn Marino 
379*e4b17023SJohn Marino     case PTRMEM_CST:
380*e4b17023SJohn Marino       dump_child ("clas", PTRMEM_CST_CLASS (t));
381*e4b17023SJohn Marino       dump_child ("mbr", PTRMEM_CST_MEMBER (t));
382*e4b17023SJohn Marino       break;
383*e4b17023SJohn Marino 
384*e4b17023SJohn Marino     case THROW_EXPR:
385*e4b17023SJohn Marino       /* These nodes are unary, but do not have code class `1'.  */
386*e4b17023SJohn Marino       dump_child ("op 0", TREE_OPERAND (t, 0));
387*e4b17023SJohn Marino       break;
388*e4b17023SJohn Marino 
389*e4b17023SJohn Marino     case AGGR_INIT_EXPR:
390*e4b17023SJohn Marino       {
391*e4b17023SJohn Marino 	int i = 0;
392*e4b17023SJohn Marino 	tree arg;
393*e4b17023SJohn Marino 	aggr_init_expr_arg_iterator iter;
394*e4b17023SJohn Marino 	dump_int (di, "ctor", AGGR_INIT_VIA_CTOR_P (t));
395*e4b17023SJohn Marino 	dump_child ("fn", AGGR_INIT_EXPR_FN (t));
396*e4b17023SJohn Marino 	FOR_EACH_AGGR_INIT_EXPR_ARG (arg, iter, t)
397*e4b17023SJohn Marino 	  {
398*e4b17023SJohn Marino 	    char buffer[32];
399*e4b17023SJohn Marino 	    sprintf (buffer, "%u", i);
400*e4b17023SJohn Marino 	    dump_child (buffer, arg);
401*e4b17023SJohn Marino 	    i++;
402*e4b17023SJohn Marino 	  }
403*e4b17023SJohn Marino 	dump_child ("decl", AGGR_INIT_EXPR_SLOT (t));
404*e4b17023SJohn Marino       }
405*e4b17023SJohn Marino       break;
406*e4b17023SJohn Marino 
407*e4b17023SJohn Marino     case HANDLER:
408*e4b17023SJohn Marino       dump_stmt (di, t);
409*e4b17023SJohn Marino       dump_child ("parm", HANDLER_PARMS (t));
410*e4b17023SJohn Marino       dump_child ("body", HANDLER_BODY (t));
411*e4b17023SJohn Marino       break;
412*e4b17023SJohn Marino 
413*e4b17023SJohn Marino     case MUST_NOT_THROW_EXPR:
414*e4b17023SJohn Marino       dump_stmt (di, t);
415*e4b17023SJohn Marino       dump_child ("body", TREE_OPERAND (t, 0));
416*e4b17023SJohn Marino       dump_child ("cond", MUST_NOT_THROW_COND (t));
417*e4b17023SJohn Marino       break;
418*e4b17023SJohn Marino 
419*e4b17023SJohn Marino     case USING_STMT:
420*e4b17023SJohn Marino       dump_stmt (di, t);
421*e4b17023SJohn Marino       dump_child ("nmsp", USING_STMT_NAMESPACE (t));
422*e4b17023SJohn Marino       break;
423*e4b17023SJohn Marino 
424*e4b17023SJohn Marino     case CLEANUP_STMT:
425*e4b17023SJohn Marino       dump_stmt (di, t);
426*e4b17023SJohn Marino       dump_child ("decl", CLEANUP_DECL (t));
427*e4b17023SJohn Marino       dump_child ("expr", CLEANUP_EXPR (t));
428*e4b17023SJohn Marino       dump_child ("body", CLEANUP_BODY (t));
429*e4b17023SJohn Marino       break;
430*e4b17023SJohn Marino 
431*e4b17023SJohn Marino     case IF_STMT:
432*e4b17023SJohn Marino       dump_stmt (di, t);
433*e4b17023SJohn Marino       dump_child ("cond", IF_COND (t));
434*e4b17023SJohn Marino       dump_child ("then", THEN_CLAUSE (t));
435*e4b17023SJohn Marino       dump_child ("else", ELSE_CLAUSE (t));
436*e4b17023SJohn Marino       break;
437*e4b17023SJohn Marino 
438*e4b17023SJohn Marino     case BREAK_STMT:
439*e4b17023SJohn Marino     case CONTINUE_STMT:
440*e4b17023SJohn Marino       dump_stmt (di, t);
441*e4b17023SJohn Marino       break;
442*e4b17023SJohn Marino 
443*e4b17023SJohn Marino     case DO_STMT:
444*e4b17023SJohn Marino       dump_stmt (di, t);
445*e4b17023SJohn Marino       dump_child ("body", DO_BODY (t));
446*e4b17023SJohn Marino       dump_child ("cond", DO_COND (t));
447*e4b17023SJohn Marino       break;
448*e4b17023SJohn Marino 
449*e4b17023SJohn Marino     case FOR_STMT:
450*e4b17023SJohn Marino       dump_stmt (di, t);
451*e4b17023SJohn Marino       dump_child ("init", FOR_INIT_STMT (t));
452*e4b17023SJohn Marino       dump_child ("cond", FOR_COND (t));
453*e4b17023SJohn Marino       dump_child ("expr", FOR_EXPR (t));
454*e4b17023SJohn Marino       dump_child ("body", FOR_BODY (t));
455*e4b17023SJohn Marino       break;
456*e4b17023SJohn Marino 
457*e4b17023SJohn Marino     case RANGE_FOR_STMT:
458*e4b17023SJohn Marino       dump_stmt (di, t);
459*e4b17023SJohn Marino       dump_child ("decl", RANGE_FOR_DECL (t));
460*e4b17023SJohn Marino       dump_child ("expr", RANGE_FOR_EXPR (t));
461*e4b17023SJohn Marino       dump_child ("body", RANGE_FOR_BODY (t));
462*e4b17023SJohn Marino       break;
463*e4b17023SJohn Marino 
464*e4b17023SJohn Marino     case SWITCH_STMT:
465*e4b17023SJohn Marino       dump_stmt (di, t);
466*e4b17023SJohn Marino       dump_child ("cond", SWITCH_STMT_COND (t));
467*e4b17023SJohn Marino       dump_child ("body", SWITCH_STMT_BODY (t));
468*e4b17023SJohn Marino       break;
469*e4b17023SJohn Marino 
470*e4b17023SJohn Marino     case WHILE_STMT:
471*e4b17023SJohn Marino       dump_stmt (di, t);
472*e4b17023SJohn Marino       dump_child ("cond", WHILE_COND (t));
473*e4b17023SJohn Marino       dump_child ("body", WHILE_BODY (t));
474*e4b17023SJohn Marino       break;
475*e4b17023SJohn Marino 
476*e4b17023SJohn Marino     case STMT_EXPR:
477*e4b17023SJohn Marino       dump_child ("stmt", STMT_EXPR_STMT (t));
478*e4b17023SJohn Marino       break;
479*e4b17023SJohn Marino 
480*e4b17023SJohn Marino     case EXPR_STMT:
481*e4b17023SJohn Marino       dump_stmt (di, t);
482*e4b17023SJohn Marino       dump_child ("expr", EXPR_STMT_EXPR (t));
483*e4b17023SJohn Marino       break;
484*e4b17023SJohn Marino 
485*e4b17023SJohn Marino     default:
486*e4b17023SJohn Marino       break;
487*e4b17023SJohn Marino     }
488*e4b17023SJohn Marino 
489*e4b17023SJohn Marino   return c_dump_tree (di, t);
490*e4b17023SJohn Marino }
491