OSDN Git Service

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