OSDN Git Service

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