OSDN Git Service

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