OSDN Git Service

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