OSDN Git Service

2009-10-11 Richard Guenther <rguenther@suse.de>
[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               && same_type_p (TREE_TYPE (TEMPLATE_PARM_DECL (t1)),
2085                               TREE_TYPE (TEMPLATE_PARM_DECL (t2))));
2086
2087     case TEMPLATE_ID_EXPR:
2088       {
2089         unsigned ix;
2090         tree vec1, vec2;
2091
2092         if (!cp_tree_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0)))
2093           return false;
2094         vec1 = TREE_OPERAND (t1, 1);
2095         vec2 = TREE_OPERAND (t2, 1);
2096
2097         if (!vec1 || !vec2)
2098           return !vec1 && !vec2;
2099
2100         if (TREE_VEC_LENGTH (vec1) != TREE_VEC_LENGTH (vec2))
2101           return false;
2102
2103         for (ix = TREE_VEC_LENGTH (vec1); ix--;)
2104           if (!cp_tree_equal (TREE_VEC_ELT (vec1, ix),
2105                               TREE_VEC_ELT (vec2, ix)))
2106             return false;
2107
2108         return true;
2109       }
2110
2111     case SIZEOF_EXPR:
2112     case ALIGNOF_EXPR:
2113       {
2114         tree o1 = TREE_OPERAND (t1, 0);
2115         tree o2 = TREE_OPERAND (t2, 0);
2116
2117         if (TREE_CODE (o1) != TREE_CODE (o2))
2118           return false;
2119         if (TYPE_P (o1))
2120           return same_type_p (o1, o2);
2121         else
2122           return cp_tree_equal (o1, o2);
2123       }
2124
2125     case MODOP_EXPR:
2126       {
2127         tree t1_op1, t2_op1;
2128
2129         if (!cp_tree_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0)))
2130           return false;
2131
2132         t1_op1 = TREE_OPERAND (t1, 1);
2133         t2_op1 = TREE_OPERAND (t2, 1);
2134         if (TREE_CODE (t1_op1) != TREE_CODE (t2_op1))
2135           return false;
2136
2137         return cp_tree_equal (TREE_OPERAND (t1, 2), TREE_OPERAND (t2, 2));
2138       }
2139
2140     case PTRMEM_CST:
2141       /* Two pointer-to-members are the same if they point to the same
2142          field or function in the same class.  */
2143       if (PTRMEM_CST_MEMBER (t1) != PTRMEM_CST_MEMBER (t2))
2144         return false;
2145
2146       return same_type_p (PTRMEM_CST_CLASS (t1), PTRMEM_CST_CLASS (t2));
2147
2148     case OVERLOAD:
2149       if (OVL_FUNCTION (t1) != OVL_FUNCTION (t2))
2150         return false;
2151       return cp_tree_equal (OVL_CHAIN (t1), OVL_CHAIN (t2));
2152
2153     case TRAIT_EXPR:
2154       if (TRAIT_EXPR_KIND (t1) != TRAIT_EXPR_KIND (t2))
2155         return false;
2156       return same_type_p (TRAIT_EXPR_TYPE1 (t1), TRAIT_EXPR_TYPE1 (t2))
2157         && same_type_p (TRAIT_EXPR_TYPE2 (t1), TRAIT_EXPR_TYPE2 (t2));
2158
2159     default:
2160       break;
2161     }
2162
2163   switch (TREE_CODE_CLASS (code1))
2164     {
2165     case tcc_unary:
2166     case tcc_binary:
2167     case tcc_comparison:
2168     case tcc_expression:
2169     case tcc_vl_exp:
2170     case tcc_reference:
2171     case tcc_statement:
2172       {
2173         int i, n;
2174
2175         n = TREE_OPERAND_LENGTH (t1);
2176         if (TREE_CODE_CLASS (code1) == tcc_vl_exp
2177             && n != TREE_OPERAND_LENGTH (t2))
2178           return false;
2179
2180         for (i = 0; i < n; ++i)
2181           if (!cp_tree_equal (TREE_OPERAND (t1, i), TREE_OPERAND (t2, i)))
2182             return false;
2183
2184         return true;
2185       }
2186
2187     case tcc_type:
2188       return same_type_p (t1, t2);
2189     default:
2190       gcc_unreachable ();
2191     }
2192   /* We can get here with --disable-checking.  */
2193   return false;
2194 }
2195
2196 /* The type of ARG when used as an lvalue.  */
2197
2198 tree
2199 lvalue_type (tree arg)
2200 {
2201   tree type = TREE_TYPE (arg);
2202   return type;
2203 }
2204
2205 /* The type of ARG for printing error messages; denote lvalues with
2206    reference types.  */
2207
2208 tree
2209 error_type (tree arg)
2210 {
2211   tree type = TREE_TYPE (arg);
2212
2213   if (TREE_CODE (type) == ARRAY_TYPE)
2214     ;
2215   else if (TREE_CODE (type) == ERROR_MARK)
2216     ;
2217   else if (real_lvalue_p (arg))
2218     type = build_reference_type (lvalue_type (arg));
2219   else if (MAYBE_CLASS_TYPE_P (type))
2220     type = lvalue_type (arg);
2221
2222   return type;
2223 }
2224
2225 /* Does FUNCTION use a variable-length argument list?  */
2226
2227 int
2228 varargs_function_p (const_tree function)
2229 {
2230   const_tree parm = TYPE_ARG_TYPES (TREE_TYPE (function));
2231   for (; parm; parm = TREE_CHAIN (parm))
2232     if (TREE_VALUE (parm) == void_type_node)
2233       return 0;
2234   return 1;
2235 }
2236
2237 /* Returns 1 if decl is a member of a class.  */
2238
2239 int
2240 member_p (const_tree decl)
2241 {
2242   const_tree const ctx = DECL_CONTEXT (decl);
2243   return (ctx && TYPE_P (ctx));
2244 }
2245
2246 /* Create a placeholder for member access where we don't actually have an
2247    object that the access is against.  */
2248
2249 tree
2250 build_dummy_object (tree type)
2251 {
2252   tree decl = build1 (NOP_EXPR, build_pointer_type (type), void_zero_node);
2253   return cp_build_indirect_ref (decl, NULL, tf_warning_or_error);
2254 }
2255
2256 /* We've gotten a reference to a member of TYPE.  Return *this if appropriate,
2257    or a dummy object otherwise.  If BINFOP is non-0, it is filled with the
2258    binfo path from current_class_type to TYPE, or 0.  */
2259
2260 tree
2261 maybe_dummy_object (tree type, tree* binfop)
2262 {
2263   tree decl, context;
2264   tree binfo;
2265
2266   if (current_class_type
2267       && (binfo = lookup_base (current_class_type, type,
2268                                ba_unique | ba_quiet, NULL)))
2269     context = current_class_type;
2270   else
2271     {
2272       /* Reference from a nested class member function.  */
2273       context = type;
2274       binfo = TYPE_BINFO (type);
2275     }
2276
2277   if (binfop)
2278     *binfop = binfo;
2279
2280   if (current_class_ref && context == current_class_type
2281       /* Kludge: Make sure that current_class_type is actually
2282          correct.  It might not be if we're in the middle of
2283          tsubst_default_argument.  */
2284       && same_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (current_class_ref)),
2285                       current_class_type))
2286     decl = current_class_ref;
2287   else
2288     decl = build_dummy_object (context);
2289
2290   return decl;
2291 }
2292
2293 /* Returns 1 if OB is a placeholder object, or a pointer to one.  */
2294
2295 int
2296 is_dummy_object (const_tree ob)
2297 {
2298   if (TREE_CODE (ob) == INDIRECT_REF)
2299     ob = TREE_OPERAND (ob, 0);
2300   return (TREE_CODE (ob) == NOP_EXPR
2301           && TREE_OPERAND (ob, 0) == void_zero_node);
2302 }
2303
2304 /* Returns 1 iff type T is something we want to treat as a scalar type for
2305    the purpose of deciding whether it is trivial/POD/standard-layout.  */
2306
2307 static bool
2308 scalarish_type_p (const_tree t)
2309 {
2310   if (t == error_mark_node)
2311     return 1;
2312
2313   return (SCALAR_TYPE_P (t)
2314           || TREE_CODE (t) == VECTOR_TYPE);
2315 }
2316
2317 /* Returns true iff T requires non-trivial default initialization.  */
2318
2319 bool
2320 type_has_nontrivial_default_init (const_tree t)
2321 {
2322   t = strip_array_types (CONST_CAST_TREE (t));
2323
2324   if (CLASS_TYPE_P (t))
2325     return TYPE_HAS_COMPLEX_DFLT (t);
2326   else
2327     return 0;
2328 }
2329
2330 /* Returns true iff copying an object of type T is non-trivial.  */
2331
2332 bool
2333 type_has_nontrivial_copy_init (const_tree t)
2334 {
2335   t = strip_array_types (CONST_CAST_TREE (t));
2336
2337   if (CLASS_TYPE_P (t))
2338     return TYPE_HAS_COMPLEX_INIT_REF (t);
2339   else
2340     return 0;
2341 }
2342
2343 /* Returns 1 iff type T is a trivial type, as defined in [basic.types].  */
2344
2345 bool
2346 trivial_type_p (const_tree t)
2347 {
2348   t = strip_array_types (CONST_CAST_TREE (t));
2349
2350   if (CLASS_TYPE_P (t))
2351     return (TYPE_HAS_TRIVIAL_DFLT (t)
2352             && TYPE_HAS_TRIVIAL_INIT_REF (t)
2353             && TYPE_HAS_TRIVIAL_ASSIGN_REF (t)
2354             && TYPE_HAS_TRIVIAL_DESTRUCTOR (t));
2355   else
2356     return scalarish_type_p (t);
2357 }
2358
2359 /* Returns 1 iff type T is a POD type, as defined in [basic.types].  */
2360
2361 bool
2362 pod_type_p (const_tree t)
2363 {
2364   /* This CONST_CAST is okay because strip_array_types returns its
2365      argument unmodified and we assign it to a const_tree.  */
2366   t = strip_array_types (CONST_CAST_TREE(t));
2367
2368   if (CLASS_TYPE_P (t))
2369     /* [class]/10: A POD struct is a class that is both a trivial class and a
2370        standard-layout class, and has no non-static data members of type
2371        non-POD struct, non-POD union (or array of such types).
2372
2373        We don't need to check individual members because if a member is
2374        non-std-layout or non-trivial, the class will be too.  */
2375     return (std_layout_type_p (t) && trivial_type_p (t));
2376   else
2377     return scalarish_type_p (t);
2378 }
2379
2380 /* Returns true iff T is POD for the purpose of layout, as defined in the
2381    C++ ABI.  */
2382
2383 bool
2384 layout_pod_type_p (const_tree t)
2385 {
2386   t = strip_array_types (CONST_CAST_TREE (t));
2387
2388   if (CLASS_TYPE_P (t))
2389     return !CLASSTYPE_NON_LAYOUT_POD_P (t);
2390   else
2391     return scalarish_type_p (t);
2392 }
2393
2394 /* Returns true iff T is a standard-layout type, as defined in
2395    [basic.types].  */
2396
2397 bool
2398 std_layout_type_p (const_tree t)
2399 {
2400   t = strip_array_types (CONST_CAST_TREE (t));
2401
2402   if (CLASS_TYPE_P (t))
2403     return !CLASSTYPE_NON_STD_LAYOUT (t);
2404   else
2405     return scalarish_type_p (t);
2406 }
2407
2408 /* Nonzero iff type T is a class template implicit specialization.  */
2409
2410 bool
2411 class_tmpl_impl_spec_p (const_tree t)
2412 {
2413   return CLASS_TYPE_P (t) && CLASSTYPE_TEMPLATE_INSTANTIATION (t);
2414 }
2415
2416 /* Returns 1 iff zero initialization of type T means actually storing
2417    zeros in it.  */
2418
2419 int
2420 zero_init_p (const_tree t)
2421 {
2422   /* This CONST_CAST is okay because strip_array_types returns its
2423      argument unmodified and we assign it to a const_tree.  */
2424   t = strip_array_types (CONST_CAST_TREE(t));
2425
2426   if (t == error_mark_node)
2427     return 1;
2428
2429   /* NULL pointers to data members are initialized with -1.  */
2430   if (TYPE_PTRMEM_P (t))
2431     return 0;
2432
2433   /* Classes that contain types that can't be zero-initialized, cannot
2434      be zero-initialized themselves.  */
2435   if (CLASS_TYPE_P (t) && CLASSTYPE_NON_ZERO_INIT_P (t))
2436     return 0;
2437
2438   return 1;
2439 }
2440
2441 /* Table of valid C++ attributes.  */
2442 const struct attribute_spec cxx_attribute_table[] =
2443 {
2444   /* { name, min_len, max_len, decl_req, type_req, fn_type_req, handler } */
2445   { "java_interface", 0, 0, false, false, false, handle_java_interface_attribute },
2446   { "com_interface",  0, 0, false, false, false, handle_com_interface_attribute },
2447   { "init_priority",  1, 1, true,  false, false, handle_init_priority_attribute },
2448   { NULL,             0, 0, false, false, false, NULL }
2449 };
2450
2451 /* Handle a "java_interface" attribute; arguments as in
2452    struct attribute_spec.handler.  */
2453 static tree
2454 handle_java_interface_attribute (tree* node,
2455                                  tree name,
2456                                  tree args ATTRIBUTE_UNUSED ,
2457                                  int flags,
2458                                  bool* no_add_attrs)
2459 {
2460   if (DECL_P (*node)
2461       || !CLASS_TYPE_P (*node)
2462       || !TYPE_FOR_JAVA (*node))
2463     {
2464       error ("%qE attribute can only be applied to Java class definitions",
2465              name);
2466       *no_add_attrs = true;
2467       return NULL_TREE;
2468     }
2469   if (!(flags & (int) ATTR_FLAG_TYPE_IN_PLACE))
2470     *node = build_variant_type_copy (*node);
2471   TYPE_JAVA_INTERFACE (*node) = 1;
2472
2473   return NULL_TREE;
2474 }
2475
2476 /* Handle a "com_interface" attribute; arguments as in
2477    struct attribute_spec.handler.  */
2478 static tree
2479 handle_com_interface_attribute (tree* node,
2480                                 tree name,
2481                                 tree args ATTRIBUTE_UNUSED ,
2482                                 int flags ATTRIBUTE_UNUSED ,
2483                                 bool* no_add_attrs)
2484 {
2485   static int warned;
2486
2487   *no_add_attrs = true;
2488
2489   if (DECL_P (*node)
2490       || !CLASS_TYPE_P (*node)
2491       || *node != TYPE_MAIN_VARIANT (*node))
2492     {
2493       warning (OPT_Wattributes, "%qE attribute can only be applied "
2494                "to class definitions", name);
2495       return NULL_TREE;
2496     }
2497
2498   if (!warned++)
2499     warning (0, "%qE is obsolete; g++ vtables are now COM-compatible by default",
2500              name);
2501
2502   return NULL_TREE;
2503 }
2504
2505 /* Handle an "init_priority" attribute; arguments as in
2506    struct attribute_spec.handler.  */
2507 static tree
2508 handle_init_priority_attribute (tree* node,
2509                                 tree name,
2510                                 tree args,
2511                                 int flags ATTRIBUTE_UNUSED ,
2512                                 bool* no_add_attrs)
2513 {
2514   tree initp_expr = TREE_VALUE (args);
2515   tree decl = *node;
2516   tree type = TREE_TYPE (decl);
2517   int pri;
2518
2519   STRIP_NOPS (initp_expr);
2520
2521   if (!initp_expr || TREE_CODE (initp_expr) != INTEGER_CST)
2522     {
2523       error ("requested init_priority is not an integer constant");
2524       *no_add_attrs = true;
2525       return NULL_TREE;
2526     }
2527
2528   pri = TREE_INT_CST_LOW (initp_expr);
2529
2530   type = strip_array_types (type);
2531
2532   if (decl == NULL_TREE
2533       || TREE_CODE (decl) != VAR_DECL
2534       || !TREE_STATIC (decl)
2535       || DECL_EXTERNAL (decl)
2536       || (TREE_CODE (type) != RECORD_TYPE
2537           && TREE_CODE (type) != UNION_TYPE)
2538       /* Static objects in functions are initialized the
2539          first time control passes through that
2540          function. This is not precise enough to pin down an
2541          init_priority value, so don't allow it.  */
2542       || current_function_decl)
2543     {
2544       error ("can only use %qE attribute on file-scope definitions "
2545              "of objects of class type", name);
2546       *no_add_attrs = true;
2547       return NULL_TREE;
2548     }
2549
2550   if (pri > MAX_INIT_PRIORITY || pri <= 0)
2551     {
2552       error ("requested init_priority is out of range");
2553       *no_add_attrs = true;
2554       return NULL_TREE;
2555     }
2556
2557   /* Check for init_priorities that are reserved for
2558      language and runtime support implementations.*/
2559   if (pri <= MAX_RESERVED_INIT_PRIORITY)
2560     {
2561       warning
2562         (0, "requested init_priority is reserved for internal use");
2563     }
2564
2565   if (SUPPORTS_INIT_PRIORITY)
2566     {
2567       SET_DECL_INIT_PRIORITY (decl, pri);
2568       DECL_HAS_INIT_PRIORITY_P (decl) = 1;
2569       return NULL_TREE;
2570     }
2571   else
2572     {
2573       error ("%qE attribute is not supported on this platform", name);
2574       *no_add_attrs = true;
2575       return NULL_TREE;
2576     }
2577 }
2578
2579 /* Return a new PTRMEM_CST of the indicated TYPE.  The MEMBER is the
2580    thing pointed to by the constant.  */
2581
2582 tree
2583 make_ptrmem_cst (tree type, tree member)
2584 {
2585   tree ptrmem_cst = make_node (PTRMEM_CST);
2586   TREE_TYPE (ptrmem_cst) = type;
2587   PTRMEM_CST_MEMBER (ptrmem_cst) = member;
2588   return ptrmem_cst;
2589 }
2590
2591 /* Build a variant of TYPE that has the indicated ATTRIBUTES.  May
2592    return an existing type if an appropriate type already exists.  */
2593
2594 tree
2595 cp_build_type_attribute_variant (tree type, tree attributes)
2596 {
2597   tree new_type;
2598
2599   new_type = build_type_attribute_variant (type, attributes);
2600   if (TREE_CODE (new_type) == FUNCTION_TYPE
2601       && (TYPE_RAISES_EXCEPTIONS (new_type)
2602           != TYPE_RAISES_EXCEPTIONS (type)))
2603     new_type = build_exception_variant (new_type,
2604                                         TYPE_RAISES_EXCEPTIONS (type));
2605
2606   /* Making a new main variant of a class type is broken.  */
2607   gcc_assert (!CLASS_TYPE_P (type) || new_type == type);
2608     
2609   return new_type;
2610 }
2611
2612 /* Return TRUE if TYPE1 and TYPE2 are identical for type hashing purposes.
2613    Called only after doing all language independent checks.  Only
2614    to check TYPE_RAISES_EXCEPTIONS for FUNCTION_TYPE, the rest is already
2615    compared in type_hash_eq.  */
2616
2617 bool
2618 cxx_type_hash_eq (const_tree typea, const_tree typeb)
2619 {
2620   gcc_assert (TREE_CODE (typea) == FUNCTION_TYPE);
2621
2622   return comp_except_specs (TYPE_RAISES_EXCEPTIONS (typea),
2623                             TYPE_RAISES_EXCEPTIONS (typeb), 1);
2624 }
2625
2626 /* Apply FUNC to all language-specific sub-trees of TP in a pre-order
2627    traversal.  Called from walk_tree.  */
2628
2629 tree
2630 cp_walk_subtrees (tree *tp, int *walk_subtrees_p, walk_tree_fn func,
2631                   void *data, struct pointer_set_t *pset)
2632 {
2633   enum tree_code code = TREE_CODE (*tp);
2634   tree result;
2635
2636 #define WALK_SUBTREE(NODE)                              \
2637   do                                                    \
2638     {                                                   \
2639       result = cp_walk_tree (&(NODE), func, data, pset);        \
2640       if (result) goto out;                             \
2641     }                                                   \
2642   while (0)
2643
2644   /* Not one of the easy cases.  We must explicitly go through the
2645      children.  */
2646   result = NULL_TREE;
2647   switch (code)
2648     {
2649     case DEFAULT_ARG:
2650     case TEMPLATE_TEMPLATE_PARM:
2651     case BOUND_TEMPLATE_TEMPLATE_PARM:
2652     case UNBOUND_CLASS_TEMPLATE:
2653     case TEMPLATE_PARM_INDEX:
2654     case TEMPLATE_TYPE_PARM:
2655     case TYPENAME_TYPE:
2656     case TYPEOF_TYPE:
2657       /* None of these have subtrees other than those already walked
2658          above.  */
2659       *walk_subtrees_p = 0;
2660       break;
2661
2662     case BASELINK:
2663       WALK_SUBTREE (BASELINK_FUNCTIONS (*tp));
2664       *walk_subtrees_p = 0;
2665       break;
2666
2667     case PTRMEM_CST:
2668       WALK_SUBTREE (TREE_TYPE (*tp));
2669       *walk_subtrees_p = 0;
2670       break;
2671
2672     case TREE_LIST:
2673       WALK_SUBTREE (TREE_PURPOSE (*tp));
2674       break;
2675
2676     case OVERLOAD:
2677       WALK_SUBTREE (OVL_FUNCTION (*tp));
2678       WALK_SUBTREE (OVL_CHAIN (*tp));
2679       *walk_subtrees_p = 0;
2680       break;
2681
2682     case USING_DECL:
2683       WALK_SUBTREE (DECL_NAME (*tp));
2684       WALK_SUBTREE (USING_DECL_SCOPE (*tp));
2685       WALK_SUBTREE (USING_DECL_DECLS (*tp));
2686       *walk_subtrees_p = 0;
2687       break;
2688
2689     case RECORD_TYPE:
2690       if (TYPE_PTRMEMFUNC_P (*tp))
2691         WALK_SUBTREE (TYPE_PTRMEMFUNC_FN_TYPE (*tp));
2692       break;
2693
2694     case TYPE_ARGUMENT_PACK:
2695     case NONTYPE_ARGUMENT_PACK:
2696       {
2697         tree args = ARGUMENT_PACK_ARGS (*tp);
2698         int i, len = TREE_VEC_LENGTH (args);
2699         for (i = 0; i < len; i++)
2700           WALK_SUBTREE (TREE_VEC_ELT (args, i));
2701       }
2702       break;
2703
2704     case TYPE_PACK_EXPANSION:
2705       WALK_SUBTREE (TREE_TYPE (*tp));
2706       *walk_subtrees_p = 0;
2707       break;
2708       
2709     case EXPR_PACK_EXPANSION:
2710       WALK_SUBTREE (TREE_OPERAND (*tp, 0));
2711       *walk_subtrees_p = 0;
2712       break;
2713
2714     case CAST_EXPR:
2715     case REINTERPRET_CAST_EXPR:
2716     case STATIC_CAST_EXPR:
2717     case CONST_CAST_EXPR:
2718     case DYNAMIC_CAST_EXPR:
2719       if (TREE_TYPE (*tp))
2720         WALK_SUBTREE (TREE_TYPE (*tp));
2721
2722       {
2723         int i;
2724         for (i = 0; i < TREE_CODE_LENGTH (TREE_CODE (*tp)); ++i)
2725           WALK_SUBTREE (TREE_OPERAND (*tp, i));
2726       }
2727       *walk_subtrees_p = 0;
2728       break;
2729
2730     case TRAIT_EXPR:
2731       WALK_SUBTREE (TRAIT_EXPR_TYPE1 (*tp));
2732       WALK_SUBTREE (TRAIT_EXPR_TYPE2 (*tp));
2733       *walk_subtrees_p = 0;
2734       break;
2735
2736     case DECLTYPE_TYPE:
2737       WALK_SUBTREE (DECLTYPE_TYPE_EXPR (*tp));
2738       *walk_subtrees_p = 0;
2739       break;
2740  
2741
2742     default:
2743       return NULL_TREE;
2744     }
2745
2746   /* We didn't find what we were looking for.  */
2747  out:
2748   return result;
2749
2750 #undef WALK_SUBTREE
2751 }
2752
2753 /* Like save_expr, but for C++.  */
2754
2755 tree
2756 cp_save_expr (tree expr)
2757 {
2758   /* There is no reason to create a SAVE_EXPR within a template; if
2759      needed, we can create the SAVE_EXPR when instantiating the
2760      template.  Furthermore, the middle-end cannot handle C++-specific
2761      tree codes.  */
2762   if (processing_template_decl)
2763     return expr;
2764   return save_expr (expr);
2765 }
2766
2767 /* Initialize tree.c.  */
2768
2769 void
2770 init_tree (void)
2771 {
2772   list_hash_table = htab_create_ggc (31, list_hash, list_hash_eq, NULL);
2773 }
2774
2775 /* Returns the kind of special function that DECL (a FUNCTION_DECL)
2776    is.  Note that sfk_none is zero, so this function can be used as a
2777    predicate to test whether or not DECL is a special function.  */
2778
2779 special_function_kind
2780 special_function_p (const_tree decl)
2781 {
2782   /* Rather than doing all this stuff with magic names, we should
2783      probably have a field of type `special_function_kind' in
2784      DECL_LANG_SPECIFIC.  */
2785   if (DECL_COPY_CONSTRUCTOR_P (decl))
2786     return sfk_copy_constructor;
2787   if (DECL_MOVE_CONSTRUCTOR_P (decl))
2788     return sfk_move_constructor;
2789   if (DECL_CONSTRUCTOR_P (decl))
2790     return sfk_constructor;
2791   if (DECL_OVERLOADED_OPERATOR_P (decl) == NOP_EXPR)
2792     return sfk_assignment_operator;
2793   if (DECL_MAYBE_IN_CHARGE_DESTRUCTOR_P (decl))
2794     return sfk_destructor;
2795   if (DECL_COMPLETE_DESTRUCTOR_P (decl))
2796     return sfk_complete_destructor;
2797   if (DECL_BASE_DESTRUCTOR_P (decl))
2798     return sfk_base_destructor;
2799   if (DECL_DELETING_DESTRUCTOR_P (decl))
2800     return sfk_deleting_destructor;
2801   if (DECL_CONV_FN_P (decl))
2802     return sfk_conversion;
2803
2804   return sfk_none;
2805 }
2806
2807 /* Returns nonzero if TYPE is a character type, including wchar_t.  */
2808
2809 int
2810 char_type_p (tree type)
2811 {
2812   return (same_type_p (type, char_type_node)
2813           || same_type_p (type, unsigned_char_type_node)
2814           || same_type_p (type, signed_char_type_node)
2815           || same_type_p (type, char16_type_node)
2816           || same_type_p (type, char32_type_node)
2817           || same_type_p (type, wchar_type_node));
2818 }
2819
2820 /* Returns the kind of linkage associated with the indicated DECL.  Th
2821    value returned is as specified by the language standard; it is
2822    independent of implementation details regarding template
2823    instantiation, etc.  For example, it is possible that a declaration
2824    to which this function assigns external linkage would not show up
2825    as a global symbol when you run `nm' on the resulting object file.  */
2826
2827 linkage_kind
2828 decl_linkage (tree decl)
2829 {
2830   /* This function doesn't attempt to calculate the linkage from first
2831      principles as given in [basic.link].  Instead, it makes use of
2832      the fact that we have already set TREE_PUBLIC appropriately, and
2833      then handles a few special cases.  Ideally, we would calculate
2834      linkage first, and then transform that into a concrete
2835      implementation.  */
2836
2837   /* Things that don't have names have no linkage.  */
2838   if (!DECL_NAME (decl))
2839     return lk_none;
2840
2841   /* Fields have no linkage.  */
2842   if (TREE_CODE (decl) == FIELD_DECL)
2843     return lk_none;
2844
2845   /* Things that are TREE_PUBLIC have external linkage.  */
2846   if (TREE_PUBLIC (decl))
2847     return lk_external;
2848
2849   if (TREE_CODE (decl) == NAMESPACE_DECL)
2850     return lk_external;
2851
2852   /* Linkage of a CONST_DECL depends on the linkage of the enumeration
2853      type.  */
2854   if (TREE_CODE (decl) == CONST_DECL)
2855     return decl_linkage (TYPE_NAME (TREE_TYPE (decl)));
2856
2857   /* Some things that are not TREE_PUBLIC have external linkage, too.
2858      For example, on targets that don't have weak symbols, we make all
2859      template instantiations have internal linkage (in the object
2860      file), but the symbols should still be treated as having external
2861      linkage from the point of view of the language.  */
2862   if ((TREE_CODE (decl) == FUNCTION_DECL
2863        || TREE_CODE (decl) == VAR_DECL)
2864       && DECL_COMDAT (decl))
2865     return lk_external;
2866
2867   /* Things in local scope do not have linkage, if they don't have
2868      TREE_PUBLIC set.  */
2869   if (decl_function_context (decl))
2870     return lk_none;
2871
2872   /* Members of the anonymous namespace also have TREE_PUBLIC unset, but
2873      are considered to have external linkage for language purposes.  DECLs
2874      really meant to have internal linkage have DECL_THIS_STATIC set.  */
2875   if (TREE_CODE (decl) == TYPE_DECL)
2876     return lk_external;
2877   if (TREE_CODE (decl) == VAR_DECL || TREE_CODE (decl) == FUNCTION_DECL)
2878     {
2879       if (!DECL_THIS_STATIC (decl))
2880         return lk_external;
2881
2882       /* Static data members and static member functions from classes
2883          in anonymous namespace also don't have TREE_PUBLIC set.  */
2884       if (DECL_CLASS_CONTEXT (decl))
2885         return lk_external;
2886     }
2887
2888   /* Everything else has internal linkage.  */
2889   return lk_internal;
2890 }
2891 \f
2892 /* EXP is an expression that we want to pre-evaluate.  Returns (in
2893    *INITP) an expression that will perform the pre-evaluation.  The
2894    value returned by this function is a side-effect free expression
2895    equivalent to the pre-evaluated expression.  Callers must ensure
2896    that *INITP is evaluated before EXP.  */
2897
2898 tree
2899 stabilize_expr (tree exp, tree* initp)
2900 {
2901   tree init_expr;
2902
2903   if (!TREE_SIDE_EFFECTS (exp))
2904     init_expr = NULL_TREE;
2905   else if (!real_lvalue_p (exp)
2906            || !TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (exp)))
2907     {
2908       init_expr = get_target_expr (exp);
2909       exp = TARGET_EXPR_SLOT (init_expr);
2910     }
2911   else
2912     {
2913       exp = cp_build_unary_op (ADDR_EXPR, exp, 1, tf_warning_or_error);
2914       init_expr = get_target_expr (exp);
2915       exp = TARGET_EXPR_SLOT (init_expr);
2916       exp = cp_build_indirect_ref (exp, 0, tf_warning_or_error);
2917     }
2918   *initp = init_expr;
2919
2920   gcc_assert (!TREE_SIDE_EFFECTS (exp));
2921   return exp;
2922 }
2923
2924 /* Add NEW_EXPR, an expression whose value we don't care about, after the
2925    similar expression ORIG.  */
2926
2927 tree
2928 add_stmt_to_compound (tree orig, tree new_expr)
2929 {
2930   if (!new_expr || !TREE_SIDE_EFFECTS (new_expr))
2931     return orig;
2932   if (!orig || !TREE_SIDE_EFFECTS (orig))
2933     return new_expr;
2934   return build2 (COMPOUND_EXPR, void_type_node, orig, new_expr);
2935 }
2936
2937 /* Like stabilize_expr, but for a call whose arguments we want to
2938    pre-evaluate.  CALL is modified in place to use the pre-evaluated
2939    arguments, while, upon return, *INITP contains an expression to
2940    compute the arguments.  */
2941
2942 void
2943 stabilize_call (tree call, tree *initp)
2944 {
2945   tree inits = NULL_TREE;
2946   int i;
2947   int nargs = call_expr_nargs (call);
2948
2949   if (call == error_mark_node || processing_template_decl)
2950     {
2951       *initp = NULL_TREE;
2952       return;
2953     }
2954
2955   gcc_assert (TREE_CODE (call) == CALL_EXPR);
2956
2957   for (i = 0; i < nargs; i++)
2958     {
2959       tree init;
2960       CALL_EXPR_ARG (call, i) =
2961         stabilize_expr (CALL_EXPR_ARG (call, i), &init);
2962       inits = add_stmt_to_compound (inits, init);
2963     }
2964
2965   *initp = inits;
2966 }
2967
2968 /* Like stabilize_expr, but for an AGGR_INIT_EXPR whose arguments we want
2969    to pre-evaluate.  CALL is modified in place to use the pre-evaluated
2970    arguments, while, upon return, *INITP contains an expression to
2971    compute the arguments.  */
2972
2973 void
2974 stabilize_aggr_init (tree call, tree *initp)
2975 {
2976   tree inits = NULL_TREE;
2977   int i;
2978   int nargs = aggr_init_expr_nargs (call);
2979
2980   if (call == error_mark_node)
2981     return;
2982
2983   gcc_assert (TREE_CODE (call) == AGGR_INIT_EXPR);
2984
2985   for (i = 0; i < nargs; i++)
2986     {
2987       tree init;
2988       AGGR_INIT_EXPR_ARG (call, i) =
2989         stabilize_expr (AGGR_INIT_EXPR_ARG (call, i), &init);
2990       inits = add_stmt_to_compound (inits, init);
2991     }
2992
2993   *initp = inits;
2994 }
2995
2996 /* Like stabilize_expr, but for an initialization.  
2997
2998    If the initialization is for an object of class type, this function
2999    takes care not to introduce additional temporaries.
3000
3001    Returns TRUE iff the expression was successfully pre-evaluated,
3002    i.e., if INIT is now side-effect free, except for, possible, a
3003    single call to a constructor.  */
3004
3005 bool
3006 stabilize_init (tree init, tree *initp)
3007 {
3008   tree t = init;
3009
3010   *initp = NULL_TREE;
3011
3012   if (t == error_mark_node || processing_template_decl)
3013     return true;
3014
3015   if (TREE_CODE (t) == INIT_EXPR
3016       && TREE_CODE (TREE_OPERAND (t, 1)) != TARGET_EXPR
3017       && TREE_CODE (TREE_OPERAND (t, 1)) != AGGR_INIT_EXPR)
3018     {
3019       TREE_OPERAND (t, 1) = stabilize_expr (TREE_OPERAND (t, 1), initp);
3020       return true;
3021     }
3022
3023   if (TREE_CODE (t) == INIT_EXPR)
3024     t = TREE_OPERAND (t, 1);
3025   if (TREE_CODE (t) == TARGET_EXPR)
3026     t = TARGET_EXPR_INITIAL (t);
3027   if (TREE_CODE (t) == COMPOUND_EXPR)
3028     t = expr_last (t);
3029   if (TREE_CODE (t) == CONSTRUCTOR
3030       && EMPTY_CONSTRUCTOR_P (t))
3031     /* Default-initialization.  */
3032     return true;
3033
3034   /* If the initializer is a COND_EXPR, we can't preevaluate
3035      anything.  */
3036   if (TREE_CODE (t) == COND_EXPR)
3037     return false;
3038
3039   if (TREE_CODE (t) == CALL_EXPR)
3040     {
3041       stabilize_call (t, initp);
3042       return true;
3043     }
3044
3045   if (TREE_CODE (t) == AGGR_INIT_EXPR)
3046     {
3047       stabilize_aggr_init (t, initp);
3048       return true;
3049     }
3050
3051   /* The initialization is being performed via a bitwise copy -- and
3052      the item copied may have side effects.  */
3053   return TREE_SIDE_EFFECTS (init);
3054 }
3055
3056 /* Like "fold", but should be used whenever we might be processing the
3057    body of a template.  */
3058
3059 tree
3060 fold_if_not_in_template (tree expr)
3061 {
3062   /* In the body of a template, there is never any need to call
3063      "fold".  We will call fold later when actually instantiating the
3064      template.  Integral constant expressions in templates will be
3065      evaluated via fold_non_dependent_expr, as necessary.  */
3066   if (processing_template_decl)
3067     return expr;
3068
3069   /* Fold C++ front-end specific tree codes.  */
3070   if (TREE_CODE (expr) == UNARY_PLUS_EXPR)
3071     return fold_convert (TREE_TYPE (expr), TREE_OPERAND (expr, 0));
3072
3073   return fold (expr);
3074 }
3075
3076 /* Returns true if a cast to TYPE may appear in an integral constant
3077    expression.  */
3078
3079 bool
3080 cast_valid_in_integral_constant_expression_p (tree type)
3081 {
3082   return (INTEGRAL_OR_ENUMERATION_TYPE_P (type)
3083           || dependent_type_p (type)
3084           || type == error_mark_node);
3085 }
3086
3087 /* Return true if we need to fix linkage information of DECL.  */
3088
3089 static bool
3090 cp_fix_function_decl_p (tree decl)
3091 {
3092   /* Skip if DECL is not externally visible.  */
3093   if (!TREE_PUBLIC (decl))
3094     return false;
3095
3096   /* We need to fix DECL if it a appears to be exported but with no
3097      function body.  Thunks do not have CFGs and we may need to
3098      handle them specially later.   */
3099   if (!gimple_has_body_p (decl)
3100       && !DECL_THUNK_P (decl)
3101       && !DECL_EXTERNAL (decl))
3102     return true;
3103
3104   return false;
3105 }
3106
3107 /* Clean the C++ specific parts of the tree T. */
3108
3109 void
3110 cp_free_lang_data (tree t)
3111 {
3112   if (TREE_CODE (t) == METHOD_TYPE
3113       || TREE_CODE (t) == FUNCTION_TYPE)
3114     {
3115       /* Default args are not interesting anymore.  */
3116       tree argtypes = TYPE_ARG_TYPES (t);
3117       while (argtypes)
3118         {
3119           TREE_PURPOSE (argtypes) = 0;
3120           argtypes = TREE_CHAIN (argtypes);
3121         }
3122     }
3123   else if (TREE_CODE (t) == FUNCTION_DECL
3124            && cp_fix_function_decl_p (t))
3125     {
3126       /* If T is used in this translation unit at all,  the definition
3127          must exist somewhere else since we have decided to not emit it
3128          in this TU.  So make it an external reference.  */
3129       DECL_EXTERNAL (t) = 1;
3130       TREE_STATIC (t) = 0;
3131     }
3132   if (CP_AGGREGATE_TYPE_P (t)
3133       && TYPE_NAME (t))
3134     {
3135       tree name = TYPE_NAME (t);
3136       if (TREE_CODE (name) == TYPE_DECL)
3137         name = DECL_NAME (name);
3138       /* Drop anonymous names.  */
3139       if (name != NULL_TREE
3140           && ANON_AGGRNAME_P (name))
3141         TYPE_NAME (t) = NULL_TREE;
3142     }
3143 }
3144
3145 \f
3146 #if defined ENABLE_TREE_CHECKING && (GCC_VERSION >= 2007)
3147 /* Complain that some language-specific thing hanging off a tree
3148    node has been accessed improperly.  */
3149
3150 void
3151 lang_check_failed (const char* file, int line, const char* function)
3152 {
3153   internal_error ("lang_* check: failed in %s, at %s:%d",
3154                   function, trim_filename (file), line);
3155 }
3156 #endif /* ENABLE_TREE_CHECKING */
3157
3158 #include "gt-cp-tree.h"