OSDN Git Service

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