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