OSDN Git Service

* cp-tree.h (enum cp_lvalue_kind_flags): Add clk_rvalueref.
[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, 2007, 2008, 2009
4    Free Software Foundation, Inc.
5    Hacked by Michael Tiemann (tiemann@cygnus.com)
6
7 This file is part of GCC.
8
9 GCC is free software; you can redistribute it and/or modify
10 it under the terms of the GNU General Public License as published by
11 the Free Software Foundation; either version 3, or (at your option)
12 any later version.
13
14 GCC is distributed in the hope that it will be useful,
15 but WITHOUT ANY WARRANTY; without even the implied warranty of
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17 GNU General Public License for more details.
18
19 You should have received a copy of the GNU General Public License
20 along with GCC; see the file COPYING3.  If not see
21 <http://www.gnu.org/licenses/>.  */
22
23 #include "config.h"
24 #include "system.h"
25 #include "coretypes.h"
26 #include "tm.h"
27 #include "tree.h"
28 #include "cp-tree.h"
29 #include "flags.h"
30 #include "real.h"
31 #include "rtl.h"
32 #include "toplev.h"
33 #include "insn-config.h"
34 #include "integrate.h"
35 #include "tree-inline.h"
36 #include "debug.h"
37 #include "target.h"
38 #include "convert.h"
39 #include "tree-flow.h"
40
41 static tree bot_manip (tree *, int *, void *);
42 static tree bot_replace (tree *, int *, void *);
43 static tree build_cplus_array_type_1 (tree, tree);
44 static int list_hash_eq (const void *, const void *);
45 static hashval_t list_hash_pieces (tree, tree, tree);
46 static hashval_t list_hash (const void *);
47 static cp_lvalue_kind lvalue_p_1 (const_tree);
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 build_local_temp (tree);
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.  */
59
60 static cp_lvalue_kind
61 lvalue_p_1 (const_tree ref)
62 {
63   cp_lvalue_kind op1_lvalue_kind = clk_none;
64   cp_lvalue_kind op2_lvalue_kind = clk_none;
65
66   /* Expressions of reference type are sometimes wrapped in
67      INDIRECT_REFs.  INDIRECT_REFs are just internal compiler
68      representation, not part of the language, so we have to look
69      through them.  */
70   if (TREE_CODE (ref) == INDIRECT_REF
71       && TREE_CODE (TREE_TYPE (TREE_OPERAND (ref, 0)))
72           == REFERENCE_TYPE)
73     return lvalue_p_1 (TREE_OPERAND (ref, 0));
74
75   if (TREE_CODE (TREE_TYPE (ref)) == REFERENCE_TYPE)
76     {
77       /* unnamed rvalue references are rvalues */
78       if (TYPE_REF_IS_RVALUE (TREE_TYPE (ref))
79           && TREE_CODE (ref) != PARM_DECL
80           && TREE_CODE (ref) != VAR_DECL
81           && TREE_CODE (ref) != COMPONENT_REF)
82         return clk_rvalueref;
83
84       /* lvalue references and named rvalue references are lvalues.  */
85       return clk_ordinary;
86     }
87
88   if (ref == current_class_ptr)
89     return clk_none;
90
91   switch (TREE_CODE (ref))
92     {
93     case SAVE_EXPR:
94       return clk_none;
95       /* preincrements and predecrements are valid lvals, provided
96          what they refer to are valid lvals.  */
97     case PREINCREMENT_EXPR:
98     case PREDECREMENT_EXPR:
99     case TRY_CATCH_EXPR:
100     case WITH_CLEANUP_EXPR:
101     case REALPART_EXPR:
102     case IMAGPART_EXPR:
103       return lvalue_p_1 (TREE_OPERAND (ref, 0));
104
105     case COMPONENT_REF:
106       op1_lvalue_kind = lvalue_p_1 (TREE_OPERAND (ref, 0));
107       /* Look at the member designator.  */
108       if (!op1_lvalue_kind)
109         ;
110       else if (is_overloaded_fn (TREE_OPERAND (ref, 1)))
111         /* The "field" can be a FUNCTION_DECL or an OVERLOAD in some
112            situations.  If we're seeing a COMPONENT_REF, it's a non-static
113            member, so it isn't an lvalue. */
114         op1_lvalue_kind = clk_none;
115       else if (TREE_CODE (TREE_OPERAND (ref, 1)) != FIELD_DECL)
116         /* This can be IDENTIFIER_NODE in a template.  */;
117       else if (DECL_C_BIT_FIELD (TREE_OPERAND (ref, 1)))
118         {
119           /* Clear the ordinary bit.  If this object was a class
120              rvalue we want to preserve that information.  */
121           op1_lvalue_kind &= ~clk_ordinary;
122           /* The lvalue is for a bitfield.  */
123           op1_lvalue_kind |= clk_bitfield;
124         }
125       else if (DECL_PACKED (TREE_OPERAND (ref, 1)))
126         op1_lvalue_kind |= clk_packed;
127
128       return op1_lvalue_kind;
129
130     case STRING_CST:
131     case COMPOUND_LITERAL_EXPR:
132       return clk_ordinary;
133
134     case CONST_DECL:
135     case VAR_DECL:
136       if (TREE_READONLY (ref) && ! TREE_STATIC (ref)
137           && DECL_LANG_SPECIFIC (ref)
138           && DECL_IN_AGGR_P (ref))
139         return clk_none;
140     case INDIRECT_REF:
141     case ARRAY_REF:
142     case PARM_DECL:
143     case RESULT_DECL:
144       if (TREE_CODE (TREE_TYPE (ref)) != METHOD_TYPE)
145         return clk_ordinary;
146       break;
147
148       /* A currently unresolved scope ref.  */
149     case SCOPE_REF:
150       gcc_unreachable ();
151     case MAX_EXPR:
152     case MIN_EXPR:
153       /* Disallow <? and >? as lvalues if either argument side-effects.  */
154       if (TREE_SIDE_EFFECTS (TREE_OPERAND (ref, 0))
155           || TREE_SIDE_EFFECTS (TREE_OPERAND (ref, 1)))
156         return clk_none;
157       op1_lvalue_kind = lvalue_p_1 (TREE_OPERAND (ref, 0));
158       op2_lvalue_kind = lvalue_p_1 (TREE_OPERAND (ref, 1));
159       break;
160
161     case COND_EXPR:
162       op1_lvalue_kind = lvalue_p_1 (TREE_OPERAND (ref, 1)
163                                     ? TREE_OPERAND (ref, 1)
164                                     : TREE_OPERAND (ref, 0));
165       op2_lvalue_kind = lvalue_p_1 (TREE_OPERAND (ref, 2));
166       break;
167
168     case MODIFY_EXPR:
169       return clk_ordinary;
170
171     case COMPOUND_EXPR:
172       return lvalue_p_1 (TREE_OPERAND (ref, 1));
173
174     case TARGET_EXPR:
175       return clk_class;
176
177     case VA_ARG_EXPR:
178       return (CLASS_TYPE_P (TREE_TYPE (ref)) ? clk_class : clk_none);
179
180     case CALL_EXPR:
181       /* Any class-valued call would be wrapped in a TARGET_EXPR.  */
182       return clk_none;
183
184     case FUNCTION_DECL:
185       /* All functions (except non-static-member functions) are
186          lvalues.  */
187       return (DECL_NONSTATIC_MEMBER_FUNCTION_P (ref)
188               ? clk_none : clk_ordinary);
189
190     case BASELINK:
191       /* We now represent a reference to a single static member function
192          with a BASELINK.  */
193       /* This CONST_CAST is okay because BASELINK_FUNCTIONS returns
194          its argument unmodified and we assign it to a const_tree.  */
195       return lvalue_p_1 (BASELINK_FUNCTIONS (CONST_CAST_TREE (ref)));
196
197     case NON_DEPENDENT_EXPR:
198       /* We must consider NON_DEPENDENT_EXPRs to be lvalues so that
199          things like "&E" where "E" is an expression with a
200          non-dependent type work. It is safe to be lenient because an
201          error will be issued when the template is instantiated if "E"
202          is not an lvalue.  */
203       return clk_ordinary;
204
205     default:
206       break;
207     }
208
209   /* If one operand is not an lvalue at all, then this expression is
210      not an lvalue.  */
211   if (!op1_lvalue_kind || !op2_lvalue_kind)
212     return clk_none;
213
214   /* Otherwise, it's an lvalue, and it has all the odd properties
215      contributed by either operand.  */
216   op1_lvalue_kind = op1_lvalue_kind | op2_lvalue_kind;
217   /* It's not an ordinary lvalue if it involves either a bit-field or
218      a class rvalue.  */
219   if ((op1_lvalue_kind & ~clk_ordinary) != clk_none)
220     op1_lvalue_kind &= ~clk_ordinary;
221   return op1_lvalue_kind;
222 }
223
224 /* Returns the kind of lvalue that REF is, in the sense of
225    [basic.lval].  This function should really be named lvalue_p; it
226    computes the C++ definition of lvalue.  */
227
228 cp_lvalue_kind
229 real_lvalue_p (tree ref)
230 {
231   cp_lvalue_kind kind = lvalue_p_1 (ref);
232   if (kind & (clk_rvalueref|clk_class))
233     return clk_none;
234   else
235     return kind;
236 }
237
238 /* This differs from real_lvalue_p in that class rvalues are considered
239    lvalues.  */
240
241 bool
242 lvalue_p (const_tree ref)
243 {
244   return (lvalue_p_1 (ref) != clk_none);
245 }
246
247 /* This differs from real_lvalue_p in that rvalues formed by dereferencing
248    rvalue references are considered rvalues.  */
249
250 bool
251 lvalue_or_rvalue_with_address_p (const_tree ref)
252 {
253   cp_lvalue_kind kind = lvalue_p_1 (ref);
254   if (kind & clk_class)
255     return false;
256   else
257     return (kind != clk_none);
258 }
259
260 /* Test whether DECL is a builtin that may appear in a
261    constant-expression. */
262
263 bool
264 builtin_valid_in_constant_expr_p (const_tree decl)
265 {
266   /* At present BUILT_IN_CONSTANT_P is the only builtin we're allowing
267      in constant-expressions.  We may want to add other builtins later. */
268   return DECL_IS_BUILTIN_CONSTANT_P (decl);
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 #ifdef ENABLE_CHECKING
279   gcc_assert (VOID_TYPE_P (TREE_TYPE (value))
280               || TREE_TYPE (decl) == TREE_TYPE (value)
281               || useless_type_conversion_p (TREE_TYPE (decl),
282                                             TREE_TYPE (value)));
283 #endif
284
285   t = build4 (TARGET_EXPR, TREE_TYPE (decl), decl, value,
286               cxx_maybe_build_cleanup (decl), NULL_TREE);
287   /* We always set TREE_SIDE_EFFECTS so that expand_expr does not
288      ignore the TARGET_EXPR.  If there really turn out to be no
289      side-effects, then the optimizer should be able to get rid of
290      whatever code is generated anyhow.  */
291   TREE_SIDE_EFFECTS (t) = 1;
292
293   return t;
294 }
295
296 /* Return an undeclared local temporary of type TYPE for use in building a
297    TARGET_EXPR.  */
298
299 static tree
300 build_local_temp (tree type)
301 {
302   tree slot = build_decl (input_location,
303                           VAR_DECL, NULL_TREE, type);
304   DECL_ARTIFICIAL (slot) = 1;
305   DECL_IGNORED_P (slot) = 1;
306   DECL_CONTEXT (slot) = current_function_decl;
307   layout_decl (slot, 0);
308   return slot;
309 }
310
311 /* Set various status flags when building an AGGR_INIT_EXPR object T.  */
312
313 static void
314 process_aggr_init_operands (tree t)
315 {
316   bool side_effects;
317
318   side_effects = TREE_SIDE_EFFECTS (t);
319   if (!side_effects)
320     {
321       int i, n;
322       n = TREE_OPERAND_LENGTH (t);
323       for (i = 1; i < n; i++)
324         {
325           tree op = TREE_OPERAND (t, i);
326           if (op && TREE_SIDE_EFFECTS (op))
327             {
328               side_effects = 1;
329               break;
330             }
331         }
332     }
333   TREE_SIDE_EFFECTS (t) = side_effects;
334 }
335
336 /* Build an AGGR_INIT_EXPR of class tcc_vl_exp with the indicated RETURN_TYPE,
337    FN, and SLOT.  NARGS is the number of call arguments which are specified
338    as a tree array ARGS.  */
339
340 static tree
341 build_aggr_init_array (tree return_type, tree fn, tree slot, int nargs,
342                        tree *args)
343 {
344   tree t;
345   int i;
346
347   t = build_vl_exp (AGGR_INIT_EXPR, nargs + 3);
348   TREE_TYPE (t) = return_type;
349   AGGR_INIT_EXPR_FN (t) = fn;
350   AGGR_INIT_EXPR_SLOT (t) = slot;
351   for (i = 0; i < nargs; i++)
352     AGGR_INIT_EXPR_ARG (t, i) = args[i];
353   process_aggr_init_operands (t);
354   return t;
355 }
356
357 /* INIT is a CALL_EXPR or AGGR_INIT_EXPR which needs info about its
358    target.  TYPE is the type to be initialized.
359
360    Build an AGGR_INIT_EXPR to represent the initialization.  This function
361    differs from build_cplus_new in that an AGGR_INIT_EXPR can only be used
362    to initialize another object, whereas a TARGET_EXPR can either
363    initialize another object or create its own temporary object, and as a
364    result building up a TARGET_EXPR requires that the type's destructor be
365    callable.  */
366
367 tree
368 build_aggr_init_expr (tree type, tree init)
369 {
370   tree fn;
371   tree slot;
372   tree rval;
373   int is_ctor;
374
375   /* Make sure that we're not trying to create an instance of an
376      abstract class.  */
377   abstract_virtuals_error (NULL_TREE, type);
378
379   if (TREE_CODE (init) == CALL_EXPR)
380     fn = CALL_EXPR_FN (init);
381   else if (TREE_CODE (init) == AGGR_INIT_EXPR)
382     fn = AGGR_INIT_EXPR_FN (init);
383   else
384     return convert (type, init);
385
386   is_ctor = (TREE_CODE (fn) == ADDR_EXPR
387              && TREE_CODE (TREE_OPERAND (fn, 0)) == FUNCTION_DECL
388              && DECL_CONSTRUCTOR_P (TREE_OPERAND (fn, 0)));
389
390   /* We split the CALL_EXPR into its function and its arguments here.
391      Then, in expand_expr, we put them back together.  The reason for
392      this is that this expression might be a default argument
393      expression.  In that case, we need a new temporary every time the
394      expression is used.  That's what break_out_target_exprs does; it
395      replaces every AGGR_INIT_EXPR with a copy that uses a fresh
396      temporary slot.  Then, expand_expr builds up a call-expression
397      using the new slot.  */
398
399   /* If we don't need to use a constructor to create an object of this
400      type, don't mess with AGGR_INIT_EXPR.  */
401   if (is_ctor || TREE_ADDRESSABLE (type))
402     {
403       slot = build_local_temp (type);
404
405       if (TREE_CODE(init) == CALL_EXPR)
406         rval = build_aggr_init_array (void_type_node, fn, slot,
407                                       call_expr_nargs (init),
408                                       CALL_EXPR_ARGP (init));
409       else
410         rval = build_aggr_init_array (void_type_node, fn, slot,
411                                       aggr_init_expr_nargs (init),
412                                       AGGR_INIT_EXPR_ARGP (init));
413       TREE_SIDE_EFFECTS (rval) = 1;
414       AGGR_INIT_VIA_CTOR_P (rval) = is_ctor;
415     }
416   else
417     rval = init;
418
419   return rval;
420 }
421
422 /* INIT is a CALL_EXPR or AGGR_INIT_EXPR which needs info about its
423    target.  TYPE is the type that this initialization should appear to
424    have.
425
426    Build an encapsulation of the initialization to perform
427    and return it so that it can be processed by language-independent
428    and language-specific expression expanders.  */
429
430 tree
431 build_cplus_new (tree type, tree init)
432 {
433   tree rval = build_aggr_init_expr (type, init);
434   tree slot;
435
436   if (TREE_CODE (rval) == AGGR_INIT_EXPR)
437     slot = AGGR_INIT_EXPR_SLOT (rval);
438   else if (TREE_CODE (rval) == CALL_EXPR)
439     slot = build_local_temp (type);
440   else
441     return rval;
442
443   rval = build_target_expr (slot, rval);
444   TARGET_EXPR_IMPLICIT_P (rval) = 1;
445
446   return rval;
447 }
448
449 /* Build a TARGET_EXPR using INIT to initialize a new temporary of the
450    indicated TYPE.  */
451
452 tree
453 build_target_expr_with_type (tree init, tree type)
454 {
455   gcc_assert (!VOID_TYPE_P (type));
456
457   if (TREE_CODE (init) == TARGET_EXPR)
458     return init;
459   else if (CLASS_TYPE_P (type) && !TYPE_HAS_TRIVIAL_INIT_REF (type)
460            && !VOID_TYPE_P (TREE_TYPE (init))
461            && TREE_CODE (init) != COND_EXPR
462            && TREE_CODE (init) != CONSTRUCTOR
463            && TREE_CODE (init) != VA_ARG_EXPR)
464     /* We need to build up a copy constructor call.  A void initializer
465        means we're being called from bot_manip.  COND_EXPR is a special
466        case because we already have copies on the arms and we don't want
467        another one here.  A CONSTRUCTOR is aggregate initialization, which
468        is handled separately.  A VA_ARG_EXPR is magic creation of an
469        aggregate; there's no additional work to be done.  */
470     return force_rvalue (init);
471
472   return force_target_expr (type, init);
473 }
474
475 /* Like the above function, but without the checking.  This function should
476    only be used by code which is deliberately trying to subvert the type
477    system, such as call_builtin_trap.  */
478
479 tree
480 force_target_expr (tree type, tree init)
481 {
482   tree slot;
483
484   gcc_assert (!VOID_TYPE_P (type));
485
486   slot = build_local_temp (type);
487   return build_target_expr (slot, init);
488 }
489
490 /* Like build_target_expr_with_type, but use the type of INIT.  */
491
492 tree
493 get_target_expr (tree init)
494 {
495   if (TREE_CODE (init) == AGGR_INIT_EXPR)
496     return build_target_expr (AGGR_INIT_EXPR_SLOT (init), init);
497   else
498     return build_target_expr_with_type (init, TREE_TYPE (init));
499 }
500
501 /* If EXPR is a bitfield reference, convert it to the declared type of
502    the bitfield, and return the resulting expression.  Otherwise,
503    return EXPR itself.  */
504
505 tree
506 convert_bitfield_to_declared_type (tree expr)
507 {
508   tree bitfield_type;
509
510   bitfield_type = is_bitfield_expr_with_lowered_type (expr);
511   if (bitfield_type)
512     expr = convert_to_integer (TYPE_MAIN_VARIANT (bitfield_type),
513                                expr);
514   return expr;
515 }
516
517 /* EXPR is being used in an rvalue context.  Return a version of EXPR
518    that is marked as an rvalue.  */
519
520 tree
521 rvalue (tree expr)
522 {
523   tree type;
524
525   if (error_operand_p (expr))
526     return expr;
527
528   /* [basic.lval]
529
530      Non-class rvalues always have cv-unqualified types.  */
531   type = TREE_TYPE (expr);
532   if (!CLASS_TYPE_P (type) && cp_type_quals (type))
533     type = TYPE_MAIN_VARIANT (type);
534
535   if (!processing_template_decl && real_lvalue_p (expr))
536     expr = build1 (NON_LVALUE_EXPR, type, expr);
537   else if (type != TREE_TYPE (expr))
538     expr = build_nop (type, expr);
539
540   return expr;
541 }
542
543 \f
544 /* Hash an ARRAY_TYPE.  K is really of type `tree'.  */
545
546 static hashval_t
547 cplus_array_hash (const void* k)
548 {
549   hashval_t hash;
550   const_tree const t = (const_tree) k;
551
552   hash = TYPE_UID (TREE_TYPE (t));
553   if (TYPE_DOMAIN (t))
554     hash ^= TYPE_UID (TYPE_DOMAIN (t));
555   return hash;
556 }
557
558 typedef struct cplus_array_info {
559   tree type;
560   tree domain;
561 } cplus_array_info;
562
563 /* Compare two ARRAY_TYPEs.  K1 is really of type `tree', K2 is really
564    of type `cplus_array_info*'. */
565
566 static int
567 cplus_array_compare (const void * k1, const void * k2)
568 {
569   const_tree const t1 = (const_tree) k1;
570   const cplus_array_info *const t2 = (const cplus_array_info*) k2;
571
572   return (TREE_TYPE (t1) == t2->type && TYPE_DOMAIN (t1) == t2->domain);
573 }
574
575 /* Hash table containing all of the C++ array types, including
576    dependent array types and array types whose element type is
577    cv-qualified.  */
578 static GTY ((param_is (union tree_node))) htab_t cplus_array_htab;
579
580
581 static tree
582 build_cplus_array_type_1 (tree elt_type, tree index_type)
583 {
584   tree t;
585
586   if (elt_type == error_mark_node || index_type == error_mark_node)
587     return error_mark_node;
588
589   if (processing_template_decl
590       && (dependent_type_p (elt_type)
591           || (index_type && !TREE_CONSTANT (TYPE_MAX_VALUE (index_type)))))
592     {
593       void **e;
594       cplus_array_info cai;
595       hashval_t hash;
596
597       if (cplus_array_htab == NULL)
598         cplus_array_htab = htab_create_ggc (61, &cplus_array_hash,
599                                             &cplus_array_compare, NULL);
600       
601       hash = TYPE_UID (elt_type);
602       if (index_type)
603         hash ^= TYPE_UID (index_type);
604       cai.type = elt_type;
605       cai.domain = index_type;
606
607       e = htab_find_slot_with_hash (cplus_array_htab, &cai, hash, INSERT); 
608       if (*e)
609         /* We have found the type: we're done.  */
610         return (tree) *e;
611       else
612         {
613           /* Build a new array type.  */
614           t = make_node (ARRAY_TYPE);
615           TREE_TYPE (t) = elt_type;
616           TYPE_DOMAIN (t) = index_type;
617
618           /* Store it in the hash table. */
619           *e = t;
620
621           /* Set the canonical type for this new node.  */
622           if (TYPE_STRUCTURAL_EQUALITY_P (elt_type)
623               || (index_type && TYPE_STRUCTURAL_EQUALITY_P (index_type)))
624             SET_TYPE_STRUCTURAL_EQUALITY (t);
625           else if (TYPE_CANONICAL (elt_type) != elt_type
626                    || (index_type 
627                        && TYPE_CANONICAL (index_type) != index_type))
628             TYPE_CANONICAL (t)
629                 = build_cplus_array_type 
630                    (TYPE_CANONICAL (elt_type),
631                     index_type ? TYPE_CANONICAL (index_type) : index_type);
632           else
633             TYPE_CANONICAL (t) = t;
634         }
635     }
636   else
637     t = build_array_type (elt_type, index_type);
638
639   /* Push these needs up so that initialization takes place
640      more easily.  */
641   TYPE_NEEDS_CONSTRUCTING (t)
642     = TYPE_NEEDS_CONSTRUCTING (TYPE_MAIN_VARIANT (elt_type));
643   TYPE_HAS_NONTRIVIAL_DESTRUCTOR (t)
644     = TYPE_HAS_NONTRIVIAL_DESTRUCTOR (TYPE_MAIN_VARIANT (elt_type));
645   return t;
646 }
647
648 tree
649 build_cplus_array_type (tree elt_type, tree index_type)
650 {
651   tree t;
652   int type_quals = cp_type_quals (elt_type);
653
654   if (type_quals != TYPE_UNQUALIFIED)
655     elt_type = cp_build_qualified_type (elt_type, TYPE_UNQUALIFIED);
656
657   t = build_cplus_array_type_1 (elt_type, index_type);
658
659   if (type_quals != TYPE_UNQUALIFIED)
660     t = cp_build_qualified_type (t, type_quals);
661
662   return t;
663 }
664
665 /* Return an ARRAY_TYPE with element type ELT and length N.  */
666
667 tree
668 build_array_of_n_type (tree elt, int n)
669 {
670   return build_cplus_array_type (elt, build_index_type (size_int (n - 1)));
671 }
672
673 /* Return a reference type node referring to TO_TYPE.  If RVAL is
674    true, return an rvalue reference type, otherwise return an lvalue
675    reference type.  If a type node exists, reuse it, otherwise create
676    a new one.  */
677 tree
678 cp_build_reference_type (tree to_type, bool rval)
679 {
680   tree lvalue_ref, t;
681   lvalue_ref = build_reference_type (to_type);
682   if (!rval)
683     return lvalue_ref;
684
685   /* This code to create rvalue reference types is based on and tied
686      to the code creating lvalue reference types in the middle-end
687      functions build_reference_type_for_mode and build_reference_type.
688
689      It works by putting the rvalue reference type nodes after the
690      lvalue reference nodes in the TYPE_NEXT_REF_TO linked list, so
691      they will effectively be ignored by the middle end.  */
692
693   for (t = lvalue_ref; (t = TYPE_NEXT_REF_TO (t)); )
694     if (TYPE_REF_IS_RVALUE (t))
695       return t;
696
697   t = copy_node (lvalue_ref);
698
699   TYPE_REF_IS_RVALUE (t) = true;
700   TYPE_NEXT_REF_TO (t) = TYPE_NEXT_REF_TO (lvalue_ref);
701   TYPE_NEXT_REF_TO (lvalue_ref) = t;
702   TYPE_MAIN_VARIANT (t) = t;
703
704   if (TYPE_STRUCTURAL_EQUALITY_P (to_type))
705     SET_TYPE_STRUCTURAL_EQUALITY (t);
706   else if (TYPE_CANONICAL (to_type) != to_type)
707     TYPE_CANONICAL (t) 
708       = cp_build_reference_type (TYPE_CANONICAL (to_type), rval);
709   else
710     TYPE_CANONICAL (t) = t;
711
712   layout_type (t);
713
714   return t;
715
716 }
717
718 /* Used by the C++ front end to build qualified array types.  However,
719    the C version of this function does not properly maintain canonical
720    types (which are not used in C).  */
721 tree
722 c_build_qualified_type (tree type, int type_quals)
723 {
724   return cp_build_qualified_type (type, type_quals);
725 }
726
727 \f
728 /* Make a variant of TYPE, qualified with the TYPE_QUALS.  Handles
729    arrays correctly.  In particular, if TYPE is an array of T's, and
730    TYPE_QUALS is non-empty, returns an array of qualified T's.
731
732    FLAGS determines how to deal with ill-formed qualifications. If
733    tf_ignore_bad_quals is set, then bad qualifications are dropped
734    (this is permitted if TYPE was introduced via a typedef or template
735    type parameter). If bad qualifications are dropped and tf_warning
736    is set, then a warning is issued for non-const qualifications.  If
737    tf_ignore_bad_quals is not set and tf_error is not set, we
738    return error_mark_node. Otherwise, we issue an error, and ignore
739    the qualifications.
740
741    Qualification of a reference type is valid when the reference came
742    via a typedef or template type argument. [dcl.ref] No such
743    dispensation is provided for qualifying a function type.  [dcl.fct]
744    DR 295 queries this and the proposed resolution brings it into line
745    with qualifying a reference.  We implement the DR.  We also behave
746    in a similar manner for restricting non-pointer types.  */
747
748 tree
749 cp_build_qualified_type_real (tree type,
750                               int type_quals,
751                               tsubst_flags_t complain)
752 {
753   tree result;
754   int bad_quals = TYPE_UNQUALIFIED;
755
756   if (type == error_mark_node)
757     return type;
758
759   if (type_quals == cp_type_quals (type))
760     return type;
761
762   if (TREE_CODE (type) == ARRAY_TYPE)
763     {
764       /* In C++, the qualification really applies to the array element
765          type.  Obtain the appropriately qualified element type.  */
766       tree t;
767       tree element_type
768         = cp_build_qualified_type_real (TREE_TYPE (type),
769                                         type_quals,
770                                         complain);
771
772       if (element_type == error_mark_node)
773         return error_mark_node;
774
775       /* See if we already have an identically qualified type.  */
776       for (t = TYPE_MAIN_VARIANT (type); t; t = TYPE_NEXT_VARIANT (t))
777         if (cp_type_quals (t) == type_quals
778             && TYPE_NAME (t) == TYPE_NAME (type)
779             && TYPE_CONTEXT (t) == TYPE_CONTEXT (type))
780           break;
781
782       if (!t)
783       {
784         t = build_cplus_array_type_1 (element_type, TYPE_DOMAIN (type));
785
786         if (TYPE_MAIN_VARIANT (t) != TYPE_MAIN_VARIANT (type))
787           {
788             /* Set the main variant of the newly-created ARRAY_TYPE
789                (with cv-qualified element type) to the main variant of
790                the unqualified ARRAY_TYPE we started with.  */
791             tree last_variant = t;
792             tree m = TYPE_MAIN_VARIANT (type);
793
794             /* Find the last variant on the new ARRAY_TYPEs list of
795                variants, setting the main variant of each of the other
796                types to the main variant of our unqualified
797                ARRAY_TYPE.  */
798             while (TYPE_NEXT_VARIANT (last_variant))
799               {
800                 TYPE_MAIN_VARIANT (last_variant) = m;
801                 last_variant = TYPE_NEXT_VARIANT (last_variant);
802               }
803
804             /* Splice in the newly-created variants.  */
805             TYPE_NEXT_VARIANT (last_variant) = TYPE_NEXT_VARIANT (m);
806             TYPE_NEXT_VARIANT (m) = t;
807             TYPE_MAIN_VARIANT (last_variant) = m;
808           }
809       }
810
811       /* Even if we already had this variant, we update
812          TYPE_NEEDS_CONSTRUCTING and TYPE_HAS_NONTRIVIAL_DESTRUCTOR in case
813          they changed since the variant was originally created.
814
815          This seems hokey; if there is some way to use a previous
816          variant *without* coming through here,
817          TYPE_NEEDS_CONSTRUCTING will never be updated.  */
818       TYPE_NEEDS_CONSTRUCTING (t)
819         = TYPE_NEEDS_CONSTRUCTING (TYPE_MAIN_VARIANT (element_type));
820       TYPE_HAS_NONTRIVIAL_DESTRUCTOR (t)
821         = TYPE_HAS_NONTRIVIAL_DESTRUCTOR (TYPE_MAIN_VARIANT (element_type));
822       return t;
823     }
824   else if (TYPE_PTRMEMFUNC_P (type))
825     {
826       /* For a pointer-to-member type, we can't just return a
827          cv-qualified version of the RECORD_TYPE.  If we do, we
828          haven't changed the field that contains the actual pointer to
829          a method, and so TYPE_PTRMEMFUNC_FN_TYPE will be wrong.  */
830       tree t;
831
832       t = TYPE_PTRMEMFUNC_FN_TYPE (type);
833       t = cp_build_qualified_type_real (t, type_quals, complain);
834       return build_ptrmemfunc_type (t);
835     }
836   else if (TREE_CODE (type) == TYPE_PACK_EXPANSION)
837     {
838       tree t = PACK_EXPANSION_PATTERN (type);
839
840       t = cp_build_qualified_type_real (t, type_quals, complain);
841       return make_pack_expansion (t);
842     }
843
844   /* A reference or method type shall not be cv-qualified.
845      [dcl.ref], [dcl.fct]  */
846   if (type_quals & (TYPE_QUAL_CONST | TYPE_QUAL_VOLATILE)
847       && (TREE_CODE (type) == REFERENCE_TYPE
848           || TREE_CODE (type) == METHOD_TYPE))
849     {
850       bad_quals |= type_quals & (TYPE_QUAL_CONST | TYPE_QUAL_VOLATILE);
851       type_quals &= ~(TYPE_QUAL_CONST | TYPE_QUAL_VOLATILE);
852     }
853
854   /* A restrict-qualified type must be a pointer (or reference)
855      to object or incomplete type. */
856   if ((type_quals & TYPE_QUAL_RESTRICT)
857       && TREE_CODE (type) != TEMPLATE_TYPE_PARM
858       && TREE_CODE (type) != TYPENAME_TYPE
859       && !POINTER_TYPE_P (type))
860     {
861       bad_quals |= TYPE_QUAL_RESTRICT;
862       type_quals &= ~TYPE_QUAL_RESTRICT;
863     }
864
865   if (bad_quals == TYPE_UNQUALIFIED)
866     /*OK*/;
867   else if (!(complain & (tf_error | tf_ignore_bad_quals)))
868     return error_mark_node;
869   else
870     {
871       if (complain & tf_ignore_bad_quals)
872         /* We're not going to warn about constifying things that can't
873            be constified.  */
874         bad_quals &= ~TYPE_QUAL_CONST;
875       if (bad_quals)
876         {
877           tree bad_type = build_qualified_type (ptr_type_node, bad_quals);
878
879           if (!(complain & tf_ignore_bad_quals))
880             error ("%qV qualifiers cannot be applied to %qT",
881                    bad_type, type);
882         }
883     }
884
885   /* Retrieve (or create) the appropriately qualified variant.  */
886   result = build_qualified_type (type, type_quals);
887
888   /* If this was a pointer-to-method type, and we just made a copy,
889      then we need to unshare the record that holds the cached
890      pointer-to-member-function type, because these will be distinct
891      between the unqualified and qualified types.  */
892   if (result != type
893       && TREE_CODE (type) == POINTER_TYPE
894       && TREE_CODE (TREE_TYPE (type)) == METHOD_TYPE
895       && TYPE_LANG_SPECIFIC (result) == TYPE_LANG_SPECIFIC (type))
896     TYPE_LANG_SPECIFIC (result) = NULL;
897
898   /* We may also have ended up building a new copy of the canonical
899      type of a pointer-to-method type, which could have the same
900      sharing problem described above.  */
901   if (TYPE_CANONICAL (result) != TYPE_CANONICAL (type)
902       && TREE_CODE (type) == POINTER_TYPE
903       && TREE_CODE (TREE_TYPE (type)) == METHOD_TYPE
904       && (TYPE_LANG_SPECIFIC (TYPE_CANONICAL (result)) 
905           == TYPE_LANG_SPECIFIC (TYPE_CANONICAL (type))))
906     TYPE_LANG_SPECIFIC (TYPE_CANONICAL (result)) = NULL;
907       
908
909   return result;
910 }
911
912 /* Builds a qualified variant of T that is not a typedef variant.
913    E.g. consider the following declarations:
914      typedef const int ConstInt;
915      typedef ConstInt* PtrConstInt;
916    If T is PtrConstInt, this function returns a type representing
917      const int*.
918    In other words, if T is a typedef, the function returns the underlying type.
919    The cv-qualification and attributes of the type returned match the
920    input type.
921    They will always be compatible types.
922    The returned type is built so that all of its subtypes
923    recursively have their typedefs stripped as well.
924
925    This is different from just returning TYPE_CANONICAL (T)
926    Because of several reasons:
927     * If T is a type that needs structural equality
928       its TYPE_CANONICAL (T) will be NULL.
929     * TYPE_CANONICAL (T) desn't carry type attributes
930       and looses template parameter names.   */
931
932 tree
933 strip_typedefs (tree t)
934 {
935   tree result = NULL, type = NULL, t0 = NULL;
936
937   if (!t || t == error_mark_node || t == TYPE_CANONICAL (t))
938     return t;
939
940   gcc_assert (TYPE_P (t));
941
942   switch (TREE_CODE (t))
943     {
944     case POINTER_TYPE:
945       type = strip_typedefs (TREE_TYPE (t));
946       result = build_pointer_type (type);
947       break;
948     case REFERENCE_TYPE:
949       type = strip_typedefs (TREE_TYPE (t));
950       result = cp_build_reference_type (type, TYPE_REF_IS_RVALUE (t));
951       break;
952     case OFFSET_TYPE:
953       t0 = strip_typedefs (TYPE_OFFSET_BASETYPE (t));
954       type = strip_typedefs (TREE_TYPE (t));
955       result = build_offset_type (t0, type);
956       break;
957     case RECORD_TYPE:
958       if (TYPE_PTRMEMFUNC_P (t))
959         {
960           t0 = strip_typedefs (TYPE_PTRMEMFUNC_FN_TYPE (t));
961           result = build_ptrmemfunc_type (t0);
962         }
963       break;
964     case ARRAY_TYPE:
965       type = strip_typedefs (TREE_TYPE (t));
966       t0  = strip_typedefs (TYPE_DOMAIN (t));;
967       result = build_cplus_array_type (type, t0);
968       break;
969     case FUNCTION_TYPE:
970     case METHOD_TYPE:
971       {
972         tree arg_types = NULL, arg_node, arg_type;
973         for (arg_node = TYPE_ARG_TYPES (t);
974              arg_node;
975              arg_node = TREE_CHAIN (arg_node))
976           {
977             if (arg_node == void_list_node)
978               break;
979             arg_type = strip_typedefs (TREE_VALUE (arg_node));
980             gcc_assert (arg_type);
981
982             arg_types =
983               tree_cons (TREE_PURPOSE (arg_node), arg_type, arg_types);
984           }
985
986         if (arg_types)
987           arg_types = nreverse (arg_types);
988
989         /* A list of parameters not ending with an ellipsis
990            must end with void_list_node.  */
991         if (arg_node)
992           arg_types = chainon (arg_types, void_list_node);
993
994         type = strip_typedefs (TREE_TYPE (t));
995         if (TREE_CODE (t) == METHOD_TYPE)
996           {
997             tree class_type = TREE_TYPE (TREE_VALUE (arg_types));
998             gcc_assert (class_type);
999             result =
1000               build_method_type_directly (class_type, type,
1001                                           TREE_CHAIN (arg_types));
1002           }
1003         else
1004             result = build_function_type (type,
1005                                           arg_types);
1006       }
1007       break;
1008     default:
1009       break;
1010     }
1011
1012   if (!result)
1013       result = TYPE_MAIN_VARIANT (t);
1014   return cp_build_qualified_type (result, cp_type_quals (t));
1015 }
1016
1017 \f
1018 /* Makes a copy of BINFO and TYPE, which is to be inherited into a
1019    graph dominated by T.  If BINFO is NULL, TYPE is a dependent base,
1020    and we do a shallow copy.  If BINFO is non-NULL, we do a deep copy.
1021    VIRT indicates whether TYPE is inherited virtually or not.
1022    IGO_PREV points at the previous binfo of the inheritance graph
1023    order chain.  The newly copied binfo's TREE_CHAIN forms this
1024    ordering.
1025
1026    The CLASSTYPE_VBASECLASSES vector of T is constructed in the
1027    correct order. That is in the order the bases themselves should be
1028    constructed in.
1029
1030    The BINFO_INHERITANCE of a virtual base class points to the binfo
1031    of the most derived type. ??? We could probably change this so that
1032    BINFO_INHERITANCE becomes synonymous with BINFO_PRIMARY, and hence
1033    remove a field.  They currently can only differ for primary virtual
1034    virtual bases.  */
1035
1036 tree
1037 copy_binfo (tree binfo, tree type, tree t, tree *igo_prev, int virt)
1038 {
1039   tree new_binfo;
1040
1041   if (virt)
1042     {
1043       /* See if we've already made this virtual base.  */
1044       new_binfo = binfo_for_vbase (type, t);
1045       if (new_binfo)
1046         return new_binfo;
1047     }
1048
1049   new_binfo = make_tree_binfo (binfo ? BINFO_N_BASE_BINFOS (binfo) : 0);
1050   BINFO_TYPE (new_binfo) = type;
1051
1052   /* Chain it into the inheritance graph.  */
1053   TREE_CHAIN (*igo_prev) = new_binfo;
1054   *igo_prev = new_binfo;
1055
1056   if (binfo)
1057     {
1058       int ix;
1059       tree base_binfo;
1060
1061       gcc_assert (!BINFO_DEPENDENT_BASE_P (binfo));
1062       gcc_assert (SAME_BINFO_TYPE_P (BINFO_TYPE (binfo), type));
1063
1064       BINFO_OFFSET (new_binfo) = BINFO_OFFSET (binfo);
1065       BINFO_VIRTUALS (new_binfo) = BINFO_VIRTUALS (binfo);
1066
1067       /* We do not need to copy the accesses, as they are read only.  */
1068       BINFO_BASE_ACCESSES (new_binfo) = BINFO_BASE_ACCESSES (binfo);
1069
1070       /* Recursively copy base binfos of BINFO.  */
1071       for (ix = 0; BINFO_BASE_ITERATE (binfo, ix, base_binfo); ix++)
1072         {
1073           tree new_base_binfo;
1074
1075           gcc_assert (!BINFO_DEPENDENT_BASE_P (base_binfo));
1076           new_base_binfo = copy_binfo (base_binfo, BINFO_TYPE (base_binfo),
1077                                        t, igo_prev,
1078                                        BINFO_VIRTUAL_P (base_binfo));
1079
1080           if (!BINFO_INHERITANCE_CHAIN (new_base_binfo))
1081             BINFO_INHERITANCE_CHAIN (new_base_binfo) = new_binfo;
1082           BINFO_BASE_APPEND (new_binfo, new_base_binfo);
1083         }
1084     }
1085   else
1086     BINFO_DEPENDENT_BASE_P (new_binfo) = 1;
1087
1088   if (virt)
1089     {
1090       /* Push it onto the list after any virtual bases it contains
1091          will have been pushed.  */
1092       VEC_quick_push (tree, CLASSTYPE_VBASECLASSES (t), new_binfo);
1093       BINFO_VIRTUAL_P (new_binfo) = 1;
1094       BINFO_INHERITANCE_CHAIN (new_binfo) = TYPE_BINFO (t);
1095     }
1096
1097   return new_binfo;
1098 }
1099 \f
1100 /* Hashing of lists so that we don't make duplicates.
1101    The entry point is `list_hash_canon'.  */
1102
1103 /* Now here is the hash table.  When recording a list, it is added
1104    to the slot whose index is the hash code mod the table size.
1105    Note that the hash table is used for several kinds of lists.
1106    While all these live in the same table, they are completely independent,
1107    and the hash code is computed differently for each of these.  */
1108
1109 static GTY ((param_is (union tree_node))) htab_t list_hash_table;
1110
1111 struct list_proxy
1112 {
1113   tree purpose;
1114   tree value;
1115   tree chain;
1116 };
1117
1118 /* Compare ENTRY (an entry in the hash table) with DATA (a list_proxy
1119    for a node we are thinking about adding).  */
1120
1121 static int
1122 list_hash_eq (const void* entry, const void* data)
1123 {
1124   const_tree const t = (const_tree) entry;
1125   const struct list_proxy *const proxy = (const struct list_proxy *) data;
1126
1127   return (TREE_VALUE (t) == proxy->value
1128           && TREE_PURPOSE (t) == proxy->purpose
1129           && TREE_CHAIN (t) == proxy->chain);
1130 }
1131
1132 /* Compute a hash code for a list (chain of TREE_LIST nodes
1133    with goodies in the TREE_PURPOSE, TREE_VALUE, and bits of the
1134    TREE_COMMON slots), by adding the hash codes of the individual entries.  */
1135
1136 static hashval_t
1137 list_hash_pieces (tree purpose, tree value, tree chain)
1138 {
1139   hashval_t hashcode = 0;
1140
1141   if (chain)
1142     hashcode += TREE_HASH (chain);
1143
1144   if (value)
1145     hashcode += TREE_HASH (value);
1146   else
1147     hashcode += 1007;
1148   if (purpose)
1149     hashcode += TREE_HASH (purpose);
1150   else
1151     hashcode += 1009;
1152   return hashcode;
1153 }
1154
1155 /* Hash an already existing TREE_LIST.  */
1156
1157 static hashval_t
1158 list_hash (const void* p)
1159 {
1160   const_tree const t = (const_tree) p;
1161   return list_hash_pieces (TREE_PURPOSE (t),
1162                            TREE_VALUE (t),
1163                            TREE_CHAIN (t));
1164 }
1165
1166 /* Given list components PURPOSE, VALUE, AND CHAIN, return the canonical
1167    object for an identical list if one already exists.  Otherwise, build a
1168    new one, and record it as the canonical object.  */
1169
1170 tree
1171 hash_tree_cons (tree purpose, tree value, tree chain)
1172 {
1173   int hashcode = 0;
1174   void **slot;
1175   struct list_proxy proxy;
1176
1177   /* Hash the list node.  */
1178   hashcode = list_hash_pieces (purpose, value, chain);
1179   /* Create a proxy for the TREE_LIST we would like to create.  We
1180      don't actually create it so as to avoid creating garbage.  */
1181   proxy.purpose = purpose;
1182   proxy.value = value;
1183   proxy.chain = chain;
1184   /* See if it is already in the table.  */
1185   slot = htab_find_slot_with_hash (list_hash_table, &proxy, hashcode,
1186                                    INSERT);
1187   /* If not, create a new node.  */
1188   if (!*slot)
1189     *slot = tree_cons (purpose, value, chain);
1190   return (tree) *slot;
1191 }
1192
1193 /* Constructor for hashed lists.  */
1194
1195 tree
1196 hash_tree_chain (tree value, tree chain)
1197 {
1198   return hash_tree_cons (NULL_TREE, value, chain);
1199 }
1200 \f
1201 void
1202 debug_binfo (tree elem)
1203 {
1204   HOST_WIDE_INT n;
1205   tree virtuals;
1206
1207   fprintf (stderr, "type \"%s\", offset = " HOST_WIDE_INT_PRINT_DEC
1208            "\nvtable type:\n",
1209            TYPE_NAME_STRING (BINFO_TYPE (elem)),
1210            TREE_INT_CST_LOW (BINFO_OFFSET (elem)));
1211   debug_tree (BINFO_TYPE (elem));
1212   if (BINFO_VTABLE (elem))
1213     fprintf (stderr, "vtable decl \"%s\"\n",
1214              IDENTIFIER_POINTER (DECL_NAME (get_vtbl_decl_for_binfo (elem))));
1215   else
1216     fprintf (stderr, "no vtable decl yet\n");
1217   fprintf (stderr, "virtuals:\n");
1218   virtuals = BINFO_VIRTUALS (elem);
1219   n = 0;
1220
1221   while (virtuals)
1222     {
1223       tree fndecl = TREE_VALUE (virtuals);
1224       fprintf (stderr, "%s [%ld =? %ld]\n",
1225                IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (fndecl)),
1226                (long) n, (long) TREE_INT_CST_LOW (DECL_VINDEX (fndecl)));
1227       ++n;
1228       virtuals = TREE_CHAIN (virtuals);
1229     }
1230 }
1231
1232 /* Build a representation for the qualified name SCOPE::NAME.  TYPE is
1233    the type of the result expression, if known, or NULL_TREE if the
1234    resulting expression is type-dependent.  If TEMPLATE_P is true,
1235    NAME is known to be a template because the user explicitly used the
1236    "template" keyword after the "::".
1237
1238    All SCOPE_REFs should be built by use of this function.  */
1239
1240 tree
1241 build_qualified_name (tree type, tree scope, tree name, bool template_p)
1242 {
1243   tree t;
1244   if (type == error_mark_node
1245       || scope == error_mark_node
1246       || name == error_mark_node)
1247     return error_mark_node;
1248   t = build2 (SCOPE_REF, type, scope, name);
1249   QUALIFIED_NAME_IS_TEMPLATE (t) = template_p;
1250   return t;
1251 }
1252
1253 /* Returns nonzero if X is an expression for a (possibly overloaded)
1254    function.  If "f" is a function or function template, "f", "c->f",
1255    "c.f", "C::f", and "f<int>" will all be considered possibly
1256    overloaded functions.  Returns 2 if the function is actually
1257    overloaded, i.e., if it is impossible to know the type of the
1258    function without performing overload resolution.  */
1259  
1260 int
1261 is_overloaded_fn (tree x)
1262 {
1263   /* A baselink is also considered an overloaded function.  */
1264   if (TREE_CODE (x) == OFFSET_REF
1265       || TREE_CODE (x) == COMPONENT_REF)
1266     x = TREE_OPERAND (x, 1);
1267   if (BASELINK_P (x))
1268     x = BASELINK_FUNCTIONS (x);
1269   if (TREE_CODE (x) == TEMPLATE_ID_EXPR)
1270     x = TREE_OPERAND (x, 0);
1271   if (DECL_FUNCTION_TEMPLATE_P (OVL_CURRENT (x))
1272       || (TREE_CODE (x) == OVERLOAD && OVL_CHAIN (x)))
1273     return 2;
1274   return  (TREE_CODE (x) == FUNCTION_DECL
1275            || TREE_CODE (x) == OVERLOAD);
1276 }
1277
1278 /* Returns true iff X is an expression for an overloaded function
1279    whose type cannot be known without performing overload
1280    resolution.  */
1281
1282 bool
1283 really_overloaded_fn (tree x)
1284 {
1285   return is_overloaded_fn (x) == 2;
1286 }
1287
1288 tree
1289 get_first_fn (tree from)
1290 {
1291   gcc_assert (is_overloaded_fn (from));
1292   /* A baselink is also considered an overloaded function.  */
1293   if (TREE_CODE (from) == OFFSET_REF
1294       || TREE_CODE (from) == COMPONENT_REF)
1295     from = TREE_OPERAND (from, 1);
1296   if (BASELINK_P (from))
1297     from = BASELINK_FUNCTIONS (from);
1298   if (TREE_CODE (from) == TEMPLATE_ID_EXPR)
1299     from = TREE_OPERAND (from, 0);
1300   return OVL_CURRENT (from);
1301 }
1302
1303 /* Return a new OVL node, concatenating it with the old one.  */
1304
1305 tree
1306 ovl_cons (tree decl, tree chain)
1307 {
1308   tree result = make_node (OVERLOAD);
1309   TREE_TYPE (result) = unknown_type_node;
1310   OVL_FUNCTION (result) = decl;
1311   TREE_CHAIN (result) = chain;
1312
1313   return result;
1314 }
1315
1316 /* Build a new overloaded function. If this is the first one,
1317    just return it; otherwise, ovl_cons the _DECLs */
1318
1319 tree
1320 build_overload (tree decl, tree chain)
1321 {
1322   if (! chain && TREE_CODE (decl) != TEMPLATE_DECL)
1323     return decl;
1324   if (chain && TREE_CODE (chain) != OVERLOAD)
1325     chain = ovl_cons (chain, NULL_TREE);
1326   return ovl_cons (decl, chain);
1327 }
1328
1329 \f
1330 #define PRINT_RING_SIZE 4
1331
1332 static const char *
1333 cxx_printable_name_internal (tree decl, int v, bool translate)
1334 {
1335   static unsigned int uid_ring[PRINT_RING_SIZE];
1336   static char *print_ring[PRINT_RING_SIZE];
1337   static bool trans_ring[PRINT_RING_SIZE];
1338   static int ring_counter;
1339   int i;
1340
1341   /* Only cache functions.  */
1342   if (v < 2
1343       || TREE_CODE (decl) != FUNCTION_DECL
1344       || DECL_LANG_SPECIFIC (decl) == 0)
1345     return lang_decl_name (decl, v, translate);
1346
1347   /* See if this print name is lying around.  */
1348   for (i = 0; i < PRINT_RING_SIZE; i++)
1349     if (uid_ring[i] == DECL_UID (decl) && translate == trans_ring[i])
1350       /* yes, so return it.  */
1351       return print_ring[i];
1352
1353   if (++ring_counter == PRINT_RING_SIZE)
1354     ring_counter = 0;
1355
1356   if (current_function_decl != NULL_TREE)
1357     {
1358       /* There may be both translated and untranslated versions of the
1359          name cached.  */
1360       for (i = 0; i < 2; i++)
1361         {
1362           if (uid_ring[ring_counter] == DECL_UID (current_function_decl))
1363             ring_counter += 1;
1364           if (ring_counter == PRINT_RING_SIZE)
1365             ring_counter = 0;
1366         }
1367       gcc_assert (uid_ring[ring_counter] != DECL_UID (current_function_decl));
1368     }
1369
1370   if (print_ring[ring_counter])
1371     free (print_ring[ring_counter]);
1372
1373   print_ring[ring_counter] = xstrdup (lang_decl_name (decl, v, translate));
1374   uid_ring[ring_counter] = DECL_UID (decl);
1375   trans_ring[ring_counter] = translate;
1376   return print_ring[ring_counter];
1377 }
1378
1379 const char *
1380 cxx_printable_name (tree decl, int v)
1381 {
1382   return cxx_printable_name_internal (decl, v, false);
1383 }
1384
1385 const char *
1386 cxx_printable_name_translate (tree decl, int v)
1387 {
1388   return cxx_printable_name_internal (decl, v, true);
1389 }
1390 \f
1391 /* Build the FUNCTION_TYPE or METHOD_TYPE which may throw exceptions
1392    listed in RAISES.  */
1393
1394 tree
1395 build_exception_variant (tree type, tree raises)
1396 {
1397   tree v = TYPE_MAIN_VARIANT (type);
1398   int type_quals = TYPE_QUALS (type);
1399
1400   for (; v; v = TYPE_NEXT_VARIANT (v))
1401     if (check_qualified_type (v, type, type_quals)
1402         && comp_except_specs (raises, TYPE_RAISES_EXCEPTIONS (v), 1))
1403       return v;
1404
1405   /* Need to build a new variant.  */
1406   v = build_variant_type_copy (type);
1407   TYPE_RAISES_EXCEPTIONS (v) = raises;
1408   return v;
1409 }
1410
1411 /* Given a TEMPLATE_TEMPLATE_PARM node T, create a new
1412    BOUND_TEMPLATE_TEMPLATE_PARM bound with NEWARGS as its template
1413    arguments.  */
1414
1415 tree
1416 bind_template_template_parm (tree t, tree newargs)
1417 {
1418   tree decl = TYPE_NAME (t);
1419   tree t2;
1420
1421   t2 = cxx_make_type (BOUND_TEMPLATE_TEMPLATE_PARM);
1422   decl = build_decl (input_location,
1423                      TYPE_DECL, DECL_NAME (decl), NULL_TREE);
1424
1425   /* These nodes have to be created to reflect new TYPE_DECL and template
1426      arguments.  */
1427   TEMPLATE_TYPE_PARM_INDEX (t2) = copy_node (TEMPLATE_TYPE_PARM_INDEX (t));
1428   TEMPLATE_PARM_DECL (TEMPLATE_TYPE_PARM_INDEX (t2)) = decl;
1429   TEMPLATE_TEMPLATE_PARM_TEMPLATE_INFO (t2)
1430     = tree_cons (TEMPLATE_TEMPLATE_PARM_TEMPLATE_DECL (t),
1431                  newargs, NULL_TREE);
1432
1433   TREE_TYPE (decl) = t2;
1434   TYPE_NAME (t2) = decl;
1435   TYPE_STUB_DECL (t2) = decl;
1436   TYPE_SIZE (t2) = 0;
1437   SET_TYPE_STRUCTURAL_EQUALITY (t2);
1438
1439   return t2;
1440 }
1441
1442 /* Called from count_trees via walk_tree.  */
1443
1444 static tree
1445 count_trees_r (tree *tp, int *walk_subtrees, void *data)
1446 {
1447   ++*((int *) data);
1448
1449   if (TYPE_P (*tp))
1450     *walk_subtrees = 0;
1451
1452   return NULL_TREE;
1453 }
1454
1455 /* Debugging function for measuring the rough complexity of a tree
1456    representation.  */
1457
1458 int
1459 count_trees (tree t)
1460 {
1461   int n_trees = 0;
1462   cp_walk_tree_without_duplicates (&t, count_trees_r, &n_trees);
1463   return n_trees;
1464 }
1465
1466 /* Called from verify_stmt_tree via walk_tree.  */
1467
1468 static tree
1469 verify_stmt_tree_r (tree* tp,
1470                     int* walk_subtrees ATTRIBUTE_UNUSED ,
1471                     void* data)
1472 {
1473   tree t = *tp;
1474   htab_t *statements = (htab_t *) data;
1475   void **slot;
1476
1477   if (!STATEMENT_CODE_P (TREE_CODE (t)))
1478     return NULL_TREE;
1479
1480   /* If this statement is already present in the hash table, then
1481      there is a circularity in the statement tree.  */
1482   gcc_assert (!htab_find (*statements, t));
1483
1484   slot = htab_find_slot (*statements, t, INSERT);
1485   *slot = t;
1486
1487   return NULL_TREE;
1488 }
1489
1490 /* Debugging function to check that the statement T has not been
1491    corrupted.  For now, this function simply checks that T contains no
1492    circularities.  */
1493
1494 void
1495 verify_stmt_tree (tree t)
1496 {
1497   htab_t statements;
1498   statements = htab_create (37, htab_hash_pointer, htab_eq_pointer, NULL);
1499   cp_walk_tree (&t, verify_stmt_tree_r, &statements, NULL);
1500   htab_delete (statements);
1501 }
1502
1503 /* Check if the type T depends on a type with no linkage and if so, return
1504    it.  If RELAXED_P then do not consider a class type declared within
1505    a TREE_PUBLIC function to have no linkage.  */
1506
1507 tree
1508 no_linkage_check (tree t, bool relaxed_p)
1509 {
1510   tree r;
1511
1512   /* There's no point in checking linkage on template functions; we
1513      can't know their complete types.  */
1514   if (processing_template_decl)
1515     return NULL_TREE;
1516
1517   switch (TREE_CODE (t))
1518     {
1519       tree fn;
1520
1521     case RECORD_TYPE:
1522       if (TYPE_PTRMEMFUNC_P (t))
1523         goto ptrmem;
1524       /* Fall through.  */
1525     case UNION_TYPE:
1526       if (!CLASS_TYPE_P (t))
1527         return NULL_TREE;
1528       /* Fall through.  */
1529     case ENUMERAL_TYPE:
1530       if (TYPE_ANONYMOUS_P (t))
1531         return t;
1532       fn = decl_function_context (TYPE_MAIN_DECL (t));
1533       if (fn && (!relaxed_p || !TREE_PUBLIC (fn)))
1534         return t;
1535       return NULL_TREE;
1536
1537     case ARRAY_TYPE:
1538     case POINTER_TYPE:
1539     case REFERENCE_TYPE:
1540       return no_linkage_check (TREE_TYPE (t), relaxed_p);
1541
1542     case OFFSET_TYPE:
1543     ptrmem:
1544       r = no_linkage_check (TYPE_PTRMEM_POINTED_TO_TYPE (t),
1545                             relaxed_p);
1546       if (r)
1547         return r;
1548       return no_linkage_check (TYPE_PTRMEM_CLASS_TYPE (t), relaxed_p);
1549
1550     case METHOD_TYPE:
1551       r = no_linkage_check (TYPE_METHOD_BASETYPE (t), relaxed_p);
1552       if (r)
1553         return r;
1554       /* Fall through.  */
1555     case FUNCTION_TYPE:
1556       {
1557         tree parm;
1558         for (parm = TYPE_ARG_TYPES (t);
1559              parm && parm != void_list_node;
1560              parm = TREE_CHAIN (parm))
1561           {
1562             r = no_linkage_check (TREE_VALUE (parm), relaxed_p);
1563             if (r)
1564               return r;
1565           }
1566         return no_linkage_check (TREE_TYPE (t), relaxed_p);
1567       }
1568
1569     default:
1570       return NULL_TREE;
1571     }
1572 }
1573
1574 #ifdef GATHER_STATISTICS
1575 extern int depth_reached;
1576 #endif
1577
1578 void
1579 cxx_print_statistics (void)
1580 {
1581   print_search_statistics ();
1582   print_class_statistics ();
1583 #ifdef GATHER_STATISTICS
1584   fprintf (stderr, "maximum template instantiation depth reached: %d\n",
1585            depth_reached);
1586 #endif
1587 }
1588
1589 /* Return, as an INTEGER_CST node, the number of elements for TYPE
1590    (which is an ARRAY_TYPE).  This counts only elements of the top
1591    array.  */
1592
1593 tree
1594 array_type_nelts_top (tree type)
1595 {
1596   return fold_build2 (PLUS_EXPR, sizetype,
1597                       array_type_nelts (type),
1598                       size_one_node);
1599 }
1600
1601 /* Return, as an INTEGER_CST node, the number of elements for TYPE
1602    (which is an ARRAY_TYPE).  This one is a recursive count of all
1603    ARRAY_TYPEs that are clumped together.  */
1604
1605 tree
1606 array_type_nelts_total (tree type)
1607 {
1608   tree sz = array_type_nelts_top (type);
1609   type = TREE_TYPE (type);
1610   while (TREE_CODE (type) == ARRAY_TYPE)
1611     {
1612       tree n = array_type_nelts_top (type);
1613       sz = fold_build2 (MULT_EXPR, sizetype, sz, n);
1614       type = TREE_TYPE (type);
1615     }
1616   return sz;
1617 }
1618
1619 /* Called from break_out_target_exprs via mapcar.  */
1620
1621 static tree
1622 bot_manip (tree* tp, int* walk_subtrees, void* data)
1623 {
1624   splay_tree target_remap = ((splay_tree) data);
1625   tree t = *tp;
1626
1627   if (!TYPE_P (t) && TREE_CONSTANT (t))
1628     {
1629       /* There can't be any TARGET_EXPRs or their slot variables below
1630          this point.  We used to check !TREE_SIDE_EFFECTS, but then we
1631          failed to copy an ADDR_EXPR of the slot VAR_DECL.  */
1632       *walk_subtrees = 0;
1633       return NULL_TREE;
1634     }
1635   if (TREE_CODE (t) == TARGET_EXPR)
1636     {
1637       tree u;
1638
1639       if (TREE_CODE (TREE_OPERAND (t, 1)) == AGGR_INIT_EXPR)
1640         u = build_cplus_new (TREE_TYPE (t), TREE_OPERAND (t, 1));
1641       else
1642         u = build_target_expr_with_type (TREE_OPERAND (t, 1), TREE_TYPE (t));
1643
1644       /* Map the old variable to the new one.  */
1645       splay_tree_insert (target_remap,
1646                          (splay_tree_key) TREE_OPERAND (t, 0),
1647                          (splay_tree_value) TREE_OPERAND (u, 0));
1648
1649       TREE_OPERAND (u, 1) = break_out_target_exprs (TREE_OPERAND (u, 1));
1650
1651       /* Replace the old expression with the new version.  */
1652       *tp = u;
1653       /* We don't have to go below this point; the recursive call to
1654          break_out_target_exprs will have handled anything below this
1655          point.  */
1656       *walk_subtrees = 0;
1657       return NULL_TREE;
1658     }
1659
1660   /* Make a copy of this node.  */
1661   return copy_tree_r (tp, walk_subtrees, NULL);
1662 }
1663
1664 /* Replace all remapped VAR_DECLs in T with their new equivalents.
1665    DATA is really a splay-tree mapping old variables to new
1666    variables.  */
1667
1668 static tree
1669 bot_replace (tree* t,
1670              int* walk_subtrees ATTRIBUTE_UNUSED ,
1671              void* data)
1672 {
1673   splay_tree target_remap = ((splay_tree) data);
1674
1675   if (TREE_CODE (*t) == VAR_DECL)
1676     {
1677       splay_tree_node n = splay_tree_lookup (target_remap,
1678                                              (splay_tree_key) *t);
1679       if (n)
1680         *t = (tree) n->value;
1681     }
1682
1683   return NULL_TREE;
1684 }
1685
1686 /* When we parse a default argument expression, we may create
1687    temporary variables via TARGET_EXPRs.  When we actually use the
1688    default-argument expression, we make a copy of the expression, but
1689    we must replace the temporaries with appropriate local versions.  */
1690
1691 tree
1692 break_out_target_exprs (tree t)
1693 {
1694   static int target_remap_count;
1695   static splay_tree target_remap;
1696
1697   if (!target_remap_count++)
1698     target_remap = splay_tree_new (splay_tree_compare_pointers,
1699                                    /*splay_tree_delete_key_fn=*/NULL,
1700                                    /*splay_tree_delete_value_fn=*/NULL);
1701   cp_walk_tree (&t, bot_manip, target_remap, NULL);
1702   cp_walk_tree (&t, bot_replace, target_remap, NULL);
1703
1704   if (!--target_remap_count)
1705     {
1706       splay_tree_delete (target_remap);
1707       target_remap = NULL;
1708     }
1709
1710   return t;
1711 }
1712
1713 /* Similar to `build_nt', but for template definitions of dependent
1714    expressions  */
1715
1716 tree
1717 build_min_nt (enum tree_code code, ...)
1718 {
1719   tree t;
1720   int length;
1721   int i;
1722   va_list p;
1723
1724   gcc_assert (TREE_CODE_CLASS (code) != tcc_vl_exp);
1725
1726   va_start (p, code);
1727
1728   t = make_node (code);
1729   length = TREE_CODE_LENGTH (code);
1730
1731   for (i = 0; i < length; i++)
1732     {
1733       tree x = va_arg (p, tree);
1734       TREE_OPERAND (t, i) = x;
1735     }
1736
1737   va_end (p);
1738   return t;
1739 }
1740
1741
1742 /* Similar to `build', but for template definitions.  */
1743
1744 tree
1745 build_min (enum tree_code code, tree tt, ...)
1746 {
1747   tree t;
1748   int length;
1749   int i;
1750   va_list p;
1751
1752   gcc_assert (TREE_CODE_CLASS (code) != tcc_vl_exp);
1753
1754   va_start (p, tt);
1755
1756   t = make_node (code);
1757   length = TREE_CODE_LENGTH (code);
1758   TREE_TYPE (t) = tt;
1759
1760   for (i = 0; i < length; i++)
1761     {
1762       tree x = va_arg (p, tree);
1763       TREE_OPERAND (t, i) = x;
1764       if (x && !TYPE_P (x) && TREE_SIDE_EFFECTS (x))
1765         TREE_SIDE_EFFECTS (t) = 1;
1766     }
1767
1768   va_end (p);
1769   return t;
1770 }
1771
1772 /* Similar to `build', but for template definitions of non-dependent
1773    expressions. NON_DEP is the non-dependent expression that has been
1774    built.  */
1775
1776 tree
1777 build_min_non_dep (enum tree_code code, tree non_dep, ...)
1778 {
1779   tree t;
1780   int length;
1781   int i;
1782   va_list p;
1783
1784   gcc_assert (TREE_CODE_CLASS (code) != tcc_vl_exp);
1785
1786   va_start (p, non_dep);
1787
1788   t = make_node (code);
1789   length = TREE_CODE_LENGTH (code);
1790   TREE_TYPE (t) = TREE_TYPE (non_dep);
1791   TREE_SIDE_EFFECTS (t) = TREE_SIDE_EFFECTS (non_dep);
1792
1793   for (i = 0; i < length; i++)
1794     {
1795       tree x = va_arg (p, tree);
1796       TREE_OPERAND (t, i) = x;
1797     }
1798
1799   if (code == COMPOUND_EXPR && TREE_CODE (non_dep) != COMPOUND_EXPR)
1800     /* This should not be considered a COMPOUND_EXPR, because it
1801        resolves to an overload.  */
1802     COMPOUND_EXPR_OVERLOADED (t) = 1;
1803
1804   va_end (p);
1805   return t;
1806 }
1807
1808 /* Similar to `build_call_list', but for template definitions of non-dependent
1809    expressions. NON_DEP is the non-dependent expression that has been
1810    built.  */
1811
1812 tree
1813 build_min_non_dep_call_vec (tree non_dep, tree fn, VEC(tree,gc) *argvec)
1814 {
1815   tree t = build_nt_call_vec (fn, argvec);
1816   TREE_TYPE (t) = TREE_TYPE (non_dep);
1817   TREE_SIDE_EFFECTS (t) = TREE_SIDE_EFFECTS (non_dep);
1818   return t;
1819 }
1820
1821 tree
1822 get_type_decl (tree t)
1823 {
1824   if (TREE_CODE (t) == TYPE_DECL)
1825     return t;
1826   if (TYPE_P (t))
1827     return TYPE_STUB_DECL (t);
1828   gcc_assert (t == error_mark_node);
1829   return t;
1830 }
1831
1832 /* Returns the namespace that contains DECL, whether directly or
1833    indirectly.  */
1834
1835 tree
1836 decl_namespace_context (tree decl)
1837 {
1838   while (1)
1839     {
1840       if (TREE_CODE (decl) == NAMESPACE_DECL)
1841         return decl;
1842       else if (TYPE_P (decl))
1843         decl = CP_DECL_CONTEXT (TYPE_MAIN_DECL (decl));
1844       else
1845         decl = CP_DECL_CONTEXT (decl);
1846     }
1847 }
1848
1849 /* Returns true if decl is within an anonymous namespace, however deeply
1850    nested, or false otherwise.  */
1851
1852 bool
1853 decl_anon_ns_mem_p (const_tree decl)
1854 {
1855   while (1)
1856     {
1857       if (decl == NULL_TREE || decl == error_mark_node)
1858         return false;
1859       if (TREE_CODE (decl) == NAMESPACE_DECL
1860           && DECL_NAME (decl) == NULL_TREE)
1861         return true;
1862       /* Classes and namespaces inside anonymous namespaces have
1863          TREE_PUBLIC == 0, so we can shortcut the search.  */
1864       else if (TYPE_P (decl))
1865         return (TREE_PUBLIC (TYPE_NAME (decl)) == 0);
1866       else if (TREE_CODE (decl) == NAMESPACE_DECL)
1867         return (TREE_PUBLIC (decl) == 0);
1868       else
1869         decl = DECL_CONTEXT (decl);
1870     }
1871 }
1872
1873 /* Return truthvalue of whether T1 is the same tree structure as T2.
1874    Return 1 if they are the same. Return 0 if they are different.  */
1875
1876 bool
1877 cp_tree_equal (tree t1, tree t2)
1878 {
1879   enum tree_code code1, code2;
1880
1881   if (t1 == t2)
1882     return true;
1883   if (!t1 || !t2)
1884     return false;
1885
1886   for (code1 = TREE_CODE (t1);
1887        CONVERT_EXPR_CODE_P (code1)
1888          || code1 == NON_LVALUE_EXPR;
1889        code1 = TREE_CODE (t1))
1890     t1 = TREE_OPERAND (t1, 0);
1891   for (code2 = TREE_CODE (t2);
1892        CONVERT_EXPR_CODE_P (code2)
1893          || code1 == NON_LVALUE_EXPR;
1894        code2 = TREE_CODE (t2))
1895     t2 = TREE_OPERAND (t2, 0);
1896
1897   /* They might have become equal now.  */
1898   if (t1 == t2)
1899     return true;
1900
1901   if (code1 != code2)
1902     return false;
1903
1904   switch (code1)
1905     {
1906     case INTEGER_CST:
1907       return TREE_INT_CST_LOW (t1) == TREE_INT_CST_LOW (t2)
1908         && TREE_INT_CST_HIGH (t1) == TREE_INT_CST_HIGH (t2);
1909
1910     case REAL_CST:
1911       return REAL_VALUES_EQUAL (TREE_REAL_CST (t1), TREE_REAL_CST (t2));
1912
1913     case STRING_CST:
1914       return TREE_STRING_LENGTH (t1) == TREE_STRING_LENGTH (t2)
1915         && !memcmp (TREE_STRING_POINTER (t1), TREE_STRING_POINTER (t2),
1916                     TREE_STRING_LENGTH (t1));
1917
1918     case FIXED_CST:
1919       return FIXED_VALUES_IDENTICAL (TREE_FIXED_CST (t1),
1920                                      TREE_FIXED_CST (t2));
1921
1922     case COMPLEX_CST:
1923       return cp_tree_equal (TREE_REALPART (t1), TREE_REALPART (t2))
1924         && cp_tree_equal (TREE_IMAGPART (t1), TREE_IMAGPART (t2));
1925
1926     case CONSTRUCTOR:
1927       /* We need to do this when determining whether or not two
1928          non-type pointer to member function template arguments
1929          are the same.  */
1930       if (!(same_type_p (TREE_TYPE (t1), TREE_TYPE (t2))
1931             /* The first operand is RTL.  */
1932             && TREE_OPERAND (t1, 0) == TREE_OPERAND (t2, 0)))
1933         return false;
1934       return cp_tree_equal (TREE_OPERAND (t1, 1), TREE_OPERAND (t2, 1));
1935
1936     case TREE_LIST:
1937       if (!cp_tree_equal (TREE_PURPOSE (t1), TREE_PURPOSE (t2)))
1938         return false;
1939       if (!cp_tree_equal (TREE_VALUE (t1), TREE_VALUE (t2)))
1940         return false;
1941       return cp_tree_equal (TREE_CHAIN (t1), TREE_CHAIN (t2));
1942
1943     case SAVE_EXPR:
1944       return cp_tree_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0));
1945
1946     case CALL_EXPR:
1947       {
1948         tree arg1, arg2;
1949         call_expr_arg_iterator iter1, iter2;
1950         if (!cp_tree_equal (CALL_EXPR_FN (t1), CALL_EXPR_FN (t2)))
1951           return false;
1952         for (arg1 = first_call_expr_arg (t1, &iter1),
1953                arg2 = first_call_expr_arg (t2, &iter2);
1954              arg1 && arg2;
1955              arg1 = next_call_expr_arg (&iter1),
1956                arg2 = next_call_expr_arg (&iter2))
1957           if (!cp_tree_equal (arg1, arg2))
1958             return false;
1959         return (arg1 || arg2);
1960       }
1961
1962     case TARGET_EXPR:
1963       {
1964         tree o1 = TREE_OPERAND (t1, 0);
1965         tree o2 = TREE_OPERAND (t2, 0);
1966
1967         /* Special case: if either target is an unallocated VAR_DECL,
1968            it means that it's going to be unified with whatever the
1969            TARGET_EXPR is really supposed to initialize, so treat it
1970            as being equivalent to anything.  */
1971         if (TREE_CODE (o1) == VAR_DECL && DECL_NAME (o1) == NULL_TREE
1972             && !DECL_RTL_SET_P (o1))
1973           /*Nop*/;
1974         else if (TREE_CODE (o2) == VAR_DECL && DECL_NAME (o2) == NULL_TREE
1975                  && !DECL_RTL_SET_P (o2))
1976           /*Nop*/;
1977         else if (!cp_tree_equal (o1, o2))
1978           return false;
1979
1980         return cp_tree_equal (TREE_OPERAND (t1, 1), TREE_OPERAND (t2, 1));
1981       }
1982
1983     case WITH_CLEANUP_EXPR:
1984       if (!cp_tree_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0)))
1985         return false;
1986       return cp_tree_equal (TREE_OPERAND (t1, 1), TREE_OPERAND (t1, 1));
1987
1988     case COMPONENT_REF:
1989       if (TREE_OPERAND (t1, 1) != TREE_OPERAND (t2, 1))
1990         return false;
1991       return cp_tree_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0));
1992
1993     case PARM_DECL:
1994       /* For comparing uses of parameters in late-specified return types
1995          with an out-of-class definition of the function.  */
1996       if (same_type_p (TREE_TYPE (t1), TREE_TYPE (t2))
1997           && DECL_PARM_INDEX (t1) == DECL_PARM_INDEX (t2))
1998         return true;
1999       else
2000         return false;
2001
2002     case VAR_DECL:
2003     case CONST_DECL:
2004     case FUNCTION_DECL:
2005     case TEMPLATE_DECL:
2006     case IDENTIFIER_NODE:
2007     case SSA_NAME:
2008       return false;
2009
2010     case BASELINK:
2011       return (BASELINK_BINFO (t1) == BASELINK_BINFO (t2)
2012               && BASELINK_ACCESS_BINFO (t1) == BASELINK_ACCESS_BINFO (t2)
2013               && cp_tree_equal (BASELINK_FUNCTIONS (t1),
2014                                 BASELINK_FUNCTIONS (t2)));
2015
2016     case TEMPLATE_PARM_INDEX:
2017       return (TEMPLATE_PARM_IDX (t1) == TEMPLATE_PARM_IDX (t2)
2018               && TEMPLATE_PARM_LEVEL (t1) == TEMPLATE_PARM_LEVEL (t2)
2019               && same_type_p (TREE_TYPE (TEMPLATE_PARM_DECL (t1)),
2020                               TREE_TYPE (TEMPLATE_PARM_DECL (t2))));
2021
2022     case TEMPLATE_ID_EXPR:
2023       {
2024         unsigned ix;
2025         tree vec1, vec2;
2026
2027         if (!cp_tree_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0)))
2028           return false;
2029         vec1 = TREE_OPERAND (t1, 1);
2030         vec2 = TREE_OPERAND (t2, 1);
2031
2032         if (!vec1 || !vec2)
2033           return !vec1 && !vec2;
2034
2035         if (TREE_VEC_LENGTH (vec1) != TREE_VEC_LENGTH (vec2))
2036           return false;
2037
2038         for (ix = TREE_VEC_LENGTH (vec1); ix--;)
2039           if (!cp_tree_equal (TREE_VEC_ELT (vec1, ix),
2040                               TREE_VEC_ELT (vec2, ix)))
2041             return false;
2042
2043         return true;
2044       }
2045
2046     case SIZEOF_EXPR:
2047     case ALIGNOF_EXPR:
2048       {
2049         tree o1 = TREE_OPERAND (t1, 0);
2050         tree o2 = TREE_OPERAND (t2, 0);
2051
2052         if (TREE_CODE (o1) != TREE_CODE (o2))
2053           return false;
2054         if (TYPE_P (o1))
2055           return same_type_p (o1, o2);
2056         else
2057           return cp_tree_equal (o1, o2);
2058       }
2059
2060     case MODOP_EXPR:
2061       {
2062         tree t1_op1, t2_op1;
2063
2064         if (!cp_tree_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0)))
2065           return false;
2066
2067         t1_op1 = TREE_OPERAND (t1, 1);
2068         t2_op1 = TREE_OPERAND (t2, 1);
2069         if (TREE_CODE (t1_op1) != TREE_CODE (t2_op1))
2070           return false;
2071
2072         return cp_tree_equal (TREE_OPERAND (t1, 2), TREE_OPERAND (t2, 2));
2073       }
2074
2075     case PTRMEM_CST:
2076       /* Two pointer-to-members are the same if they point to the same
2077          field or function in the same class.  */
2078       if (PTRMEM_CST_MEMBER (t1) != PTRMEM_CST_MEMBER (t2))
2079         return false;
2080
2081       return same_type_p (PTRMEM_CST_CLASS (t1), PTRMEM_CST_CLASS (t2));
2082
2083     case OVERLOAD:
2084       if (OVL_FUNCTION (t1) != OVL_FUNCTION (t2))
2085         return false;
2086       return cp_tree_equal (OVL_CHAIN (t1), OVL_CHAIN (t2));
2087
2088     case TRAIT_EXPR:
2089       if (TRAIT_EXPR_KIND (t1) != TRAIT_EXPR_KIND (t2))
2090         return false;
2091       return same_type_p (TRAIT_EXPR_TYPE1 (t1), TRAIT_EXPR_TYPE1 (t2))
2092         && same_type_p (TRAIT_EXPR_TYPE2 (t1), TRAIT_EXPR_TYPE2 (t2));
2093
2094     default:
2095       break;
2096     }
2097
2098   switch (TREE_CODE_CLASS (code1))
2099     {
2100     case tcc_unary:
2101     case tcc_binary:
2102     case tcc_comparison:
2103     case tcc_expression:
2104     case tcc_vl_exp:
2105     case tcc_reference:
2106     case tcc_statement:
2107       {
2108         int i, n;
2109
2110         n = TREE_OPERAND_LENGTH (t1);
2111         if (TREE_CODE_CLASS (code1) == tcc_vl_exp
2112             && n != TREE_OPERAND_LENGTH (t2))
2113           return false;
2114
2115         for (i = 0; i < n; ++i)
2116           if (!cp_tree_equal (TREE_OPERAND (t1, i), TREE_OPERAND (t2, i)))
2117             return false;
2118
2119         return true;
2120       }
2121
2122     case tcc_type:
2123       return same_type_p (t1, t2);
2124     default:
2125       gcc_unreachable ();
2126     }
2127   /* We can get here with --disable-checking.  */
2128   return false;
2129 }
2130
2131 /* The type of ARG when used as an lvalue.  */
2132
2133 tree
2134 lvalue_type (tree arg)
2135 {
2136   tree type = TREE_TYPE (arg);
2137   return type;
2138 }
2139
2140 /* The type of ARG for printing error messages; denote lvalues with
2141    reference types.  */
2142
2143 tree
2144 error_type (tree arg)
2145 {
2146   tree type = TREE_TYPE (arg);
2147
2148   if (TREE_CODE (type) == ARRAY_TYPE)
2149     ;
2150   else if (TREE_CODE (type) == ERROR_MARK)
2151     ;
2152   else if (real_lvalue_p (arg))
2153     type = build_reference_type (lvalue_type (arg));
2154   else if (MAYBE_CLASS_TYPE_P (type))
2155     type = lvalue_type (arg);
2156
2157   return type;
2158 }
2159
2160 /* Does FUNCTION use a variable-length argument list?  */
2161
2162 int
2163 varargs_function_p (const_tree function)
2164 {
2165   const_tree parm = TYPE_ARG_TYPES (TREE_TYPE (function));
2166   for (; parm; parm = TREE_CHAIN (parm))
2167     if (TREE_VALUE (parm) == void_type_node)
2168       return 0;
2169   return 1;
2170 }
2171
2172 /* Returns 1 if decl is a member of a class.  */
2173
2174 int
2175 member_p (const_tree decl)
2176 {
2177   const_tree const ctx = DECL_CONTEXT (decl);
2178   return (ctx && TYPE_P (ctx));
2179 }
2180
2181 /* Create a placeholder for member access where we don't actually have an
2182    object that the access is against.  */
2183
2184 tree
2185 build_dummy_object (tree type)
2186 {
2187   tree decl = build1 (NOP_EXPR, build_pointer_type (type), void_zero_node);
2188   return cp_build_indirect_ref (decl, NULL, tf_warning_or_error);
2189 }
2190
2191 /* We've gotten a reference to a member of TYPE.  Return *this if appropriate,
2192    or a dummy object otherwise.  If BINFOP is non-0, it is filled with the
2193    binfo path from current_class_type to TYPE, or 0.  */
2194
2195 tree
2196 maybe_dummy_object (tree type, tree* binfop)
2197 {
2198   tree decl, context;
2199   tree binfo;
2200
2201   if (current_class_type
2202       && (binfo = lookup_base (current_class_type, type,
2203                                ba_unique | ba_quiet, NULL)))
2204     context = current_class_type;
2205   else
2206     {
2207       /* Reference from a nested class member function.  */
2208       context = type;
2209       binfo = TYPE_BINFO (type);
2210     }
2211
2212   if (binfop)
2213     *binfop = binfo;
2214
2215   if (current_class_ref && context == current_class_type
2216       /* Kludge: Make sure that current_class_type is actually
2217          correct.  It might not be if we're in the middle of
2218          tsubst_default_argument.  */
2219       && same_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (current_class_ref)),
2220                       current_class_type))
2221     decl = current_class_ref;
2222   else
2223     decl = build_dummy_object (context);
2224
2225   return decl;
2226 }
2227
2228 /* Returns 1 if OB is a placeholder object, or a pointer to one.  */
2229
2230 int
2231 is_dummy_object (const_tree ob)
2232 {
2233   if (TREE_CODE (ob) == INDIRECT_REF)
2234     ob = TREE_OPERAND (ob, 0);
2235   return (TREE_CODE (ob) == NOP_EXPR
2236           && TREE_OPERAND (ob, 0) == void_zero_node);
2237 }
2238
2239 /* Returns 1 iff type T is a POD type, as defined in [basic.types].  */
2240
2241 int
2242 pod_type_p (const_tree t)
2243 {
2244   /* This CONST_CAST is okay because strip_array_types returns its
2245      argument unmodified and we assign it to a const_tree.  */
2246   t = strip_array_types (CONST_CAST_TREE(t));
2247
2248   if (t == error_mark_node)
2249     return 1;
2250   if (INTEGRAL_OR_ENUMERATION_TYPE_P (t))
2251     return 1;  /* integral, character or enumeral type */
2252   if (FLOAT_TYPE_P (t))
2253     return 1;
2254   if (TYPE_PTR_P (t))
2255     return 1; /* pointer to non-member */
2256   if (TYPE_PTR_TO_MEMBER_P (t))
2257     return 1; /* pointer to member */
2258
2259   if (TREE_CODE (t) == VECTOR_TYPE)
2260     return 1; /* vectors are (small) arrays of scalars */
2261
2262   if (! RECORD_OR_UNION_CODE_P (TREE_CODE (t)))
2263     return 0; /* other non-class type (reference or function) */
2264   if (! CLASS_TYPE_P (t))
2265     return 1; /* struct created by the back end */
2266   if (CLASSTYPE_NON_POD_P (t))
2267     return 0;
2268   return 1;
2269 }
2270
2271 /* Nonzero iff type T is a class template implicit specialization.  */
2272
2273 bool
2274 class_tmpl_impl_spec_p (const_tree t)
2275 {
2276   return CLASS_TYPE_P (t) && CLASSTYPE_TEMPLATE_INSTANTIATION (t);
2277 }
2278
2279 /* Returns 1 iff zero initialization of type T means actually storing
2280    zeros in it.  */
2281
2282 int
2283 zero_init_p (const_tree t)
2284 {
2285   /* This CONST_CAST is okay because strip_array_types returns its
2286      argument unmodified and we assign it to a const_tree.  */
2287   t = strip_array_types (CONST_CAST_TREE(t));
2288
2289   if (t == error_mark_node)
2290     return 1;
2291
2292   /* NULL pointers to data members are initialized with -1.  */
2293   if (TYPE_PTRMEM_P (t))
2294     return 0;
2295
2296   /* Classes that contain types that can't be zero-initialized, cannot
2297      be zero-initialized themselves.  */
2298   if (CLASS_TYPE_P (t) && CLASSTYPE_NON_ZERO_INIT_P (t))
2299     return 0;
2300
2301   return 1;
2302 }
2303
2304 /* Table of valid C++ attributes.  */
2305 const struct attribute_spec cxx_attribute_table[] =
2306 {
2307   /* { name, min_len, max_len, decl_req, type_req, fn_type_req, handler } */
2308   { "java_interface", 0, 0, false, false, false, handle_java_interface_attribute },
2309   { "com_interface",  0, 0, false, false, false, handle_com_interface_attribute },
2310   { "init_priority",  1, 1, true,  false, false, handle_init_priority_attribute },
2311   { NULL,             0, 0, false, false, false, NULL }
2312 };
2313
2314 /* Handle a "java_interface" attribute; arguments as in
2315    struct attribute_spec.handler.  */
2316 static tree
2317 handle_java_interface_attribute (tree* node,
2318                                  tree name,
2319                                  tree args ATTRIBUTE_UNUSED ,
2320                                  int flags,
2321                                  bool* no_add_attrs)
2322 {
2323   if (DECL_P (*node)
2324       || !CLASS_TYPE_P (*node)
2325       || !TYPE_FOR_JAVA (*node))
2326     {
2327       error ("%qE attribute can only be applied to Java class definitions",
2328              name);
2329       *no_add_attrs = true;
2330       return NULL_TREE;
2331     }
2332   if (!(flags & (int) ATTR_FLAG_TYPE_IN_PLACE))
2333     *node = build_variant_type_copy (*node);
2334   TYPE_JAVA_INTERFACE (*node) = 1;
2335
2336   return NULL_TREE;
2337 }
2338
2339 /* Handle a "com_interface" attribute; arguments as in
2340    struct attribute_spec.handler.  */
2341 static tree
2342 handle_com_interface_attribute (tree* node,
2343                                 tree name,
2344                                 tree args ATTRIBUTE_UNUSED ,
2345                                 int flags ATTRIBUTE_UNUSED ,
2346                                 bool* no_add_attrs)
2347 {
2348   static int warned;
2349
2350   *no_add_attrs = true;
2351
2352   if (DECL_P (*node)
2353       || !CLASS_TYPE_P (*node)
2354       || *node != TYPE_MAIN_VARIANT (*node))
2355     {
2356       warning (OPT_Wattributes, "%qE attribute can only be applied "
2357                "to class definitions", name);
2358       return NULL_TREE;
2359     }
2360
2361   if (!warned++)
2362     warning (0, "%qE is obsolete; g++ vtables are now COM-compatible by default",
2363              name);
2364
2365   return NULL_TREE;
2366 }
2367
2368 /* Handle an "init_priority" attribute; arguments as in
2369    struct attribute_spec.handler.  */
2370 static tree
2371 handle_init_priority_attribute (tree* node,
2372                                 tree name,
2373                                 tree args,
2374                                 int flags ATTRIBUTE_UNUSED ,
2375                                 bool* no_add_attrs)
2376 {
2377   tree initp_expr = TREE_VALUE (args);
2378   tree decl = *node;
2379   tree type = TREE_TYPE (decl);
2380   int pri;
2381
2382   STRIP_NOPS (initp_expr);
2383
2384   if (!initp_expr || TREE_CODE (initp_expr) != INTEGER_CST)
2385     {
2386       error ("requested init_priority is not an integer constant");
2387       *no_add_attrs = true;
2388       return NULL_TREE;
2389     }
2390
2391   pri = TREE_INT_CST_LOW (initp_expr);
2392
2393   type = strip_array_types (type);
2394
2395   if (decl == NULL_TREE
2396       || TREE_CODE (decl) != VAR_DECL
2397       || !TREE_STATIC (decl)
2398       || DECL_EXTERNAL (decl)
2399       || (TREE_CODE (type) != RECORD_TYPE
2400           && TREE_CODE (type) != UNION_TYPE)
2401       /* Static objects in functions are initialized the
2402          first time control passes through that
2403          function. This is not precise enough to pin down an
2404          init_priority value, so don't allow it.  */
2405       || current_function_decl)
2406     {
2407       error ("can only use %qE attribute on file-scope definitions "
2408              "of objects of class type", name);
2409       *no_add_attrs = true;
2410       return NULL_TREE;
2411     }
2412
2413   if (pri > MAX_INIT_PRIORITY || pri <= 0)
2414     {
2415       error ("requested init_priority is out of range");
2416       *no_add_attrs = true;
2417       return NULL_TREE;
2418     }
2419
2420   /* Check for init_priorities that are reserved for
2421      language and runtime support implementations.*/
2422   if (pri <= MAX_RESERVED_INIT_PRIORITY)
2423     {
2424       warning
2425         (0, "requested init_priority is reserved for internal use");
2426     }
2427
2428   if (SUPPORTS_INIT_PRIORITY)
2429     {
2430       SET_DECL_INIT_PRIORITY (decl, pri);
2431       DECL_HAS_INIT_PRIORITY_P (decl) = 1;
2432       return NULL_TREE;
2433     }
2434   else
2435     {
2436       error ("%qE attribute is not supported on this platform", name);
2437       *no_add_attrs = true;
2438       return NULL_TREE;
2439     }
2440 }
2441
2442 /* Return a new PTRMEM_CST of the indicated TYPE.  The MEMBER is the
2443    thing pointed to by the constant.  */
2444
2445 tree
2446 make_ptrmem_cst (tree type, tree member)
2447 {
2448   tree ptrmem_cst = make_node (PTRMEM_CST);
2449   TREE_TYPE (ptrmem_cst) = type;
2450   PTRMEM_CST_MEMBER (ptrmem_cst) = member;
2451   return ptrmem_cst;
2452 }
2453
2454 /* Build a variant of TYPE that has the indicated ATTRIBUTES.  May
2455    return an existing type if an appropriate type already exists.  */
2456
2457 tree
2458 cp_build_type_attribute_variant (tree type, tree attributes)
2459 {
2460   tree new_type;
2461
2462   new_type = build_type_attribute_variant (type, attributes);
2463   if (TREE_CODE (new_type) == FUNCTION_TYPE
2464       && (TYPE_RAISES_EXCEPTIONS (new_type)
2465           != TYPE_RAISES_EXCEPTIONS (type)))
2466     new_type = build_exception_variant (new_type,
2467                                         TYPE_RAISES_EXCEPTIONS (type));
2468
2469   /* Making a new main variant of a class type is broken.  */
2470   gcc_assert (!CLASS_TYPE_P (type) || new_type == type);
2471     
2472   return new_type;
2473 }
2474
2475 /* Return TRUE if TYPE1 and TYPE2 are identical for type hashing purposes.
2476    Called only after doing all language independent checks.  Only
2477    to check TYPE_RAISES_EXCEPTIONS for FUNCTION_TYPE, the rest is already
2478    compared in type_hash_eq.  */
2479
2480 bool
2481 cxx_type_hash_eq (const_tree typea, const_tree typeb)
2482 {
2483   gcc_assert (TREE_CODE (typea) == FUNCTION_TYPE);
2484
2485   return comp_except_specs (TYPE_RAISES_EXCEPTIONS (typea),
2486                             TYPE_RAISES_EXCEPTIONS (typeb), 1);
2487 }
2488
2489 /* Apply FUNC to all language-specific sub-trees of TP in a pre-order
2490    traversal.  Called from walk_tree.  */
2491
2492 tree
2493 cp_walk_subtrees (tree *tp, int *walk_subtrees_p, walk_tree_fn func,
2494                   void *data, struct pointer_set_t *pset)
2495 {
2496   enum tree_code code = TREE_CODE (*tp);
2497   tree result;
2498
2499 #define WALK_SUBTREE(NODE)                              \
2500   do                                                    \
2501     {                                                   \
2502       result = cp_walk_tree (&(NODE), func, data, pset);        \
2503       if (result) goto out;                             \
2504     }                                                   \
2505   while (0)
2506
2507   /* Not one of the easy cases.  We must explicitly go through the
2508      children.  */
2509   result = NULL_TREE;
2510   switch (code)
2511     {
2512     case DEFAULT_ARG:
2513     case TEMPLATE_TEMPLATE_PARM:
2514     case BOUND_TEMPLATE_TEMPLATE_PARM:
2515     case UNBOUND_CLASS_TEMPLATE:
2516     case TEMPLATE_PARM_INDEX:
2517     case TEMPLATE_TYPE_PARM:
2518     case TYPENAME_TYPE:
2519     case TYPEOF_TYPE:
2520       /* None of these have subtrees other than those already walked
2521          above.  */
2522       *walk_subtrees_p = 0;
2523       break;
2524
2525     case BASELINK:
2526       WALK_SUBTREE (BASELINK_FUNCTIONS (*tp));
2527       *walk_subtrees_p = 0;
2528       break;
2529
2530     case PTRMEM_CST:
2531       WALK_SUBTREE (TREE_TYPE (*tp));
2532       *walk_subtrees_p = 0;
2533       break;
2534
2535     case TREE_LIST:
2536       WALK_SUBTREE (TREE_PURPOSE (*tp));
2537       break;
2538
2539     case OVERLOAD:
2540       WALK_SUBTREE (OVL_FUNCTION (*tp));
2541       WALK_SUBTREE (OVL_CHAIN (*tp));
2542       *walk_subtrees_p = 0;
2543       break;
2544
2545     case USING_DECL:
2546       WALK_SUBTREE (DECL_NAME (*tp));
2547       WALK_SUBTREE (USING_DECL_SCOPE (*tp));
2548       WALK_SUBTREE (USING_DECL_DECLS (*tp));
2549       *walk_subtrees_p = 0;
2550       break;
2551
2552     case RECORD_TYPE:
2553       if (TYPE_PTRMEMFUNC_P (*tp))
2554         WALK_SUBTREE (TYPE_PTRMEMFUNC_FN_TYPE (*tp));
2555       break;
2556
2557     case TYPE_ARGUMENT_PACK:
2558     case NONTYPE_ARGUMENT_PACK:
2559       {
2560         tree args = ARGUMENT_PACK_ARGS (*tp);
2561         int i, len = TREE_VEC_LENGTH (args);
2562         for (i = 0; i < len; i++)
2563           WALK_SUBTREE (TREE_VEC_ELT (args, i));
2564       }
2565       break;
2566
2567     case TYPE_PACK_EXPANSION:
2568       WALK_SUBTREE (TREE_TYPE (*tp));
2569       *walk_subtrees_p = 0;
2570       break;
2571       
2572     case EXPR_PACK_EXPANSION:
2573       WALK_SUBTREE (TREE_OPERAND (*tp, 0));
2574       *walk_subtrees_p = 0;
2575       break;
2576
2577     case CAST_EXPR:
2578     case REINTERPRET_CAST_EXPR:
2579     case STATIC_CAST_EXPR:
2580     case CONST_CAST_EXPR:
2581     case DYNAMIC_CAST_EXPR:
2582       if (TREE_TYPE (*tp))
2583         WALK_SUBTREE (TREE_TYPE (*tp));
2584
2585       {
2586         int i;
2587         for (i = 0; i < TREE_CODE_LENGTH (TREE_CODE (*tp)); ++i)
2588           WALK_SUBTREE (TREE_OPERAND (*tp, i));
2589       }
2590       *walk_subtrees_p = 0;
2591       break;
2592
2593     case TRAIT_EXPR:
2594       WALK_SUBTREE (TRAIT_EXPR_TYPE1 (*tp));
2595       WALK_SUBTREE (TRAIT_EXPR_TYPE2 (*tp));
2596       *walk_subtrees_p = 0;
2597       break;
2598
2599     case DECLTYPE_TYPE:
2600       WALK_SUBTREE (DECLTYPE_TYPE_EXPR (*tp));
2601       *walk_subtrees_p = 0;
2602       break;
2603  
2604
2605     default:
2606       return NULL_TREE;
2607     }
2608
2609   /* We didn't find what we were looking for.  */
2610  out:
2611   return result;
2612
2613 #undef WALK_SUBTREE
2614 }
2615
2616 /* Like save_expr, but for C++.  */
2617
2618 tree
2619 cp_save_expr (tree expr)
2620 {
2621   /* There is no reason to create a SAVE_EXPR within a template; if
2622      needed, we can create the SAVE_EXPR when instantiating the
2623      template.  Furthermore, the middle-end cannot handle C++-specific
2624      tree codes.  */
2625   if (processing_template_decl)
2626     return expr;
2627   return save_expr (expr);
2628 }
2629
2630 /* Initialize tree.c.  */
2631
2632 void
2633 init_tree (void)
2634 {
2635   list_hash_table = htab_create_ggc (31, list_hash, list_hash_eq, NULL);
2636 }
2637
2638 /* Returns the kind of special function that DECL (a FUNCTION_DECL)
2639    is.  Note that sfk_none is zero, so this function can be used as a
2640    predicate to test whether or not DECL is a special function.  */
2641
2642 special_function_kind
2643 special_function_p (const_tree decl)
2644 {
2645   /* Rather than doing all this stuff with magic names, we should
2646      probably have a field of type `special_function_kind' in
2647      DECL_LANG_SPECIFIC.  */
2648   if (DECL_COPY_CONSTRUCTOR_P (decl))
2649     return sfk_copy_constructor;
2650   if (DECL_CONSTRUCTOR_P (decl))
2651     return sfk_constructor;
2652   if (DECL_OVERLOADED_OPERATOR_P (decl) == NOP_EXPR)
2653     return sfk_assignment_operator;
2654   if (DECL_MAYBE_IN_CHARGE_DESTRUCTOR_P (decl))
2655     return sfk_destructor;
2656   if (DECL_COMPLETE_DESTRUCTOR_P (decl))
2657     return sfk_complete_destructor;
2658   if (DECL_BASE_DESTRUCTOR_P (decl))
2659     return sfk_base_destructor;
2660   if (DECL_DELETING_DESTRUCTOR_P (decl))
2661     return sfk_deleting_destructor;
2662   if (DECL_CONV_FN_P (decl))
2663     return sfk_conversion;
2664
2665   return sfk_none;
2666 }
2667
2668 /* Returns nonzero if TYPE is a character type, including wchar_t.  */
2669
2670 int
2671 char_type_p (tree type)
2672 {
2673   return (same_type_p (type, char_type_node)
2674           || same_type_p (type, unsigned_char_type_node)
2675           || same_type_p (type, signed_char_type_node)
2676           || same_type_p (type, char16_type_node)
2677           || same_type_p (type, char32_type_node)
2678           || same_type_p (type, wchar_type_node));
2679 }
2680
2681 /* Returns the kind of linkage associated with the indicated DECL.  Th
2682    value returned is as specified by the language standard; it is
2683    independent of implementation details regarding template
2684    instantiation, etc.  For example, it is possible that a declaration
2685    to which this function assigns external linkage would not show up
2686    as a global symbol when you run `nm' on the resulting object file.  */
2687
2688 linkage_kind
2689 decl_linkage (tree decl)
2690 {
2691   /* This function doesn't attempt to calculate the linkage from first
2692      principles as given in [basic.link].  Instead, it makes use of
2693      the fact that we have already set TREE_PUBLIC appropriately, and
2694      then handles a few special cases.  Ideally, we would calculate
2695      linkage first, and then transform that into a concrete
2696      implementation.  */
2697
2698   /* Things that don't have names have no linkage.  */
2699   if (!DECL_NAME (decl))
2700     return lk_none;
2701
2702   /* Fields have no linkage.  */
2703   if (TREE_CODE (decl) == FIELD_DECL)
2704     return lk_none;
2705
2706   /* Things that are TREE_PUBLIC have external linkage.  */
2707   if (TREE_PUBLIC (decl))
2708     return lk_external;
2709
2710   if (TREE_CODE (decl) == NAMESPACE_DECL)
2711     return lk_external;
2712
2713   /* Linkage of a CONST_DECL depends on the linkage of the enumeration
2714      type.  */
2715   if (TREE_CODE (decl) == CONST_DECL)
2716     return decl_linkage (TYPE_NAME (TREE_TYPE (decl)));
2717
2718   /* Some things that are not TREE_PUBLIC have external linkage, too.
2719      For example, on targets that don't have weak symbols, we make all
2720      template instantiations have internal linkage (in the object
2721      file), but the symbols should still be treated as having external
2722      linkage from the point of view of the language.  */
2723   if ((TREE_CODE (decl) == FUNCTION_DECL
2724        || TREE_CODE (decl) == VAR_DECL)
2725       && DECL_COMDAT (decl))
2726     return lk_external;
2727
2728   /* Things in local scope do not have linkage, if they don't have
2729      TREE_PUBLIC set.  */
2730   if (decl_function_context (decl))
2731     return lk_none;
2732
2733   /* Members of the anonymous namespace also have TREE_PUBLIC unset, but
2734      are considered to have external linkage for language purposes.  DECLs
2735      really meant to have internal linkage have DECL_THIS_STATIC set.  */
2736   if (TREE_CODE (decl) == TYPE_DECL)
2737     return lk_external;
2738   if (TREE_CODE (decl) == VAR_DECL || TREE_CODE (decl) == FUNCTION_DECL)
2739     {
2740       if (!DECL_THIS_STATIC (decl))
2741         return lk_external;
2742
2743       /* Static data members and static member functions from classes
2744          in anonymous namespace also don't have TREE_PUBLIC set.  */
2745       if (DECL_CLASS_CONTEXT (decl))
2746         return lk_external;
2747     }
2748
2749   /* Everything else has internal linkage.  */
2750   return lk_internal;
2751 }
2752 \f
2753 /* EXP is an expression that we want to pre-evaluate.  Returns (in
2754    *INITP) an expression that will perform the pre-evaluation.  The
2755    value returned by this function is a side-effect free expression
2756    equivalent to the pre-evaluated expression.  Callers must ensure
2757    that *INITP is evaluated before EXP.  */
2758
2759 tree
2760 stabilize_expr (tree exp, tree* initp)
2761 {
2762   tree init_expr;
2763
2764   if (!TREE_SIDE_EFFECTS (exp))
2765     init_expr = NULL_TREE;
2766   else if (!real_lvalue_p (exp)
2767            || !TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (exp)))
2768     {
2769       init_expr = get_target_expr (exp);
2770       exp = TARGET_EXPR_SLOT (init_expr);
2771     }
2772   else
2773     {
2774       exp = cp_build_unary_op (ADDR_EXPR, exp, 1, tf_warning_or_error);
2775       init_expr = get_target_expr (exp);
2776       exp = TARGET_EXPR_SLOT (init_expr);
2777       exp = cp_build_indirect_ref (exp, 0, tf_warning_or_error);
2778     }
2779   *initp = init_expr;
2780
2781   gcc_assert (!TREE_SIDE_EFFECTS (exp));
2782   return exp;
2783 }
2784
2785 /* Add NEW_EXPR, an expression whose value we don't care about, after the
2786    similar expression ORIG.  */
2787
2788 tree
2789 add_stmt_to_compound (tree orig, tree new_expr)
2790 {
2791   if (!new_expr || !TREE_SIDE_EFFECTS (new_expr))
2792     return orig;
2793   if (!orig || !TREE_SIDE_EFFECTS (orig))
2794     return new_expr;
2795   return build2 (COMPOUND_EXPR, void_type_node, orig, new_expr);
2796 }
2797
2798 /* Like stabilize_expr, but for a call whose arguments we want to
2799    pre-evaluate.  CALL is modified in place to use the pre-evaluated
2800    arguments, while, upon return, *INITP contains an expression to
2801    compute the arguments.  */
2802
2803 void
2804 stabilize_call (tree call, tree *initp)
2805 {
2806   tree inits = NULL_TREE;
2807   int i;
2808   int nargs = call_expr_nargs (call);
2809
2810   if (call == error_mark_node || processing_template_decl)
2811     {
2812       *initp = NULL_TREE;
2813       return;
2814     }
2815
2816   gcc_assert (TREE_CODE (call) == CALL_EXPR);
2817
2818   for (i = 0; i < nargs; i++)
2819     {
2820       tree init;
2821       CALL_EXPR_ARG (call, i) =
2822         stabilize_expr (CALL_EXPR_ARG (call, i), &init);
2823       inits = add_stmt_to_compound (inits, init);
2824     }
2825
2826   *initp = inits;
2827 }
2828
2829 /* Like stabilize_expr, but for an AGGR_INIT_EXPR whose arguments we want
2830    to pre-evaluate.  CALL is modified in place to use the pre-evaluated
2831    arguments, while, upon return, *INITP contains an expression to
2832    compute the arguments.  */
2833
2834 void
2835 stabilize_aggr_init (tree call, tree *initp)
2836 {
2837   tree inits = NULL_TREE;
2838   int i;
2839   int nargs = aggr_init_expr_nargs (call);
2840
2841   if (call == error_mark_node)
2842     return;
2843
2844   gcc_assert (TREE_CODE (call) == AGGR_INIT_EXPR);
2845
2846   for (i = 0; i < nargs; i++)
2847     {
2848       tree init;
2849       AGGR_INIT_EXPR_ARG (call, i) =
2850         stabilize_expr (AGGR_INIT_EXPR_ARG (call, i), &init);
2851       inits = add_stmt_to_compound (inits, init);
2852     }
2853
2854   *initp = inits;
2855 }
2856
2857 /* Like stabilize_expr, but for an initialization.  
2858
2859    If the initialization is for an object of class type, this function
2860    takes care not to introduce additional temporaries.
2861
2862    Returns TRUE iff the expression was successfully pre-evaluated,
2863    i.e., if INIT is now side-effect free, except for, possible, a
2864    single call to a constructor.  */
2865
2866 bool
2867 stabilize_init (tree init, tree *initp)
2868 {
2869   tree t = init;
2870
2871   *initp = NULL_TREE;
2872
2873   if (t == error_mark_node || processing_template_decl)
2874     return true;
2875
2876   if (TREE_CODE (t) == INIT_EXPR
2877       && TREE_CODE (TREE_OPERAND (t, 1)) != TARGET_EXPR
2878       && TREE_CODE (TREE_OPERAND (t, 1)) != AGGR_INIT_EXPR)
2879     {
2880       TREE_OPERAND (t, 1) = stabilize_expr (TREE_OPERAND (t, 1), initp);
2881       return true;
2882     }
2883
2884   if (TREE_CODE (t) == INIT_EXPR)
2885     t = TREE_OPERAND (t, 1);
2886   if (TREE_CODE (t) == TARGET_EXPR)
2887     t = TARGET_EXPR_INITIAL (t);
2888   if (TREE_CODE (t) == COMPOUND_EXPR)
2889     t = expr_last (t);
2890   if (TREE_CODE (t) == CONSTRUCTOR
2891       && EMPTY_CONSTRUCTOR_P (t))
2892     /* Default-initialization.  */
2893     return true;
2894
2895   /* If the initializer is a COND_EXPR, we can't preevaluate
2896      anything.  */
2897   if (TREE_CODE (t) == COND_EXPR)
2898     return false;
2899
2900   if (TREE_CODE (t) == CALL_EXPR)
2901     {
2902       stabilize_call (t, initp);
2903       return true;
2904     }
2905
2906   if (TREE_CODE (t) == AGGR_INIT_EXPR)
2907     {
2908       stabilize_aggr_init (t, initp);
2909       return true;
2910     }
2911
2912   /* The initialization is being performed via a bitwise copy -- and
2913      the item copied may have side effects.  */
2914   return TREE_SIDE_EFFECTS (init);
2915 }
2916
2917 /* Like "fold", but should be used whenever we might be processing the
2918    body of a template.  */
2919
2920 tree
2921 fold_if_not_in_template (tree expr)
2922 {
2923   /* In the body of a template, there is never any need to call
2924      "fold".  We will call fold later when actually instantiating the
2925      template.  Integral constant expressions in templates will be
2926      evaluated via fold_non_dependent_expr, as necessary.  */
2927   if (processing_template_decl)
2928     return expr;
2929
2930   /* Fold C++ front-end specific tree codes.  */
2931   if (TREE_CODE (expr) == UNARY_PLUS_EXPR)
2932     return fold_convert (TREE_TYPE (expr), TREE_OPERAND (expr, 0));
2933
2934   return fold (expr);
2935 }
2936
2937 /* Returns true if a cast to TYPE may appear in an integral constant
2938    expression.  */
2939
2940 bool
2941 cast_valid_in_integral_constant_expression_p (tree type)
2942 {
2943   return (INTEGRAL_OR_ENUMERATION_TYPE_P (type)
2944           || dependent_type_p (type)
2945           || type == error_mark_node);
2946 }
2947
2948 \f
2949 #if defined ENABLE_TREE_CHECKING && (GCC_VERSION >= 2007)
2950 /* Complain that some language-specific thing hanging off a tree
2951    node has been accessed improperly.  */
2952
2953 void
2954 lang_check_failed (const char* file, int line, const char* function)
2955 {
2956   internal_error ("lang_* check: failed in %s, at %s:%d",
2957                   function, trim_filename (file), line);
2958 }
2959 #endif /* ENABLE_TREE_CHECKING */
2960
2961 #include "gt-cp-tree.h"