OSDN Git Service

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