OSDN Git Service

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