OSDN Git Service

c95c11c4ddeaad86fa89a290334110313404959f
[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 const char *
1242 cxx_printable_name (tree decl, int v)
1243 {
1244   static unsigned int uid_ring[PRINT_RING_SIZE];
1245   static char *print_ring[PRINT_RING_SIZE];
1246   static int ring_counter;
1247   int i;
1248
1249   /* Only cache functions.  */
1250   if (v < 2
1251       || TREE_CODE (decl) != FUNCTION_DECL
1252       || DECL_LANG_SPECIFIC (decl) == 0)
1253     return lang_decl_name (decl, v);
1254
1255   /* See if this print name is lying around.  */
1256   for (i = 0; i < PRINT_RING_SIZE; i++)
1257     if (uid_ring[i] == DECL_UID (decl))
1258       /* yes, so return it.  */
1259       return print_ring[i];
1260
1261   if (++ring_counter == PRINT_RING_SIZE)
1262     ring_counter = 0;
1263
1264   if (current_function_decl != NULL_TREE)
1265     {
1266       if (uid_ring[ring_counter] == DECL_UID (current_function_decl))
1267         ring_counter += 1;
1268       if (ring_counter == PRINT_RING_SIZE)
1269         ring_counter = 0;
1270       gcc_assert (uid_ring[ring_counter] != DECL_UID (current_function_decl));
1271     }
1272
1273   if (print_ring[ring_counter])
1274     free (print_ring[ring_counter]);
1275
1276   print_ring[ring_counter] = xstrdup (lang_decl_name (decl, v));
1277   uid_ring[ring_counter] = DECL_UID (decl);
1278   return print_ring[ring_counter];
1279 }
1280 \f
1281 /* Build the FUNCTION_TYPE or METHOD_TYPE which may throw exceptions
1282    listed in RAISES.  */
1283
1284 tree
1285 build_exception_variant (tree type, tree raises)
1286 {
1287   tree v = TYPE_MAIN_VARIANT (type);
1288   int type_quals = TYPE_QUALS (type);
1289
1290   for (; v; v = TYPE_NEXT_VARIANT (v))
1291     if (check_qualified_type (v, type, type_quals)
1292         && comp_except_specs (raises, TYPE_RAISES_EXCEPTIONS (v), 1))
1293       return v;
1294
1295   /* Need to build a new variant.  */
1296   v = build_variant_type_copy (type);
1297   TYPE_RAISES_EXCEPTIONS (v) = raises;
1298   return v;
1299 }
1300
1301 /* Given a TEMPLATE_TEMPLATE_PARM node T, create a new
1302    BOUND_TEMPLATE_TEMPLATE_PARM bound with NEWARGS as its template
1303    arguments.  */
1304
1305 tree
1306 bind_template_template_parm (tree t, tree newargs)
1307 {
1308   tree decl = TYPE_NAME (t);
1309   tree t2;
1310
1311   t2 = cxx_make_type (BOUND_TEMPLATE_TEMPLATE_PARM);
1312   decl = build_decl (TYPE_DECL, DECL_NAME (decl), NULL_TREE);
1313
1314   /* These nodes have to be created to reflect new TYPE_DECL and template
1315      arguments.  */
1316   TEMPLATE_TYPE_PARM_INDEX (t2) = copy_node (TEMPLATE_TYPE_PARM_INDEX (t));
1317   TEMPLATE_PARM_DECL (TEMPLATE_TYPE_PARM_INDEX (t2)) = decl;
1318   TEMPLATE_TEMPLATE_PARM_TEMPLATE_INFO (t2)
1319     = tree_cons (TEMPLATE_TEMPLATE_PARM_TEMPLATE_DECL (t),
1320                  newargs, NULL_TREE);
1321
1322   TREE_TYPE (decl) = t2;
1323   TYPE_NAME (t2) = decl;
1324   TYPE_STUB_DECL (t2) = decl;
1325   TYPE_SIZE (t2) = 0;
1326   SET_TYPE_STRUCTURAL_EQUALITY (t2);
1327
1328   return t2;
1329 }
1330
1331 /* Called from count_trees via walk_tree.  */
1332
1333 static tree
1334 count_trees_r (tree *tp, int *walk_subtrees, void *data)
1335 {
1336   ++*((int *) data);
1337
1338   if (TYPE_P (*tp))
1339     *walk_subtrees = 0;
1340
1341   return NULL_TREE;
1342 }
1343
1344 /* Debugging function for measuring the rough complexity of a tree
1345    representation.  */
1346
1347 int
1348 count_trees (tree t)
1349 {
1350   int n_trees = 0;
1351   cp_walk_tree_without_duplicates (&t, count_trees_r, &n_trees);
1352   return n_trees;
1353 }
1354
1355 /* Called from verify_stmt_tree via walk_tree.  */
1356
1357 static tree
1358 verify_stmt_tree_r (tree* tp,
1359                     int* walk_subtrees ATTRIBUTE_UNUSED ,
1360                     void* data)
1361 {
1362   tree t = *tp;
1363   htab_t *statements = (htab_t *) data;
1364   void **slot;
1365
1366   if (!STATEMENT_CODE_P (TREE_CODE (t)))
1367     return NULL_TREE;
1368
1369   /* If this statement is already present in the hash table, then
1370      there is a circularity in the statement tree.  */
1371   gcc_assert (!htab_find (*statements, t));
1372
1373   slot = htab_find_slot (*statements, t, INSERT);
1374   *slot = t;
1375
1376   return NULL_TREE;
1377 }
1378
1379 /* Debugging function to check that the statement T has not been
1380    corrupted.  For now, this function simply checks that T contains no
1381    circularities.  */
1382
1383 void
1384 verify_stmt_tree (tree t)
1385 {
1386   htab_t statements;
1387   statements = htab_create (37, htab_hash_pointer, htab_eq_pointer, NULL);
1388   cp_walk_tree (&t, verify_stmt_tree_r, &statements, NULL);
1389   htab_delete (statements);
1390 }
1391
1392 /* Check if the type T depends on a type with no linkage and if so, return
1393    it.  If RELAXED_P then do not consider a class type declared within
1394    a TREE_PUBLIC function to have no linkage.  */
1395
1396 tree
1397 no_linkage_check (tree t, bool relaxed_p)
1398 {
1399   tree r;
1400
1401   /* There's no point in checking linkage on template functions; we
1402      can't know their complete types.  */
1403   if (processing_template_decl)
1404     return NULL_TREE;
1405
1406   switch (TREE_CODE (t))
1407     {
1408       tree fn;
1409
1410     case RECORD_TYPE:
1411       if (TYPE_PTRMEMFUNC_P (t))
1412         goto ptrmem;
1413       /* Fall through.  */
1414     case UNION_TYPE:
1415       if (!CLASS_TYPE_P (t))
1416         return NULL_TREE;
1417       /* Fall through.  */
1418     case ENUMERAL_TYPE:
1419       if (TYPE_ANONYMOUS_P (t))
1420         return t;
1421       fn = decl_function_context (TYPE_MAIN_DECL (t));
1422       if (fn && (!relaxed_p || !TREE_PUBLIC (fn)))
1423         return t;
1424       return NULL_TREE;
1425
1426     case ARRAY_TYPE:
1427     case POINTER_TYPE:
1428     case REFERENCE_TYPE:
1429       return no_linkage_check (TREE_TYPE (t), relaxed_p);
1430
1431     case OFFSET_TYPE:
1432     ptrmem:
1433       r = no_linkage_check (TYPE_PTRMEM_POINTED_TO_TYPE (t),
1434                             relaxed_p);
1435       if (r)
1436         return r;
1437       return no_linkage_check (TYPE_PTRMEM_CLASS_TYPE (t), relaxed_p);
1438
1439     case METHOD_TYPE:
1440       r = no_linkage_check (TYPE_METHOD_BASETYPE (t), relaxed_p);
1441       if (r)
1442         return r;
1443       /* Fall through.  */
1444     case FUNCTION_TYPE:
1445       {
1446         tree parm;
1447         for (parm = TYPE_ARG_TYPES (t);
1448              parm && parm != void_list_node;
1449              parm = TREE_CHAIN (parm))
1450           {
1451             r = no_linkage_check (TREE_VALUE (parm), relaxed_p);
1452             if (r)
1453               return r;
1454           }
1455         return no_linkage_check (TREE_TYPE (t), relaxed_p);
1456       }
1457
1458     default:
1459       return NULL_TREE;
1460     }
1461 }
1462
1463 #ifdef GATHER_STATISTICS
1464 extern int depth_reached;
1465 #endif
1466
1467 void
1468 cxx_print_statistics (void)
1469 {
1470   print_search_statistics ();
1471   print_class_statistics ();
1472 #ifdef GATHER_STATISTICS
1473   fprintf (stderr, "maximum template instantiation depth reached: %d\n",
1474            depth_reached);
1475 #endif
1476 }
1477
1478 /* Return, as an INTEGER_CST node, the number of elements for TYPE
1479    (which is an ARRAY_TYPE).  This counts only elements of the top
1480    array.  */
1481
1482 tree
1483 array_type_nelts_top (tree type)
1484 {
1485   return fold_build2 (PLUS_EXPR, sizetype,
1486                       array_type_nelts (type),
1487                       size_one_node);
1488 }
1489
1490 /* Return, as an INTEGER_CST node, the number of elements for TYPE
1491    (which is an ARRAY_TYPE).  This one is a recursive count of all
1492    ARRAY_TYPEs that are clumped together.  */
1493
1494 tree
1495 array_type_nelts_total (tree type)
1496 {
1497   tree sz = array_type_nelts_top (type);
1498   type = TREE_TYPE (type);
1499   while (TREE_CODE (type) == ARRAY_TYPE)
1500     {
1501       tree n = array_type_nelts_top (type);
1502       sz = fold_build2 (MULT_EXPR, sizetype, sz, n);
1503       type = TREE_TYPE (type);
1504     }
1505   return sz;
1506 }
1507
1508 /* Called from break_out_target_exprs via mapcar.  */
1509
1510 static tree
1511 bot_manip (tree* tp, int* walk_subtrees, void* data)
1512 {
1513   splay_tree target_remap = ((splay_tree) data);
1514   tree t = *tp;
1515
1516   if (!TYPE_P (t) && TREE_CONSTANT (t))
1517     {
1518       /* There can't be any TARGET_EXPRs or their slot variables below
1519          this point.  We used to check !TREE_SIDE_EFFECTS, but then we
1520          failed to copy an ADDR_EXPR of the slot VAR_DECL.  */
1521       *walk_subtrees = 0;
1522       return NULL_TREE;
1523     }
1524   if (TREE_CODE (t) == TARGET_EXPR)
1525     {
1526       tree u;
1527
1528       if (TREE_CODE (TREE_OPERAND (t, 1)) == AGGR_INIT_EXPR)
1529         u = build_cplus_new (TREE_TYPE (t), TREE_OPERAND (t, 1));
1530       else
1531         u = build_target_expr_with_type (TREE_OPERAND (t, 1), TREE_TYPE (t));
1532
1533       /* Map the old variable to the new one.  */
1534       splay_tree_insert (target_remap,
1535                          (splay_tree_key) TREE_OPERAND (t, 0),
1536                          (splay_tree_value) TREE_OPERAND (u, 0));
1537
1538       TREE_OPERAND (u, 1) = break_out_target_exprs (TREE_OPERAND (u, 1));
1539
1540       /* Replace the old expression with the new version.  */
1541       *tp = u;
1542       /* We don't have to go below this point; the recursive call to
1543          break_out_target_exprs will have handled anything below this
1544          point.  */
1545       *walk_subtrees = 0;
1546       return NULL_TREE;
1547     }
1548
1549   /* Make a copy of this node.  */
1550   return copy_tree_r (tp, walk_subtrees, NULL);
1551 }
1552
1553 /* Replace all remapped VAR_DECLs in T with their new equivalents.
1554    DATA is really a splay-tree mapping old variables to new
1555    variables.  */
1556
1557 static tree
1558 bot_replace (tree* t,
1559              int* walk_subtrees ATTRIBUTE_UNUSED ,
1560              void* data)
1561 {
1562   splay_tree target_remap = ((splay_tree) data);
1563
1564   if (TREE_CODE (*t) == VAR_DECL)
1565     {
1566       splay_tree_node n = splay_tree_lookup (target_remap,
1567                                              (splay_tree_key) *t);
1568       if (n)
1569         *t = (tree) n->value;
1570     }
1571
1572   return NULL_TREE;
1573 }
1574
1575 /* When we parse a default argument expression, we may create
1576    temporary variables via TARGET_EXPRs.  When we actually use the
1577    default-argument expression, we make a copy of the expression, but
1578    we must replace the temporaries with appropriate local versions.  */
1579
1580 tree
1581 break_out_target_exprs (tree t)
1582 {
1583   static int target_remap_count;
1584   static splay_tree target_remap;
1585
1586   if (!target_remap_count++)
1587     target_remap = splay_tree_new (splay_tree_compare_pointers,
1588                                    /*splay_tree_delete_key_fn=*/NULL,
1589                                    /*splay_tree_delete_value_fn=*/NULL);
1590   cp_walk_tree (&t, bot_manip, target_remap, NULL);
1591   cp_walk_tree (&t, bot_replace, target_remap, NULL);
1592
1593   if (!--target_remap_count)
1594     {
1595       splay_tree_delete (target_remap);
1596       target_remap = NULL;
1597     }
1598
1599   return t;
1600 }
1601
1602 /* Similar to `build_nt', but for template definitions of dependent
1603    expressions  */
1604
1605 tree
1606 build_min_nt (enum tree_code code, ...)
1607 {
1608   tree t;
1609   int length;
1610   int i;
1611   va_list p;
1612
1613   gcc_assert (TREE_CODE_CLASS (code) != tcc_vl_exp);
1614
1615   va_start (p, code);
1616
1617   t = make_node (code);
1618   length = TREE_CODE_LENGTH (code);
1619
1620   for (i = 0; i < length; i++)
1621     {
1622       tree x = va_arg (p, tree);
1623       TREE_OPERAND (t, i) = x;
1624     }
1625
1626   va_end (p);
1627   return t;
1628 }
1629
1630
1631 /* Similar to `build', but for template definitions.  */
1632
1633 tree
1634 build_min (enum tree_code code, tree tt, ...)
1635 {
1636   tree t;
1637   int length;
1638   int i;
1639   va_list p;
1640
1641   gcc_assert (TREE_CODE_CLASS (code) != tcc_vl_exp);
1642
1643   va_start (p, tt);
1644
1645   t = make_node (code);
1646   length = TREE_CODE_LENGTH (code);
1647   TREE_TYPE (t) = tt;
1648
1649   for (i = 0; i < length; i++)
1650     {
1651       tree x = va_arg (p, tree);
1652       TREE_OPERAND (t, i) = x;
1653       if (x && !TYPE_P (x) && TREE_SIDE_EFFECTS (x))
1654         TREE_SIDE_EFFECTS (t) = 1;
1655     }
1656
1657   va_end (p);
1658   return t;
1659 }
1660
1661 /* Similar to `build', but for template definitions of non-dependent
1662    expressions. NON_DEP is the non-dependent expression that has been
1663    built.  */
1664
1665 tree
1666 build_min_non_dep (enum tree_code code, tree non_dep, ...)
1667 {
1668   tree t;
1669   int length;
1670   int i;
1671   va_list p;
1672
1673   gcc_assert (TREE_CODE_CLASS (code) != tcc_vl_exp);
1674
1675   va_start (p, non_dep);
1676
1677   t = make_node (code);
1678   length = TREE_CODE_LENGTH (code);
1679   TREE_TYPE (t) = TREE_TYPE (non_dep);
1680   TREE_SIDE_EFFECTS (t) = TREE_SIDE_EFFECTS (non_dep);
1681
1682   for (i = 0; i < length; i++)
1683     {
1684       tree x = va_arg (p, tree);
1685       TREE_OPERAND (t, i) = x;
1686     }
1687
1688   if (code == COMPOUND_EXPR && TREE_CODE (non_dep) != COMPOUND_EXPR)
1689     /* This should not be considered a COMPOUND_EXPR, because it
1690        resolves to an overload.  */
1691     COMPOUND_EXPR_OVERLOADED (t) = 1;
1692
1693   va_end (p);
1694   return t;
1695 }
1696
1697 /* Similar to `build_call_list', but for template definitions of non-dependent
1698    expressions. NON_DEP is the non-dependent expression that has been
1699    built.  */
1700
1701 tree
1702 build_min_non_dep_call_list (tree non_dep, tree fn, tree arglist)
1703 {
1704   tree t = build_nt_call_list (fn, arglist);
1705   TREE_TYPE (t) = TREE_TYPE (non_dep);
1706   TREE_SIDE_EFFECTS (t) = TREE_SIDE_EFFECTS (non_dep);
1707   return t;
1708 }
1709
1710 tree
1711 get_type_decl (tree t)
1712 {
1713   if (TREE_CODE (t) == TYPE_DECL)
1714     return t;
1715   if (TYPE_P (t))
1716     return TYPE_STUB_DECL (t);
1717   gcc_assert (t == error_mark_node);
1718   return t;
1719 }
1720
1721 /* Returns the namespace that contains DECL, whether directly or
1722    indirectly.  */
1723
1724 tree
1725 decl_namespace_context (tree decl)
1726 {
1727   while (1)
1728     {
1729       if (TREE_CODE (decl) == NAMESPACE_DECL)
1730         return decl;
1731       else if (TYPE_P (decl))
1732         decl = CP_DECL_CONTEXT (TYPE_MAIN_DECL (decl));
1733       else
1734         decl = CP_DECL_CONTEXT (decl);
1735     }
1736 }
1737
1738 /* Returns true if decl is within an anonymous namespace, however deeply
1739    nested, or false otherwise.  */
1740
1741 bool
1742 decl_anon_ns_mem_p (const_tree decl)
1743 {
1744   while (1)
1745     {
1746       if (decl == NULL_TREE || decl == error_mark_node)
1747         return false;
1748       if (TREE_CODE (decl) == NAMESPACE_DECL
1749           && DECL_NAME (decl) == NULL_TREE)
1750         return true;
1751       /* Classes and namespaces inside anonymous namespaces have
1752          TREE_PUBLIC == 0, so we can shortcut the search.  */
1753       else if (TYPE_P (decl))
1754         return (TREE_PUBLIC (TYPE_NAME (decl)) == 0);
1755       else if (TREE_CODE (decl) == NAMESPACE_DECL)
1756         return (TREE_PUBLIC (decl) == 0);
1757       else
1758         decl = DECL_CONTEXT (decl);
1759     }
1760 }
1761
1762 /* Return truthvalue of whether T1 is the same tree structure as T2.
1763    Return 1 if they are the same. Return 0 if they are different.  */
1764
1765 bool
1766 cp_tree_equal (tree t1, tree t2)
1767 {
1768   enum tree_code code1, code2;
1769
1770   if (t1 == t2)
1771     return true;
1772   if (!t1 || !t2)
1773     return false;
1774
1775   for (code1 = TREE_CODE (t1);
1776        CONVERT_EXPR_CODE_P (code1)
1777          || code1 == NON_LVALUE_EXPR;
1778        code1 = TREE_CODE (t1))
1779     t1 = TREE_OPERAND (t1, 0);
1780   for (code2 = TREE_CODE (t2);
1781        CONVERT_EXPR_CODE_P (code2)
1782          || code1 == NON_LVALUE_EXPR;
1783        code2 = TREE_CODE (t2))
1784     t2 = TREE_OPERAND (t2, 0);
1785
1786   /* They might have become equal now.  */
1787   if (t1 == t2)
1788     return true;
1789
1790   if (code1 != code2)
1791     return false;
1792
1793   switch (code1)
1794     {
1795     case INTEGER_CST:
1796       return TREE_INT_CST_LOW (t1) == TREE_INT_CST_LOW (t2)
1797         && TREE_INT_CST_HIGH (t1) == TREE_INT_CST_HIGH (t2);
1798
1799     case REAL_CST:
1800       return REAL_VALUES_EQUAL (TREE_REAL_CST (t1), TREE_REAL_CST (t2));
1801
1802     case STRING_CST:
1803       return TREE_STRING_LENGTH (t1) == TREE_STRING_LENGTH (t2)
1804         && !memcmp (TREE_STRING_POINTER (t1), TREE_STRING_POINTER (t2),
1805                     TREE_STRING_LENGTH (t1));
1806
1807     case FIXED_CST:
1808       return FIXED_VALUES_IDENTICAL (TREE_FIXED_CST (t1),
1809                                      TREE_FIXED_CST (t2));
1810
1811     case COMPLEX_CST:
1812       return cp_tree_equal (TREE_REALPART (t1), TREE_REALPART (t2))
1813         && cp_tree_equal (TREE_IMAGPART (t1), TREE_IMAGPART (t2));
1814
1815     case CONSTRUCTOR:
1816       /* We need to do this when determining whether or not two
1817          non-type pointer to member function template arguments
1818          are the same.  */
1819       if (!(same_type_p (TREE_TYPE (t1), TREE_TYPE (t2))
1820             /* The first operand is RTL.  */
1821             && TREE_OPERAND (t1, 0) == TREE_OPERAND (t2, 0)))
1822         return false;
1823       return cp_tree_equal (TREE_OPERAND (t1, 1), TREE_OPERAND (t2, 1));
1824
1825     case TREE_LIST:
1826       if (!cp_tree_equal (TREE_PURPOSE (t1), TREE_PURPOSE (t2)))
1827         return false;
1828       if (!cp_tree_equal (TREE_VALUE (t1), TREE_VALUE (t2)))
1829         return false;
1830       return cp_tree_equal (TREE_CHAIN (t1), TREE_CHAIN (t2));
1831
1832     case SAVE_EXPR:
1833       return cp_tree_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0));
1834
1835     case CALL_EXPR:
1836       {
1837         tree arg1, arg2;
1838         call_expr_arg_iterator iter1, iter2;
1839         if (!cp_tree_equal (CALL_EXPR_FN (t1), CALL_EXPR_FN (t2)))
1840           return false;
1841         for (arg1 = first_call_expr_arg (t1, &iter1),
1842                arg2 = first_call_expr_arg (t2, &iter2);
1843              arg1 && arg2;
1844              arg1 = next_call_expr_arg (&iter1),
1845                arg2 = next_call_expr_arg (&iter2))
1846           if (!cp_tree_equal (arg1, arg2))
1847             return false;
1848         return (arg1 || arg2);
1849       }
1850
1851     case TARGET_EXPR:
1852       {
1853         tree o1 = TREE_OPERAND (t1, 0);
1854         tree o2 = TREE_OPERAND (t2, 0);
1855
1856         /* Special case: if either target is an unallocated VAR_DECL,
1857            it means that it's going to be unified with whatever the
1858            TARGET_EXPR is really supposed to initialize, so treat it
1859            as being equivalent to anything.  */
1860         if (TREE_CODE (o1) == VAR_DECL && DECL_NAME (o1) == NULL_TREE
1861             && !DECL_RTL_SET_P (o1))
1862           /*Nop*/;
1863         else if (TREE_CODE (o2) == VAR_DECL && DECL_NAME (o2) == NULL_TREE
1864                  && !DECL_RTL_SET_P (o2))
1865           /*Nop*/;
1866         else if (!cp_tree_equal (o1, o2))
1867           return false;
1868
1869         return cp_tree_equal (TREE_OPERAND (t1, 1), TREE_OPERAND (t2, 1));
1870       }
1871
1872     case WITH_CLEANUP_EXPR:
1873       if (!cp_tree_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0)))
1874         return false;
1875       return cp_tree_equal (TREE_OPERAND (t1, 1), TREE_OPERAND (t1, 1));
1876
1877     case COMPONENT_REF:
1878       if (TREE_OPERAND (t1, 1) != TREE_OPERAND (t2, 1))
1879         return false;
1880       return cp_tree_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0));
1881
1882     case PARM_DECL:
1883       /* For comparing uses of parameters in late-specified return types
1884          with an out-of-class definition of the function.  */
1885       if (same_type_p (TREE_TYPE (t1), TREE_TYPE (t2))
1886           && parm_index (t1) == parm_index (t2))
1887         return true;
1888       else
1889         return false;
1890
1891     case VAR_DECL:
1892     case CONST_DECL:
1893     case FUNCTION_DECL:
1894     case TEMPLATE_DECL:
1895     case IDENTIFIER_NODE:
1896     case SSA_NAME:
1897       return false;
1898
1899     case BASELINK:
1900       return (BASELINK_BINFO (t1) == BASELINK_BINFO (t2)
1901               && BASELINK_ACCESS_BINFO (t1) == BASELINK_ACCESS_BINFO (t2)
1902               && cp_tree_equal (BASELINK_FUNCTIONS (t1),
1903                                 BASELINK_FUNCTIONS (t2)));
1904
1905     case TEMPLATE_PARM_INDEX:
1906       return (TEMPLATE_PARM_IDX (t1) == TEMPLATE_PARM_IDX (t2)
1907               && TEMPLATE_PARM_LEVEL (t1) == TEMPLATE_PARM_LEVEL (t2)
1908               && same_type_p (TREE_TYPE (TEMPLATE_PARM_DECL (t1)),
1909                               TREE_TYPE (TEMPLATE_PARM_DECL (t2))));
1910
1911     case TEMPLATE_ID_EXPR:
1912       {
1913         unsigned ix;
1914         tree vec1, vec2;
1915
1916         if (!cp_tree_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0)))
1917           return false;
1918         vec1 = TREE_OPERAND (t1, 1);
1919         vec2 = TREE_OPERAND (t2, 1);
1920
1921         if (!vec1 || !vec2)
1922           return !vec1 && !vec2;
1923
1924         if (TREE_VEC_LENGTH (vec1) != TREE_VEC_LENGTH (vec2))
1925           return false;
1926
1927         for (ix = TREE_VEC_LENGTH (vec1); ix--;)
1928           if (!cp_tree_equal (TREE_VEC_ELT (vec1, ix),
1929                               TREE_VEC_ELT (vec2, ix)))
1930             return false;
1931
1932         return true;
1933       }
1934
1935     case SIZEOF_EXPR:
1936     case ALIGNOF_EXPR:
1937       {
1938         tree o1 = TREE_OPERAND (t1, 0);
1939         tree o2 = TREE_OPERAND (t2, 0);
1940
1941         if (TREE_CODE (o1) != TREE_CODE (o2))
1942           return false;
1943         if (TYPE_P (o1))
1944           return same_type_p (o1, o2);
1945         else
1946           return cp_tree_equal (o1, o2);
1947       }
1948
1949     case MODOP_EXPR:
1950       {
1951         tree t1_op1, t2_op1;
1952
1953         if (!cp_tree_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0)))
1954           return false;
1955
1956         t1_op1 = TREE_OPERAND (t1, 1);
1957         t2_op1 = TREE_OPERAND (t2, 1);
1958         if (TREE_CODE (t1_op1) != TREE_CODE (t2_op1))
1959           return false;
1960
1961         return cp_tree_equal (TREE_OPERAND (t1, 2), TREE_OPERAND (t2, 2));
1962       }
1963
1964     case PTRMEM_CST:
1965       /* Two pointer-to-members are the same if they point to the same
1966          field or function in the same class.  */
1967       if (PTRMEM_CST_MEMBER (t1) != PTRMEM_CST_MEMBER (t2))
1968         return false;
1969
1970       return same_type_p (PTRMEM_CST_CLASS (t1), PTRMEM_CST_CLASS (t2));
1971
1972     case OVERLOAD:
1973       if (OVL_FUNCTION (t1) != OVL_FUNCTION (t2))
1974         return false;
1975       return cp_tree_equal (OVL_CHAIN (t1), OVL_CHAIN (t2));
1976
1977     case TRAIT_EXPR:
1978       if (TRAIT_EXPR_KIND (t1) != TRAIT_EXPR_KIND (t2))
1979         return false;
1980       return same_type_p (TRAIT_EXPR_TYPE1 (t1), TRAIT_EXPR_TYPE1 (t2))
1981         && same_type_p (TRAIT_EXPR_TYPE2 (t1), TRAIT_EXPR_TYPE2 (t2));
1982
1983     default:
1984       break;
1985     }
1986
1987   switch (TREE_CODE_CLASS (code1))
1988     {
1989     case tcc_unary:
1990     case tcc_binary:
1991     case tcc_comparison:
1992     case tcc_expression:
1993     case tcc_vl_exp:
1994     case tcc_reference:
1995     case tcc_statement:
1996       {
1997         int i, n;
1998
1999         n = TREE_OPERAND_LENGTH (t1);
2000         if (TREE_CODE_CLASS (code1) == tcc_vl_exp
2001             && n != TREE_OPERAND_LENGTH (t2))
2002           return false;
2003
2004         for (i = 0; i < n; ++i)
2005           if (!cp_tree_equal (TREE_OPERAND (t1, i), TREE_OPERAND (t2, i)))
2006             return false;
2007
2008         return true;
2009       }
2010
2011     case tcc_type:
2012       return same_type_p (t1, t2);
2013     default:
2014       gcc_unreachable ();
2015     }
2016   /* We can get here with --disable-checking.  */
2017   return false;
2018 }
2019
2020 /* The type of ARG when used as an lvalue.  */
2021
2022 tree
2023 lvalue_type (tree arg)
2024 {
2025   tree type = TREE_TYPE (arg);
2026   return type;
2027 }
2028
2029 /* The type of ARG for printing error messages; denote lvalues with
2030    reference types.  */
2031
2032 tree
2033 error_type (tree arg)
2034 {
2035   tree type = TREE_TYPE (arg);
2036
2037   if (TREE_CODE (type) == ARRAY_TYPE)
2038     ;
2039   else if (TREE_CODE (type) == ERROR_MARK)
2040     ;
2041   else if (real_lvalue_p (arg))
2042     type = build_reference_type (lvalue_type (arg));
2043   else if (MAYBE_CLASS_TYPE_P (type))
2044     type = lvalue_type (arg);
2045
2046   return type;
2047 }
2048
2049 /* Does FUNCTION use a variable-length argument list?  */
2050
2051 int
2052 varargs_function_p (const_tree function)
2053 {
2054   const_tree parm = TYPE_ARG_TYPES (TREE_TYPE (function));
2055   for (; parm; parm = TREE_CHAIN (parm))
2056     if (TREE_VALUE (parm) == void_type_node)
2057       return 0;
2058   return 1;
2059 }
2060
2061 /* Returns 1 if decl is a member of a class.  */
2062
2063 int
2064 member_p (const_tree decl)
2065 {
2066   const_tree const ctx = DECL_CONTEXT (decl);
2067   return (ctx && TYPE_P (ctx));
2068 }
2069
2070 /* Create a placeholder for member access where we don't actually have an
2071    object that the access is against.  */
2072
2073 tree
2074 build_dummy_object (tree type)
2075 {
2076   tree decl = build1 (NOP_EXPR, build_pointer_type (type), void_zero_node);
2077   return cp_build_indirect_ref (decl, NULL, tf_warning_or_error);
2078 }
2079
2080 /* We've gotten a reference to a member of TYPE.  Return *this if appropriate,
2081    or a dummy object otherwise.  If BINFOP is non-0, it is filled with the
2082    binfo path from current_class_type to TYPE, or 0.  */
2083
2084 tree
2085 maybe_dummy_object (tree type, tree* binfop)
2086 {
2087   tree decl, context;
2088   tree binfo;
2089
2090   if (current_class_type
2091       && (binfo = lookup_base (current_class_type, type,
2092                                ba_unique | ba_quiet, NULL)))
2093     context = current_class_type;
2094   else
2095     {
2096       /* Reference from a nested class member function.  */
2097       context = type;
2098       binfo = TYPE_BINFO (type);
2099     }
2100
2101   if (binfop)
2102     *binfop = binfo;
2103
2104   if (current_class_ref && context == current_class_type
2105       /* Kludge: Make sure that current_class_type is actually
2106          correct.  It might not be if we're in the middle of
2107          tsubst_default_argument.  */
2108       && same_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (current_class_ref)),
2109                       current_class_type))
2110     decl = current_class_ref;
2111   else
2112     decl = build_dummy_object (context);
2113
2114   return decl;
2115 }
2116
2117 /* Returns 1 if OB is a placeholder object, or a pointer to one.  */
2118
2119 int
2120 is_dummy_object (const_tree ob)
2121 {
2122   if (TREE_CODE (ob) == INDIRECT_REF)
2123     ob = TREE_OPERAND (ob, 0);
2124   return (TREE_CODE (ob) == NOP_EXPR
2125           && TREE_OPERAND (ob, 0) == void_zero_node);
2126 }
2127
2128 /* Returns 1 iff type T is a POD type, as defined in [basic.types].  */
2129
2130 int
2131 pod_type_p (const_tree t)
2132 {
2133   /* This CONST_CAST is okay because strip_array_types returns its
2134      argument unmodified and we assign it to a const_tree.  */
2135   t = strip_array_types (CONST_CAST_TREE(t));
2136
2137   if (t == error_mark_node)
2138     return 1;
2139   if (INTEGRAL_TYPE_P (t))
2140     return 1;  /* integral, character or enumeral type */
2141   if (FLOAT_TYPE_P (t))
2142     return 1;
2143   if (TYPE_PTR_P (t))
2144     return 1; /* pointer to non-member */
2145   if (TYPE_PTR_TO_MEMBER_P (t))
2146     return 1; /* pointer to member */
2147
2148   if (TREE_CODE (t) == VECTOR_TYPE)
2149     return 1; /* vectors are (small) arrays of scalars */
2150
2151   if (! RECORD_OR_UNION_CODE_P (TREE_CODE (t)))
2152     return 0; /* other non-class type (reference or function) */
2153   if (! CLASS_TYPE_P (t))
2154     return 1; /* struct created by the back end */
2155   if (CLASSTYPE_NON_POD_P (t))
2156     return 0;
2157   return 1;
2158 }
2159
2160 /* Nonzero iff type T is a class template implicit specialization.  */
2161
2162 bool
2163 class_tmpl_impl_spec_p (const_tree t)
2164 {
2165   return CLASS_TYPE_P (t) && CLASSTYPE_TEMPLATE_INSTANTIATION (t);
2166 }
2167
2168 /* Returns 1 iff zero initialization of type T means actually storing
2169    zeros in it.  */
2170
2171 int
2172 zero_init_p (const_tree t)
2173 {
2174   /* This CONST_CAST is okay because strip_array_types returns its
2175      argument unmodified and we assign it to a const_tree.  */
2176   t = strip_array_types (CONST_CAST_TREE(t));
2177
2178   if (t == error_mark_node)
2179     return 1;
2180
2181   /* NULL pointers to data members are initialized with -1.  */
2182   if (TYPE_PTRMEM_P (t))
2183     return 0;
2184
2185   /* Classes that contain types that can't be zero-initialized, cannot
2186      be zero-initialized themselves.  */
2187   if (CLASS_TYPE_P (t) && CLASSTYPE_NON_ZERO_INIT_P (t))
2188     return 0;
2189
2190   return 1;
2191 }
2192
2193 /* Table of valid C++ attributes.  */
2194 const struct attribute_spec cxx_attribute_table[] =
2195 {
2196   /* { name, min_len, max_len, decl_req, type_req, fn_type_req, handler } */
2197   { "java_interface", 0, 0, false, false, false, handle_java_interface_attribute },
2198   { "com_interface",  0, 0, false, false, false, handle_com_interface_attribute },
2199   { "init_priority",  1, 1, true,  false, false, handle_init_priority_attribute },
2200   { NULL,             0, 0, false, false, false, NULL }
2201 };
2202
2203 /* Handle a "java_interface" attribute; arguments as in
2204    struct attribute_spec.handler.  */
2205 static tree
2206 handle_java_interface_attribute (tree* node,
2207                                  tree name,
2208                                  tree args ATTRIBUTE_UNUSED ,
2209                                  int flags,
2210                                  bool* no_add_attrs)
2211 {
2212   if (DECL_P (*node)
2213       || !CLASS_TYPE_P (*node)
2214       || !TYPE_FOR_JAVA (*node))
2215     {
2216       error ("%qE attribute can only be applied to Java class definitions",
2217              name);
2218       *no_add_attrs = true;
2219       return NULL_TREE;
2220     }
2221   if (!(flags & (int) ATTR_FLAG_TYPE_IN_PLACE))
2222     *node = build_variant_type_copy (*node);
2223   TYPE_JAVA_INTERFACE (*node) = 1;
2224
2225   return NULL_TREE;
2226 }
2227
2228 /* Handle a "com_interface" attribute; arguments as in
2229    struct attribute_spec.handler.  */
2230 static tree
2231 handle_com_interface_attribute (tree* node,
2232                                 tree name,
2233                                 tree args ATTRIBUTE_UNUSED ,
2234                                 int flags ATTRIBUTE_UNUSED ,
2235                                 bool* no_add_attrs)
2236 {
2237   static int warned;
2238
2239   *no_add_attrs = true;
2240
2241   if (DECL_P (*node)
2242       || !CLASS_TYPE_P (*node)
2243       || *node != TYPE_MAIN_VARIANT (*node))
2244     {
2245       warning (OPT_Wattributes, "%qE attribute can only be applied "
2246                "to class definitions", name);
2247       return NULL_TREE;
2248     }
2249
2250   if (!warned++)
2251     warning (0, "%qE is obsolete; g++ vtables are now COM-compatible by default",
2252              name);
2253
2254   return NULL_TREE;
2255 }
2256
2257 /* Handle an "init_priority" attribute; arguments as in
2258    struct attribute_spec.handler.  */
2259 static tree
2260 handle_init_priority_attribute (tree* node,
2261                                 tree name,
2262                                 tree args,
2263                                 int flags ATTRIBUTE_UNUSED ,
2264                                 bool* no_add_attrs)
2265 {
2266   tree initp_expr = TREE_VALUE (args);
2267   tree decl = *node;
2268   tree type = TREE_TYPE (decl);
2269   int pri;
2270
2271   STRIP_NOPS (initp_expr);
2272
2273   if (!initp_expr || TREE_CODE (initp_expr) != INTEGER_CST)
2274     {
2275       error ("requested init_priority is not an integer constant");
2276       *no_add_attrs = true;
2277       return NULL_TREE;
2278     }
2279
2280   pri = TREE_INT_CST_LOW (initp_expr);
2281
2282   type = strip_array_types (type);
2283
2284   if (decl == NULL_TREE
2285       || TREE_CODE (decl) != VAR_DECL
2286       || !TREE_STATIC (decl)
2287       || DECL_EXTERNAL (decl)
2288       || (TREE_CODE (type) != RECORD_TYPE
2289           && TREE_CODE (type) != UNION_TYPE)
2290       /* Static objects in functions are initialized the
2291          first time control passes through that
2292          function. This is not precise enough to pin down an
2293          init_priority value, so don't allow it.  */
2294       || current_function_decl)
2295     {
2296       error ("can only use %qE attribute on file-scope definitions "
2297              "of objects of class type", name);
2298       *no_add_attrs = true;
2299       return NULL_TREE;
2300     }
2301
2302   if (pri > MAX_INIT_PRIORITY || pri <= 0)
2303     {
2304       error ("requested init_priority is out of range");
2305       *no_add_attrs = true;
2306       return NULL_TREE;
2307     }
2308
2309   /* Check for init_priorities that are reserved for
2310      language and runtime support implementations.*/
2311   if (pri <= MAX_RESERVED_INIT_PRIORITY)
2312     {
2313       warning
2314         (0, "requested init_priority is reserved for internal use");
2315     }
2316
2317   if (SUPPORTS_INIT_PRIORITY)
2318     {
2319       SET_DECL_INIT_PRIORITY (decl, pri);
2320       DECL_HAS_INIT_PRIORITY_P (decl) = 1;
2321       return NULL_TREE;
2322     }
2323   else
2324     {
2325       error ("%qE attribute is not supported on this platform", name);
2326       *no_add_attrs = true;
2327       return NULL_TREE;
2328     }
2329 }
2330
2331 /* Return a new PTRMEM_CST of the indicated TYPE.  The MEMBER is the
2332    thing pointed to by the constant.  */
2333
2334 tree
2335 make_ptrmem_cst (tree type, tree member)
2336 {
2337   tree ptrmem_cst = make_node (PTRMEM_CST);
2338   TREE_TYPE (ptrmem_cst) = type;
2339   PTRMEM_CST_MEMBER (ptrmem_cst) = member;
2340   return ptrmem_cst;
2341 }
2342
2343 /* Build a variant of TYPE that has the indicated ATTRIBUTES.  May
2344    return an existing type if an appropriate type already exists.  */
2345
2346 tree
2347 cp_build_type_attribute_variant (tree type, tree attributes)
2348 {
2349   tree new_type;
2350
2351   new_type = build_type_attribute_variant (type, attributes);
2352   if (TREE_CODE (new_type) == FUNCTION_TYPE
2353       && (TYPE_RAISES_EXCEPTIONS (new_type)
2354           != TYPE_RAISES_EXCEPTIONS (type)))
2355     new_type = build_exception_variant (new_type,
2356                                         TYPE_RAISES_EXCEPTIONS (type));
2357
2358   /* Making a new main variant of a class type is broken.  */
2359   gcc_assert (!CLASS_TYPE_P (type) || new_type == type);
2360     
2361   return new_type;
2362 }
2363
2364 /* Return TRUE if TYPE1 and TYPE2 are identical for type hashing purposes.
2365    Called only after doing all language independent checks.  Only
2366    to check TYPE_RAISES_EXCEPTIONS for FUNCTION_TYPE, the rest is already
2367    compared in type_hash_eq.  */
2368
2369 bool
2370 cxx_type_hash_eq (const_tree typea, const_tree typeb)
2371 {
2372   gcc_assert (TREE_CODE (typea) == FUNCTION_TYPE);
2373
2374   return comp_except_specs (TYPE_RAISES_EXCEPTIONS (typea),
2375                             TYPE_RAISES_EXCEPTIONS (typeb), 1);
2376 }
2377
2378 /* Apply FUNC to all language-specific sub-trees of TP in a pre-order
2379    traversal.  Called from walk_tree.  */
2380
2381 tree
2382 cp_walk_subtrees (tree *tp, int *walk_subtrees_p, walk_tree_fn func,
2383                   void *data, struct pointer_set_t *pset)
2384 {
2385   enum tree_code code = TREE_CODE (*tp);
2386   tree result;
2387
2388 #define WALK_SUBTREE(NODE)                              \
2389   do                                                    \
2390     {                                                   \
2391       result = cp_walk_tree (&(NODE), func, data, pset);        \
2392       if (result) goto out;                             \
2393     }                                                   \
2394   while (0)
2395
2396   /* Not one of the easy cases.  We must explicitly go through the
2397      children.  */
2398   result = NULL_TREE;
2399   switch (code)
2400     {
2401     case DEFAULT_ARG:
2402     case TEMPLATE_TEMPLATE_PARM:
2403     case BOUND_TEMPLATE_TEMPLATE_PARM:
2404     case UNBOUND_CLASS_TEMPLATE:
2405     case TEMPLATE_PARM_INDEX:
2406     case TEMPLATE_TYPE_PARM:
2407     case TYPENAME_TYPE:
2408     case TYPEOF_TYPE:
2409       /* None of these have subtrees other than those already walked
2410          above.  */
2411       *walk_subtrees_p = 0;
2412       break;
2413
2414     case BASELINK:
2415       WALK_SUBTREE (BASELINK_FUNCTIONS (*tp));
2416       *walk_subtrees_p = 0;
2417       break;
2418
2419     case PTRMEM_CST:
2420       WALK_SUBTREE (TREE_TYPE (*tp));
2421       *walk_subtrees_p = 0;
2422       break;
2423
2424     case TREE_LIST:
2425       WALK_SUBTREE (TREE_PURPOSE (*tp));
2426       break;
2427
2428     case OVERLOAD:
2429       WALK_SUBTREE (OVL_FUNCTION (*tp));
2430       WALK_SUBTREE (OVL_CHAIN (*tp));
2431       *walk_subtrees_p = 0;
2432       break;
2433
2434     case USING_DECL:
2435       WALK_SUBTREE (DECL_NAME (*tp));
2436       WALK_SUBTREE (USING_DECL_SCOPE (*tp));
2437       WALK_SUBTREE (USING_DECL_DECLS (*tp));
2438       *walk_subtrees_p = 0;
2439       break;
2440
2441     case RECORD_TYPE:
2442       if (TYPE_PTRMEMFUNC_P (*tp))
2443         WALK_SUBTREE (TYPE_PTRMEMFUNC_FN_TYPE (*tp));
2444       break;
2445
2446     case TYPE_ARGUMENT_PACK:
2447     case NONTYPE_ARGUMENT_PACK:
2448       {
2449         tree args = ARGUMENT_PACK_ARGS (*tp);
2450         int i, len = TREE_VEC_LENGTH (args);
2451         for (i = 0; i < len; i++)
2452           WALK_SUBTREE (TREE_VEC_ELT (args, i));
2453       }
2454       break;
2455
2456     case TYPE_PACK_EXPANSION:
2457       WALK_SUBTREE (TREE_TYPE (*tp));
2458       *walk_subtrees_p = 0;
2459       break;
2460       
2461     case EXPR_PACK_EXPANSION:
2462       WALK_SUBTREE (TREE_OPERAND (*tp, 0));
2463       *walk_subtrees_p = 0;
2464       break;
2465
2466     case CAST_EXPR:
2467     case REINTERPRET_CAST_EXPR:
2468     case STATIC_CAST_EXPR:
2469     case CONST_CAST_EXPR:
2470     case DYNAMIC_CAST_EXPR:
2471       if (TREE_TYPE (*tp))
2472         WALK_SUBTREE (TREE_TYPE (*tp));
2473
2474       {
2475         int i;
2476         for (i = 0; i < TREE_CODE_LENGTH (TREE_CODE (*tp)); ++i)
2477           WALK_SUBTREE (TREE_OPERAND (*tp, i));
2478       }
2479       *walk_subtrees_p = 0;
2480       break;
2481
2482     case TRAIT_EXPR:
2483       WALK_SUBTREE (TRAIT_EXPR_TYPE1 (*tp));
2484       WALK_SUBTREE (TRAIT_EXPR_TYPE2 (*tp));
2485       *walk_subtrees_p = 0;
2486       break;
2487
2488     case DECLTYPE_TYPE:
2489       WALK_SUBTREE (DECLTYPE_TYPE_EXPR (*tp));
2490       *walk_subtrees_p = 0;
2491       break;
2492  
2493
2494     default:
2495       return NULL_TREE;
2496     }
2497
2498   /* We didn't find what we were looking for.  */
2499  out:
2500   return result;
2501
2502 #undef WALK_SUBTREE
2503 }
2504
2505 /* Like save_expr, but for C++.  */
2506
2507 tree
2508 cp_save_expr (tree expr)
2509 {
2510   /* There is no reason to create a SAVE_EXPR within a template; if
2511      needed, we can create the SAVE_EXPR when instantiating the
2512      template.  Furthermore, the middle-end cannot handle C++-specific
2513      tree codes.  */
2514   if (processing_template_decl)
2515     return expr;
2516   return save_expr (expr);
2517 }
2518
2519 /* Initialize tree.c.  */
2520
2521 void
2522 init_tree (void)
2523 {
2524   list_hash_table = htab_create_ggc (31, list_hash, list_hash_eq, NULL);
2525 }
2526
2527 /* Returns the kind of special function that DECL (a FUNCTION_DECL)
2528    is.  Note that sfk_none is zero, so this function can be used as a
2529    predicate to test whether or not DECL is a special function.  */
2530
2531 special_function_kind
2532 special_function_p (const_tree decl)
2533 {
2534   /* Rather than doing all this stuff with magic names, we should
2535      probably have a field of type `special_function_kind' in
2536      DECL_LANG_SPECIFIC.  */
2537   if (DECL_COPY_CONSTRUCTOR_P (decl))
2538     return sfk_copy_constructor;
2539   if (DECL_CONSTRUCTOR_P (decl))
2540     return sfk_constructor;
2541   if (DECL_OVERLOADED_OPERATOR_P (decl) == NOP_EXPR)
2542     return sfk_assignment_operator;
2543   if (DECL_MAYBE_IN_CHARGE_DESTRUCTOR_P (decl))
2544     return sfk_destructor;
2545   if (DECL_COMPLETE_DESTRUCTOR_P (decl))
2546     return sfk_complete_destructor;
2547   if (DECL_BASE_DESTRUCTOR_P (decl))
2548     return sfk_base_destructor;
2549   if (DECL_DELETING_DESTRUCTOR_P (decl))
2550     return sfk_deleting_destructor;
2551   if (DECL_CONV_FN_P (decl))
2552     return sfk_conversion;
2553
2554   return sfk_none;
2555 }
2556
2557 /* Returns nonzero if TYPE is a character type, including wchar_t.  */
2558
2559 int
2560 char_type_p (tree type)
2561 {
2562   return (same_type_p (type, char_type_node)
2563           || same_type_p (type, unsigned_char_type_node)
2564           || same_type_p (type, signed_char_type_node)
2565           || same_type_p (type, char16_type_node)
2566           || same_type_p (type, char32_type_node)
2567           || same_type_p (type, wchar_type_node));
2568 }
2569
2570 /* Returns the kind of linkage associated with the indicated DECL.  Th
2571    value returned is as specified by the language standard; it is
2572    independent of implementation details regarding template
2573    instantiation, etc.  For example, it is possible that a declaration
2574    to which this function assigns external linkage would not show up
2575    as a global symbol when you run `nm' on the resulting object file.  */
2576
2577 linkage_kind
2578 decl_linkage (tree decl)
2579 {
2580   /* This function doesn't attempt to calculate the linkage from first
2581      principles as given in [basic.link].  Instead, it makes use of
2582      the fact that we have already set TREE_PUBLIC appropriately, and
2583      then handles a few special cases.  Ideally, we would calculate
2584      linkage first, and then transform that into a concrete
2585      implementation.  */
2586
2587   /* Things that don't have names have no linkage.  */
2588   if (!DECL_NAME (decl))
2589     return lk_none;
2590
2591   /* Fields have no linkage.  */
2592   if (TREE_CODE (decl) == FIELD_DECL)
2593     return lk_none;
2594
2595   /* Things that are TREE_PUBLIC have external linkage.  */
2596   if (TREE_PUBLIC (decl))
2597     return lk_external;
2598
2599   if (TREE_CODE (decl) == NAMESPACE_DECL)
2600     return lk_external;
2601
2602   /* Linkage of a CONST_DECL depends on the linkage of the enumeration
2603      type.  */
2604   if (TREE_CODE (decl) == CONST_DECL)
2605     return decl_linkage (TYPE_NAME (TREE_TYPE (decl)));
2606
2607   /* Some things that are not TREE_PUBLIC have external linkage, too.
2608      For example, on targets that don't have weak symbols, we make all
2609      template instantiations have internal linkage (in the object
2610      file), but the symbols should still be treated as having external
2611      linkage from the point of view of the language.  */
2612   if (TREE_CODE (decl) != TYPE_DECL && DECL_LANG_SPECIFIC (decl)
2613       && DECL_COMDAT (decl))
2614     return lk_external;
2615
2616   /* Things in local scope do not have linkage, if they don't have
2617      TREE_PUBLIC set.  */
2618   if (decl_function_context (decl))
2619     return lk_none;
2620
2621   /* Members of the anonymous namespace also have TREE_PUBLIC unset, but
2622      are considered to have external linkage for language purposes.  DECLs
2623      really meant to have internal linkage have DECL_THIS_STATIC set.  */
2624   if (TREE_CODE (decl) == TYPE_DECL)
2625     return lk_external;
2626   if (TREE_CODE (decl) == VAR_DECL || TREE_CODE (decl) == FUNCTION_DECL)
2627     {
2628       if (!DECL_THIS_STATIC (decl))
2629         return lk_external;
2630
2631       /* Static data members and static member functions from classes
2632          in anonymous namespace also don't have TREE_PUBLIC set.  */
2633       if (DECL_CLASS_CONTEXT (decl))
2634         return lk_external;
2635     }
2636
2637   /* Everything else has internal linkage.  */
2638   return lk_internal;
2639 }
2640 \f
2641 /* EXP is an expression that we want to pre-evaluate.  Returns (in
2642    *INITP) an expression that will perform the pre-evaluation.  The
2643    value returned by this function is a side-effect free expression
2644    equivalent to the pre-evaluated expression.  Callers must ensure
2645    that *INITP is evaluated before EXP.  */
2646
2647 tree
2648 stabilize_expr (tree exp, tree* initp)
2649 {
2650   tree init_expr;
2651
2652   if (!TREE_SIDE_EFFECTS (exp))
2653     init_expr = NULL_TREE;
2654   else if (!real_lvalue_p (exp)
2655            || !TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (exp)))
2656     {
2657       init_expr = get_target_expr (exp);
2658       exp = TARGET_EXPR_SLOT (init_expr);
2659     }
2660   else
2661     {
2662       exp = cp_build_unary_op (ADDR_EXPR, exp, 1, tf_warning_or_error);
2663       init_expr = get_target_expr (exp);
2664       exp = TARGET_EXPR_SLOT (init_expr);
2665       exp = cp_build_indirect_ref (exp, 0, tf_warning_or_error);
2666     }
2667   *initp = init_expr;
2668
2669   gcc_assert (!TREE_SIDE_EFFECTS (exp));
2670   return exp;
2671 }
2672
2673 /* Add NEW_EXPR, an expression whose value we don't care about, after the
2674    similar expression ORIG.  */
2675
2676 tree
2677 add_stmt_to_compound (tree orig, tree new_expr)
2678 {
2679   if (!new_expr || !TREE_SIDE_EFFECTS (new_expr))
2680     return orig;
2681   if (!orig || !TREE_SIDE_EFFECTS (orig))
2682     return new_expr;
2683   return build2 (COMPOUND_EXPR, void_type_node, orig, new_expr);
2684 }
2685
2686 /* Like stabilize_expr, but for a call whose arguments we want to
2687    pre-evaluate.  CALL is modified in place to use the pre-evaluated
2688    arguments, while, upon return, *INITP contains an expression to
2689    compute the arguments.  */
2690
2691 void
2692 stabilize_call (tree call, tree *initp)
2693 {
2694   tree inits = NULL_TREE;
2695   int i;
2696   int nargs = call_expr_nargs (call);
2697
2698   if (call == error_mark_node || processing_template_decl)
2699     {
2700       *initp = NULL_TREE;
2701       return;
2702     }
2703
2704   gcc_assert (TREE_CODE (call) == CALL_EXPR);
2705
2706   for (i = 0; i < nargs; i++)
2707     {
2708       tree init;
2709       CALL_EXPR_ARG (call, i) =
2710         stabilize_expr (CALL_EXPR_ARG (call, i), &init);
2711       inits = add_stmt_to_compound (inits, init);
2712     }
2713
2714   *initp = inits;
2715 }
2716
2717 /* Like stabilize_expr, but for an AGGR_INIT_EXPR whose arguments we want
2718    to pre-evaluate.  CALL is modified in place to use the pre-evaluated
2719    arguments, while, upon return, *INITP contains an expression to
2720    compute the arguments.  */
2721
2722 void
2723 stabilize_aggr_init (tree call, tree *initp)
2724 {
2725   tree inits = NULL_TREE;
2726   int i;
2727   int nargs = aggr_init_expr_nargs (call);
2728
2729   if (call == error_mark_node)
2730     return;
2731
2732   gcc_assert (TREE_CODE (call) == AGGR_INIT_EXPR);
2733
2734   for (i = 0; i < nargs; i++)
2735     {
2736       tree init;
2737       AGGR_INIT_EXPR_ARG (call, i) =
2738         stabilize_expr (AGGR_INIT_EXPR_ARG (call, i), &init);
2739       inits = add_stmt_to_compound (inits, init);
2740     }
2741
2742   *initp = inits;
2743 }
2744
2745 /* Like stabilize_expr, but for an initialization.  
2746
2747    If the initialization is for an object of class type, this function
2748    takes care not to introduce additional temporaries.
2749
2750    Returns TRUE iff the expression was successfully pre-evaluated,
2751    i.e., if INIT is now side-effect free, except for, possible, a
2752    single call to a constructor.  */
2753
2754 bool
2755 stabilize_init (tree init, tree *initp)
2756 {
2757   tree t = init;
2758
2759   *initp = NULL_TREE;
2760
2761   if (t == error_mark_node || processing_template_decl)
2762     return true;
2763
2764   if (TREE_CODE (t) == INIT_EXPR
2765       && TREE_CODE (TREE_OPERAND (t, 1)) != TARGET_EXPR
2766       && TREE_CODE (TREE_OPERAND (t, 1)) != AGGR_INIT_EXPR)
2767     {
2768       TREE_OPERAND (t, 1) = stabilize_expr (TREE_OPERAND (t, 1), initp);
2769       return true;
2770     }
2771
2772   if (TREE_CODE (t) == INIT_EXPR)
2773     t = TREE_OPERAND (t, 1);
2774   if (TREE_CODE (t) == TARGET_EXPR)
2775     t = TARGET_EXPR_INITIAL (t);
2776   if (TREE_CODE (t) == COMPOUND_EXPR)
2777     t = expr_last (t);
2778   if (TREE_CODE (t) == CONSTRUCTOR
2779       && EMPTY_CONSTRUCTOR_P (t))
2780     /* Default-initialization.  */
2781     return true;
2782
2783   /* If the initializer is a COND_EXPR, we can't preevaluate
2784      anything.  */
2785   if (TREE_CODE (t) == COND_EXPR)
2786     return false;
2787
2788   if (TREE_CODE (t) == CALL_EXPR)
2789     {
2790       stabilize_call (t, initp);
2791       return true;
2792     }
2793
2794   if (TREE_CODE (t) == AGGR_INIT_EXPR)
2795     {
2796       stabilize_aggr_init (t, initp);
2797       return true;
2798     }
2799
2800   /* The initialization is being performed via a bitwise copy -- and
2801      the item copied may have side effects.  */
2802   return TREE_SIDE_EFFECTS (init);
2803 }
2804
2805 /* Like "fold", but should be used whenever we might be processing the
2806    body of a template.  */
2807
2808 tree
2809 fold_if_not_in_template (tree expr)
2810 {
2811   /* In the body of a template, there is never any need to call
2812      "fold".  We will call fold later when actually instantiating the
2813      template.  Integral constant expressions in templates will be
2814      evaluated via fold_non_dependent_expr, as necessary.  */
2815   if (processing_template_decl)
2816     return expr;
2817
2818   /* Fold C++ front-end specific tree codes.  */
2819   if (TREE_CODE (expr) == UNARY_PLUS_EXPR)
2820     return fold_convert (TREE_TYPE (expr), TREE_OPERAND (expr, 0));
2821
2822   return fold (expr);
2823 }
2824
2825 /* Returns true if a cast to TYPE may appear in an integral constant
2826    expression.  */
2827
2828 bool
2829 cast_valid_in_integral_constant_expression_p (tree type)
2830 {
2831   return (INTEGRAL_OR_ENUMERATION_TYPE_P (type)
2832           || dependent_type_p (type)
2833           || type == error_mark_node);
2834 }
2835
2836 \f
2837 #if defined ENABLE_TREE_CHECKING && (GCC_VERSION >= 2007)
2838 /* Complain that some language-specific thing hanging off a tree
2839    node has been accessed improperly.  */
2840
2841 void
2842 lang_check_failed (const char* file, int line, const char* function)
2843 {
2844   internal_error ("lang_* check: failed in %s, at %s:%d",
2845                   function, trim_filename (file), line);
2846 }
2847 #endif /* ENABLE_TREE_CHECKING */
2848
2849 #include "gt-cp-tree.h"