OSDN Git Service

PR c++/15759
[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         u = build_cplus_new
1177           (TREE_TYPE (t), break_out_target_exprs (TREE_OPERAND (t, 1)));
1178       else
1179         u = build_target_expr_with_type
1180           (break_out_target_exprs (TREE_OPERAND (t, 1)), TREE_TYPE (t));
1181
1182       /* Map the old variable to the new one.  */
1183       splay_tree_insert (target_remap,
1184                          (splay_tree_key) TREE_OPERAND (t, 0),
1185                          (splay_tree_value) TREE_OPERAND (u, 0));
1186
1187       /* Replace the old expression with the new version.  */
1188       *tp = u;
1189       /* We don't have to go below this point; the recursive call to
1190          break_out_target_exprs will have handled anything below this
1191          point.  */
1192       *walk_subtrees = 0;
1193       return NULL_TREE;
1194     }
1195
1196   /* Make a copy of this node.  */
1197   return copy_tree_r (tp, walk_subtrees, NULL);
1198 }
1199
1200 /* Replace all remapped VAR_DECLs in T with their new equivalents.
1201    DATA is really a splay-tree mapping old variables to new
1202    variables.  */
1203
1204 static tree
1205 bot_replace (tree* t,
1206              int* walk_subtrees ATTRIBUTE_UNUSED ,
1207              void* data)
1208 {
1209   splay_tree target_remap = ((splay_tree) data);
1210
1211   if (TREE_CODE (*t) == VAR_DECL)
1212     {
1213       splay_tree_node n = splay_tree_lookup (target_remap,
1214                                              (splay_tree_key) *t);
1215       if (n)
1216         *t = (tree) n->value;
1217     }
1218
1219   return NULL_TREE;
1220 }
1221
1222 /* When we parse a default argument expression, we may create
1223    temporary variables via TARGET_EXPRs.  When we actually use the
1224    default-argument expression, we make a copy of the expression, but
1225    we must replace the temporaries with appropriate local versions.  */
1226
1227 tree
1228 break_out_target_exprs (tree t)
1229 {
1230   static int target_remap_count;
1231   static splay_tree target_remap;
1232
1233   if (!target_remap_count++)
1234     target_remap = splay_tree_new (splay_tree_compare_pointers,
1235                                    /*splay_tree_delete_key_fn=*/NULL,
1236                                    /*splay_tree_delete_value_fn=*/NULL);
1237   walk_tree (&t, bot_manip, target_remap, NULL);
1238   walk_tree (&t, bot_replace, target_remap, NULL);
1239
1240   if (!--target_remap_count)
1241     {
1242       splay_tree_delete (target_remap);
1243       target_remap = NULL;
1244     }
1245
1246   return t;
1247 }
1248
1249 /* Similar to `build_nt', but for template definitions of dependent
1250    expressions  */
1251
1252 tree
1253 build_min_nt (enum tree_code code, ...)
1254 {
1255   tree t;
1256   int length;
1257   int i;
1258   va_list p;
1259
1260   va_start (p, code);
1261
1262   t = make_node (code);
1263   length = TREE_CODE_LENGTH (code);
1264
1265   for (i = 0; i < length; i++)
1266     {
1267       tree x = va_arg (p, tree);
1268       TREE_OPERAND (t, i) = x;
1269     }
1270
1271   va_end (p);
1272   return t;
1273 }
1274
1275 /* Similar to `build', but for template definitions.  */
1276
1277 tree
1278 build_min (enum tree_code code, tree tt, ...)
1279 {
1280   tree t;
1281   int length;
1282   int i;
1283   va_list p;
1284
1285   va_start (p, tt);
1286
1287   t = make_node (code);
1288   length = TREE_CODE_LENGTH (code);
1289   TREE_TYPE (t) = tt;
1290
1291   for (i = 0; i < length; i++)
1292     {
1293       tree x = va_arg (p, tree);
1294       TREE_OPERAND (t, i) = x;
1295       if (x && !TYPE_P (x) && TREE_SIDE_EFFECTS (x))
1296         TREE_SIDE_EFFECTS (t) = 1;
1297     }
1298
1299   va_end (p);
1300   return t;
1301 }
1302
1303 /* Similar to `build', but for template definitions of non-dependent
1304    expressions. NON_DEP is the non-dependent expression that has been
1305    built.  */
1306
1307 tree
1308 build_min_non_dep (enum tree_code code, tree non_dep, ...)
1309 {
1310   tree t;
1311   int length;
1312   int i;
1313   va_list p;
1314
1315   va_start (p, non_dep);
1316
1317   t = make_node (code);
1318   length = TREE_CODE_LENGTH (code);
1319   TREE_TYPE (t) = TREE_TYPE (non_dep);
1320   TREE_SIDE_EFFECTS (t) = TREE_SIDE_EFFECTS (non_dep);
1321
1322   for (i = 0; i < length; i++)
1323     {
1324       tree x = va_arg (p, tree);
1325       TREE_OPERAND (t, i) = x;
1326     }
1327
1328   if (code == COMPOUND_EXPR && TREE_CODE (non_dep) != COMPOUND_EXPR)
1329     /* This should not be considered a COMPOUND_EXPR, because it
1330        resolves to an overload.  */
1331     COMPOUND_EXPR_OVERLOADED (t) = 1;
1332
1333   va_end (p);
1334   return t;
1335 }
1336
1337 tree
1338 get_type_decl (tree t)
1339 {
1340   if (TREE_CODE (t) == TYPE_DECL)
1341     return t;
1342   if (TYPE_P (t))
1343     return TYPE_STUB_DECL (t);
1344   gcc_assert (t == error_mark_node);
1345   return t;
1346 }
1347
1348 /* Returns the namespace that contains DECL, whether directly or
1349    indirectly.  */
1350
1351 tree
1352 decl_namespace_context (tree decl)
1353 {
1354   while (1)
1355     {
1356       if (TREE_CODE (decl) == NAMESPACE_DECL)
1357         return decl;
1358       else if (TYPE_P (decl))
1359         decl = CP_DECL_CONTEXT (TYPE_MAIN_DECL (decl));
1360       else
1361         decl = CP_DECL_CONTEXT (decl);
1362     }
1363 }
1364
1365 /* Return truthvalue of whether T1 is the same tree structure as T2.
1366    Return 1 if they are the same. Return 0 if they are different.  */
1367
1368 bool
1369 cp_tree_equal (tree t1, tree t2)
1370 {
1371   enum tree_code code1, code2;
1372
1373   if (t1 == t2)
1374     return true;
1375   if (!t1 || !t2)
1376     return false;
1377
1378   for (code1 = TREE_CODE (t1);
1379        code1 == NOP_EXPR || code1 == CONVERT_EXPR
1380          || code1 == NON_LVALUE_EXPR;
1381        code1 = TREE_CODE (t1))
1382     t1 = TREE_OPERAND (t1, 0);
1383   for (code2 = TREE_CODE (t2);
1384        code2 == NOP_EXPR || code2 == CONVERT_EXPR
1385          || code1 == NON_LVALUE_EXPR;
1386        code2 = TREE_CODE (t2))
1387     t2 = TREE_OPERAND (t2, 0);
1388
1389   /* They might have become equal now.  */
1390   if (t1 == t2)
1391     return true;
1392
1393   if (code1 != code2)
1394     return false;
1395
1396   switch (code1)
1397     {
1398     case INTEGER_CST:
1399       return TREE_INT_CST_LOW (t1) == TREE_INT_CST_LOW (t2)
1400         && TREE_INT_CST_HIGH (t1) == TREE_INT_CST_HIGH (t2);
1401
1402     case REAL_CST:
1403       return REAL_VALUES_EQUAL (TREE_REAL_CST (t1), TREE_REAL_CST (t2));
1404
1405     case STRING_CST:
1406       return TREE_STRING_LENGTH (t1) == TREE_STRING_LENGTH (t2)
1407         && !memcmp (TREE_STRING_POINTER (t1), TREE_STRING_POINTER (t2),
1408                     TREE_STRING_LENGTH (t1));
1409
1410     case CONSTRUCTOR:
1411       /* We need to do this when determining whether or not two
1412          non-type pointer to member function template arguments
1413          are the same.  */
1414       if (!(same_type_p (TREE_TYPE (t1), TREE_TYPE (t2))
1415             /* The first operand is RTL.  */
1416             && TREE_OPERAND (t1, 0) == TREE_OPERAND (t2, 0)))
1417         return false;
1418       return cp_tree_equal (TREE_OPERAND (t1, 1), TREE_OPERAND (t2, 1));
1419
1420     case TREE_LIST:
1421       if (!cp_tree_equal (TREE_PURPOSE (t1), TREE_PURPOSE (t2)))
1422         return false;
1423       if (!cp_tree_equal (TREE_VALUE (t1), TREE_VALUE (t2)))
1424         return false;
1425       return cp_tree_equal (TREE_CHAIN (t1), TREE_CHAIN (t2));
1426
1427     case SAVE_EXPR:
1428       return cp_tree_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0));
1429
1430     case CALL_EXPR:
1431       if (!cp_tree_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0)))
1432         return false;
1433       return cp_tree_equal (TREE_OPERAND (t1, 1), TREE_OPERAND (t2, 1));
1434
1435     case TARGET_EXPR:
1436       {
1437         tree o1 = TREE_OPERAND (t1, 0);
1438         tree o2 = TREE_OPERAND (t2, 0);
1439
1440         /* Special case: if either target is an unallocated VAR_DECL,
1441            it means that it's going to be unified with whatever the
1442            TARGET_EXPR is really supposed to initialize, so treat it
1443            as being equivalent to anything.  */
1444         if (TREE_CODE (o1) == VAR_DECL && DECL_NAME (o1) == NULL_TREE
1445             && !DECL_RTL_SET_P (o1))
1446           /*Nop*/;
1447         else if (TREE_CODE (o2) == VAR_DECL && DECL_NAME (o2) == NULL_TREE
1448                  && !DECL_RTL_SET_P (o2))
1449           /*Nop*/;
1450         else if (!cp_tree_equal (o1, o2))
1451           return false;
1452
1453         return cp_tree_equal (TREE_OPERAND (t1, 1), TREE_OPERAND (t2, 1));
1454       }
1455
1456     case WITH_CLEANUP_EXPR:
1457       if (!cp_tree_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0)))
1458         return false;
1459       return cp_tree_equal (TREE_OPERAND (t1, 1), TREE_OPERAND (t1, 1));
1460
1461     case COMPONENT_REF:
1462       if (TREE_OPERAND (t1, 1) != TREE_OPERAND (t2, 1))
1463         return false;
1464       return cp_tree_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0));
1465
1466     case VAR_DECL:
1467     case PARM_DECL:
1468     case CONST_DECL:
1469     case FUNCTION_DECL:
1470     case TEMPLATE_DECL:
1471     case IDENTIFIER_NODE:
1472     case SSA_NAME:
1473       return false;
1474
1475     case BASELINK:
1476       return (BASELINK_BINFO (t1) == BASELINK_BINFO (t2)
1477               && BASELINK_ACCESS_BINFO (t1) == BASELINK_ACCESS_BINFO (t2)
1478               && cp_tree_equal (BASELINK_FUNCTIONS (t1),
1479                                 BASELINK_FUNCTIONS (t2)));
1480
1481     case TEMPLATE_PARM_INDEX:
1482       return (TEMPLATE_PARM_IDX (t1) == TEMPLATE_PARM_IDX (t2)
1483               && TEMPLATE_PARM_LEVEL (t1) == TEMPLATE_PARM_LEVEL (t2)
1484               && same_type_p (TREE_TYPE (TEMPLATE_PARM_DECL (t1)),
1485                               TREE_TYPE (TEMPLATE_PARM_DECL (t2))));
1486
1487     case TEMPLATE_ID_EXPR:
1488       {
1489         unsigned ix;
1490         tree vec1, vec2;
1491
1492         if (!cp_tree_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0)))
1493           return false;
1494         vec1 = TREE_OPERAND (t1, 1);
1495         vec2 = TREE_OPERAND (t2, 1);
1496
1497         if (!vec1 || !vec2)
1498           return !vec1 && !vec2;
1499
1500         if (TREE_VEC_LENGTH (vec1) != TREE_VEC_LENGTH (vec2))
1501           return false;
1502
1503         for (ix = TREE_VEC_LENGTH (vec1); ix--;)
1504           if (!cp_tree_equal (TREE_VEC_ELT (vec1, ix),
1505                               TREE_VEC_ELT (vec2, ix)))
1506             return false;
1507
1508         return true;
1509       }
1510
1511     case SIZEOF_EXPR:
1512     case ALIGNOF_EXPR:
1513       {
1514         tree o1 = TREE_OPERAND (t1, 0);
1515         tree o2 = TREE_OPERAND (t2, 0);
1516
1517         if (TREE_CODE (o1) != TREE_CODE (o2))
1518           return false;
1519         if (TYPE_P (o1))
1520           return same_type_p (o1, o2);
1521         else
1522           return cp_tree_equal (o1, o2);
1523       }
1524
1525     case PTRMEM_CST:
1526       /* Two pointer-to-members are the same if they point to the same
1527          field or function in the same class.  */
1528       if (PTRMEM_CST_MEMBER (t1) != PTRMEM_CST_MEMBER (t2))
1529         return false;
1530
1531       return same_type_p (PTRMEM_CST_CLASS (t1), PTRMEM_CST_CLASS (t2));
1532
1533     case OVERLOAD:
1534       if (OVL_FUNCTION (t1) != OVL_FUNCTION (t2))
1535         return false;
1536       return cp_tree_equal (OVL_CHAIN (t1), OVL_CHAIN (t2));
1537
1538     default:
1539       break;
1540     }
1541
1542   switch (TREE_CODE_CLASS (code1))
1543     {
1544     case tcc_unary:
1545     case tcc_binary:
1546     case tcc_comparison:
1547     case tcc_expression:
1548     case tcc_reference:
1549     case tcc_statement:
1550       {
1551         int i;
1552
1553         for (i = 0; i < TREE_CODE_LENGTH (code1); ++i)
1554           if (!cp_tree_equal (TREE_OPERAND (t1, i), TREE_OPERAND (t2, i)))
1555             return false;
1556
1557         return true;
1558       }
1559
1560     case tcc_type:
1561       return same_type_p (t1, t2);
1562     default:
1563       gcc_unreachable ();
1564     }
1565   /* We can get here with --disable-checking.  */
1566   return false;
1567 }
1568
1569 /* The type of ARG when used as an lvalue.  */
1570
1571 tree
1572 lvalue_type (tree arg)
1573 {
1574   tree type = TREE_TYPE (arg);
1575   return type;
1576 }
1577
1578 /* The type of ARG for printing error messages; denote lvalues with
1579    reference types.  */
1580
1581 tree
1582 error_type (tree arg)
1583 {
1584   tree type = TREE_TYPE (arg);
1585
1586   if (TREE_CODE (type) == ARRAY_TYPE)
1587     ;
1588   else if (TREE_CODE (type) == ERROR_MARK)
1589     ;
1590   else if (real_lvalue_p (arg))
1591     type = build_reference_type (lvalue_type (arg));
1592   else if (IS_AGGR_TYPE (type))
1593     type = lvalue_type (arg);
1594
1595   return type;
1596 }
1597
1598 /* Does FUNCTION use a variable-length argument list?  */
1599
1600 int
1601 varargs_function_p (tree function)
1602 {
1603   tree parm = TYPE_ARG_TYPES (TREE_TYPE (function));
1604   for (; parm; parm = TREE_CHAIN (parm))
1605     if (TREE_VALUE (parm) == void_type_node)
1606       return 0;
1607   return 1;
1608 }
1609
1610 /* Returns 1 if decl is a member of a class.  */
1611
1612 int
1613 member_p (tree decl)
1614 {
1615   const tree ctx = DECL_CONTEXT (decl);
1616   return (ctx && TYPE_P (ctx));
1617 }
1618
1619 /* Create a placeholder for member access where we don't actually have an
1620    object that the access is against.  */
1621
1622 tree
1623 build_dummy_object (tree type)
1624 {
1625   tree decl = build1 (NOP_EXPR, build_pointer_type (type), void_zero_node);
1626   return build_indirect_ref (decl, NULL);
1627 }
1628
1629 /* We've gotten a reference to a member of TYPE.  Return *this if appropriate,
1630    or a dummy object otherwise.  If BINFOP is non-0, it is filled with the
1631    binfo path from current_class_type to TYPE, or 0.  */
1632
1633 tree
1634 maybe_dummy_object (tree type, tree* binfop)
1635 {
1636   tree decl, context;
1637   tree binfo;
1638
1639   if (current_class_type
1640       && (binfo = lookup_base (current_class_type, type,
1641                                ba_unique | ba_quiet, NULL)))
1642     context = current_class_type;
1643   else
1644     {
1645       /* Reference from a nested class member function.  */
1646       context = type;
1647       binfo = TYPE_BINFO (type);
1648     }
1649
1650   if (binfop)
1651     *binfop = binfo;
1652
1653   if (current_class_ref && context == current_class_type
1654       /* Kludge: Make sure that current_class_type is actually
1655          correct.  It might not be if we're in the middle of
1656          tsubst_default_argument.  */
1657       && same_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (current_class_ref)),
1658                       current_class_type))
1659     decl = current_class_ref;
1660   else
1661     decl = build_dummy_object (context);
1662
1663   return decl;
1664 }
1665
1666 /* Returns 1 if OB is a placeholder object, or a pointer to one.  */
1667
1668 int
1669 is_dummy_object (tree ob)
1670 {
1671   if (TREE_CODE (ob) == INDIRECT_REF)
1672     ob = TREE_OPERAND (ob, 0);
1673   return (TREE_CODE (ob) == NOP_EXPR
1674           && TREE_OPERAND (ob, 0) == void_zero_node);
1675 }
1676
1677 /* Returns 1 iff type T is a POD type, as defined in [basic.types].  */
1678
1679 int
1680 pod_type_p (tree t)
1681 {
1682   t = strip_array_types (t);
1683
1684   if (t == error_mark_node)
1685     return 1;
1686   if (INTEGRAL_TYPE_P (t))
1687     return 1;  /* integral, character or enumeral type */
1688   if (FLOAT_TYPE_P (t))
1689     return 1;
1690   if (TYPE_PTR_P (t))
1691     return 1; /* pointer to non-member */
1692   if (TYPE_PTR_TO_MEMBER_P (t))
1693     return 1; /* pointer to member */
1694
1695   if (TREE_CODE (t) == VECTOR_TYPE)
1696     return 1; /* vectors are (small) arrays of scalars */
1697
1698   if (! CLASS_TYPE_P (t))
1699     return 0; /* other non-class type (reference or function) */
1700   if (CLASSTYPE_NON_POD_P (t))
1701     return 0;
1702   return 1;
1703 }
1704
1705 /* Returns 1 iff zero initialization of type T means actually storing
1706    zeros in it.  */
1707
1708 int
1709 zero_init_p (tree t)
1710 {
1711   t = strip_array_types (t);
1712
1713   if (t == error_mark_node)
1714     return 1;
1715
1716   /* NULL pointers to data members are initialized with -1.  */
1717   if (TYPE_PTRMEM_P (t))
1718     return 0;
1719
1720   /* Classes that contain types that can't be zero-initialized, cannot
1721      be zero-initialized themselves.  */
1722   if (CLASS_TYPE_P (t) && CLASSTYPE_NON_ZERO_INIT_P (t))
1723     return 0;
1724
1725   return 1;
1726 }
1727
1728 /* Table of valid C++ attributes.  */
1729 const struct attribute_spec cxx_attribute_table[] =
1730 {
1731   /* { name, min_len, max_len, decl_req, type_req, fn_type_req, handler } */
1732   { "java_interface", 0, 0, false, false, false, handle_java_interface_attribute },
1733   { "com_interface",  0, 0, false, false, false, handle_com_interface_attribute },
1734   { "init_priority",  1, 1, true,  false, false, handle_init_priority_attribute },
1735   { NULL,             0, 0, false, false, false, NULL }
1736 };
1737
1738 /* Handle a "java_interface" attribute; arguments as in
1739    struct attribute_spec.handler.  */
1740 static tree
1741 handle_java_interface_attribute (tree* node,
1742                                  tree name,
1743                                  tree args ATTRIBUTE_UNUSED ,
1744                                  int flags,
1745                                  bool* no_add_attrs)
1746 {
1747   if (DECL_P (*node)
1748       || !CLASS_TYPE_P (*node)
1749       || !TYPE_FOR_JAVA (*node))
1750     {
1751       error ("%qE attribute can only be applied to Java class definitions",
1752              name);
1753       *no_add_attrs = true;
1754       return NULL_TREE;
1755     }
1756   if (!(flags & (int) ATTR_FLAG_TYPE_IN_PLACE))
1757     *node = build_variant_type_copy (*node);
1758   TYPE_JAVA_INTERFACE (*node) = 1;
1759
1760   return NULL_TREE;
1761 }
1762
1763 /* Handle a "com_interface" attribute; arguments as in
1764    struct attribute_spec.handler.  */
1765 static tree
1766 handle_com_interface_attribute (tree* node,
1767                                 tree name,
1768                                 tree args ATTRIBUTE_UNUSED ,
1769                                 int flags ATTRIBUTE_UNUSED ,
1770                                 bool* no_add_attrs)
1771 {
1772   static int warned;
1773
1774   *no_add_attrs = true;
1775
1776   if (DECL_P (*node)
1777       || !CLASS_TYPE_P (*node)
1778       || *node != TYPE_MAIN_VARIANT (*node))
1779     {
1780       warning (OPT_Wattributes, "%qE attribute can only be applied "
1781                "to class definitions", name);
1782       return NULL_TREE;
1783     }
1784
1785   if (!warned++)
1786     warning (0, "%qE is obsolete; g++ vtables are now COM-compatible by default",
1787              name);
1788
1789   return NULL_TREE;
1790 }
1791
1792 /* Handle an "init_priority" attribute; arguments as in
1793    struct attribute_spec.handler.  */
1794 static tree
1795 handle_init_priority_attribute (tree* node,
1796                                 tree name,
1797                                 tree args,
1798                                 int flags ATTRIBUTE_UNUSED ,
1799                                 bool* no_add_attrs)
1800 {
1801   tree initp_expr = TREE_VALUE (args);
1802   tree decl = *node;
1803   tree type = TREE_TYPE (decl);
1804   int pri;
1805
1806   STRIP_NOPS (initp_expr);
1807
1808   if (!initp_expr || TREE_CODE (initp_expr) != INTEGER_CST)
1809     {
1810       error ("requested init_priority is not an integer constant");
1811       *no_add_attrs = true;
1812       return NULL_TREE;
1813     }
1814
1815   pri = TREE_INT_CST_LOW (initp_expr);
1816
1817   type = strip_array_types (type);
1818
1819   if (decl == NULL_TREE
1820       || TREE_CODE (decl) != VAR_DECL
1821       || !TREE_STATIC (decl)
1822       || DECL_EXTERNAL (decl)
1823       || (TREE_CODE (type) != RECORD_TYPE
1824           && TREE_CODE (type) != UNION_TYPE)
1825       /* Static objects in functions are initialized the
1826          first time control passes through that
1827          function. This is not precise enough to pin down an
1828          init_priority value, so don't allow it.  */
1829       || current_function_decl)
1830     {
1831       error ("can only use %qE attribute on file-scope definitions "
1832              "of objects of class type", name);
1833       *no_add_attrs = true;
1834       return NULL_TREE;
1835     }
1836
1837   if (pri > MAX_INIT_PRIORITY || pri <= 0)
1838     {
1839       error ("requested init_priority is out of range");
1840       *no_add_attrs = true;
1841       return NULL_TREE;
1842     }
1843
1844   /* Check for init_priorities that are reserved for
1845      language and runtime support implementations.*/
1846   if (pri <= MAX_RESERVED_INIT_PRIORITY)
1847     {
1848       warning
1849         (0, "requested init_priority is reserved for internal use");
1850     }
1851
1852   if (SUPPORTS_INIT_PRIORITY)
1853     {
1854       SET_DECL_INIT_PRIORITY (decl, pri);
1855       DECL_HAS_INIT_PRIORITY_P (decl) = 1;
1856       return NULL_TREE;
1857     }
1858   else
1859     {
1860       error ("%qE attribute is not supported on this platform", name);
1861       *no_add_attrs = true;
1862       return NULL_TREE;
1863     }
1864 }
1865
1866 /* Return a new PTRMEM_CST of the indicated TYPE.  The MEMBER is the
1867    thing pointed to by the constant.  */
1868
1869 tree
1870 make_ptrmem_cst (tree type, tree member)
1871 {
1872   tree ptrmem_cst = make_node (PTRMEM_CST);
1873   TREE_TYPE (ptrmem_cst) = type;
1874   PTRMEM_CST_MEMBER (ptrmem_cst) = member;
1875   return ptrmem_cst;
1876 }
1877
1878 /* Build a variant of TYPE that has the indicated ATTRIBUTES.  May
1879    return an existing type of an appropriate type already exists.  */
1880
1881 tree
1882 cp_build_type_attribute_variant (tree type, tree attributes)
1883 {
1884   tree new_type;
1885
1886   new_type = build_type_attribute_variant (type, attributes);
1887   if (TREE_CODE (new_type) == FUNCTION_TYPE
1888       && (TYPE_RAISES_EXCEPTIONS (new_type)
1889           != TYPE_RAISES_EXCEPTIONS (type)))
1890     new_type = build_exception_variant (new_type,
1891                                         TYPE_RAISES_EXCEPTIONS (type));
1892   return new_type;
1893 }
1894
1895 /* Apply FUNC to all language-specific sub-trees of TP in a pre-order
1896    traversal.  Called from walk_tree.  */
1897
1898 tree
1899 cp_walk_subtrees (tree *tp, int *walk_subtrees_p, walk_tree_fn func,
1900                   void *data, struct pointer_set_t *pset)
1901 {
1902   enum tree_code code = TREE_CODE (*tp);
1903   location_t save_locus;
1904   tree result;
1905
1906 #define WALK_SUBTREE(NODE)                              \
1907   do                                                    \
1908     {                                                   \
1909       result = walk_tree (&(NODE), func, data, pset);   \
1910       if (result) goto out;                             \
1911     }                                                   \
1912   while (0)
1913
1914   /* Set input_location here so we get the right instantiation context
1915      if we call instantiate_decl from inlinable_function_p.  */
1916   save_locus = input_location;
1917   if (EXPR_HAS_LOCATION (*tp))
1918     input_location = EXPR_LOCATION (*tp);
1919
1920   /* Not one of the easy cases.  We must explicitly go through the
1921      children.  */
1922   result = NULL_TREE;
1923   switch (code)
1924     {
1925     case DEFAULT_ARG:
1926     case TEMPLATE_TEMPLATE_PARM:
1927     case BOUND_TEMPLATE_TEMPLATE_PARM:
1928     case UNBOUND_CLASS_TEMPLATE:
1929     case TEMPLATE_PARM_INDEX:
1930     case TEMPLATE_TYPE_PARM:
1931     case TYPENAME_TYPE:
1932     case TYPEOF_TYPE:
1933     case BASELINK:
1934       /* None of these have subtrees other than those already walked
1935          above.  */
1936       *walk_subtrees_p = 0;
1937       break;
1938
1939     case TINST_LEVEL:
1940       WALK_SUBTREE (TINST_DECL (*tp));
1941       *walk_subtrees_p = 0;
1942       break;
1943
1944     case PTRMEM_CST:
1945       WALK_SUBTREE (TREE_TYPE (*tp));
1946       *walk_subtrees_p = 0;
1947       break;
1948
1949     case TREE_LIST:
1950       WALK_SUBTREE (TREE_PURPOSE (*tp));
1951       break;
1952
1953     case OVERLOAD:
1954       WALK_SUBTREE (OVL_FUNCTION (*tp));
1955       WALK_SUBTREE (OVL_CHAIN (*tp));
1956       *walk_subtrees_p = 0;
1957       break;
1958
1959     case RECORD_TYPE:
1960       if (TYPE_PTRMEMFUNC_P (*tp))
1961         WALK_SUBTREE (TYPE_PTRMEMFUNC_FN_TYPE (*tp));
1962       break;
1963
1964     default:
1965       input_location = save_locus;
1966       return NULL_TREE;
1967     }
1968
1969   /* We didn't find what we were looking for.  */
1970  out:
1971   input_location = save_locus;
1972   return result;
1973
1974 #undef WALK_SUBTREE
1975 }
1976
1977 /* Decide whether there are language-specific reasons to not inline a
1978    function as a tree.  */
1979
1980 int
1981 cp_cannot_inline_tree_fn (tree* fnp)
1982 {
1983   tree fn = *fnp;
1984
1985   /* We can inline a template instantiation only if it's fully
1986      instantiated.  */
1987   if (DECL_TEMPLATE_INFO (fn)
1988       && TI_PENDING_TEMPLATE_FLAG (DECL_TEMPLATE_INFO (fn)))
1989     {
1990       /* Don't instantiate functions that are not going to be
1991          inlined.  */
1992       if (!DECL_INLINE (DECL_TEMPLATE_RESULT
1993                         (template_for_substitution (fn))))
1994         return 1;
1995
1996       fn = *fnp = instantiate_decl (fn, /*defer_ok=*/0, /*undefined_ok=*/0);
1997
1998       if (TI_PENDING_TEMPLATE_FLAG (DECL_TEMPLATE_INFO (fn)))
1999         return 1;
2000     }
2001
2002   if (flag_really_no_inline
2003       && lookup_attribute ("always_inline", DECL_ATTRIBUTES (fn)) == NULL)
2004     return 1;
2005
2006   /* Don't auto-inline anything that might not be bound within
2007      this unit of translation.
2008      Exclude comdat functions from this rule.  While they can be bound
2009      to the other unit, they all must be the same.  This is especially
2010      important so templates can inline.  */
2011   if (!DECL_DECLARED_INLINE_P (fn) && !(*targetm.binds_local_p) (fn)
2012       && !DECL_COMDAT (fn))
2013     {
2014       DECL_UNINLINABLE (fn) = 1;
2015       return 1;
2016     }
2017
2018   if (varargs_function_p (fn))
2019     {
2020       DECL_UNINLINABLE (fn) = 1;
2021       return 1;
2022     }
2023
2024   if (! function_attribute_inlinable_p (fn))
2025     {
2026       DECL_UNINLINABLE (fn) = 1;
2027       return 1;
2028     }
2029
2030   return 0;
2031 }
2032
2033 /* Add any pending functions other than the current function (already
2034    handled by the caller), that thus cannot be inlined, to FNS_P, then
2035    return the latest function added to the array, PREV_FN.  */
2036
2037 tree
2038 cp_add_pending_fn_decls (void* fns_p, tree prev_fn)
2039 {
2040   varray_type *fnsp = (varray_type *)fns_p;
2041   struct saved_scope *s;
2042
2043   for (s = scope_chain; s; s = s->prev)
2044     if (s->function_decl && s->function_decl != prev_fn)
2045       {
2046         VARRAY_PUSH_TREE (*fnsp, s->function_decl);
2047         prev_fn = s->function_decl;
2048       }
2049
2050   return prev_fn;
2051 }
2052
2053 /* Determine whether VAR is a declaration of an automatic variable in
2054    function FN.  */
2055
2056 int
2057 cp_auto_var_in_fn_p (tree var, tree fn)
2058 {
2059   return (DECL_P (var) && DECL_CONTEXT (var) == fn
2060           && nonstatic_local_decl_p (var));
2061 }
2062
2063 /* Initialize tree.c.  */
2064
2065 void
2066 init_tree (void)
2067 {
2068   list_hash_table = htab_create_ggc (31, list_hash, list_hash_eq, NULL);
2069 }
2070
2071 /* Returns the kind of special function that DECL (a FUNCTION_DECL)
2072    is.  Note that sfk_none is zero, so this function can be used as a
2073    predicate to test whether or not DECL is a special function.  */
2074
2075 special_function_kind
2076 special_function_p (tree decl)
2077 {
2078   /* Rather than doing all this stuff with magic names, we should
2079      probably have a field of type `special_function_kind' in
2080      DECL_LANG_SPECIFIC.  */
2081   if (DECL_COPY_CONSTRUCTOR_P (decl))
2082     return sfk_copy_constructor;
2083   if (DECL_CONSTRUCTOR_P (decl))
2084     return sfk_constructor;
2085   if (DECL_OVERLOADED_OPERATOR_P (decl) == NOP_EXPR)
2086     return sfk_assignment_operator;
2087   if (DECL_MAYBE_IN_CHARGE_DESTRUCTOR_P (decl))
2088     return sfk_destructor;
2089   if (DECL_COMPLETE_DESTRUCTOR_P (decl))
2090     return sfk_complete_destructor;
2091   if (DECL_BASE_DESTRUCTOR_P (decl))
2092     return sfk_base_destructor;
2093   if (DECL_DELETING_DESTRUCTOR_P (decl))
2094     return sfk_deleting_destructor;
2095   if (DECL_CONV_FN_P (decl))
2096     return sfk_conversion;
2097
2098   return sfk_none;
2099 }
2100
2101 /* Returns nonzero if TYPE is a character type, including wchar_t.  */
2102
2103 int
2104 char_type_p (tree type)
2105 {
2106   return (same_type_p (type, char_type_node)
2107           || same_type_p (type, unsigned_char_type_node)
2108           || same_type_p (type, signed_char_type_node)
2109           || same_type_p (type, wchar_type_node));
2110 }
2111
2112 /* Returns the kind of linkage associated with the indicated DECL.  Th
2113    value returned is as specified by the language standard; it is
2114    independent of implementation details regarding template
2115    instantiation, etc.  For example, it is possible that a declaration
2116    to which this function assigns external linkage would not show up
2117    as a global symbol when you run `nm' on the resulting object file.  */
2118
2119 linkage_kind
2120 decl_linkage (tree decl)
2121 {
2122   /* This function doesn't attempt to calculate the linkage from first
2123      principles as given in [basic.link].  Instead, it makes use of
2124      the fact that we have already set TREE_PUBLIC appropriately, and
2125      then handles a few special cases.  Ideally, we would calculate
2126      linkage first, and then transform that into a concrete
2127      implementation.  */
2128
2129   /* Things that don't have names have no linkage.  */
2130   if (!DECL_NAME (decl))
2131     return lk_none;
2132
2133   /* Things that are TREE_PUBLIC have external linkage.  */
2134   if (TREE_PUBLIC (decl))
2135     return lk_external;
2136   
2137   /* Linkage of a CONST_DECL depends on the linkage of the enumeration 
2138      type.  */
2139   if (TREE_CODE (decl) == CONST_DECL)
2140     return decl_linkage (TYPE_NAME (TREE_TYPE (decl)));
2141
2142   /* Some things that are not TREE_PUBLIC have external linkage, too.
2143      For example, on targets that don't have weak symbols, we make all
2144      template instantiations have internal linkage (in the object
2145      file), but the symbols should still be treated as having external
2146      linkage from the point of view of the language.  */
2147   if (TREE_CODE (decl) != TYPE_DECL && DECL_LANG_SPECIFIC (decl) && DECL_COMDAT (decl))
2148     return lk_external;
2149
2150   /* Things in local scope do not have linkage, if they don't have
2151      TREE_PUBLIC set.  */
2152   if (decl_function_context (decl))
2153     return lk_none;
2154
2155   /* Everything else has internal linkage.  */
2156   return lk_internal;
2157 }
2158 \f
2159 /* EXP is an expression that we want to pre-evaluate.  Returns via INITP an
2160    expression to perform the pre-evaluation, and returns directly an
2161    expression to use the precalculated result.  */
2162
2163 tree
2164 stabilize_expr (tree exp, tree* initp)
2165 {
2166   tree init_expr;
2167
2168   if (!TREE_SIDE_EFFECTS (exp))
2169     {
2170       init_expr = NULL_TREE;
2171     }
2172   else if (!real_lvalue_p (exp)
2173            || !TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (exp)))
2174     {
2175       init_expr = get_target_expr (exp);
2176       exp = TARGET_EXPR_SLOT (init_expr);
2177     }
2178   else
2179     {
2180       exp = build_unary_op (ADDR_EXPR, exp, 1);
2181       init_expr = get_target_expr (exp);
2182       exp = TARGET_EXPR_SLOT (init_expr);
2183       exp = build_indirect_ref (exp, 0);
2184     }
2185
2186   *initp = init_expr;
2187   return exp;
2188 }
2189
2190 /* Add NEW, an expression whose value we don't care about, after the
2191    similar expression ORIG.  */
2192
2193 tree
2194 add_stmt_to_compound (tree orig, tree new)
2195 {
2196   if (!new || !TREE_SIDE_EFFECTS (new))
2197     return orig;
2198   if (!orig || !TREE_SIDE_EFFECTS (orig))
2199     return new;
2200   return build2 (COMPOUND_EXPR, void_type_node, orig, new);
2201 }
2202
2203 /* Like stabilize_expr, but for a call whose args we want to
2204    pre-evaluate.  */
2205
2206 void
2207 stabilize_call (tree call, tree *initp)
2208 {
2209   tree inits = NULL_TREE;
2210   tree t;
2211
2212   if (call == error_mark_node)
2213     return;
2214
2215   gcc_assert (TREE_CODE (call) == CALL_EXPR
2216               || TREE_CODE (call) == AGGR_INIT_EXPR);
2217
2218   for (t = TREE_OPERAND (call, 1); t; t = TREE_CHAIN (t))
2219     if (TREE_SIDE_EFFECTS (TREE_VALUE (t)))
2220       {
2221         tree init;
2222         TREE_VALUE (t) = stabilize_expr (TREE_VALUE (t), &init);
2223         inits = add_stmt_to_compound (inits, init);
2224       }
2225
2226   *initp = inits;
2227 }
2228
2229 /* Like stabilize_expr, but for an initialization.  If we are initializing
2230    an object of class type, we don't want to introduce an extra temporary,
2231    so we look past the TARGET_EXPR and stabilize the arguments of the call
2232    instead.  */
2233
2234 bool
2235 stabilize_init (tree init, tree *initp)
2236 {
2237   tree t = init;
2238
2239   if (t == error_mark_node)
2240     return true;
2241
2242   if (TREE_CODE (t) == INIT_EXPR
2243       && TREE_CODE (TREE_OPERAND (t, 1)) != TARGET_EXPR)
2244     TREE_OPERAND (t, 1) = stabilize_expr (TREE_OPERAND (t, 1), initp);
2245   else
2246     {
2247       if (TREE_CODE (t) == INIT_EXPR)
2248         t = TREE_OPERAND (t, 1);
2249       if (TREE_CODE (t) == TARGET_EXPR)
2250         t = TARGET_EXPR_INITIAL (t);
2251       if (TREE_CODE (t) == COMPOUND_EXPR)
2252         t = expr_last (t);
2253       if (TREE_CODE (t) == CONSTRUCTOR
2254           && EMPTY_CONSTRUCTOR_P (t))
2255         {
2256           /* Default-initialization.  */
2257           *initp = NULL_TREE;
2258           return true;
2259         }
2260
2261       /* If the initializer is a COND_EXPR, we can't preevaluate
2262          anything.  */
2263       if (TREE_CODE (t) == COND_EXPR)
2264         return false;
2265
2266       /* The TARGET_EXPR might be initializing via bitwise copy from
2267          another variable; leave that alone.  */
2268       if (TREE_SIDE_EFFECTS (t))
2269         stabilize_call (t, initp);
2270     }
2271
2272   return true;
2273 }
2274
2275 /* Like "fold", but should be used whenever we might be processing the
2276    body of a template.  */
2277
2278 tree
2279 fold_if_not_in_template (tree expr)
2280 {
2281   /* In the body of a template, there is never any need to call
2282      "fold".  We will call fold later when actually instantiating the
2283      template.  Integral constant expressions in templates will be
2284      evaluated via fold_non_dependent_expr, as necessary.  */
2285   if (processing_template_decl)
2286     return expr;
2287
2288   /* Fold C++ front-end specific tree codes.  */
2289   if (TREE_CODE (expr) == UNARY_PLUS_EXPR)
2290     return fold_convert (TREE_TYPE (expr), TREE_OPERAND (expr, 0));
2291
2292   return fold (expr);
2293 }
2294
2295 \f
2296 #if defined ENABLE_TREE_CHECKING && (GCC_VERSION >= 2007)
2297 /* Complain that some language-specific thing hanging off a tree
2298    node has been accessed improperly.  */
2299
2300 void
2301 lang_check_failed (const char* file, int line, const char* function)
2302 {
2303   internal_error ("lang_* check: failed in %s, at %s:%d",
2304                   function, trim_filename (file), line);
2305 }
2306 #endif /* ENABLE_TREE_CHECKING */
2307
2308 #include "gt-cp-tree.h"