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