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