57fc5c1c54c388eee8960f2421a74d7031ade1e6
[gcc.git] / gcc / cp / tree.c
1 /* Language-dependent node constructors for parse phase of GNU compiler.
2 Copyright (C) 1987-2016 Free Software Foundation, Inc.
3 Hacked by Michael Tiemann (tiemann@cygnus.com)
4
5 This file is part of GCC.
6
7 GCC is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 3, or (at your option)
10 any later version.
11
12 GCC is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
16
17 You should have received a copy of the GNU General Public License
18 along with GCC; see the file COPYING3. If not see
19 <http://www.gnu.org/licenses/>. */
20
21 #include "config.h"
22 #include "system.h"
23 #include "coretypes.h"
24 #include "tree.h"
25 #include "cp-tree.h"
26 #include "gimple-expr.h"
27 #include "cgraph.h"
28 #include "stor-layout.h"
29 #include "print-tree.h"
30 #include "tree-iterator.h"
31 #include "tree-inline.h"
32 #include "debug.h"
33 #include "convert.h"
34 #include "gimplify.h"
35 #include "attribs.h"
36
37 static tree bot_manip (tree *, int *, void *);
38 static tree bot_replace (tree *, int *, void *);
39 static hashval_t list_hash_pieces (tree, tree, tree);
40 static tree build_target_expr (tree, tree, tsubst_flags_t);
41 static tree count_trees_r (tree *, int *, void *);
42 static tree verify_stmt_tree_r (tree *, int *, void *);
43 static tree build_local_temp (tree);
44
45 static tree handle_java_interface_attribute (tree *, tree, tree, int, bool *);
46 static tree handle_init_priority_attribute (tree *, tree, tree, int, bool *);
47 static tree handle_abi_tag_attribute (tree *, tree, tree, int, bool *);
48
49 /* If REF is an lvalue, returns the kind of lvalue that REF is.
50 Otherwise, returns clk_none. */
51
52 cp_lvalue_kind
53 lvalue_kind (const_tree ref)
54 {
55 cp_lvalue_kind op1_lvalue_kind = clk_none;
56 cp_lvalue_kind op2_lvalue_kind = clk_none;
57
58 /* Expressions of reference type are sometimes wrapped in
59 INDIRECT_REFs. INDIRECT_REFs are just internal compiler
60 representation, not part of the language, so we have to look
61 through them. */
62 if (REFERENCE_REF_P (ref))
63 return lvalue_kind (TREE_OPERAND (ref, 0));
64
65 if (TREE_TYPE (ref)
66 && TREE_CODE (TREE_TYPE (ref)) == REFERENCE_TYPE)
67 {
68 /* unnamed rvalue references are rvalues */
69 if (TYPE_REF_IS_RVALUE (TREE_TYPE (ref))
70 && TREE_CODE (ref) != PARM_DECL
71 && !VAR_P (ref)
72 && TREE_CODE (ref) != COMPONENT_REF
73 /* Functions are always lvalues. */
74 && TREE_CODE (TREE_TYPE (TREE_TYPE (ref))) != FUNCTION_TYPE)
75 return clk_rvalueref;
76
77 /* lvalue references and named rvalue references are lvalues. */
78 return clk_ordinary;
79 }
80
81 if (ref == current_class_ptr)
82 return clk_none;
83
84 switch (TREE_CODE (ref))
85 {
86 case SAVE_EXPR:
87 return clk_none;
88 /* preincrements and predecrements are valid lvals, provided
89 what they refer to are valid lvals. */
90 case PREINCREMENT_EXPR:
91 case PREDECREMENT_EXPR:
92 case TRY_CATCH_EXPR:
93 case WITH_CLEANUP_EXPR:
94 case REALPART_EXPR:
95 case IMAGPART_EXPR:
96 return lvalue_kind (TREE_OPERAND (ref, 0));
97
98 case MEMBER_REF:
99 case DOTSTAR_EXPR:
100 if (TREE_CODE (ref) == MEMBER_REF)
101 op1_lvalue_kind = clk_ordinary;
102 else
103 op1_lvalue_kind = lvalue_kind (TREE_OPERAND (ref, 0));
104 if (TYPE_PTRMEMFUNC_P (TREE_TYPE (TREE_OPERAND (ref, 1))))
105 op1_lvalue_kind = clk_none;
106 return op1_lvalue_kind;
107
108 case COMPONENT_REF:
109 op1_lvalue_kind = lvalue_kind (TREE_OPERAND (ref, 0));
110 /* Look at the member designator. */
111 if (!op1_lvalue_kind)
112 ;
113 else if (is_overloaded_fn (TREE_OPERAND (ref, 1)))
114 /* The "field" can be a FUNCTION_DECL or an OVERLOAD in some
115 situations. If we're seeing a COMPONENT_REF, it's a non-static
116 member, so it isn't an lvalue. */
117 op1_lvalue_kind = clk_none;
118 else if (TREE_CODE (TREE_OPERAND (ref, 1)) != FIELD_DECL)
119 /* This can be IDENTIFIER_NODE in a template. */;
120 else if (DECL_C_BIT_FIELD (TREE_OPERAND (ref, 1)))
121 {
122 /* Clear the ordinary bit. If this object was a class
123 rvalue we want to preserve that information. */
124 op1_lvalue_kind &= ~clk_ordinary;
125 /* The lvalue is for a bitfield. */
126 op1_lvalue_kind |= clk_bitfield;
127 }
128 else if (DECL_PACKED (TREE_OPERAND (ref, 1)))
129 op1_lvalue_kind |= clk_packed;
130
131 return op1_lvalue_kind;
132
133 case STRING_CST:
134 case COMPOUND_LITERAL_EXPR:
135 return clk_ordinary;
136
137 case CONST_DECL:
138 /* CONST_DECL without TREE_STATIC are enumeration values and
139 thus not lvalues. With TREE_STATIC they are used by ObjC++
140 in objc_build_string_object and need to be considered as
141 lvalues. */
142 if (! TREE_STATIC (ref))
143 return clk_none;
144 case VAR_DECL:
145 if (TREE_READONLY (ref) && ! TREE_STATIC (ref)
146 && DECL_LANG_SPECIFIC (ref)
147 && DECL_IN_AGGR_P (ref))
148 return clk_none;
149 case INDIRECT_REF:
150 case ARROW_EXPR:
151 case ARRAY_REF:
152 case ARRAY_NOTATION_REF:
153 case PARM_DECL:
154 case RESULT_DECL:
155 case PLACEHOLDER_EXPR:
156 return clk_ordinary;
157
158 /* A scope ref in a template, left as SCOPE_REF to support later
159 access checking. */
160 case SCOPE_REF:
161 gcc_assert (!type_dependent_expression_p (CONST_CAST_TREE (ref)));
162 {
163 tree op = TREE_OPERAND (ref, 1);
164 if (TREE_CODE (op) == FIELD_DECL)
165 return (DECL_C_BIT_FIELD (op) ? clk_bitfield : clk_ordinary);
166 else
167 return lvalue_kind (op);
168 }
169
170 case MAX_EXPR:
171 case MIN_EXPR:
172 /* Disallow <? and >? as lvalues if either argument side-effects. */
173 if (TREE_SIDE_EFFECTS (TREE_OPERAND (ref, 0))
174 || TREE_SIDE_EFFECTS (TREE_OPERAND (ref, 1)))
175 return clk_none;
176 op1_lvalue_kind = lvalue_kind (TREE_OPERAND (ref, 0));
177 op2_lvalue_kind = lvalue_kind (TREE_OPERAND (ref, 1));
178 break;
179
180 case COND_EXPR:
181 op1_lvalue_kind = lvalue_kind (TREE_OPERAND (ref, 1)
182 ? TREE_OPERAND (ref, 1)
183 : TREE_OPERAND (ref, 0));
184 op2_lvalue_kind = lvalue_kind (TREE_OPERAND (ref, 2));
185 break;
186
187 case MODOP_EXPR:
188 /* We expect to see unlowered MODOP_EXPRs only during
189 template processing. */
190 gcc_assert (processing_template_decl);
191 return clk_ordinary;
192
193 case MODIFY_EXPR:
194 case TYPEID_EXPR:
195 return clk_ordinary;
196
197 case COMPOUND_EXPR:
198 return lvalue_kind (TREE_OPERAND (ref, 1));
199
200 case TARGET_EXPR:
201 return clk_class;
202
203 case VA_ARG_EXPR:
204 return (CLASS_TYPE_P (TREE_TYPE (ref)) ? clk_class : clk_none);
205
206 case CALL_EXPR:
207 /* We can see calls outside of TARGET_EXPR in templates. */
208 if (CLASS_TYPE_P (TREE_TYPE (ref)))
209 return clk_class;
210 return clk_none;
211
212 case FUNCTION_DECL:
213 /* All functions (except non-static-member functions) are
214 lvalues. */
215 return (DECL_NONSTATIC_MEMBER_FUNCTION_P (ref)
216 ? clk_none : clk_ordinary);
217
218 case BASELINK:
219 /* We now represent a reference to a single static member function
220 with a BASELINK. */
221 /* This CONST_CAST is okay because BASELINK_FUNCTIONS returns
222 its argument unmodified and we assign it to a const_tree. */
223 return lvalue_kind (BASELINK_FUNCTIONS (CONST_CAST_TREE (ref)));
224
225 case NON_DEPENDENT_EXPR:
226 return lvalue_kind (TREE_OPERAND (ref, 0));
227
228 default:
229 if (!TREE_TYPE (ref))
230 return clk_none;
231 if (CLASS_TYPE_P (TREE_TYPE (ref)))
232 return clk_class;
233 break;
234 }
235
236 /* If one operand is not an lvalue at all, then this expression is
237 not an lvalue. */
238 if (!op1_lvalue_kind || !op2_lvalue_kind)
239 return clk_none;
240
241 /* Otherwise, it's an lvalue, and it has all the odd properties
242 contributed by either operand. */
243 op1_lvalue_kind = op1_lvalue_kind | op2_lvalue_kind;
244 /* It's not an ordinary lvalue if it involves any other kind. */
245 if ((op1_lvalue_kind & ~clk_ordinary) != clk_none)
246 op1_lvalue_kind &= ~clk_ordinary;
247 /* It can't be both a pseudo-lvalue and a non-addressable lvalue.
248 A COND_EXPR of those should be wrapped in a TARGET_EXPR. */
249 if ((op1_lvalue_kind & (clk_rvalueref|clk_class))
250 && (op1_lvalue_kind & (clk_bitfield|clk_packed)))
251 op1_lvalue_kind = clk_none;
252 return op1_lvalue_kind;
253 }
254
255 /* Returns the kind of lvalue that REF is, in the sense of
256 [basic.lval]. This function should really be named lvalue_p; it
257 computes the C++ definition of lvalue. */
258
259 cp_lvalue_kind
260 real_lvalue_p (const_tree ref)
261 {
262 cp_lvalue_kind kind = lvalue_kind (ref);
263 if (kind & (clk_rvalueref|clk_class))
264 return clk_none;
265 else
266 return kind;
267 }
268
269 /* This differs from real_lvalue_p in that class rvalues are considered
270 lvalues. */
271
272 bool
273 lvalue_p (const_tree ref)
274 {
275 return (lvalue_kind (ref) != clk_none);
276 }
277
278 /* This differs from real_lvalue_p in that rvalues formed by dereferencing
279 rvalue references are considered rvalues. */
280
281 bool
282 lvalue_or_rvalue_with_address_p (const_tree ref)
283 {
284 cp_lvalue_kind kind = lvalue_kind (ref);
285 if (kind & clk_class)
286 return false;
287 else
288 return (kind != clk_none);
289 }
290
291 /* Returns true if REF is an xvalue, false otherwise. */
292
293 bool
294 xvalue_p (const_tree ref)
295 {
296 return (lvalue_kind (ref) == clk_rvalueref);
297 }
298
299 /* C++-specific version of stabilize_reference. */
300
301 tree
302 cp_stabilize_reference (tree ref)
303 {
304 switch (TREE_CODE (ref))
305 {
306 /* We need to treat specially anything stabilize_reference doesn't
307 handle specifically. */
308 case VAR_DECL:
309 case PARM_DECL:
310 case RESULT_DECL:
311 CASE_CONVERT:
312 case FLOAT_EXPR:
313 case FIX_TRUNC_EXPR:
314 case INDIRECT_REF:
315 case COMPONENT_REF:
316 case BIT_FIELD_REF:
317 case ARRAY_REF:
318 case ARRAY_RANGE_REF:
319 case ERROR_MARK:
320 break;
321 default:
322 cp_lvalue_kind kind = lvalue_kind (ref);
323 if ((kind & ~clk_class) != clk_none)
324 {
325 tree type = unlowered_expr_type (ref);
326 bool rval = !!(kind & clk_rvalueref);
327 type = cp_build_reference_type (type, rval);
328 /* This inhibits warnings in, eg, cxx_mark_addressable
329 (c++/60955). */
330 warning_sentinel s (extra_warnings);
331 ref = build_static_cast (type, ref, tf_error);
332 }
333 }
334
335 return stabilize_reference (ref);
336 }
337
338 /* Test whether DECL is a builtin that may appear in a
339 constant-expression. */
340
341 bool
342 builtin_valid_in_constant_expr_p (const_tree decl)
343 {
344 if (!(TREE_CODE (decl) == FUNCTION_DECL && DECL_BUILT_IN (decl)))
345 /* Not a built-in. */
346 return false;
347 switch (DECL_FUNCTION_CODE (decl))
348 {
349 /* These always have constant results like the corresponding
350 macros/symbol. */
351 case BUILT_IN_FILE:
352 case BUILT_IN_FUNCTION:
353 case BUILT_IN_LINE:
354
355 /* These have constant results even if their operands are
356 non-constant. */
357 case BUILT_IN_CONSTANT_P:
358 case BUILT_IN_ATOMIC_ALWAYS_LOCK_FREE:
359 return true;
360 default:
361 return false;
362 }
363 }
364
365 /* Build a TARGET_EXPR, initializing the DECL with the VALUE. */
366
367 static tree
368 build_target_expr (tree decl, tree value, tsubst_flags_t complain)
369 {
370 tree t;
371 tree type = TREE_TYPE (decl);
372
373 gcc_checking_assert (VOID_TYPE_P (TREE_TYPE (value))
374 || TREE_TYPE (decl) == TREE_TYPE (value)
375 /* On ARM ctors return 'this'. */
376 || (TYPE_PTR_P (TREE_TYPE (value))
377 && TREE_CODE (value) == CALL_EXPR)
378 || useless_type_conversion_p (TREE_TYPE (decl),
379 TREE_TYPE (value)));
380
381 t = cxx_maybe_build_cleanup (decl, complain);
382 if (t == error_mark_node)
383 return error_mark_node;
384 t = build4 (TARGET_EXPR, type, decl, value, t, NULL_TREE);
385 if (EXPR_HAS_LOCATION (value))
386 SET_EXPR_LOCATION (t, EXPR_LOCATION (value));
387 /* We always set TREE_SIDE_EFFECTS so that expand_expr does not
388 ignore the TARGET_EXPR. If there really turn out to be no
389 side-effects, then the optimizer should be able to get rid of
390 whatever code is generated anyhow. */
391 TREE_SIDE_EFFECTS (t) = 1;
392
393 return t;
394 }
395
396 /* Return an undeclared local temporary of type TYPE for use in building a
397 TARGET_EXPR. */
398
399 static tree
400 build_local_temp (tree type)
401 {
402 tree slot = build_decl (input_location,
403 VAR_DECL, NULL_TREE, type);
404 DECL_ARTIFICIAL (slot) = 1;
405 DECL_IGNORED_P (slot) = 1;
406 DECL_CONTEXT (slot) = current_function_decl;
407 layout_decl (slot, 0);
408 return slot;
409 }
410
411 /* Set various status flags when building an AGGR_INIT_EXPR object T. */
412
413 static void
414 process_aggr_init_operands (tree t)
415 {
416 bool side_effects;
417
418 side_effects = TREE_SIDE_EFFECTS (t);
419 if (!side_effects)
420 {
421 int i, n;
422 n = TREE_OPERAND_LENGTH (t);
423 for (i = 1; i < n; i++)
424 {
425 tree op = TREE_OPERAND (t, i);
426 if (op && TREE_SIDE_EFFECTS (op))
427 {
428 side_effects = 1;
429 break;
430 }
431 }
432 }
433 TREE_SIDE_EFFECTS (t) = side_effects;
434 }
435
436 /* Build an AGGR_INIT_EXPR of class tcc_vl_exp with the indicated RETURN_TYPE,
437 FN, and SLOT. NARGS is the number of call arguments which are specified
438 as a tree array ARGS. */
439
440 static tree
441 build_aggr_init_array (tree return_type, tree fn, tree slot, int nargs,
442 tree *args)
443 {
444 tree t;
445 int i;
446
447 t = build_vl_exp (AGGR_INIT_EXPR, nargs + 3);
448 TREE_TYPE (t) = return_type;
449 AGGR_INIT_EXPR_FN (t) = fn;
450 AGGR_INIT_EXPR_SLOT (t) = slot;
451 for (i = 0; i < nargs; i++)
452 AGGR_INIT_EXPR_ARG (t, i) = args[i];
453 process_aggr_init_operands (t);
454 return t;
455 }
456
457 /* INIT is a CALL_EXPR or AGGR_INIT_EXPR which needs info about its
458 target. TYPE is the type to be initialized.
459
460 Build an AGGR_INIT_EXPR to represent the initialization. This function
461 differs from build_cplus_new in that an AGGR_INIT_EXPR can only be used
462 to initialize another object, whereas a TARGET_EXPR can either
463 initialize another object or create its own temporary object, and as a
464 result building up a TARGET_EXPR requires that the type's destructor be
465 callable. */
466
467 tree
468 build_aggr_init_expr (tree type, tree init)
469 {
470 tree fn;
471 tree slot;
472 tree rval;
473 int is_ctor;
474
475 /* Don't build AGGR_INIT_EXPR in a template. */
476 if (processing_template_decl)
477 return init;
478
479 fn = cp_get_callee (init);
480 if (fn == NULL_TREE)
481 return convert (type, init);
482
483 is_ctor = (TREE_CODE (fn) == ADDR_EXPR
484 && TREE_CODE (TREE_OPERAND (fn, 0)) == FUNCTION_DECL
485 && DECL_CONSTRUCTOR_P (TREE_OPERAND (fn, 0)));
486
487 /* We split the CALL_EXPR into its function and its arguments here.
488 Then, in expand_expr, we put them back together. The reason for
489 this is that this expression might be a default argument
490 expression. In that case, we need a new temporary every time the
491 expression is used. That's what break_out_target_exprs does; it
492 replaces every AGGR_INIT_EXPR with a copy that uses a fresh
493 temporary slot. Then, expand_expr builds up a call-expression
494 using the new slot. */
495
496 /* If we don't need to use a constructor to create an object of this
497 type, don't mess with AGGR_INIT_EXPR. */
498 if (is_ctor || TREE_ADDRESSABLE (type))
499 {
500 slot = build_local_temp (type);
501
502 if (TREE_CODE (init) == CALL_EXPR)
503 {
504 rval = build_aggr_init_array (void_type_node, fn, slot,
505 call_expr_nargs (init),
506 CALL_EXPR_ARGP (init));
507 AGGR_INIT_FROM_THUNK_P (rval)
508 = CALL_FROM_THUNK_P (init);
509 }
510 else
511 {
512 rval = build_aggr_init_array (void_type_node, fn, slot,
513 aggr_init_expr_nargs (init),
514 AGGR_INIT_EXPR_ARGP (init));
515 AGGR_INIT_FROM_THUNK_P (rval)
516 = AGGR_INIT_FROM_THUNK_P (init);
517 }
518 TREE_SIDE_EFFECTS (rval) = 1;
519 AGGR_INIT_VIA_CTOR_P (rval) = is_ctor;
520 TREE_NOTHROW (rval) = TREE_NOTHROW (init);
521 CALL_EXPR_LIST_INIT_P (rval) = CALL_EXPR_LIST_INIT_P (init);
522 }
523 else
524 rval = init;
525
526 return rval;
527 }
528
529 /* INIT is a CALL_EXPR or AGGR_INIT_EXPR which needs info about its
530 target. TYPE is the type that this initialization should appear to
531 have.
532
533 Build an encapsulation of the initialization to perform
534 and return it so that it can be processed by language-independent
535 and language-specific expression expanders. */
536
537 tree
538 build_cplus_new (tree type, tree init, tsubst_flags_t complain)
539 {
540 tree rval = build_aggr_init_expr (type, init);
541 tree slot;
542
543 if (!complete_type_or_maybe_complain (type, init, complain))
544 return error_mark_node;
545
546 /* Make sure that we're not trying to create an instance of an
547 abstract class. */
548 if (abstract_virtuals_error_sfinae (NULL_TREE, type, complain))
549 return error_mark_node;
550
551 if (TREE_CODE (rval) == AGGR_INIT_EXPR)
552 slot = AGGR_INIT_EXPR_SLOT (rval);
553 else if (TREE_CODE (rval) == CALL_EXPR
554 || TREE_CODE (rval) == CONSTRUCTOR)
555 slot = build_local_temp (type);
556 else
557 return rval;
558
559 rval = build_target_expr (slot, rval, complain);
560
561 if (rval != error_mark_node)
562 TARGET_EXPR_IMPLICIT_P (rval) = 1;
563
564 return rval;
565 }
566
567 /* Subroutine of build_vec_init_expr: Build up a single element
568 intialization as a proxy for the full array initialization to get things
569 marked as used and any appropriate diagnostics.
570
571 Since we're deferring building the actual constructor calls until
572 gimplification time, we need to build one now and throw it away so
573 that the relevant constructor gets mark_used before cgraph decides
574 what functions are needed. Here we assume that init is either
575 NULL_TREE, void_type_node (indicating value-initialization), or
576 another array to copy. */
577
578 static tree
579 build_vec_init_elt (tree type, tree init, tsubst_flags_t complain)
580 {
581 tree inner_type = strip_array_types (type);
582 vec<tree, va_gc> *argvec;
583
584 if (integer_zerop (array_type_nelts_total (type))
585 || !CLASS_TYPE_P (inner_type))
586 /* No interesting initialization to do. */
587 return integer_zero_node;
588 else if (init == void_type_node)
589 return build_value_init (inner_type, complain);
590
591 gcc_assert (init == NULL_TREE
592 || (same_type_ignoring_top_level_qualifiers_p
593 (type, TREE_TYPE (init))));
594
595 argvec = make_tree_vector ();
596 if (init)
597 {
598 tree init_type = strip_array_types (TREE_TYPE (init));
599 tree dummy = build_dummy_object (init_type);
600 if (!real_lvalue_p (init))
601 dummy = move (dummy);
602 argvec->quick_push (dummy);
603 }
604 init = build_special_member_call (NULL_TREE, complete_ctor_identifier,
605 &argvec, inner_type, LOOKUP_NORMAL,
606 complain);
607 release_tree_vector (argvec);
608
609 /* For a trivial constructor, build_over_call creates a TARGET_EXPR. But
610 we don't want one here because we aren't creating a temporary. */
611 if (TREE_CODE (init) == TARGET_EXPR)
612 init = TARGET_EXPR_INITIAL (init);
613
614 return init;
615 }
616
617 /* Return a TARGET_EXPR which expresses the initialization of an array to
618 be named later, either default-initialization or copy-initialization
619 from another array of the same type. */
620
621 tree
622 build_vec_init_expr (tree type, tree init, tsubst_flags_t complain)
623 {
624 tree slot;
625 bool value_init = false;
626 tree elt_init = build_vec_init_elt (type, init, complain);
627
628 if (init == void_type_node)
629 {
630 value_init = true;
631 init = NULL_TREE;
632 }
633
634 slot = build_local_temp (type);
635 init = build2 (VEC_INIT_EXPR, type, slot, init);
636 TREE_SIDE_EFFECTS (init) = true;
637 SET_EXPR_LOCATION (init, input_location);
638
639 if (cxx_dialect >= cxx11
640 && potential_constant_expression (elt_init))
641 VEC_INIT_EXPR_IS_CONSTEXPR (init) = true;
642 VEC_INIT_EXPR_VALUE_INIT (init) = value_init;
643
644 return init;
645 }
646
647 /* Give a helpful diagnostic for a non-constexpr VEC_INIT_EXPR in a context
648 that requires a constant expression. */
649
650 void
651 diagnose_non_constexpr_vec_init (tree expr)
652 {
653 tree type = TREE_TYPE (VEC_INIT_EXPR_SLOT (expr));
654 tree init, elt_init;
655 if (VEC_INIT_EXPR_VALUE_INIT (expr))
656 init = void_type_node;
657 else
658 init = VEC_INIT_EXPR_INIT (expr);
659
660 elt_init = build_vec_init_elt (type, init, tf_warning_or_error);
661 require_potential_constant_expression (elt_init);
662 }
663
664 tree
665 build_array_copy (tree init)
666 {
667 return build_vec_init_expr (TREE_TYPE (init), init, tf_warning_or_error);
668 }
669
670 /* Build a TARGET_EXPR using INIT to initialize a new temporary of the
671 indicated TYPE. */
672
673 tree
674 build_target_expr_with_type (tree init, tree type, tsubst_flags_t complain)
675 {
676 gcc_assert (!VOID_TYPE_P (type));
677
678 if (TREE_CODE (init) == TARGET_EXPR
679 || init == error_mark_node)
680 return init;
681 else if (CLASS_TYPE_P (type) && type_has_nontrivial_copy_init (type)
682 && !VOID_TYPE_P (TREE_TYPE (init))
683 && TREE_CODE (init) != COND_EXPR
684 && TREE_CODE (init) != CONSTRUCTOR
685 && TREE_CODE (init) != VA_ARG_EXPR)
686 /* We need to build up a copy constructor call. A void initializer
687 means we're being called from bot_manip. COND_EXPR is a special
688 case because we already have copies on the arms and we don't want
689 another one here. A CONSTRUCTOR is aggregate initialization, which
690 is handled separately. A VA_ARG_EXPR is magic creation of an
691 aggregate; there's no additional work to be done. */
692 return force_rvalue (init, complain);
693
694 return force_target_expr (type, init, complain);
695 }
696
697 /* Like the above function, but without the checking. This function should
698 only be used by code which is deliberately trying to subvert the type
699 system, such as call_builtin_trap. Or build_over_call, to avoid
700 infinite recursion. */
701
702 tree
703 force_target_expr (tree type, tree init, tsubst_flags_t complain)
704 {
705 tree slot;
706
707 gcc_assert (!VOID_TYPE_P (type));
708
709 slot = build_local_temp (type);
710 return build_target_expr (slot, init, complain);
711 }
712
713 /* Like build_target_expr_with_type, but use the type of INIT. */
714
715 tree
716 get_target_expr_sfinae (tree init, tsubst_flags_t complain)
717 {
718 if (TREE_CODE (init) == AGGR_INIT_EXPR)
719 return build_target_expr (AGGR_INIT_EXPR_SLOT (init), init, complain);
720 else if (TREE_CODE (init) == VEC_INIT_EXPR)
721 return build_target_expr (VEC_INIT_EXPR_SLOT (init), init, complain);
722 else
723 return build_target_expr_with_type (init, TREE_TYPE (init), complain);
724 }
725
726 tree
727 get_target_expr (tree init)
728 {
729 return get_target_expr_sfinae (init, tf_warning_or_error);
730 }
731
732 /* If EXPR is a bitfield reference, convert it to the declared type of
733 the bitfield, and return the resulting expression. Otherwise,
734 return EXPR itself. */
735
736 tree
737 convert_bitfield_to_declared_type (tree expr)
738 {
739 tree bitfield_type;
740
741 bitfield_type = is_bitfield_expr_with_lowered_type (expr);
742 if (bitfield_type)
743 expr = convert_to_integer_nofold (TYPE_MAIN_VARIANT (bitfield_type),
744 expr);
745 return expr;
746 }
747
748 /* EXPR is being used in an rvalue context. Return a version of EXPR
749 that is marked as an rvalue. */
750
751 tree
752 rvalue (tree expr)
753 {
754 tree type;
755
756 if (error_operand_p (expr))
757 return expr;
758
759 expr = mark_rvalue_use (expr);
760
761 /* [basic.lval]
762
763 Non-class rvalues always have cv-unqualified types. */
764 type = TREE_TYPE (expr);
765 if (!CLASS_TYPE_P (type) && cv_qualified_p (type))
766 type = cv_unqualified (type);
767
768 /* We need to do this for rvalue refs as well to get the right answer
769 from decltype; see c++/36628. */
770 if (!processing_template_decl && lvalue_or_rvalue_with_address_p (expr))
771 expr = build1 (NON_LVALUE_EXPR, type, expr);
772 else if (type != TREE_TYPE (expr))
773 expr = build_nop (type, expr);
774
775 return expr;
776 }
777
778 \f
779 struct cplus_array_info
780 {
781 tree type;
782 tree domain;
783 };
784
785 struct cplus_array_hasher : ggc_ptr_hash<tree_node>
786 {
787 typedef cplus_array_info *compare_type;
788
789 static hashval_t hash (tree t);
790 static bool equal (tree, cplus_array_info *);
791 };
792
793 /* Hash an ARRAY_TYPE. K is really of type `tree'. */
794
795 hashval_t
796 cplus_array_hasher::hash (tree t)
797 {
798 hashval_t hash;
799
800 hash = TYPE_UID (TREE_TYPE (t));
801 if (TYPE_DOMAIN (t))
802 hash ^= TYPE_UID (TYPE_DOMAIN (t));
803 return hash;
804 }
805
806 /* Compare two ARRAY_TYPEs. K1 is really of type `tree', K2 is really
807 of type `cplus_array_info*'. */
808
809 bool
810 cplus_array_hasher::equal (tree t1, cplus_array_info *t2)
811 {
812 return (TREE_TYPE (t1) == t2->type && TYPE_DOMAIN (t1) == t2->domain);
813 }
814
815 /* Hash table containing dependent array types, which are unsuitable for
816 the language-independent type hash table. */
817 static GTY (()) hash_table<cplus_array_hasher> *cplus_array_htab;
818
819 /* Build an ARRAY_TYPE without laying it out. */
820
821 static tree
822 build_min_array_type (tree elt_type, tree index_type)
823 {
824 tree t = cxx_make_type (ARRAY_TYPE);
825 TREE_TYPE (t) = elt_type;
826 TYPE_DOMAIN (t) = index_type;
827 return t;
828 }
829
830 /* Set TYPE_CANONICAL like build_array_type_1, but using
831 build_cplus_array_type. */
832
833 static void
834 set_array_type_canon (tree t, tree elt_type, tree index_type)
835 {
836 /* Set the canonical type for this new node. */
837 if (TYPE_STRUCTURAL_EQUALITY_P (elt_type)
838 || (index_type && TYPE_STRUCTURAL_EQUALITY_P (index_type)))
839 SET_TYPE_STRUCTURAL_EQUALITY (t);
840 else if (TYPE_CANONICAL (elt_type) != elt_type
841 || (index_type && TYPE_CANONICAL (index_type) != index_type))
842 TYPE_CANONICAL (t)
843 = build_cplus_array_type (TYPE_CANONICAL (elt_type),
844 index_type
845 ? TYPE_CANONICAL (index_type) : index_type);
846 else
847 TYPE_CANONICAL (t) = t;
848 }
849
850 /* Like build_array_type, but handle special C++ semantics: an array of a
851 variant element type is a variant of the array of the main variant of
852 the element type. */
853
854 tree
855 build_cplus_array_type (tree elt_type, tree index_type)
856 {
857 tree t;
858
859 if (elt_type == error_mark_node || index_type == error_mark_node)
860 return error_mark_node;
861
862 bool dependent = (uses_template_parms (elt_type)
863 || (index_type && uses_template_parms (index_type)));
864
865 if (elt_type != TYPE_MAIN_VARIANT (elt_type))
866 /* Start with an array of the TYPE_MAIN_VARIANT. */
867 t = build_cplus_array_type (TYPE_MAIN_VARIANT (elt_type),
868 index_type);
869 else if (dependent)
870 {
871 /* Since type_hash_canon calls layout_type, we need to use our own
872 hash table. */
873 cplus_array_info cai;
874 hashval_t hash;
875
876 if (cplus_array_htab == NULL)
877 cplus_array_htab = hash_table<cplus_array_hasher>::create_ggc (61);
878
879 hash = TYPE_UID (elt_type);
880 if (index_type)
881 hash ^= TYPE_UID (index_type);
882 cai.type = elt_type;
883 cai.domain = index_type;
884
885 tree *e = cplus_array_htab->find_slot_with_hash (&cai, hash, INSERT);
886 if (*e)
887 /* We have found the type: we're done. */
888 return (tree) *e;
889 else
890 {
891 /* Build a new array type. */
892 t = build_min_array_type (elt_type, index_type);
893
894 /* Store it in the hash table. */
895 *e = t;
896
897 /* Set the canonical type for this new node. */
898 set_array_type_canon (t, elt_type, index_type);
899 }
900 }
901 else
902 {
903 t = build_array_type (elt_type, index_type);
904 }
905
906 /* Now check whether we already have this array variant. */
907 if (elt_type != TYPE_MAIN_VARIANT (elt_type))
908 {
909 tree m = t;
910 for (t = m; t; t = TYPE_NEXT_VARIANT (t))
911 if (TREE_TYPE (t) == elt_type
912 && TYPE_NAME (t) == NULL_TREE
913 && TYPE_ATTRIBUTES (t) == NULL_TREE)
914 break;
915 if (!t)
916 {
917 t = build_min_array_type (elt_type, index_type);
918 set_array_type_canon (t, elt_type, index_type);
919 if (!dependent)
920 {
921 layout_type (t);
922 /* Make sure sizes are shared with the main variant.
923 layout_type can't be called after setting TYPE_NEXT_VARIANT,
924 as it will overwrite alignment etc. of all variants. */
925 TYPE_SIZE (t) = TYPE_SIZE (m);
926 TYPE_SIZE_UNIT (t) = TYPE_SIZE_UNIT (m);
927 }
928
929 TYPE_MAIN_VARIANT (t) = m;
930 TYPE_NEXT_VARIANT (t) = TYPE_NEXT_VARIANT (m);
931 TYPE_NEXT_VARIANT (m) = t;
932 }
933 }
934
935 /* Avoid spurious warnings with VLAs (c++/54583). */
936 if (TYPE_SIZE (t) && EXPR_P (TYPE_SIZE (t)))
937 TREE_NO_WARNING (TYPE_SIZE (t)) = 1;
938
939 /* Push these needs up to the ARRAY_TYPE so that initialization takes
940 place more easily. */
941 bool needs_ctor = (TYPE_NEEDS_CONSTRUCTING (t)
942 = TYPE_NEEDS_CONSTRUCTING (elt_type));
943 bool needs_dtor = (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (t)
944 = TYPE_HAS_NONTRIVIAL_DESTRUCTOR (elt_type));
945
946 if (!dependent && t == TYPE_MAIN_VARIANT (t)
947 && !COMPLETE_TYPE_P (t) && COMPLETE_TYPE_P (elt_type))
948 {
949 /* The element type has been completed since the last time we saw
950 this array type; update the layout and 'tor flags for any variants
951 that need it. */
952 layout_type (t);
953 for (tree v = TYPE_NEXT_VARIANT (t); v; v = TYPE_NEXT_VARIANT (v))
954 {
955 TYPE_NEEDS_CONSTRUCTING (v) = needs_ctor;
956 TYPE_HAS_NONTRIVIAL_DESTRUCTOR (v) = needs_dtor;
957 }
958 }
959
960 return t;
961 }
962
963 /* Return an ARRAY_TYPE with element type ELT and length N. */
964
965 tree
966 build_array_of_n_type (tree elt, int n)
967 {
968 return build_cplus_array_type (elt, build_index_type (size_int (n - 1)));
969 }
970
971 /* True iff T is an N3639 array of runtime bound (VLA). These were
972 approved for C++14 but then removed. */
973
974 bool
975 array_of_runtime_bound_p (tree t)
976 {
977 if (!t || TREE_CODE (t) != ARRAY_TYPE)
978 return false;
979 tree dom = TYPE_DOMAIN (t);
980 if (!dom)
981 return false;
982 tree max = TYPE_MAX_VALUE (dom);
983 return (!potential_rvalue_constant_expression (max)
984 || (!value_dependent_expression_p (max) && !TREE_CONSTANT (max)));
985 }
986
987 /* Return a reference type node referring to TO_TYPE. If RVAL is
988 true, return an rvalue reference type, otherwise return an lvalue
989 reference type. If a type node exists, reuse it, otherwise create
990 a new one. */
991 tree
992 cp_build_reference_type (tree to_type, bool rval)
993 {
994 tree lvalue_ref, t;
995 lvalue_ref = build_reference_type (to_type);
996 if (!rval)
997 return lvalue_ref;
998
999 /* This code to create rvalue reference types is based on and tied
1000 to the code creating lvalue reference types in the middle-end
1001 functions build_reference_type_for_mode and build_reference_type.
1002
1003 It works by putting the rvalue reference type nodes after the
1004 lvalue reference nodes in the TYPE_NEXT_REF_TO linked list, so
1005 they will effectively be ignored by the middle end. */
1006
1007 for (t = lvalue_ref; (t = TYPE_NEXT_REF_TO (t)); )
1008 if (TYPE_REF_IS_RVALUE (t))
1009 return t;
1010
1011 t = build_distinct_type_copy (lvalue_ref);
1012
1013 TYPE_REF_IS_RVALUE (t) = true;
1014 TYPE_NEXT_REF_TO (t) = TYPE_NEXT_REF_TO (lvalue_ref);
1015 TYPE_NEXT_REF_TO (lvalue_ref) = t;
1016
1017 if (TYPE_STRUCTURAL_EQUALITY_P (to_type))
1018 SET_TYPE_STRUCTURAL_EQUALITY (t);
1019 else if (TYPE_CANONICAL (to_type) != to_type)
1020 TYPE_CANONICAL (t)
1021 = cp_build_reference_type (TYPE_CANONICAL (to_type), rval);
1022 else
1023 TYPE_CANONICAL (t) = t;
1024
1025 layout_type (t);
1026
1027 return t;
1028
1029 }
1030
1031 /* Returns EXPR cast to rvalue reference type, like std::move. */
1032
1033 tree
1034 move (tree expr)
1035 {
1036 tree type = TREE_TYPE (expr);
1037 gcc_assert (TREE_CODE (type) != REFERENCE_TYPE);
1038 type = cp_build_reference_type (type, /*rval*/true);
1039 return build_static_cast (type, expr, tf_warning_or_error);
1040 }
1041
1042 /* Used by the C++ front end to build qualified array types. However,
1043 the C version of this function does not properly maintain canonical
1044 types (which are not used in C). */
1045 tree
1046 c_build_qualified_type (tree type, int type_quals, tree /* orig_qual_type */,
1047 size_t /* orig_qual_indirect */)
1048 {
1049 return cp_build_qualified_type (type, type_quals);
1050 }
1051
1052 \f
1053 /* Make a variant of TYPE, qualified with the TYPE_QUALS. Handles
1054 arrays correctly. In particular, if TYPE is an array of T's, and
1055 TYPE_QUALS is non-empty, returns an array of qualified T's.
1056
1057 FLAGS determines how to deal with ill-formed qualifications. If
1058 tf_ignore_bad_quals is set, then bad qualifications are dropped
1059 (this is permitted if TYPE was introduced via a typedef or template
1060 type parameter). If bad qualifications are dropped and tf_warning
1061 is set, then a warning is issued for non-const qualifications. If
1062 tf_ignore_bad_quals is not set and tf_error is not set, we
1063 return error_mark_node. Otherwise, we issue an error, and ignore
1064 the qualifications.
1065
1066 Qualification of a reference type is valid when the reference came
1067 via a typedef or template type argument. [dcl.ref] No such
1068 dispensation is provided for qualifying a function type. [dcl.fct]
1069 DR 295 queries this and the proposed resolution brings it into line
1070 with qualifying a reference. We implement the DR. We also behave
1071 in a similar manner for restricting non-pointer types. */
1072
1073 tree
1074 cp_build_qualified_type_real (tree type,
1075 int type_quals,
1076 tsubst_flags_t complain)
1077 {
1078 tree result;
1079 int bad_quals = TYPE_UNQUALIFIED;
1080
1081 if (type == error_mark_node)
1082 return type;
1083
1084 if (type_quals == cp_type_quals (type))
1085 return type;
1086
1087 if (TREE_CODE (type) == ARRAY_TYPE)
1088 {
1089 /* In C++, the qualification really applies to the array element
1090 type. Obtain the appropriately qualified element type. */
1091 tree t;
1092 tree element_type
1093 = cp_build_qualified_type_real (TREE_TYPE (type),
1094 type_quals,
1095 complain);
1096
1097 if (element_type == error_mark_node)
1098 return error_mark_node;
1099
1100 /* See if we already have an identically qualified type. Tests
1101 should be equivalent to those in check_qualified_type. */
1102 for (t = TYPE_MAIN_VARIANT (type); t; t = TYPE_NEXT_VARIANT (t))
1103 if (TREE_TYPE (t) == element_type
1104 && TYPE_NAME (t) == TYPE_NAME (type)
1105 && TYPE_CONTEXT (t) == TYPE_CONTEXT (type)
1106 && attribute_list_equal (TYPE_ATTRIBUTES (t),
1107 TYPE_ATTRIBUTES (type)))
1108 break;
1109
1110 if (!t)
1111 {
1112 t = build_cplus_array_type (element_type, TYPE_DOMAIN (type));
1113
1114 /* Keep the typedef name. */
1115 if (TYPE_NAME (t) != TYPE_NAME (type))
1116 {
1117 t = build_variant_type_copy (t);
1118 TYPE_NAME (t) = TYPE_NAME (type);
1119 SET_TYPE_ALIGN (t, TYPE_ALIGN (type));
1120 TYPE_USER_ALIGN (t) = TYPE_USER_ALIGN (type);
1121 }
1122 }
1123
1124 /* Even if we already had this variant, we update
1125 TYPE_NEEDS_CONSTRUCTING and TYPE_HAS_NONTRIVIAL_DESTRUCTOR in case
1126 they changed since the variant was originally created.
1127
1128 This seems hokey; if there is some way to use a previous
1129 variant *without* coming through here,
1130 TYPE_NEEDS_CONSTRUCTING will never be updated. */
1131 TYPE_NEEDS_CONSTRUCTING (t)
1132 = TYPE_NEEDS_CONSTRUCTING (TYPE_MAIN_VARIANT (element_type));
1133 TYPE_HAS_NONTRIVIAL_DESTRUCTOR (t)
1134 = TYPE_HAS_NONTRIVIAL_DESTRUCTOR (TYPE_MAIN_VARIANT (element_type));
1135 return t;
1136 }
1137 else if (TREE_CODE (type) == TYPE_PACK_EXPANSION)
1138 {
1139 tree t = PACK_EXPANSION_PATTERN (type);
1140
1141 t = cp_build_qualified_type_real (t, type_quals, complain);
1142 return make_pack_expansion (t);
1143 }
1144
1145 /* A reference or method type shall not be cv-qualified.
1146 [dcl.ref], [dcl.fct]. This used to be an error, but as of DR 295
1147 (in CD1) we always ignore extra cv-quals on functions. */
1148 if (type_quals & (TYPE_QUAL_CONST | TYPE_QUAL_VOLATILE)
1149 && (TREE_CODE (type) == REFERENCE_TYPE
1150 || TREE_CODE (type) == FUNCTION_TYPE
1151 || TREE_CODE (type) == METHOD_TYPE))
1152 {
1153 if (TREE_CODE (type) == REFERENCE_TYPE)
1154 bad_quals |= type_quals & (TYPE_QUAL_CONST | TYPE_QUAL_VOLATILE);
1155 type_quals &= ~(TYPE_QUAL_CONST | TYPE_QUAL_VOLATILE);
1156 }
1157
1158 /* But preserve any function-cv-quals on a FUNCTION_TYPE. */
1159 if (TREE_CODE (type) == FUNCTION_TYPE)
1160 type_quals |= type_memfn_quals (type);
1161
1162 /* A restrict-qualified type must be a pointer (or reference)
1163 to object or incomplete type. */
1164 if ((type_quals & TYPE_QUAL_RESTRICT)
1165 && TREE_CODE (type) != TEMPLATE_TYPE_PARM
1166 && TREE_CODE (type) != TYPENAME_TYPE
1167 && !POINTER_TYPE_P (type))
1168 {
1169 bad_quals |= TYPE_QUAL_RESTRICT;
1170 type_quals &= ~TYPE_QUAL_RESTRICT;
1171 }
1172
1173 if (bad_quals == TYPE_UNQUALIFIED
1174 || (complain & tf_ignore_bad_quals))
1175 /*OK*/;
1176 else if (!(complain & tf_error))
1177 return error_mark_node;
1178 else
1179 {
1180 tree bad_type = build_qualified_type (ptr_type_node, bad_quals);
1181 error ("%qV qualifiers cannot be applied to %qT",
1182 bad_type, type);
1183 }
1184
1185 /* Retrieve (or create) the appropriately qualified variant. */
1186 result = build_qualified_type (type, type_quals);
1187
1188 /* Preserve exception specs and ref-qualifier since build_qualified_type
1189 doesn't know about them. */
1190 if (TREE_CODE (result) == FUNCTION_TYPE
1191 || TREE_CODE (result) == METHOD_TYPE)
1192 {
1193 result = build_exception_variant (result, TYPE_RAISES_EXCEPTIONS (type));
1194 result = build_ref_qualified_type (result, type_memfn_rqual (type));
1195 }
1196
1197 return result;
1198 }
1199
1200 /* Return TYPE with const and volatile removed. */
1201
1202 tree
1203 cv_unqualified (tree type)
1204 {
1205 int quals;
1206
1207 if (type == error_mark_node)
1208 return type;
1209
1210 quals = cp_type_quals (type);
1211 quals &= ~(TYPE_QUAL_CONST|TYPE_QUAL_VOLATILE);
1212 return cp_build_qualified_type (type, quals);
1213 }
1214
1215 /* Subroutine of strip_typedefs. We want to apply to RESULT the attributes
1216 from ATTRIBS that affect type identity, and no others. If any are not
1217 applied, set *remove_attributes to true. */
1218
1219 static tree
1220 apply_identity_attributes (tree result, tree attribs, bool *remove_attributes)
1221 {
1222 tree first_ident = NULL_TREE;
1223 tree new_attribs = NULL_TREE;
1224 tree *p = &new_attribs;
1225
1226 if (OVERLOAD_TYPE_P (result))
1227 {
1228 /* On classes and enums all attributes are ingrained. */
1229 gcc_assert (attribs == TYPE_ATTRIBUTES (result));
1230 return result;
1231 }
1232
1233 for (tree a = attribs; a; a = TREE_CHAIN (a))
1234 {
1235 const attribute_spec *as
1236 = lookup_attribute_spec (get_attribute_name (a));
1237 if (as && as->affects_type_identity)
1238 {
1239 if (!first_ident)
1240 first_ident = a;
1241 else if (first_ident == error_mark_node)
1242 {
1243 *p = tree_cons (TREE_PURPOSE (a), TREE_VALUE (a), NULL_TREE);
1244 p = &TREE_CHAIN (*p);
1245 }
1246 }
1247 else if (first_ident)
1248 {
1249 for (tree a2 = first_ident; a2; a2 = TREE_CHAIN (a2))
1250 {
1251 *p = tree_cons (TREE_PURPOSE (a2), TREE_VALUE (a2), NULL_TREE);
1252 p = &TREE_CHAIN (*p);
1253 }
1254 first_ident = error_mark_node;
1255 }
1256 }
1257 if (first_ident != error_mark_node)
1258 new_attribs = first_ident;
1259
1260 if (first_ident == attribs)
1261 /* All attributes affected type identity. */;
1262 else
1263 *remove_attributes = true;
1264
1265 return cp_build_type_attribute_variant (result, new_attribs);
1266 }
1267
1268 /* Builds a qualified variant of T that is not a typedef variant.
1269 E.g. consider the following declarations:
1270 typedef const int ConstInt;
1271 typedef ConstInt* PtrConstInt;
1272 If T is PtrConstInt, this function returns a type representing
1273 const int*.
1274 In other words, if T is a typedef, the function returns the underlying type.
1275 The cv-qualification and attributes of the type returned match the
1276 input type.
1277 They will always be compatible types.
1278 The returned type is built so that all of its subtypes
1279 recursively have their typedefs stripped as well.
1280
1281 This is different from just returning TYPE_CANONICAL (T)
1282 Because of several reasons:
1283 * If T is a type that needs structural equality
1284 its TYPE_CANONICAL (T) will be NULL.
1285 * TYPE_CANONICAL (T) desn't carry type attributes
1286 and loses template parameter names.
1287
1288 If REMOVE_ATTRIBUTES is non-null, also strip attributes that don't
1289 affect type identity, and set the referent to true if any were
1290 stripped. */
1291
1292 tree
1293 strip_typedefs (tree t, bool *remove_attributes)
1294 {
1295 tree result = NULL, type = NULL, t0 = NULL;
1296
1297 if (!t || t == error_mark_node)
1298 return t;
1299
1300 if (TREE_CODE (t) == TREE_LIST)
1301 {
1302 bool changed = false;
1303 vec<tree,va_gc> *vec = make_tree_vector ();
1304 tree r = t;
1305 for (; t; t = TREE_CHAIN (t))
1306 {
1307 gcc_assert (!TREE_PURPOSE (t));
1308 tree elt = strip_typedefs (TREE_VALUE (t), remove_attributes);
1309 if (elt != TREE_VALUE (t))
1310 changed = true;
1311 vec_safe_push (vec, elt);
1312 }
1313 if (changed)
1314 r = build_tree_list_vec (vec);
1315 release_tree_vector (vec);
1316 return r;
1317 }
1318
1319 gcc_assert (TYPE_P (t));
1320
1321 if (t == TYPE_CANONICAL (t))
1322 return t;
1323
1324 if (dependent_alias_template_spec_p (t))
1325 /* DR 1558: However, if the template-id is dependent, subsequent
1326 template argument substitution still applies to the template-id. */
1327 return t;
1328
1329 switch (TREE_CODE (t))
1330 {
1331 case POINTER_TYPE:
1332 type = strip_typedefs (TREE_TYPE (t), remove_attributes);
1333 result = build_pointer_type (type);
1334 break;
1335 case REFERENCE_TYPE:
1336 type = strip_typedefs (TREE_TYPE (t), remove_attributes);
1337 result = cp_build_reference_type (type, TYPE_REF_IS_RVALUE (t));
1338 break;
1339 case OFFSET_TYPE:
1340 t0 = strip_typedefs (TYPE_OFFSET_BASETYPE (t), remove_attributes);
1341 type = strip_typedefs (TREE_TYPE (t), remove_attributes);
1342 result = build_offset_type (t0, type);
1343 break;
1344 case RECORD_TYPE:
1345 if (TYPE_PTRMEMFUNC_P (t))
1346 {
1347 t0 = strip_typedefs (TYPE_PTRMEMFUNC_FN_TYPE (t), remove_attributes);
1348 result = build_ptrmemfunc_type (t0);
1349 }
1350 break;
1351 case ARRAY_TYPE:
1352 type = strip_typedefs (TREE_TYPE (t), remove_attributes);
1353 t0 = strip_typedefs (TYPE_DOMAIN (t), remove_attributes);
1354 result = build_cplus_array_type (type, t0);
1355 break;
1356 case FUNCTION_TYPE:
1357 case METHOD_TYPE:
1358 {
1359 tree arg_types = NULL, arg_node, arg_node2, arg_type;
1360 bool changed;
1361
1362 /* Because we stomp on TREE_PURPOSE of TYPE_ARG_TYPES in many places
1363 around the compiler (e.g. cp_parser_late_parsing_default_args), we
1364 can't expect that re-hashing a function type will find a previous
1365 equivalent type, so try to reuse the input type if nothing has
1366 changed. If the type is itself a variant, that will change. */
1367 bool is_variant = typedef_variant_p (t);
1368 if (remove_attributes
1369 && (TYPE_ATTRIBUTES (t) || TYPE_USER_ALIGN (t)))
1370 is_variant = true;
1371
1372 type = strip_typedefs (TREE_TYPE (t), remove_attributes);
1373 changed = type != TREE_TYPE (t) || is_variant;
1374
1375 for (arg_node = TYPE_ARG_TYPES (t);
1376 arg_node;
1377 arg_node = TREE_CHAIN (arg_node))
1378 {
1379 if (arg_node == void_list_node)
1380 break;
1381 arg_type = strip_typedefs (TREE_VALUE (arg_node),
1382 remove_attributes);
1383 gcc_assert (arg_type);
1384 if (arg_type == TREE_VALUE (arg_node) && !changed)
1385 continue;
1386
1387 if (!changed)
1388 {
1389 changed = true;
1390 for (arg_node2 = TYPE_ARG_TYPES (t);
1391 arg_node2 != arg_node;
1392 arg_node2 = TREE_CHAIN (arg_node2))
1393 arg_types
1394 = tree_cons (TREE_PURPOSE (arg_node2),
1395 TREE_VALUE (arg_node2), arg_types);
1396 }
1397
1398 arg_types
1399 = tree_cons (TREE_PURPOSE (arg_node), arg_type, arg_types);
1400 }
1401
1402 if (!changed)
1403 return t;
1404
1405 if (arg_types)
1406 arg_types = nreverse (arg_types);
1407
1408 /* A list of parameters not ending with an ellipsis
1409 must end with void_list_node. */
1410 if (arg_node)
1411 arg_types = chainon (arg_types, void_list_node);
1412
1413 if (TREE_CODE (t) == METHOD_TYPE)
1414 {
1415 tree class_type = TREE_TYPE (TREE_VALUE (arg_types));
1416 gcc_assert (class_type);
1417 result =
1418 build_method_type_directly (class_type, type,
1419 TREE_CHAIN (arg_types));
1420 result
1421 = build_ref_qualified_type (result, type_memfn_rqual (t));
1422 }
1423 else
1424 {
1425 result = build_function_type (type,
1426 arg_types);
1427 result = apply_memfn_quals (result,
1428 type_memfn_quals (t),
1429 type_memfn_rqual (t));
1430 }
1431
1432 if (TYPE_RAISES_EXCEPTIONS (t))
1433 result = build_exception_variant (result,
1434 TYPE_RAISES_EXCEPTIONS (t));
1435 if (TYPE_HAS_LATE_RETURN_TYPE (t))
1436 TYPE_HAS_LATE_RETURN_TYPE (result) = 1;
1437 }
1438 break;
1439 case TYPENAME_TYPE:
1440 {
1441 tree fullname = TYPENAME_TYPE_FULLNAME (t);
1442 if (TREE_CODE (fullname) == TEMPLATE_ID_EXPR
1443 && TREE_OPERAND (fullname, 1))
1444 {
1445 tree args = TREE_OPERAND (fullname, 1);
1446 tree new_args = copy_node (args);
1447 bool changed = false;
1448 for (int i = 0; i < TREE_VEC_LENGTH (args); ++i)
1449 {
1450 tree arg = TREE_VEC_ELT (args, i);
1451 tree strip_arg;
1452 if (TYPE_P (arg))
1453 strip_arg = strip_typedefs (arg, remove_attributes);
1454 else
1455 strip_arg = strip_typedefs_expr (arg, remove_attributes);
1456 TREE_VEC_ELT (new_args, i) = strip_arg;
1457 if (strip_arg != arg)
1458 changed = true;
1459 }
1460 if (changed)
1461 {
1462 NON_DEFAULT_TEMPLATE_ARGS_COUNT (new_args)
1463 = NON_DEFAULT_TEMPLATE_ARGS_COUNT (args);
1464 fullname
1465 = lookup_template_function (TREE_OPERAND (fullname, 0),
1466 new_args);
1467 }
1468 else
1469 ggc_free (new_args);
1470 }
1471 result = make_typename_type (strip_typedefs (TYPE_CONTEXT (t),
1472 remove_attributes),
1473 fullname, typename_type, tf_none);
1474 /* Handle 'typedef typename A::N N;' */
1475 if (typedef_variant_p (result))
1476 result = TYPE_MAIN_VARIANT (DECL_ORIGINAL_TYPE (TYPE_NAME (result)));
1477 }
1478 break;
1479 case DECLTYPE_TYPE:
1480 result = strip_typedefs_expr (DECLTYPE_TYPE_EXPR (t),
1481 remove_attributes);
1482 if (result == DECLTYPE_TYPE_EXPR (t))
1483 result = NULL_TREE;
1484 else
1485 result = (finish_decltype_type
1486 (result,
1487 DECLTYPE_TYPE_ID_EXPR_OR_MEMBER_ACCESS_P (t),
1488 tf_none));
1489 break;
1490 default:
1491 break;
1492 }
1493
1494 if (!result)
1495 {
1496 if (typedef_variant_p (t))
1497 {
1498 /* Explicitly get the underlying type, as TYPE_MAIN_VARIANT doesn't
1499 strip typedefs with attributes. */
1500 result = TYPE_MAIN_VARIANT (DECL_ORIGINAL_TYPE (TYPE_NAME (t)));
1501 result = strip_typedefs (result);
1502 }
1503 else
1504 result = TYPE_MAIN_VARIANT (t);
1505 }
1506 gcc_assert (!typedef_variant_p (result));
1507 if (TYPE_USER_ALIGN (t) != TYPE_USER_ALIGN (result)
1508 || TYPE_ALIGN (t) != TYPE_ALIGN (result))
1509 {
1510 gcc_assert (TYPE_USER_ALIGN (t));
1511 if (remove_attributes)
1512 *remove_attributes = true;
1513 else
1514 {
1515 if (TYPE_ALIGN (t) == TYPE_ALIGN (result))
1516 result = build_variant_type_copy (result);
1517 else
1518 result = build_aligned_type (result, TYPE_ALIGN (t));
1519 TYPE_USER_ALIGN (result) = true;
1520 }
1521 }
1522 if (TYPE_ATTRIBUTES (t))
1523 {
1524 if (remove_attributes)
1525 result = apply_identity_attributes (result, TYPE_ATTRIBUTES (t),
1526 remove_attributes);
1527 else
1528 result = cp_build_type_attribute_variant (result, TYPE_ATTRIBUTES (t));
1529 }
1530 return cp_build_qualified_type (result, cp_type_quals (t));
1531 }
1532
1533 /* Like strip_typedefs above, but works on expressions, so that in
1534
1535 template<class T> struct A
1536 {
1537 typedef T TT;
1538 B<sizeof(TT)> b;
1539 };
1540
1541 sizeof(TT) is replaced by sizeof(T). */
1542
1543 tree
1544 strip_typedefs_expr (tree t, bool *remove_attributes)
1545 {
1546 unsigned i,n;
1547 tree r, type, *ops;
1548 enum tree_code code;
1549
1550 if (t == NULL_TREE || t == error_mark_node)
1551 return t;
1552
1553 if (DECL_P (t) || CONSTANT_CLASS_P (t))
1554 return t;
1555
1556 /* Some expressions have type operands, so let's handle types here rather
1557 than check TYPE_P in multiple places below. */
1558 if (TYPE_P (t))
1559 return strip_typedefs (t, remove_attributes);
1560
1561 code = TREE_CODE (t);
1562 switch (code)
1563 {
1564 case IDENTIFIER_NODE:
1565 case TEMPLATE_PARM_INDEX:
1566 case OVERLOAD:
1567 case BASELINK:
1568 case ARGUMENT_PACK_SELECT:
1569 return t;
1570
1571 case TRAIT_EXPR:
1572 {
1573 tree type1 = strip_typedefs (TRAIT_EXPR_TYPE1 (t), remove_attributes);
1574 tree type2 = strip_typedefs (TRAIT_EXPR_TYPE2 (t), remove_attributes);
1575 if (type1 == TRAIT_EXPR_TYPE1 (t)
1576 && type2 == TRAIT_EXPR_TYPE2 (t))
1577 return t;
1578 r = copy_node (t);
1579 TRAIT_EXPR_TYPE1 (r) = type1;
1580 TRAIT_EXPR_TYPE2 (r) = type2;
1581 return r;
1582 }
1583
1584 case TREE_LIST:
1585 {
1586 vec<tree, va_gc> *vec = make_tree_vector ();
1587 bool changed = false;
1588 tree it;
1589 for (it = t; it; it = TREE_CHAIN (it))
1590 {
1591 tree val = strip_typedefs_expr (TREE_VALUE (t), remove_attributes);
1592 vec_safe_push (vec, val);
1593 if (val != TREE_VALUE (t))
1594 changed = true;
1595 gcc_assert (TREE_PURPOSE (it) == NULL_TREE);
1596 }
1597 if (changed)
1598 {
1599 r = NULL_TREE;
1600 FOR_EACH_VEC_ELT_REVERSE (*vec, i, it)
1601 r = tree_cons (NULL_TREE, it, r);
1602 }
1603 else
1604 r = t;
1605 release_tree_vector (vec);
1606 return r;
1607 }
1608
1609 case TREE_VEC:
1610 {
1611 bool changed = false;
1612 vec<tree, va_gc> *vec = make_tree_vector ();
1613 n = TREE_VEC_LENGTH (t);
1614 vec_safe_reserve (vec, n);
1615 for (i = 0; i < n; ++i)
1616 {
1617 tree op = strip_typedefs_expr (TREE_VEC_ELT (t, i),
1618 remove_attributes);
1619 vec->quick_push (op);
1620 if (op != TREE_VEC_ELT (t, i))
1621 changed = true;
1622 }
1623 if (changed)
1624 {
1625 r = copy_node (t);
1626 for (i = 0; i < n; ++i)
1627 TREE_VEC_ELT (r, i) = (*vec)[i];
1628 NON_DEFAULT_TEMPLATE_ARGS_COUNT (r)
1629 = NON_DEFAULT_TEMPLATE_ARGS_COUNT (t);
1630 }
1631 else
1632 r = t;
1633 release_tree_vector (vec);
1634 return r;
1635 }
1636
1637 case CONSTRUCTOR:
1638 {
1639 bool changed = false;
1640 vec<constructor_elt, va_gc> *vec
1641 = vec_safe_copy (CONSTRUCTOR_ELTS (t));
1642 n = CONSTRUCTOR_NELTS (t);
1643 type = strip_typedefs (TREE_TYPE (t), remove_attributes);
1644 for (i = 0; i < n; ++i)
1645 {
1646 constructor_elt *e = &(*vec)[i];
1647 tree op = strip_typedefs_expr (e->value, remove_attributes);
1648 if (op != e->value)
1649 {
1650 changed = true;
1651 e->value = op;
1652 }
1653 gcc_checking_assert
1654 (e->index == strip_typedefs_expr (e->index, remove_attributes));
1655 }
1656
1657 if (!changed && type == TREE_TYPE (t))
1658 {
1659 vec_free (vec);
1660 return t;
1661 }
1662 else
1663 {
1664 r = copy_node (t);
1665 TREE_TYPE (r) = type;
1666 CONSTRUCTOR_ELTS (r) = vec;
1667 return r;
1668 }
1669 }
1670
1671 case LAMBDA_EXPR:
1672 error ("lambda-expression in a constant expression");
1673 return error_mark_node;
1674
1675 default:
1676 break;
1677 }
1678
1679 gcc_assert (EXPR_P (t));
1680
1681 n = TREE_OPERAND_LENGTH (t);
1682 ops = XALLOCAVEC (tree, n);
1683 type = TREE_TYPE (t);
1684
1685 switch (code)
1686 {
1687 CASE_CONVERT:
1688 case IMPLICIT_CONV_EXPR:
1689 case DYNAMIC_CAST_EXPR:
1690 case STATIC_CAST_EXPR:
1691 case CONST_CAST_EXPR:
1692 case REINTERPRET_CAST_EXPR:
1693 case CAST_EXPR:
1694 case NEW_EXPR:
1695 type = strip_typedefs (type, remove_attributes);
1696 /* fallthrough */
1697
1698 default:
1699 for (i = 0; i < n; ++i)
1700 ops[i] = strip_typedefs_expr (TREE_OPERAND (t, i), remove_attributes);
1701 break;
1702 }
1703
1704 /* If nothing changed, return t. */
1705 for (i = 0; i < n; ++i)
1706 if (ops[i] != TREE_OPERAND (t, i))
1707 break;
1708 if (i == n && type == TREE_TYPE (t))
1709 return t;
1710
1711 r = copy_node (t);
1712 TREE_TYPE (r) = type;
1713 for (i = 0; i < n; ++i)
1714 TREE_OPERAND (r, i) = ops[i];
1715 return r;
1716 }
1717
1718 /* Makes a copy of BINFO and TYPE, which is to be inherited into a
1719 graph dominated by T. If BINFO is NULL, TYPE is a dependent base,
1720 and we do a shallow copy. If BINFO is non-NULL, we do a deep copy.
1721 VIRT indicates whether TYPE is inherited virtually or not.
1722 IGO_PREV points at the previous binfo of the inheritance graph
1723 order chain. The newly copied binfo's TREE_CHAIN forms this
1724 ordering.
1725
1726 The CLASSTYPE_VBASECLASSES vector of T is constructed in the
1727 correct order. That is in the order the bases themselves should be
1728 constructed in.
1729
1730 The BINFO_INHERITANCE of a virtual base class points to the binfo
1731 of the most derived type. ??? We could probably change this so that
1732 BINFO_INHERITANCE becomes synonymous with BINFO_PRIMARY, and hence
1733 remove a field. They currently can only differ for primary virtual
1734 virtual bases. */
1735
1736 tree
1737 copy_binfo (tree binfo, tree type, tree t, tree *igo_prev, int virt)
1738 {
1739 tree new_binfo;
1740
1741 if (virt)
1742 {
1743 /* See if we've already made this virtual base. */
1744 new_binfo = binfo_for_vbase (type, t);
1745 if (new_binfo)
1746 return new_binfo;
1747 }
1748
1749 new_binfo = make_tree_binfo (binfo ? BINFO_N_BASE_BINFOS (binfo) : 0);
1750 BINFO_TYPE (new_binfo) = type;
1751
1752 /* Chain it into the inheritance graph. */
1753 TREE_CHAIN (*igo_prev) = new_binfo;
1754 *igo_prev = new_binfo;
1755
1756 if (binfo && !BINFO_DEPENDENT_BASE_P (binfo))
1757 {
1758 int ix;
1759 tree base_binfo;
1760
1761 gcc_assert (SAME_BINFO_TYPE_P (BINFO_TYPE (binfo), type));
1762
1763 BINFO_OFFSET (new_binfo) = BINFO_OFFSET (binfo);
1764 BINFO_VIRTUALS (new_binfo) = BINFO_VIRTUALS (binfo);
1765
1766 /* We do not need to copy the accesses, as they are read only. */
1767 BINFO_BASE_ACCESSES (new_binfo) = BINFO_BASE_ACCESSES (binfo);
1768
1769 /* Recursively copy base binfos of BINFO. */
1770 for (ix = 0; BINFO_BASE_ITERATE (binfo, ix, base_binfo); ix++)
1771 {
1772 tree new_base_binfo;
1773 new_base_binfo = copy_binfo (base_binfo, BINFO_TYPE (base_binfo),
1774 t, igo_prev,
1775 BINFO_VIRTUAL_P (base_binfo));
1776
1777 if (!BINFO_INHERITANCE_CHAIN (new_base_binfo))
1778 BINFO_INHERITANCE_CHAIN (new_base_binfo) = new_binfo;
1779 BINFO_BASE_APPEND (new_binfo, new_base_binfo);
1780 }
1781 }
1782 else
1783 BINFO_DEPENDENT_BASE_P (new_binfo) = 1;
1784
1785 if (virt)
1786 {
1787 /* Push it onto the list after any virtual bases it contains
1788 will have been pushed. */
1789 CLASSTYPE_VBASECLASSES (t)->quick_push (new_binfo);
1790 BINFO_VIRTUAL_P (new_binfo) = 1;
1791 BINFO_INHERITANCE_CHAIN (new_binfo) = TYPE_BINFO (t);
1792 }
1793
1794 return new_binfo;
1795 }
1796 \f
1797 /* Hashing of lists so that we don't make duplicates.
1798 The entry point is `list_hash_canon'. */
1799
1800 struct list_proxy
1801 {
1802 tree purpose;
1803 tree value;
1804 tree chain;
1805 };
1806
1807 struct list_hasher : ggc_ptr_hash<tree_node>
1808 {
1809 typedef list_proxy *compare_type;
1810
1811 static hashval_t hash (tree);
1812 static bool equal (tree, list_proxy *);
1813 };
1814
1815 /* Now here is the hash table. When recording a list, it is added
1816 to the slot whose index is the hash code mod the table size.
1817 Note that the hash table is used for several kinds of lists.
1818 While all these live in the same table, they are completely independent,
1819 and the hash code is computed differently for each of these. */
1820
1821 static GTY (()) hash_table<list_hasher> *list_hash_table;
1822
1823 /* Compare ENTRY (an entry in the hash table) with DATA (a list_proxy
1824 for a node we are thinking about adding). */
1825
1826 bool
1827 list_hasher::equal (tree t, list_proxy *proxy)
1828 {
1829 return (TREE_VALUE (t) == proxy->value
1830 && TREE_PURPOSE (t) == proxy->purpose
1831 && TREE_CHAIN (t) == proxy->chain);
1832 }
1833
1834 /* Compute a hash code for a list (chain of TREE_LIST nodes
1835 with goodies in the TREE_PURPOSE, TREE_VALUE, and bits of the
1836 TREE_COMMON slots), by adding the hash codes of the individual entries. */
1837
1838 static hashval_t
1839 list_hash_pieces (tree purpose, tree value, tree chain)
1840 {
1841 hashval_t hashcode = 0;
1842
1843 if (chain)
1844 hashcode += TREE_HASH (chain);
1845
1846 if (value)
1847 hashcode += TREE_HASH (value);
1848 else
1849 hashcode += 1007;
1850 if (purpose)
1851 hashcode += TREE_HASH (purpose);
1852 else
1853 hashcode += 1009;
1854 return hashcode;
1855 }
1856
1857 /* Hash an already existing TREE_LIST. */
1858
1859 hashval_t
1860 list_hasher::hash (tree t)
1861 {
1862 return list_hash_pieces (TREE_PURPOSE (t),
1863 TREE_VALUE (t),
1864 TREE_CHAIN (t));
1865 }
1866
1867 /* Given list components PURPOSE, VALUE, AND CHAIN, return the canonical
1868 object for an identical list if one already exists. Otherwise, build a
1869 new one, and record it as the canonical object. */
1870
1871 tree
1872 hash_tree_cons (tree purpose, tree value, tree chain)
1873 {
1874 int hashcode = 0;
1875 tree *slot;
1876 struct list_proxy proxy;
1877
1878 /* Hash the list node. */
1879 hashcode = list_hash_pieces (purpose, value, chain);
1880 /* Create a proxy for the TREE_LIST we would like to create. We
1881 don't actually create it so as to avoid creating garbage. */
1882 proxy.purpose = purpose;
1883 proxy.value = value;
1884 proxy.chain = chain;
1885 /* See if it is already in the table. */
1886 slot = list_hash_table->find_slot_with_hash (&proxy, hashcode, INSERT);
1887 /* If not, create a new node. */
1888 if (!*slot)
1889 *slot = tree_cons (purpose, value, chain);
1890 return (tree) *slot;
1891 }
1892
1893 /* Constructor for hashed lists. */
1894
1895 tree
1896 hash_tree_chain (tree value, tree chain)
1897 {
1898 return hash_tree_cons (NULL_TREE, value, chain);
1899 }
1900 \f
1901 void
1902 debug_binfo (tree elem)
1903 {
1904 HOST_WIDE_INT n;
1905 tree virtuals;
1906
1907 fprintf (stderr, "type \"%s\", offset = " HOST_WIDE_INT_PRINT_DEC
1908 "\nvtable type:\n",
1909 TYPE_NAME_STRING (BINFO_TYPE (elem)),
1910 TREE_INT_CST_LOW (BINFO_OFFSET (elem)));
1911 debug_tree (BINFO_TYPE (elem));
1912 if (BINFO_VTABLE (elem))
1913 fprintf (stderr, "vtable decl \"%s\"\n",
1914 IDENTIFIER_POINTER (DECL_NAME (get_vtbl_decl_for_binfo (elem))));
1915 else
1916 fprintf (stderr, "no vtable decl yet\n");
1917 fprintf (stderr, "virtuals:\n");
1918 virtuals = BINFO_VIRTUALS (elem);
1919 n = 0;
1920
1921 while (virtuals)
1922 {
1923 tree fndecl = TREE_VALUE (virtuals);
1924 fprintf (stderr, "%s [%ld =? %ld]\n",
1925 IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (fndecl)),
1926 (long) n, (long) TREE_INT_CST_LOW (DECL_VINDEX (fndecl)));
1927 ++n;
1928 virtuals = TREE_CHAIN (virtuals);
1929 }
1930 }
1931
1932 /* Build a representation for the qualified name SCOPE::NAME. TYPE is
1933 the type of the result expression, if known, or NULL_TREE if the
1934 resulting expression is type-dependent. If TEMPLATE_P is true,
1935 NAME is known to be a template because the user explicitly used the
1936 "template" keyword after the "::".
1937
1938 All SCOPE_REFs should be built by use of this function. */
1939
1940 tree
1941 build_qualified_name (tree type, tree scope, tree name, bool template_p)
1942 {
1943 tree t;
1944 if (type == error_mark_node
1945 || scope == error_mark_node
1946 || name == error_mark_node)
1947 return error_mark_node;
1948 t = build2 (SCOPE_REF, type, scope, name);
1949 QUALIFIED_NAME_IS_TEMPLATE (t) = template_p;
1950 PTRMEM_OK_P (t) = true;
1951 if (type)
1952 t = convert_from_reference (t);
1953 return t;
1954 }
1955
1956 /* Like check_qualified_type, but also check ref-qualifier and exception
1957 specification. */
1958
1959 static bool
1960 cp_check_qualified_type (const_tree cand, const_tree base, int type_quals,
1961 cp_ref_qualifier rqual, tree raises)
1962 {
1963 return (check_qualified_type (cand, base, type_quals)
1964 && comp_except_specs (raises, TYPE_RAISES_EXCEPTIONS (cand),
1965 ce_exact)
1966 && type_memfn_rqual (cand) == rqual);
1967 }
1968
1969 /* Build the FUNCTION_TYPE or METHOD_TYPE with the ref-qualifier RQUAL. */
1970
1971 tree
1972 build_ref_qualified_type (tree type, cp_ref_qualifier rqual)
1973 {
1974 tree t;
1975
1976 if (rqual == type_memfn_rqual (type))
1977 return type;
1978
1979 int type_quals = TYPE_QUALS (type);
1980 tree raises = TYPE_RAISES_EXCEPTIONS (type);
1981 for (t = TYPE_MAIN_VARIANT (type); t; t = TYPE_NEXT_VARIANT (t))
1982 if (cp_check_qualified_type (t, type, type_quals, rqual, raises))
1983 return t;
1984
1985 t = build_variant_type_copy (type);
1986 switch (rqual)
1987 {
1988 case REF_QUAL_RVALUE:
1989 FUNCTION_RVALUE_QUALIFIED (t) = 1;
1990 FUNCTION_REF_QUALIFIED (t) = 1;
1991 break;
1992 case REF_QUAL_LVALUE:
1993 FUNCTION_RVALUE_QUALIFIED (t) = 0;
1994 FUNCTION_REF_QUALIFIED (t) = 1;
1995 break;
1996 default:
1997 FUNCTION_REF_QUALIFIED (t) = 0;
1998 break;
1999 }
2000
2001 if (TYPE_STRUCTURAL_EQUALITY_P (type))
2002 /* Propagate structural equality. */
2003 SET_TYPE_STRUCTURAL_EQUALITY (t);
2004 else if (TYPE_CANONICAL (type) != type)
2005 /* Build the underlying canonical type, since it is different
2006 from TYPE. */
2007 TYPE_CANONICAL (t) = build_ref_qualified_type (TYPE_CANONICAL (type),
2008 rqual);
2009 else
2010 /* T is its own canonical type. */
2011 TYPE_CANONICAL (t) = t;
2012
2013 return t;
2014 }
2015
2016 /* Returns nonzero if X is an expression for a (possibly overloaded)
2017 function. If "f" is a function or function template, "f", "c->f",
2018 "c.f", "C::f", and "f<int>" will all be considered possibly
2019 overloaded functions. Returns 2 if the function is actually
2020 overloaded, i.e., if it is impossible to know the type of the
2021 function without performing overload resolution. */
2022
2023 int
2024 is_overloaded_fn (tree x)
2025 {
2026 /* A baselink is also considered an overloaded function. */
2027 if (TREE_CODE (x) == OFFSET_REF
2028 || TREE_CODE (x) == COMPONENT_REF)
2029 x = TREE_OPERAND (x, 1);
2030 if (BASELINK_P (x))
2031 x = BASELINK_FUNCTIONS (x);
2032 if (TREE_CODE (x) == TEMPLATE_ID_EXPR)
2033 x = TREE_OPERAND (x, 0);
2034 if (DECL_FUNCTION_TEMPLATE_P (OVL_CURRENT (x))
2035 || (TREE_CODE (x) == OVERLOAD && OVL_CHAIN (x)))
2036 return 2;
2037 return (TREE_CODE (x) == FUNCTION_DECL
2038 || TREE_CODE (x) == OVERLOAD);
2039 }
2040
2041 /* X is the CALL_EXPR_FN of a CALL_EXPR. If X represents a dependent name
2042 (14.6.2), return the IDENTIFIER_NODE for that name. Otherwise, return
2043 NULL_TREE. */
2044
2045 tree
2046 dependent_name (tree x)
2047 {
2048 if (identifier_p (x))
2049 return x;
2050 if (TREE_CODE (x) != COMPONENT_REF
2051 && TREE_CODE (x) != OFFSET_REF
2052 && TREE_CODE (x) != BASELINK
2053 && is_overloaded_fn (x))
2054 return DECL_NAME (get_first_fn (x));
2055 return NULL_TREE;
2056 }
2057
2058 /* Returns true iff X is an expression for an overloaded function
2059 whose type cannot be known without performing overload
2060 resolution. */
2061
2062 bool
2063 really_overloaded_fn (tree x)
2064 {
2065 return is_overloaded_fn (x) == 2;
2066 }
2067
2068 tree
2069 get_fns (tree from)
2070 {
2071 gcc_assert (is_overloaded_fn (from));
2072 /* A baselink is also considered an overloaded function. */
2073 if (TREE_CODE (from) == OFFSET_REF
2074 || TREE_CODE (from) == COMPONENT_REF)
2075 from = TREE_OPERAND (from, 1);
2076 if (BASELINK_P (from))
2077 from = BASELINK_FUNCTIONS (from);
2078 if (TREE_CODE (from) == TEMPLATE_ID_EXPR)
2079 from = TREE_OPERAND (from, 0);
2080 return from;
2081 }
2082
2083 tree
2084 get_first_fn (tree from)
2085 {
2086 return OVL_CURRENT (get_fns (from));
2087 }
2088
2089 /* Return a new OVL node, concatenating it with the old one. */
2090
2091 tree
2092 ovl_cons (tree decl, tree chain)
2093 {
2094 tree result = make_node (OVERLOAD);
2095 TREE_TYPE (result) = unknown_type_node;
2096 OVL_FUNCTION (result) = decl;
2097 TREE_CHAIN (result) = chain;
2098
2099 return result;
2100 }
2101
2102 /* Build a new overloaded function. If this is the first one,
2103 just return it; otherwise, ovl_cons the _DECLs */
2104
2105 tree
2106 build_overload (tree decl, tree chain)
2107 {
2108 if (! chain && TREE_CODE (decl) != TEMPLATE_DECL)
2109 return decl;
2110 return ovl_cons (decl, chain);
2111 }
2112
2113 /* Return the scope where the overloaded functions OVL were found. */
2114
2115 tree
2116 ovl_scope (tree ovl)
2117 {
2118 if (TREE_CODE (ovl) == OFFSET_REF
2119 || TREE_CODE (ovl) == COMPONENT_REF)
2120 ovl = TREE_OPERAND (ovl, 1);
2121 if (TREE_CODE (ovl) == BASELINK)
2122 return BINFO_TYPE (BASELINK_BINFO (ovl));
2123 if (TREE_CODE (ovl) == TEMPLATE_ID_EXPR)
2124 ovl = TREE_OPERAND (ovl, 0);
2125 /* Skip using-declarations. */
2126 while (TREE_CODE (ovl) == OVERLOAD && OVL_USED (ovl) && OVL_CHAIN (ovl))
2127 ovl = OVL_CHAIN (ovl);
2128 return CP_DECL_CONTEXT (OVL_CURRENT (ovl));
2129 }
2130
2131 /* Return TRUE if FN is a non-static member function, FALSE otherwise.
2132 This function looks into BASELINK and OVERLOAD nodes. */
2133
2134 bool
2135 non_static_member_function_p (tree fn)
2136 {
2137 if (fn == NULL_TREE)
2138 return false;
2139
2140 if (is_overloaded_fn (fn))
2141 fn = get_first_fn (fn);
2142
2143 return (DECL_P (fn)
2144 && DECL_NONSTATIC_MEMBER_FUNCTION_P (fn));
2145 }
2146
2147 \f
2148 #define PRINT_RING_SIZE 4
2149
2150 static const char *
2151 cxx_printable_name_internal (tree decl, int v, bool translate)
2152 {
2153 static unsigned int uid_ring[PRINT_RING_SIZE];
2154 static char *print_ring[PRINT_RING_SIZE];
2155 static bool trans_ring[PRINT_RING_SIZE];
2156 static int ring_counter;
2157 int i;
2158
2159 /* Only cache functions. */
2160 if (v < 2
2161 || TREE_CODE (decl) != FUNCTION_DECL
2162 || DECL_LANG_SPECIFIC (decl) == 0)
2163 return lang_decl_name (decl, v, translate);
2164
2165 /* See if this print name is lying around. */
2166 for (i = 0; i < PRINT_RING_SIZE; i++)
2167 if (uid_ring[i] == DECL_UID (decl) && translate == trans_ring[i])
2168 /* yes, so return it. */
2169 return print_ring[i];
2170
2171 if (++ring_counter == PRINT_RING_SIZE)
2172 ring_counter = 0;
2173
2174 if (current_function_decl != NULL_TREE)
2175 {
2176 /* There may be both translated and untranslated versions of the
2177 name cached. */
2178 for (i = 0; i < 2; i++)
2179 {
2180 if (uid_ring[ring_counter] == DECL_UID (current_function_decl))
2181 ring_counter += 1;
2182 if (ring_counter == PRINT_RING_SIZE)
2183 ring_counter = 0;
2184 }
2185 gcc_assert (uid_ring[ring_counter] != DECL_UID (current_function_decl));
2186 }
2187
2188 free (print_ring[ring_counter]);
2189
2190 print_ring[ring_counter] = xstrdup (lang_decl_name (decl, v, translate));
2191 uid_ring[ring_counter] = DECL_UID (decl);
2192 trans_ring[ring_counter] = translate;
2193 return print_ring[ring_counter];
2194 }
2195
2196 const char *
2197 cxx_printable_name (tree decl, int v)
2198 {
2199 return cxx_printable_name_internal (decl, v, false);
2200 }
2201
2202 const char *
2203 cxx_printable_name_translate (tree decl, int v)
2204 {
2205 return cxx_printable_name_internal (decl, v, true);
2206 }
2207 \f
2208 /* Build the FUNCTION_TYPE or METHOD_TYPE which may throw exceptions
2209 listed in RAISES. */
2210
2211 tree
2212 build_exception_variant (tree type, tree raises)
2213 {
2214 tree v;
2215 int type_quals;
2216
2217 if (comp_except_specs (raises, TYPE_RAISES_EXCEPTIONS (type), ce_exact))
2218 return type;
2219
2220 type_quals = TYPE_QUALS (type);
2221 cp_ref_qualifier rqual = type_memfn_rqual (type);
2222 for (v = TYPE_MAIN_VARIANT (type); v; v = TYPE_NEXT_VARIANT (v))
2223 if (cp_check_qualified_type (v, type, type_quals, rqual, raises))
2224 return v;
2225
2226 /* Need to build a new variant. */
2227 v = build_variant_type_copy (type);
2228 TYPE_RAISES_EXCEPTIONS (v) = raises;
2229 return v;
2230 }
2231
2232 /* Given a TEMPLATE_TEMPLATE_PARM node T, create a new
2233 BOUND_TEMPLATE_TEMPLATE_PARM bound with NEWARGS as its template
2234 arguments. */
2235
2236 tree
2237 bind_template_template_parm (tree t, tree newargs)
2238 {
2239 tree decl = TYPE_NAME (t);
2240 tree t2;
2241
2242 t2 = cxx_make_type (BOUND_TEMPLATE_TEMPLATE_PARM);
2243 decl = build_decl (input_location,
2244 TYPE_DECL, DECL_NAME (decl), NULL_TREE);
2245
2246 /* These nodes have to be created to reflect new TYPE_DECL and template
2247 arguments. */
2248 TEMPLATE_TYPE_PARM_INDEX (t2) = copy_node (TEMPLATE_TYPE_PARM_INDEX (t));
2249 TEMPLATE_PARM_DECL (TEMPLATE_TYPE_PARM_INDEX (t2)) = decl;
2250 TEMPLATE_TEMPLATE_PARM_TEMPLATE_INFO (t2)
2251 = build_template_info (TEMPLATE_TEMPLATE_PARM_TEMPLATE_DECL (t), newargs);
2252
2253 TREE_TYPE (decl) = t2;
2254 TYPE_NAME (t2) = decl;
2255 TYPE_STUB_DECL (t2) = decl;
2256 TYPE_SIZE (t2) = 0;
2257 SET_TYPE_STRUCTURAL_EQUALITY (t2);
2258
2259 return t2;
2260 }
2261
2262 /* Called from count_trees via walk_tree. */
2263
2264 static tree
2265 count_trees_r (tree *tp, int *walk_subtrees, void *data)
2266 {
2267 ++*((int *) data);
2268
2269 if (TYPE_P (*tp))
2270 *walk_subtrees = 0;
2271
2272 return NULL_TREE;
2273 }
2274
2275 /* Debugging function for measuring the rough complexity of a tree
2276 representation. */
2277
2278 int
2279 count_trees (tree t)
2280 {
2281 int n_trees = 0;
2282 cp_walk_tree_without_duplicates (&t, count_trees_r, &n_trees);
2283 return n_trees;
2284 }
2285
2286 /* Called from verify_stmt_tree via walk_tree. */
2287
2288 static tree
2289 verify_stmt_tree_r (tree* tp, int * /*walk_subtrees*/, void* data)
2290 {
2291 tree t = *tp;
2292 hash_table<nofree_ptr_hash <tree_node> > *statements
2293 = static_cast <hash_table<nofree_ptr_hash <tree_node> > *> (data);
2294 tree_node **slot;
2295
2296 if (!STATEMENT_CODE_P (TREE_CODE (t)))
2297 return NULL_TREE;
2298
2299 /* If this statement is already present in the hash table, then
2300 there is a circularity in the statement tree. */
2301 gcc_assert (!statements->find (t));
2302
2303 slot = statements->find_slot (t, INSERT);
2304 *slot = t;
2305
2306 return NULL_TREE;
2307 }
2308
2309 /* Debugging function to check that the statement T has not been
2310 corrupted. For now, this function simply checks that T contains no
2311 circularities. */
2312
2313 void
2314 verify_stmt_tree (tree t)
2315 {
2316 hash_table<nofree_ptr_hash <tree_node> > statements (37);
2317 cp_walk_tree (&t, verify_stmt_tree_r, &statements, NULL);
2318 }
2319
2320 /* Check if the type T depends on a type with no linkage and if so, return
2321 it. If RELAXED_P then do not consider a class type declared within
2322 a vague-linkage function to have no linkage. */
2323
2324 tree
2325 no_linkage_check (tree t, bool relaxed_p)
2326 {
2327 tree r;
2328
2329 /* There's no point in checking linkage on template functions; we
2330 can't know their complete types. */
2331 if (processing_template_decl)
2332 return NULL_TREE;
2333
2334 switch (TREE_CODE (t))
2335 {
2336 case RECORD_TYPE:
2337 if (TYPE_PTRMEMFUNC_P (t))
2338 goto ptrmem;
2339 /* Lambda types that don't have mangling scope have no linkage. We
2340 check CLASSTYPE_LAMBDA_EXPR for error_mark_node because
2341 when we get here from pushtag none of the lambda information is
2342 set up yet, so we want to assume that the lambda has linkage and
2343 fix it up later if not. */
2344 if (CLASSTYPE_LAMBDA_EXPR (t)
2345 && CLASSTYPE_LAMBDA_EXPR (t) != error_mark_node
2346 && LAMBDA_TYPE_EXTRA_SCOPE (t) == NULL_TREE)
2347 return t;
2348 /* Fall through. */
2349 case UNION_TYPE:
2350 if (!CLASS_TYPE_P (t))
2351 return NULL_TREE;
2352 /* Fall through. */
2353 case ENUMERAL_TYPE:
2354 /* Only treat anonymous types as having no linkage if they're at
2355 namespace scope. This is core issue 966. */
2356 if (TYPE_ANONYMOUS_P (t) && TYPE_NAMESPACE_SCOPE_P (t))
2357 return t;
2358
2359 for (r = CP_TYPE_CONTEXT (t); ; )
2360 {
2361 /* If we're a nested type of a !TREE_PUBLIC class, we might not
2362 have linkage, or we might just be in an anonymous namespace.
2363 If we're in a TREE_PUBLIC class, we have linkage. */
2364 if (TYPE_P (r) && !TREE_PUBLIC (TYPE_NAME (r)))
2365 return no_linkage_check (TYPE_CONTEXT (t), relaxed_p);
2366 else if (TREE_CODE (r) == FUNCTION_DECL)
2367 {
2368 if (!relaxed_p || !vague_linkage_p (r))
2369 return t;
2370 else
2371 r = CP_DECL_CONTEXT (r);
2372 }
2373 else
2374 break;
2375 }
2376
2377 return NULL_TREE;
2378
2379 case ARRAY_TYPE:
2380 case POINTER_TYPE:
2381 case REFERENCE_TYPE:
2382 case VECTOR_TYPE:
2383 return no_linkage_check (TREE_TYPE (t), relaxed_p);
2384
2385 case OFFSET_TYPE:
2386 ptrmem:
2387 r = no_linkage_check (TYPE_PTRMEM_POINTED_TO_TYPE (t),
2388 relaxed_p);
2389 if (r)
2390 return r;
2391 return no_linkage_check (TYPE_PTRMEM_CLASS_TYPE (t), relaxed_p);
2392
2393 case METHOD_TYPE:
2394 case FUNCTION_TYPE:
2395 {
2396 tree parm = TYPE_ARG_TYPES (t);
2397 if (TREE_CODE (t) == METHOD_TYPE)
2398 /* The 'this' pointer isn't interesting; a method has the same
2399 linkage (or lack thereof) as its enclosing class. */
2400 parm = TREE_CHAIN (parm);
2401 for (;
2402 parm && parm != void_list_node;
2403 parm = TREE_CHAIN (parm))
2404 {
2405 r = no_linkage_check (TREE_VALUE (parm), relaxed_p);
2406 if (r)
2407 return r;
2408 }
2409 return no_linkage_check (TREE_TYPE (t), relaxed_p);
2410 }
2411
2412 default:
2413 return NULL_TREE;
2414 }
2415 }
2416
2417 extern int depth_reached;
2418
2419 void
2420 cxx_print_statistics (void)
2421 {
2422 print_search_statistics ();
2423 print_class_statistics ();
2424 print_template_statistics ();
2425 if (GATHER_STATISTICS)
2426 fprintf (stderr, "maximum template instantiation depth reached: %d\n",
2427 depth_reached);
2428 }
2429
2430 /* Return, as an INTEGER_CST node, the number of elements for TYPE
2431 (which is an ARRAY_TYPE). This counts only elements of the top
2432 array. */
2433
2434 tree
2435 array_type_nelts_top (tree type)
2436 {
2437 return fold_build2_loc (input_location,
2438 PLUS_EXPR, sizetype,
2439 array_type_nelts (type),
2440 size_one_node);
2441 }
2442
2443 /* Return, as an INTEGER_CST node, the number of elements for TYPE
2444 (which is an ARRAY_TYPE). This one is a recursive count of all
2445 ARRAY_TYPEs that are clumped together. */
2446
2447 tree
2448 array_type_nelts_total (tree type)
2449 {
2450 tree sz = array_type_nelts_top (type);
2451 type = TREE_TYPE (type);
2452 while (TREE_CODE (type) == ARRAY_TYPE)
2453 {
2454 tree n = array_type_nelts_top (type);
2455 sz = fold_build2_loc (input_location,
2456 MULT_EXPR, sizetype, sz, n);
2457 type = TREE_TYPE (type);
2458 }
2459 return sz;
2460 }
2461
2462 /* Called from break_out_target_exprs via mapcar. */
2463
2464 static tree
2465 bot_manip (tree* tp, int* walk_subtrees, void* data)
2466 {
2467 splay_tree target_remap = ((splay_tree) data);
2468 tree t = *tp;
2469
2470 if (!TYPE_P (t) && TREE_CONSTANT (t) && !TREE_SIDE_EFFECTS (t))
2471 {
2472 /* There can't be any TARGET_EXPRs or their slot variables below this
2473 point. But we must make a copy, in case subsequent processing
2474 alters any part of it. For example, during gimplification a cast
2475 of the form (T) &X::f (where "f" is a member function) will lead
2476 to replacing the PTRMEM_CST for &X::f with a VAR_DECL. */
2477 *walk_subtrees = 0;
2478 *tp = unshare_expr (t);
2479 return NULL_TREE;
2480 }
2481 if (TREE_CODE (t) == TARGET_EXPR)
2482 {
2483 tree u;
2484
2485 if (TREE_CODE (TREE_OPERAND (t, 1)) == AGGR_INIT_EXPR)
2486 {
2487 u = build_cplus_new (TREE_TYPE (t), TREE_OPERAND (t, 1),
2488 tf_warning_or_error);
2489 if (AGGR_INIT_ZERO_FIRST (TREE_OPERAND (t, 1)))
2490 AGGR_INIT_ZERO_FIRST (TREE_OPERAND (u, 1)) = true;
2491 }
2492 else
2493 u = build_target_expr_with_type (TREE_OPERAND (t, 1), TREE_TYPE (t),
2494 tf_warning_or_error);
2495
2496 TARGET_EXPR_IMPLICIT_P (u) = TARGET_EXPR_IMPLICIT_P (t);
2497 TARGET_EXPR_LIST_INIT_P (u) = TARGET_EXPR_LIST_INIT_P (t);
2498 TARGET_EXPR_DIRECT_INIT_P (u) = TARGET_EXPR_DIRECT_INIT_P (t);
2499
2500 /* Map the old variable to the new one. */
2501 splay_tree_insert (target_remap,
2502 (splay_tree_key) TREE_OPERAND (t, 0),
2503 (splay_tree_value) TREE_OPERAND (u, 0));
2504
2505 TREE_OPERAND (u, 1) = break_out_target_exprs (TREE_OPERAND (u, 1));
2506
2507 /* Replace the old expression with the new version. */
2508 *tp = u;
2509 /* We don't have to go below this point; the recursive call to
2510 break_out_target_exprs will have handled anything below this
2511 point. */
2512 *walk_subtrees = 0;
2513 return NULL_TREE;
2514 }
2515 if (TREE_CODE (*tp) == SAVE_EXPR)
2516 {
2517 t = *tp;
2518 splay_tree_node n = splay_tree_lookup (target_remap,
2519 (splay_tree_key) t);
2520 if (n)
2521 {
2522 *tp = (tree)n->value;
2523 *walk_subtrees = 0;
2524 }
2525 else
2526 {
2527 copy_tree_r (tp, walk_subtrees, NULL);
2528 splay_tree_insert (target_remap,
2529 (splay_tree_key)t,
2530 (splay_tree_value)*tp);
2531 /* Make sure we don't remap an already-remapped SAVE_EXPR. */
2532 splay_tree_insert (target_remap,
2533 (splay_tree_key)*tp,
2534 (splay_tree_value)*tp);
2535 }
2536 return NULL_TREE;
2537 }
2538
2539 /* Make a copy of this node. */
2540 t = copy_tree_r (tp, walk_subtrees, NULL);
2541 if (TREE_CODE (*tp) == CALL_EXPR)
2542 {
2543 set_flags_from_callee (*tp);
2544
2545 /* builtin_LINE and builtin_FILE get the location where the default
2546 argument is expanded, not where the call was written. */
2547 tree callee = get_callee_fndecl (*tp);
2548 if (callee && DECL_BUILT_IN (callee))
2549 switch (DECL_FUNCTION_CODE (callee))
2550 {
2551 case BUILT_IN_FILE:
2552 case BUILT_IN_LINE:
2553 SET_EXPR_LOCATION (*tp, input_location);
2554 default:
2555 break;
2556 }
2557 }
2558 return t;
2559 }
2560
2561 /* Replace all remapped VAR_DECLs in T with their new equivalents.
2562 DATA is really a splay-tree mapping old variables to new
2563 variables. */
2564
2565 static tree
2566 bot_replace (tree* t, int* /*walk_subtrees*/, void* data)
2567 {
2568 splay_tree target_remap = ((splay_tree) data);
2569
2570 if (VAR_P (*t))
2571 {
2572 splay_tree_node n = splay_tree_lookup (target_remap,
2573 (splay_tree_key) *t);
2574 if (n)
2575 *t = (tree) n->value;
2576 }
2577 else if (TREE_CODE (*t) == PARM_DECL
2578 && DECL_NAME (*t) == this_identifier
2579 && !DECL_CONTEXT (*t))
2580 {
2581 /* In an NSDMI we need to replace the 'this' parameter we used for
2582 parsing with the real one for this function. */
2583 *t = current_class_ptr;
2584 }
2585 else if (TREE_CODE (*t) == CONVERT_EXPR
2586 && CONVERT_EXPR_VBASE_PATH (*t))
2587 {
2588 /* In an NSDMI build_base_path defers building conversions to virtual
2589 bases, and we handle it here. */
2590 tree basetype = TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (*t)));
2591 vec<tree, va_gc> *vbases = CLASSTYPE_VBASECLASSES (current_class_type);
2592 int i; tree binfo;
2593 FOR_EACH_VEC_SAFE_ELT (vbases, i, binfo)
2594 if (BINFO_TYPE (binfo) == basetype)
2595 break;
2596 *t = build_base_path (PLUS_EXPR, TREE_OPERAND (*t, 0), binfo, true,
2597 tf_warning_or_error);
2598 }
2599
2600 return NULL_TREE;
2601 }
2602
2603 /* When we parse a default argument expression, we may create
2604 temporary variables via TARGET_EXPRs. When we actually use the
2605 default-argument expression, we make a copy of the expression
2606 and replace the temporaries with appropriate local versions. */
2607
2608 tree
2609 break_out_target_exprs (tree t)
2610 {
2611 static int target_remap_count;
2612 static splay_tree target_remap;
2613
2614 if (!target_remap_count++)
2615 target_remap = splay_tree_new (splay_tree_compare_pointers,
2616 /*splay_tree_delete_key_fn=*/NULL,
2617 /*splay_tree_delete_value_fn=*/NULL);
2618 cp_walk_tree (&t, bot_manip, target_remap, NULL);
2619 cp_walk_tree (&t, bot_replace, target_remap, NULL);
2620
2621 if (!--target_remap_count)
2622 {
2623 splay_tree_delete (target_remap);
2624 target_remap = NULL;
2625 }
2626
2627 return t;
2628 }
2629
2630 /* Build an expression for the subobject of OBJ at CONSTRUCTOR index INDEX,
2631 which we expect to have type TYPE. */
2632
2633 tree
2634 build_ctor_subob_ref (tree index, tree type, tree obj)
2635 {
2636 if (index == NULL_TREE)
2637 /* Can't refer to a particular member of a vector. */
2638 obj = NULL_TREE;
2639 else if (TREE_CODE (index) == INTEGER_CST)
2640 obj = cp_build_array_ref (input_location, obj, index, tf_none);
2641 else
2642 obj = build_class_member_access_expr (obj, index, NULL_TREE,
2643 /*reference*/false, tf_none);
2644 if (obj)
2645 {
2646 tree objtype = TREE_TYPE (obj);
2647 if (TREE_CODE (objtype) == ARRAY_TYPE && !TYPE_DOMAIN (objtype))
2648 {
2649 /* When the destination object refers to a flexible array member
2650 verify that it matches the type of the source object except
2651 for its domain and qualifiers. */
2652 gcc_assert (comptypes (TYPE_MAIN_VARIANT (type),
2653 TYPE_MAIN_VARIANT (objtype),
2654 COMPARE_REDECLARATION));
2655 }
2656 else
2657 gcc_assert (same_type_ignoring_top_level_qualifiers_p (type, objtype));
2658 }
2659
2660 return obj;
2661 }
2662
2663 /* Like substitute_placeholder_in_expr, but handle C++ tree codes and
2664 build up subexpressions as we go deeper. */
2665
2666 static tree
2667 replace_placeholders_r (tree* t, int* walk_subtrees, void* data_)
2668 {
2669 tree obj = static_cast<tree>(data_);
2670
2671 if (TREE_CONSTANT (*t))
2672 {
2673 *walk_subtrees = false;
2674 return NULL_TREE;
2675 }
2676
2677 switch (TREE_CODE (*t))
2678 {
2679 case PLACEHOLDER_EXPR:
2680 {
2681 tree x = obj;
2682 for (; !(same_type_ignoring_top_level_qualifiers_p
2683 (TREE_TYPE (*t), TREE_TYPE (x)));
2684 x = TREE_OPERAND (x, 0))
2685 gcc_assert (TREE_CODE (x) == COMPONENT_REF);
2686 *t = x;
2687 *walk_subtrees = false;
2688 }
2689 break;
2690
2691 case CONSTRUCTOR:
2692 {
2693 constructor_elt *ce;
2694 vec<constructor_elt,va_gc> *v = CONSTRUCTOR_ELTS (*t);
2695 for (unsigned i = 0; vec_safe_iterate (v, i, &ce); ++i)
2696 {
2697 tree *valp = &ce->value;
2698 tree type = TREE_TYPE (*valp);
2699 tree subob = obj;
2700
2701 if (TREE_CODE (*valp) == CONSTRUCTOR
2702 && AGGREGATE_TYPE_P (type))
2703 {
2704 /* If we're looking at the initializer for OBJ, then build
2705 a sub-object reference. If we're looking at an
2706 initializer for another object, just pass OBJ down. */
2707 if (same_type_ignoring_top_level_qualifiers_p
2708 (TREE_TYPE (*t), TREE_TYPE (obj)))
2709 subob = build_ctor_subob_ref (ce->index, type, obj);
2710 if (TREE_CODE (*valp) == TARGET_EXPR)
2711 valp = &TARGET_EXPR_INITIAL (*valp);
2712 }
2713
2714 cp_walk_tree (valp, replace_placeholders_r,
2715 subob, NULL);
2716 }
2717 *walk_subtrees = false;
2718 break;
2719 }
2720
2721 default:
2722 break;
2723 }
2724
2725 return NULL_TREE;
2726 }
2727
2728 tree
2729 replace_placeholders (tree exp, tree obj)
2730 {
2731 tree *tp = &exp;
2732 if (TREE_CODE (exp) == TARGET_EXPR)
2733 tp = &TARGET_EXPR_INITIAL (exp);
2734 cp_walk_tree (tp, replace_placeholders_r, obj, NULL);
2735 return exp;
2736 }
2737
2738 /* Similar to `build_nt', but for template definitions of dependent
2739 expressions */
2740
2741 tree
2742 build_min_nt_loc (location_t loc, enum tree_code code, ...)
2743 {
2744 tree t;
2745 int length;
2746 int i;
2747 va_list p;
2748
2749 gcc_assert (TREE_CODE_CLASS (code) != tcc_vl_exp);
2750
2751 va_start (p, code);
2752
2753 t = make_node (code);
2754 SET_EXPR_LOCATION (t, loc);
2755 length = TREE_CODE_LENGTH (code);
2756
2757 for (i = 0; i < length; i++)
2758 {
2759 tree x = va_arg (p, tree);
2760 TREE_OPERAND (t, i) = x;
2761 }
2762
2763 va_end (p);
2764 return t;
2765 }
2766
2767
2768 /* Similar to `build', but for template definitions. */
2769
2770 tree
2771 build_min (enum tree_code code, tree tt, ...)
2772 {
2773 tree t;
2774 int length;
2775 int i;
2776 va_list p;
2777
2778 gcc_assert (TREE_CODE_CLASS (code) != tcc_vl_exp);
2779
2780 va_start (p, tt);
2781
2782 t = make_node (code);
2783 length = TREE_CODE_LENGTH (code);
2784 TREE_TYPE (t) = tt;
2785
2786 for (i = 0; i < length; i++)
2787 {
2788 tree x = va_arg (p, tree);
2789 TREE_OPERAND (t, i) = x;
2790 if (x && !TYPE_P (x) && TREE_SIDE_EFFECTS (x))
2791 TREE_SIDE_EFFECTS (t) = 1;
2792 }
2793
2794 va_end (p);
2795 return t;
2796 }
2797
2798 /* Similar to `build', but for template definitions of non-dependent
2799 expressions. NON_DEP is the non-dependent expression that has been
2800 built. */
2801
2802 tree
2803 build_min_non_dep (enum tree_code code, tree non_dep, ...)
2804 {
2805 tree t;
2806 int length;
2807 int i;
2808 va_list p;
2809
2810 gcc_assert (TREE_CODE_CLASS (code) != tcc_vl_exp);
2811
2812 va_start (p, non_dep);
2813
2814 if (REFERENCE_REF_P (non_dep))
2815 non_dep = TREE_OPERAND (non_dep, 0);
2816
2817 t = make_node (code);
2818 length = TREE_CODE_LENGTH (code);
2819 TREE_TYPE (t) = TREE_TYPE (non_dep);
2820 TREE_SIDE_EFFECTS (t) = TREE_SIDE_EFFECTS (non_dep);
2821
2822 for (i = 0; i < length; i++)
2823 {
2824 tree x = va_arg (p, tree);
2825 TREE_OPERAND (t, i) = x;
2826 }
2827
2828 if (code == COMPOUND_EXPR && TREE_CODE (non_dep) != COMPOUND_EXPR)
2829 /* This should not be considered a COMPOUND_EXPR, because it
2830 resolves to an overload. */
2831 COMPOUND_EXPR_OVERLOADED (t) = 1;
2832
2833 va_end (p);
2834 return convert_from_reference (t);
2835 }
2836
2837 /* Similar to `build_nt_call_vec', but for template definitions of
2838 non-dependent expressions. NON_DEP is the non-dependent expression
2839 that has been built. */
2840
2841 tree
2842 build_min_non_dep_call_vec (tree non_dep, tree fn, vec<tree, va_gc> *argvec)
2843 {
2844 tree t = build_nt_call_vec (fn, argvec);
2845 if (REFERENCE_REF_P (non_dep))
2846 non_dep = TREE_OPERAND (non_dep, 0);
2847 TREE_TYPE (t) = TREE_TYPE (non_dep);
2848 TREE_SIDE_EFFECTS (t) = TREE_SIDE_EFFECTS (non_dep);
2849 return convert_from_reference (t);
2850 }
2851
2852 /* Similar to build_min_non_dep, but for expressions that have been resolved to
2853 a call to an operator overload. OP is the operator that has been
2854 overloaded. NON_DEP is the non-dependent expression that's been built,
2855 which should be a CALL_EXPR or an INDIRECT_REF to a CALL_EXPR. OVERLOAD is
2856 the overload that NON_DEP is calling. */
2857
2858 tree
2859 build_min_non_dep_op_overload (enum tree_code op,
2860 tree non_dep,
2861 tree overload, ...)
2862 {
2863 va_list p;
2864 int nargs, expected_nargs;
2865 tree fn, call;
2866 vec<tree, va_gc> *args;
2867
2868 if (REFERENCE_REF_P (non_dep))
2869 non_dep = TREE_OPERAND (non_dep, 0);
2870
2871 nargs = call_expr_nargs (non_dep);
2872
2873 expected_nargs = cp_tree_code_length (op);
2874 if (op == POSTINCREMENT_EXPR
2875 || op == POSTDECREMENT_EXPR)
2876 expected_nargs += 1;
2877 gcc_assert (nargs == expected_nargs);
2878
2879 args = make_tree_vector ();
2880 va_start (p, overload);
2881
2882 if (TREE_CODE (TREE_TYPE (overload)) == FUNCTION_TYPE)
2883 {
2884 fn = overload;
2885 for (int i = 0; i < nargs; i++)
2886 {
2887 tree arg = va_arg (p, tree);
2888 vec_safe_push (args, arg);
2889 }
2890 }
2891 else if (TREE_CODE (TREE_TYPE (overload)) == METHOD_TYPE)
2892 {
2893 tree object = va_arg (p, tree);
2894 tree binfo = TYPE_BINFO (TREE_TYPE (object));
2895 tree method = build_baselink (binfo, binfo, overload, NULL_TREE);
2896 fn = build_min (COMPONENT_REF, TREE_TYPE (overload),
2897 object, method, NULL_TREE);
2898 for (int i = 1; i < nargs; i++)
2899 {
2900 tree arg = va_arg (p, tree);
2901 vec_safe_push (args, arg);
2902 }
2903 }
2904 else
2905 gcc_unreachable ();
2906
2907 va_end (p);
2908 call = build_min_non_dep_call_vec (non_dep, fn, args);
2909 release_tree_vector (args);
2910
2911 tree call_expr = call;
2912 if (REFERENCE_REF_P (call_expr))
2913 call_expr = TREE_OPERAND (call_expr, 0);
2914 KOENIG_LOOKUP_P (call_expr) = KOENIG_LOOKUP_P (non_dep);
2915
2916 return call;
2917 }
2918
2919 tree
2920 get_type_decl (tree t)
2921 {
2922 if (TREE_CODE (t) == TYPE_DECL)
2923 return t;
2924 if (TYPE_P (t))
2925 return TYPE_STUB_DECL (t);
2926 gcc_assert (t == error_mark_node);
2927 return t;
2928 }
2929
2930 /* Returns the namespace that contains DECL, whether directly or
2931 indirectly. */
2932
2933 tree
2934 decl_namespace_context (tree decl)
2935 {
2936 while (1)
2937 {
2938 if (TREE_CODE (decl) == NAMESPACE_DECL)
2939 return decl;
2940 else if (TYPE_P (decl))
2941 decl = CP_DECL_CONTEXT (TYPE_MAIN_DECL (decl));
2942 else
2943 decl = CP_DECL_CONTEXT (decl);
2944 }
2945 }
2946
2947 /* Returns true if decl is within an anonymous namespace, however deeply
2948 nested, or false otherwise. */
2949
2950 bool
2951 decl_anon_ns_mem_p (const_tree decl)
2952 {
2953 while (1)
2954 {
2955 if (decl == NULL_TREE || decl == error_mark_node)
2956 return false;
2957 if (TREE_CODE (decl) == NAMESPACE_DECL
2958 && DECL_NAME (decl) == NULL_TREE)
2959 return true;
2960 /* Classes and namespaces inside anonymous namespaces have
2961 TREE_PUBLIC == 0, so we can shortcut the search. */
2962 else if (TYPE_P (decl))
2963 return (TREE_PUBLIC (TYPE_MAIN_DECL (decl)) == 0);
2964 else if (TREE_CODE (decl) == NAMESPACE_DECL)
2965 return (TREE_PUBLIC (decl) == 0);
2966 else
2967 decl = DECL_CONTEXT (decl);
2968 }
2969 }
2970
2971 /* Subroutine of cp_tree_equal: t1 and t2 are the CALL_EXPR_FNs of two
2972 CALL_EXPRS. Return whether they are equivalent. */
2973
2974 static bool
2975 called_fns_equal (tree t1, tree t2)
2976 {
2977 /* Core 1321: dependent names are equivalent even if the overload sets
2978 are different. But do compare explicit template arguments. */
2979 tree name1 = dependent_name (t1);
2980 tree name2 = dependent_name (t2);
2981 if (name1 || name2)
2982 {
2983 tree targs1 = NULL_TREE, targs2 = NULL_TREE;
2984
2985 if (name1 != name2)
2986 return false;
2987
2988 if (TREE_CODE (t1) == TEMPLATE_ID_EXPR)
2989 targs1 = TREE_OPERAND (t1, 1);
2990 if (TREE_CODE (t2) == TEMPLATE_ID_EXPR)
2991 targs2 = TREE_OPERAND (t2, 1);
2992 return cp_tree_equal (targs1, targs2);
2993 }
2994 else
2995 return cp_tree_equal (t1, t2);
2996 }
2997
2998 /* Return truthvalue of whether T1 is the same tree structure as T2.
2999 Return 1 if they are the same. Return 0 if they are different. */
3000
3001 bool
3002 cp_tree_equal (tree t1, tree t2)
3003 {
3004 enum tree_code code1, code2;
3005
3006 if (t1 == t2)
3007 return true;
3008 if (!t1 || !t2)
3009 return false;
3010
3011 code1 = TREE_CODE (t1);
3012 code2 = TREE_CODE (t2);
3013
3014 if (code1 != code2)
3015 return false;
3016
3017 switch (code1)
3018 {
3019 case VOID_CST:
3020 /* There's only a single VOID_CST node, so we should never reach
3021 here. */
3022 gcc_unreachable ();
3023
3024 case INTEGER_CST:
3025 return tree_int_cst_equal (t1, t2);
3026
3027 case REAL_CST:
3028 return real_equal (&TREE_REAL_CST (t1), &TREE_REAL_CST (t2));
3029
3030 case STRING_CST:
3031 return TREE_STRING_LENGTH (t1) == TREE_STRING_LENGTH (t2)
3032 && !memcmp (TREE_STRING_POINTER (t1), TREE_STRING_POINTER (t2),
3033 TREE_STRING_LENGTH (t1));
3034
3035 case FIXED_CST:
3036 return FIXED_VALUES_IDENTICAL (TREE_FIXED_CST (t1),
3037 TREE_FIXED_CST (t2));
3038
3039 case COMPLEX_CST:
3040 return cp_tree_equal (TREE_REALPART (t1), TREE_REALPART (t2))
3041 && cp_tree_equal (TREE_IMAGPART (t1), TREE_IMAGPART (t2));
3042
3043 case VECTOR_CST:
3044 return operand_equal_p (t1, t2, OEP_ONLY_CONST);
3045
3046 case CONSTRUCTOR:
3047 /* We need to do this when determining whether or not two
3048 non-type pointer to member function template arguments
3049 are the same. */
3050 if (!same_type_p (TREE_TYPE (t1), TREE_TYPE (t2))
3051 || CONSTRUCTOR_NELTS (t1) != CONSTRUCTOR_NELTS (t2))
3052 return false;
3053 {
3054 tree field, value;
3055 unsigned int i;
3056 FOR_EACH_CONSTRUCTOR_ELT (CONSTRUCTOR_ELTS (t1), i, field, value)
3057 {
3058 constructor_elt *elt2 = CONSTRUCTOR_ELT (t2, i);
3059 if (!cp_tree_equal (field, elt2->index)
3060 || !cp_tree_equal (value, elt2->value))
3061 return false;
3062 }
3063 }
3064 return true;
3065
3066 case TREE_LIST:
3067 if (!cp_tree_equal (TREE_PURPOSE (t1), TREE_PURPOSE (t2)))
3068 return false;
3069 if (!cp_tree_equal (TREE_VALUE (t1), TREE_VALUE (t2)))
3070 return false;
3071 return cp_tree_equal (TREE_CHAIN (t1), TREE_CHAIN (t2));
3072
3073 case SAVE_EXPR:
3074 return cp_tree_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0));
3075
3076 case CALL_EXPR:
3077 {
3078 tree arg1, arg2;
3079 call_expr_arg_iterator iter1, iter2;
3080 if (!called_fns_equal (CALL_EXPR_FN (t1), CALL_EXPR_FN (t2)))
3081 return false;
3082 for (arg1 = first_call_expr_arg (t1, &iter1),
3083 arg2 = first_call_expr_arg (t2, &iter2);
3084 arg1 && arg2;
3085 arg1 = next_call_expr_arg (&iter1),
3086 arg2 = next_call_expr_arg (&iter2))
3087 if (!cp_tree_equal (arg1, arg2))
3088 return false;
3089 if (arg1 || arg2)
3090 return false;
3091 return true;
3092 }
3093
3094 case TARGET_EXPR:
3095 {
3096 tree o1 = TREE_OPERAND (t1, 0);
3097 tree o2 = TREE_OPERAND (t2, 0);
3098
3099 /* Special case: if either target is an unallocated VAR_DECL,
3100 it means that it's going to be unified with whatever the
3101 TARGET_EXPR is really supposed to initialize, so treat it
3102 as being equivalent to anything. */
3103 if (VAR_P (o1) && DECL_NAME (o1) == NULL_TREE
3104 && !DECL_RTL_SET_P (o1))
3105 /*Nop*/;
3106 else if (VAR_P (o2) && DECL_NAME (o2) == NULL_TREE
3107 && !DECL_RTL_SET_P (o2))
3108 /*Nop*/;
3109 else if (!cp_tree_equal (o1, o2))
3110 return false;
3111
3112 return cp_tree_equal (TREE_OPERAND (t1, 1), TREE_OPERAND (t2, 1));
3113 }
3114
3115 case WITH_CLEANUP_EXPR:
3116 if (!cp_tree_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0)))
3117 return false;
3118 return cp_tree_equal (TREE_OPERAND (t1, 1), TREE_OPERAND (t1, 1));
3119
3120 case COMPONENT_REF:
3121 if (TREE_OPERAND (t1, 1) != TREE_OPERAND (t2, 1))
3122 return false;
3123 return cp_tree_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0));
3124
3125 case PARM_DECL:
3126 /* For comparing uses of parameters in late-specified return types
3127 with an out-of-class definition of the function, but can also come
3128 up for expressions that involve 'this' in a member function
3129 template. */
3130
3131 if (comparing_specializations && !CONSTRAINT_VAR_P (t1))
3132 /* When comparing hash table entries, only an exact match is
3133 good enough; we don't want to replace 'this' with the
3134 version from another function. But be more flexible
3135 with local parameters in a requires-expression. */
3136 return false;
3137
3138 if (same_type_p (TREE_TYPE (t1), TREE_TYPE (t2)))
3139 {
3140 if (DECL_ARTIFICIAL (t1) ^ DECL_ARTIFICIAL (t2))
3141 return false;
3142 if (CONSTRAINT_VAR_P (t1) ^ CONSTRAINT_VAR_P (t2))
3143 return false;
3144 if (DECL_ARTIFICIAL (t1)
3145 || (DECL_PARM_LEVEL (t1) == DECL_PARM_LEVEL (t2)
3146 && DECL_PARM_INDEX (t1) == DECL_PARM_INDEX (t2)))
3147 return true;
3148 }
3149 return false;
3150
3151 case VAR_DECL:
3152 case CONST_DECL:
3153 case FIELD_DECL:
3154 case FUNCTION_DECL:
3155 case TEMPLATE_DECL:
3156 case IDENTIFIER_NODE:
3157 case SSA_NAME:
3158 return false;
3159
3160 case BASELINK:
3161 return (BASELINK_BINFO (t1) == BASELINK_BINFO (t2)
3162 && BASELINK_ACCESS_BINFO (t1) == BASELINK_ACCESS_BINFO (t2)
3163 && BASELINK_QUALIFIED_P (t1) == BASELINK_QUALIFIED_P (t2)
3164 && cp_tree_equal (BASELINK_FUNCTIONS (t1),
3165 BASELINK_FUNCTIONS (t2)));
3166
3167 case TEMPLATE_PARM_INDEX:
3168 return (TEMPLATE_PARM_IDX (t1) == TEMPLATE_PARM_IDX (t2)
3169 && TEMPLATE_PARM_LEVEL (t1) == TEMPLATE_PARM_LEVEL (t2)
3170 && (TEMPLATE_PARM_PARAMETER_PACK (t1)
3171 == TEMPLATE_PARM_PARAMETER_PACK (t2))
3172 && same_type_p (TREE_TYPE (TEMPLATE_PARM_DECL (t1)),
3173 TREE_TYPE (TEMPLATE_PARM_DECL (t2))));
3174
3175 case TEMPLATE_ID_EXPR:
3176 return (cp_tree_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0))
3177 && cp_tree_equal (TREE_OPERAND (t1, 1), TREE_OPERAND (t2, 1)));
3178
3179 case CONSTRAINT_INFO:
3180 return cp_tree_equal (CI_ASSOCIATED_CONSTRAINTS (t1),
3181 CI_ASSOCIATED_CONSTRAINTS (t2));
3182
3183 case TREE_VEC:
3184 {
3185 unsigned ix;
3186 if (TREE_VEC_LENGTH (t1) != TREE_VEC_LENGTH (t2))
3187 return false;
3188 for (ix = TREE_VEC_LENGTH (t1); ix--;)
3189 if (!cp_tree_equal (TREE_VEC_ELT (t1, ix),
3190 TREE_VEC_ELT (t2, ix)))
3191 return false;
3192 return true;
3193 }
3194
3195 case SIZEOF_EXPR:
3196 case ALIGNOF_EXPR:
3197 {
3198 tree o1 = TREE_OPERAND (t1, 0);
3199 tree o2 = TREE_OPERAND (t2, 0);
3200
3201 if (code1 == SIZEOF_EXPR)
3202 {
3203 if (SIZEOF_EXPR_TYPE_P (t1))
3204 o1 = TREE_TYPE (o1);
3205 if (SIZEOF_EXPR_TYPE_P (t2))
3206 o2 = TREE_TYPE (o2);
3207 }
3208 if (TREE_CODE (o1) != TREE_CODE (o2))
3209 return false;
3210 if (TYPE_P (o1))
3211 return same_type_p (o1, o2);
3212 else
3213 return cp_tree_equal (o1, o2);
3214 }
3215
3216 case MODOP_EXPR:
3217 {
3218 tree t1_op1, t2_op1;
3219
3220 if (!cp_tree_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0)))
3221 return false;
3222
3223 t1_op1 = TREE_OPERAND (t1, 1);
3224 t2_op1 = TREE_OPERAND (t2, 1);
3225 if (TREE_CODE (t1_op1) != TREE_CODE (t2_op1))
3226 return false;
3227
3228 return cp_tree_equal (TREE_OPERAND (t1, 2), TREE_OPERAND (t2, 2));
3229 }
3230
3231 case PTRMEM_CST:
3232 /* Two pointer-to-members are the same if they point to the same
3233 field or function in the same class. */
3234 if (PTRMEM_CST_MEMBER (t1) != PTRMEM_CST_MEMBER (t2))
3235 return false;
3236
3237 return same_type_p (PTRMEM_CST_CLASS (t1), PTRMEM_CST_CLASS (t2));
3238
3239 case OVERLOAD:
3240 if (OVL_FUNCTION (t1) != OVL_FUNCTION (t2))
3241 return false;
3242 return cp_tree_equal (OVL_CHAIN (t1), OVL_CHAIN (t2));
3243
3244 case TRAIT_EXPR:
3245 if (TRAIT_EXPR_KIND (t1) != TRAIT_EXPR_KIND (t2))
3246 return false;
3247 return same_type_p (TRAIT_EXPR_TYPE1 (t1), TRAIT_EXPR_TYPE1 (t2))
3248 && cp_tree_equal (TRAIT_EXPR_TYPE2 (t1), TRAIT_EXPR_TYPE2 (t2));
3249
3250 case CAST_EXPR:
3251 case STATIC_CAST_EXPR:
3252 case REINTERPRET_CAST_EXPR:
3253 case CONST_CAST_EXPR:
3254 case DYNAMIC_CAST_EXPR:
3255 case IMPLICIT_CONV_EXPR:
3256 case NEW_EXPR:
3257 CASE_CONVERT:
3258 case NON_LVALUE_EXPR:
3259 case VIEW_CONVERT_EXPR:
3260 if (!same_type_p (TREE_TYPE (t1), TREE_TYPE (t2)))
3261 return false;
3262 /* Now compare operands as usual. */
3263 break;
3264
3265 case DEFERRED_NOEXCEPT:
3266 return (cp_tree_equal (DEFERRED_NOEXCEPT_PATTERN (t1),
3267 DEFERRED_NOEXCEPT_PATTERN (t2))
3268 && comp_template_args (DEFERRED_NOEXCEPT_ARGS (t1),
3269 DEFERRED_NOEXCEPT_ARGS (t2)));
3270 break;
3271
3272 default:
3273 break;
3274 }
3275
3276 switch (TREE_CODE_CLASS (code1))
3277 {
3278 case tcc_unary:
3279 case tcc_binary:
3280 case tcc_comparison:
3281 case tcc_expression:
3282 case tcc_vl_exp:
3283 case tcc_reference:
3284 case tcc_statement:
3285 {
3286 int i, n;
3287
3288 n = cp_tree_operand_length (t1);
3289 if (TREE_CODE_CLASS (code1) == tcc_vl_exp
3290 && n != TREE_OPERAND_LENGTH (t2))
3291 return false;
3292
3293 for (i = 0; i < n; ++i)
3294 if (!cp_tree_equal (TREE_OPERAND (t1, i), TREE_OPERAND (t2, i)))
3295 return false;
3296
3297 return true;
3298 }
3299
3300 case tcc_type:
3301 return same_type_p (t1, t2);
3302 default:
3303 gcc_unreachable ();
3304 }
3305 /* We can get here with --disable-checking. */
3306 return false;
3307 }
3308
3309 /* The type of ARG when used as an lvalue. */
3310
3311 tree
3312 lvalue_type (tree arg)
3313 {
3314 tree type = TREE_TYPE (arg);
3315 return type;
3316 }
3317
3318 /* The type of ARG for printing error messages; denote lvalues with
3319 reference types. */
3320
3321 tree
3322 error_type (tree arg)
3323 {
3324 tree type = TREE_TYPE (arg);
3325
3326 if (TREE_CODE (type) == ARRAY_TYPE)
3327 ;
3328 else if (TREE_CODE (type) == ERROR_MARK)
3329 ;
3330 else if (real_lvalue_p (arg))
3331 type = build_reference_type (lvalue_type (arg));
3332 else if (MAYBE_CLASS_TYPE_P (type))
3333 type = lvalue_type (arg);
3334
3335 return type;
3336 }
3337
3338 /* Does FUNCTION use a variable-length argument list? */
3339
3340 int
3341 varargs_function_p (const_tree function)
3342 {
3343 return stdarg_p (TREE_TYPE (function));
3344 }
3345
3346 /* Returns 1 if decl is a member of a class. */
3347
3348 int
3349 member_p (const_tree decl)
3350 {
3351 const_tree const ctx = DECL_CONTEXT (decl);
3352 return (ctx && TYPE_P (ctx));
3353 }
3354
3355 /* Create a placeholder for member access where we don't actually have an
3356 object that the access is against. */
3357
3358 tree
3359 build_dummy_object (tree type)
3360 {
3361 tree decl = build1 (CONVERT_EXPR, build_pointer_type (type), void_node);
3362 return cp_build_indirect_ref (decl, RO_NULL, tf_warning_or_error);
3363 }
3364
3365 /* We've gotten a reference to a member of TYPE. Return *this if appropriate,
3366 or a dummy object otherwise. If BINFOP is non-0, it is filled with the
3367 binfo path from current_class_type to TYPE, or 0. */
3368
3369 tree
3370 maybe_dummy_object (tree type, tree* binfop)
3371 {
3372 tree decl, context;
3373 tree binfo;
3374 tree current = current_nonlambda_class_type ();
3375
3376 if (current
3377 && (binfo = lookup_base (current, type, ba_any, NULL,
3378 tf_warning_or_error)))
3379 context = current;
3380 else
3381 {
3382 /* Reference from a nested class member function. */
3383 context = type;
3384 binfo = TYPE_BINFO (type);
3385 }
3386
3387 if (binfop)
3388 *binfop = binfo;
3389
3390 if (current_class_ref
3391 /* current_class_ref might not correspond to current_class_type if
3392 we're in tsubst_default_argument or a lambda-declarator; in either
3393 case, we want to use current_class_ref if it matches CONTEXT. */
3394 && (same_type_ignoring_top_level_qualifiers_p
3395 (TREE_TYPE (current_class_ref), context)))
3396 decl = current_class_ref;
3397 else
3398 decl = build_dummy_object (context);
3399
3400 return decl;
3401 }
3402
3403 /* Returns 1 if OB is a placeholder object, or a pointer to one. */
3404
3405 int
3406 is_dummy_object (const_tree ob)
3407 {
3408 if (INDIRECT_REF_P (ob))
3409 ob = TREE_OPERAND (ob, 0);
3410 return (TREE_CODE (ob) == CONVERT_EXPR
3411 && TREE_OPERAND (ob, 0) == void_node);
3412 }
3413
3414 /* Returns 1 iff type T is something we want to treat as a scalar type for
3415 the purpose of deciding whether it is trivial/POD/standard-layout. */
3416
3417 bool
3418 scalarish_type_p (const_tree t)
3419 {
3420 if (t == error_mark_node)
3421 return 1;
3422
3423 return (SCALAR_TYPE_P (t) || VECTOR_TYPE_P (t));
3424 }
3425
3426 /* Returns true iff T requires non-trivial default initialization. */
3427
3428 bool
3429 type_has_nontrivial_default_init (const_tree t)
3430 {
3431 t = strip_array_types (CONST_CAST_TREE (t));
3432
3433 if (CLASS_TYPE_P (t))
3434 return TYPE_HAS_COMPLEX_DFLT (t);
3435 else
3436 return 0;
3437 }
3438
3439 /* Returns true iff copying an object of type T (including via move
3440 constructor) is non-trivial. That is, T has no non-trivial copy
3441 constructors and no non-trivial move constructors. */
3442
3443 bool
3444 type_has_nontrivial_copy_init (const_tree t)
3445 {
3446 t = strip_array_types (CONST_CAST_TREE (t));
3447
3448 if (CLASS_TYPE_P (t))
3449 {
3450 gcc_assert (COMPLETE_TYPE_P (t));
3451 return ((TYPE_HAS_COPY_CTOR (t)
3452 && TYPE_HAS_COMPLEX_COPY_CTOR (t))
3453 || TYPE_HAS_COMPLEX_MOVE_CTOR (t));
3454 }
3455 else
3456 return 0;
3457 }
3458
3459 /* Returns 1 iff type T is a trivially copyable type, as defined in
3460 [basic.types] and [class]. */
3461
3462 bool
3463 trivially_copyable_p (const_tree t)
3464 {
3465 t = strip_array_types (CONST_CAST_TREE (t));
3466
3467 if (CLASS_TYPE_P (t))
3468 return ((!TYPE_HAS_COPY_CTOR (t)
3469 || !TYPE_HAS_COMPLEX_COPY_CTOR (t))
3470 && !TYPE_HAS_COMPLEX_MOVE_CTOR (t)
3471 && (!TYPE_HAS_COPY_ASSIGN (t)
3472 || !TYPE_HAS_COMPLEX_COPY_ASSIGN (t))
3473 && !TYPE_HAS_COMPLEX_MOVE_ASSIGN (t)
3474 && TYPE_HAS_TRIVIAL_DESTRUCTOR (t));
3475 else
3476 return !CP_TYPE_VOLATILE_P (t) && scalarish_type_p (t);
3477 }
3478
3479 /* Returns 1 iff type T is a trivial type, as defined in [basic.types] and
3480 [class]. */
3481
3482 bool
3483 trivial_type_p (const_tree t)
3484 {
3485 t = strip_array_types (CONST_CAST_TREE (t));
3486
3487 if (CLASS_TYPE_P (t))
3488 return (TYPE_HAS_TRIVIAL_DFLT (t)
3489 && trivially_copyable_p (t));
3490 else
3491 return scalarish_type_p (t);
3492 }
3493
3494 /* Returns 1 iff type T is a POD type, as defined in [basic.types]. */
3495
3496 bool
3497 pod_type_p (const_tree t)
3498 {
3499 /* This CONST_CAST is okay because strip_array_types returns its
3500 argument unmodified and we assign it to a const_tree. */
3501 t = strip_array_types (CONST_CAST_TREE(t));
3502
3503 if (!CLASS_TYPE_P (t))
3504 return scalarish_type_p (t);
3505 else if (cxx_dialect > cxx98)
3506 /* [class]/10: A POD struct is a class that is both a trivial class and a
3507 standard-layout class, and has no non-static data members of type
3508 non-POD struct, non-POD union (or array of such types).
3509
3510 We don't need to check individual members because if a member is
3511 non-std-layout or non-trivial, the class will be too. */
3512 return (std_layout_type_p (t) && trivial_type_p (t));
3513 else
3514 /* The C++98 definition of POD is different. */
3515 return !CLASSTYPE_NON_LAYOUT_POD_P (t);
3516 }
3517
3518 /* Returns true iff T is POD for the purpose of layout, as defined in the
3519 C++ ABI. */
3520
3521 bool
3522 layout_pod_type_p (const_tree t)
3523 {
3524 t = strip_array_types (CONST_CAST_TREE (t));
3525
3526 if (CLASS_TYPE_P (t))
3527 return !CLASSTYPE_NON_LAYOUT_POD_P (t);
3528 else
3529 return scalarish_type_p (t);
3530 }
3531
3532 /* Returns true iff T is a standard-layout type, as defined in
3533 [basic.types]. */
3534
3535 bool
3536 std_layout_type_p (const_tree t)
3537 {
3538 t = strip_array_types (CONST_CAST_TREE (t));
3539
3540 if (CLASS_TYPE_P (t))
3541 return !CLASSTYPE_NON_STD_LAYOUT (t);
3542 else
3543 return scalarish_type_p (t);
3544 }
3545
3546 /* Nonzero iff type T is a class template implicit specialization. */
3547
3548 bool
3549 class_tmpl_impl_spec_p (const_tree t)
3550 {
3551 return CLASS_TYPE_P (t) && CLASSTYPE_TEMPLATE_INSTANTIATION (t);
3552 }
3553
3554 /* Returns 1 iff zero initialization of type T means actually storing
3555 zeros in it. */
3556
3557 int
3558 zero_init_p (const_tree t)
3559 {
3560 /* This CONST_CAST is okay because strip_array_types returns its
3561 argument unmodified and we assign it to a const_tree. */
3562 t = strip_array_types (CONST_CAST_TREE(t));
3563
3564 if (t == error_mark_node)
3565 return 1;
3566
3567 /* NULL pointers to data members are initialized with -1. */
3568 if (TYPE_PTRDATAMEM_P (t))
3569 return 0;
3570
3571 /* Classes that contain types that can't be zero-initialized, cannot
3572 be zero-initialized themselves. */
3573 if (CLASS_TYPE_P (t) && CLASSTYPE_NON_ZERO_INIT_P (t))
3574 return 0;
3575
3576 return 1;
3577 }
3578
3579 /* Handle the C++17 [[nodiscard]] attribute, which is similar to the GNU
3580 warn_unused_result attribute. */
3581
3582 static tree
3583 handle_nodiscard_attribute (tree *node, tree name, tree /*args*/,
3584 int /*flags*/, bool *no_add_attrs)
3585 {
3586 if (TREE_CODE (*node) == FUNCTION_DECL)
3587 {
3588 if (VOID_TYPE_P (TREE_TYPE (TREE_TYPE (*node))))
3589 warning (OPT_Wattributes, "%qE attribute applied to %qD with void "
3590 "return type", name, *node);
3591 }
3592 else if (OVERLOAD_TYPE_P (*node))
3593 /* OK */;
3594 else
3595 {
3596 warning (OPT_Wattributes, "%qE attribute can only be applied to "
3597 "functions or to class or enumeration types", name);
3598 *no_add_attrs = true;
3599 }
3600 return NULL_TREE;
3601 }
3602
3603 /* Table of valid C++ attributes. */
3604 const struct attribute_spec cxx_attribute_table[] =
3605 {
3606 /* { name, min_len, max_len, decl_req, type_req, fn_type_req, handler,
3607 affects_type_identity } */
3608 { "java_interface", 0, 0, false, false, false,
3609 handle_java_interface_attribute, false },
3610 { "init_priority", 1, 1, true, false, false,
3611 handle_init_priority_attribute, false },
3612 { "abi_tag", 1, -1, false, false, false,
3613 handle_abi_tag_attribute, true },
3614 { NULL, 0, 0, false, false, false, NULL, false }
3615 };
3616
3617 /* Table of C++ standard attributes. */
3618 const struct attribute_spec std_attribute_table[] =
3619 {
3620 /* { name, min_len, max_len, decl_req, type_req, fn_type_req, handler,
3621 affects_type_identity } */
3622 { "maybe_unused", 0, 0, false, false, false,
3623 handle_unused_attribute, false },
3624 { "nodiscard", 0, 0, false, false, false,
3625 handle_nodiscard_attribute, false },
3626 { NULL, 0, 0, false, false, false, NULL, false }
3627 };
3628
3629 /* Handle a "java_interface" attribute; arguments as in
3630 struct attribute_spec.handler. */
3631 static tree
3632 handle_java_interface_attribute (tree* node,
3633 tree name,
3634 tree /*args*/,
3635 int flags,
3636 bool* no_add_attrs)
3637 {
3638 if (DECL_P (*node)
3639 || !CLASS_TYPE_P (*node)
3640 || !TYPE_FOR_JAVA (*node))
3641 {
3642 error ("%qE attribute can only be applied to Java class definitions",
3643 name);
3644 *no_add_attrs = true;
3645 return NULL_TREE;
3646 }
3647 if (!(flags & (int) ATTR_FLAG_TYPE_IN_PLACE))
3648 *node = build_variant_type_copy (*node);
3649 TYPE_JAVA_INTERFACE (*node) = 1;
3650
3651 return NULL_TREE;
3652 }
3653
3654 /* Handle an "init_priority" attribute; arguments as in
3655 struct attribute_spec.handler. */
3656 static tree
3657 handle_init_priority_attribute (tree* node,
3658 tree name,
3659 tree args,
3660 int /*flags*/,
3661 bool* no_add_attrs)
3662 {
3663 tree initp_expr = TREE_VALUE (args);
3664 tree decl = *node;
3665 tree type = TREE_TYPE (decl);
3666 int pri;
3667
3668 STRIP_NOPS (initp_expr);
3669 initp_expr = default_conversion (initp_expr);
3670 if (initp_expr)
3671 initp_expr = maybe_constant_value (initp_expr);
3672
3673 if (!initp_expr || TREE_CODE (initp_expr) != INTEGER_CST)
3674 {
3675 error ("requested init_priority is not an integer constant");
3676 cxx_constant_value (initp_expr);
3677 *no_add_attrs = true;
3678 return NULL_TREE;
3679 }
3680
3681 pri = TREE_INT_CST_LOW (initp_expr);
3682
3683 type = strip_array_types (type);
3684
3685 if (decl == NULL_TREE
3686 || !VAR_P (decl)
3687 || !TREE_STATIC (decl)
3688 || DECL_EXTERNAL (decl)
3689 || (TREE_CODE (type) != RECORD_TYPE
3690 && TREE_CODE (type) != UNION_TYPE)
3691 /* Static objects in functions are initialized the
3692 first time control passes through that
3693 function. This is not precise enough to pin down an
3694 init_priority value, so don't allow it. */
3695 || current_function_decl)
3696 {
3697 error ("can only use %qE attribute on file-scope definitions "
3698 "of objects of class type", name);
3699 *no_add_attrs = true;
3700 return NULL_TREE;
3701 }
3702
3703 if (pri > MAX_INIT_PRIORITY || pri <= 0)
3704 {
3705 error ("requested init_priority is out of range");
3706 *no_add_attrs = true;
3707 return NULL_TREE;
3708 }
3709
3710 /* Check for init_priorities that are reserved for
3711 language and runtime support implementations.*/
3712 if (pri <= MAX_RESERVED_INIT_PRIORITY)
3713 {
3714 warning
3715 (0, "requested init_priority is reserved for internal use");
3716 }
3717
3718 if (SUPPORTS_INIT_PRIORITY)
3719 {
3720 SET_DECL_INIT_PRIORITY (decl, pri);
3721 DECL_HAS_INIT_PRIORITY_P (decl) = 1;
3722 return NULL_TREE;
3723 }
3724 else
3725 {
3726 error ("%qE attribute is not supported on this platform", name);
3727 *no_add_attrs = true;
3728 return NULL_TREE;
3729 }
3730 }
3731
3732 /* DECL is being redeclared; the old declaration had the abi tags in OLD,
3733 and the new one has the tags in NEW_. Give an error if there are tags
3734 in NEW_ that weren't in OLD. */
3735
3736 bool
3737 check_abi_tag_redeclaration (const_tree decl, const_tree old, const_tree new_)
3738 {
3739 if (old && TREE_CODE (TREE_VALUE (old)) == TREE_LIST)
3740 old = TREE_VALUE (old);
3741 if (new_ && TREE_CODE (TREE_VALUE (new_)) == TREE_LIST)
3742 new_ = TREE_VALUE (new_);
3743 bool err = false;
3744 for (const_tree t = new_; t; t = TREE_CHAIN (t))
3745 {
3746 tree str = TREE_VALUE (t);
3747 for (const_tree in = old; in; in = TREE_CHAIN (in))
3748 {
3749 tree ostr = TREE_VALUE (in);
3750 if (cp_tree_equal (str, ostr))
3751 goto found;
3752 }
3753 error ("redeclaration of %qD adds abi tag %E", decl, str);
3754 err = true;
3755 found:;
3756 }
3757 if (err)
3758 {
3759 inform (DECL_SOURCE_LOCATION (decl), "previous declaration here");
3760 return false;
3761 }
3762 return true;
3763 }
3764
3765 /* The abi_tag attribute with the name NAME was given ARGS. If they are
3766 ill-formed, give an error and return false; otherwise, return true. */
3767
3768 bool
3769 check_abi_tag_args (tree args, tree name)
3770 {
3771 if (!args)
3772 {
3773 error ("the %qE attribute requires arguments", name);
3774 return false;
3775 }
3776 for (tree arg = args; arg; arg = TREE_CHAIN (arg))
3777 {
3778 tree elt = TREE_VALUE (arg);
3779 if (TREE_CODE (elt) != STRING_CST
3780 || (!same_type_ignoring_top_level_qualifiers_p
3781 (strip_array_types (TREE_TYPE (elt)),
3782 char_type_node)))
3783 {
3784 error ("arguments to the %qE attribute must be narrow string "
3785 "literals", name);
3786 return false;
3787 }
3788 const char *begin = TREE_STRING_POINTER (elt);
3789 const char *end = begin + TREE_STRING_LENGTH (elt);
3790 for (const char *p = begin; p != end; ++p)
3791 {
3792 char c = *p;
3793 if (p == begin)
3794 {
3795 if (!ISALPHA (c) && c != '_')
3796 {
3797 error ("arguments to the %qE attribute must contain valid "
3798 "identifiers", name);
3799 inform (input_location, "%<%c%> is not a valid first "
3800 "character for an identifier", c);
3801 return false;
3802 }
3803 }
3804 else if (p == end - 1)
3805 gcc_assert (c == 0);
3806 else
3807 {
3808 if (!ISALNUM (c) && c != '_')
3809 {
3810 error ("arguments to the %qE attribute must contain valid "
3811 "identifiers", name);
3812 inform (input_location, "%<%c%> is not a valid character "
3813 "in an identifier", c);
3814 return false;
3815 }
3816 }
3817 }
3818 }
3819 return true;
3820 }
3821
3822 /* Handle an "abi_tag" attribute; arguments as in
3823 struct attribute_spec.handler. */
3824
3825 static tree
3826 handle_abi_tag_attribute (tree* node, tree name, tree args,
3827 int flags, bool* no_add_attrs)
3828 {
3829 if (!check_abi_tag_args (args, name))
3830 goto fail;
3831
3832 if (TYPE_P (*node))
3833 {
3834 if (!OVERLOAD_TYPE_P (*node))
3835 {
3836 error ("%qE attribute applied to non-class, non-enum type %qT",
3837 name, *node);
3838 goto fail;
3839 }
3840 else if (!(flags & (int)ATTR_FLAG_TYPE_IN_PLACE))
3841 {
3842 error ("%qE attribute applied to %qT after its definition",
3843 name, *node);
3844 goto fail;
3845 }
3846 else if (CLASS_TYPE_P (*node)
3847 && CLASSTYPE_TEMPLATE_INSTANTIATION (*node))
3848 {
3849 warning (OPT_Wattributes, "ignoring %qE attribute applied to "
3850 "template instantiation %qT", name, *node);
3851 goto fail;
3852 }
3853 else if (CLASS_TYPE_P (*node)
3854 && CLASSTYPE_TEMPLATE_SPECIALIZATION (*node))
3855 {
3856 warning (OPT_Wattributes, "ignoring %qE attribute applied to "
3857 "template specialization %qT", name, *node);
3858 goto fail;
3859 }
3860
3861 tree attributes = TYPE_ATTRIBUTES (*node);
3862 tree decl = TYPE_NAME (*node);
3863
3864 /* Make sure all declarations have the same abi tags. */
3865 if (DECL_SOURCE_LOCATION (decl) != input_location)
3866 {
3867 if (!check_abi_tag_redeclaration (decl,
3868 lookup_attribute ("abi_tag",
3869 attributes),
3870 args))
3871 goto fail;
3872 }
3873 }
3874 else
3875 {
3876 if (!VAR_OR_FUNCTION_DECL_P (*node))
3877 {
3878 error ("%qE attribute applied to non-function, non-variable %qD",
3879 name, *node);
3880 goto fail;
3881 }
3882 else if (DECL_LANGUAGE (*node) == lang_c)
3883 {
3884 error ("%qE attribute applied to extern \"C\" declaration %qD",
3885 name, *node);
3886 goto fail;
3887 }
3888 }
3889
3890 return NULL_TREE;
3891
3892 fail:
3893 *no_add_attrs = true;
3894 return NULL_TREE;
3895 }
3896
3897 /* Return a new PTRMEM_CST of the indicated TYPE. The MEMBER is the
3898 thing pointed to by the constant. */
3899
3900 tree
3901 make_ptrmem_cst (tree type, tree member)
3902 {
3903 tree ptrmem_cst = make_node (PTRMEM_CST);
3904 TREE_TYPE (ptrmem_cst) = type;
3905 PTRMEM_CST_MEMBER (ptrmem_cst) = member;
3906 return ptrmem_cst;
3907 }
3908
3909 /* Build a variant of TYPE that has the indicated ATTRIBUTES. May
3910 return an existing type if an appropriate type already exists. */
3911
3912 tree
3913 cp_build_type_attribute_variant (tree type, tree attributes)
3914 {
3915 tree new_type;
3916
3917 new_type = build_type_attribute_variant (type, attributes);
3918 if (TREE_CODE (new_type) == FUNCTION_TYPE
3919 || TREE_CODE (new_type) == METHOD_TYPE)
3920 {
3921 new_type = build_exception_variant (new_type,
3922 TYPE_RAISES_EXCEPTIONS (type));
3923 new_type = build_ref_qualified_type (new_type,
3924 type_memfn_rqual (type));
3925 }
3926
3927 /* Making a new main variant of a class type is broken. */
3928 gcc_assert (!CLASS_TYPE_P (type) || new_type == type);
3929
3930 return new_type;
3931 }
3932
3933 /* Return TRUE if TYPE1 and TYPE2 are identical for type hashing purposes.
3934 Called only after doing all language independent checks. Only
3935 to check TYPE_RAISES_EXCEPTIONS for FUNCTION_TYPE, the rest is already
3936 compared in type_hash_eq. */
3937
3938 bool
3939 cxx_type_hash_eq (const_tree typea, const_tree typeb)
3940 {
3941 gcc_assert (TREE_CODE (typea) == FUNCTION_TYPE
3942 || TREE_CODE (typea) == METHOD_TYPE);
3943
3944 return comp_except_specs (TYPE_RAISES_EXCEPTIONS (typea),
3945 TYPE_RAISES_EXCEPTIONS (typeb), ce_exact);
3946 }
3947
3948 /* Apply FUNC to all language-specific sub-trees of TP in a pre-order
3949 traversal. Called from walk_tree. */
3950
3951 tree
3952 cp_walk_subtrees (tree *tp, int *walk_subtrees_p, walk_tree_fn func,
3953 void *data, hash_set<tree> *pset)
3954 {
3955 enum tree_code code = TREE_CODE (*tp);
3956 tree result;
3957
3958 #define WALK_SUBTREE(NODE) \
3959 do \
3960 { \
3961 result = cp_walk_tree (&(NODE), func, data, pset); \
3962 if (result) goto out; \
3963 } \
3964 while (0)
3965
3966 /* Not one of the easy cases. We must explicitly go through the
3967 children. */
3968 result = NULL_TREE;
3969 switch (code)
3970 {
3971 case DEFAULT_ARG:
3972 case TEMPLATE_TEMPLATE_PARM:
3973 case BOUND_TEMPLATE_TEMPLATE_PARM:
3974 case UNBOUND_CLASS_TEMPLATE:
3975 case TEMPLATE_PARM_INDEX:
3976 case TEMPLATE_TYPE_PARM:
3977 case TYPENAME_TYPE:
3978 case TYPEOF_TYPE:
3979 case UNDERLYING_TYPE:
3980 /* None of these have subtrees other than those already walked
3981 above. */
3982 *walk_subtrees_p = 0;
3983 break;
3984
3985 case BASELINK:
3986 WALK_SUBTREE (BASELINK_FUNCTIONS (*tp));
3987 *walk_subtrees_p = 0;
3988 break;
3989
3990 case PTRMEM_CST:
3991 WALK_SUBTREE (TREE_TYPE (*tp));
3992 *walk_subtrees_p = 0;
3993 break;
3994
3995 case TREE_LIST:
3996 WALK_SUBTREE (TREE_PURPOSE (*tp));
3997 break;
3998
3999 case OVERLOAD:
4000 WALK_SUBTREE (OVL_FUNCTION (*tp));
4001 WALK_SUBTREE (OVL_CHAIN (*tp));
4002 *walk_subtrees_p = 0;
4003 break;
4004
4005 case USING_DECL:
4006 WALK_SUBTREE (DECL_NAME (*tp));
4007 WALK_SUBTREE (USING_DECL_SCOPE (*tp));
4008 WALK_SUBTREE (USING_DECL_DECLS (*tp));
4009 *walk_subtrees_p = 0;
4010 break;
4011
4012 case RECORD_TYPE:
4013 if (TYPE_PTRMEMFUNC_P (*tp))
4014 WALK_SUBTREE (TYPE_PTRMEMFUNC_FN_TYPE_RAW (*tp));
4015 break;
4016
4017 case TYPE_ARGUMENT_PACK:
4018 case NONTYPE_ARGUMENT_PACK:
4019 {
4020 tree args = ARGUMENT_PACK_ARGS (*tp);
4021 int i, len = TREE_VEC_LENGTH (args);
4022 for (i = 0; i < len; i++)
4023 WALK_SUBTREE (TREE_VEC_ELT (args, i));
4024 }
4025 break;
4026
4027 case TYPE_PACK_EXPANSION:
4028 WALK_SUBTREE (TREE_TYPE (*tp));
4029 WALK_SUBTREE (PACK_EXPANSION_EXTRA_ARGS (*tp));
4030 *walk_subtrees_p = 0;
4031 break;
4032
4033 case EXPR_PACK_EXPANSION:
4034 WALK_SUBTREE (TREE_OPERAND (*tp, 0));
4035 WALK_SUBTREE (PACK_EXPANSION_EXTRA_ARGS (*tp));
4036 *walk_subtrees_p = 0;
4037 break;
4038
4039 case CAST_EXPR:
4040 case REINTERPRET_CAST_EXPR:
4041 case STATIC_CAST_EXPR:
4042 case CONST_CAST_EXPR:
4043 case DYNAMIC_CAST_EXPR:
4044 case IMPLICIT_CONV_EXPR:
4045 if (TREE_TYPE (*tp))
4046 WALK_SUBTREE (TREE_TYPE (*tp));
4047
4048 {
4049 int i;
4050 for (i = 0; i < TREE_CODE_LENGTH (TREE_CODE (*tp)); ++i)
4051 WALK_SUBTREE (TREE_OPERAND (*tp, i));
4052 }
4053 *walk_subtrees_p = 0;
4054 break;
4055
4056 case TRAIT_EXPR:
4057 WALK_SUBTREE (TRAIT_EXPR_TYPE1 (*tp));
4058 WALK_SUBTREE (TRAIT_EXPR_TYPE2 (*tp));
4059 *walk_subtrees_p = 0;
4060 break;
4061
4062 case DECLTYPE_TYPE:
4063 WALK_SUBTREE (DECLTYPE_TYPE_EXPR (*tp));
4064 *walk_subtrees_p = 0;
4065 break;
4066
4067 case REQUIRES_EXPR:
4068 // Only recurse through the nested expression. Do not
4069 // walk the parameter list. Doing so causes false
4070 // positives in the pack expansion checker since the
4071 // requires parameters are introduced as pack expansions.
4072 WALK_SUBTREE (TREE_OPERAND (*tp, 1));
4073 *walk_subtrees_p = 0;
4074 break;
4075
4076 default:
4077 return NULL_TREE;
4078 }
4079
4080 /* We didn't find what we were looking for. */
4081 out:
4082 return result;
4083
4084 #undef WALK_SUBTREE
4085 }
4086
4087 /* Like save_expr, but for C++. */
4088
4089 tree
4090 cp_save_expr (tree expr)
4091 {
4092 /* There is no reason to create a SAVE_EXPR within a template; if
4093 needed, we can create the SAVE_EXPR when instantiating the
4094 template. Furthermore, the middle-end cannot handle C++-specific
4095 tree codes. */
4096 if (processing_template_decl)
4097 return expr;
4098 return save_expr (expr);
4099 }
4100
4101 /* Initialize tree.c. */
4102
4103 void
4104 init_tree (void)
4105 {
4106 list_hash_table = hash_table<list_hasher>::create_ggc (61);
4107 register_scoped_attributes (std_attribute_table, NULL);
4108 }
4109
4110 /* Returns the kind of special function that DECL (a FUNCTION_DECL)
4111 is. Note that sfk_none is zero, so this function can be used as a
4112 predicate to test whether or not DECL is a special function. */
4113
4114 special_function_kind
4115 special_function_p (const_tree decl)
4116 {
4117 /* Rather than doing all this stuff with magic names, we should
4118 probably have a field of type `special_function_kind' in
4119 DECL_LANG_SPECIFIC. */
4120 if (DECL_INHERITED_CTOR_BASE (decl))
4121 return sfk_inheriting_constructor;
4122 if (DECL_COPY_CONSTRUCTOR_P (decl))
4123 return sfk_copy_constructor;
4124 if (DECL_MOVE_CONSTRUCTOR_P (decl))
4125 return sfk_move_constructor;
4126 if (DECL_CONSTRUCTOR_P (decl))
4127 return sfk_constructor;
4128 if (DECL_OVERLOADED_OPERATOR_P (decl) == NOP_EXPR)
4129 {
4130 if (copy_fn_p (decl))
4131 return sfk_copy_assignment;
4132 if (move_fn_p (decl))
4133 return sfk_move_assignment;
4134 }
4135 if (DECL_MAYBE_IN_CHARGE_DESTRUCTOR_P (decl))
4136 return sfk_destructor;
4137 if (DECL_COMPLETE_DESTRUCTOR_P (decl))
4138 return sfk_complete_destructor;
4139 if (DECL_BASE_DESTRUCTOR_P (decl))
4140 return sfk_base_destructor;
4141 if (DECL_DELETING_DESTRUCTOR_P (decl))
4142 return sfk_deleting_destructor;
4143 if (DECL_CONV_FN_P (decl))
4144 return sfk_conversion;
4145
4146 return sfk_none;
4147 }
4148
4149 /* Returns nonzero if TYPE is a character type, including wchar_t. */
4150
4151 int
4152 char_type_p (tree type)
4153 {
4154 return (same_type_p (type, char_type_node)
4155 || same_type_p (type, unsigned_char_type_node)
4156 || same_type_p (type, signed_char_type_node)
4157 || same_type_p (type, char16_type_node)
4158 || same_type_p (type, char32_type_node)
4159 || same_type_p (type, wchar_type_node));
4160 }
4161
4162 /* Returns the kind of linkage associated with the indicated DECL. Th
4163 value returned is as specified by the language standard; it is
4164 independent of implementation details regarding template
4165 instantiation, etc. For example, it is possible that a declaration
4166 to which this function assigns external linkage would not show up
4167 as a global symbol when you run `nm' on the resulting object file. */
4168
4169 linkage_kind
4170 decl_linkage (tree decl)
4171 {
4172 /* This function doesn't attempt to calculate the linkage from first
4173 principles as given in [basic.link]. Instead, it makes use of
4174 the fact that we have already set TREE_PUBLIC appropriately, and
4175 then handles a few special cases. Ideally, we would calculate
4176 linkage first, and then transform that into a concrete
4177 implementation. */
4178
4179 /* Things that don't have names have no linkage. */
4180 if (!DECL_NAME (decl))
4181 return lk_none;
4182
4183 /* Fields have no linkage. */
4184 if (TREE_CODE (decl) == FIELD_DECL)
4185 return lk_none;
4186
4187 /* Things that are TREE_PUBLIC have external linkage. */
4188 if (TREE_PUBLIC (decl))
4189 return lk_external;
4190
4191 if (TREE_CODE (decl) == NAMESPACE_DECL)
4192 return lk_external;
4193
4194 /* Linkage of a CONST_DECL depends on the linkage of the enumeration
4195 type. */
4196 if (TREE_CODE (decl) == CONST_DECL)
4197 return decl_linkage (TYPE_NAME (DECL_CONTEXT (decl)));
4198
4199 /* Things in local scope do not have linkage, if they don't have
4200 TREE_PUBLIC set. */
4201 if (decl_function_context (decl))
4202 return lk_none;
4203
4204 /* Members of the anonymous namespace also have TREE_PUBLIC unset, but
4205 are considered to have external linkage for language purposes, as do
4206 template instantiations on targets without weak symbols. DECLs really
4207 meant to have internal linkage have DECL_THIS_STATIC set. */
4208 if (TREE_CODE (decl) == TYPE_DECL)
4209 return lk_external;
4210 if (VAR_OR_FUNCTION_DECL_P (decl))
4211 {
4212 if (!DECL_THIS_STATIC (decl))
4213 return lk_external;
4214
4215 /* Static data members and static member functions from classes
4216 in anonymous namespace also don't have TREE_PUBLIC set. */
4217 if (DECL_CLASS_CONTEXT (decl))
4218 return lk_external;
4219 }
4220
4221 /* Everything else has internal linkage. */
4222 return lk_internal;
4223 }
4224
4225 /* Returns the storage duration of the object or reference associated with
4226 the indicated DECL, which should be a VAR_DECL or PARM_DECL. */
4227
4228 duration_kind
4229 decl_storage_duration (tree decl)
4230 {
4231 if (TREE_CODE (decl) == PARM_DECL)
4232 return dk_auto;
4233 if (TREE_CODE (decl) == FUNCTION_DECL)
4234 return dk_static;
4235 gcc_assert (VAR_P (decl));
4236 if (!TREE_STATIC (decl)
4237 && !DECL_EXTERNAL (decl))
4238 return dk_auto;
4239 if (CP_DECL_THREAD_LOCAL_P (decl))
4240 return dk_thread;
4241 return dk_static;
4242 }
4243 \f
4244 /* EXP is an expression that we want to pre-evaluate. Returns (in
4245 *INITP) an expression that will perform the pre-evaluation. The
4246 value returned by this function is a side-effect free expression
4247 equivalent to the pre-evaluated expression. Callers must ensure
4248 that *INITP is evaluated before EXP. */
4249
4250 tree
4251 stabilize_expr (tree exp, tree* initp)
4252 {
4253 tree init_expr;
4254
4255 if (!TREE_SIDE_EFFECTS (exp))
4256 init_expr = NULL_TREE;
4257 else if (VOID_TYPE_P (TREE_TYPE (exp)))
4258 {
4259 init_expr = exp;
4260 exp = void_node;
4261 }
4262 /* There are no expressions with REFERENCE_TYPE, but there can be call
4263 arguments with such a type; just treat it as a pointer. */
4264 else if (TREE_CODE (TREE_TYPE (exp)) == REFERENCE_TYPE
4265 || SCALAR_TYPE_P (TREE_TYPE (exp))
4266 || !lvalue_or_rvalue_with_address_p (exp))
4267 {
4268 init_expr = get_target_expr (exp);
4269 exp = TARGET_EXPR_SLOT (init_expr);
4270 if (CLASS_TYPE_P (TREE_TYPE (exp)))
4271 exp = move (exp);
4272 else
4273 exp = rvalue (exp);
4274 }
4275 else
4276 {
4277 bool xval = !real_lvalue_p (exp);
4278 exp = cp_build_addr_expr (exp, tf_warning_or_error);
4279 init_expr = get_target_expr (exp);
4280 exp = TARGET_EXPR_SLOT (init_expr);
4281 exp = cp_build_indirect_ref (exp, RO_NULL, tf_warning_or_error);
4282 if (xval)
4283 exp = move (exp);
4284 }
4285 *initp = init_expr;
4286
4287 gcc_assert (!TREE_SIDE_EFFECTS (exp));
4288 return exp;
4289 }
4290
4291 /* Add NEW_EXPR, an expression whose value we don't care about, after the
4292 similar expression ORIG. */
4293
4294 tree
4295 add_stmt_to_compound (tree orig, tree new_expr)
4296 {
4297 if (!new_expr || !TREE_SIDE_EFFECTS (new_expr))
4298 return orig;
4299 if (!orig || !TREE_SIDE_EFFECTS (orig))
4300 return new_expr;
4301 return build2 (COMPOUND_EXPR, void_type_node, orig, new_expr);
4302 }
4303
4304 /* Like stabilize_expr, but for a call whose arguments we want to
4305 pre-evaluate. CALL is modified in place to use the pre-evaluated
4306 arguments, while, upon return, *INITP contains an expression to
4307 compute the arguments. */
4308
4309 void
4310 stabilize_call (tree call, tree *initp)
4311 {
4312 tree inits = NULL_TREE;
4313 int i;
4314 int nargs = call_expr_nargs (call);
4315
4316 if (call == error_mark_node || processing_template_decl)
4317 {
4318 *initp = NULL_TREE;
4319 return;
4320 }
4321
4322 gcc_assert (TREE_CODE (call) == CALL_EXPR);
4323
4324 for (i = 0; i < nargs; i++)
4325 {
4326 tree init;
4327 CALL_EXPR_ARG (call, i) =
4328 stabilize_expr (CALL_EXPR_ARG (call, i), &init);
4329 inits = add_stmt_to_compound (inits, init);
4330 }
4331
4332 *initp = inits;
4333 }
4334
4335 /* Like stabilize_expr, but for an AGGR_INIT_EXPR whose arguments we want
4336 to pre-evaluate. CALL is modified in place to use the pre-evaluated
4337 arguments, while, upon return, *INITP contains an expression to
4338 compute the arguments. */
4339
4340 static void
4341 stabilize_aggr_init (tree call, tree *initp)
4342 {
4343 tree inits = NULL_TREE;
4344 int i;
4345 int nargs = aggr_init_expr_nargs (call);
4346
4347 if (call == error_mark_node)
4348 return;
4349
4350 gcc_assert (TREE_CODE (call) == AGGR_INIT_EXPR);
4351
4352 for (i = 0; i < nargs; i++)
4353 {
4354 tree init;
4355 AGGR_INIT_EXPR_ARG (call, i) =
4356 stabilize_expr (AGGR_INIT_EXPR_ARG (call, i), &init);
4357 inits = add_stmt_to_compound (inits, init);
4358 }
4359
4360 *initp = inits;
4361 }
4362
4363 /* Like stabilize_expr, but for an initialization.
4364
4365 If the initialization is for an object of class type, this function
4366 takes care not to introduce additional temporaries.
4367
4368 Returns TRUE iff the expression was successfully pre-evaluated,
4369 i.e., if INIT is now side-effect free, except for, possibly, a
4370 single call to a constructor. */
4371
4372 bool
4373 stabilize_init (tree init, tree *initp)
4374 {
4375 tree t = init;
4376
4377 *initp = NULL_TREE;
4378
4379 if (t == error_mark_node || processing_template_decl)
4380 return true;
4381
4382 if (TREE_CODE (t) == INIT_EXPR)
4383 t = TREE_OPERAND (t, 1);
4384 if (TREE_CODE (t) == TARGET_EXPR)
4385 t = TARGET_EXPR_INITIAL (t);
4386
4387 /* If the RHS can be stabilized without breaking copy elision, stabilize
4388 it. We specifically don't stabilize class prvalues here because that
4389 would mean an extra copy, but they might be stabilized below. */
4390 if (TREE_CODE (init) == INIT_EXPR
4391 && TREE_CODE (t) != CONSTRUCTOR
4392 && TREE_CODE (t) != AGGR_INIT_EXPR
4393 && (SCALAR_TYPE_P (TREE_TYPE (t))
4394 || lvalue_or_rvalue_with_address_p (t)))
4395 {
4396 TREE_OPERAND (init, 1) = stabilize_expr (t, initp);
4397 return true;
4398 }
4399
4400 if (TREE_CODE (t) == COMPOUND_EXPR
4401 && TREE_CODE (init) == INIT_EXPR)
4402 {
4403 tree last = expr_last (t);
4404 /* Handle stabilizing the EMPTY_CLASS_EXPR pattern. */
4405 if (!TREE_SIDE_EFFECTS (last))
4406 {
4407 *initp = t;
4408 TREE_OPERAND (init, 1) = last;
4409 return true;
4410 }
4411 }
4412
4413 if (TREE_CODE (t) == CONSTRUCTOR)
4414 {
4415 /* Aggregate initialization: stabilize each of the field
4416 initializers. */
4417 unsigned i;
4418 constructor_elt *ce;
4419 bool good = true;
4420 vec<constructor_elt, va_gc> *v = CONSTRUCTOR_ELTS (t);
4421 for (i = 0; vec_safe_iterate (v, i, &ce); ++i)
4422 {
4423 tree type = TREE_TYPE (ce->value);
4424 tree subinit;
4425 if (TREE_CODE (type) == REFERENCE_TYPE
4426 || SCALAR_TYPE_P (type))
4427 ce->value = stabilize_expr (ce->value, &subinit);
4428 else if (!stabilize_init (ce->value, &subinit))
4429 good = false;
4430 *initp = add_stmt_to_compound (*initp, subinit);
4431 }
4432 return good;
4433 }
4434
4435 if (TREE_CODE (t) == CALL_EXPR)
4436 {
4437 stabilize_call (t, initp);
4438 return true;
4439 }
4440
4441 if (TREE_CODE (t) == AGGR_INIT_EXPR)
4442 {
4443 stabilize_aggr_init (t, initp);
4444 return true;
4445 }
4446
4447 /* The initialization is being performed via a bitwise copy -- and
4448 the item copied may have side effects. */
4449 return !TREE_SIDE_EFFECTS (init);
4450 }
4451
4452 /* Returns true if a cast to TYPE may appear in an integral constant
4453 expression. */
4454
4455 bool
4456 cast_valid_in_integral_constant_expression_p (tree type)
4457 {
4458 return (INTEGRAL_OR_ENUMERATION_TYPE_P (type)
4459 || cxx_dialect >= cxx11
4460 || dependent_type_p (type)
4461 || type == error_mark_node);
4462 }
4463
4464 /* Return true if we need to fix linkage information of DECL. */
4465
4466 static bool
4467 cp_fix_function_decl_p (tree decl)
4468 {
4469 /* Skip if DECL is not externally visible. */
4470 if (!TREE_PUBLIC (decl))
4471 return false;
4472
4473 /* We need to fix DECL if it a appears to be exported but with no
4474 function body. Thunks do not have CFGs and we may need to
4475 handle them specially later. */
4476 if (!gimple_has_body_p (decl)
4477 && !DECL_THUNK_P (decl)
4478 && !DECL_EXTERNAL (decl))
4479 {
4480 struct cgraph_node *node = cgraph_node::get (decl);
4481
4482 /* Don't fix same_body aliases. Although they don't have their own
4483 CFG, they share it with what they alias to. */
4484 if (!node || !node->alias
4485 || !vec_safe_length (node->ref_list.references))
4486 return true;
4487 }
4488
4489 return false;
4490 }
4491
4492 /* Clean the C++ specific parts of the tree T. */
4493
4494 void
4495 cp_free_lang_data (tree t)
4496 {
4497 if (TREE_CODE (t) == METHOD_TYPE
4498 || TREE_CODE (t) == FUNCTION_TYPE)
4499 {
4500 /* Default args are not interesting anymore. */
4501 tree argtypes = TYPE_ARG_TYPES (t);
4502 while (argtypes)
4503 {
4504 TREE_PURPOSE (argtypes) = 0;
4505 argtypes = TREE_CHAIN (argtypes);
4506 }
4507 }
4508 else if (TREE_CODE (t) == FUNCTION_DECL
4509 && cp_fix_function_decl_p (t))
4510 {
4511 /* If T is used in this translation unit at all, the definition
4512 must exist somewhere else since we have decided to not emit it
4513 in this TU. So make it an external reference. */
4514 DECL_EXTERNAL (t) = 1;
4515 TREE_STATIC (t) = 0;
4516 }
4517 if (TREE_CODE (t) == NAMESPACE_DECL)
4518 {
4519 /* The list of users of a namespace isn't useful for the middle-end
4520 or debug generators. */
4521 DECL_NAMESPACE_USERS (t) = NULL_TREE;
4522 /* Neither do we need the leftover chaining of namespaces
4523 from the binding level. */
4524 DECL_CHAIN (t) = NULL_TREE;
4525 }
4526 }
4527
4528 /* Stub for c-common. Please keep in sync with c-decl.c.
4529 FIXME: If address space support is target specific, then this
4530 should be a C target hook. But currently this is not possible,
4531 because this function is called via REGISTER_TARGET_PRAGMAS. */
4532 void
4533 c_register_addr_space (const char * /*word*/, addr_space_t /*as*/)
4534 {
4535 }
4536
4537 /* Return the number of operands in T that we care about for things like
4538 mangling. */
4539
4540 int
4541 cp_tree_operand_length (const_tree t)
4542 {
4543 enum tree_code code = TREE_CODE (t);
4544
4545 if (TREE_CODE_CLASS (code) == tcc_vl_exp)
4546 return VL_EXP_OPERAND_LENGTH (t);
4547
4548 return cp_tree_code_length (code);
4549 }
4550
4551 /* Like cp_tree_operand_length, but takes a tree_code CODE. */
4552
4553 int
4554 cp_tree_code_length (enum tree_code code)
4555 {
4556 gcc_assert (TREE_CODE_CLASS (code) != tcc_vl_exp);
4557
4558 switch (code)
4559 {
4560 case PREINCREMENT_EXPR:
4561 case PREDECREMENT_EXPR:
4562 case POSTINCREMENT_EXPR:
4563 case POSTDECREMENT_EXPR:
4564 return 1;
4565
4566 case ARRAY_REF:
4567 return 2;
4568
4569 case EXPR_PACK_EXPANSION:
4570 return 1;
4571
4572 default:
4573 return TREE_CODE_LENGTH (code);
4574 }
4575 }
4576
4577 /* Implement -Wzero_as_null_pointer_constant. Return true if the
4578 conditions for the warning hold, false otherwise. */
4579 bool
4580 maybe_warn_zero_as_null_pointer_constant (tree expr, location_t loc)
4581 {
4582 if (c_inhibit_evaluation_warnings == 0
4583 && !NULLPTR_TYPE_P (TREE_TYPE (expr)))
4584 {
4585 warning_at (loc, OPT_Wzero_as_null_pointer_constant,
4586 "zero as null pointer constant");
4587 return true;
4588 }
4589 return false;
4590 }
4591 \f
4592 #if defined ENABLE_TREE_CHECKING && (GCC_VERSION >= 2007)
4593 /* Complain that some language-specific thing hanging off a tree
4594 node has been accessed improperly. */
4595
4596 void
4597 lang_check_failed (const char* file, int line, const char* function)
4598 {
4599 internal_error ("lang_* check: failed in %s, at %s:%d",
4600 function, trim_filename (file), line);
4601 }
4602 #endif /* ENABLE_TREE_CHECKING */
4603
4604 #include "gt-cp-tree.h"