OSDN Git Service

gcc/cp/ChangeLog:
[pf3gnuchains/gcc-fork.git] / gcc / cp / tree.c
1 /* Language-dependent node constructors for parse phase of GNU compiler.
2    Copyright (C) 1987, 1988, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
3    1999, 2000, 2001, 2002, 2003, 2004, 2005, 2007, 2008
4    Free Software Foundation, Inc.
5    Hacked by Michael Tiemann (tiemann@cygnus.com)
6
7 This file is part of GCC.
8
9 GCC is free software; you can redistribute it and/or modify
10 it under the terms of the GNU General Public License as published by
11 the Free Software Foundation; either version 3, or (at your option)
12 any later version.
13
14 GCC is distributed in the hope that it will be useful,
15 but WITHOUT ANY WARRANTY; without even the implied warranty of
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17 GNU General Public License for more details.
18
19 You should have received a copy of the GNU General Public License
20 along with GCC; see the file COPYING3.  If not see
21 <http://www.gnu.org/licenses/>.  */
22
23 #include "config.h"
24 #include "system.h"
25 #include "coretypes.h"
26 #include "tm.h"
27 #include "tree.h"
28 #include "cp-tree.h"
29 #include "flags.h"
30 #include "real.h"
31 #include "rtl.h"
32 #include "toplev.h"
33 #include "insn-config.h"
34 #include "integrate.h"
35 #include "tree-inline.h"
36 #include "debug.h"
37 #include "target.h"
38 #include "convert.h"
39 #include "tree-flow.h"
40
41 static tree bot_manip (tree *, int *, void *);
42 static tree bot_replace (tree *, int *, void *);
43 static tree build_cplus_array_type_1 (tree, tree);
44 static int list_hash_eq (const void *, const void *);
45 static hashval_t list_hash_pieces (tree, tree, tree);
46 static hashval_t list_hash (const void *);
47 static cp_lvalue_kind lvalue_p_1 (const_tree, int);
48 static tree build_target_expr (tree, tree);
49 static tree count_trees_r (tree *, int *, void *);
50 static tree verify_stmt_tree_r (tree *, int *, void *);
51 static tree build_local_temp (tree);
52
53 static tree handle_java_interface_attribute (tree *, tree, tree, int, bool *);
54 static tree handle_com_interface_attribute (tree *, tree, tree, int, bool *);
55 static tree handle_init_priority_attribute (tree *, tree, tree, int, bool *);
56
57 /* If REF is an lvalue, returns the kind of lvalue that REF is.
58    Otherwise, returns clk_none.  If TREAT_CLASS_RVALUES_AS_LVALUES is
59    nonzero, rvalues of class type are considered lvalues.  */
60
61 static cp_lvalue_kind
62 lvalue_p_1 (const_tree ref,
63             int treat_class_rvalues_as_lvalues)
64 {
65   cp_lvalue_kind op1_lvalue_kind = clk_none;
66   cp_lvalue_kind op2_lvalue_kind = clk_none;
67
68   /* Expressions of reference type are sometimes wrapped in
69      INDIRECT_REFs.  INDIRECT_REFs are just internal compiler
70      representation, not part of the language, so we have to look
71      through them.  */
72   if (TREE_CODE (ref) == INDIRECT_REF
73       && TREE_CODE (TREE_TYPE (TREE_OPERAND (ref, 0)))
74           == REFERENCE_TYPE)
75     return lvalue_p_1 (TREE_OPERAND (ref, 0),
76                        treat_class_rvalues_as_lvalues);
77
78   if (TREE_CODE (TREE_TYPE (ref)) == REFERENCE_TYPE)
79     {
80       /* unnamed rvalue references are rvalues */
81       if (TYPE_REF_IS_RVALUE (TREE_TYPE (ref))
82           && TREE_CODE (ref) != PARM_DECL
83           && TREE_CODE (ref) != VAR_DECL
84           && TREE_CODE (ref) != COMPONENT_REF)
85         return clk_none;
86
87       /* lvalue references and named rvalue references are lvalues.  */
88       return clk_ordinary;
89     }
90
91   if (ref == current_class_ptr)
92     return clk_none;
93
94   switch (TREE_CODE (ref))
95     {
96     case SAVE_EXPR:
97       return clk_none;
98       /* preincrements and predecrements are valid lvals, provided
99          what they refer to are valid lvals.  */
100     case PREINCREMENT_EXPR:
101     case PREDECREMENT_EXPR:
102     case TRY_CATCH_EXPR:
103     case WITH_CLEANUP_EXPR:
104     case REALPART_EXPR:
105     case IMAGPART_EXPR:
106       return lvalue_p_1 (TREE_OPERAND (ref, 0),
107                          treat_class_rvalues_as_lvalues);
108
109     case COMPONENT_REF:
110       op1_lvalue_kind = lvalue_p_1 (TREE_OPERAND (ref, 0),
111                                     treat_class_rvalues_as_lvalues);
112       /* Look at the member designator.  */
113       if (!op1_lvalue_kind
114           /* The "field" can be a FUNCTION_DECL or an OVERLOAD in some
115              situations.  */
116           || TREE_CODE (TREE_OPERAND (ref, 1)) != FIELD_DECL)
117         ;
118       else if (DECL_C_BIT_FIELD (TREE_OPERAND (ref, 1)))
119         {
120           /* Clear the ordinary bit.  If this object was a class
121              rvalue we want to preserve that information.  */
122           op1_lvalue_kind &= ~clk_ordinary;
123           /* The lvalue is for a bitfield.  */
124           op1_lvalue_kind |= clk_bitfield;
125         }
126       else if (DECL_PACKED (TREE_OPERAND (ref, 1)))
127         op1_lvalue_kind |= clk_packed;
128
129       return op1_lvalue_kind;
130
131     case STRING_CST:
132       return clk_ordinary;
133
134     case CONST_DECL:
135     case VAR_DECL:
136       if (TREE_READONLY (ref) && ! TREE_STATIC (ref)
137           && DECL_LANG_SPECIFIC (ref)
138           && DECL_IN_AGGR_P (ref))
139         return clk_none;
140     case INDIRECT_REF:
141     case ARRAY_REF:
142     case PARM_DECL:
143     case RESULT_DECL:
144       if (TREE_CODE (TREE_TYPE (ref)) != METHOD_TYPE)
145         return clk_ordinary;
146       break;
147
148       /* A currently unresolved scope ref.  */
149     case SCOPE_REF:
150       gcc_unreachable ();
151     case MAX_EXPR:
152     case MIN_EXPR:
153       /* Disallow <? and >? as lvalues if either argument side-effects.  */
154       if (TREE_SIDE_EFFECTS (TREE_OPERAND (ref, 0))
155           || TREE_SIDE_EFFECTS (TREE_OPERAND (ref, 1)))
156         return clk_none;
157       op1_lvalue_kind = lvalue_p_1 (TREE_OPERAND (ref, 0),
158                                     treat_class_rvalues_as_lvalues);
159       op2_lvalue_kind = lvalue_p_1 (TREE_OPERAND (ref, 1),
160                                     treat_class_rvalues_as_lvalues);
161       break;
162
163     case COND_EXPR:
164       op1_lvalue_kind = lvalue_p_1 (TREE_OPERAND (ref, 1)
165                                     ? TREE_OPERAND (ref, 1)
166                                     : TREE_OPERAND (ref, 0),
167                                     treat_class_rvalues_as_lvalues);
168       op2_lvalue_kind = lvalue_p_1 (TREE_OPERAND (ref, 2),
169                                     treat_class_rvalues_as_lvalues);
170       break;
171
172     case MODIFY_EXPR:
173       return clk_ordinary;
174
175     case COMPOUND_EXPR:
176       return lvalue_p_1 (TREE_OPERAND (ref, 1),
177                          treat_class_rvalues_as_lvalues);
178
179     case TARGET_EXPR:
180       return treat_class_rvalues_as_lvalues ? clk_class : clk_none;
181
182     case VA_ARG_EXPR:
183       return (treat_class_rvalues_as_lvalues
184               && CLASS_TYPE_P (TREE_TYPE (ref))
185               ? clk_class : clk_none);
186
187     case CALL_EXPR:
188       /* Any class-valued call would be wrapped in a TARGET_EXPR.  */
189       return clk_none;
190
191     case FUNCTION_DECL:
192       /* All functions (except non-static-member functions) are
193          lvalues.  */
194       return (DECL_NONSTATIC_MEMBER_FUNCTION_P (ref)
195               ? clk_none : clk_ordinary);
196
197     case NON_DEPENDENT_EXPR:
198       /* We must consider NON_DEPENDENT_EXPRs to be lvalues so that
199          things like "&E" where "E" is an expression with a
200          non-dependent type work. It is safe to be lenient because an
201          error will be issued when the template is instantiated if "E"
202          is not an lvalue.  */
203       return clk_ordinary;
204
205     default:
206       break;
207     }
208
209   /* If one operand is not an lvalue at all, then this expression is
210      not an lvalue.  */
211   if (!op1_lvalue_kind || !op2_lvalue_kind)
212     return clk_none;
213
214   /* Otherwise, it's an lvalue, and it has all the odd properties
215      contributed by either operand.  */
216   op1_lvalue_kind = op1_lvalue_kind | op2_lvalue_kind;
217   /* It's not an ordinary lvalue if it involves either a bit-field or
218      a class rvalue.  */
219   if ((op1_lvalue_kind & ~clk_ordinary) != clk_none)
220     op1_lvalue_kind &= ~clk_ordinary;
221   return op1_lvalue_kind;
222 }
223
224 /* Returns the kind of lvalue that REF is, in the sense of
225    [basic.lval].  This function should really be named lvalue_p; it
226    computes the C++ definition of lvalue.  */
227
228 cp_lvalue_kind
229 real_lvalue_p (const_tree ref)
230 {
231   return lvalue_p_1 (ref,
232                      /*treat_class_rvalues_as_lvalues=*/0);
233 }
234
235 /* This differs from real_lvalue_p in that class rvalues are
236    considered lvalues.  */
237
238 int
239 lvalue_p (const_tree ref)
240 {
241   return
242     (lvalue_p_1 (ref, /*class rvalue ok*/ 1) != clk_none);
243 }
244
245 /* Test whether DECL is a builtin that may appear in a
246    constant-expression. */
247
248 bool
249 builtin_valid_in_constant_expr_p (const_tree decl)
250 {
251   /* At present BUILT_IN_CONSTANT_P is the only builtin we're allowing
252      in constant-expressions.  We may want to add other builtins later. */
253   return DECL_IS_BUILTIN_CONSTANT_P (decl);
254 }
255
256 /* Build a TARGET_EXPR, initializing the DECL with the VALUE.  */
257
258 static tree
259 build_target_expr (tree decl, tree value)
260 {
261   tree t;
262
263 #ifdef ENABLE_CHECKING
264   gcc_assert (VOID_TYPE_P (TREE_TYPE (value))
265               || TREE_TYPE (decl) == TREE_TYPE (value)
266               || useless_type_conversion_p (TREE_TYPE (decl),
267                                             TREE_TYPE (value)));
268 #endif
269
270   t = build4 (TARGET_EXPR, TREE_TYPE (decl), decl, value,
271               cxx_maybe_build_cleanup (decl), NULL_TREE);
272   /* We always set TREE_SIDE_EFFECTS so that expand_expr does not
273      ignore the TARGET_EXPR.  If there really turn out to be no
274      side-effects, then the optimizer should be able to get rid of
275      whatever code is generated anyhow.  */
276   TREE_SIDE_EFFECTS (t) = 1;
277
278   return t;
279 }
280
281 /* Return an undeclared local temporary of type TYPE for use in building a
282    TARGET_EXPR.  */
283
284 static tree
285 build_local_temp (tree type)
286 {
287   tree slot = build_decl (VAR_DECL, NULL_TREE, type);
288   DECL_ARTIFICIAL (slot) = 1;
289   DECL_IGNORED_P (slot) = 1;
290   DECL_CONTEXT (slot) = current_function_decl;
291   layout_decl (slot, 0);
292   return slot;
293 }
294
295 /* Set various status flags when building an AGGR_INIT_EXPR object T.  */
296
297 static void
298 process_aggr_init_operands (tree t)
299 {
300   bool side_effects;
301
302   side_effects = TREE_SIDE_EFFECTS (t);
303   if (!side_effects)
304     {
305       int i, n;
306       n = TREE_OPERAND_LENGTH (t);
307       for (i = 1; i < n; i++)
308         {
309           tree op = TREE_OPERAND (t, i);
310           if (op && TREE_SIDE_EFFECTS (op))
311             {
312               side_effects = 1;
313               break;
314             }
315         }
316     }
317   TREE_SIDE_EFFECTS (t) = side_effects;
318 }
319
320 /* Build an AGGR_INIT_EXPR of class tcc_vl_exp with the indicated RETURN_TYPE,
321    FN, and SLOT.  NARGS is the number of call arguments which are specified
322    as a tree array ARGS.  */
323
324 static tree
325 build_aggr_init_array (tree return_type, tree fn, tree slot, int nargs,
326                        tree *args)
327 {
328   tree t;
329   int i;
330
331   t = build_vl_exp (AGGR_INIT_EXPR, nargs + 3);
332   TREE_TYPE (t) = return_type;
333   AGGR_INIT_EXPR_FN (t) = fn;
334   AGGR_INIT_EXPR_SLOT (t) = slot;
335   for (i = 0; i < nargs; i++)
336     AGGR_INIT_EXPR_ARG (t, i) = args[i];
337   process_aggr_init_operands (t);
338   return t;
339 }
340
341 /* INIT is a CALL_EXPR or AGGR_INIT_EXPR which needs info about its
342    target.  TYPE is the type that this initialization should appear to
343    have.
344
345    Build an encapsulation of the initialization to perform
346    and return it so that it can be processed by language-independent
347    and language-specific expression expanders.  */
348
349 tree
350 build_cplus_new (tree type, tree init)
351 {
352   tree fn;
353   tree slot;
354   tree rval;
355   int is_ctor;
356
357   /* Make sure that we're not trying to create an instance of an
358      abstract class.  */
359   abstract_virtuals_error (NULL_TREE, type);
360
361   if (TREE_CODE (init) == CALL_EXPR)
362     fn = CALL_EXPR_FN (init);
363   else if (TREE_CODE (init) == AGGR_INIT_EXPR)
364     fn = AGGR_INIT_EXPR_FN (init);
365   else
366     return convert (type, init);
367
368   is_ctor = (TREE_CODE (fn) == ADDR_EXPR
369              && TREE_CODE (TREE_OPERAND (fn, 0)) == FUNCTION_DECL
370              && DECL_CONSTRUCTOR_P (TREE_OPERAND (fn, 0)));
371
372   slot = build_local_temp (type);
373
374   /* We split the CALL_EXPR into its function and its arguments here.
375      Then, in expand_expr, we put them back together.  The reason for
376      this is that this expression might be a default argument
377      expression.  In that case, we need a new temporary every time the
378      expression is used.  That's what break_out_target_exprs does; it
379      replaces every AGGR_INIT_EXPR with a copy that uses a fresh
380      temporary slot.  Then, expand_expr builds up a call-expression
381      using the new slot.  */
382
383   /* If we don't need to use a constructor to create an object of this
384      type, don't mess with AGGR_INIT_EXPR.  */
385   if (is_ctor || TREE_ADDRESSABLE (type))
386     {
387       if (TREE_CODE(init) == CALL_EXPR)
388         rval = build_aggr_init_array (void_type_node, fn, slot,
389                                       call_expr_nargs (init),
390                                       CALL_EXPR_ARGP (init));
391       else
392         rval = build_aggr_init_array (void_type_node, fn, slot,
393                                       aggr_init_expr_nargs (init),
394                                       AGGR_INIT_EXPR_ARGP (init));
395       TREE_SIDE_EFFECTS (rval) = 1;
396       AGGR_INIT_VIA_CTOR_P (rval) = is_ctor;
397     }
398   else
399     rval = init;
400
401   rval = build_target_expr (slot, rval);
402   TARGET_EXPR_IMPLICIT_P (rval) = 1;
403
404   return rval;
405 }
406
407 /* Build a TARGET_EXPR using INIT to initialize a new temporary of the
408    indicated TYPE.  */
409
410 tree
411 build_target_expr_with_type (tree init, tree type)
412 {
413   gcc_assert (!VOID_TYPE_P (type));
414
415   if (TREE_CODE (init) == TARGET_EXPR)
416     return init;
417   else if (CLASS_TYPE_P (type) && !TYPE_HAS_TRIVIAL_INIT_REF (type)
418            && TREE_CODE (init) != COND_EXPR
419            && TREE_CODE (init) != CONSTRUCTOR
420            && TREE_CODE (init) != VA_ARG_EXPR)
421     /* We need to build up a copy constructor call.  COND_EXPR is a special
422        case because we already have copies on the arms and we don't want
423        another one here.  A CONSTRUCTOR is aggregate initialization, which
424        is handled separately.  A VA_ARG_EXPR is magic creation of an
425        aggregate; there's no additional work to be done.  */
426     return force_rvalue (init);
427
428   return force_target_expr (type, init);
429 }
430
431 /* Like the above function, but without the checking.  This function should
432    only be used by code which is deliberately trying to subvert the type
433    system, such as call_builtin_trap.  */
434
435 tree
436 force_target_expr (tree type, tree init)
437 {
438   tree slot;
439
440   gcc_assert (!VOID_TYPE_P (type));
441
442   slot = build_local_temp (type);
443   return build_target_expr (slot, init);
444 }
445
446 /* Like build_target_expr_with_type, but use the type of INIT.  */
447
448 tree
449 get_target_expr (tree init)
450 {
451   return build_target_expr_with_type (init, TREE_TYPE (init));
452 }
453
454 /* If EXPR is a bitfield reference, convert it to the declared type of
455    the bitfield, and return the resulting expression.  Otherwise,
456    return EXPR itself.  */
457
458 tree
459 convert_bitfield_to_declared_type (tree expr)
460 {
461   tree bitfield_type;
462
463   bitfield_type = is_bitfield_expr_with_lowered_type (expr);
464   if (bitfield_type)
465     expr = convert_to_integer (TYPE_MAIN_VARIANT (bitfield_type),
466                                expr);
467   return expr;
468 }
469
470 /* EXPR is being used in an rvalue context.  Return a version of EXPR
471    that is marked as an rvalue.  */
472
473 tree
474 rvalue (tree expr)
475 {
476   tree type;
477
478   if (error_operand_p (expr))
479     return expr;
480
481   /* [basic.lval]
482
483      Non-class rvalues always have cv-unqualified types.  */
484   type = TREE_TYPE (expr);
485   if (!CLASS_TYPE_P (type) && cp_type_quals (type))
486     type = TYPE_MAIN_VARIANT (type);
487
488   if (!processing_template_decl && real_lvalue_p (expr))
489     expr = build1 (NON_LVALUE_EXPR, type, expr);
490   else if (type != TREE_TYPE (expr))
491     expr = build_nop (type, expr);
492
493   return expr;
494 }
495
496 \f
497 /* Hash an ARRAY_TYPE.  K is really of type `tree'.  */
498
499 static hashval_t
500 cplus_array_hash (const void* k)
501 {
502   hashval_t hash;
503   const_tree const t = (const_tree) k;
504
505   hash = (htab_hash_pointer (TREE_TYPE (t))
506           ^ htab_hash_pointer (TYPE_DOMAIN (t)));
507
508   return hash;
509 }
510
511 typedef struct cplus_array_info {
512   tree type;
513   tree domain;
514 } cplus_array_info;
515
516 /* Compare two ARRAY_TYPEs.  K1 is really of type `tree', K2 is really
517    of type `cplus_array_info*'. */
518
519 static int
520 cplus_array_compare (const void * k1, const void * k2)
521 {
522   const_tree const t1 = (const_tree) k1;
523   const cplus_array_info *const t2 = (const cplus_array_info*) k2;
524
525   return (TREE_TYPE (t1) == t2->type && TYPE_DOMAIN (t1) == t2->domain);
526 }
527
528 /* Hash table containing all of the C++ array types, including
529    dependent array types and array types whose element type is
530    cv-qualified.  */
531 static GTY ((param_is (union tree_node))) htab_t cplus_array_htab;
532
533
534 static tree
535 build_cplus_array_type_1 (tree elt_type, tree index_type)
536 {
537   tree t;
538
539   if (elt_type == error_mark_node || index_type == error_mark_node)
540     return error_mark_node;
541
542   if (processing_template_decl
543       && (dependent_type_p (elt_type)
544           || (index_type && !TREE_CONSTANT (TYPE_MAX_VALUE (index_type)))))
545     {
546       void **e;
547       cplus_array_info cai;
548       hashval_t hash;
549
550       if (cplus_array_htab == NULL)
551         cplus_array_htab = htab_create_ggc (61, &cplus_array_hash,
552                                             &cplus_array_compare, NULL);
553       
554       hash = (htab_hash_pointer (elt_type)
555               ^ htab_hash_pointer (index_type));
556       cai.type = elt_type;
557       cai.domain = index_type;
558
559       e = htab_find_slot_with_hash (cplus_array_htab, &cai, hash, INSERT); 
560       if (*e)
561         /* We have found the type: we're done.  */
562         return (tree) *e;
563       else
564         {
565           /* Build a new array type.  */
566           t = make_node (ARRAY_TYPE);
567           TREE_TYPE (t) = elt_type;
568           TYPE_DOMAIN (t) = index_type;
569
570           /* Store it in the hash table. */
571           *e = t;
572
573           /* Set the canonical type for this new node.  */
574           if (TYPE_STRUCTURAL_EQUALITY_P (elt_type)
575               || (index_type && TYPE_STRUCTURAL_EQUALITY_P (index_type)))
576             SET_TYPE_STRUCTURAL_EQUALITY (t);
577           else if (TYPE_CANONICAL (elt_type) != elt_type
578                    || (index_type 
579                        && TYPE_CANONICAL (index_type) != index_type))
580             TYPE_CANONICAL (t)
581                 = build_cplus_array_type 
582                    (TYPE_CANONICAL (elt_type),
583                     index_type ? TYPE_CANONICAL (index_type) : index_type);
584           else
585             TYPE_CANONICAL (t) = t;
586         }
587     }
588   else
589     t = build_array_type (elt_type, index_type);
590
591   /* Push these needs up so that initialization takes place
592      more easily.  */
593   TYPE_NEEDS_CONSTRUCTING (t)
594     = TYPE_NEEDS_CONSTRUCTING (TYPE_MAIN_VARIANT (elt_type));
595   TYPE_HAS_NONTRIVIAL_DESTRUCTOR (t)
596     = TYPE_HAS_NONTRIVIAL_DESTRUCTOR (TYPE_MAIN_VARIANT (elt_type));
597   return t;
598 }
599
600 tree
601 build_cplus_array_type (tree elt_type, tree index_type)
602 {
603   tree t;
604   int type_quals = cp_type_quals (elt_type);
605
606   if (type_quals != TYPE_UNQUALIFIED)
607     elt_type = cp_build_qualified_type (elt_type, TYPE_UNQUALIFIED);
608
609   t = build_cplus_array_type_1 (elt_type, index_type);
610
611   if (type_quals != TYPE_UNQUALIFIED)
612     t = cp_build_qualified_type (t, type_quals);
613
614   return t;
615 }
616
617 /* Return a reference type node referring to TO_TYPE.  If RVAL is
618    true, return an rvalue reference type, otherwise return an lvalue
619    reference type.  If a type node exists, reuse it, otherwise create
620    a new one.  */
621 tree
622 cp_build_reference_type (tree to_type, bool rval)
623 {
624   tree lvalue_ref, t;
625   lvalue_ref = build_reference_type (to_type);
626   if (!rval)
627     return lvalue_ref;
628
629   /* This code to create rvalue reference types is based on and tied
630      to the code creating lvalue reference types in the middle-end
631      functions build_reference_type_for_mode and build_reference_type.
632
633      It works by putting the rvalue reference type nodes after the
634      lvalue reference nodes in the TYPE_NEXT_REF_TO linked list, so
635      they will effectively be ignored by the middle end.  */
636
637   for (t = lvalue_ref; (t = TYPE_NEXT_REF_TO (t)); )
638     if (TYPE_REF_IS_RVALUE (t))
639       return t;
640
641   t = copy_node (lvalue_ref);
642
643   TYPE_REF_IS_RVALUE (t) = true;
644   TYPE_NEXT_REF_TO (t) = TYPE_NEXT_REF_TO (lvalue_ref);
645   TYPE_NEXT_REF_TO (lvalue_ref) = t;
646   TYPE_MAIN_VARIANT (t) = t;
647
648   if (TYPE_STRUCTURAL_EQUALITY_P (to_type))
649     SET_TYPE_STRUCTURAL_EQUALITY (t);
650   else if (TYPE_CANONICAL (to_type) != to_type)
651     TYPE_CANONICAL (t) 
652       = cp_build_reference_type (TYPE_CANONICAL (to_type), rval);
653   else
654     TYPE_CANONICAL (t) = t;
655
656   layout_type (t);
657
658   return t;
659
660 }
661
662 /* Used by the C++ front end to build qualified array types.  However,
663    the C version of this function does not properly maintain canonical
664    types (which are not used in C).  */
665 tree
666 c_build_qualified_type (tree type, int type_quals)
667 {
668   return cp_build_qualified_type (type, type_quals);
669 }
670
671 \f
672 /* Make a variant of TYPE, qualified with the TYPE_QUALS.  Handles
673    arrays correctly.  In particular, if TYPE is an array of T's, and
674    TYPE_QUALS is non-empty, returns an array of qualified T's.
675
676    FLAGS determines how to deal with illformed qualifications. If
677    tf_ignore_bad_quals is set, then bad qualifications are dropped
678    (this is permitted if TYPE was introduced via a typedef or template
679    type parameter). If bad qualifications are dropped and tf_warning
680    is set, then a warning is issued for non-const qualifications.  If
681    tf_ignore_bad_quals is not set and tf_error is not set, we
682    return error_mark_node. Otherwise, we issue an error, and ignore
683    the qualifications.
684
685    Qualification of a reference type is valid when the reference came
686    via a typedef or template type argument. [dcl.ref] No such
687    dispensation is provided for qualifying a function type.  [dcl.fct]
688    DR 295 queries this and the proposed resolution brings it into line
689    with qualifying a reference.  We implement the DR.  We also behave
690    in a similar manner for restricting non-pointer types.  */
691
692 tree
693 cp_build_qualified_type_real (tree type,
694                               int type_quals,
695                               tsubst_flags_t complain)
696 {
697   tree result;
698   int bad_quals = TYPE_UNQUALIFIED;
699
700   if (type == error_mark_node)
701     return type;
702
703   if (type_quals == cp_type_quals (type))
704     return type;
705
706   if (TREE_CODE (type) == ARRAY_TYPE)
707     {
708       /* In C++, the qualification really applies to the array element
709          type.  Obtain the appropriately qualified element type.  */
710       tree t;
711       tree element_type
712         = cp_build_qualified_type_real (TREE_TYPE (type),
713                                         type_quals,
714                                         complain);
715
716       if (element_type == error_mark_node)
717         return error_mark_node;
718
719       /* See if we already have an identically qualified type.  */
720       for (t = TYPE_MAIN_VARIANT (type); t; t = TYPE_NEXT_VARIANT (t))
721         if (cp_type_quals (t) == type_quals
722             && TYPE_NAME (t) == TYPE_NAME (type)
723             && TYPE_CONTEXT (t) == TYPE_CONTEXT (type))
724           break;
725
726       if (!t)
727         {
728           tree index_type = TYPE_DOMAIN (type);
729           void **e;
730           cplus_array_info cai;
731           hashval_t hash;
732
733           if (cplus_array_htab == NULL)
734             cplus_array_htab = htab_create_ggc (61, &cplus_array_hash,
735                                                 &cplus_array_compare, 
736                                                 NULL);
737
738           hash = (htab_hash_pointer (element_type)
739                   ^ htab_hash_pointer (index_type));
740           cai.type = element_type;
741           cai.domain = index_type;
742           
743           e = htab_find_slot_with_hash (cplus_array_htab, &cai, hash, INSERT);
744           if (*e)
745             /* We have found the type: we're done. */
746             return (tree) *e;
747
748           /* Build a new array type and add it into the table.  */
749           t = build_variant_type_copy (type);
750           TREE_TYPE (t) = element_type;
751           *e = t;
752
753           /* Set the canonical type for this new node.  */
754           if (TYPE_STRUCTURAL_EQUALITY_P (element_type)
755               || (index_type && TYPE_STRUCTURAL_EQUALITY_P (index_type)))
756             SET_TYPE_STRUCTURAL_EQUALITY (t);
757           else if (TYPE_CANONICAL (element_type) != element_type
758                    || (index_type 
759                        && TYPE_CANONICAL (index_type) != index_type)
760                    || TYPE_CANONICAL (type) != type)
761             TYPE_CANONICAL (t)
762               = build_cplus_array_type
763                  (TYPE_CANONICAL (element_type),
764                   index_type? TYPE_CANONICAL (index_type) : index_type);
765           else
766             TYPE_CANONICAL (t) = t;
767         }
768
769       /* Even if we already had this variant, we update
770          TYPE_NEEDS_CONSTRUCTING and TYPE_HAS_NONTRIVIAL_DESTRUCTOR in case
771          they changed since the variant was originally created.
772
773          This seems hokey; if there is some way to use a previous
774          variant *without* coming through here,
775          TYPE_NEEDS_CONSTRUCTING will never be updated.  */
776       TYPE_NEEDS_CONSTRUCTING (t)
777         = TYPE_NEEDS_CONSTRUCTING (TYPE_MAIN_VARIANT (element_type));
778       TYPE_HAS_NONTRIVIAL_DESTRUCTOR (t)
779         = TYPE_HAS_NONTRIVIAL_DESTRUCTOR (TYPE_MAIN_VARIANT (element_type));
780       return t;
781     }
782   else if (TYPE_PTRMEMFUNC_P (type))
783     {
784       /* For a pointer-to-member type, we can't just return a
785          cv-qualified version of the RECORD_TYPE.  If we do, we
786          haven't changed the field that contains the actual pointer to
787          a method, and so TYPE_PTRMEMFUNC_FN_TYPE will be wrong.  */
788       tree t;
789
790       t = TYPE_PTRMEMFUNC_FN_TYPE (type);
791       t = cp_build_qualified_type_real (t, type_quals, complain);
792       return build_ptrmemfunc_type (t);
793     }
794   else if (TREE_CODE (type) == TYPE_PACK_EXPANSION)
795     {
796       tree t = PACK_EXPANSION_PATTERN (type);
797
798       t = cp_build_qualified_type_real (t, type_quals, complain);
799       return make_pack_expansion (t);
800     }
801
802   /* A reference or method type shall not be cv qualified.
803      [dcl.ref], [dct.fct]  */
804   if (type_quals & (TYPE_QUAL_CONST | TYPE_QUAL_VOLATILE)
805       && (TREE_CODE (type) == REFERENCE_TYPE
806           || TREE_CODE (type) == METHOD_TYPE))
807     {
808       bad_quals |= type_quals & (TYPE_QUAL_CONST | TYPE_QUAL_VOLATILE);
809       type_quals &= ~(TYPE_QUAL_CONST | TYPE_QUAL_VOLATILE);
810     }
811
812   /* A restrict-qualified type must be a pointer (or reference)
813      to object or incomplete type, or a function type. */
814   if ((type_quals & TYPE_QUAL_RESTRICT)
815       && TREE_CODE (type) != TEMPLATE_TYPE_PARM
816       && TREE_CODE (type) != TYPENAME_TYPE
817       && TREE_CODE (type) != FUNCTION_TYPE
818       && !POINTER_TYPE_P (type))
819     {
820       bad_quals |= TYPE_QUAL_RESTRICT;
821       type_quals &= ~TYPE_QUAL_RESTRICT;
822     }
823
824   if (bad_quals == TYPE_UNQUALIFIED)
825     /*OK*/;
826   else if (!(complain & (tf_error | tf_ignore_bad_quals)))
827     return error_mark_node;
828   else
829     {
830       if (complain & tf_ignore_bad_quals)
831         /* We're not going to warn about constifying things that can't
832            be constified.  */
833         bad_quals &= ~TYPE_QUAL_CONST;
834       if (bad_quals)
835         {
836           tree bad_type = build_qualified_type (ptr_type_node, bad_quals);
837
838           if (!(complain & tf_ignore_bad_quals))
839             error ("%qV qualifiers cannot be applied to %qT",
840                    bad_type, type);
841         }
842     }
843
844   /* Retrieve (or create) the appropriately qualified variant.  */
845   result = build_qualified_type (type, type_quals);
846
847   /* If this was a pointer-to-method type, and we just made a copy,
848      then we need to unshare the record that holds the cached
849      pointer-to-member-function type, because these will be distinct
850      between the unqualified and qualified types.  */
851   if (result != type
852       && TREE_CODE (type) == POINTER_TYPE
853       && TREE_CODE (TREE_TYPE (type)) == METHOD_TYPE)
854     TYPE_LANG_SPECIFIC (result) = NULL;
855
856   return result;
857 }
858
859 /* Returns the canonical version of TYPE.  In other words, if TYPE is
860    a typedef, returns the underlying type.  The cv-qualification of
861    the type returned matches the type input; they will always be
862    compatible types.  */
863
864 tree
865 canonical_type_variant (tree t)
866 {
867   if (t == error_mark_node)
868     return error_mark_node;
869
870   return cp_build_qualified_type (TYPE_MAIN_VARIANT (t), cp_type_quals (t));
871 }
872 \f
873 /* Makes a copy of BINFO and TYPE, which is to be inherited into a
874    graph dominated by T.  If BINFO is NULL, TYPE is a dependent base,
875    and we do a shallow copy.  If BINFO is non-NULL, we do a deep copy.
876    VIRT indicates whether TYPE is inherited virtually or not.
877    IGO_PREV points at the previous binfo of the inheritance graph
878    order chain.  The newly copied binfo's TREE_CHAIN forms this
879    ordering.
880
881    The CLASSTYPE_VBASECLASSES vector of T is constructed in the
882    correct order. That is in the order the bases themselves should be
883    constructed in.
884
885    The BINFO_INHERITANCE of a virtual base class points to the binfo
886    of the most derived type. ??? We could probably change this so that
887    BINFO_INHERITANCE becomes synonymous with BINFO_PRIMARY, and hence
888    remove a field.  They currently can only differ for primary virtual
889    virtual bases.  */
890
891 tree
892 copy_binfo (tree binfo, tree type, tree t, tree *igo_prev, int virt)
893 {
894   tree new_binfo;
895
896   if (virt)
897     {
898       /* See if we've already made this virtual base.  */
899       new_binfo = binfo_for_vbase (type, t);
900       if (new_binfo)
901         return new_binfo;
902     }
903
904   new_binfo = make_tree_binfo (binfo ? BINFO_N_BASE_BINFOS (binfo) : 0);
905   BINFO_TYPE (new_binfo) = type;
906
907   /* Chain it into the inheritance graph.  */
908   TREE_CHAIN (*igo_prev) = new_binfo;
909   *igo_prev = new_binfo;
910
911   if (binfo)
912     {
913       int ix;
914       tree base_binfo;
915
916       gcc_assert (!BINFO_DEPENDENT_BASE_P (binfo));
917       gcc_assert (SAME_BINFO_TYPE_P (BINFO_TYPE (binfo), type));
918
919       BINFO_OFFSET (new_binfo) = BINFO_OFFSET (binfo);
920       BINFO_VIRTUALS (new_binfo) = BINFO_VIRTUALS (binfo);
921
922       /* We do not need to copy the accesses, as they are read only.  */
923       BINFO_BASE_ACCESSES (new_binfo) = BINFO_BASE_ACCESSES (binfo);
924
925       /* Recursively copy base binfos of BINFO.  */
926       for (ix = 0; BINFO_BASE_ITERATE (binfo, ix, base_binfo); ix++)
927         {
928           tree new_base_binfo;
929
930           gcc_assert (!BINFO_DEPENDENT_BASE_P (base_binfo));
931           new_base_binfo = copy_binfo (base_binfo, BINFO_TYPE (base_binfo),
932                                        t, igo_prev,
933                                        BINFO_VIRTUAL_P (base_binfo));
934
935           if (!BINFO_INHERITANCE_CHAIN (new_base_binfo))
936             BINFO_INHERITANCE_CHAIN (new_base_binfo) = new_binfo;
937           BINFO_BASE_APPEND (new_binfo, new_base_binfo);
938         }
939     }
940   else
941     BINFO_DEPENDENT_BASE_P (new_binfo) = 1;
942
943   if (virt)
944     {
945       /* Push it onto the list after any virtual bases it contains
946          will have been pushed.  */
947       VEC_quick_push (tree, CLASSTYPE_VBASECLASSES (t), new_binfo);
948       BINFO_VIRTUAL_P (new_binfo) = 1;
949       BINFO_INHERITANCE_CHAIN (new_binfo) = TYPE_BINFO (t);
950     }
951
952   return new_binfo;
953 }
954 \f
955 /* Hashing of lists so that we don't make duplicates.
956    The entry point is `list_hash_canon'.  */
957
958 /* Now here is the hash table.  When recording a list, it is added
959    to the slot whose index is the hash code mod the table size.
960    Note that the hash table is used for several kinds of lists.
961    While all these live in the same table, they are completely independent,
962    and the hash code is computed differently for each of these.  */
963
964 static GTY ((param_is (union tree_node))) htab_t list_hash_table;
965
966 struct list_proxy
967 {
968   tree purpose;
969   tree value;
970   tree chain;
971 };
972
973 /* Compare ENTRY (an entry in the hash table) with DATA (a list_proxy
974    for a node we are thinking about adding).  */
975
976 static int
977 list_hash_eq (const void* entry, const void* data)
978 {
979   const_tree const t = (const_tree) entry;
980   const struct list_proxy *const proxy = (const struct list_proxy *) data;
981
982   return (TREE_VALUE (t) == proxy->value
983           && TREE_PURPOSE (t) == proxy->purpose
984           && TREE_CHAIN (t) == proxy->chain);
985 }
986
987 /* Compute a hash code for a list (chain of TREE_LIST nodes
988    with goodies in the TREE_PURPOSE, TREE_VALUE, and bits of the
989    TREE_COMMON slots), by adding the hash codes of the individual entries.  */
990
991 static hashval_t
992 list_hash_pieces (tree purpose, tree value, tree chain)
993 {
994   hashval_t hashcode = 0;
995
996   if (chain)
997     hashcode += TREE_HASH (chain);
998
999   if (value)
1000     hashcode += TREE_HASH (value);
1001   else
1002     hashcode += 1007;
1003   if (purpose)
1004     hashcode += TREE_HASH (purpose);
1005   else
1006     hashcode += 1009;
1007   return hashcode;
1008 }
1009
1010 /* Hash an already existing TREE_LIST.  */
1011
1012 static hashval_t
1013 list_hash (const void* p)
1014 {
1015   const_tree const t = (const_tree) p;
1016   return list_hash_pieces (TREE_PURPOSE (t),
1017                            TREE_VALUE (t),
1018                            TREE_CHAIN (t));
1019 }
1020
1021 /* Given list components PURPOSE, VALUE, AND CHAIN, return the canonical
1022    object for an identical list if one already exists.  Otherwise, build a
1023    new one, and record it as the canonical object.  */
1024
1025 tree
1026 hash_tree_cons (tree purpose, tree value, tree chain)
1027 {
1028   int hashcode = 0;
1029   void **slot;
1030   struct list_proxy proxy;
1031
1032   /* Hash the list node.  */
1033   hashcode = list_hash_pieces (purpose, value, chain);
1034   /* Create a proxy for the TREE_LIST we would like to create.  We
1035      don't actually create it so as to avoid creating garbage.  */
1036   proxy.purpose = purpose;
1037   proxy.value = value;
1038   proxy.chain = chain;
1039   /* See if it is already in the table.  */
1040   slot = htab_find_slot_with_hash (list_hash_table, &proxy, hashcode,
1041                                    INSERT);
1042   /* If not, create a new node.  */
1043   if (!*slot)
1044     *slot = tree_cons (purpose, value, chain);
1045   return (tree) *slot;
1046 }
1047
1048 /* Constructor for hashed lists.  */
1049
1050 tree
1051 hash_tree_chain (tree value, tree chain)
1052 {
1053   return hash_tree_cons (NULL_TREE, value, chain);
1054 }
1055 \f
1056 void
1057 debug_binfo (tree elem)
1058 {
1059   HOST_WIDE_INT n;
1060   tree virtuals;
1061
1062   fprintf (stderr, "type \"%s\", offset = " HOST_WIDE_INT_PRINT_DEC
1063            "\nvtable type:\n",
1064            TYPE_NAME_STRING (BINFO_TYPE (elem)),
1065            TREE_INT_CST_LOW (BINFO_OFFSET (elem)));
1066   debug_tree (BINFO_TYPE (elem));
1067   if (BINFO_VTABLE (elem))
1068     fprintf (stderr, "vtable decl \"%s\"\n",
1069              IDENTIFIER_POINTER (DECL_NAME (get_vtbl_decl_for_binfo (elem))));
1070   else
1071     fprintf (stderr, "no vtable decl yet\n");
1072   fprintf (stderr, "virtuals:\n");
1073   virtuals = BINFO_VIRTUALS (elem);
1074   n = 0;
1075
1076   while (virtuals)
1077     {
1078       tree fndecl = TREE_VALUE (virtuals);
1079       fprintf (stderr, "%s [%ld =? %ld]\n",
1080                IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (fndecl)),
1081                (long) n, (long) TREE_INT_CST_LOW (DECL_VINDEX (fndecl)));
1082       ++n;
1083       virtuals = TREE_CHAIN (virtuals);
1084     }
1085 }
1086
1087 /* Build a representation for the qualified name SCOPE::NAME.  TYPE is
1088    the type of the result expression, if known, or NULL_TREE if the
1089    resulting expression is type-dependent.  If TEMPLATE_P is true,
1090    NAME is known to be a template because the user explicitly used the
1091    "template" keyword after the "::".
1092
1093    All SCOPE_REFs should be built by use of this function.  */
1094
1095 tree
1096 build_qualified_name (tree type, tree scope, tree name, bool template_p)
1097 {
1098   tree t;
1099   if (type == error_mark_node
1100       || scope == error_mark_node
1101       || name == error_mark_node)
1102     return error_mark_node;
1103   t = build2 (SCOPE_REF, type, scope, name);
1104   QUALIFIED_NAME_IS_TEMPLATE (t) = template_p;
1105   return t;
1106 }
1107
1108 /* Returns nonzero if X is an expression for a (possibly overloaded)
1109    function.  If "f" is a function or function template, "f", "c->f",
1110    "c.f", "C::f", and "f<int>" will all be considered possibly
1111    overloaded functions.  Returns 2 if the function is actually
1112    overloaded, i.e., if it is impossible to know the type of the
1113    function without performing overload resolution.  */
1114  
1115 int
1116 is_overloaded_fn (tree x)
1117 {
1118   /* A baselink is also considered an overloaded function.  */
1119   if (TREE_CODE (x) == OFFSET_REF
1120       || TREE_CODE (x) == COMPONENT_REF)
1121     x = TREE_OPERAND (x, 1);
1122   if (BASELINK_P (x))
1123     x = BASELINK_FUNCTIONS (x);
1124   if (TREE_CODE (x) == TEMPLATE_ID_EXPR
1125       || DECL_FUNCTION_TEMPLATE_P (OVL_CURRENT (x))
1126       || (TREE_CODE (x) == OVERLOAD && OVL_CHAIN (x)))
1127     return 2;
1128   return  (TREE_CODE (x) == FUNCTION_DECL
1129            || TREE_CODE (x) == OVERLOAD);
1130 }
1131
1132 /* Returns true iff X is an expression for an overloaded function
1133    whose type cannot be known without performing overload
1134    resolution.  */
1135
1136 bool
1137 really_overloaded_fn (tree x)
1138 {
1139   return is_overloaded_fn (x) == 2;
1140 }
1141
1142 tree
1143 get_first_fn (tree from)
1144 {
1145   gcc_assert (is_overloaded_fn (from));
1146   /* A baselink is also considered an overloaded function.  */
1147   if (TREE_CODE (from) == COMPONENT_REF)
1148     from = TREE_OPERAND (from, 1);
1149   if (BASELINK_P (from))
1150     from = BASELINK_FUNCTIONS (from);
1151   return OVL_CURRENT (from);
1152 }
1153
1154 /* Return a new OVL node, concatenating it with the old one.  */
1155
1156 tree
1157 ovl_cons (tree decl, tree chain)
1158 {
1159   tree result = make_node (OVERLOAD);
1160   TREE_TYPE (result) = unknown_type_node;
1161   OVL_FUNCTION (result) = decl;
1162   TREE_CHAIN (result) = chain;
1163
1164   return result;
1165 }
1166
1167 /* Build a new overloaded function. If this is the first one,
1168    just return it; otherwise, ovl_cons the _DECLs */
1169
1170 tree
1171 build_overload (tree decl, tree chain)
1172 {
1173   if (! chain && TREE_CODE (decl) != TEMPLATE_DECL)
1174     return decl;
1175   if (chain && TREE_CODE (chain) != OVERLOAD)
1176     chain = ovl_cons (chain, NULL_TREE);
1177   return ovl_cons (decl, chain);
1178 }
1179
1180 \f
1181 #define PRINT_RING_SIZE 4
1182
1183 const char *
1184 cxx_printable_name (tree decl, int v)
1185 {
1186   static unsigned int uid_ring[PRINT_RING_SIZE];
1187   static char *print_ring[PRINT_RING_SIZE];
1188   static int ring_counter;
1189   int i;
1190
1191   /* Only cache functions.  */
1192   if (v < 2
1193       || TREE_CODE (decl) != FUNCTION_DECL
1194       || DECL_LANG_SPECIFIC (decl) == 0)
1195     return lang_decl_name (decl, v);
1196
1197   /* See if this print name is lying around.  */
1198   for (i = 0; i < PRINT_RING_SIZE; i++)
1199     if (uid_ring[i] == DECL_UID (decl))
1200       /* yes, so return it.  */
1201       return print_ring[i];
1202
1203   if (++ring_counter == PRINT_RING_SIZE)
1204     ring_counter = 0;
1205
1206   if (current_function_decl != NULL_TREE)
1207     {
1208       if (uid_ring[ring_counter] == DECL_UID (current_function_decl))
1209         ring_counter += 1;
1210       if (ring_counter == PRINT_RING_SIZE)
1211         ring_counter = 0;
1212       gcc_assert (uid_ring[ring_counter] != DECL_UID (current_function_decl));
1213     }
1214
1215   if (print_ring[ring_counter])
1216     free (print_ring[ring_counter]);
1217
1218   print_ring[ring_counter] = xstrdup (lang_decl_name (decl, v));
1219   uid_ring[ring_counter] = DECL_UID (decl);
1220   return print_ring[ring_counter];
1221 }
1222 \f
1223 /* Build the FUNCTION_TYPE or METHOD_TYPE which may throw exceptions
1224    listed in RAISES.  */
1225
1226 tree
1227 build_exception_variant (tree type, tree raises)
1228 {
1229   tree v = TYPE_MAIN_VARIANT (type);
1230   int type_quals = TYPE_QUALS (type);
1231
1232   for (; v; v = TYPE_NEXT_VARIANT (v))
1233     if (check_qualified_type (v, type, type_quals)
1234         && comp_except_specs (raises, TYPE_RAISES_EXCEPTIONS (v), 1))
1235       return v;
1236
1237   /* Need to build a new variant.  */
1238   v = build_variant_type_copy (type);
1239   TYPE_RAISES_EXCEPTIONS (v) = raises;
1240   return v;
1241 }
1242
1243 /* Given a TEMPLATE_TEMPLATE_PARM node T, create a new
1244    BOUND_TEMPLATE_TEMPLATE_PARM bound with NEWARGS as its template
1245    arguments.  */
1246
1247 tree
1248 bind_template_template_parm (tree t, tree newargs)
1249 {
1250   tree decl = TYPE_NAME (t);
1251   tree t2;
1252
1253   t2 = make_aggr_type (BOUND_TEMPLATE_TEMPLATE_PARM);
1254   decl = build_decl (TYPE_DECL, DECL_NAME (decl), NULL_TREE);
1255
1256   /* These nodes have to be created to reflect new TYPE_DECL and template
1257      arguments.  */
1258   TEMPLATE_TYPE_PARM_INDEX (t2) = copy_node (TEMPLATE_TYPE_PARM_INDEX (t));
1259   TEMPLATE_PARM_DECL (TEMPLATE_TYPE_PARM_INDEX (t2)) = decl;
1260   TEMPLATE_TEMPLATE_PARM_TEMPLATE_INFO (t2)
1261     = tree_cons (TEMPLATE_TEMPLATE_PARM_TEMPLATE_DECL (t),
1262                  newargs, NULL_TREE);
1263
1264   TREE_TYPE (decl) = t2;
1265   TYPE_NAME (t2) = decl;
1266   TYPE_STUB_DECL (t2) = decl;
1267   TYPE_SIZE (t2) = 0;
1268   SET_TYPE_STRUCTURAL_EQUALITY (t2);
1269
1270   return t2;
1271 }
1272
1273 /* Called from count_trees via walk_tree.  */
1274
1275 static tree
1276 count_trees_r (tree *tp, int *walk_subtrees, void *data)
1277 {
1278   ++*((int *) data);
1279
1280   if (TYPE_P (*tp))
1281     *walk_subtrees = 0;
1282
1283   return NULL_TREE;
1284 }
1285
1286 /* Debugging function for measuring the rough complexity of a tree
1287    representation.  */
1288
1289 int
1290 count_trees (tree t)
1291 {
1292   int n_trees = 0;
1293   cp_walk_tree_without_duplicates (&t, count_trees_r, &n_trees);
1294   return n_trees;
1295 }
1296
1297 /* Called from verify_stmt_tree via walk_tree.  */
1298
1299 static tree
1300 verify_stmt_tree_r (tree* tp,
1301                     int* walk_subtrees ATTRIBUTE_UNUSED ,
1302                     void* data)
1303 {
1304   tree t = *tp;
1305   htab_t *statements = (htab_t *) data;
1306   void **slot;
1307
1308   if (!STATEMENT_CODE_P (TREE_CODE (t)))
1309     return NULL_TREE;
1310
1311   /* If this statement is already present in the hash table, then
1312      there is a circularity in the statement tree.  */
1313   gcc_assert (!htab_find (*statements, t));
1314
1315   slot = htab_find_slot (*statements, t, INSERT);
1316   *slot = t;
1317
1318   return NULL_TREE;
1319 }
1320
1321 /* Debugging function to check that the statement T has not been
1322    corrupted.  For now, this function simply checks that T contains no
1323    circularities.  */
1324
1325 void
1326 verify_stmt_tree (tree t)
1327 {
1328   htab_t statements;
1329   statements = htab_create (37, htab_hash_pointer, htab_eq_pointer, NULL);
1330   cp_walk_tree (&t, verify_stmt_tree_r, &statements, NULL);
1331   htab_delete (statements);
1332 }
1333
1334 /* Check if the type T depends on a type with no linkage and if so, return
1335    it.  If RELAXED_P then do not consider a class type declared within
1336    a TREE_PUBLIC function to have no linkage.  */
1337
1338 tree
1339 no_linkage_check (tree t, bool relaxed_p)
1340 {
1341   tree r;
1342
1343   /* There's no point in checking linkage on template functions; we
1344      can't know their complete types.  */
1345   if (processing_template_decl)
1346     return NULL_TREE;
1347
1348   switch (TREE_CODE (t))
1349     {
1350       tree fn;
1351
1352     case RECORD_TYPE:
1353       if (TYPE_PTRMEMFUNC_P (t))
1354         goto ptrmem;
1355       /* Fall through.  */
1356     case UNION_TYPE:
1357       if (!CLASS_TYPE_P (t))
1358         return NULL_TREE;
1359       /* Fall through.  */
1360     case ENUMERAL_TYPE:
1361       if (TYPE_ANONYMOUS_P (t))
1362         return t;
1363       fn = decl_function_context (TYPE_MAIN_DECL (t));
1364       if (fn && (!relaxed_p || !TREE_PUBLIC (fn)))
1365         return t;
1366       return NULL_TREE;
1367
1368     case ARRAY_TYPE:
1369     case POINTER_TYPE:
1370     case REFERENCE_TYPE:
1371       return no_linkage_check (TREE_TYPE (t), relaxed_p);
1372
1373     case OFFSET_TYPE:
1374     ptrmem:
1375       r = no_linkage_check (TYPE_PTRMEM_POINTED_TO_TYPE (t),
1376                             relaxed_p);
1377       if (r)
1378         return r;
1379       return no_linkage_check (TYPE_PTRMEM_CLASS_TYPE (t), relaxed_p);
1380
1381     case METHOD_TYPE:
1382       r = no_linkage_check (TYPE_METHOD_BASETYPE (t), relaxed_p);
1383       if (r)
1384         return r;
1385       /* Fall through.  */
1386     case FUNCTION_TYPE:
1387       {
1388         tree parm;
1389         for (parm = TYPE_ARG_TYPES (t);
1390              parm && parm != void_list_node;
1391              parm = TREE_CHAIN (parm))
1392           {
1393             r = no_linkage_check (TREE_VALUE (parm), relaxed_p);
1394             if (r)
1395               return r;
1396           }
1397         return no_linkage_check (TREE_TYPE (t), relaxed_p);
1398       }
1399
1400     default:
1401       return NULL_TREE;
1402     }
1403 }
1404
1405 #ifdef GATHER_STATISTICS
1406 extern int depth_reached;
1407 #endif
1408
1409 void
1410 cxx_print_statistics (void)
1411 {
1412   print_search_statistics ();
1413   print_class_statistics ();
1414 #ifdef GATHER_STATISTICS
1415   fprintf (stderr, "maximum template instantiation depth reached: %d\n",
1416            depth_reached);
1417 #endif
1418 }
1419
1420 /* Return, as an INTEGER_CST node, the number of elements for TYPE
1421    (which is an ARRAY_TYPE).  This counts only elements of the top
1422    array.  */
1423
1424 tree
1425 array_type_nelts_top (tree type)
1426 {
1427   return fold_build2 (PLUS_EXPR, sizetype,
1428                       array_type_nelts (type),
1429                       integer_one_node);
1430 }
1431
1432 /* Return, as an INTEGER_CST node, the number of elements for TYPE
1433    (which is an ARRAY_TYPE).  This one is a recursive count of all
1434    ARRAY_TYPEs that are clumped together.  */
1435
1436 tree
1437 array_type_nelts_total (tree type)
1438 {
1439   tree sz = array_type_nelts_top (type);
1440   type = TREE_TYPE (type);
1441   while (TREE_CODE (type) == ARRAY_TYPE)
1442     {
1443       tree n = array_type_nelts_top (type);
1444       sz = fold_build2 (MULT_EXPR, sizetype, sz, n);
1445       type = TREE_TYPE (type);
1446     }
1447   return sz;
1448 }
1449
1450 /* Called from break_out_target_exprs via mapcar.  */
1451
1452 static tree
1453 bot_manip (tree* tp, int* walk_subtrees, void* data)
1454 {
1455   splay_tree target_remap = ((splay_tree) data);
1456   tree t = *tp;
1457
1458   if (!TYPE_P (t) && TREE_CONSTANT (t))
1459     {
1460       /* There can't be any TARGET_EXPRs or their slot variables below
1461          this point.  We used to check !TREE_SIDE_EFFECTS, but then we
1462          failed to copy an ADDR_EXPR of the slot VAR_DECL.  */
1463       *walk_subtrees = 0;
1464       return NULL_TREE;
1465     }
1466   if (TREE_CODE (t) == TARGET_EXPR)
1467     {
1468       tree u;
1469
1470       if (TREE_CODE (TREE_OPERAND (t, 1)) == AGGR_INIT_EXPR)
1471         u = build_cplus_new
1472           (TREE_TYPE (t), break_out_target_exprs (TREE_OPERAND (t, 1)));
1473       else
1474         u = build_target_expr_with_type
1475           (break_out_target_exprs (TREE_OPERAND (t, 1)), TREE_TYPE (t));
1476
1477       /* Map the old variable to the new one.  */
1478       splay_tree_insert (target_remap,
1479                          (splay_tree_key) TREE_OPERAND (t, 0),
1480                          (splay_tree_value) TREE_OPERAND (u, 0));
1481
1482       /* Replace the old expression with the new version.  */
1483       *tp = u;
1484       /* We don't have to go below this point; the recursive call to
1485          break_out_target_exprs will have handled anything below this
1486          point.  */
1487       *walk_subtrees = 0;
1488       return NULL_TREE;
1489     }
1490
1491   /* Make a copy of this node.  */
1492   return copy_tree_r (tp, walk_subtrees, NULL);
1493 }
1494
1495 /* Replace all remapped VAR_DECLs in T with their new equivalents.
1496    DATA is really a splay-tree mapping old variables to new
1497    variables.  */
1498
1499 static tree
1500 bot_replace (tree* t,
1501              int* walk_subtrees ATTRIBUTE_UNUSED ,
1502              void* data)
1503 {
1504   splay_tree target_remap = ((splay_tree) data);
1505
1506   if (TREE_CODE (*t) == VAR_DECL)
1507     {
1508       splay_tree_node n = splay_tree_lookup (target_remap,
1509                                              (splay_tree_key) *t);
1510       if (n)
1511         *t = (tree) n->value;
1512     }
1513
1514   return NULL_TREE;
1515 }
1516
1517 /* When we parse a default argument expression, we may create
1518    temporary variables via TARGET_EXPRs.  When we actually use the
1519    default-argument expression, we make a copy of the expression, but
1520    we must replace the temporaries with appropriate local versions.  */
1521
1522 tree
1523 break_out_target_exprs (tree t)
1524 {
1525   static int target_remap_count;
1526   static splay_tree target_remap;
1527
1528   if (!target_remap_count++)
1529     target_remap = splay_tree_new (splay_tree_compare_pointers,
1530                                    /*splay_tree_delete_key_fn=*/NULL,
1531                                    /*splay_tree_delete_value_fn=*/NULL);
1532   cp_walk_tree (&t, bot_manip, target_remap, NULL);
1533   cp_walk_tree (&t, bot_replace, target_remap, NULL);
1534
1535   if (!--target_remap_count)
1536     {
1537       splay_tree_delete (target_remap);
1538       target_remap = NULL;
1539     }
1540
1541   return t;
1542 }
1543
1544 /* Similar to `build_nt', but for template definitions of dependent
1545    expressions  */
1546
1547 tree
1548 build_min_nt (enum tree_code code, ...)
1549 {
1550   tree t;
1551   int length;
1552   int i;
1553   va_list p;
1554
1555   gcc_assert (TREE_CODE_CLASS (code) != tcc_vl_exp);
1556
1557   va_start (p, code);
1558
1559   t = make_node (code);
1560   length = TREE_CODE_LENGTH (code);
1561
1562   for (i = 0; i < length; i++)
1563     {
1564       tree x = va_arg (p, tree);
1565       TREE_OPERAND (t, i) = x;
1566     }
1567
1568   va_end (p);
1569   return t;
1570 }
1571
1572
1573 /* Similar to `build', but for template definitions.  */
1574
1575 tree
1576 build_min (enum tree_code code, tree tt, ...)
1577 {
1578   tree t;
1579   int length;
1580   int i;
1581   va_list p;
1582
1583   gcc_assert (TREE_CODE_CLASS (code) != tcc_vl_exp);
1584
1585   va_start (p, tt);
1586
1587   t = make_node (code);
1588   length = TREE_CODE_LENGTH (code);
1589   TREE_TYPE (t) = tt;
1590
1591   for (i = 0; i < length; i++)
1592     {
1593       tree x = va_arg (p, tree);
1594       TREE_OPERAND (t, i) = x;
1595       if (x && !TYPE_P (x) && TREE_SIDE_EFFECTS (x))
1596         TREE_SIDE_EFFECTS (t) = 1;
1597     }
1598
1599   va_end (p);
1600   return t;
1601 }
1602
1603 /* Similar to `build', but for template definitions of non-dependent
1604    expressions. NON_DEP is the non-dependent expression that has been
1605    built.  */
1606
1607 tree
1608 build_min_non_dep (enum tree_code code, tree non_dep, ...)
1609 {
1610   tree t;
1611   int length;
1612   int i;
1613   va_list p;
1614
1615   gcc_assert (TREE_CODE_CLASS (code) != tcc_vl_exp);
1616
1617   va_start (p, non_dep);
1618
1619   t = make_node (code);
1620   length = TREE_CODE_LENGTH (code);
1621   TREE_TYPE (t) = TREE_TYPE (non_dep);
1622   TREE_SIDE_EFFECTS (t) = TREE_SIDE_EFFECTS (non_dep);
1623
1624   for (i = 0; i < length; i++)
1625     {
1626       tree x = va_arg (p, tree);
1627       TREE_OPERAND (t, i) = x;
1628     }
1629
1630   if (code == COMPOUND_EXPR && TREE_CODE (non_dep) != COMPOUND_EXPR)
1631     /* This should not be considered a COMPOUND_EXPR, because it
1632        resolves to an overload.  */
1633     COMPOUND_EXPR_OVERLOADED (t) = 1;
1634
1635   va_end (p);
1636   return t;
1637 }
1638
1639 /* Similar to `build_call_list', but for template definitions of non-dependent
1640    expressions. NON_DEP is the non-dependent expression that has been
1641    built.  */
1642
1643 tree
1644 build_min_non_dep_call_list (tree non_dep, tree fn, tree arglist)
1645 {
1646   tree t = build_nt_call_list (fn, arglist);
1647   TREE_TYPE (t) = TREE_TYPE (non_dep);
1648   TREE_SIDE_EFFECTS (t) = TREE_SIDE_EFFECTS (non_dep);
1649   return t;
1650 }
1651
1652 tree
1653 get_type_decl (tree t)
1654 {
1655   if (TREE_CODE (t) == TYPE_DECL)
1656     return t;
1657   if (TYPE_P (t))
1658     return TYPE_STUB_DECL (t);
1659   gcc_assert (t == error_mark_node);
1660   return t;
1661 }
1662
1663 /* Returns the namespace that contains DECL, whether directly or
1664    indirectly.  */
1665
1666 tree
1667 decl_namespace_context (tree decl)
1668 {
1669   while (1)
1670     {
1671       if (TREE_CODE (decl) == NAMESPACE_DECL)
1672         return decl;
1673       else if (TYPE_P (decl))
1674         decl = CP_DECL_CONTEXT (TYPE_MAIN_DECL (decl));
1675       else
1676         decl = CP_DECL_CONTEXT (decl);
1677     }
1678 }
1679
1680 /* Returns true if decl is within an anonymous namespace, however deeply
1681    nested, or false otherwise.  */
1682
1683 bool
1684 decl_anon_ns_mem_p (const_tree decl)
1685 {
1686   while (1)
1687     {
1688       if (decl == NULL_TREE || decl == error_mark_node)
1689         return false;
1690       if (TREE_CODE (decl) == NAMESPACE_DECL
1691           && DECL_NAME (decl) == NULL_TREE)
1692         return true;
1693       /* Classes and namespaces inside anonymous namespaces have
1694          TREE_PUBLIC == 0, so we can shortcut the search.  */
1695       else if (TYPE_P (decl))
1696         return (TREE_PUBLIC (TYPE_NAME (decl)) == 0);
1697       else if (TREE_CODE (decl) == NAMESPACE_DECL)
1698         return (TREE_PUBLIC (decl) == 0);
1699       else
1700         decl = DECL_CONTEXT (decl);
1701     }
1702 }
1703
1704 /* Return truthvalue of whether T1 is the same tree structure as T2.
1705    Return 1 if they are the same. Return 0 if they are different.  */
1706
1707 bool
1708 cp_tree_equal (tree t1, tree t2)
1709 {
1710   enum tree_code code1, code2;
1711
1712   if (t1 == t2)
1713     return true;
1714   if (!t1 || !t2)
1715     return false;
1716
1717   for (code1 = TREE_CODE (t1);
1718        code1 == NOP_EXPR || code1 == CONVERT_EXPR
1719          || code1 == NON_LVALUE_EXPR;
1720        code1 = TREE_CODE (t1))
1721     t1 = TREE_OPERAND (t1, 0);
1722   for (code2 = TREE_CODE (t2);
1723        code2 == NOP_EXPR || code2 == CONVERT_EXPR
1724          || code1 == NON_LVALUE_EXPR;
1725        code2 = TREE_CODE (t2))
1726     t2 = TREE_OPERAND (t2, 0);
1727
1728   /* They might have become equal now.  */
1729   if (t1 == t2)
1730     return true;
1731
1732   if (code1 != code2)
1733     return false;
1734
1735   switch (code1)
1736     {
1737     case INTEGER_CST:
1738       return TREE_INT_CST_LOW (t1) == TREE_INT_CST_LOW (t2)
1739         && TREE_INT_CST_HIGH (t1) == TREE_INT_CST_HIGH (t2);
1740
1741     case REAL_CST:
1742       return REAL_VALUES_EQUAL (TREE_REAL_CST (t1), TREE_REAL_CST (t2));
1743
1744     case STRING_CST:
1745       return TREE_STRING_LENGTH (t1) == TREE_STRING_LENGTH (t2)
1746         && !memcmp (TREE_STRING_POINTER (t1), TREE_STRING_POINTER (t2),
1747                     TREE_STRING_LENGTH (t1));
1748
1749     case COMPLEX_CST:
1750       return cp_tree_equal (TREE_REALPART (t1), TREE_REALPART (t2))
1751         && cp_tree_equal (TREE_IMAGPART (t1), TREE_IMAGPART (t2));
1752
1753     case CONSTRUCTOR:
1754       /* We need to do this when determining whether or not two
1755          non-type pointer to member function template arguments
1756          are the same.  */
1757       if (!(same_type_p (TREE_TYPE (t1), TREE_TYPE (t2))
1758             /* The first operand is RTL.  */
1759             && TREE_OPERAND (t1, 0) == TREE_OPERAND (t2, 0)))
1760         return false;
1761       return cp_tree_equal (TREE_OPERAND (t1, 1), TREE_OPERAND (t2, 1));
1762
1763     case TREE_LIST:
1764       if (!cp_tree_equal (TREE_PURPOSE (t1), TREE_PURPOSE (t2)))
1765         return false;
1766       if (!cp_tree_equal (TREE_VALUE (t1), TREE_VALUE (t2)))
1767         return false;
1768       return cp_tree_equal (TREE_CHAIN (t1), TREE_CHAIN (t2));
1769
1770     case SAVE_EXPR:
1771       return cp_tree_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0));
1772
1773     case CALL_EXPR:
1774       {
1775         tree arg1, arg2;
1776         call_expr_arg_iterator iter1, iter2;
1777         if (!cp_tree_equal (CALL_EXPR_FN (t1), CALL_EXPR_FN (t2)))
1778           return false;
1779         for (arg1 = first_call_expr_arg (t1, &iter1),
1780                arg2 = first_call_expr_arg (t2, &iter2);
1781              arg1 && arg2;
1782              arg1 = next_call_expr_arg (&iter1),
1783                arg2 = next_call_expr_arg (&iter2))
1784           if (!cp_tree_equal (arg1, arg2))
1785             return false;
1786         return (arg1 || arg2);
1787       }
1788
1789     case TARGET_EXPR:
1790       {
1791         tree o1 = TREE_OPERAND (t1, 0);
1792         tree o2 = TREE_OPERAND (t2, 0);
1793
1794         /* Special case: if either target is an unallocated VAR_DECL,
1795            it means that it's going to be unified with whatever the
1796            TARGET_EXPR is really supposed to initialize, so treat it
1797            as being equivalent to anything.  */
1798         if (TREE_CODE (o1) == VAR_DECL && DECL_NAME (o1) == NULL_TREE
1799             && !DECL_RTL_SET_P (o1))
1800           /*Nop*/;
1801         else if (TREE_CODE (o2) == VAR_DECL && DECL_NAME (o2) == NULL_TREE
1802                  && !DECL_RTL_SET_P (o2))
1803           /*Nop*/;
1804         else if (!cp_tree_equal (o1, o2))
1805           return false;
1806
1807         return cp_tree_equal (TREE_OPERAND (t1, 1), TREE_OPERAND (t2, 1));
1808       }
1809
1810     case WITH_CLEANUP_EXPR:
1811       if (!cp_tree_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0)))
1812         return false;
1813       return cp_tree_equal (TREE_OPERAND (t1, 1), TREE_OPERAND (t1, 1));
1814
1815     case COMPONENT_REF:
1816       if (TREE_OPERAND (t1, 1) != TREE_OPERAND (t2, 1))
1817         return false;
1818       return cp_tree_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0));
1819
1820     case VAR_DECL:
1821     case PARM_DECL:
1822     case CONST_DECL:
1823     case FUNCTION_DECL:
1824     case TEMPLATE_DECL:
1825     case IDENTIFIER_NODE:
1826     case SSA_NAME:
1827       return false;
1828
1829     case BASELINK:
1830       return (BASELINK_BINFO (t1) == BASELINK_BINFO (t2)
1831               && BASELINK_ACCESS_BINFO (t1) == BASELINK_ACCESS_BINFO (t2)
1832               && cp_tree_equal (BASELINK_FUNCTIONS (t1),
1833                                 BASELINK_FUNCTIONS (t2)));
1834
1835     case TEMPLATE_PARM_INDEX:
1836       return (TEMPLATE_PARM_IDX (t1) == TEMPLATE_PARM_IDX (t2)
1837               && TEMPLATE_PARM_LEVEL (t1) == TEMPLATE_PARM_LEVEL (t2)
1838               && same_type_p (TREE_TYPE (TEMPLATE_PARM_DECL (t1)),
1839                               TREE_TYPE (TEMPLATE_PARM_DECL (t2))));
1840
1841     case TEMPLATE_ID_EXPR:
1842       {
1843         unsigned ix;
1844         tree vec1, vec2;
1845
1846         if (!cp_tree_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0)))
1847           return false;
1848         vec1 = TREE_OPERAND (t1, 1);
1849         vec2 = TREE_OPERAND (t2, 1);
1850
1851         if (!vec1 || !vec2)
1852           return !vec1 && !vec2;
1853
1854         if (TREE_VEC_LENGTH (vec1) != TREE_VEC_LENGTH (vec2))
1855           return false;
1856
1857         for (ix = TREE_VEC_LENGTH (vec1); ix--;)
1858           if (!cp_tree_equal (TREE_VEC_ELT (vec1, ix),
1859                               TREE_VEC_ELT (vec2, ix)))
1860             return false;
1861
1862         return true;
1863       }
1864
1865     case SIZEOF_EXPR:
1866     case ALIGNOF_EXPR:
1867       {
1868         tree o1 = TREE_OPERAND (t1, 0);
1869         tree o2 = TREE_OPERAND (t2, 0);
1870
1871         if (TREE_CODE (o1) != TREE_CODE (o2))
1872           return false;
1873         if (TYPE_P (o1))
1874           return same_type_p (o1, o2);
1875         else
1876           return cp_tree_equal (o1, o2);
1877       }
1878
1879     case MODOP_EXPR:
1880       {
1881         tree t1_op1, t2_op1;
1882
1883         if (!cp_tree_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0)))
1884           return false;
1885
1886         t1_op1 = TREE_OPERAND (t1, 1);
1887         t2_op1 = TREE_OPERAND (t2, 1);
1888         if (TREE_CODE (t1_op1) != TREE_CODE (t2_op1))
1889           return false;
1890
1891         return cp_tree_equal (TREE_OPERAND (t1, 2), TREE_OPERAND (t2, 2));
1892       }
1893
1894     case PTRMEM_CST:
1895       /* Two pointer-to-members are the same if they point to the same
1896          field or function in the same class.  */
1897       if (PTRMEM_CST_MEMBER (t1) != PTRMEM_CST_MEMBER (t2))
1898         return false;
1899
1900       return same_type_p (PTRMEM_CST_CLASS (t1), PTRMEM_CST_CLASS (t2));
1901
1902     case OVERLOAD:
1903       if (OVL_FUNCTION (t1) != OVL_FUNCTION (t2))
1904         return false;
1905       return cp_tree_equal (OVL_CHAIN (t1), OVL_CHAIN (t2));
1906
1907     case TRAIT_EXPR:
1908       if (TRAIT_EXPR_KIND (t1) != TRAIT_EXPR_KIND (t2))
1909         return false;
1910       return same_type_p (TRAIT_EXPR_TYPE1 (t1), TRAIT_EXPR_TYPE1 (t2))
1911         && same_type_p (TRAIT_EXPR_TYPE2 (t1), TRAIT_EXPR_TYPE2 (t2));
1912
1913     default:
1914       break;
1915     }
1916
1917   switch (TREE_CODE_CLASS (code1))
1918     {
1919     case tcc_unary:
1920     case tcc_binary:
1921     case tcc_comparison:
1922     case tcc_expression:
1923     case tcc_vl_exp:
1924     case tcc_reference:
1925     case tcc_statement:
1926       {
1927         int i, n;
1928
1929         n = TREE_OPERAND_LENGTH (t1);
1930         if (TREE_CODE_CLASS (code1) == tcc_vl_exp
1931             && n != TREE_OPERAND_LENGTH (t2))
1932           return false;
1933
1934         for (i = 0; i < n; ++i)
1935           if (!cp_tree_equal (TREE_OPERAND (t1, i), TREE_OPERAND (t2, i)))
1936             return false;
1937
1938         return true;
1939       }
1940
1941     case tcc_type:
1942       return same_type_p (t1, t2);
1943     default:
1944       gcc_unreachable ();
1945     }
1946   /* We can get here with --disable-checking.  */
1947   return false;
1948 }
1949
1950 /* The type of ARG when used as an lvalue.  */
1951
1952 tree
1953 lvalue_type (tree arg)
1954 {
1955   tree type = TREE_TYPE (arg);
1956   return type;
1957 }
1958
1959 /* The type of ARG for printing error messages; denote lvalues with
1960    reference types.  */
1961
1962 tree
1963 error_type (tree arg)
1964 {
1965   tree type = TREE_TYPE (arg);
1966
1967   if (TREE_CODE (type) == ARRAY_TYPE)
1968     ;
1969   else if (TREE_CODE (type) == ERROR_MARK)
1970     ;
1971   else if (real_lvalue_p (arg))
1972     type = build_reference_type (lvalue_type (arg));
1973   else if (IS_AGGR_TYPE (type))
1974     type = lvalue_type (arg);
1975
1976   return type;
1977 }
1978
1979 /* Does FUNCTION use a variable-length argument list?  */
1980
1981 int
1982 varargs_function_p (const_tree function)
1983 {
1984   const_tree parm = TYPE_ARG_TYPES (TREE_TYPE (function));
1985   for (; parm; parm = TREE_CHAIN (parm))
1986     if (TREE_VALUE (parm) == void_type_node)
1987       return 0;
1988   return 1;
1989 }
1990
1991 /* Returns 1 if decl is a member of a class.  */
1992
1993 int
1994 member_p (const_tree decl)
1995 {
1996   const_tree const ctx = DECL_CONTEXT (decl);
1997   return (ctx && TYPE_P (ctx));
1998 }
1999
2000 /* Create a placeholder for member access where we don't actually have an
2001    object that the access is against.  */
2002
2003 tree
2004 build_dummy_object (tree type)
2005 {
2006   tree decl = build1 (NOP_EXPR, build_pointer_type (type), void_zero_node);
2007   return build_indirect_ref (decl, NULL);
2008 }
2009
2010 /* We've gotten a reference to a member of TYPE.  Return *this if appropriate,
2011    or a dummy object otherwise.  If BINFOP is non-0, it is filled with the
2012    binfo path from current_class_type to TYPE, or 0.  */
2013
2014 tree
2015 maybe_dummy_object (tree type, tree* binfop)
2016 {
2017   tree decl, context;
2018   tree binfo;
2019
2020   if (current_class_type
2021       && (binfo = lookup_base (current_class_type, type,
2022                                ba_unique | ba_quiet, NULL)))
2023     context = current_class_type;
2024   else
2025     {
2026       /* Reference from a nested class member function.  */
2027       context = type;
2028       binfo = TYPE_BINFO (type);
2029     }
2030
2031   if (binfop)
2032     *binfop = binfo;
2033
2034   if (current_class_ref && context == current_class_type
2035       /* Kludge: Make sure that current_class_type is actually
2036          correct.  It might not be if we're in the middle of
2037          tsubst_default_argument.  */
2038       && same_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (current_class_ref)),
2039                       current_class_type))
2040     decl = current_class_ref;
2041   else
2042     decl = build_dummy_object (context);
2043
2044   return decl;
2045 }
2046
2047 /* Returns 1 if OB is a placeholder object, or a pointer to one.  */
2048
2049 int
2050 is_dummy_object (const_tree ob)
2051 {
2052   if (TREE_CODE (ob) == INDIRECT_REF)
2053     ob = TREE_OPERAND (ob, 0);
2054   return (TREE_CODE (ob) == NOP_EXPR
2055           && TREE_OPERAND (ob, 0) == void_zero_node);
2056 }
2057
2058 /* Returns 1 iff type T is a POD type, as defined in [basic.types].  */
2059
2060 int
2061 pod_type_p (const_tree t)
2062 {
2063   /* This CONST_CAST is okay because strip_array_types returns it's
2064      argument unmodified and we assign it to a const_tree.  */
2065   t = strip_array_types (CONST_CAST_TREE(t));
2066
2067   if (t == error_mark_node)
2068     return 1;
2069   if (INTEGRAL_TYPE_P (t))
2070     return 1;  /* integral, character or enumeral type */
2071   if (FLOAT_TYPE_P (t))
2072     return 1;
2073   if (TYPE_PTR_P (t))
2074     return 1; /* pointer to non-member */
2075   if (TYPE_PTR_TO_MEMBER_P (t))
2076     return 1; /* pointer to member */
2077
2078   if (TREE_CODE (t) == VECTOR_TYPE)
2079     return 1; /* vectors are (small) arrays of scalars */
2080
2081   if (! CLASS_TYPE_P (t))
2082     return 0; /* other non-class type (reference or function) */
2083   if (CLASSTYPE_NON_POD_P (t))
2084     return 0;
2085   return 1;
2086 }
2087
2088 /* Nonzero iff type T is a class template implicit specialization.  */
2089
2090 bool
2091 class_tmpl_impl_spec_p (const_tree t)
2092 {
2093   return CLASS_TYPE_P (t) && CLASSTYPE_TEMPLATE_INSTANTIATION (t);
2094 }
2095
2096 /* Returns 1 iff zero initialization of type T means actually storing
2097    zeros in it.  */
2098
2099 int
2100 zero_init_p (const_tree t)
2101 {
2102   /* This CONST_CAST is okay because strip_array_types returns it's
2103      argument unmodified and we assign it to a const_tree.  */
2104   t = strip_array_types (CONST_CAST_TREE(t));
2105
2106   if (t == error_mark_node)
2107     return 1;
2108
2109   /* NULL pointers to data members are initialized with -1.  */
2110   if (TYPE_PTRMEM_P (t))
2111     return 0;
2112
2113   /* Classes that contain types that can't be zero-initialized, cannot
2114      be zero-initialized themselves.  */
2115   if (CLASS_TYPE_P (t) && CLASSTYPE_NON_ZERO_INIT_P (t))
2116     return 0;
2117
2118   return 1;
2119 }
2120
2121 /* Table of valid C++ attributes.  */
2122 const struct attribute_spec cxx_attribute_table[] =
2123 {
2124   /* { name, min_len, max_len, decl_req, type_req, fn_type_req, handler } */
2125   { "java_interface", 0, 0, false, false, false, handle_java_interface_attribute },
2126   { "com_interface",  0, 0, false, false, false, handle_com_interface_attribute },
2127   { "init_priority",  1, 1, true,  false, false, handle_init_priority_attribute },
2128   { NULL,             0, 0, false, false, false, NULL }
2129 };
2130
2131 /* Handle a "java_interface" attribute; arguments as in
2132    struct attribute_spec.handler.  */
2133 static tree
2134 handle_java_interface_attribute (tree* node,
2135                                  tree name,
2136                                  tree args ATTRIBUTE_UNUSED ,
2137                                  int flags,
2138                                  bool* no_add_attrs)
2139 {
2140   if (DECL_P (*node)
2141       || !CLASS_TYPE_P (*node)
2142       || !TYPE_FOR_JAVA (*node))
2143     {
2144       error ("%qE attribute can only be applied to Java class definitions",
2145              name);
2146       *no_add_attrs = true;
2147       return NULL_TREE;
2148     }
2149   if (!(flags & (int) ATTR_FLAG_TYPE_IN_PLACE))
2150     *node = build_variant_type_copy (*node);
2151   TYPE_JAVA_INTERFACE (*node) = 1;
2152
2153   return NULL_TREE;
2154 }
2155
2156 /* Handle a "com_interface" attribute; arguments as in
2157    struct attribute_spec.handler.  */
2158 static tree
2159 handle_com_interface_attribute (tree* node,
2160                                 tree name,
2161                                 tree args ATTRIBUTE_UNUSED ,
2162                                 int flags ATTRIBUTE_UNUSED ,
2163                                 bool* no_add_attrs)
2164 {
2165   static int warned;
2166
2167   *no_add_attrs = true;
2168
2169   if (DECL_P (*node)
2170       || !CLASS_TYPE_P (*node)
2171       || *node != TYPE_MAIN_VARIANT (*node))
2172     {
2173       warning (OPT_Wattributes, "%qE attribute can only be applied "
2174                "to class definitions", name);
2175       return NULL_TREE;
2176     }
2177
2178   if (!warned++)
2179     warning (0, "%qE is obsolete; g++ vtables are now COM-compatible by default",
2180              name);
2181
2182   return NULL_TREE;
2183 }
2184
2185 /* Handle an "init_priority" attribute; arguments as in
2186    struct attribute_spec.handler.  */
2187 static tree
2188 handle_init_priority_attribute (tree* node,
2189                                 tree name,
2190                                 tree args,
2191                                 int flags ATTRIBUTE_UNUSED ,
2192                                 bool* no_add_attrs)
2193 {
2194   tree initp_expr = TREE_VALUE (args);
2195   tree decl = *node;
2196   tree type = TREE_TYPE (decl);
2197   int pri;
2198
2199   STRIP_NOPS (initp_expr);
2200
2201   if (!initp_expr || TREE_CODE (initp_expr) != INTEGER_CST)
2202     {
2203       error ("requested init_priority is not an integer constant");
2204       *no_add_attrs = true;
2205       return NULL_TREE;
2206     }
2207
2208   pri = TREE_INT_CST_LOW (initp_expr);
2209
2210   type = strip_array_types (type);
2211
2212   if (decl == NULL_TREE
2213       || TREE_CODE (decl) != VAR_DECL
2214       || !TREE_STATIC (decl)
2215       || DECL_EXTERNAL (decl)
2216       || (TREE_CODE (type) != RECORD_TYPE
2217           && TREE_CODE (type) != UNION_TYPE)
2218       /* Static objects in functions are initialized the
2219          first time control passes through that
2220          function. This is not precise enough to pin down an
2221          init_priority value, so don't allow it.  */
2222       || current_function_decl)
2223     {
2224       error ("can only use %qE attribute on file-scope definitions "
2225              "of objects of class type", name);
2226       *no_add_attrs = true;
2227       return NULL_TREE;
2228     }
2229
2230   if (pri > MAX_INIT_PRIORITY || pri <= 0)
2231     {
2232       error ("requested init_priority is out of range");
2233       *no_add_attrs = true;
2234       return NULL_TREE;
2235     }
2236
2237   /* Check for init_priorities that are reserved for
2238      language and runtime support implementations.*/
2239   if (pri <= MAX_RESERVED_INIT_PRIORITY)
2240     {
2241       warning
2242         (0, "requested init_priority is reserved for internal use");
2243     }
2244
2245   if (SUPPORTS_INIT_PRIORITY)
2246     {
2247       SET_DECL_INIT_PRIORITY (decl, pri);
2248       DECL_HAS_INIT_PRIORITY_P (decl) = 1;
2249       return NULL_TREE;
2250     }
2251   else
2252     {
2253       error ("%qE attribute is not supported on this platform", name);
2254       *no_add_attrs = true;
2255       return NULL_TREE;
2256     }
2257 }
2258
2259 /* Return a new PTRMEM_CST of the indicated TYPE.  The MEMBER is the
2260    thing pointed to by the constant.  */
2261
2262 tree
2263 make_ptrmem_cst (tree type, tree member)
2264 {
2265   tree ptrmem_cst = make_node (PTRMEM_CST);
2266   TREE_TYPE (ptrmem_cst) = type;
2267   PTRMEM_CST_MEMBER (ptrmem_cst) = member;
2268   return ptrmem_cst;
2269 }
2270
2271 /* Build a variant of TYPE that has the indicated ATTRIBUTES.  May
2272    return an existing type if an appropriate type already exists.  */
2273
2274 tree
2275 cp_build_type_attribute_variant (tree type, tree attributes)
2276 {
2277   tree new_type;
2278
2279   new_type = build_type_attribute_variant (type, attributes);
2280   if (TREE_CODE (new_type) == FUNCTION_TYPE
2281       && (TYPE_RAISES_EXCEPTIONS (new_type)
2282           != TYPE_RAISES_EXCEPTIONS (type)))
2283     new_type = build_exception_variant (new_type,
2284                                         TYPE_RAISES_EXCEPTIONS (type));
2285
2286   /* Making a new main variant of a class type is broken.  */
2287   gcc_assert (!CLASS_TYPE_P (type) || new_type == type);
2288     
2289   return new_type;
2290 }
2291
2292 /* Return TRUE if TYPE1 and TYPE2 are identical for type hashing purposes.
2293    Called only after doing all language independent checks.  Only
2294    to check TYPE_RAISES_EXCEPTIONS for FUNCTION_TYPE, the rest is already
2295    compared in type_hash_eq.  */
2296
2297 bool
2298 cxx_type_hash_eq (const_tree typea, const_tree typeb)
2299 {
2300   gcc_assert (TREE_CODE (typea) == FUNCTION_TYPE);
2301
2302   return comp_except_specs (TYPE_RAISES_EXCEPTIONS (typea),
2303                             TYPE_RAISES_EXCEPTIONS (typeb), 1);
2304 }
2305
2306 /* Apply FUNC to all language-specific sub-trees of TP in a pre-order
2307    traversal.  Called from walk_tree.  */
2308
2309 tree
2310 cp_walk_subtrees (tree *tp, int *walk_subtrees_p, walk_tree_fn func,
2311                   void *data, struct pointer_set_t *pset)
2312 {
2313   enum tree_code code = TREE_CODE (*tp);
2314   tree result;
2315
2316 #define WALK_SUBTREE(NODE)                              \
2317   do                                                    \
2318     {                                                   \
2319       result = cp_walk_tree (&(NODE), func, data, pset);        \
2320       if (result) goto out;                             \
2321     }                                                   \
2322   while (0)
2323
2324   /* Not one of the easy cases.  We must explicitly go through the
2325      children.  */
2326   result = NULL_TREE;
2327   switch (code)
2328     {
2329     case DEFAULT_ARG:
2330     case TEMPLATE_TEMPLATE_PARM:
2331     case BOUND_TEMPLATE_TEMPLATE_PARM:
2332     case UNBOUND_CLASS_TEMPLATE:
2333     case TEMPLATE_PARM_INDEX:
2334     case TEMPLATE_TYPE_PARM:
2335     case TYPENAME_TYPE:
2336     case TYPEOF_TYPE:
2337       /* None of these have subtrees other than those already walked
2338          above.  */
2339       *walk_subtrees_p = 0;
2340       break;
2341
2342     case BASELINK:
2343       WALK_SUBTREE (BASELINK_FUNCTIONS (*tp));
2344       *walk_subtrees_p = 0;
2345       break;
2346
2347     case PTRMEM_CST:
2348       WALK_SUBTREE (TREE_TYPE (*tp));
2349       *walk_subtrees_p = 0;
2350       break;
2351
2352     case TREE_LIST:
2353       WALK_SUBTREE (TREE_PURPOSE (*tp));
2354       break;
2355
2356     case OVERLOAD:
2357       WALK_SUBTREE (OVL_FUNCTION (*tp));
2358       WALK_SUBTREE (OVL_CHAIN (*tp));
2359       *walk_subtrees_p = 0;
2360       break;
2361
2362     case USING_DECL:
2363       WALK_SUBTREE (DECL_NAME (*tp));
2364       WALK_SUBTREE (USING_DECL_SCOPE (*tp));
2365       WALK_SUBTREE (USING_DECL_DECLS (*tp));
2366       *walk_subtrees_p = 0;
2367       break;
2368
2369     case RECORD_TYPE:
2370       if (TYPE_PTRMEMFUNC_P (*tp))
2371         WALK_SUBTREE (TYPE_PTRMEMFUNC_FN_TYPE (*tp));
2372       break;
2373
2374     case TYPE_ARGUMENT_PACK:
2375     case NONTYPE_ARGUMENT_PACK:
2376       {
2377         tree args = ARGUMENT_PACK_ARGS (*tp);
2378         int i, len = TREE_VEC_LENGTH (args);
2379         for (i = 0; i < len; i++)
2380           WALK_SUBTREE (TREE_VEC_ELT (args, i));
2381       }
2382       break;
2383
2384     case TYPE_PACK_EXPANSION:
2385       WALK_SUBTREE (TREE_TYPE (*tp));
2386       *walk_subtrees_p = 0;
2387       break;
2388       
2389     case EXPR_PACK_EXPANSION:
2390       WALK_SUBTREE (TREE_OPERAND (*tp, 0));
2391       *walk_subtrees_p = 0;
2392       break;
2393
2394     case CAST_EXPR:
2395       if (TREE_TYPE (*tp))
2396         WALK_SUBTREE (TREE_TYPE (*tp));
2397
2398       {
2399         int i;
2400         for (i = 0; i < TREE_CODE_LENGTH (TREE_CODE (*tp)); ++i)
2401           WALK_SUBTREE (TREE_OPERAND (*tp, i));
2402       }
2403       *walk_subtrees_p = 0;
2404       break;
2405
2406     case TRAIT_EXPR:
2407       WALK_SUBTREE (TRAIT_EXPR_TYPE1 (*tp));
2408       WALK_SUBTREE (TRAIT_EXPR_TYPE2 (*tp));
2409       *walk_subtrees_p = 0;
2410       break;
2411
2412     case DECLTYPE_TYPE:
2413       WALK_SUBTREE (DECLTYPE_TYPE_EXPR (*tp));
2414       *walk_subtrees_p = 0;
2415       break;
2416  
2417
2418     default:
2419       return NULL_TREE;
2420     }
2421
2422   /* We didn't find what we were looking for.  */
2423  out:
2424   return result;
2425
2426 #undef WALK_SUBTREE
2427 }
2428
2429 /* Like save_expr, but for C++.  */
2430
2431 tree
2432 cp_save_expr (tree expr)
2433 {
2434   /* There is no reason to create a SAVE_EXPR within a template; if
2435      needed, we can create the SAVE_EXPR when instantiating the
2436      template.  Furthermore, the middle-end cannot handle C++-specific
2437      tree codes.  */
2438   if (processing_template_decl)
2439     return expr;
2440   return save_expr (expr);
2441 }
2442
2443 /* Initialize tree.c.  */
2444
2445 void
2446 init_tree (void)
2447 {
2448   list_hash_table = htab_create_ggc (31, list_hash, list_hash_eq, NULL);
2449 }
2450
2451 /* Returns the kind of special function that DECL (a FUNCTION_DECL)
2452    is.  Note that sfk_none is zero, so this function can be used as a
2453    predicate to test whether or not DECL is a special function.  */
2454
2455 special_function_kind
2456 special_function_p (const_tree decl)
2457 {
2458   /* Rather than doing all this stuff with magic names, we should
2459      probably have a field of type `special_function_kind' in
2460      DECL_LANG_SPECIFIC.  */
2461   if (DECL_COPY_CONSTRUCTOR_P (decl))
2462     return sfk_copy_constructor;
2463   if (DECL_CONSTRUCTOR_P (decl))
2464     return sfk_constructor;
2465   if (DECL_OVERLOADED_OPERATOR_P (decl) == NOP_EXPR)
2466     return sfk_assignment_operator;
2467   if (DECL_MAYBE_IN_CHARGE_DESTRUCTOR_P (decl))
2468     return sfk_destructor;
2469   if (DECL_COMPLETE_DESTRUCTOR_P (decl))
2470     return sfk_complete_destructor;
2471   if (DECL_BASE_DESTRUCTOR_P (decl))
2472     return sfk_base_destructor;
2473   if (DECL_DELETING_DESTRUCTOR_P (decl))
2474     return sfk_deleting_destructor;
2475   if (DECL_CONV_FN_P (decl))
2476     return sfk_conversion;
2477
2478   return sfk_none;
2479 }
2480
2481 /* Returns nonzero if TYPE is a character type, including wchar_t.  */
2482
2483 int
2484 char_type_p (tree type)
2485 {
2486   return (same_type_p (type, char_type_node)
2487           || same_type_p (type, unsigned_char_type_node)
2488           || same_type_p (type, signed_char_type_node)
2489           || same_type_p (type, wchar_type_node));
2490 }
2491
2492 /* Returns the kind of linkage associated with the indicated DECL.  Th
2493    value returned is as specified by the language standard; it is
2494    independent of implementation details regarding template
2495    instantiation, etc.  For example, it is possible that a declaration
2496    to which this function assigns external linkage would not show up
2497    as a global symbol when you run `nm' on the resulting object file.  */
2498
2499 linkage_kind
2500 decl_linkage (tree decl)
2501 {
2502   /* This function doesn't attempt to calculate the linkage from first
2503      principles as given in [basic.link].  Instead, it makes use of
2504      the fact that we have already set TREE_PUBLIC appropriately, and
2505      then handles a few special cases.  Ideally, we would calculate
2506      linkage first, and then transform that into a concrete
2507      implementation.  */
2508
2509   /* Things that don't have names have no linkage.  */
2510   if (!DECL_NAME (decl))
2511     return lk_none;
2512
2513   /* Fields have no linkage.  */
2514   if (TREE_CODE (decl) == FIELD_DECL)
2515     return lk_none;
2516
2517   /* Things that are TREE_PUBLIC have external linkage.  */
2518   if (TREE_PUBLIC (decl))
2519     return lk_external;
2520
2521   if (TREE_CODE (decl) == NAMESPACE_DECL)
2522     return lk_external;
2523
2524   /* Linkage of a CONST_DECL depends on the linkage of the enumeration
2525      type.  */
2526   if (TREE_CODE (decl) == CONST_DECL)
2527     return decl_linkage (TYPE_NAME (TREE_TYPE (decl)));
2528
2529   /* Some things that are not TREE_PUBLIC have external linkage, too.
2530      For example, on targets that don't have weak symbols, we make all
2531      template instantiations have internal linkage (in the object
2532      file), but the symbols should still be treated as having external
2533      linkage from the point of view of the language.  */
2534   if (TREE_CODE (decl) != TYPE_DECL && DECL_LANG_SPECIFIC (decl)
2535       && DECL_COMDAT (decl))
2536     return lk_external;
2537
2538   /* Things in local scope do not have linkage, if they don't have
2539      TREE_PUBLIC set.  */
2540   if (decl_function_context (decl))
2541     return lk_none;
2542
2543   /* Members of the anonymous namespace also have TREE_PUBLIC unset, but
2544      are considered to have external linkage for language purposes.  DECLs
2545      really meant to have internal linkage have DECL_THIS_STATIC set.  */
2546   if (TREE_CODE (decl) == TYPE_DECL)
2547     return lk_external;
2548   if (TREE_CODE (decl) == VAR_DECL || TREE_CODE (decl) == FUNCTION_DECL)
2549     {
2550       if (!DECL_THIS_STATIC (decl))
2551         return lk_external;
2552
2553       /* Static data members and static member functions from classes
2554          in anonymous namespace also don't have TREE_PUBLIC set.  */
2555       if (DECL_CLASS_CONTEXT (decl))
2556         return lk_external;
2557     }
2558
2559   /* Everything else has internal linkage.  */
2560   return lk_internal;
2561 }
2562 \f
2563 /* EXP is an expression that we want to pre-evaluate.  Returns (in
2564    *INITP) an expression that will perform the pre-evaluation.  The
2565    value returned by this function is a side-effect free expression
2566    equivalent to the pre-evaluated expression.  Callers must ensure
2567    that *INITP is evaluated before EXP.  */
2568
2569 tree
2570 stabilize_expr (tree exp, tree* initp)
2571 {
2572   tree init_expr;
2573
2574   if (!TREE_SIDE_EFFECTS (exp))
2575     init_expr = NULL_TREE;
2576   else if (!real_lvalue_p (exp)
2577            || !TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (exp)))
2578     {
2579       init_expr = get_target_expr (exp);
2580       exp = TARGET_EXPR_SLOT (init_expr);
2581     }
2582   else
2583     {
2584       exp = build_unary_op (ADDR_EXPR, exp, 1);
2585       init_expr = get_target_expr (exp);
2586       exp = TARGET_EXPR_SLOT (init_expr);
2587       exp = build_indirect_ref (exp, 0);
2588     }
2589   *initp = init_expr;
2590
2591   gcc_assert (!TREE_SIDE_EFFECTS (exp));
2592   return exp;
2593 }
2594
2595 /* Add NEW, an expression whose value we don't care about, after the
2596    similar expression ORIG.  */
2597
2598 tree
2599 add_stmt_to_compound (tree orig, tree new)
2600 {
2601   if (!new || !TREE_SIDE_EFFECTS (new))
2602     return orig;
2603   if (!orig || !TREE_SIDE_EFFECTS (orig))
2604     return new;
2605   return build2 (COMPOUND_EXPR, void_type_node, orig, new);
2606 }
2607
2608 /* Like stabilize_expr, but for a call whose arguments we want to
2609    pre-evaluate.  CALL is modified in place to use the pre-evaluated
2610    arguments, while, upon return, *INITP contains an expression to
2611    compute the arguments.  */
2612
2613 void
2614 stabilize_call (tree call, tree *initp)
2615 {
2616   tree inits = NULL_TREE;
2617   int i;
2618   int nargs = call_expr_nargs (call);
2619
2620   if (call == error_mark_node || processing_template_decl)
2621     {
2622       *initp = NULL_TREE;
2623       return;
2624     }
2625
2626   gcc_assert (TREE_CODE (call) == CALL_EXPR);
2627
2628   for (i = 0; i < nargs; i++)
2629     {
2630       tree init;
2631       CALL_EXPR_ARG (call, i) =
2632         stabilize_expr (CALL_EXPR_ARG (call, i), &init);
2633       inits = add_stmt_to_compound (inits, init);
2634     }
2635
2636   *initp = inits;
2637 }
2638
2639 /* Like stabilize_expr, but for an AGGR_INIT_EXPR whose arguments we want
2640    to pre-evaluate.  CALL is modified in place to use the pre-evaluated
2641    arguments, while, upon return, *INITP contains an expression to
2642    compute the arguments.  */
2643
2644 void
2645 stabilize_aggr_init (tree call, tree *initp)
2646 {
2647   tree inits = NULL_TREE;
2648   int i;
2649   int nargs = aggr_init_expr_nargs (call);
2650
2651   if (call == error_mark_node)
2652     return;
2653
2654   gcc_assert (TREE_CODE (call) == AGGR_INIT_EXPR);
2655
2656   for (i = 0; i < nargs; i++)
2657     {
2658       tree init;
2659       AGGR_INIT_EXPR_ARG (call, i) =
2660         stabilize_expr (AGGR_INIT_EXPR_ARG (call, i), &init);
2661       inits = add_stmt_to_compound (inits, init);
2662     }
2663
2664   *initp = inits;
2665 }
2666
2667 /* Like stabilize_expr, but for an initialization.  
2668
2669    If the initialization is for an object of class type, this function
2670    takes care not to introduce additional temporaries.
2671
2672    Returns TRUE iff the expression was successfully pre-evaluated,
2673    i.e., if INIT is now side-effect free, except for, possible, a
2674    single call to a constructor.  */
2675
2676 bool
2677 stabilize_init (tree init, tree *initp)
2678 {
2679   tree t = init;
2680
2681   *initp = NULL_TREE;
2682
2683   if (t == error_mark_node || processing_template_decl)
2684     return true;
2685
2686   if (TREE_CODE (t) == INIT_EXPR
2687       && TREE_CODE (TREE_OPERAND (t, 1)) != TARGET_EXPR)
2688     {
2689       TREE_OPERAND (t, 1) = stabilize_expr (TREE_OPERAND (t, 1), initp);
2690       return true;
2691     }
2692
2693   if (TREE_CODE (t) == INIT_EXPR)
2694     t = TREE_OPERAND (t, 1);
2695   if (TREE_CODE (t) == TARGET_EXPR)
2696     t = TARGET_EXPR_INITIAL (t);
2697   if (TREE_CODE (t) == COMPOUND_EXPR)
2698     t = expr_last (t);
2699   if (TREE_CODE (t) == CONSTRUCTOR
2700       && EMPTY_CONSTRUCTOR_P (t))
2701     /* Default-initialization.  */
2702     return true;
2703
2704   /* If the initializer is a COND_EXPR, we can't preevaluate
2705      anything.  */
2706   if (TREE_CODE (t) == COND_EXPR)
2707     return false;
2708
2709   if (TREE_CODE (t) == CALL_EXPR)
2710     {
2711       stabilize_call (t, initp);
2712       return true;
2713     }
2714
2715   if (TREE_CODE (t) == AGGR_INIT_EXPR)
2716     {
2717       stabilize_aggr_init (t, initp);
2718       return true;
2719     }
2720
2721   /* The initialization is being performed via a bitwise copy -- and
2722      the item copied may have side effects.  */
2723   return TREE_SIDE_EFFECTS (init);
2724 }
2725
2726 /* Like "fold", but should be used whenever we might be processing the
2727    body of a template.  */
2728
2729 tree
2730 fold_if_not_in_template (tree expr)
2731 {
2732   /* In the body of a template, there is never any need to call
2733      "fold".  We will call fold later when actually instantiating the
2734      template.  Integral constant expressions in templates will be
2735      evaluated via fold_non_dependent_expr, as necessary.  */
2736   if (processing_template_decl)
2737     return expr;
2738
2739   /* Fold C++ front-end specific tree codes.  */
2740   if (TREE_CODE (expr) == UNARY_PLUS_EXPR)
2741     return fold_convert (TREE_TYPE (expr), TREE_OPERAND (expr, 0));
2742
2743   return fold (expr);
2744 }
2745
2746 /* Returns true if a cast to TYPE may appear in an integral constant
2747    expression.  */
2748
2749 bool
2750 cast_valid_in_integral_constant_expression_p (tree type)
2751 {
2752   return (INTEGRAL_OR_ENUMERATION_TYPE_P (type)
2753           || dependent_type_p (type)
2754           || type == error_mark_node);
2755 }
2756
2757 \f
2758 #if defined ENABLE_TREE_CHECKING && (GCC_VERSION >= 2007)
2759 /* Complain that some language-specific thing hanging off a tree
2760    node has been accessed improperly.  */
2761
2762 void
2763 lang_check_failed (const char* file, int line, const char* function)
2764 {
2765   internal_error ("lang_* check: failed in %s, at %s:%d",
2766                   function, trim_filename (file), line);
2767 }
2768 #endif /* ENABLE_TREE_CHECKING */
2769
2770 #include "gt-cp-tree.h"