OSDN Git Service

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