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