OSDN Git Service

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