OSDN Git Service

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