OSDN Git Service

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