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