OSDN Git Service

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