OSDN Git Service

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