OSDN Git Service

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