OSDN Git Service

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