OSDN Git Service

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