OSDN Git Service

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