OSDN Git Service

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