OSDN Git Service

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