OSDN Git Service

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