OSDN Git Service

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