OSDN Git Service

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