OSDN Git Service

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