OSDN Git Service

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