]> gcc.gnu.org Git - gcc.git/blob - gcc/cp/tree.c
Compare ARGUMENT_PACKS [pr93933]
[gcc.git] / gcc / cp / tree.c
1 /* Language-dependent node constructors for parse phase of GNU compiler.
2 Copyright (C) 1987-2020 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 "stringpool.h"
36 #include "attribs.h"
37 #include "flags.h"
38 #include "selftest.h"
39
40 static tree bot_manip (tree *, int *, void *);
41 static tree bot_replace (tree *, int *, void *);
42 static hashval_t list_hash_pieces (tree, tree, tree);
43 static tree build_target_expr (tree, tree, tsubst_flags_t);
44 static tree count_trees_r (tree *, int *, void *);
45 static tree verify_stmt_tree_r (tree *, int *, void *);
46
47 static tree handle_init_priority_attribute (tree *, tree, tree, int, bool *);
48 static tree handle_abi_tag_attribute (tree *, tree, tree, int, bool *);
49
50 /* If REF is an lvalue, returns the kind of lvalue that REF is.
51 Otherwise, returns clk_none. */
52
53 cp_lvalue_kind
54 lvalue_kind (const_tree ref)
55 {
56 cp_lvalue_kind op1_lvalue_kind = clk_none;
57 cp_lvalue_kind op2_lvalue_kind = clk_none;
58
59 /* Expressions of reference type are sometimes wrapped in
60 INDIRECT_REFs. INDIRECT_REFs are just internal compiler
61 representation, not part of the language, so we have to look
62 through them. */
63 if (REFERENCE_REF_P (ref))
64 return lvalue_kind (TREE_OPERAND (ref, 0));
65
66 if (TREE_TYPE (ref)
67 && TYPE_REF_P (TREE_TYPE (ref)))
68 {
69 /* unnamed rvalue references are rvalues */
70 if (TYPE_REF_IS_RVALUE (TREE_TYPE (ref))
71 && TREE_CODE (ref) != PARM_DECL
72 && !VAR_P (ref)
73 && TREE_CODE (ref) != COMPONENT_REF
74 /* Functions are always lvalues. */
75 && TREE_CODE (TREE_TYPE (TREE_TYPE (ref))) != FUNCTION_TYPE)
76 return clk_rvalueref;
77
78 /* lvalue references and named rvalue references are lvalues. */
79 return clk_ordinary;
80 }
81
82 if (ref == current_class_ptr)
83 return clk_none;
84
85 /* Expressions with cv void type are prvalues. */
86 if (TREE_TYPE (ref) && VOID_TYPE_P (TREE_TYPE (ref)))
87 return clk_none;
88
89 switch (TREE_CODE (ref))
90 {
91 case SAVE_EXPR:
92 return clk_none;
93
94 /* preincrements and predecrements are valid lvals, provided
95 what they refer to are valid lvals. */
96 case PREINCREMENT_EXPR:
97 case PREDECREMENT_EXPR:
98 case TRY_CATCH_EXPR:
99 case REALPART_EXPR:
100 case IMAGPART_EXPR:
101 case VIEW_CONVERT_EXPR:
102 return lvalue_kind (TREE_OPERAND (ref, 0));
103
104 case ARRAY_REF:
105 {
106 tree op1 = TREE_OPERAND (ref, 0);
107 if (TREE_CODE (TREE_TYPE (op1)) == ARRAY_TYPE)
108 {
109 op1_lvalue_kind = lvalue_kind (op1);
110 if (op1_lvalue_kind == clk_class)
111 /* in the case of an array operand, the result is an lvalue if
112 that operand is an lvalue and an xvalue otherwise */
113 op1_lvalue_kind = clk_rvalueref;
114 return op1_lvalue_kind;
115 }
116 else
117 return clk_ordinary;
118 }
119
120 case MEMBER_REF:
121 case DOTSTAR_EXPR:
122 if (TREE_CODE (ref) == MEMBER_REF)
123 op1_lvalue_kind = clk_ordinary;
124 else
125 op1_lvalue_kind = lvalue_kind (TREE_OPERAND (ref, 0));
126 if (TYPE_PTRMEMFUNC_P (TREE_TYPE (TREE_OPERAND (ref, 1))))
127 op1_lvalue_kind = clk_none;
128 else if (op1_lvalue_kind == clk_class)
129 /* The result of a .* expression whose second operand is a pointer to a
130 data member is an lvalue if the first operand is an lvalue and an
131 xvalue otherwise. */
132 op1_lvalue_kind = clk_rvalueref;
133 return op1_lvalue_kind;
134
135 case COMPONENT_REF:
136 if (BASELINK_P (TREE_OPERAND (ref, 1)))
137 {
138 tree fn = BASELINK_FUNCTIONS (TREE_OPERAND (ref, 1));
139
140 /* For static member function recurse on the BASELINK, we can get
141 here e.g. from reference_binding. If BASELINK_FUNCTIONS is
142 OVERLOAD, the overload is resolved first if possible through
143 resolve_address_of_overloaded_function. */
144 if (TREE_CODE (fn) == FUNCTION_DECL && DECL_STATIC_FUNCTION_P (fn))
145 return lvalue_kind (TREE_OPERAND (ref, 1));
146 }
147 op1_lvalue_kind = lvalue_kind (TREE_OPERAND (ref, 0));
148 if (op1_lvalue_kind == clk_class)
149 /* If E1 is an lvalue, then E1.E2 is an lvalue;
150 otherwise E1.E2 is an xvalue. */
151 op1_lvalue_kind = clk_rvalueref;
152
153 /* Look at the member designator. */
154 if (!op1_lvalue_kind)
155 ;
156 else if (is_overloaded_fn (TREE_OPERAND (ref, 1)))
157 /* The "field" can be a FUNCTION_DECL or an OVERLOAD in some
158 situations. If we're seeing a COMPONENT_REF, it's a non-static
159 member, so it isn't an lvalue. */
160 op1_lvalue_kind = clk_none;
161 else if (TREE_CODE (TREE_OPERAND (ref, 1)) != FIELD_DECL)
162 /* This can be IDENTIFIER_NODE in a template. */;
163 else if (DECL_C_BIT_FIELD (TREE_OPERAND (ref, 1)))
164 {
165 /* Clear the ordinary bit. If this object was a class
166 rvalue we want to preserve that information. */
167 op1_lvalue_kind &= ~clk_ordinary;
168 /* The lvalue is for a bitfield. */
169 op1_lvalue_kind |= clk_bitfield;
170 }
171 else if (DECL_PACKED (TREE_OPERAND (ref, 1)))
172 op1_lvalue_kind |= clk_packed;
173
174 return op1_lvalue_kind;
175
176 case STRING_CST:
177 case COMPOUND_LITERAL_EXPR:
178 return clk_ordinary;
179
180 case CONST_DECL:
181 /* CONST_DECL without TREE_STATIC are enumeration values and
182 thus not lvalues. With TREE_STATIC they are used by ObjC++
183 in objc_build_string_object and need to be considered as
184 lvalues. */
185 if (! TREE_STATIC (ref))
186 return clk_none;
187 /* FALLTHRU */
188 case VAR_DECL:
189 if (VAR_P (ref) && DECL_HAS_VALUE_EXPR_P (ref))
190 return lvalue_kind (DECL_VALUE_EXPR (CONST_CAST_TREE (ref)));
191
192 if (TREE_READONLY (ref) && ! TREE_STATIC (ref)
193 && DECL_LANG_SPECIFIC (ref)
194 && DECL_IN_AGGR_P (ref))
195 return clk_none;
196 /* FALLTHRU */
197 case INDIRECT_REF:
198 case ARROW_EXPR:
199 case PARM_DECL:
200 case RESULT_DECL:
201 case PLACEHOLDER_EXPR:
202 return clk_ordinary;
203
204 /* A scope ref in a template, left as SCOPE_REF to support later
205 access checking. */
206 case SCOPE_REF:
207 gcc_assert (!type_dependent_expression_p (CONST_CAST_TREE (ref)));
208 {
209 tree op = TREE_OPERAND (ref, 1);
210 if (TREE_CODE (op) == FIELD_DECL)
211 return (DECL_C_BIT_FIELD (op) ? clk_bitfield : clk_ordinary);
212 else
213 return lvalue_kind (op);
214 }
215
216 case MAX_EXPR:
217 case MIN_EXPR:
218 /* Disallow <? and >? as lvalues if either argument side-effects. */
219 if (TREE_SIDE_EFFECTS (TREE_OPERAND (ref, 0))
220 || TREE_SIDE_EFFECTS (TREE_OPERAND (ref, 1)))
221 return clk_none;
222 op1_lvalue_kind = lvalue_kind (TREE_OPERAND (ref, 0));
223 op2_lvalue_kind = lvalue_kind (TREE_OPERAND (ref, 1));
224 break;
225
226 case COND_EXPR:
227 if (processing_template_decl)
228 {
229 /* Within templates, a REFERENCE_TYPE will indicate whether
230 the COND_EXPR result is an ordinary lvalue or rvalueref.
231 Since REFERENCE_TYPEs are handled above, if we reach this
232 point, we know we got a plain rvalue. Unless we have a
233 type-dependent expr, that is, but we shouldn't be testing
234 lvalueness if we can't even tell the types yet! */
235 gcc_assert (!type_dependent_expression_p (CONST_CAST_TREE (ref)));
236 goto default_;
237 }
238 {
239 tree op1 = TREE_OPERAND (ref, 1);
240 if (!op1) op1 = TREE_OPERAND (ref, 0);
241 tree op2 = TREE_OPERAND (ref, 2);
242 op1_lvalue_kind = lvalue_kind (op1);
243 op2_lvalue_kind = lvalue_kind (op2);
244 if (!op1_lvalue_kind != !op2_lvalue_kind)
245 {
246 /* The second or the third operand (but not both) is a
247 throw-expression; the result is of the type
248 and value category of the other. */
249 if (op1_lvalue_kind && TREE_CODE (op2) == THROW_EXPR)
250 op2_lvalue_kind = op1_lvalue_kind;
251 else if (op2_lvalue_kind && TREE_CODE (op1) == THROW_EXPR)
252 op1_lvalue_kind = op2_lvalue_kind;
253 }
254 }
255 break;
256
257 case MODOP_EXPR:
258 /* We expect to see unlowered MODOP_EXPRs only during
259 template processing. */
260 gcc_assert (processing_template_decl);
261 return clk_ordinary;
262
263 case MODIFY_EXPR:
264 case TYPEID_EXPR:
265 return clk_ordinary;
266
267 case COMPOUND_EXPR:
268 return lvalue_kind (TREE_OPERAND (ref, 1));
269
270 case TARGET_EXPR:
271 return clk_class;
272
273 case VA_ARG_EXPR:
274 return (CLASS_TYPE_P (TREE_TYPE (ref)) ? clk_class : clk_none);
275
276 case CALL_EXPR:
277 /* We can see calls outside of TARGET_EXPR in templates. */
278 if (CLASS_TYPE_P (TREE_TYPE (ref)))
279 return clk_class;
280 return clk_none;
281
282 case FUNCTION_DECL:
283 /* All functions (except non-static-member functions) are
284 lvalues. */
285 return (DECL_NONSTATIC_MEMBER_FUNCTION_P (ref)
286 ? clk_none : clk_ordinary);
287
288 case BASELINK:
289 /* We now represent a reference to a single static member function
290 with a BASELINK. */
291 /* This CONST_CAST is okay because BASELINK_FUNCTIONS returns
292 its argument unmodified and we assign it to a const_tree. */
293 return lvalue_kind (BASELINK_FUNCTIONS (CONST_CAST_TREE (ref)));
294
295 case NON_DEPENDENT_EXPR:
296 case PAREN_EXPR:
297 return lvalue_kind (TREE_OPERAND (ref, 0));
298
299 case TEMPLATE_PARM_INDEX:
300 if (CLASS_TYPE_P (TREE_TYPE (ref)))
301 /* A template parameter object is an lvalue. */
302 return clk_ordinary;
303 return clk_none;
304
305 default:
306 default_:
307 if (!TREE_TYPE (ref))
308 return clk_none;
309 if (CLASS_TYPE_P (TREE_TYPE (ref))
310 || TREE_CODE (TREE_TYPE (ref)) == ARRAY_TYPE)
311 return clk_class;
312 return clk_none;
313 }
314
315 /* If one operand is not an lvalue at all, then this expression is
316 not an lvalue. */
317 if (!op1_lvalue_kind || !op2_lvalue_kind)
318 return clk_none;
319
320 /* Otherwise, it's an lvalue, and it has all the odd properties
321 contributed by either operand. */
322 op1_lvalue_kind = op1_lvalue_kind | op2_lvalue_kind;
323 /* It's not an ordinary lvalue if it involves any other kind. */
324 if ((op1_lvalue_kind & ~clk_ordinary) != clk_none)
325 op1_lvalue_kind &= ~clk_ordinary;
326 /* It can't be both a pseudo-lvalue and a non-addressable lvalue.
327 A COND_EXPR of those should be wrapped in a TARGET_EXPR. */
328 if ((op1_lvalue_kind & (clk_rvalueref|clk_class))
329 && (op1_lvalue_kind & (clk_bitfield|clk_packed)))
330 op1_lvalue_kind = clk_none;
331 return op1_lvalue_kind;
332 }
333
334 /* Returns the kind of lvalue that REF is, in the sense of [basic.lval]. */
335
336 cp_lvalue_kind
337 real_lvalue_p (const_tree ref)
338 {
339 cp_lvalue_kind kind = lvalue_kind (ref);
340 if (kind & (clk_rvalueref|clk_class))
341 return clk_none;
342 else
343 return kind;
344 }
345
346 /* c-common wants us to return bool. */
347
348 bool
349 lvalue_p (const_tree t)
350 {
351 return real_lvalue_p (t);
352 }
353
354 /* This differs from lvalue_p in that xvalues are included. */
355
356 bool
357 glvalue_p (const_tree ref)
358 {
359 cp_lvalue_kind kind = lvalue_kind (ref);
360 if (kind & clk_class)
361 return false;
362 else
363 return (kind != clk_none);
364 }
365
366 /* This differs from glvalue_p in that class prvalues are included. */
367
368 bool
369 obvalue_p (const_tree ref)
370 {
371 return (lvalue_kind (ref) != clk_none);
372 }
373
374 /* Returns true if REF is an xvalue (the result of dereferencing an rvalue
375 reference), false otherwise. */
376
377 bool
378 xvalue_p (const_tree ref)
379 {
380 return (lvalue_kind (ref) == clk_rvalueref);
381 }
382
383 /* True if REF is a bit-field. */
384
385 bool
386 bitfield_p (const_tree ref)
387 {
388 return (lvalue_kind (ref) & clk_bitfield);
389 }
390
391 /* C++-specific version of stabilize_reference. */
392
393 tree
394 cp_stabilize_reference (tree ref)
395 {
396 STRIP_ANY_LOCATION_WRAPPER (ref);
397 switch (TREE_CODE (ref))
398 {
399 case NON_DEPENDENT_EXPR:
400 /* We aren't actually evaluating this. */
401 return ref;
402
403 /* We need to treat specially anything stabilize_reference doesn't
404 handle specifically. */
405 case VAR_DECL:
406 case PARM_DECL:
407 case RESULT_DECL:
408 CASE_CONVERT:
409 case FLOAT_EXPR:
410 case FIX_TRUNC_EXPR:
411 case INDIRECT_REF:
412 case COMPONENT_REF:
413 case BIT_FIELD_REF:
414 case ARRAY_REF:
415 case ARRAY_RANGE_REF:
416 case ERROR_MARK:
417 break;
418 default:
419 cp_lvalue_kind kind = lvalue_kind (ref);
420 if ((kind & ~clk_class) != clk_none)
421 {
422 tree type = unlowered_expr_type (ref);
423 bool rval = !!(kind & clk_rvalueref);
424 type = cp_build_reference_type (type, rval);
425 /* This inhibits warnings in, eg, cxx_mark_addressable
426 (c++/60955). */
427 warning_sentinel s (extra_warnings);
428 ref = build_static_cast (input_location, type, ref,
429 tf_error);
430 }
431 }
432
433 return stabilize_reference (ref);
434 }
435
436 /* Test whether DECL is a builtin that may appear in a
437 constant-expression. */
438
439 bool
440 builtin_valid_in_constant_expr_p (const_tree decl)
441 {
442 STRIP_ANY_LOCATION_WRAPPER (decl);
443 if (TREE_CODE (decl) != FUNCTION_DECL)
444 /* Not a function. */
445 return false;
446 if (DECL_BUILT_IN_CLASS (decl) != BUILT_IN_NORMAL)
447 {
448 if (fndecl_built_in_p (decl, CP_BUILT_IN_IS_CONSTANT_EVALUATED,
449 BUILT_IN_FRONTEND)
450 || fndecl_built_in_p (decl, CP_BUILT_IN_SOURCE_LOCATION,
451 BUILT_IN_FRONTEND))
452 return true;
453 /* Not a built-in. */
454 return false;
455 }
456 switch (DECL_FUNCTION_CODE (decl))
457 {
458 /* These always have constant results like the corresponding
459 macros/symbol. */
460 case BUILT_IN_FILE:
461 case BUILT_IN_FUNCTION:
462 case BUILT_IN_LINE:
463
464 /* The following built-ins are valid in constant expressions
465 when their arguments are. */
466 case BUILT_IN_ADD_OVERFLOW_P:
467 case BUILT_IN_SUB_OVERFLOW_P:
468 case BUILT_IN_MUL_OVERFLOW_P:
469
470 /* These have constant results even if their operands are
471 non-constant. */
472 case BUILT_IN_CONSTANT_P:
473 case BUILT_IN_ATOMIC_ALWAYS_LOCK_FREE:
474 return true;
475 default:
476 return false;
477 }
478 }
479
480 /* Build a TARGET_EXPR, initializing the DECL with the VALUE. */
481
482 static tree
483 build_target_expr (tree decl, tree value, tsubst_flags_t complain)
484 {
485 tree t;
486 tree type = TREE_TYPE (decl);
487
488 value = mark_rvalue_use (value);
489
490 gcc_checking_assert (VOID_TYPE_P (TREE_TYPE (value))
491 || TREE_TYPE (decl) == TREE_TYPE (value)
492 /* On ARM ctors return 'this'. */
493 || (TYPE_PTR_P (TREE_TYPE (value))
494 && TREE_CODE (value) == CALL_EXPR)
495 || useless_type_conversion_p (TREE_TYPE (decl),
496 TREE_TYPE (value)));
497
498 /* Set TREE_READONLY for optimization, such as gimplify_init_constructor
499 moving a constant aggregate into .rodata. */
500 if (CP_TYPE_CONST_NON_VOLATILE_P (type)
501 && !TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type)
502 && !VOID_TYPE_P (TREE_TYPE (value))
503 && reduced_constant_expression_p (value))
504 TREE_READONLY (decl) = true;
505
506 if (complain & tf_no_cleanup)
507 /* The caller is building a new-expr and does not need a cleanup. */
508 t = NULL_TREE;
509 else
510 {
511 t = cxx_maybe_build_cleanup (decl, complain);
512 if (t == error_mark_node)
513 return error_mark_node;
514 }
515 t = build4 (TARGET_EXPR, type, decl, value, t, NULL_TREE);
516 if (location_t eloc = cp_expr_location (value))
517 SET_EXPR_LOCATION (t, eloc);
518 /* We always set TREE_SIDE_EFFECTS so that expand_expr does not
519 ignore the TARGET_EXPR. If there really turn out to be no
520 side-effects, then the optimizer should be able to get rid of
521 whatever code is generated anyhow. */
522 TREE_SIDE_EFFECTS (t) = 1;
523
524 return t;
525 }
526
527 /* Return an undeclared local temporary of type TYPE for use in building a
528 TARGET_EXPR. */
529
530 tree
531 build_local_temp (tree type)
532 {
533 tree slot = build_decl (input_location,
534 VAR_DECL, NULL_TREE, type);
535 DECL_ARTIFICIAL (slot) = 1;
536 DECL_IGNORED_P (slot) = 1;
537 DECL_CONTEXT (slot) = current_function_decl;
538 layout_decl (slot, 0);
539 return slot;
540 }
541
542 /* Return whether DECL is such a local temporary (or one from
543 create_tmp_var_raw). */
544
545 bool
546 is_local_temp (tree decl)
547 {
548 return (VAR_P (decl) && DECL_ARTIFICIAL (decl)
549 && !TREE_STATIC (decl)
550 && DECL_FUNCTION_SCOPE_P (decl));
551 }
552
553 /* Set various status flags when building an AGGR_INIT_EXPR object T. */
554
555 static void
556 process_aggr_init_operands (tree t)
557 {
558 bool side_effects;
559
560 side_effects = TREE_SIDE_EFFECTS (t);
561 if (!side_effects)
562 {
563 int i, n;
564 n = TREE_OPERAND_LENGTH (t);
565 for (i = 1; i < n; i++)
566 {
567 tree op = TREE_OPERAND (t, i);
568 if (op && TREE_SIDE_EFFECTS (op))
569 {
570 side_effects = 1;
571 break;
572 }
573 }
574 }
575 TREE_SIDE_EFFECTS (t) = side_effects;
576 }
577
578 /* Build an AGGR_INIT_EXPR of class tcc_vl_exp with the indicated RETURN_TYPE,
579 FN, and SLOT. NARGS is the number of call arguments which are specified
580 as a tree array ARGS. */
581
582 static tree
583 build_aggr_init_array (tree return_type, tree fn, tree slot, int nargs,
584 tree *args)
585 {
586 tree t;
587 int i;
588
589 t = build_vl_exp (AGGR_INIT_EXPR, nargs + 3);
590 TREE_TYPE (t) = return_type;
591 AGGR_INIT_EXPR_FN (t) = fn;
592 AGGR_INIT_EXPR_SLOT (t) = slot;
593 for (i = 0; i < nargs; i++)
594 AGGR_INIT_EXPR_ARG (t, i) = args[i];
595 process_aggr_init_operands (t);
596 return t;
597 }
598
599 /* INIT is a CALL_EXPR or AGGR_INIT_EXPR which needs info about its
600 target. TYPE is the type to be initialized.
601
602 Build an AGGR_INIT_EXPR to represent the initialization. This function
603 differs from build_cplus_new in that an AGGR_INIT_EXPR can only be used
604 to initialize another object, whereas a TARGET_EXPR can either
605 initialize another object or create its own temporary object, and as a
606 result building up a TARGET_EXPR requires that the type's destructor be
607 callable. */
608
609 tree
610 build_aggr_init_expr (tree type, tree init)
611 {
612 tree fn;
613 tree slot;
614 tree rval;
615 int is_ctor;
616
617 gcc_assert (!VOID_TYPE_P (type));
618
619 /* Don't build AGGR_INIT_EXPR in a template. */
620 if (processing_template_decl)
621 return init;
622
623 fn = cp_get_callee (init);
624 if (fn == NULL_TREE)
625 return convert (type, init);
626
627 is_ctor = (TREE_CODE (fn) == ADDR_EXPR
628 && TREE_CODE (TREE_OPERAND (fn, 0)) == FUNCTION_DECL
629 && DECL_CONSTRUCTOR_P (TREE_OPERAND (fn, 0)));
630
631 /* We split the CALL_EXPR into its function and its arguments here.
632 Then, in expand_expr, we put them back together. The reason for
633 this is that this expression might be a default argument
634 expression. In that case, we need a new temporary every time the
635 expression is used. That's what break_out_target_exprs does; it
636 replaces every AGGR_INIT_EXPR with a copy that uses a fresh
637 temporary slot. Then, expand_expr builds up a call-expression
638 using the new slot. */
639
640 /* If we don't need to use a constructor to create an object of this
641 type, don't mess with AGGR_INIT_EXPR. */
642 if (is_ctor || TREE_ADDRESSABLE (type))
643 {
644 slot = build_local_temp (type);
645
646 if (TREE_CODE (init) == CALL_EXPR)
647 {
648 rval = build_aggr_init_array (void_type_node, fn, slot,
649 call_expr_nargs (init),
650 CALL_EXPR_ARGP (init));
651 AGGR_INIT_FROM_THUNK_P (rval)
652 = CALL_FROM_THUNK_P (init);
653 }
654 else
655 {
656 rval = build_aggr_init_array (void_type_node, fn, slot,
657 aggr_init_expr_nargs (init),
658 AGGR_INIT_EXPR_ARGP (init));
659 AGGR_INIT_FROM_THUNK_P (rval)
660 = AGGR_INIT_FROM_THUNK_P (init);
661 }
662 TREE_SIDE_EFFECTS (rval) = 1;
663 AGGR_INIT_VIA_CTOR_P (rval) = is_ctor;
664 TREE_NOTHROW (rval) = TREE_NOTHROW (init);
665 CALL_EXPR_OPERATOR_SYNTAX (rval) = CALL_EXPR_OPERATOR_SYNTAX (init);
666 CALL_EXPR_ORDERED_ARGS (rval) = CALL_EXPR_ORDERED_ARGS (init);
667 CALL_EXPR_REVERSE_ARGS (rval) = CALL_EXPR_REVERSE_ARGS (init);
668 }
669 else
670 rval = init;
671
672 return rval;
673 }
674
675 /* INIT is a CALL_EXPR or AGGR_INIT_EXPR which needs info about its
676 target. TYPE is the type that this initialization should appear to
677 have.
678
679 Build an encapsulation of the initialization to perform
680 and return it so that it can be processed by language-independent
681 and language-specific expression expanders. */
682
683 tree
684 build_cplus_new (tree type, tree init, tsubst_flags_t complain)
685 {
686 /* This function should cope with what build_special_member_call
687 can produce. When performing parenthesized aggregate initialization,
688 it can produce a { }. */
689 if (BRACE_ENCLOSED_INITIALIZER_P (init))
690 {
691 gcc_assert (cxx_dialect >= cxx2a);
692 return finish_compound_literal (type, init, complain);
693 }
694
695 tree rval = build_aggr_init_expr (type, init);
696 tree slot;
697
698 if (init == error_mark_node)
699 return error_mark_node;
700
701 if (!complete_type_or_maybe_complain (type, init, complain))
702 return error_mark_node;
703
704 /* Make sure that we're not trying to create an instance of an
705 abstract class. */
706 if (abstract_virtuals_error_sfinae (NULL_TREE, type, complain))
707 return error_mark_node;
708
709 if (TREE_CODE (rval) == AGGR_INIT_EXPR)
710 slot = AGGR_INIT_EXPR_SLOT (rval);
711 else if (TREE_CODE (rval) == CALL_EXPR
712 || TREE_CODE (rval) == CONSTRUCTOR)
713 slot = build_local_temp (type);
714 else
715 return rval;
716
717 rval = build_target_expr (slot, rval, complain);
718
719 if (rval != error_mark_node)
720 TARGET_EXPR_IMPLICIT_P (rval) = 1;
721
722 return rval;
723 }
724
725 /* Subroutine of build_vec_init_expr: Build up a single element
726 intialization as a proxy for the full array initialization to get things
727 marked as used and any appropriate diagnostics.
728
729 Since we're deferring building the actual constructor calls until
730 gimplification time, we need to build one now and throw it away so
731 that the relevant constructor gets mark_used before cgraph decides
732 what functions are needed. Here we assume that init is either
733 NULL_TREE, void_type_node (indicating value-initialization), or
734 another array to copy. */
735
736 static tree
737 build_vec_init_elt (tree type, tree init, tsubst_flags_t complain)
738 {
739 tree inner_type = strip_array_types (type);
740
741 if (integer_zerop (array_type_nelts_total (type))
742 || !CLASS_TYPE_P (inner_type))
743 /* No interesting initialization to do. */
744 return integer_zero_node;
745 else if (init == void_type_node)
746 return build_value_init (inner_type, complain);
747
748 gcc_assert (init == NULL_TREE
749 || (same_type_ignoring_top_level_qualifiers_p
750 (type, TREE_TYPE (init))));
751
752 releasing_vec argvec;
753 if (init)
754 {
755 tree init_type = strip_array_types (TREE_TYPE (init));
756 tree dummy = build_dummy_object (init_type);
757 if (!lvalue_p (init))
758 dummy = move (dummy);
759 argvec->quick_push (dummy);
760 }
761 init = build_special_member_call (NULL_TREE, complete_ctor_identifier,
762 &argvec, inner_type, LOOKUP_NORMAL,
763 complain);
764
765 /* For a trivial constructor, build_over_call creates a TARGET_EXPR. But
766 we don't want one here because we aren't creating a temporary. */
767 if (TREE_CODE (init) == TARGET_EXPR)
768 init = TARGET_EXPR_INITIAL (init);
769
770 return init;
771 }
772
773 /* Return a TARGET_EXPR which expresses the initialization of an array to
774 be named later, either default-initialization or copy-initialization
775 from another array of the same type. */
776
777 tree
778 build_vec_init_expr (tree type, tree init, tsubst_flags_t complain)
779 {
780 tree slot;
781 bool value_init = false;
782 tree elt_init = build_vec_init_elt (type, init, complain);
783
784 if (init == void_type_node)
785 {
786 value_init = true;
787 init = NULL_TREE;
788 }
789
790 slot = build_local_temp (type);
791 init = build2 (VEC_INIT_EXPR, type, slot, init);
792 TREE_SIDE_EFFECTS (init) = true;
793 SET_EXPR_LOCATION (init, input_location);
794
795 if (cxx_dialect >= cxx11
796 && potential_constant_expression (elt_init))
797 VEC_INIT_EXPR_IS_CONSTEXPR (init) = true;
798 VEC_INIT_EXPR_VALUE_INIT (init) = value_init;
799
800 return init;
801 }
802
803 /* Give a helpful diagnostic for a non-constexpr VEC_INIT_EXPR in a context
804 that requires a constant expression. */
805
806 void
807 diagnose_non_constexpr_vec_init (tree expr)
808 {
809 tree type = TREE_TYPE (VEC_INIT_EXPR_SLOT (expr));
810 tree init, elt_init;
811 if (VEC_INIT_EXPR_VALUE_INIT (expr))
812 init = void_type_node;
813 else
814 init = VEC_INIT_EXPR_INIT (expr);
815
816 elt_init = build_vec_init_elt (type, init, tf_warning_or_error);
817 require_potential_constant_expression (elt_init);
818 }
819
820 tree
821 build_array_copy (tree init)
822 {
823 return build_vec_init_expr (TREE_TYPE (init), init, tf_warning_or_error);
824 }
825
826 /* Build a TARGET_EXPR using INIT to initialize a new temporary of the
827 indicated TYPE. */
828
829 tree
830 build_target_expr_with_type (tree init, tree type, tsubst_flags_t complain)
831 {
832 gcc_assert (!VOID_TYPE_P (type));
833
834 if (TREE_CODE (init) == TARGET_EXPR
835 || init == error_mark_node)
836 return init;
837 else if (CLASS_TYPE_P (type) && type_has_nontrivial_copy_init (type)
838 && !VOID_TYPE_P (TREE_TYPE (init))
839 && TREE_CODE (init) != COND_EXPR
840 && TREE_CODE (init) != CONSTRUCTOR
841 && TREE_CODE (init) != VA_ARG_EXPR)
842 /* We need to build up a copy constructor call. A void initializer
843 means we're being called from bot_manip. COND_EXPR is a special
844 case because we already have copies on the arms and we don't want
845 another one here. A CONSTRUCTOR is aggregate initialization, which
846 is handled separately. A VA_ARG_EXPR is magic creation of an
847 aggregate; there's no additional work to be done. */
848 return force_rvalue (init, complain);
849
850 return force_target_expr (type, init, complain);
851 }
852
853 /* Like the above function, but without the checking. This function should
854 only be used by code which is deliberately trying to subvert the type
855 system, such as call_builtin_trap. Or build_over_call, to avoid
856 infinite recursion. */
857
858 tree
859 force_target_expr (tree type, tree init, tsubst_flags_t complain)
860 {
861 tree slot;
862
863 gcc_assert (!VOID_TYPE_P (type));
864
865 slot = build_local_temp (type);
866 return build_target_expr (slot, init, complain);
867 }
868
869 /* Like build_target_expr_with_type, but use the type of INIT. */
870
871 tree
872 get_target_expr_sfinae (tree init, tsubst_flags_t complain)
873 {
874 if (TREE_CODE (init) == AGGR_INIT_EXPR)
875 return build_target_expr (AGGR_INIT_EXPR_SLOT (init), init, complain);
876 else if (TREE_CODE (init) == VEC_INIT_EXPR)
877 return build_target_expr (VEC_INIT_EXPR_SLOT (init), init, complain);
878 else
879 {
880 init = convert_bitfield_to_declared_type (init);
881 return build_target_expr_with_type (init, TREE_TYPE (init), complain);
882 }
883 }
884
885 tree
886 get_target_expr (tree init)
887 {
888 return get_target_expr_sfinae (init, tf_warning_or_error);
889 }
890
891 /* If EXPR is a bitfield reference, convert it to the declared type of
892 the bitfield, and return the resulting expression. Otherwise,
893 return EXPR itself. */
894
895 tree
896 convert_bitfield_to_declared_type (tree expr)
897 {
898 tree bitfield_type;
899
900 bitfield_type = is_bitfield_expr_with_lowered_type (expr);
901 if (bitfield_type)
902 expr = convert_to_integer_nofold (TYPE_MAIN_VARIANT (bitfield_type),
903 expr);
904 return expr;
905 }
906
907 /* EXPR is being used in an rvalue context. Return a version of EXPR
908 that is marked as an rvalue. */
909
910 tree
911 rvalue (tree expr)
912 {
913 tree type;
914
915 if (error_operand_p (expr))
916 return expr;
917
918 expr = mark_rvalue_use (expr);
919
920 /* [basic.lval]
921
922 Non-class rvalues always have cv-unqualified types. */
923 type = TREE_TYPE (expr);
924 if (!CLASS_TYPE_P (type) && cv_qualified_p (type))
925 type = cv_unqualified (type);
926
927 /* We need to do this for rvalue refs as well to get the right answer
928 from decltype; see c++/36628. */
929 if (!processing_template_decl && glvalue_p (expr))
930 expr = build1 (NON_LVALUE_EXPR, type, expr);
931 else if (type != TREE_TYPE (expr))
932 expr = build_nop (type, expr);
933
934 return expr;
935 }
936
937 \f
938 struct cplus_array_info
939 {
940 tree type;
941 tree domain;
942 };
943
944 struct cplus_array_hasher : ggc_ptr_hash<tree_node>
945 {
946 typedef cplus_array_info *compare_type;
947
948 static hashval_t hash (tree t);
949 static bool equal (tree, cplus_array_info *);
950 };
951
952 /* Hash an ARRAY_TYPE. K is really of type `tree'. */
953
954 hashval_t
955 cplus_array_hasher::hash (tree t)
956 {
957 hashval_t hash;
958
959 hash = TYPE_UID (TREE_TYPE (t));
960 if (TYPE_DOMAIN (t))
961 hash ^= TYPE_UID (TYPE_DOMAIN (t));
962 return hash;
963 }
964
965 /* Compare two ARRAY_TYPEs. K1 is really of type `tree', K2 is really
966 of type `cplus_array_info*'. */
967
968 bool
969 cplus_array_hasher::equal (tree t1, cplus_array_info *t2)
970 {
971 return (TREE_TYPE (t1) == t2->type && TYPE_DOMAIN (t1) == t2->domain);
972 }
973
974 /* Hash table containing dependent array types, which are unsuitable for
975 the language-independent type hash table. */
976 static GTY (()) hash_table<cplus_array_hasher> *cplus_array_htab;
977
978 /* Build an ARRAY_TYPE without laying it out. */
979
980 static tree
981 build_min_array_type (tree elt_type, tree index_type)
982 {
983 tree t = cxx_make_type (ARRAY_TYPE);
984 TREE_TYPE (t) = elt_type;
985 TYPE_DOMAIN (t) = index_type;
986 return t;
987 }
988
989 /* Set TYPE_CANONICAL like build_array_type_1, but using
990 build_cplus_array_type. */
991
992 static void
993 set_array_type_canon (tree t, tree elt_type, tree index_type)
994 {
995 /* Set the canonical type for this new node. */
996 if (TYPE_STRUCTURAL_EQUALITY_P (elt_type)
997 || (index_type && TYPE_STRUCTURAL_EQUALITY_P (index_type)))
998 SET_TYPE_STRUCTURAL_EQUALITY (t);
999 else if (TYPE_CANONICAL (elt_type) != elt_type
1000 || (index_type && TYPE_CANONICAL (index_type) != index_type))
1001 TYPE_CANONICAL (t)
1002 = build_cplus_array_type (TYPE_CANONICAL (elt_type),
1003 index_type
1004 ? TYPE_CANONICAL (index_type) : index_type);
1005 else
1006 TYPE_CANONICAL (t) = t;
1007 }
1008
1009 /* Like build_array_type, but handle special C++ semantics: an array of a
1010 variant element type is a variant of the array of the main variant of
1011 the element type. */
1012
1013 tree
1014 build_cplus_array_type (tree elt_type, tree index_type)
1015 {
1016 tree t;
1017
1018 if (elt_type == error_mark_node || index_type == error_mark_node)
1019 return error_mark_node;
1020
1021 bool dependent = (uses_template_parms (elt_type)
1022 || (index_type && uses_template_parms (index_type)));
1023
1024 if (elt_type != TYPE_MAIN_VARIANT (elt_type))
1025 /* Start with an array of the TYPE_MAIN_VARIANT. */
1026 t = build_cplus_array_type (TYPE_MAIN_VARIANT (elt_type),
1027 index_type);
1028 else if (dependent)
1029 {
1030 /* Since type_hash_canon calls layout_type, we need to use our own
1031 hash table. */
1032 cplus_array_info cai;
1033 hashval_t hash;
1034
1035 if (cplus_array_htab == NULL)
1036 cplus_array_htab = hash_table<cplus_array_hasher>::create_ggc (61);
1037
1038 hash = TYPE_UID (elt_type);
1039 if (index_type)
1040 hash ^= TYPE_UID (index_type);
1041 cai.type = elt_type;
1042 cai.domain = index_type;
1043
1044 tree *e = cplus_array_htab->find_slot_with_hash (&cai, hash, INSERT);
1045 if (*e)
1046 /* We have found the type: we're done. */
1047 return (tree) *e;
1048 else
1049 {
1050 /* Build a new array type. */
1051 t = build_min_array_type (elt_type, index_type);
1052
1053 /* Store it in the hash table. */
1054 *e = t;
1055
1056 /* Set the canonical type for this new node. */
1057 set_array_type_canon (t, elt_type, index_type);
1058 }
1059 }
1060 else
1061 {
1062 bool typeless_storage
1063 = (elt_type == unsigned_char_type_node
1064 || elt_type == signed_char_type_node
1065 || elt_type == char_type_node
1066 || (TREE_CODE (elt_type) == ENUMERAL_TYPE
1067 && TYPE_CONTEXT (elt_type) == std_node
1068 && !strcmp ("byte", TYPE_NAME_STRING (elt_type))));
1069 t = build_array_type (elt_type, index_type, typeless_storage);
1070 }
1071
1072 /* Now check whether we already have this array variant. */
1073 if (elt_type != TYPE_MAIN_VARIANT (elt_type))
1074 {
1075 tree m = t;
1076 for (t = m; t; t = TYPE_NEXT_VARIANT (t))
1077 if (TREE_TYPE (t) == elt_type
1078 && TYPE_NAME (t) == NULL_TREE
1079 && TYPE_ATTRIBUTES (t) == NULL_TREE)
1080 break;
1081 if (!t)
1082 {
1083 t = build_min_array_type (elt_type, index_type);
1084 set_array_type_canon (t, elt_type, index_type);
1085 if (!dependent)
1086 {
1087 layout_type (t);
1088 /* Make sure sizes are shared with the main variant.
1089 layout_type can't be called after setting TYPE_NEXT_VARIANT,
1090 as it will overwrite alignment etc. of all variants. */
1091 TYPE_SIZE (t) = TYPE_SIZE (m);
1092 TYPE_SIZE_UNIT (t) = TYPE_SIZE_UNIT (m);
1093 TYPE_TYPELESS_STORAGE (t) = TYPE_TYPELESS_STORAGE (m);
1094 }
1095
1096 TYPE_MAIN_VARIANT (t) = m;
1097 TYPE_NEXT_VARIANT (t) = TYPE_NEXT_VARIANT (m);
1098 TYPE_NEXT_VARIANT (m) = t;
1099 }
1100 }
1101
1102 /* Avoid spurious warnings with VLAs (c++/54583). */
1103 if (TYPE_SIZE (t) && EXPR_P (TYPE_SIZE (t)))
1104 TREE_NO_WARNING (TYPE_SIZE (t)) = 1;
1105
1106 /* Push these needs up to the ARRAY_TYPE so that initialization takes
1107 place more easily. */
1108 bool needs_ctor = (TYPE_NEEDS_CONSTRUCTING (t)
1109 = TYPE_NEEDS_CONSTRUCTING (elt_type));
1110 bool needs_dtor = (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (t)
1111 = TYPE_HAS_NONTRIVIAL_DESTRUCTOR (elt_type));
1112
1113 if (!dependent && t == TYPE_MAIN_VARIANT (t)
1114 && !COMPLETE_TYPE_P (t) && COMPLETE_TYPE_P (elt_type))
1115 {
1116 /* The element type has been completed since the last time we saw
1117 this array type; update the layout and 'tor flags for any variants
1118 that need it. */
1119 layout_type (t);
1120 for (tree v = TYPE_NEXT_VARIANT (t); v; v = TYPE_NEXT_VARIANT (v))
1121 {
1122 TYPE_NEEDS_CONSTRUCTING (v) = needs_ctor;
1123 TYPE_HAS_NONTRIVIAL_DESTRUCTOR (v) = needs_dtor;
1124 }
1125 }
1126
1127 return t;
1128 }
1129
1130 /* Return an ARRAY_TYPE with element type ELT and length N. */
1131
1132 tree
1133 build_array_of_n_type (tree elt, int n)
1134 {
1135 return build_cplus_array_type (elt, build_index_type (size_int (n - 1)));
1136 }
1137
1138 /* True iff T is an array of unknown bound. */
1139
1140 bool
1141 array_of_unknown_bound_p (const_tree t)
1142 {
1143 return (TREE_CODE (t) == ARRAY_TYPE
1144 && !TYPE_DOMAIN (t));
1145 }
1146
1147 /* True iff T is an N3639 array of runtime bound (VLA). These were approved
1148 for C++14 but then removed. This should only be used for N3639
1149 specifically; code wondering more generally if something is a VLA should use
1150 vla_type_p. */
1151
1152 bool
1153 array_of_runtime_bound_p (tree t)
1154 {
1155 if (!t || TREE_CODE (t) != ARRAY_TYPE)
1156 return false;
1157 if (variably_modified_type_p (TREE_TYPE (t), NULL_TREE))
1158 return false;
1159 tree dom = TYPE_DOMAIN (t);
1160 if (!dom)
1161 return false;
1162 tree max = TYPE_MAX_VALUE (dom);
1163 return (!potential_rvalue_constant_expression (max)
1164 || (!value_dependent_expression_p (max) && !TREE_CONSTANT (max)));
1165 }
1166
1167 /* True iff T is a variable length array. */
1168
1169 bool
1170 vla_type_p (tree t)
1171 {
1172 for (; t && TREE_CODE (t) == ARRAY_TYPE;
1173 t = TREE_TYPE (t))
1174 if (tree dom = TYPE_DOMAIN (t))
1175 {
1176 tree max = TYPE_MAX_VALUE (dom);
1177 if (!potential_rvalue_constant_expression (max)
1178 || (!value_dependent_expression_p (max) && !TREE_CONSTANT (max)))
1179 return true;
1180 }
1181 return false;
1182 }
1183
1184 /* Return a reference type node referring to TO_TYPE. If RVAL is
1185 true, return an rvalue reference type, otherwise return an lvalue
1186 reference type. If a type node exists, reuse it, otherwise create
1187 a new one. */
1188 tree
1189 cp_build_reference_type (tree to_type, bool rval)
1190 {
1191 tree lvalue_ref, t;
1192
1193 if (to_type == error_mark_node)
1194 return error_mark_node;
1195
1196 if (TYPE_REF_P (to_type))
1197 {
1198 rval = rval && TYPE_REF_IS_RVALUE (to_type);
1199 to_type = TREE_TYPE (to_type);
1200 }
1201
1202 lvalue_ref = build_reference_type (to_type);
1203 if (!rval)
1204 return lvalue_ref;
1205
1206 /* This code to create rvalue reference types is based on and tied
1207 to the code creating lvalue reference types in the middle-end
1208 functions build_reference_type_for_mode and build_reference_type.
1209
1210 It works by putting the rvalue reference type nodes after the
1211 lvalue reference nodes in the TYPE_NEXT_REF_TO linked list, so
1212 they will effectively be ignored by the middle end. */
1213
1214 for (t = lvalue_ref; (t = TYPE_NEXT_REF_TO (t)); )
1215 if (TYPE_REF_IS_RVALUE (t))
1216 return t;
1217
1218 t = build_distinct_type_copy (lvalue_ref);
1219
1220 TYPE_REF_IS_RVALUE (t) = true;
1221 TYPE_NEXT_REF_TO (t) = TYPE_NEXT_REF_TO (lvalue_ref);
1222 TYPE_NEXT_REF_TO (lvalue_ref) = t;
1223
1224 if (TYPE_STRUCTURAL_EQUALITY_P (to_type))
1225 SET_TYPE_STRUCTURAL_EQUALITY (t);
1226 else if (TYPE_CANONICAL (to_type) != to_type)
1227 TYPE_CANONICAL (t)
1228 = cp_build_reference_type (TYPE_CANONICAL (to_type), rval);
1229 else
1230 TYPE_CANONICAL (t) = t;
1231
1232 layout_type (t);
1233
1234 return t;
1235
1236 }
1237
1238 /* Returns EXPR cast to rvalue reference type, like std::move. */
1239
1240 tree
1241 move (tree expr)
1242 {
1243 tree type = TREE_TYPE (expr);
1244 gcc_assert (!TYPE_REF_P (type));
1245 type = cp_build_reference_type (type, /*rval*/true);
1246 return build_static_cast (input_location, type, expr,
1247 tf_warning_or_error);
1248 }
1249
1250 /* Used by the C++ front end to build qualified array types. However,
1251 the C version of this function does not properly maintain canonical
1252 types (which are not used in C). */
1253 tree
1254 c_build_qualified_type (tree type, int type_quals, tree /* orig_qual_type */,
1255 size_t /* orig_qual_indirect */)
1256 {
1257 return cp_build_qualified_type (type, type_quals);
1258 }
1259
1260 \f
1261 /* Make a variant of TYPE, qualified with the TYPE_QUALS. Handles
1262 arrays correctly. In particular, if TYPE is an array of T's, and
1263 TYPE_QUALS is non-empty, returns an array of qualified T's.
1264
1265 FLAGS determines how to deal with ill-formed qualifications. If
1266 tf_ignore_bad_quals is set, then bad qualifications are dropped
1267 (this is permitted if TYPE was introduced via a typedef or template
1268 type parameter). If bad qualifications are dropped and tf_warning
1269 is set, then a warning is issued for non-const qualifications. If
1270 tf_ignore_bad_quals is not set and tf_error is not set, we
1271 return error_mark_node. Otherwise, we issue an error, and ignore
1272 the qualifications.
1273
1274 Qualification of a reference type is valid when the reference came
1275 via a typedef or template type argument. [dcl.ref] No such
1276 dispensation is provided for qualifying a function type. [dcl.fct]
1277 DR 295 queries this and the proposed resolution brings it into line
1278 with qualifying a reference. We implement the DR. We also behave
1279 in a similar manner for restricting non-pointer types. */
1280
1281 tree
1282 cp_build_qualified_type_real (tree type,
1283 int type_quals,
1284 tsubst_flags_t complain)
1285 {
1286 tree result;
1287 int bad_quals = TYPE_UNQUALIFIED;
1288
1289 if (type == error_mark_node)
1290 return type;
1291
1292 if (type_quals == cp_type_quals (type))
1293 return type;
1294
1295 if (TREE_CODE (type) == ARRAY_TYPE)
1296 {
1297 /* In C++, the qualification really applies to the array element
1298 type. Obtain the appropriately qualified element type. */
1299 tree t;
1300 tree element_type
1301 = cp_build_qualified_type_real (TREE_TYPE (type),
1302 type_quals,
1303 complain);
1304
1305 if (element_type == error_mark_node)
1306 return error_mark_node;
1307
1308 /* See if we already have an identically qualified type. Tests
1309 should be equivalent to those in check_qualified_type. */
1310 for (t = TYPE_MAIN_VARIANT (type); t; t = TYPE_NEXT_VARIANT (t))
1311 if (TREE_TYPE (t) == element_type
1312 && TYPE_NAME (t) == TYPE_NAME (type)
1313 && TYPE_CONTEXT (t) == TYPE_CONTEXT (type)
1314 && attribute_list_equal (TYPE_ATTRIBUTES (t),
1315 TYPE_ATTRIBUTES (type)))
1316 break;
1317
1318 if (!t)
1319 {
1320 t = build_cplus_array_type (element_type, TYPE_DOMAIN (type));
1321
1322 /* Keep the typedef name. */
1323 if (TYPE_NAME (t) != TYPE_NAME (type))
1324 {
1325 t = build_variant_type_copy (t);
1326 TYPE_NAME (t) = TYPE_NAME (type);
1327 SET_TYPE_ALIGN (t, TYPE_ALIGN (type));
1328 TYPE_USER_ALIGN (t) = TYPE_USER_ALIGN (type);
1329 }
1330 }
1331
1332 /* Even if we already had this variant, we update
1333 TYPE_NEEDS_CONSTRUCTING and TYPE_HAS_NONTRIVIAL_DESTRUCTOR in case
1334 they changed since the variant was originally created.
1335
1336 This seems hokey; if there is some way to use a previous
1337 variant *without* coming through here,
1338 TYPE_NEEDS_CONSTRUCTING will never be updated. */
1339 TYPE_NEEDS_CONSTRUCTING (t)
1340 = TYPE_NEEDS_CONSTRUCTING (TYPE_MAIN_VARIANT (element_type));
1341 TYPE_HAS_NONTRIVIAL_DESTRUCTOR (t)
1342 = TYPE_HAS_NONTRIVIAL_DESTRUCTOR (TYPE_MAIN_VARIANT (element_type));
1343 return t;
1344 }
1345 else if (TREE_CODE (type) == TYPE_PACK_EXPANSION)
1346 {
1347 tree t = PACK_EXPANSION_PATTERN (type);
1348
1349 t = cp_build_qualified_type_real (t, type_quals, complain);
1350 return make_pack_expansion (t, complain);
1351 }
1352
1353 /* A reference or method type shall not be cv-qualified.
1354 [dcl.ref], [dcl.fct]. This used to be an error, but as of DR 295
1355 (in CD1) we always ignore extra cv-quals on functions. */
1356 if (type_quals & (TYPE_QUAL_CONST | TYPE_QUAL_VOLATILE)
1357 && (TYPE_REF_P (type)
1358 || FUNC_OR_METHOD_TYPE_P (type)))
1359 {
1360 if (TYPE_REF_P (type))
1361 bad_quals |= type_quals & (TYPE_QUAL_CONST | TYPE_QUAL_VOLATILE);
1362 type_quals &= ~(TYPE_QUAL_CONST | TYPE_QUAL_VOLATILE);
1363 }
1364
1365 /* But preserve any function-cv-quals on a FUNCTION_TYPE. */
1366 if (TREE_CODE (type) == FUNCTION_TYPE)
1367 type_quals |= type_memfn_quals (type);
1368
1369 /* A restrict-qualified type must be a pointer (or reference)
1370 to object or incomplete type. */
1371 if ((type_quals & TYPE_QUAL_RESTRICT)
1372 && TREE_CODE (type) != TEMPLATE_TYPE_PARM
1373 && TREE_CODE (type) != TYPENAME_TYPE
1374 && !INDIRECT_TYPE_P (type))
1375 {
1376 bad_quals |= TYPE_QUAL_RESTRICT;
1377 type_quals &= ~TYPE_QUAL_RESTRICT;
1378 }
1379
1380 if (bad_quals == TYPE_UNQUALIFIED
1381 || (complain & tf_ignore_bad_quals))
1382 /*OK*/;
1383 else if (!(complain & tf_error))
1384 return error_mark_node;
1385 else
1386 {
1387 tree bad_type = build_qualified_type (ptr_type_node, bad_quals);
1388 error ("%qV qualifiers cannot be applied to %qT",
1389 bad_type, type);
1390 }
1391
1392 /* Retrieve (or create) the appropriately qualified variant. */
1393 result = build_qualified_type (type, type_quals);
1394
1395 return result;
1396 }
1397
1398 /* Return TYPE with const and volatile removed. */
1399
1400 tree
1401 cv_unqualified (tree type)
1402 {
1403 int quals;
1404
1405 if (type == error_mark_node)
1406 return type;
1407
1408 quals = cp_type_quals (type);
1409 quals &= ~(TYPE_QUAL_CONST|TYPE_QUAL_VOLATILE);
1410 return cp_build_qualified_type (type, quals);
1411 }
1412
1413 /* Subroutine of strip_typedefs. We want to apply to RESULT the attributes
1414 from ATTRIBS that affect type identity, and no others. If any are not
1415 applied, set *remove_attributes to true. */
1416
1417 static tree
1418 apply_identity_attributes (tree result, tree attribs, bool *remove_attributes)
1419 {
1420 tree first_ident = NULL_TREE;
1421 tree new_attribs = NULL_TREE;
1422 tree *p = &new_attribs;
1423
1424 if (OVERLOAD_TYPE_P (result))
1425 {
1426 /* On classes and enums all attributes are ingrained. */
1427 gcc_assert (attribs == TYPE_ATTRIBUTES (result));
1428 return result;
1429 }
1430
1431 for (tree a = attribs; a; a = TREE_CHAIN (a))
1432 {
1433 const attribute_spec *as
1434 = lookup_attribute_spec (get_attribute_name (a));
1435 if (as && as->affects_type_identity)
1436 {
1437 if (!first_ident)
1438 first_ident = a;
1439 else if (first_ident == error_mark_node)
1440 {
1441 *p = tree_cons (TREE_PURPOSE (a), TREE_VALUE (a), NULL_TREE);
1442 p = &TREE_CHAIN (*p);
1443 }
1444 }
1445 else if (first_ident)
1446 {
1447 for (tree a2 = first_ident; a2; a2 = TREE_CHAIN (a2))
1448 {
1449 *p = tree_cons (TREE_PURPOSE (a2), TREE_VALUE (a2), NULL_TREE);
1450 p = &TREE_CHAIN (*p);
1451 }
1452 first_ident = error_mark_node;
1453 }
1454 }
1455 if (first_ident != error_mark_node)
1456 new_attribs = first_ident;
1457
1458 if (first_ident == attribs)
1459 /* All attributes affected type identity. */;
1460 else
1461 *remove_attributes = true;
1462
1463 return cp_build_type_attribute_variant (result, new_attribs);
1464 }
1465
1466 /* Builds a qualified variant of T that is either not a typedef variant
1467 (the default behavior) or not a typedef variant of a user-facing type
1468 (if FLAGS contains STF_USER_FACING).
1469
1470 E.g. consider the following declarations:
1471 typedef const int ConstInt;
1472 typedef ConstInt* PtrConstInt;
1473 If T is PtrConstInt, this function returns a type representing
1474 const int*.
1475 In other words, if T is a typedef, the function returns the underlying type.
1476 The cv-qualification and attributes of the type returned match the
1477 input type.
1478 They will always be compatible types.
1479 The returned type is built so that all of its subtypes
1480 recursively have their typedefs stripped as well.
1481
1482 This is different from just returning TYPE_CANONICAL (T)
1483 Because of several reasons:
1484 * If T is a type that needs structural equality
1485 its TYPE_CANONICAL (T) will be NULL.
1486 * TYPE_CANONICAL (T) desn't carry type attributes
1487 and loses template parameter names.
1488
1489 If REMOVE_ATTRIBUTES is non-null, also strip attributes that don't
1490 affect type identity, and set the referent to true if any were
1491 stripped. */
1492
1493 tree
1494 strip_typedefs (tree t, bool *remove_attributes, unsigned int flags)
1495 {
1496 tree result = NULL, type = NULL, t0 = NULL;
1497
1498 if (!t || t == error_mark_node)
1499 return t;
1500
1501 if (TREE_CODE (t) == TREE_LIST)
1502 {
1503 bool changed = false;
1504 releasing_vec vec;
1505 tree r = t;
1506 for (; t; t = TREE_CHAIN (t))
1507 {
1508 gcc_assert (!TREE_PURPOSE (t));
1509 tree elt = strip_typedefs (TREE_VALUE (t), remove_attributes, flags);
1510 if (elt != TREE_VALUE (t))
1511 changed = true;
1512 vec_safe_push (vec, elt);
1513 }
1514 if (changed)
1515 r = build_tree_list_vec (vec);
1516 return r;
1517 }
1518
1519 gcc_assert (TYPE_P (t));
1520
1521 if (t == TYPE_CANONICAL (t))
1522 return t;
1523
1524 if (!(flags & STF_STRIP_DEPENDENT)
1525 && dependent_alias_template_spec_p (t, nt_opaque))
1526 /* DR 1558: However, if the template-id is dependent, subsequent
1527 template argument substitution still applies to the template-id. */
1528 return t;
1529
1530 switch (TREE_CODE (t))
1531 {
1532 case POINTER_TYPE:
1533 type = strip_typedefs (TREE_TYPE (t), remove_attributes, flags);
1534 result = build_pointer_type (type);
1535 break;
1536 case REFERENCE_TYPE:
1537 type = strip_typedefs (TREE_TYPE (t), remove_attributes, flags);
1538 result = cp_build_reference_type (type, TYPE_REF_IS_RVALUE (t));
1539 break;
1540 case OFFSET_TYPE:
1541 t0 = strip_typedefs (TYPE_OFFSET_BASETYPE (t), remove_attributes, flags);
1542 type = strip_typedefs (TREE_TYPE (t), remove_attributes, flags);
1543 result = build_offset_type (t0, type);
1544 break;
1545 case RECORD_TYPE:
1546 if (TYPE_PTRMEMFUNC_P (t))
1547 {
1548 t0 = strip_typedefs (TYPE_PTRMEMFUNC_FN_TYPE (t),
1549 remove_attributes, flags);
1550 result = build_ptrmemfunc_type (t0);
1551 }
1552 break;
1553 case ARRAY_TYPE:
1554 type = strip_typedefs (TREE_TYPE (t), remove_attributes, flags);
1555 t0 = strip_typedefs (TYPE_DOMAIN (t), remove_attributes, flags);
1556 result = build_cplus_array_type (type, t0);
1557 break;
1558 case FUNCTION_TYPE:
1559 case METHOD_TYPE:
1560 {
1561 tree arg_types = NULL, arg_node, arg_node2, arg_type;
1562 bool changed;
1563
1564 /* Because we stomp on TREE_PURPOSE of TYPE_ARG_TYPES in many places
1565 around the compiler (e.g. cp_parser_late_parsing_default_args), we
1566 can't expect that re-hashing a function type will find a previous
1567 equivalent type, so try to reuse the input type if nothing has
1568 changed. If the type is itself a variant, that will change. */
1569 bool is_variant = typedef_variant_p (t);
1570 if (remove_attributes
1571 && (TYPE_ATTRIBUTES (t) || TYPE_USER_ALIGN (t)))
1572 is_variant = true;
1573
1574 type = strip_typedefs (TREE_TYPE (t), remove_attributes, flags);
1575 tree canon_spec = (flag_noexcept_type
1576 ? canonical_eh_spec (TYPE_RAISES_EXCEPTIONS (t))
1577 : NULL_TREE);
1578 changed = (type != TREE_TYPE (t) || is_variant
1579 || TYPE_RAISES_EXCEPTIONS (t) != canon_spec);
1580
1581 for (arg_node = TYPE_ARG_TYPES (t);
1582 arg_node;
1583 arg_node = TREE_CHAIN (arg_node))
1584 {
1585 if (arg_node == void_list_node)
1586 break;
1587 arg_type = strip_typedefs (TREE_VALUE (arg_node),
1588 remove_attributes, flags);
1589 gcc_assert (arg_type);
1590 if (arg_type == TREE_VALUE (arg_node) && !changed)
1591 continue;
1592
1593 if (!changed)
1594 {
1595 changed = true;
1596 for (arg_node2 = TYPE_ARG_TYPES (t);
1597 arg_node2 != arg_node;
1598 arg_node2 = TREE_CHAIN (arg_node2))
1599 arg_types
1600 = tree_cons (TREE_PURPOSE (arg_node2),
1601 TREE_VALUE (arg_node2), arg_types);
1602 }
1603
1604 arg_types
1605 = tree_cons (TREE_PURPOSE (arg_node), arg_type, arg_types);
1606 }
1607
1608 if (!changed)
1609 return t;
1610
1611 if (arg_types)
1612 arg_types = nreverse (arg_types);
1613
1614 /* A list of parameters not ending with an ellipsis
1615 must end with void_list_node. */
1616 if (arg_node)
1617 arg_types = chainon (arg_types, void_list_node);
1618
1619 if (TREE_CODE (t) == METHOD_TYPE)
1620 {
1621 tree class_type = TREE_TYPE (TREE_VALUE (arg_types));
1622 gcc_assert (class_type);
1623 result =
1624 build_method_type_directly (class_type, type,
1625 TREE_CHAIN (arg_types));
1626 }
1627 else
1628 {
1629 result = build_function_type (type, arg_types);
1630 result = apply_memfn_quals (result, type_memfn_quals (t));
1631 }
1632
1633 result = build_cp_fntype_variant (result,
1634 type_memfn_rqual (t), canon_spec,
1635 TYPE_HAS_LATE_RETURN_TYPE (t));
1636 }
1637 break;
1638 case TYPENAME_TYPE:
1639 {
1640 bool changed = false;
1641 tree fullname = TYPENAME_TYPE_FULLNAME (t);
1642 if (TREE_CODE (fullname) == TEMPLATE_ID_EXPR
1643 && TREE_OPERAND (fullname, 1))
1644 {
1645 tree args = TREE_OPERAND (fullname, 1);
1646 tree new_args = copy_node (args);
1647 for (int i = 0; i < TREE_VEC_LENGTH (args); ++i)
1648 {
1649 tree arg = TREE_VEC_ELT (args, i);
1650 tree strip_arg;
1651 if (TYPE_P (arg))
1652 strip_arg = strip_typedefs (arg, remove_attributes, flags);
1653 else
1654 strip_arg = strip_typedefs_expr (arg, remove_attributes,
1655 flags);
1656 TREE_VEC_ELT (new_args, i) = strip_arg;
1657 if (strip_arg != arg)
1658 changed = true;
1659 }
1660 if (changed)
1661 {
1662 NON_DEFAULT_TEMPLATE_ARGS_COUNT (new_args)
1663 = NON_DEFAULT_TEMPLATE_ARGS_COUNT (args);
1664 fullname
1665 = lookup_template_function (TREE_OPERAND (fullname, 0),
1666 new_args);
1667 }
1668 else
1669 ggc_free (new_args);
1670 }
1671 tree ctx = strip_typedefs (TYPE_CONTEXT (t), remove_attributes, flags);
1672 if (!changed && ctx == TYPE_CONTEXT (t) && !typedef_variant_p (t))
1673 return t;
1674 tree name = fullname;
1675 if (TREE_CODE (fullname) == TEMPLATE_ID_EXPR)
1676 name = TREE_OPERAND (fullname, 0);
1677 /* Use build_typename_type rather than make_typename_type because we
1678 don't want to resolve it here, just strip typedefs. */
1679 result = build_typename_type (ctx, name, fullname, typename_type);
1680 }
1681 break;
1682 case DECLTYPE_TYPE:
1683 result = strip_typedefs_expr (DECLTYPE_TYPE_EXPR (t),
1684 remove_attributes, flags);
1685 if (result == DECLTYPE_TYPE_EXPR (t))
1686 result = NULL_TREE;
1687 else
1688 result = (finish_decltype_type
1689 (result,
1690 DECLTYPE_TYPE_ID_EXPR_OR_MEMBER_ACCESS_P (t),
1691 tf_none));
1692 break;
1693 case UNDERLYING_TYPE:
1694 type = strip_typedefs (UNDERLYING_TYPE_TYPE (t),
1695 remove_attributes, flags);
1696 result = finish_underlying_type (type);
1697 break;
1698 default:
1699 break;
1700 }
1701
1702 if (!result)
1703 {
1704 if (typedef_variant_p (t))
1705 {
1706 if ((flags & STF_USER_VISIBLE)
1707 && !user_facing_original_type_p (t))
1708 return t;
1709 /* If T is a non-template alias or typedef, we can assume that
1710 instantiating its definition will hit any substitution failure,
1711 so we don't need to retain it here as well. */
1712 if (!alias_template_specialization_p (t, nt_opaque))
1713 flags |= STF_STRIP_DEPENDENT;
1714 result = strip_typedefs (DECL_ORIGINAL_TYPE (TYPE_NAME (t)),
1715 remove_attributes, flags);
1716 }
1717 else
1718 result = TYPE_MAIN_VARIANT (t);
1719 }
1720 /*gcc_assert (!typedef_variant_p (result)
1721 || dependent_alias_template_spec_p (result, nt_opaque)
1722 || ((flags & STF_USER_VISIBLE)
1723 && !user_facing_original_type_p (result)));*/
1724
1725 if (COMPLETE_TYPE_P (result) && !COMPLETE_TYPE_P (t))
1726 /* If RESULT is complete and T isn't, it's likely the case that T
1727 is a variant of RESULT which hasn't been updated yet. Skip the
1728 attribute handling. */;
1729 else
1730 {
1731 if (TYPE_USER_ALIGN (t) != TYPE_USER_ALIGN (result)
1732 || TYPE_ALIGN (t) != TYPE_ALIGN (result))
1733 {
1734 gcc_assert (TYPE_USER_ALIGN (t));
1735 if (remove_attributes)
1736 *remove_attributes = true;
1737 else
1738 {
1739 if (TYPE_ALIGN (t) == TYPE_ALIGN (result))
1740 result = build_variant_type_copy (result);
1741 else
1742 result = build_aligned_type (result, TYPE_ALIGN (t));
1743 TYPE_USER_ALIGN (result) = true;
1744 }
1745 }
1746
1747 if (TYPE_ATTRIBUTES (t))
1748 {
1749 if (remove_attributes)
1750 result = apply_identity_attributes (result, TYPE_ATTRIBUTES (t),
1751 remove_attributes);
1752 else
1753 result = cp_build_type_attribute_variant (result,
1754 TYPE_ATTRIBUTES (t));
1755 }
1756 }
1757
1758 return cp_build_qualified_type (result, cp_type_quals (t));
1759 }
1760
1761 /* Like strip_typedefs above, but works on expressions, so that in
1762
1763 template<class T> struct A
1764 {
1765 typedef T TT;
1766 B<sizeof(TT)> b;
1767 };
1768
1769 sizeof(TT) is replaced by sizeof(T). */
1770
1771 tree
1772 strip_typedefs_expr (tree t, bool *remove_attributes, unsigned int flags)
1773 {
1774 unsigned i,n;
1775 tree r, type, *ops;
1776 enum tree_code code;
1777
1778 if (t == NULL_TREE || t == error_mark_node)
1779 return t;
1780
1781 STRIP_ANY_LOCATION_WRAPPER (t);
1782
1783 if (DECL_P (t) || CONSTANT_CLASS_P (t))
1784 return t;
1785
1786 /* Some expressions have type operands, so let's handle types here rather
1787 than check TYPE_P in multiple places below. */
1788 if (TYPE_P (t))
1789 return strip_typedefs (t, remove_attributes, flags);
1790
1791 code = TREE_CODE (t);
1792 switch (code)
1793 {
1794 case IDENTIFIER_NODE:
1795 case TEMPLATE_PARM_INDEX:
1796 case OVERLOAD:
1797 case BASELINK:
1798 case ARGUMENT_PACK_SELECT:
1799 return t;
1800
1801 case TRAIT_EXPR:
1802 {
1803 tree type1 = strip_typedefs (TRAIT_EXPR_TYPE1 (t),
1804 remove_attributes, flags);
1805 tree type2 = strip_typedefs (TRAIT_EXPR_TYPE2 (t),
1806 remove_attributes, flags);
1807 if (type1 == TRAIT_EXPR_TYPE1 (t)
1808 && type2 == TRAIT_EXPR_TYPE2 (t))
1809 return t;
1810 r = copy_node (t);
1811 TRAIT_EXPR_TYPE1 (r) = type1;
1812 TRAIT_EXPR_TYPE2 (r) = type2;
1813 return r;
1814 }
1815
1816 case TREE_LIST:
1817 {
1818 releasing_vec vec;
1819 bool changed = false;
1820 tree it;
1821 for (it = t; it; it = TREE_CHAIN (it))
1822 {
1823 tree val = strip_typedefs_expr (TREE_VALUE (it),
1824 remove_attributes, flags);
1825 vec_safe_push (vec, val);
1826 if (val != TREE_VALUE (it))
1827 changed = true;
1828 gcc_assert (TREE_PURPOSE (it) == NULL_TREE);
1829 }
1830 if (changed)
1831 {
1832 r = NULL_TREE;
1833 FOR_EACH_VEC_ELT_REVERSE (*vec, i, it)
1834 r = tree_cons (NULL_TREE, it, r);
1835 }
1836 else
1837 r = t;
1838 return r;
1839 }
1840
1841 case TREE_VEC:
1842 {
1843 bool changed = false;
1844 releasing_vec vec;
1845 n = TREE_VEC_LENGTH (t);
1846 vec_safe_reserve (vec, n);
1847 for (i = 0; i < n; ++i)
1848 {
1849 tree op = strip_typedefs_expr (TREE_VEC_ELT (t, i),
1850 remove_attributes, flags);
1851 vec->quick_push (op);
1852 if (op != TREE_VEC_ELT (t, i))
1853 changed = true;
1854 }
1855 if (changed)
1856 {
1857 r = copy_node (t);
1858 for (i = 0; i < n; ++i)
1859 TREE_VEC_ELT (r, i) = (*vec)[i];
1860 NON_DEFAULT_TEMPLATE_ARGS_COUNT (r)
1861 = NON_DEFAULT_TEMPLATE_ARGS_COUNT (t);
1862 }
1863 else
1864 r = t;
1865 return r;
1866 }
1867
1868 case CONSTRUCTOR:
1869 {
1870 bool changed = false;
1871 vec<constructor_elt, va_gc> *vec
1872 = vec_safe_copy (CONSTRUCTOR_ELTS (t));
1873 n = CONSTRUCTOR_NELTS (t);
1874 type = strip_typedefs (TREE_TYPE (t), remove_attributes, flags);
1875 for (i = 0; i < n; ++i)
1876 {
1877 constructor_elt *e = &(*vec)[i];
1878 tree op = strip_typedefs_expr (e->value, remove_attributes, flags);
1879 if (op != e->value)
1880 {
1881 changed = true;
1882 e->value = op;
1883 }
1884 gcc_checking_assert
1885 (e->index == strip_typedefs_expr (e->index, remove_attributes,
1886 flags));
1887 }
1888
1889 if (!changed && type == TREE_TYPE (t))
1890 {
1891 vec_free (vec);
1892 return t;
1893 }
1894 else
1895 {
1896 r = copy_node (t);
1897 TREE_TYPE (r) = type;
1898 CONSTRUCTOR_ELTS (r) = vec;
1899 return r;
1900 }
1901 }
1902
1903 case LAMBDA_EXPR:
1904 return t;
1905
1906 case STATEMENT_LIST:
1907 error ("statement-expression in a constant expression");
1908 return error_mark_node;
1909
1910 default:
1911 break;
1912 }
1913
1914 gcc_assert (EXPR_P (t));
1915
1916 n = cp_tree_operand_length (t);
1917 ops = XALLOCAVEC (tree, n);
1918 type = TREE_TYPE (t);
1919
1920 switch (code)
1921 {
1922 CASE_CONVERT:
1923 case IMPLICIT_CONV_EXPR:
1924 case DYNAMIC_CAST_EXPR:
1925 case STATIC_CAST_EXPR:
1926 case CONST_CAST_EXPR:
1927 case REINTERPRET_CAST_EXPR:
1928 case CAST_EXPR:
1929 case NEW_EXPR:
1930 type = strip_typedefs (type, remove_attributes, flags);
1931 /* fallthrough */
1932
1933 default:
1934 for (i = 0; i < n; ++i)
1935 ops[i] = strip_typedefs_expr (TREE_OPERAND (t, i),
1936 remove_attributes, flags);
1937 break;
1938 }
1939
1940 /* If nothing changed, return t. */
1941 for (i = 0; i < n; ++i)
1942 if (ops[i] != TREE_OPERAND (t, i))
1943 break;
1944 if (i == n && type == TREE_TYPE (t))
1945 return t;
1946
1947 r = copy_node (t);
1948 TREE_TYPE (r) = type;
1949 for (i = 0; i < n; ++i)
1950 TREE_OPERAND (r, i) = ops[i];
1951 return r;
1952 }
1953
1954 /* Makes a copy of BINFO and TYPE, which is to be inherited into a
1955 graph dominated by T. If BINFO is NULL, TYPE is a dependent base,
1956 and we do a shallow copy. If BINFO is non-NULL, we do a deep copy.
1957 VIRT indicates whether TYPE is inherited virtually or not.
1958 IGO_PREV points at the previous binfo of the inheritance graph
1959 order chain. The newly copied binfo's TREE_CHAIN forms this
1960 ordering.
1961
1962 The CLASSTYPE_VBASECLASSES vector of T is constructed in the
1963 correct order. That is in the order the bases themselves should be
1964 constructed in.
1965
1966 The BINFO_INHERITANCE of a virtual base class points to the binfo
1967 of the most derived type. ??? We could probably change this so that
1968 BINFO_INHERITANCE becomes synonymous with BINFO_PRIMARY, and hence
1969 remove a field. They currently can only differ for primary virtual
1970 virtual bases. */
1971
1972 tree
1973 copy_binfo (tree binfo, tree type, tree t, tree *igo_prev, int virt)
1974 {
1975 tree new_binfo;
1976
1977 if (virt)
1978 {
1979 /* See if we've already made this virtual base. */
1980 new_binfo = binfo_for_vbase (type, t);
1981 if (new_binfo)
1982 return new_binfo;
1983 }
1984
1985 new_binfo = make_tree_binfo (binfo ? BINFO_N_BASE_BINFOS (binfo) : 0);
1986 BINFO_TYPE (new_binfo) = type;
1987
1988 /* Chain it into the inheritance graph. */
1989 TREE_CHAIN (*igo_prev) = new_binfo;
1990 *igo_prev = new_binfo;
1991
1992 if (binfo && !BINFO_DEPENDENT_BASE_P (binfo))
1993 {
1994 int ix;
1995 tree base_binfo;
1996
1997 gcc_assert (SAME_BINFO_TYPE_P (BINFO_TYPE (binfo), type));
1998
1999 BINFO_OFFSET (new_binfo) = BINFO_OFFSET (binfo);
2000 BINFO_VIRTUALS (new_binfo) = BINFO_VIRTUALS (binfo);
2001
2002 /* We do not need to copy the accesses, as they are read only. */
2003 BINFO_BASE_ACCESSES (new_binfo) = BINFO_BASE_ACCESSES (binfo);
2004
2005 /* Recursively copy base binfos of BINFO. */
2006 for (ix = 0; BINFO_BASE_ITERATE (binfo, ix, base_binfo); ix++)
2007 {
2008 tree new_base_binfo;
2009 new_base_binfo = copy_binfo (base_binfo, BINFO_TYPE (base_binfo),
2010 t, igo_prev,
2011 BINFO_VIRTUAL_P (base_binfo));
2012
2013 if (!BINFO_INHERITANCE_CHAIN (new_base_binfo))
2014 BINFO_INHERITANCE_CHAIN (new_base_binfo) = new_binfo;
2015 BINFO_BASE_APPEND (new_binfo, new_base_binfo);
2016 }
2017 }
2018 else
2019 BINFO_DEPENDENT_BASE_P (new_binfo) = 1;
2020
2021 if (virt)
2022 {
2023 /* Push it onto the list after any virtual bases it contains
2024 will have been pushed. */
2025 CLASSTYPE_VBASECLASSES (t)->quick_push (new_binfo);
2026 BINFO_VIRTUAL_P (new_binfo) = 1;
2027 BINFO_INHERITANCE_CHAIN (new_binfo) = TYPE_BINFO (t);
2028 }
2029
2030 return new_binfo;
2031 }
2032 \f
2033 /* Hashing of lists so that we don't make duplicates.
2034 The entry point is `list_hash_canon'. */
2035
2036 struct list_proxy
2037 {
2038 tree purpose;
2039 tree value;
2040 tree chain;
2041 };
2042
2043 struct list_hasher : ggc_ptr_hash<tree_node>
2044 {
2045 typedef list_proxy *compare_type;
2046
2047 static hashval_t hash (tree);
2048 static bool equal (tree, list_proxy *);
2049 };
2050
2051 /* Now here is the hash table. When recording a list, it is added
2052 to the slot whose index is the hash code mod the table size.
2053 Note that the hash table is used for several kinds of lists.
2054 While all these live in the same table, they are completely independent,
2055 and the hash code is computed differently for each of these. */
2056
2057 static GTY (()) hash_table<list_hasher> *list_hash_table;
2058
2059 /* Compare ENTRY (an entry in the hash table) with DATA (a list_proxy
2060 for a node we are thinking about adding). */
2061
2062 bool
2063 list_hasher::equal (tree t, list_proxy *proxy)
2064 {
2065 return (TREE_VALUE (t) == proxy->value
2066 && TREE_PURPOSE (t) == proxy->purpose
2067 && TREE_CHAIN (t) == proxy->chain);
2068 }
2069
2070 /* Compute a hash code for a list (chain of TREE_LIST nodes
2071 with goodies in the TREE_PURPOSE, TREE_VALUE, and bits of the
2072 TREE_COMMON slots), by adding the hash codes of the individual entries. */
2073
2074 static hashval_t
2075 list_hash_pieces (tree purpose, tree value, tree chain)
2076 {
2077 hashval_t hashcode = 0;
2078
2079 if (chain)
2080 hashcode += TREE_HASH (chain);
2081
2082 if (value)
2083 hashcode += TREE_HASH (value);
2084 else
2085 hashcode += 1007;
2086 if (purpose)
2087 hashcode += TREE_HASH (purpose);
2088 else
2089 hashcode += 1009;
2090 return hashcode;
2091 }
2092
2093 /* Hash an already existing TREE_LIST. */
2094
2095 hashval_t
2096 list_hasher::hash (tree t)
2097 {
2098 return list_hash_pieces (TREE_PURPOSE (t),
2099 TREE_VALUE (t),
2100 TREE_CHAIN (t));
2101 }
2102
2103 /* Given list components PURPOSE, VALUE, AND CHAIN, return the canonical
2104 object for an identical list if one already exists. Otherwise, build a
2105 new one, and record it as the canonical object. */
2106
2107 tree
2108 hash_tree_cons (tree purpose, tree value, tree chain)
2109 {
2110 int hashcode = 0;
2111 tree *slot;
2112 struct list_proxy proxy;
2113
2114 /* Hash the list node. */
2115 hashcode = list_hash_pieces (purpose, value, chain);
2116 /* Create a proxy for the TREE_LIST we would like to create. We
2117 don't actually create it so as to avoid creating garbage. */
2118 proxy.purpose = purpose;
2119 proxy.value = value;
2120 proxy.chain = chain;
2121 /* See if it is already in the table. */
2122 slot = list_hash_table->find_slot_with_hash (&proxy, hashcode, INSERT);
2123 /* If not, create a new node. */
2124 if (!*slot)
2125 *slot = tree_cons (purpose, value, chain);
2126 return (tree) *slot;
2127 }
2128
2129 /* Constructor for hashed lists. */
2130
2131 tree
2132 hash_tree_chain (tree value, tree chain)
2133 {
2134 return hash_tree_cons (NULL_TREE, value, chain);
2135 }
2136 \f
2137 void
2138 debug_binfo (tree elem)
2139 {
2140 HOST_WIDE_INT n;
2141 tree virtuals;
2142
2143 fprintf (stderr, "type \"%s\", offset = " HOST_WIDE_INT_PRINT_DEC
2144 "\nvtable type:\n",
2145 TYPE_NAME_STRING (BINFO_TYPE (elem)),
2146 TREE_INT_CST_LOW (BINFO_OFFSET (elem)));
2147 debug_tree (BINFO_TYPE (elem));
2148 if (BINFO_VTABLE (elem))
2149 fprintf (stderr, "vtable decl \"%s\"\n",
2150 IDENTIFIER_POINTER (DECL_NAME (get_vtbl_decl_for_binfo (elem))));
2151 else
2152 fprintf (stderr, "no vtable decl yet\n");
2153 fprintf (stderr, "virtuals:\n");
2154 virtuals = BINFO_VIRTUALS (elem);
2155 n = 0;
2156
2157 while (virtuals)
2158 {
2159 tree fndecl = TREE_VALUE (virtuals);
2160 fprintf (stderr, "%s [%ld =? %ld]\n",
2161 IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (fndecl)),
2162 (long) n, (long) TREE_INT_CST_LOW (DECL_VINDEX (fndecl)));
2163 ++n;
2164 virtuals = TREE_CHAIN (virtuals);
2165 }
2166 }
2167
2168 /* Build a representation for the qualified name SCOPE::NAME. TYPE is
2169 the type of the result expression, if known, or NULL_TREE if the
2170 resulting expression is type-dependent. If TEMPLATE_P is true,
2171 NAME is known to be a template because the user explicitly used the
2172 "template" keyword after the "::".
2173
2174 All SCOPE_REFs should be built by use of this function. */
2175
2176 tree
2177 build_qualified_name (tree type, tree scope, tree name, bool template_p)
2178 {
2179 tree t;
2180 if (type == error_mark_node
2181 || scope == error_mark_node
2182 || name == error_mark_node)
2183 return error_mark_node;
2184 gcc_assert (TREE_CODE (name) != SCOPE_REF);
2185 t = build2 (SCOPE_REF, type, scope, name);
2186 QUALIFIED_NAME_IS_TEMPLATE (t) = template_p;
2187 PTRMEM_OK_P (t) = true;
2188 if (type)
2189 t = convert_from_reference (t);
2190 return t;
2191 }
2192
2193 /* Like check_qualified_type, but also check ref-qualifier, exception
2194 specification, and whether the return type was specified after the
2195 parameters. */
2196
2197 static bool
2198 cp_check_qualified_type (const_tree cand, const_tree base, int type_quals,
2199 cp_ref_qualifier rqual, tree raises, bool late)
2200 {
2201 return (TYPE_QUALS (cand) == type_quals
2202 && check_base_type (cand, base)
2203 && comp_except_specs (raises, TYPE_RAISES_EXCEPTIONS (cand),
2204 ce_exact)
2205 && TYPE_HAS_LATE_RETURN_TYPE (cand) == late
2206 && type_memfn_rqual (cand) == rqual);
2207 }
2208
2209 /* Build the FUNCTION_TYPE or METHOD_TYPE with the ref-qualifier RQUAL. */
2210
2211 tree
2212 build_ref_qualified_type (tree type, cp_ref_qualifier rqual)
2213 {
2214 tree raises = TYPE_RAISES_EXCEPTIONS (type);
2215 bool late = TYPE_HAS_LATE_RETURN_TYPE (type);
2216 return build_cp_fntype_variant (type, rqual, raises, late);
2217 }
2218
2219 /* Make a raw overload node containing FN. */
2220
2221 tree
2222 ovl_make (tree fn, tree next)
2223 {
2224 tree result = make_node (OVERLOAD);
2225
2226 if (TREE_CODE (fn) == OVERLOAD)
2227 OVL_NESTED_P (result) = true;
2228
2229 TREE_TYPE (result) = (next || TREE_CODE (fn) == TEMPLATE_DECL
2230 ? unknown_type_node : TREE_TYPE (fn));
2231 if (next && TREE_CODE (next) == OVERLOAD && OVL_DEDUP_P (next))
2232 OVL_DEDUP_P (result) = true;
2233 OVL_FUNCTION (result) = fn;
2234 OVL_CHAIN (result) = next;
2235 return result;
2236 }
2237
2238 /* Add FN to the (potentially NULL) overload set OVL. USING_P is
2239 true, if FN is via a using declaration. We also pay attention to
2240 DECL_HIDDEN. We keep the hidden decls first, but remaining ones
2241 are unordered. */
2242
2243 tree
2244 ovl_insert (tree fn, tree maybe_ovl, bool using_p)
2245 {
2246 tree result = maybe_ovl;
2247 tree insert_after = NULL_TREE;
2248
2249 /* Skip hidden. */
2250 for (; maybe_ovl && TREE_CODE (maybe_ovl) == OVERLOAD
2251 && OVL_HIDDEN_P (maybe_ovl);
2252 maybe_ovl = OVL_CHAIN (maybe_ovl))
2253 {
2254 gcc_checking_assert (!OVL_LOOKUP_P (maybe_ovl));
2255 insert_after = maybe_ovl;
2256 }
2257
2258 bool hidden_p = DECL_HIDDEN_P (fn);
2259 if (maybe_ovl || using_p || hidden_p || TREE_CODE (fn) == TEMPLATE_DECL)
2260 {
2261 maybe_ovl = ovl_make (fn, maybe_ovl);
2262 if (hidden_p)
2263 OVL_HIDDEN_P (maybe_ovl) = true;
2264 if (using_p)
2265 OVL_DEDUP_P (maybe_ovl) = OVL_USING_P (maybe_ovl) = true;
2266 }
2267 else
2268 maybe_ovl = fn;
2269
2270 if (insert_after)
2271 {
2272 OVL_CHAIN (insert_after) = maybe_ovl;
2273 TREE_TYPE (insert_after) = unknown_type_node;
2274 }
2275 else
2276 result = maybe_ovl;
2277
2278 return result;
2279 }
2280
2281 /* Skip any hidden names at the beginning of OVL. */
2282
2283 tree
2284 ovl_skip_hidden (tree ovl)
2285 {
2286 for (;
2287 ovl && TREE_CODE (ovl) == OVERLOAD && OVL_HIDDEN_P (ovl);
2288 ovl = OVL_CHAIN (ovl))
2289 gcc_checking_assert (DECL_HIDDEN_P (OVL_FUNCTION (ovl)));
2290
2291 if (ovl && TREE_CODE (ovl) != OVERLOAD && DECL_HIDDEN_P (ovl))
2292 {
2293 /* Any hidden functions should have been wrapped in an
2294 overload, but injected friend classes will not. */
2295 gcc_checking_assert (!DECL_DECLARES_FUNCTION_P (ovl));
2296 ovl = NULL_TREE;
2297 }
2298
2299 return ovl;
2300 }
2301
2302 /* NODE is an OVL_HIDDEN_P node which is now revealed. */
2303
2304 tree
2305 ovl_iterator::reveal_node (tree overload, tree node)
2306 {
2307 /* We cannot have returned NODE as part of a lookup overload, so we
2308 don't have to worry about preserving that. */
2309
2310 OVL_HIDDEN_P (node) = false;
2311 if (tree chain = OVL_CHAIN (node))
2312 if (TREE_CODE (chain) == OVERLOAD)
2313 {
2314 if (OVL_HIDDEN_P (chain))
2315 {
2316 /* The node needs moving, and the simplest way is to remove it
2317 and reinsert. */
2318 overload = remove_node (overload, node);
2319 overload = ovl_insert (OVL_FUNCTION (node), overload);
2320 }
2321 else if (OVL_DEDUP_P (chain))
2322 OVL_DEDUP_P (node) = true;
2323 }
2324 return overload;
2325 }
2326
2327 /* NODE is on the overloads of OVL. Remove it.
2328 The removed node is unaltered and may continue to be iterated
2329 from (i.e. it is safe to remove a node from an overload one is
2330 currently iterating over). */
2331
2332 tree
2333 ovl_iterator::remove_node (tree overload, tree node)
2334 {
2335 tree *slot = &overload;
2336 while (*slot != node)
2337 {
2338 tree probe = *slot;
2339 gcc_checking_assert (!OVL_LOOKUP_P (probe));
2340
2341 slot = &OVL_CHAIN (probe);
2342 }
2343
2344 /* Stitch out NODE. We don't have to worry about now making a
2345 singleton overload (and consequently maybe setting its type),
2346 because all uses of this function will be followed by inserting a
2347 new node that must follow the place we've cut this out from. */
2348 if (TREE_CODE (node) != OVERLOAD)
2349 /* Cloned inherited ctors don't mark themselves as via_using. */
2350 *slot = NULL_TREE;
2351 else
2352 *slot = OVL_CHAIN (node);
2353
2354 return overload;
2355 }
2356
2357 /* Mark or unmark a lookup set. */
2358
2359 void
2360 lookup_mark (tree ovl, bool val)
2361 {
2362 for (lkp_iterator iter (ovl); iter; ++iter)
2363 {
2364 gcc_checking_assert (LOOKUP_SEEN_P (*iter) != val);
2365 LOOKUP_SEEN_P (*iter) = val;
2366 }
2367 }
2368
2369 /* Add a set of new FNS into a lookup. */
2370
2371 tree
2372 lookup_add (tree fns, tree lookup)
2373 {
2374 if (fns == error_mark_node || lookup == error_mark_node)
2375 return error_mark_node;
2376
2377 if (lookup || TREE_CODE (fns) == TEMPLATE_DECL)
2378 {
2379 lookup = ovl_make (fns, lookup);
2380 OVL_LOOKUP_P (lookup) = true;
2381 }
2382 else
2383 lookup = fns;
2384
2385 return lookup;
2386 }
2387
2388 /* FNS is a new overload set, add them to LOOKUP, if they are not
2389 already present there. */
2390
2391 tree
2392 lookup_maybe_add (tree fns, tree lookup, bool deduping)
2393 {
2394 if (deduping)
2395 for (tree next, probe = fns; probe; probe = next)
2396 {
2397 tree fn = probe;
2398 next = NULL_TREE;
2399
2400 if (TREE_CODE (probe) == OVERLOAD)
2401 {
2402 fn = OVL_FUNCTION (probe);
2403 next = OVL_CHAIN (probe);
2404 }
2405
2406 if (!LOOKUP_SEEN_P (fn))
2407 LOOKUP_SEEN_P (fn) = true;
2408 else
2409 {
2410 /* This function was already seen. Insert all the
2411 predecessors onto the lookup. */
2412 for (; fns != probe; fns = OVL_CHAIN (fns))
2413 {
2414 lookup = lookup_add (OVL_FUNCTION (fns), lookup);
2415 /* Propagate OVL_USING, but OVL_HIDDEN &
2416 OVL_DEDUP_P don't matter. */
2417 if (OVL_USING_P (fns))
2418 OVL_USING_P (lookup) = true;
2419 }
2420
2421 /* And now skip this function. */
2422 fns = next;
2423 }
2424 }
2425
2426 if (fns)
2427 /* We ended in a set of new functions. Add them all in one go. */
2428 lookup = lookup_add (fns, lookup);
2429
2430 return lookup;
2431 }
2432
2433 /* Returns nonzero if X is an expression for a (possibly overloaded)
2434 function. If "f" is a function or function template, "f", "c->f",
2435 "c.f", "C::f", and "f<int>" will all be considered possibly
2436 overloaded functions. Returns 2 if the function is actually
2437 overloaded, i.e., if it is impossible to know the type of the
2438 function without performing overload resolution. */
2439
2440 int
2441 is_overloaded_fn (tree x)
2442 {
2443 STRIP_ANY_LOCATION_WRAPPER (x);
2444
2445 /* A baselink is also considered an overloaded function. */
2446 if (TREE_CODE (x) == OFFSET_REF
2447 || TREE_CODE (x) == COMPONENT_REF)
2448 x = TREE_OPERAND (x, 1);
2449 x = MAYBE_BASELINK_FUNCTIONS (x);
2450 if (TREE_CODE (x) == TEMPLATE_ID_EXPR)
2451 x = TREE_OPERAND (x, 0);
2452
2453 if (DECL_FUNCTION_TEMPLATE_P (OVL_FIRST (x))
2454 || (TREE_CODE (x) == OVERLOAD && !OVL_SINGLE_P (x)))
2455 return 2;
2456
2457 return OVL_P (x);
2458 }
2459
2460 /* X is the CALL_EXPR_FN of a CALL_EXPR. If X represents a dependent name
2461 (14.6.2), return the IDENTIFIER_NODE for that name. Otherwise, return
2462 NULL_TREE. */
2463
2464 tree
2465 dependent_name (tree x)
2466 {
2467 if (identifier_p (x))
2468 return x;
2469 if (TREE_CODE (x) == TEMPLATE_ID_EXPR)
2470 x = TREE_OPERAND (x, 0);
2471 if (OVL_P (x))
2472 return OVL_NAME (x);
2473 return NULL_TREE;
2474 }
2475
2476 /* Returns true iff X is an expression for an overloaded function
2477 whose type cannot be known without performing overload
2478 resolution. */
2479
2480 bool
2481 really_overloaded_fn (tree x)
2482 {
2483 return is_overloaded_fn (x) == 2;
2484 }
2485
2486 /* Get the overload set FROM refers to. Returns NULL if it's not an
2487 overload set. */
2488
2489 tree
2490 maybe_get_fns (tree from)
2491 {
2492 STRIP_ANY_LOCATION_WRAPPER (from);
2493
2494 /* A baselink is also considered an overloaded function. */
2495 if (TREE_CODE (from) == OFFSET_REF
2496 || TREE_CODE (from) == COMPONENT_REF)
2497 from = TREE_OPERAND (from, 1);
2498 if (BASELINK_P (from))
2499 from = BASELINK_FUNCTIONS (from);
2500 if (TREE_CODE (from) == TEMPLATE_ID_EXPR)
2501 from = TREE_OPERAND (from, 0);
2502
2503 if (OVL_P (from))
2504 return from;
2505
2506 return NULL;
2507 }
2508
2509 /* FROM refers to an overload set. Return that set (or die). */
2510
2511 tree
2512 get_fns (tree from)
2513 {
2514 tree res = maybe_get_fns (from);
2515
2516 gcc_assert (res);
2517 return res;
2518 }
2519
2520 /* Return the first function of the overload set FROM refers to. */
2521
2522 tree
2523 get_first_fn (tree from)
2524 {
2525 return OVL_FIRST (get_fns (from));
2526 }
2527
2528 /* Return the scope where the overloaded functions OVL were found. */
2529
2530 tree
2531 ovl_scope (tree ovl)
2532 {
2533 if (TREE_CODE (ovl) == OFFSET_REF
2534 || TREE_CODE (ovl) == COMPONENT_REF)
2535 ovl = TREE_OPERAND (ovl, 1);
2536 if (TREE_CODE (ovl) == BASELINK)
2537 return BINFO_TYPE (BASELINK_BINFO (ovl));
2538 if (TREE_CODE (ovl) == TEMPLATE_ID_EXPR)
2539 ovl = TREE_OPERAND (ovl, 0);
2540 /* Skip using-declarations. */
2541 lkp_iterator iter (ovl);
2542 do
2543 ovl = *iter;
2544 while (iter.using_p () && ++iter);
2545
2546 return CP_DECL_CONTEXT (ovl);
2547 }
2548 \f
2549 #define PRINT_RING_SIZE 4
2550
2551 static const char *
2552 cxx_printable_name_internal (tree decl, int v, bool translate)
2553 {
2554 static unsigned int uid_ring[PRINT_RING_SIZE];
2555 static char *print_ring[PRINT_RING_SIZE];
2556 static bool trans_ring[PRINT_RING_SIZE];
2557 static int ring_counter;
2558 int i;
2559
2560 /* Only cache functions. */
2561 if (v < 2
2562 || TREE_CODE (decl) != FUNCTION_DECL
2563 || DECL_LANG_SPECIFIC (decl) == 0)
2564 return lang_decl_name (decl, v, translate);
2565
2566 /* See if this print name is lying around. */
2567 for (i = 0; i < PRINT_RING_SIZE; i++)
2568 if (uid_ring[i] == DECL_UID (decl) && translate == trans_ring[i])
2569 /* yes, so return it. */
2570 return print_ring[i];
2571
2572 if (++ring_counter == PRINT_RING_SIZE)
2573 ring_counter = 0;
2574
2575 if (current_function_decl != NULL_TREE)
2576 {
2577 /* There may be both translated and untranslated versions of the
2578 name cached. */
2579 for (i = 0; i < 2; i++)
2580 {
2581 if (uid_ring[ring_counter] == DECL_UID (current_function_decl))
2582 ring_counter += 1;
2583 if (ring_counter == PRINT_RING_SIZE)
2584 ring_counter = 0;
2585 }
2586 gcc_assert (uid_ring[ring_counter] != DECL_UID (current_function_decl));
2587 }
2588
2589 free (print_ring[ring_counter]);
2590
2591 print_ring[ring_counter] = xstrdup (lang_decl_name (decl, v, translate));
2592 uid_ring[ring_counter] = DECL_UID (decl);
2593 trans_ring[ring_counter] = translate;
2594 return print_ring[ring_counter];
2595 }
2596
2597 const char *
2598 cxx_printable_name (tree decl, int v)
2599 {
2600 return cxx_printable_name_internal (decl, v, false);
2601 }
2602
2603 const char *
2604 cxx_printable_name_translate (tree decl, int v)
2605 {
2606 return cxx_printable_name_internal (decl, v, true);
2607 }
2608 \f
2609 /* Return the canonical version of exception-specification RAISES for a C++17
2610 function type, for use in type comparison and building TYPE_CANONICAL. */
2611
2612 tree
2613 canonical_eh_spec (tree raises)
2614 {
2615 if (raises == NULL_TREE)
2616 return raises;
2617 else if (DEFERRED_NOEXCEPT_SPEC_P (raises)
2618 || UNPARSED_NOEXCEPT_SPEC_P (raises)
2619 || uses_template_parms (raises)
2620 || uses_template_parms (TREE_PURPOSE (raises)))
2621 /* Keep a dependent or deferred exception specification. */
2622 return raises;
2623 else if (nothrow_spec_p (raises))
2624 /* throw() -> noexcept. */
2625 return noexcept_true_spec;
2626 else
2627 /* For C++17 type matching, anything else -> nothing. */
2628 return NULL_TREE;
2629 }
2630
2631 tree
2632 build_cp_fntype_variant (tree type, cp_ref_qualifier rqual,
2633 tree raises, bool late)
2634 {
2635 cp_cv_quals type_quals = TYPE_QUALS (type);
2636
2637 if (cp_check_qualified_type (type, type, type_quals, rqual, raises, late))
2638 return type;
2639
2640 tree v = TYPE_MAIN_VARIANT (type);
2641 for (; v; v = TYPE_NEXT_VARIANT (v))
2642 if (cp_check_qualified_type (v, type, type_quals, rqual, raises, late))
2643 return v;
2644
2645 /* Need to build a new variant. */
2646 v = build_variant_type_copy (type);
2647 TYPE_RAISES_EXCEPTIONS (v) = raises;
2648 TYPE_HAS_LATE_RETURN_TYPE (v) = late;
2649 switch (rqual)
2650 {
2651 case REF_QUAL_RVALUE:
2652 FUNCTION_RVALUE_QUALIFIED (v) = 1;
2653 FUNCTION_REF_QUALIFIED (v) = 1;
2654 break;
2655 case REF_QUAL_LVALUE:
2656 FUNCTION_RVALUE_QUALIFIED (v) = 0;
2657 FUNCTION_REF_QUALIFIED (v) = 1;
2658 break;
2659 default:
2660 FUNCTION_REF_QUALIFIED (v) = 0;
2661 break;
2662 }
2663
2664 /* Canonicalize the exception specification. */
2665 tree cr = flag_noexcept_type ? canonical_eh_spec (raises) : NULL_TREE;
2666
2667 if (TYPE_STRUCTURAL_EQUALITY_P (type))
2668 /* Propagate structural equality. */
2669 SET_TYPE_STRUCTURAL_EQUALITY (v);
2670 else if (TYPE_CANONICAL (type) != type || cr != raises || late)
2671 /* Build the underlying canonical type, since it is different
2672 from TYPE. */
2673 TYPE_CANONICAL (v) = build_cp_fntype_variant (TYPE_CANONICAL (type),
2674 rqual, cr, false);
2675 else
2676 /* T is its own canonical type. */
2677 TYPE_CANONICAL (v) = v;
2678
2679 return v;
2680 }
2681
2682 /* Build the FUNCTION_TYPE or METHOD_TYPE which may throw exceptions
2683 listed in RAISES. */
2684
2685 tree
2686 build_exception_variant (tree type, tree raises)
2687 {
2688 cp_ref_qualifier rqual = type_memfn_rqual (type);
2689 bool late = TYPE_HAS_LATE_RETURN_TYPE (type);
2690 return build_cp_fntype_variant (type, rqual, raises, late);
2691 }
2692
2693 /* Given a TEMPLATE_TEMPLATE_PARM node T, create a new
2694 BOUND_TEMPLATE_TEMPLATE_PARM bound with NEWARGS as its template
2695 arguments. */
2696
2697 tree
2698 bind_template_template_parm (tree t, tree newargs)
2699 {
2700 tree decl = TYPE_NAME (t);
2701 tree t2;
2702
2703 t2 = cxx_make_type (BOUND_TEMPLATE_TEMPLATE_PARM);
2704 decl = build_decl (input_location,
2705 TYPE_DECL, DECL_NAME (decl), NULL_TREE);
2706
2707 /* These nodes have to be created to reflect new TYPE_DECL and template
2708 arguments. */
2709 TEMPLATE_TYPE_PARM_INDEX (t2) = copy_node (TEMPLATE_TYPE_PARM_INDEX (t));
2710 TEMPLATE_PARM_DECL (TEMPLATE_TYPE_PARM_INDEX (t2)) = decl;
2711 TEMPLATE_TEMPLATE_PARM_TEMPLATE_INFO (t2)
2712 = build_template_info (TEMPLATE_TEMPLATE_PARM_TEMPLATE_DECL (t), newargs);
2713
2714 TREE_TYPE (decl) = t2;
2715 TYPE_NAME (t2) = decl;
2716 TYPE_STUB_DECL (t2) = decl;
2717 TYPE_SIZE (t2) = 0;
2718 SET_TYPE_STRUCTURAL_EQUALITY (t2);
2719
2720 return t2;
2721 }
2722
2723 /* Called from count_trees via walk_tree. */
2724
2725 static tree
2726 count_trees_r (tree *tp, int *walk_subtrees, void *data)
2727 {
2728 ++*((int *) data);
2729
2730 if (TYPE_P (*tp))
2731 *walk_subtrees = 0;
2732
2733 return NULL_TREE;
2734 }
2735
2736 /* Debugging function for measuring the rough complexity of a tree
2737 representation. */
2738
2739 int
2740 count_trees (tree t)
2741 {
2742 int n_trees = 0;
2743 cp_walk_tree_without_duplicates (&t, count_trees_r, &n_trees);
2744 return n_trees;
2745 }
2746
2747 /* Called from verify_stmt_tree via walk_tree. */
2748
2749 static tree
2750 verify_stmt_tree_r (tree* tp, int * /*walk_subtrees*/, void* data)
2751 {
2752 tree t = *tp;
2753 hash_table<nofree_ptr_hash <tree_node> > *statements
2754 = static_cast <hash_table<nofree_ptr_hash <tree_node> > *> (data);
2755 tree_node **slot;
2756
2757 if (!STATEMENT_CODE_P (TREE_CODE (t)))
2758 return NULL_TREE;
2759
2760 /* If this statement is already present in the hash table, then
2761 there is a circularity in the statement tree. */
2762 gcc_assert (!statements->find (t));
2763
2764 slot = statements->find_slot (t, INSERT);
2765 *slot = t;
2766
2767 return NULL_TREE;
2768 }
2769
2770 /* Debugging function to check that the statement T has not been
2771 corrupted. For now, this function simply checks that T contains no
2772 circularities. */
2773
2774 void
2775 verify_stmt_tree (tree t)
2776 {
2777 hash_table<nofree_ptr_hash <tree_node> > statements (37);
2778 cp_walk_tree (&t, verify_stmt_tree_r, &statements, NULL);
2779 }
2780
2781 /* Check if the type T depends on a type with no linkage and if so, return
2782 it. If RELAXED_P then do not consider a class type declared within
2783 a vague-linkage function to have no linkage. */
2784
2785 tree
2786 no_linkage_check (tree t, bool relaxed_p)
2787 {
2788 tree r;
2789
2790 /* Lambda types that don't have mangling scope have no linkage. We
2791 check CLASSTYPE_LAMBDA_EXPR for error_mark_node because
2792 when we get here from pushtag none of the lambda information is
2793 set up yet, so we want to assume that the lambda has linkage and
2794 fix it up later if not. We need to check this even in templates so
2795 that we properly handle a lambda-expression in the signature. */
2796 if (LAMBDA_TYPE_P (t)
2797 && CLASSTYPE_LAMBDA_EXPR (t) != error_mark_node
2798 && LAMBDA_TYPE_EXTRA_SCOPE (t) == NULL_TREE)
2799 return t;
2800
2801 /* Otherwise there's no point in checking linkage on template functions; we
2802 can't know their complete types. */
2803 if (processing_template_decl)
2804 return NULL_TREE;
2805
2806 switch (TREE_CODE (t))
2807 {
2808 case RECORD_TYPE:
2809 if (TYPE_PTRMEMFUNC_P (t))
2810 goto ptrmem;
2811 /* Fall through. */
2812 case UNION_TYPE:
2813 if (!CLASS_TYPE_P (t))
2814 return NULL_TREE;
2815 /* Fall through. */
2816 case ENUMERAL_TYPE:
2817 /* Only treat unnamed types as having no linkage if they're at
2818 namespace scope. This is core issue 966. */
2819 if (TYPE_UNNAMED_P (t) && TYPE_NAMESPACE_SCOPE_P (t))
2820 return t;
2821
2822 for (r = CP_TYPE_CONTEXT (t); ; )
2823 {
2824 /* If we're a nested type of a !TREE_PUBLIC class, we might not
2825 have linkage, or we might just be in an anonymous namespace.
2826 If we're in a TREE_PUBLIC class, we have linkage. */
2827 if (TYPE_P (r) && !TREE_PUBLIC (TYPE_NAME (r)))
2828 return no_linkage_check (TYPE_CONTEXT (t), relaxed_p);
2829 else if (TREE_CODE (r) == FUNCTION_DECL)
2830 {
2831 if (!relaxed_p || !vague_linkage_p (r))
2832 return t;
2833 else
2834 r = CP_DECL_CONTEXT (r);
2835 }
2836 else
2837 break;
2838 }
2839
2840 return NULL_TREE;
2841
2842 case ARRAY_TYPE:
2843 case POINTER_TYPE:
2844 case REFERENCE_TYPE:
2845 case VECTOR_TYPE:
2846 return no_linkage_check (TREE_TYPE (t), relaxed_p);
2847
2848 case OFFSET_TYPE:
2849 ptrmem:
2850 r = no_linkage_check (TYPE_PTRMEM_POINTED_TO_TYPE (t),
2851 relaxed_p);
2852 if (r)
2853 return r;
2854 return no_linkage_check (TYPE_PTRMEM_CLASS_TYPE (t), relaxed_p);
2855
2856 case METHOD_TYPE:
2857 case FUNCTION_TYPE:
2858 {
2859 tree parm = TYPE_ARG_TYPES (t);
2860 if (TREE_CODE (t) == METHOD_TYPE)
2861 /* The 'this' pointer isn't interesting; a method has the same
2862 linkage (or lack thereof) as its enclosing class. */
2863 parm = TREE_CHAIN (parm);
2864 for (;
2865 parm && parm != void_list_node;
2866 parm = TREE_CHAIN (parm))
2867 {
2868 r = no_linkage_check (TREE_VALUE (parm), relaxed_p);
2869 if (r)
2870 return r;
2871 }
2872 return no_linkage_check (TREE_TYPE (t), relaxed_p);
2873 }
2874
2875 default:
2876 return NULL_TREE;
2877 }
2878 }
2879
2880 extern int depth_reached;
2881
2882 void
2883 cxx_print_statistics (void)
2884 {
2885 print_template_statistics ();
2886 if (GATHER_STATISTICS)
2887 fprintf (stderr, "maximum template instantiation depth reached: %d\n",
2888 depth_reached);
2889 }
2890
2891 /* Return, as an INTEGER_CST node, the number of elements for TYPE
2892 (which is an ARRAY_TYPE). This counts only elements of the top
2893 array. */
2894
2895 tree
2896 array_type_nelts_top (tree type)
2897 {
2898 return fold_build2_loc (input_location,
2899 PLUS_EXPR, sizetype,
2900 array_type_nelts (type),
2901 size_one_node);
2902 }
2903
2904 /* Return, as an INTEGER_CST node, the number of elements for TYPE
2905 (which is an ARRAY_TYPE). This one is a recursive count of all
2906 ARRAY_TYPEs that are clumped together. */
2907
2908 tree
2909 array_type_nelts_total (tree type)
2910 {
2911 tree sz = array_type_nelts_top (type);
2912 type = TREE_TYPE (type);
2913 while (TREE_CODE (type) == ARRAY_TYPE)
2914 {
2915 tree n = array_type_nelts_top (type);
2916 sz = fold_build2_loc (input_location,
2917 MULT_EXPR, sizetype, sz, n);
2918 type = TREE_TYPE (type);
2919 }
2920 return sz;
2921 }
2922
2923 struct bot_data
2924 {
2925 splay_tree target_remap;
2926 bool clear_location;
2927 };
2928
2929 /* Called from break_out_target_exprs via mapcar. */
2930
2931 static tree
2932 bot_manip (tree* tp, int* walk_subtrees, void* data_)
2933 {
2934 bot_data &data = *(bot_data*)data_;
2935 splay_tree target_remap = data.target_remap;
2936 tree t = *tp;
2937
2938 if (!TYPE_P (t) && TREE_CONSTANT (t) && !TREE_SIDE_EFFECTS (t))
2939 {
2940 /* There can't be any TARGET_EXPRs or their slot variables below this
2941 point. But we must make a copy, in case subsequent processing
2942 alters any part of it. For example, during gimplification a cast
2943 of the form (T) &X::f (where "f" is a member function) will lead
2944 to replacing the PTRMEM_CST for &X::f with a VAR_DECL. */
2945 *walk_subtrees = 0;
2946 *tp = unshare_expr (t);
2947 return NULL_TREE;
2948 }
2949 if (TREE_CODE (t) == TARGET_EXPR)
2950 {
2951 tree u;
2952
2953 if (TREE_CODE (TREE_OPERAND (t, 1)) == AGGR_INIT_EXPR)
2954 {
2955 u = build_cplus_new (TREE_TYPE (t), TREE_OPERAND (t, 1),
2956 tf_warning_or_error);
2957 if (u == error_mark_node)
2958 return u;
2959 if (AGGR_INIT_ZERO_FIRST (TREE_OPERAND (t, 1)))
2960 AGGR_INIT_ZERO_FIRST (TREE_OPERAND (u, 1)) = true;
2961 }
2962 else
2963 u = build_target_expr_with_type (TREE_OPERAND (t, 1), TREE_TYPE (t),
2964 tf_warning_or_error);
2965
2966 TARGET_EXPR_IMPLICIT_P (u) = TARGET_EXPR_IMPLICIT_P (t);
2967 TARGET_EXPR_LIST_INIT_P (u) = TARGET_EXPR_LIST_INIT_P (t);
2968 TARGET_EXPR_DIRECT_INIT_P (u) = TARGET_EXPR_DIRECT_INIT_P (t);
2969
2970 /* Map the old variable to the new one. */
2971 splay_tree_insert (target_remap,
2972 (splay_tree_key) TREE_OPERAND (t, 0),
2973 (splay_tree_value) TREE_OPERAND (u, 0));
2974
2975 TREE_OPERAND (u, 1) = break_out_target_exprs (TREE_OPERAND (u, 1),
2976 data.clear_location);
2977 if (TREE_OPERAND (u, 1) == error_mark_node)
2978 return error_mark_node;
2979
2980 /* Replace the old expression with the new version. */
2981 *tp = u;
2982 /* We don't have to go below this point; the recursive call to
2983 break_out_target_exprs will have handled anything below this
2984 point. */
2985 *walk_subtrees = 0;
2986 return NULL_TREE;
2987 }
2988 if (TREE_CODE (*tp) == SAVE_EXPR)
2989 {
2990 t = *tp;
2991 splay_tree_node n = splay_tree_lookup (target_remap,
2992 (splay_tree_key) t);
2993 if (n)
2994 {
2995 *tp = (tree)n->value;
2996 *walk_subtrees = 0;
2997 }
2998 else
2999 {
3000 copy_tree_r (tp, walk_subtrees, NULL);
3001 splay_tree_insert (target_remap,
3002 (splay_tree_key)t,
3003 (splay_tree_value)*tp);
3004 /* Make sure we don't remap an already-remapped SAVE_EXPR. */
3005 splay_tree_insert (target_remap,
3006 (splay_tree_key)*tp,
3007 (splay_tree_value)*tp);
3008 }
3009 return NULL_TREE;
3010 }
3011
3012 /* Make a copy of this node. */
3013 t = copy_tree_r (tp, walk_subtrees, NULL);
3014 if (TREE_CODE (*tp) == CALL_EXPR || TREE_CODE (*tp) == AGGR_INIT_EXPR)
3015 if (!processing_template_decl)
3016 set_flags_from_callee (*tp);
3017 if (data.clear_location && EXPR_HAS_LOCATION (*tp))
3018 SET_EXPR_LOCATION (*tp, input_location);
3019 return t;
3020 }
3021
3022 /* Replace all remapped VAR_DECLs in T with their new equivalents.
3023 DATA is really a splay-tree mapping old variables to new
3024 variables. */
3025
3026 static tree
3027 bot_replace (tree* t, int* /*walk_subtrees*/, void* data_)
3028 {
3029 bot_data &data = *(bot_data*)data_;
3030 splay_tree target_remap = data.target_remap;
3031
3032 if (VAR_P (*t))
3033 {
3034 splay_tree_node n = splay_tree_lookup (target_remap,
3035 (splay_tree_key) *t);
3036 if (n)
3037 *t = (tree) n->value;
3038 }
3039 else if (TREE_CODE (*t) == PARM_DECL
3040 && DECL_NAME (*t) == this_identifier
3041 && !DECL_CONTEXT (*t))
3042 {
3043 /* In an NSDMI we need to replace the 'this' parameter we used for
3044 parsing with the real one for this function. */
3045 *t = current_class_ptr;
3046 }
3047 else if (TREE_CODE (*t) == CONVERT_EXPR
3048 && CONVERT_EXPR_VBASE_PATH (*t))
3049 {
3050 /* In an NSDMI build_base_path defers building conversions to virtual
3051 bases, and we handle it here. */
3052 tree basetype = TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (*t)));
3053 vec<tree, va_gc> *vbases = CLASSTYPE_VBASECLASSES (current_class_type);
3054 int i; tree binfo;
3055 FOR_EACH_VEC_SAFE_ELT (vbases, i, binfo)
3056 if (BINFO_TYPE (binfo) == basetype)
3057 break;
3058 *t = build_base_path (PLUS_EXPR, TREE_OPERAND (*t, 0), binfo, true,
3059 tf_warning_or_error);
3060 }
3061
3062 return NULL_TREE;
3063 }
3064
3065 /* When we parse a default argument expression, we may create
3066 temporary variables via TARGET_EXPRs. When we actually use the
3067 default-argument expression, we make a copy of the expression
3068 and replace the temporaries with appropriate local versions.
3069
3070 If CLEAR_LOCATION is true, override any EXPR_LOCATION with
3071 input_location. */
3072
3073 tree
3074 break_out_target_exprs (tree t, bool clear_location /* = false */)
3075 {
3076 static int target_remap_count;
3077 static splay_tree target_remap;
3078
3079 if (!target_remap_count++)
3080 target_remap = splay_tree_new (splay_tree_compare_pointers,
3081 /*splay_tree_delete_key_fn=*/NULL,
3082 /*splay_tree_delete_value_fn=*/NULL);
3083 bot_data data = { target_remap, clear_location };
3084 if (cp_walk_tree (&t, bot_manip, &data, NULL) == error_mark_node)
3085 t = error_mark_node;
3086 cp_walk_tree (&t, bot_replace, &data, NULL);
3087
3088 if (!--target_remap_count)
3089 {
3090 splay_tree_delete (target_remap);
3091 target_remap = NULL;
3092 }
3093
3094 return t;
3095 }
3096
3097 /* Build an expression for the subobject of OBJ at CONSTRUCTOR index INDEX,
3098 which we expect to have type TYPE. */
3099
3100 tree
3101 build_ctor_subob_ref (tree index, tree type, tree obj)
3102 {
3103 if (index == NULL_TREE)
3104 /* Can't refer to a particular member of a vector. */
3105 obj = NULL_TREE;
3106 else if (TREE_CODE (index) == INTEGER_CST)
3107 obj = cp_build_array_ref (input_location, obj, index, tf_none);
3108 else
3109 obj = build_class_member_access_expr (obj, index, NULL_TREE,
3110 /*reference*/false, tf_none);
3111 if (obj)
3112 {
3113 tree objtype = TREE_TYPE (obj);
3114 if (TREE_CODE (objtype) == ARRAY_TYPE && !TYPE_DOMAIN (objtype))
3115 {
3116 /* When the destination object refers to a flexible array member
3117 verify that it matches the type of the source object except
3118 for its domain and qualifiers. */
3119 gcc_assert (comptypes (TYPE_MAIN_VARIANT (type),
3120 TYPE_MAIN_VARIANT (objtype),
3121 COMPARE_REDECLARATION));
3122 }
3123 else
3124 gcc_assert (same_type_ignoring_top_level_qualifiers_p (type, objtype));
3125 }
3126
3127 return obj;
3128 }
3129
3130 struct replace_placeholders_t
3131 {
3132 tree obj; /* The object to be substituted for a PLACEHOLDER_EXPR. */
3133 tree exp; /* The outermost exp. */
3134 bool seen; /* Whether we've encountered a PLACEHOLDER_EXPR. */
3135 hash_set<tree> *pset; /* To avoid walking same trees multiple times. */
3136 };
3137
3138 /* Like substitute_placeholder_in_expr, but handle C++ tree codes and
3139 build up subexpressions as we go deeper. */
3140
3141 static tree
3142 replace_placeholders_r (tree* t, int* walk_subtrees, void* data_)
3143 {
3144 replace_placeholders_t *d = static_cast<replace_placeholders_t*>(data_);
3145 tree obj = d->obj;
3146
3147 if (TYPE_P (*t) || TREE_CONSTANT (*t))
3148 {
3149 *walk_subtrees = false;
3150 return NULL_TREE;
3151 }
3152
3153 switch (TREE_CODE (*t))
3154 {
3155 case PLACEHOLDER_EXPR:
3156 {
3157 tree x = obj;
3158 for (; !same_type_ignoring_top_level_qualifiers_p (TREE_TYPE (*t),
3159 TREE_TYPE (x));
3160 x = TREE_OPERAND (x, 0))
3161 gcc_assert (handled_component_p (x));
3162 *t = unshare_expr (x);
3163 *walk_subtrees = false;
3164 d->seen = true;
3165 }
3166 break;
3167
3168 case CONSTRUCTOR:
3169 {
3170 constructor_elt *ce;
3171 vec<constructor_elt,va_gc> *v = CONSTRUCTOR_ELTS (*t);
3172 /* Don't walk into CONSTRUCTOR_PLACEHOLDER_BOUNDARY ctors
3173 other than the d->exp one, those have PLACEHOLDER_EXPRs
3174 related to another object. */
3175 if ((CONSTRUCTOR_PLACEHOLDER_BOUNDARY (*t)
3176 && *t != d->exp)
3177 || d->pset->add (*t))
3178 {
3179 *walk_subtrees = false;
3180 return NULL_TREE;
3181 }
3182 for (unsigned i = 0; vec_safe_iterate (v, i, &ce); ++i)
3183 {
3184 tree *valp = &ce->value;
3185 tree type = TREE_TYPE (*valp);
3186 tree subob = obj;
3187
3188 /* Elements with RANGE_EXPR index shouldn't have any
3189 placeholders in them. */
3190 if (ce->index && TREE_CODE (ce->index) == RANGE_EXPR)
3191 continue;
3192
3193 if (TREE_CODE (*valp) == CONSTRUCTOR
3194 && AGGREGATE_TYPE_P (type))
3195 {
3196 /* If we're looking at the initializer for OBJ, then build
3197 a sub-object reference. If we're looking at an
3198 initializer for another object, just pass OBJ down. */
3199 if (same_type_ignoring_top_level_qualifiers_p
3200 (TREE_TYPE (*t), TREE_TYPE (obj)))
3201 subob = build_ctor_subob_ref (ce->index, type, obj);
3202 if (TREE_CODE (*valp) == TARGET_EXPR)
3203 valp = &TARGET_EXPR_INITIAL (*valp);
3204 }
3205 d->obj = subob;
3206 cp_walk_tree (valp, replace_placeholders_r, data_, NULL);
3207 d->obj = obj;
3208 }
3209 *walk_subtrees = false;
3210 break;
3211 }
3212
3213 default:
3214 if (d->pset->add (*t))
3215 *walk_subtrees = false;
3216 break;
3217 }
3218
3219 return NULL_TREE;
3220 }
3221
3222 /* Replace PLACEHOLDER_EXPRs in EXP with object OBJ. SEEN_P is set if
3223 a PLACEHOLDER_EXPR has been encountered. */
3224
3225 tree
3226 replace_placeholders (tree exp, tree obj, bool *seen_p)
3227 {
3228 /* This is only relevant for C++14. */
3229 if (cxx_dialect < cxx14)
3230 return exp;
3231
3232 /* If the object isn't a (member of a) class, do nothing. */
3233 tree op0 = obj;
3234 while (TREE_CODE (op0) == COMPONENT_REF)
3235 op0 = TREE_OPERAND (op0, 0);
3236 if (!CLASS_TYPE_P (strip_array_types (TREE_TYPE (op0))))
3237 return exp;
3238
3239 tree *tp = &exp;
3240 if (TREE_CODE (exp) == TARGET_EXPR)
3241 tp = &TARGET_EXPR_INITIAL (exp);
3242 hash_set<tree> pset;
3243 replace_placeholders_t data = { obj, *tp, false, &pset };
3244 cp_walk_tree (tp, replace_placeholders_r, &data, NULL);
3245 if (seen_p)
3246 *seen_p = data.seen;
3247 return exp;
3248 }
3249
3250 /* Callback function for find_placeholders. */
3251
3252 static tree
3253 find_placeholders_r (tree *t, int *walk_subtrees, void *)
3254 {
3255 if (TYPE_P (*t) || TREE_CONSTANT (*t))
3256 {
3257 *walk_subtrees = false;
3258 return NULL_TREE;
3259 }
3260
3261 switch (TREE_CODE (*t))
3262 {
3263 case PLACEHOLDER_EXPR:
3264 return *t;
3265
3266 case CONSTRUCTOR:
3267 if (CONSTRUCTOR_PLACEHOLDER_BOUNDARY (*t))
3268 *walk_subtrees = false;
3269 break;
3270
3271 default:
3272 break;
3273 }
3274
3275 return NULL_TREE;
3276 }
3277
3278 /* Return true if EXP contains a PLACEHOLDER_EXPR. Don't walk into
3279 ctors with CONSTRUCTOR_PLACEHOLDER_BOUNDARY flag set. */
3280
3281 bool
3282 find_placeholders (tree exp)
3283 {
3284 /* This is only relevant for C++14. */
3285 if (cxx_dialect < cxx14)
3286 return false;
3287
3288 return cp_walk_tree_without_duplicates (&exp, find_placeholders_r, NULL);
3289 }
3290
3291 /* Similar to `build_nt', but for template definitions of dependent
3292 expressions */
3293
3294 tree
3295 build_min_nt_loc (location_t loc, enum tree_code code, ...)
3296 {
3297 tree t;
3298 int length;
3299 int i;
3300 va_list p;
3301
3302 gcc_assert (TREE_CODE_CLASS (code) != tcc_vl_exp);
3303
3304 va_start (p, code);
3305
3306 t = make_node (code);
3307 SET_EXPR_LOCATION (t, loc);
3308 length = TREE_CODE_LENGTH (code);
3309
3310 for (i = 0; i < length; i++)
3311 TREE_OPERAND (t, i) = va_arg (p, tree);
3312
3313 va_end (p);
3314 return t;
3315 }
3316
3317 /* Similar to `build', but for template definitions. */
3318
3319 tree
3320 build_min (enum tree_code code, tree tt, ...)
3321 {
3322 tree t;
3323 int length;
3324 int i;
3325 va_list p;
3326
3327 gcc_assert (TREE_CODE_CLASS (code) != tcc_vl_exp);
3328
3329 va_start (p, tt);
3330
3331 t = make_node (code);
3332 length = TREE_CODE_LENGTH (code);
3333 TREE_TYPE (t) = tt;
3334
3335 for (i = 0; i < length; i++)
3336 {
3337 tree x = va_arg (p, tree);
3338 TREE_OPERAND (t, i) = x;
3339 if (x && !TYPE_P (x) && TREE_SIDE_EFFECTS (x))
3340 TREE_SIDE_EFFECTS (t) = 1;
3341 }
3342
3343 va_end (p);
3344
3345 return t;
3346 }
3347
3348 /* Similar to `build', but for template definitions of non-dependent
3349 expressions. NON_DEP is the non-dependent expression that has been
3350 built. */
3351
3352 tree
3353 build_min_non_dep (enum tree_code code, tree non_dep, ...)
3354 {
3355 tree t;
3356 int length;
3357 int i;
3358 va_list p;
3359
3360 gcc_assert (TREE_CODE_CLASS (code) != tcc_vl_exp);
3361
3362 va_start (p, non_dep);
3363
3364 if (REFERENCE_REF_P (non_dep))
3365 non_dep = TREE_OPERAND (non_dep, 0);
3366
3367 t = make_node (code);
3368 SET_EXPR_LOCATION (t, cp_expr_loc_or_input_loc (non_dep));
3369 length = TREE_CODE_LENGTH (code);
3370 TREE_TYPE (t) = unlowered_expr_type (non_dep);
3371 TREE_SIDE_EFFECTS (t) = TREE_SIDE_EFFECTS (non_dep);
3372
3373 for (i = 0; i < length; i++)
3374 TREE_OPERAND (t, i) = va_arg (p, tree);
3375
3376 if (code == COMPOUND_EXPR && TREE_CODE (non_dep) != COMPOUND_EXPR)
3377 /* This should not be considered a COMPOUND_EXPR, because it
3378 resolves to an overload. */
3379 COMPOUND_EXPR_OVERLOADED (t) = 1;
3380
3381 va_end (p);
3382 return convert_from_reference (t);
3383 }
3384
3385 /* Similar to build_min_nt, but call expressions */
3386
3387 tree
3388 build_min_nt_call_vec (tree fn, vec<tree, va_gc> *args)
3389 {
3390 tree ret, t;
3391 unsigned int ix;
3392
3393 ret = build_vl_exp (CALL_EXPR, vec_safe_length (args) + 3);
3394 CALL_EXPR_FN (ret) = fn;
3395 CALL_EXPR_STATIC_CHAIN (ret) = NULL_TREE;
3396 FOR_EACH_VEC_SAFE_ELT (args, ix, t)
3397 CALL_EXPR_ARG (ret, ix) = t;
3398
3399 return ret;
3400 }
3401
3402 /* Similar to `build_min_nt_call_vec', but for template definitions of
3403 non-dependent expressions. NON_DEP is the non-dependent expression
3404 that has been built. */
3405
3406 tree
3407 build_min_non_dep_call_vec (tree non_dep, tree fn, vec<tree, va_gc> *argvec)
3408 {
3409 tree t = build_min_nt_call_vec (fn, argvec);
3410 if (REFERENCE_REF_P (non_dep))
3411 non_dep = TREE_OPERAND (non_dep, 0);
3412 TREE_TYPE (t) = TREE_TYPE (non_dep);
3413 TREE_SIDE_EFFECTS (t) = TREE_SIDE_EFFECTS (non_dep);
3414 return convert_from_reference (t);
3415 }
3416
3417 /* Similar to build_min_non_dep, but for expressions that have been resolved to
3418 a call to an operator overload. OP is the operator that has been
3419 overloaded. NON_DEP is the non-dependent expression that's been built,
3420 which should be a CALL_EXPR or an INDIRECT_REF to a CALL_EXPR. OVERLOAD is
3421 the overload that NON_DEP is calling. */
3422
3423 tree
3424 build_min_non_dep_op_overload (enum tree_code op,
3425 tree non_dep,
3426 tree overload, ...)
3427 {
3428 va_list p;
3429 int nargs, expected_nargs;
3430 tree fn, call;
3431
3432 non_dep = extract_call_expr (non_dep);
3433
3434 nargs = call_expr_nargs (non_dep);
3435
3436 expected_nargs = cp_tree_code_length (op);
3437 if ((op == POSTINCREMENT_EXPR
3438 || op == POSTDECREMENT_EXPR)
3439 /* With -fpermissive non_dep could be operator++(). */
3440 && (!flag_permissive || nargs != expected_nargs))
3441 expected_nargs += 1;
3442 gcc_assert (nargs == expected_nargs);
3443
3444 releasing_vec args;
3445 va_start (p, overload);
3446
3447 if (TREE_CODE (TREE_TYPE (overload)) == FUNCTION_TYPE)
3448 {
3449 fn = overload;
3450 for (int i = 0; i < nargs; i++)
3451 {
3452 tree arg = va_arg (p, tree);
3453 vec_safe_push (args, arg);
3454 }
3455 }
3456 else if (TREE_CODE (TREE_TYPE (overload)) == METHOD_TYPE)
3457 {
3458 tree object = va_arg (p, tree);
3459 tree binfo = TYPE_BINFO (TREE_TYPE (object));
3460 tree method = build_baselink (binfo, binfo, overload, NULL_TREE);
3461 fn = build_min (COMPONENT_REF, TREE_TYPE (overload),
3462 object, method, NULL_TREE);
3463 for (int i = 1; i < nargs; i++)
3464 {
3465 tree arg = va_arg (p, tree);
3466 vec_safe_push (args, arg);
3467 }
3468 }
3469 else
3470 gcc_unreachable ();
3471
3472 va_end (p);
3473 call = build_min_non_dep_call_vec (non_dep, fn, args);
3474
3475 tree call_expr = extract_call_expr (call);
3476 KOENIG_LOOKUP_P (call_expr) = KOENIG_LOOKUP_P (non_dep);
3477 CALL_EXPR_OPERATOR_SYNTAX (call_expr) = true;
3478 CALL_EXPR_ORDERED_ARGS (call_expr) = CALL_EXPR_ORDERED_ARGS (non_dep);
3479 CALL_EXPR_REVERSE_ARGS (call_expr) = CALL_EXPR_REVERSE_ARGS (non_dep);
3480
3481 return call;
3482 }
3483
3484 /* Return a new tree vec copied from VEC, with ELT inserted at index IDX. */
3485
3486 vec<tree, va_gc> *
3487 vec_copy_and_insert (vec<tree, va_gc> *old_vec, tree elt, unsigned idx)
3488 {
3489 unsigned len = vec_safe_length (old_vec);
3490 gcc_assert (idx <= len);
3491
3492 vec<tree, va_gc> *new_vec = NULL;
3493 vec_alloc (new_vec, len + 1);
3494
3495 unsigned i;
3496 for (i = 0; i < len; ++i)
3497 {
3498 if (i == idx)
3499 new_vec->quick_push (elt);
3500 new_vec->quick_push ((*old_vec)[i]);
3501 }
3502 if (i == idx)
3503 new_vec->quick_push (elt);
3504
3505 return new_vec;
3506 }
3507
3508 tree
3509 get_type_decl (tree t)
3510 {
3511 if (TREE_CODE (t) == TYPE_DECL)
3512 return t;
3513 if (TYPE_P (t))
3514 return TYPE_STUB_DECL (t);
3515 gcc_assert (t == error_mark_node);
3516 return t;
3517 }
3518
3519 /* Returns the namespace that contains DECL, whether directly or
3520 indirectly. */
3521
3522 tree
3523 decl_namespace_context (tree decl)
3524 {
3525 while (1)
3526 {
3527 if (TREE_CODE (decl) == NAMESPACE_DECL)
3528 return decl;
3529 else if (TYPE_P (decl))
3530 decl = CP_DECL_CONTEXT (TYPE_MAIN_DECL (decl));
3531 else
3532 decl = CP_DECL_CONTEXT (decl);
3533 }
3534 }
3535
3536 /* Returns true if decl is within an anonymous namespace, however deeply
3537 nested, or false otherwise. */
3538
3539 bool
3540 decl_anon_ns_mem_p (const_tree decl)
3541 {
3542 while (TREE_CODE (decl) != NAMESPACE_DECL)
3543 {
3544 /* Classes inside anonymous namespaces have TREE_PUBLIC == 0. */
3545 if (TYPE_P (decl))
3546 return !TREE_PUBLIC (TYPE_MAIN_DECL (decl));
3547
3548 decl = CP_DECL_CONTEXT (decl);
3549 }
3550 return !TREE_PUBLIC (decl);
3551 }
3552
3553 /* Subroutine of cp_tree_equal: t1 and t2 are the CALL_EXPR_FNs of two
3554 CALL_EXPRS. Return whether they are equivalent. */
3555
3556 static bool
3557 called_fns_equal (tree t1, tree t2)
3558 {
3559 /* Core 1321: dependent names are equivalent even if the overload sets
3560 are different. But do compare explicit template arguments. */
3561 tree name1 = dependent_name (t1);
3562 tree name2 = dependent_name (t2);
3563 if (name1 || name2)
3564 {
3565 tree targs1 = NULL_TREE, targs2 = NULL_TREE;
3566
3567 if (name1 != name2)
3568 return false;
3569
3570 if (TREE_CODE (t1) == TEMPLATE_ID_EXPR)
3571 targs1 = TREE_OPERAND (t1, 1);
3572 if (TREE_CODE (t2) == TEMPLATE_ID_EXPR)
3573 targs2 = TREE_OPERAND (t2, 1);
3574 return cp_tree_equal (targs1, targs2);
3575 }
3576 else
3577 return cp_tree_equal (t1, t2);
3578 }
3579
3580 /* Return truthvalue of whether T1 is the same tree structure as T2.
3581 Return 1 if they are the same. Return 0 if they are different. */
3582
3583 bool
3584 cp_tree_equal (tree t1, tree t2)
3585 {
3586 enum tree_code code1, code2;
3587
3588 if (t1 == t2)
3589 return true;
3590 if (!t1 || !t2)
3591 return false;
3592
3593 code1 = TREE_CODE (t1);
3594 code2 = TREE_CODE (t2);
3595
3596 if (code1 != code2)
3597 return false;
3598
3599 if (CONSTANT_CLASS_P (t1)
3600 && !same_type_p (TREE_TYPE (t1), TREE_TYPE (t2)))
3601 return false;
3602
3603 switch (code1)
3604 {
3605 case VOID_CST:
3606 /* There's only a single VOID_CST node, so we should never reach
3607 here. */
3608 gcc_unreachable ();
3609
3610 case INTEGER_CST:
3611 return tree_int_cst_equal (t1, t2);
3612
3613 case REAL_CST:
3614 return real_equal (&TREE_REAL_CST (t1), &TREE_REAL_CST (t2));
3615
3616 case STRING_CST:
3617 return TREE_STRING_LENGTH (t1) == TREE_STRING_LENGTH (t2)
3618 && !memcmp (TREE_STRING_POINTER (t1), TREE_STRING_POINTER (t2),
3619 TREE_STRING_LENGTH (t1));
3620
3621 case FIXED_CST:
3622 return FIXED_VALUES_IDENTICAL (TREE_FIXED_CST (t1),
3623 TREE_FIXED_CST (t2));
3624
3625 case COMPLEX_CST:
3626 return cp_tree_equal (TREE_REALPART (t1), TREE_REALPART (t2))
3627 && cp_tree_equal (TREE_IMAGPART (t1), TREE_IMAGPART (t2));
3628
3629 case VECTOR_CST:
3630 return operand_equal_p (t1, t2, OEP_ONLY_CONST);
3631
3632 case CONSTRUCTOR:
3633 /* We need to do this when determining whether or not two
3634 non-type pointer to member function template arguments
3635 are the same. */
3636 if (!same_type_p (TREE_TYPE (t1), TREE_TYPE (t2))
3637 || CONSTRUCTOR_NELTS (t1) != CONSTRUCTOR_NELTS (t2))
3638 return false;
3639 {
3640 tree field, value;
3641 unsigned int i;
3642 FOR_EACH_CONSTRUCTOR_ELT (CONSTRUCTOR_ELTS (t1), i, field, value)
3643 {
3644 constructor_elt *elt2 = CONSTRUCTOR_ELT (t2, i);
3645 if (!cp_tree_equal (field, elt2->index)
3646 || !cp_tree_equal (value, elt2->value))
3647 return false;
3648 }
3649 }
3650 return true;
3651
3652 case TREE_LIST:
3653 if (!cp_tree_equal (TREE_PURPOSE (t1), TREE_PURPOSE (t2)))
3654 return false;
3655 if (!cp_tree_equal (TREE_VALUE (t1), TREE_VALUE (t2)))
3656 return false;
3657 return cp_tree_equal (TREE_CHAIN (t1), TREE_CHAIN (t2));
3658
3659 case SAVE_EXPR:
3660 return cp_tree_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0));
3661
3662 case CALL_EXPR:
3663 {
3664 tree arg1, arg2;
3665 call_expr_arg_iterator iter1, iter2;
3666 if (!called_fns_equal (CALL_EXPR_FN (t1), CALL_EXPR_FN (t2)))
3667 return false;
3668 for (arg1 = first_call_expr_arg (t1, &iter1),
3669 arg2 = first_call_expr_arg (t2, &iter2);
3670 arg1 && arg2;
3671 arg1 = next_call_expr_arg (&iter1),
3672 arg2 = next_call_expr_arg (&iter2))
3673 if (!cp_tree_equal (arg1, arg2))
3674 return false;
3675 if (arg1 || arg2)
3676 return false;
3677 return true;
3678 }
3679
3680 case TARGET_EXPR:
3681 {
3682 tree o1 = TREE_OPERAND (t1, 0);
3683 tree o2 = TREE_OPERAND (t2, 0);
3684
3685 /* Special case: if either target is an unallocated VAR_DECL,
3686 it means that it's going to be unified with whatever the
3687 TARGET_EXPR is really supposed to initialize, so treat it
3688 as being equivalent to anything. */
3689 if (VAR_P (o1) && DECL_NAME (o1) == NULL_TREE
3690 && !DECL_RTL_SET_P (o1))
3691 /*Nop*/;
3692 else if (VAR_P (o2) && DECL_NAME (o2) == NULL_TREE
3693 && !DECL_RTL_SET_P (o2))
3694 /*Nop*/;
3695 else if (!cp_tree_equal (o1, o2))
3696 return false;
3697
3698 return cp_tree_equal (TREE_OPERAND (t1, 1), TREE_OPERAND (t2, 1));
3699 }
3700
3701 case PARM_DECL:
3702 /* For comparing uses of parameters in late-specified return types
3703 with an out-of-class definition of the function, but can also come
3704 up for expressions that involve 'this' in a member function
3705 template. */
3706
3707 if (comparing_specializations && !CONSTRAINT_VAR_P (t1))
3708 /* When comparing hash table entries, only an exact match is
3709 good enough; we don't want to replace 'this' with the
3710 version from another function. But be more flexible
3711 with local parameters in a requires-expression. */
3712 return false;
3713
3714 if (same_type_p (TREE_TYPE (t1), TREE_TYPE (t2)))
3715 {
3716 if (DECL_ARTIFICIAL (t1) ^ DECL_ARTIFICIAL (t2))
3717 return false;
3718 if (CONSTRAINT_VAR_P (t1) ^ CONSTRAINT_VAR_P (t2))
3719 return false;
3720 if (DECL_ARTIFICIAL (t1)
3721 || (DECL_PARM_LEVEL (t1) == DECL_PARM_LEVEL (t2)
3722 && DECL_PARM_INDEX (t1) == DECL_PARM_INDEX (t2)))
3723 return true;
3724 }
3725 return false;
3726
3727 case VAR_DECL:
3728 case CONST_DECL:
3729 case FIELD_DECL:
3730 case FUNCTION_DECL:
3731 case TEMPLATE_DECL:
3732 case IDENTIFIER_NODE:
3733 case SSA_NAME:
3734 case USING_DECL:
3735 case DEFERRED_PARSE:
3736 return false;
3737
3738 case BASELINK:
3739 return (BASELINK_BINFO (t1) == BASELINK_BINFO (t2)
3740 && BASELINK_ACCESS_BINFO (t1) == BASELINK_ACCESS_BINFO (t2)
3741 && BASELINK_QUALIFIED_P (t1) == BASELINK_QUALIFIED_P (t2)
3742 && cp_tree_equal (BASELINK_FUNCTIONS (t1),
3743 BASELINK_FUNCTIONS (t2)));
3744
3745 case TEMPLATE_PARM_INDEX:
3746 return (TEMPLATE_PARM_IDX (t1) == TEMPLATE_PARM_IDX (t2)
3747 && TEMPLATE_PARM_LEVEL (t1) == TEMPLATE_PARM_LEVEL (t2)
3748 && (TEMPLATE_PARM_PARAMETER_PACK (t1)
3749 == TEMPLATE_PARM_PARAMETER_PACK (t2))
3750 && same_type_p (TREE_TYPE (TEMPLATE_PARM_DECL (t1)),
3751 TREE_TYPE (TEMPLATE_PARM_DECL (t2))));
3752
3753 case TEMPLATE_ID_EXPR:
3754 return (cp_tree_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0))
3755 && cp_tree_equal (TREE_OPERAND (t1, 1), TREE_OPERAND (t2, 1)));
3756
3757 case CONSTRAINT_INFO:
3758 return cp_tree_equal (CI_ASSOCIATED_CONSTRAINTS (t1),
3759 CI_ASSOCIATED_CONSTRAINTS (t2));
3760
3761 case CHECK_CONSTR:
3762 return (CHECK_CONSTR_CONCEPT (t1) == CHECK_CONSTR_CONCEPT (t2)
3763 && comp_template_args (CHECK_CONSTR_ARGS (t1),
3764 CHECK_CONSTR_ARGS (t2)));
3765
3766 case TREE_VEC:
3767 {
3768 unsigned ix;
3769 if (TREE_VEC_LENGTH (t1) != TREE_VEC_LENGTH (t2))
3770 return false;
3771 for (ix = TREE_VEC_LENGTH (t1); ix--;)
3772 if (!cp_tree_equal (TREE_VEC_ELT (t1, ix),
3773 TREE_VEC_ELT (t2, ix)))
3774 return false;
3775 return true;
3776 }
3777
3778 case SIZEOF_EXPR:
3779 case ALIGNOF_EXPR:
3780 {
3781 tree o1 = TREE_OPERAND (t1, 0);
3782 tree o2 = TREE_OPERAND (t2, 0);
3783
3784 if (code1 == SIZEOF_EXPR)
3785 {
3786 if (SIZEOF_EXPR_TYPE_P (t1))
3787 o1 = TREE_TYPE (o1);
3788 if (SIZEOF_EXPR_TYPE_P (t2))
3789 o2 = TREE_TYPE (o2);
3790 }
3791 if (TREE_CODE (o1) != TREE_CODE (o2))
3792 return false;
3793 if (TYPE_P (o1))
3794 return same_type_p (o1, o2);
3795 else
3796 return cp_tree_equal (o1, o2);
3797 }
3798
3799 case MODOP_EXPR:
3800 {
3801 tree t1_op1, t2_op1;
3802
3803 if (!cp_tree_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0)))
3804 return false;
3805
3806 t1_op1 = TREE_OPERAND (t1, 1);
3807 t2_op1 = TREE_OPERAND (t2, 1);
3808 if (TREE_CODE (t1_op1) != TREE_CODE (t2_op1))
3809 return false;
3810
3811 return cp_tree_equal (TREE_OPERAND (t1, 2), TREE_OPERAND (t2, 2));
3812 }
3813
3814 case PTRMEM_CST:
3815 /* Two pointer-to-members are the same if they point to the same
3816 field or function in the same class. */
3817 if (PTRMEM_CST_MEMBER (t1) != PTRMEM_CST_MEMBER (t2))
3818 return false;
3819
3820 return same_type_p (PTRMEM_CST_CLASS (t1), PTRMEM_CST_CLASS (t2));
3821
3822 case OVERLOAD:
3823 {
3824 /* Two overloads. Must be exactly the same set of decls. */
3825 lkp_iterator first (t1);
3826 lkp_iterator second (t2);
3827
3828 for (; first && second; ++first, ++second)
3829 if (*first != *second)
3830 return false;
3831 return !(first || second);
3832 }
3833
3834 case TRAIT_EXPR:
3835 if (TRAIT_EXPR_KIND (t1) != TRAIT_EXPR_KIND (t2))
3836 return false;
3837 return same_type_p (TRAIT_EXPR_TYPE1 (t1), TRAIT_EXPR_TYPE1 (t2))
3838 && cp_tree_equal (TRAIT_EXPR_TYPE2 (t1), TRAIT_EXPR_TYPE2 (t2));
3839
3840 case CAST_EXPR:
3841 case STATIC_CAST_EXPR:
3842 case REINTERPRET_CAST_EXPR:
3843 case CONST_CAST_EXPR:
3844 case DYNAMIC_CAST_EXPR:
3845 case IMPLICIT_CONV_EXPR:
3846 case NEW_EXPR:
3847 CASE_CONVERT:
3848 case NON_LVALUE_EXPR:
3849 case VIEW_CONVERT_EXPR:
3850 if (!same_type_p (TREE_TYPE (t1), TREE_TYPE (t2)))
3851 return false;
3852 /* Now compare operands as usual. */
3853 break;
3854
3855 case DEFERRED_NOEXCEPT:
3856 return (cp_tree_equal (DEFERRED_NOEXCEPT_PATTERN (t1),
3857 DEFERRED_NOEXCEPT_PATTERN (t2))
3858 && comp_template_args (DEFERRED_NOEXCEPT_ARGS (t1),
3859 DEFERRED_NOEXCEPT_ARGS (t2)));
3860
3861 case LAMBDA_EXPR:
3862 /* Two lambda-expressions are never considered equivalent. */
3863 return false;
3864
3865 case TYPE_ARGUMENT_PACK:
3866 case NONTYPE_ARGUMENT_PACK:
3867 {
3868 tree p1 = ARGUMENT_PACK_ARGS (t1);
3869 tree p2 = ARGUMENT_PACK_ARGS (t2);
3870 int len = TREE_VEC_LENGTH (p1);
3871 if (TREE_VEC_LENGTH (p2) != len)
3872 return false;
3873
3874 for (int ix = 0; ix != len; ix++)
3875 if (!template_args_equal (TREE_VEC_ELT (p1, ix),
3876 TREE_VEC_ELT (p2, ix)))
3877 return false;
3878 return true;
3879 }
3880
3881 default:
3882 break;
3883 }
3884
3885 switch (TREE_CODE_CLASS (code1))
3886 {
3887 case tcc_unary:
3888 case tcc_binary:
3889 case tcc_comparison:
3890 case tcc_expression:
3891 case tcc_vl_exp:
3892 case tcc_reference:
3893 case tcc_statement:
3894 {
3895 int i, n;
3896
3897 n = cp_tree_operand_length (t1);
3898 if (TREE_CODE_CLASS (code1) == tcc_vl_exp
3899 && n != TREE_OPERAND_LENGTH (t2))
3900 return false;
3901
3902 for (i = 0; i < n; ++i)
3903 if (!cp_tree_equal (TREE_OPERAND (t1, i), TREE_OPERAND (t2, i)))
3904 return false;
3905
3906 return true;
3907 }
3908
3909 case tcc_type:
3910 return same_type_p (t1, t2);
3911 default:
3912 gcc_unreachable ();
3913 }
3914 /* We can get here with --disable-checking. */
3915 return false;
3916 }
3917
3918 /* The type of ARG when used as an lvalue. */
3919
3920 tree
3921 lvalue_type (tree arg)
3922 {
3923 tree type = TREE_TYPE (arg);
3924 return type;
3925 }
3926
3927 /* The type of ARG for printing error messages; denote lvalues with
3928 reference types. */
3929
3930 tree
3931 error_type (tree arg)
3932 {
3933 tree type = TREE_TYPE (arg);
3934
3935 if (TREE_CODE (type) == ARRAY_TYPE)
3936 ;
3937 else if (TREE_CODE (type) == ERROR_MARK)
3938 ;
3939 else if (lvalue_p (arg))
3940 type = build_reference_type (lvalue_type (arg));
3941 else if (MAYBE_CLASS_TYPE_P (type))
3942 type = lvalue_type (arg);
3943
3944 return type;
3945 }
3946
3947 /* Does FUNCTION use a variable-length argument list? */
3948
3949 int
3950 varargs_function_p (const_tree function)
3951 {
3952 return stdarg_p (TREE_TYPE (function));
3953 }
3954
3955 /* Returns 1 if decl is a member of a class. */
3956
3957 int
3958 member_p (const_tree decl)
3959 {
3960 const_tree const ctx = DECL_CONTEXT (decl);
3961 return (ctx && TYPE_P (ctx));
3962 }
3963
3964 /* Create a placeholder for member access where we don't actually have an
3965 object that the access is against. */
3966
3967 tree
3968 build_dummy_object (tree type)
3969 {
3970 tree decl = build1 (CONVERT_EXPR, build_pointer_type (type), void_node);
3971 return cp_build_fold_indirect_ref (decl);
3972 }
3973
3974 /* We've gotten a reference to a member of TYPE. Return *this if appropriate,
3975 or a dummy object otherwise. If BINFOP is non-0, it is filled with the
3976 binfo path from current_class_type to TYPE, or 0. */
3977
3978 tree
3979 maybe_dummy_object (tree type, tree* binfop)
3980 {
3981 tree decl, context;
3982 tree binfo;
3983 tree current = current_nonlambda_class_type ();
3984
3985 if (current
3986 && (binfo = lookup_base (current, type, ba_any, NULL,
3987 tf_warning_or_error)))
3988 context = current;
3989 else
3990 {
3991 /* Reference from a nested class member function. */
3992 context = type;
3993 binfo = TYPE_BINFO (type);
3994 }
3995
3996 if (binfop)
3997 *binfop = binfo;
3998
3999 if (current_class_ref
4000 /* current_class_ref might not correspond to current_class_type if
4001 we're in tsubst_default_argument or a lambda-declarator; in either
4002 case, we want to use current_class_ref if it matches CONTEXT. */
4003 && (same_type_ignoring_top_level_qualifiers_p
4004 (TREE_TYPE (current_class_ref), context)))
4005 decl = current_class_ref;
4006 else
4007 decl = build_dummy_object (context);
4008
4009 return decl;
4010 }
4011
4012 /* Returns 1 if OB is a placeholder object, or a pointer to one. */
4013
4014 int
4015 is_dummy_object (const_tree ob)
4016 {
4017 if (INDIRECT_REF_P (ob))
4018 ob = TREE_OPERAND (ob, 0);
4019 return (TREE_CODE (ob) == CONVERT_EXPR
4020 && TREE_OPERAND (ob, 0) == void_node);
4021 }
4022
4023 /* Returns 1 iff type T is something we want to treat as a scalar type for
4024 the purpose of deciding whether it is trivial/POD/standard-layout. */
4025
4026 bool
4027 scalarish_type_p (const_tree t)
4028 {
4029 if (t == error_mark_node)
4030 return 1;
4031
4032 return (SCALAR_TYPE_P (t) || VECTOR_TYPE_P (t));
4033 }
4034
4035 /* Returns true iff T requires non-trivial default initialization. */
4036
4037 bool
4038 type_has_nontrivial_default_init (const_tree t)
4039 {
4040 t = strip_array_types (CONST_CAST_TREE (t));
4041
4042 if (CLASS_TYPE_P (t))
4043 return TYPE_HAS_COMPLEX_DFLT (t);
4044 else
4045 return 0;
4046 }
4047
4048 /* Track classes with only deleted copy/move constructors so that we can warn
4049 if they are used in call/return by value. */
4050
4051 static GTY(()) hash_set<tree>* deleted_copy_types;
4052 static void
4053 remember_deleted_copy (const_tree t)
4054 {
4055 if (!deleted_copy_types)
4056 deleted_copy_types = hash_set<tree>::create_ggc(37);
4057 deleted_copy_types->add (CONST_CAST_TREE (t));
4058 }
4059 void
4060 maybe_warn_parm_abi (tree t, location_t loc)
4061 {
4062 if (!deleted_copy_types
4063 || !deleted_copy_types->contains (t))
4064 return;
4065
4066 if ((flag_abi_version == 12 || warn_abi_version == 12)
4067 && classtype_has_non_deleted_move_ctor (t))
4068 {
4069 bool w;
4070 auto_diagnostic_group d;
4071 if (flag_abi_version > 12)
4072 w = warning_at (loc, OPT_Wabi, "%<-fabi-version=13%> (GCC 8.2) fixes "
4073 "the calling convention for %qT, which was "
4074 "accidentally changed in 8.1", t);
4075 else
4076 w = warning_at (loc, OPT_Wabi, "%<-fabi-version=12%> (GCC 8.1) accident"
4077 "ally changes the calling convention for %qT", t);
4078 if (w)
4079 inform (location_of (t), " declared here");
4080 return;
4081 }
4082
4083 auto_diagnostic_group d;
4084 if (warning_at (loc, OPT_Wabi, "the calling convention for %qT changes in "
4085 "%<-fabi-version=13%> (GCC 8.2)", t))
4086 inform (location_of (t), " because all of its copy and move "
4087 "constructors are deleted");
4088 }
4089
4090 /* Returns true iff copying an object of type T (including via move
4091 constructor) is non-trivial. That is, T has no non-trivial copy
4092 constructors and no non-trivial move constructors, and not all copy/move
4093 constructors are deleted. This function implements the ABI notion of
4094 non-trivial copy, which has diverged from the one in the standard. */
4095
4096 bool
4097 type_has_nontrivial_copy_init (const_tree type)
4098 {
4099 tree t = strip_array_types (CONST_CAST_TREE (type));
4100
4101 if (CLASS_TYPE_P (t))
4102 {
4103 gcc_assert (COMPLETE_TYPE_P (t));
4104
4105 if (TYPE_HAS_COMPLEX_COPY_CTOR (t)
4106 || TYPE_HAS_COMPLEX_MOVE_CTOR (t))
4107 /* Nontrivial. */
4108 return true;
4109
4110 if (cxx_dialect < cxx11)
4111 /* No deleted functions before C++11. */
4112 return false;
4113
4114 /* Before ABI v12 we did a bitwise copy of types with only deleted
4115 copy/move constructors. */
4116 if (!abi_version_at_least (12)
4117 && !(warn_abi && abi_version_crosses (12)))
4118 return false;
4119
4120 bool saw_copy = false;
4121 bool saw_non_deleted = false;
4122 bool saw_non_deleted_move = false;
4123
4124 if (CLASSTYPE_LAZY_MOVE_CTOR (t))
4125 saw_copy = saw_non_deleted = true;
4126 else if (CLASSTYPE_LAZY_COPY_CTOR (t))
4127 {
4128 saw_copy = true;
4129 if (classtype_has_move_assign_or_move_ctor_p (t, true))
4130 /* [class.copy]/8 If the class definition declares a move
4131 constructor or move assignment operator, the implicitly declared
4132 copy constructor is defined as deleted.... */;
4133 else
4134 /* Any other reason the implicitly-declared function would be
4135 deleted would also cause TYPE_HAS_COMPLEX_COPY_CTOR to be
4136 set. */
4137 saw_non_deleted = true;
4138 }
4139
4140 if (!saw_non_deleted)
4141 for (ovl_iterator iter (CLASSTYPE_CONSTRUCTORS (t)); iter; ++iter)
4142 {
4143 tree fn = *iter;
4144 if (copy_fn_p (fn))
4145 {
4146 saw_copy = true;
4147 if (!DECL_DELETED_FN (fn))
4148 {
4149 /* Not deleted, therefore trivial. */
4150 saw_non_deleted = true;
4151 break;
4152 }
4153 }
4154 else if (move_fn_p (fn))
4155 if (!DECL_DELETED_FN (fn))
4156 saw_non_deleted_move = true;
4157 }
4158
4159 gcc_assert (saw_copy);
4160
4161 /* ABI v12 buggily ignored move constructors. */
4162 bool v11nontriv = false;
4163 bool v12nontriv = !saw_non_deleted;
4164 bool v13nontriv = !saw_non_deleted && !saw_non_deleted_move;
4165 bool nontriv = (abi_version_at_least (13) ? v13nontriv
4166 : flag_abi_version == 12 ? v12nontriv
4167 : v11nontriv);
4168 bool warn_nontriv = (warn_abi_version >= 13 ? v13nontriv
4169 : warn_abi_version == 12 ? v12nontriv
4170 : v11nontriv);
4171 if (nontriv != warn_nontriv)
4172 remember_deleted_copy (t);
4173
4174 return nontriv;
4175 }
4176 else
4177 return 0;
4178 }
4179
4180 /* Returns 1 iff type T is a trivially copyable type, as defined in
4181 [basic.types] and [class]. */
4182
4183 bool
4184 trivially_copyable_p (const_tree t)
4185 {
4186 t = strip_array_types (CONST_CAST_TREE (t));
4187
4188 if (CLASS_TYPE_P (t))
4189 return ((!TYPE_HAS_COPY_CTOR (t)
4190 || !TYPE_HAS_COMPLEX_COPY_CTOR (t))
4191 && !TYPE_HAS_COMPLEX_MOVE_CTOR (t)
4192 && (!TYPE_HAS_COPY_ASSIGN (t)
4193 || !TYPE_HAS_COMPLEX_COPY_ASSIGN (t))
4194 && !TYPE_HAS_COMPLEX_MOVE_ASSIGN (t)
4195 && TYPE_HAS_TRIVIAL_DESTRUCTOR (t));
4196 else
4197 /* CWG 2094 makes volatile-qualified scalars trivially copyable again. */
4198 return scalarish_type_p (t);
4199 }
4200
4201 /* Returns 1 iff type T is a trivial type, as defined in [basic.types] and
4202 [class]. */
4203
4204 bool
4205 trivial_type_p (const_tree t)
4206 {
4207 t = strip_array_types (CONST_CAST_TREE (t));
4208
4209 if (CLASS_TYPE_P (t))
4210 return (TYPE_HAS_TRIVIAL_DFLT (t)
4211 && trivially_copyable_p (t));
4212 else
4213 return scalarish_type_p (t);
4214 }
4215
4216 /* Returns 1 iff type T is a POD type, as defined in [basic.types]. */
4217
4218 bool
4219 pod_type_p (const_tree t)
4220 {
4221 /* This CONST_CAST is okay because strip_array_types returns its
4222 argument unmodified and we assign it to a const_tree. */
4223 t = strip_array_types (CONST_CAST_TREE(t));
4224
4225 if (!CLASS_TYPE_P (t))
4226 return scalarish_type_p (t);
4227 else if (cxx_dialect > cxx98)
4228 /* [class]/10: A POD struct is a class that is both a trivial class and a
4229 standard-layout class, and has no non-static data members of type
4230 non-POD struct, non-POD union (or array of such types).
4231
4232 We don't need to check individual members because if a member is
4233 non-std-layout or non-trivial, the class will be too. */
4234 return (std_layout_type_p (t) && trivial_type_p (t));
4235 else
4236 /* The C++98 definition of POD is different. */
4237 return !CLASSTYPE_NON_LAYOUT_POD_P (t);
4238 }
4239
4240 /* Returns true iff T is POD for the purpose of layout, as defined in the
4241 C++ ABI. */
4242
4243 bool
4244 layout_pod_type_p (const_tree t)
4245 {
4246 t = strip_array_types (CONST_CAST_TREE (t));
4247
4248 if (CLASS_TYPE_P (t))
4249 return !CLASSTYPE_NON_LAYOUT_POD_P (t);
4250 else
4251 return scalarish_type_p (t);
4252 }
4253
4254 /* Returns true iff T is a standard-layout type, as defined in
4255 [basic.types]. */
4256
4257 bool
4258 std_layout_type_p (const_tree t)
4259 {
4260 t = strip_array_types (CONST_CAST_TREE (t));
4261
4262 if (CLASS_TYPE_P (t))
4263 return !CLASSTYPE_NON_STD_LAYOUT (t);
4264 else
4265 return scalarish_type_p (t);
4266 }
4267
4268 static bool record_has_unique_obj_representations (const_tree, const_tree);
4269
4270 /* Returns true iff T satisfies std::has_unique_object_representations<T>,
4271 as defined in [meta.unary.prop]. */
4272
4273 bool
4274 type_has_unique_obj_representations (const_tree t)
4275 {
4276 bool ret;
4277
4278 t = strip_array_types (CONST_CAST_TREE (t));
4279
4280 if (!trivially_copyable_p (t))
4281 return false;
4282
4283 if (CLASS_TYPE_P (t) && CLASSTYPE_UNIQUE_OBJ_REPRESENTATIONS_SET (t))
4284 return CLASSTYPE_UNIQUE_OBJ_REPRESENTATIONS (t);
4285
4286 switch (TREE_CODE (t))
4287 {
4288 case INTEGER_TYPE:
4289 case POINTER_TYPE:
4290 case REFERENCE_TYPE:
4291 /* If some backend has any paddings in these types, we should add
4292 a target hook for this and handle it there. */
4293 return true;
4294
4295 case BOOLEAN_TYPE:
4296 /* For bool values other than 0 and 1 should only appear with
4297 undefined behavior. */
4298 return true;
4299
4300 case ENUMERAL_TYPE:
4301 return type_has_unique_obj_representations (ENUM_UNDERLYING_TYPE (t));
4302
4303 case REAL_TYPE:
4304 /* XFmode certainly contains padding on x86, which the CPU doesn't store
4305 when storing long double values, so for that we have to return false.
4306 Other kinds of floating point values are questionable due to +.0/-.0
4307 and NaNs, let's play safe for now. */
4308 return false;
4309
4310 case FIXED_POINT_TYPE:
4311 return false;
4312
4313 case OFFSET_TYPE:
4314 return true;
4315
4316 case COMPLEX_TYPE:
4317 case VECTOR_TYPE:
4318 return type_has_unique_obj_representations (TREE_TYPE (t));
4319
4320 case RECORD_TYPE:
4321 ret = record_has_unique_obj_representations (t, TYPE_SIZE (t));
4322 if (CLASS_TYPE_P (t))
4323 {
4324 CLASSTYPE_UNIQUE_OBJ_REPRESENTATIONS_SET (t) = 1;
4325 CLASSTYPE_UNIQUE_OBJ_REPRESENTATIONS (t) = ret;
4326 }
4327 return ret;
4328
4329 case UNION_TYPE:
4330 ret = true;
4331 bool any_fields;
4332 any_fields = false;
4333 for (tree field = TYPE_FIELDS (t); field; field = DECL_CHAIN (field))
4334 if (TREE_CODE (field) == FIELD_DECL)
4335 {
4336 any_fields = true;
4337 if (!type_has_unique_obj_representations (TREE_TYPE (field))
4338 || simple_cst_equal (DECL_SIZE (field), TYPE_SIZE (t)) != 1)
4339 {
4340 ret = false;
4341 break;
4342 }
4343 }
4344 if (!any_fields && !integer_zerop (TYPE_SIZE (t)))
4345 ret = false;
4346 if (CLASS_TYPE_P (t))
4347 {
4348 CLASSTYPE_UNIQUE_OBJ_REPRESENTATIONS_SET (t) = 1;
4349 CLASSTYPE_UNIQUE_OBJ_REPRESENTATIONS (t) = ret;
4350 }
4351 return ret;
4352
4353 case NULLPTR_TYPE:
4354 return false;
4355
4356 case ERROR_MARK:
4357 return false;
4358
4359 default:
4360 gcc_unreachable ();
4361 }
4362 }
4363
4364 /* Helper function for type_has_unique_obj_representations. */
4365
4366 static bool
4367 record_has_unique_obj_representations (const_tree t, const_tree sz)
4368 {
4369 for (tree field = TYPE_FIELDS (t); field; field = DECL_CHAIN (field))
4370 if (TREE_CODE (field) != FIELD_DECL)
4371 ;
4372 /* For bases, can't use type_has_unique_obj_representations here, as in
4373 struct S { int i : 24; S (); };
4374 struct T : public S { int j : 8; T (); };
4375 S doesn't have unique obj representations, but T does. */
4376 else if (DECL_FIELD_IS_BASE (field))
4377 {
4378 if (!record_has_unique_obj_representations (TREE_TYPE (field),
4379 DECL_SIZE (field)))
4380 return false;
4381 }
4382 else if (DECL_C_BIT_FIELD (field))
4383 {
4384 tree btype = DECL_BIT_FIELD_TYPE (field);
4385 if (!type_has_unique_obj_representations (btype))
4386 return false;
4387 }
4388 else if (!type_has_unique_obj_representations (TREE_TYPE (field)))
4389 return false;
4390
4391 offset_int cur = 0;
4392 for (tree field = TYPE_FIELDS (t); field; field = DECL_CHAIN (field))
4393 if (TREE_CODE (field) == FIELD_DECL)
4394 {
4395 offset_int fld = wi::to_offset (DECL_FIELD_OFFSET (field));
4396 offset_int bitpos = wi::to_offset (DECL_FIELD_BIT_OFFSET (field));
4397 fld = fld * BITS_PER_UNIT + bitpos;
4398 if (cur != fld)
4399 return false;
4400 if (DECL_SIZE (field))
4401 {
4402 offset_int size = wi::to_offset (DECL_SIZE (field));
4403 cur += size;
4404 }
4405 }
4406 if (cur != wi::to_offset (sz))
4407 return false;
4408
4409 return true;
4410 }
4411
4412 /* Nonzero iff type T is a class template implicit specialization. */
4413
4414 bool
4415 class_tmpl_impl_spec_p (const_tree t)
4416 {
4417 return CLASS_TYPE_P (t) && CLASSTYPE_TEMPLATE_INSTANTIATION (t);
4418 }
4419
4420 /* Returns 1 iff zero initialization of type T means actually storing
4421 zeros in it. */
4422
4423 int
4424 zero_init_p (const_tree t)
4425 {
4426 /* This CONST_CAST is okay because strip_array_types returns its
4427 argument unmodified and we assign it to a const_tree. */
4428 t = strip_array_types (CONST_CAST_TREE(t));
4429
4430 if (t == error_mark_node)
4431 return 1;
4432
4433 /* NULL pointers to data members are initialized with -1. */
4434 if (TYPE_PTRDATAMEM_P (t))
4435 return 0;
4436
4437 /* Classes that contain types that can't be zero-initialized, cannot
4438 be zero-initialized themselves. */
4439 if (CLASS_TYPE_P (t) && CLASSTYPE_NON_ZERO_INIT_P (t))
4440 return 0;
4441
4442 return 1;
4443 }
4444
4445 /* True IFF T is a C++20 structural type (P1907R1) that can be used as a
4446 non-type template parameter. If EXPLAIN, explain why not. */
4447
4448 bool
4449 structural_type_p (tree t, bool explain)
4450 {
4451 t = strip_array_types (t);
4452 if (INTEGRAL_OR_ENUMERATION_TYPE_P (t))
4453 return true;
4454 if (NULLPTR_TYPE_P (t))
4455 return true;
4456 if (TYPE_PTR_P (t) || TYPE_PTRMEM_P (t))
4457 return true;
4458 if (TYPE_REF_P (t) && !TYPE_REF_IS_RVALUE (t))
4459 return true;
4460 if (!CLASS_TYPE_P (t))
4461 return false;
4462 if (TREE_CODE (t) == UNION_TYPE)
4463 {
4464 if (explain)
4465 inform (location_of (t), "%qT is a union", t);
4466 return false;
4467 }
4468 if (!literal_type_p (t))
4469 {
4470 if (explain)
4471 explain_non_literal_class (t);
4472 return false;
4473 }
4474 if (CLASSTYPE_HAS_MUTABLE (t))
4475 {
4476 if (explain)
4477 inform (location_of (t), "%qT has a mutable member", t);
4478 return false;
4479 }
4480 for (tree m = next_initializable_field (TYPE_FIELDS (t)); m;
4481 m = next_initializable_field (DECL_CHAIN (m)))
4482 {
4483 if (TREE_PRIVATE (m) || TREE_PROTECTED (m))
4484 {
4485 if (explain)
4486 {
4487 if (DECL_FIELD_IS_BASE (m))
4488 inform (location_of (m), "base class %qT is not public",
4489 TREE_TYPE (m));
4490 else
4491 inform (location_of (m), "%qD is not public", m);
4492 }
4493 return false;
4494 }
4495 if (!structural_type_p (TREE_TYPE (m)))
4496 {
4497 if (explain)
4498 {
4499 inform (location_of (m), "%qD has a non-structural type", m);
4500 structural_type_p (TREE_TYPE (m), true);
4501 }
4502 return false;
4503 }
4504 }
4505 return true;
4506 }
4507
4508 /* Handle the C++17 [[nodiscard]] attribute, which is similar to the GNU
4509 warn_unused_result attribute. */
4510
4511 static tree
4512 handle_nodiscard_attribute (tree *node, tree name, tree args,
4513 int /*flags*/, bool *no_add_attrs)
4514 {
4515 if (args && TREE_CODE (TREE_VALUE (args)) != STRING_CST)
4516 {
4517 error ("%qE attribute argument must be a string constant", name);
4518 *no_add_attrs = true;
4519 }
4520 if (TREE_CODE (*node) == FUNCTION_DECL)
4521 {
4522 if (VOID_TYPE_P (TREE_TYPE (TREE_TYPE (*node)))
4523 && !DECL_CONSTRUCTOR_P (*node))
4524 warning_at (DECL_SOURCE_LOCATION (*node),
4525 OPT_Wattributes, "%qE attribute applied to %qD with void "
4526 "return type", name, *node);
4527 }
4528 else if (OVERLOAD_TYPE_P (*node))
4529 /* OK */;
4530 else
4531 {
4532 warning (OPT_Wattributes, "%qE attribute can only be applied to "
4533 "functions or to class or enumeration types", name);
4534 *no_add_attrs = true;
4535 }
4536 return NULL_TREE;
4537 }
4538
4539 /* Handle a C++2a "no_unique_address" attribute; arguments as in
4540 struct attribute_spec.handler. */
4541 static tree
4542 handle_no_unique_addr_attribute (tree* node,
4543 tree name,
4544 tree /*args*/,
4545 int /*flags*/,
4546 bool* no_add_attrs)
4547 {
4548 if (TREE_CODE (*node) != FIELD_DECL)
4549 {
4550 warning (OPT_Wattributes, "%qE attribute can only be applied to "
4551 "non-static data members", name);
4552 *no_add_attrs = true;
4553 }
4554 else if (DECL_C_BIT_FIELD (*node))
4555 {
4556 warning (OPT_Wattributes, "%qE attribute cannot be applied to "
4557 "a bit-field", name);
4558 *no_add_attrs = true;
4559 }
4560
4561 return NULL_TREE;
4562 }
4563
4564 /* The C++20 [[likely]] and [[unlikely]] attributes on labels map to the GNU
4565 hot/cold attributes. */
4566
4567 static tree
4568 handle_likeliness_attribute (tree *node, tree name, tree args,
4569 int flags, bool *no_add_attrs)
4570 {
4571 *no_add_attrs = true;
4572 if (TREE_CODE (*node) == LABEL_DECL
4573 || TREE_CODE (*node) == FUNCTION_DECL)
4574 {
4575 if (args)
4576 warning (OPT_Wattributes, "%qE attribute takes no arguments", name);
4577 tree bname = (is_attribute_p ("likely", name)
4578 ? get_identifier ("hot") : get_identifier ("cold"));
4579 if (TREE_CODE (*node) == FUNCTION_DECL)
4580 warning (OPT_Wattributes, "ISO C++ %qE attribute does not apply to "
4581 "functions; treating as %<[[gnu::%E]]%>", name, bname);
4582 tree battr = build_tree_list (bname, NULL_TREE);
4583 decl_attributes (node, battr, flags);
4584 return NULL_TREE;
4585 }
4586 else
4587 return error_mark_node;
4588 }
4589
4590 /* Table of valid C++ attributes. */
4591 const struct attribute_spec cxx_attribute_table[] =
4592 {
4593 /* { name, min_len, max_len, decl_req, type_req, fn_type_req,
4594 affects_type_identity, handler, exclude } */
4595 { "init_priority", 1, 1, true, false, false, false,
4596 handle_init_priority_attribute, NULL },
4597 { "abi_tag", 1, -1, false, false, false, true,
4598 handle_abi_tag_attribute, NULL },
4599 { NULL, 0, 0, false, false, false, false, NULL, NULL }
4600 };
4601
4602 /* Table of C++ standard attributes. */
4603 const struct attribute_spec std_attribute_table[] =
4604 {
4605 /* { name, min_len, max_len, decl_req, type_req, fn_type_req,
4606 affects_type_identity, handler, exclude } */
4607 { "maybe_unused", 0, 0, false, false, false, false,
4608 handle_unused_attribute, NULL },
4609 { "nodiscard", 0, 1, false, false, false, false,
4610 handle_nodiscard_attribute, NULL },
4611 { "no_unique_address", 0, 0, true, false, false, false,
4612 handle_no_unique_addr_attribute, NULL },
4613 { "likely", 0, 0, false, false, false, false,
4614 handle_likeliness_attribute, attr_cold_hot_exclusions },
4615 { "unlikely", 0, 0, false, false, false, false,
4616 handle_likeliness_attribute, attr_cold_hot_exclusions },
4617 { "noreturn", 0, 0, true, false, false, false,
4618 handle_noreturn_attribute, attr_noreturn_exclusions },
4619 { NULL, 0, 0, false, false, false, false, NULL, NULL }
4620 };
4621
4622 /* Handle an "init_priority" attribute; arguments as in
4623 struct attribute_spec.handler. */
4624 static tree
4625 handle_init_priority_attribute (tree* node,
4626 tree name,
4627 tree args,
4628 int /*flags*/,
4629 bool* no_add_attrs)
4630 {
4631 tree initp_expr = TREE_VALUE (args);
4632 tree decl = *node;
4633 tree type = TREE_TYPE (decl);
4634 int pri;
4635
4636 STRIP_NOPS (initp_expr);
4637 initp_expr = default_conversion (initp_expr);
4638 if (initp_expr)
4639 initp_expr = maybe_constant_value (initp_expr);
4640
4641 if (!initp_expr || TREE_CODE (initp_expr) != INTEGER_CST)
4642 {
4643 error ("requested %<init_priority%> is not an integer constant");
4644 cxx_constant_value (initp_expr);
4645 *no_add_attrs = true;
4646 return NULL_TREE;
4647 }
4648
4649 pri = TREE_INT_CST_LOW (initp_expr);
4650
4651 type = strip_array_types (type);
4652
4653 if (decl == NULL_TREE
4654 || !VAR_P (decl)
4655 || !TREE_STATIC (decl)
4656 || DECL_EXTERNAL (decl)
4657 || (TREE_CODE (type) != RECORD_TYPE
4658 && TREE_CODE (type) != UNION_TYPE)
4659 /* Static objects in functions are initialized the
4660 first time control passes through that
4661 function. This is not precise enough to pin down an
4662 init_priority value, so don't allow it. */
4663 || current_function_decl)
4664 {
4665 error ("can only use %qE attribute on file-scope definitions "
4666 "of objects of class type", name);
4667 *no_add_attrs = true;
4668 return NULL_TREE;
4669 }
4670
4671 if (pri > MAX_INIT_PRIORITY || pri <= 0)
4672 {
4673 error ("requested %<init_priority%> %i is out of range [0, %i]",
4674 pri, MAX_INIT_PRIORITY);
4675 *no_add_attrs = true;
4676 return NULL_TREE;
4677 }
4678
4679 /* Check for init_priorities that are reserved for
4680 language and runtime support implementations.*/
4681 if (pri <= MAX_RESERVED_INIT_PRIORITY)
4682 {
4683 warning
4684 (0, "requested %<init_priority%> %i is reserved for internal use",
4685 pri);
4686 }
4687
4688 if (SUPPORTS_INIT_PRIORITY)
4689 {
4690 SET_DECL_INIT_PRIORITY (decl, pri);
4691 DECL_HAS_INIT_PRIORITY_P (decl) = 1;
4692 return NULL_TREE;
4693 }
4694 else
4695 {
4696 error ("%qE attribute is not supported on this platform", name);
4697 *no_add_attrs = true;
4698 return NULL_TREE;
4699 }
4700 }
4701
4702 /* DECL is being redeclared; the old declaration had the abi tags in OLD,
4703 and the new one has the tags in NEW_. Give an error if there are tags
4704 in NEW_ that weren't in OLD. */
4705
4706 bool
4707 check_abi_tag_redeclaration (const_tree decl, const_tree old, const_tree new_)
4708 {
4709 if (old && TREE_CODE (TREE_VALUE (old)) == TREE_LIST)
4710 old = TREE_VALUE (old);
4711 if (new_ && TREE_CODE (TREE_VALUE (new_)) == TREE_LIST)
4712 new_ = TREE_VALUE (new_);
4713 bool err = false;
4714 for (const_tree t = new_; t; t = TREE_CHAIN (t))
4715 {
4716 tree str = TREE_VALUE (t);
4717 for (const_tree in = old; in; in = TREE_CHAIN (in))
4718 {
4719 tree ostr = TREE_VALUE (in);
4720 if (cp_tree_equal (str, ostr))
4721 goto found;
4722 }
4723 error ("redeclaration of %qD adds abi tag %qE", decl, str);
4724 err = true;
4725 found:;
4726 }
4727 if (err)
4728 {
4729 inform (DECL_SOURCE_LOCATION (decl), "previous declaration here");
4730 return false;
4731 }
4732 return true;
4733 }
4734
4735 /* The abi_tag attribute with the name NAME was given ARGS. If they are
4736 ill-formed, give an error and return false; otherwise, return true. */
4737
4738 bool
4739 check_abi_tag_args (tree args, tree name)
4740 {
4741 if (!args)
4742 {
4743 error ("the %qE attribute requires arguments", name);
4744 return false;
4745 }
4746 for (tree arg = args; arg; arg = TREE_CHAIN (arg))
4747 {
4748 tree elt = TREE_VALUE (arg);
4749 if (TREE_CODE (elt) != STRING_CST
4750 || (!same_type_ignoring_top_level_qualifiers_p
4751 (strip_array_types (TREE_TYPE (elt)),
4752 char_type_node)))
4753 {
4754 error ("arguments to the %qE attribute must be narrow string "
4755 "literals", name);
4756 return false;
4757 }
4758 const char *begin = TREE_STRING_POINTER (elt);
4759 const char *end = begin + TREE_STRING_LENGTH (elt);
4760 for (const char *p = begin; p != end; ++p)
4761 {
4762 char c = *p;
4763 if (p == begin)
4764 {
4765 if (!ISALPHA (c) && c != '_')
4766 {
4767 error ("arguments to the %qE attribute must contain valid "
4768 "identifiers", name);
4769 inform (input_location, "%<%c%> is not a valid first "
4770 "character for an identifier", c);
4771 return false;
4772 }
4773 }
4774 else if (p == end - 1)
4775 gcc_assert (c == 0);
4776 else
4777 {
4778 if (!ISALNUM (c) && c != '_')
4779 {
4780 error ("arguments to the %qE attribute must contain valid "
4781 "identifiers", name);
4782 inform (input_location, "%<%c%> is not a valid character "
4783 "in an identifier", c);
4784 return false;
4785 }
4786 }
4787 }
4788 }
4789 return true;
4790 }
4791
4792 /* Handle an "abi_tag" attribute; arguments as in
4793 struct attribute_spec.handler. */
4794
4795 static tree
4796 handle_abi_tag_attribute (tree* node, tree name, tree args,
4797 int flags, bool* no_add_attrs)
4798 {
4799 if (!check_abi_tag_args (args, name))
4800 goto fail;
4801
4802 if (TYPE_P (*node))
4803 {
4804 if (!OVERLOAD_TYPE_P (*node))
4805 {
4806 error ("%qE attribute applied to non-class, non-enum type %qT",
4807 name, *node);
4808 goto fail;
4809 }
4810 else if (!(flags & (int)ATTR_FLAG_TYPE_IN_PLACE))
4811 {
4812 error ("%qE attribute applied to %qT after its definition",
4813 name, *node);
4814 goto fail;
4815 }
4816 else if (CLASS_TYPE_P (*node)
4817 && CLASSTYPE_TEMPLATE_INSTANTIATION (*node))
4818 {
4819 warning (OPT_Wattributes, "ignoring %qE attribute applied to "
4820 "template instantiation %qT", name, *node);
4821 goto fail;
4822 }
4823 else if (CLASS_TYPE_P (*node)
4824 && CLASSTYPE_TEMPLATE_SPECIALIZATION (*node))
4825 {
4826 warning (OPT_Wattributes, "ignoring %qE attribute applied to "
4827 "template specialization %qT", name, *node);
4828 goto fail;
4829 }
4830
4831 tree attributes = TYPE_ATTRIBUTES (*node);
4832 tree decl = TYPE_NAME (*node);
4833
4834 /* Make sure all declarations have the same abi tags. */
4835 if (DECL_SOURCE_LOCATION (decl) != input_location)
4836 {
4837 if (!check_abi_tag_redeclaration (decl,
4838 lookup_attribute ("abi_tag",
4839 attributes),
4840 args))
4841 goto fail;
4842 }
4843 }
4844 else
4845 {
4846 if (!VAR_OR_FUNCTION_DECL_P (*node))
4847 {
4848 error ("%qE attribute applied to non-function, non-variable %qD",
4849 name, *node);
4850 goto fail;
4851 }
4852 else if (DECL_LANGUAGE (*node) == lang_c)
4853 {
4854 error ("%qE attribute applied to extern \"C\" declaration %qD",
4855 name, *node);
4856 goto fail;
4857 }
4858 }
4859
4860 return NULL_TREE;
4861
4862 fail:
4863 *no_add_attrs = true;
4864 return NULL_TREE;
4865 }
4866
4867 /* Return a new PTRMEM_CST of the indicated TYPE. The MEMBER is the
4868 thing pointed to by the constant. */
4869
4870 tree
4871 make_ptrmem_cst (tree type, tree member)
4872 {
4873 tree ptrmem_cst = make_node (PTRMEM_CST);
4874 TREE_TYPE (ptrmem_cst) = type;
4875 PTRMEM_CST_MEMBER (ptrmem_cst) = member;
4876 return ptrmem_cst;
4877 }
4878
4879 /* Build a variant of TYPE that has the indicated ATTRIBUTES. May
4880 return an existing type if an appropriate type already exists. */
4881
4882 tree
4883 cp_build_type_attribute_variant (tree type, tree attributes)
4884 {
4885 tree new_type;
4886
4887 new_type = build_type_attribute_variant (type, attributes);
4888 if (FUNC_OR_METHOD_TYPE_P (new_type))
4889 gcc_checking_assert (cxx_type_hash_eq (type, new_type));
4890
4891 /* Making a new main variant of a class type is broken. */
4892 gcc_assert (!CLASS_TYPE_P (type) || new_type == type);
4893
4894 return new_type;
4895 }
4896
4897 /* Return TRUE if TYPE1 and TYPE2 are identical for type hashing purposes.
4898 Called only after doing all language independent checks. */
4899
4900 bool
4901 cxx_type_hash_eq (const_tree typea, const_tree typeb)
4902 {
4903 gcc_assert (FUNC_OR_METHOD_TYPE_P (typea));
4904
4905 if (type_memfn_rqual (typea) != type_memfn_rqual (typeb))
4906 return false;
4907 if (TYPE_HAS_LATE_RETURN_TYPE (typea) != TYPE_HAS_LATE_RETURN_TYPE (typeb))
4908 return false;
4909 return comp_except_specs (TYPE_RAISES_EXCEPTIONS (typea),
4910 TYPE_RAISES_EXCEPTIONS (typeb), ce_exact);
4911 }
4912
4913 /* Copy the language-specific type variant modifiers from TYPEB to TYPEA. For
4914 C++, these are the exception-specifier and ref-qualifier. */
4915
4916 tree
4917 cxx_copy_lang_qualifiers (const_tree typea, const_tree typeb)
4918 {
4919 tree type = CONST_CAST_TREE (typea);
4920 if (FUNC_OR_METHOD_TYPE_P (type))
4921 type = build_cp_fntype_variant (type, type_memfn_rqual (typeb),
4922 TYPE_RAISES_EXCEPTIONS (typeb),
4923 TYPE_HAS_LATE_RETURN_TYPE (typeb));
4924 return type;
4925 }
4926
4927 /* Apply FUNC to all language-specific sub-trees of TP in a pre-order
4928 traversal. Called from walk_tree. */
4929
4930 tree
4931 cp_walk_subtrees (tree *tp, int *walk_subtrees_p, walk_tree_fn func,
4932 void *data, hash_set<tree> *pset)
4933 {
4934 enum tree_code code = TREE_CODE (*tp);
4935 tree result;
4936
4937 #define WALK_SUBTREE(NODE) \
4938 do \
4939 { \
4940 result = cp_walk_tree (&(NODE), func, data, pset); \
4941 if (result) goto out; \
4942 } \
4943 while (0)
4944
4945 if (TYPE_P (*tp))
4946 /* Walk into template args without looking through typedefs. */
4947 if (tree ti = TYPE_TEMPLATE_INFO_MAYBE_ALIAS (*tp))
4948 WALK_SUBTREE (TI_ARGS (ti));
4949
4950 /* Not one of the easy cases. We must explicitly go through the
4951 children. */
4952 result = NULL_TREE;
4953 switch (code)
4954 {
4955 case DEFERRED_PARSE:
4956 case TEMPLATE_TEMPLATE_PARM:
4957 case BOUND_TEMPLATE_TEMPLATE_PARM:
4958 case UNBOUND_CLASS_TEMPLATE:
4959 case TEMPLATE_PARM_INDEX:
4960 case TEMPLATE_TYPE_PARM:
4961 case TYPENAME_TYPE:
4962 case TYPEOF_TYPE:
4963 case UNDERLYING_TYPE:
4964 /* None of these have subtrees other than those already walked
4965 above. */
4966 *walk_subtrees_p = 0;
4967 break;
4968
4969 case BASELINK:
4970 if (BASELINK_QUALIFIED_P (*tp))
4971 WALK_SUBTREE (BINFO_TYPE (BASELINK_ACCESS_BINFO (*tp)));
4972 WALK_SUBTREE (BASELINK_FUNCTIONS (*tp));
4973 *walk_subtrees_p = 0;
4974 break;
4975
4976 case PTRMEM_CST:
4977 WALK_SUBTREE (TREE_TYPE (*tp));
4978 *walk_subtrees_p = 0;
4979 break;
4980
4981 case TREE_LIST:
4982 WALK_SUBTREE (TREE_PURPOSE (*tp));
4983 break;
4984
4985 case OVERLOAD:
4986 WALK_SUBTREE (OVL_FUNCTION (*tp));
4987 WALK_SUBTREE (OVL_CHAIN (*tp));
4988 *walk_subtrees_p = 0;
4989 break;
4990
4991 case USING_DECL:
4992 WALK_SUBTREE (DECL_NAME (*tp));
4993 WALK_SUBTREE (USING_DECL_SCOPE (*tp));
4994 WALK_SUBTREE (USING_DECL_DECLS (*tp));
4995 *walk_subtrees_p = 0;
4996 break;
4997
4998 case RECORD_TYPE:
4999 if (TYPE_PTRMEMFUNC_P (*tp))
5000 WALK_SUBTREE (TYPE_PTRMEMFUNC_FN_TYPE_RAW (*tp));
5001 break;
5002
5003 case TYPE_ARGUMENT_PACK:
5004 case NONTYPE_ARGUMENT_PACK:
5005 {
5006 tree args = ARGUMENT_PACK_ARGS (*tp);
5007 int i, len = TREE_VEC_LENGTH (args);
5008 for (i = 0; i < len; i++)
5009 WALK_SUBTREE (TREE_VEC_ELT (args, i));
5010 }
5011 break;
5012
5013 case TYPE_PACK_EXPANSION:
5014 WALK_SUBTREE (TREE_TYPE (*tp));
5015 WALK_SUBTREE (PACK_EXPANSION_EXTRA_ARGS (*tp));
5016 *walk_subtrees_p = 0;
5017 break;
5018
5019 case EXPR_PACK_EXPANSION:
5020 WALK_SUBTREE (TREE_OPERAND (*tp, 0));
5021 WALK_SUBTREE (PACK_EXPANSION_EXTRA_ARGS (*tp));
5022 *walk_subtrees_p = 0;
5023 break;
5024
5025 case CAST_EXPR:
5026 case REINTERPRET_CAST_EXPR:
5027 case STATIC_CAST_EXPR:
5028 case CONST_CAST_EXPR:
5029 case DYNAMIC_CAST_EXPR:
5030 case IMPLICIT_CONV_EXPR:
5031 if (TREE_TYPE (*tp))
5032 WALK_SUBTREE (TREE_TYPE (*tp));
5033
5034 {
5035 int i;
5036 for (i = 0; i < TREE_CODE_LENGTH (TREE_CODE (*tp)); ++i)
5037 WALK_SUBTREE (TREE_OPERAND (*tp, i));
5038 }
5039 *walk_subtrees_p = 0;
5040 break;
5041
5042 case CONSTRUCTOR:
5043 if (COMPOUND_LITERAL_P (*tp))
5044 WALK_SUBTREE (TREE_TYPE (*tp));
5045 break;
5046
5047 case TRAIT_EXPR:
5048 WALK_SUBTREE (TRAIT_EXPR_TYPE1 (*tp));
5049 WALK_SUBTREE (TRAIT_EXPR_TYPE2 (*tp));
5050 *walk_subtrees_p = 0;
5051 break;
5052
5053 case DECLTYPE_TYPE:
5054 ++cp_unevaluated_operand;
5055 /* We can't use WALK_SUBTREE here because of the goto. */
5056 result = cp_walk_tree (&DECLTYPE_TYPE_EXPR (*tp), func, data, pset);
5057 --cp_unevaluated_operand;
5058 *walk_subtrees_p = 0;
5059 break;
5060
5061 case ALIGNOF_EXPR:
5062 case SIZEOF_EXPR:
5063 case NOEXCEPT_EXPR:
5064 ++cp_unevaluated_operand;
5065 result = cp_walk_tree (&TREE_OPERAND (*tp, 0), func, data, pset);
5066 --cp_unevaluated_operand;
5067 *walk_subtrees_p = 0;
5068 break;
5069
5070 case REQUIRES_EXPR:
5071 // Only recurse through the nested expression. Do not
5072 // walk the parameter list. Doing so causes false
5073 // positives in the pack expansion checker since the
5074 // requires parameters are introduced as pack expansions.
5075 WALK_SUBTREE (TREE_OPERAND (*tp, 1));
5076 *walk_subtrees_p = 0;
5077 break;
5078
5079 case DECL_EXPR:
5080 /* User variables should be mentioned in BIND_EXPR_VARS
5081 and their initializers and sizes walked when walking
5082 the containing BIND_EXPR. Compiler temporaries are
5083 handled here. And also normal variables in templates,
5084 since do_poplevel doesn't build a BIND_EXPR then. */
5085 if (VAR_P (TREE_OPERAND (*tp, 0))
5086 && (processing_template_decl
5087 || (DECL_ARTIFICIAL (TREE_OPERAND (*tp, 0))
5088 && !TREE_STATIC (TREE_OPERAND (*tp, 0)))))
5089 {
5090 tree decl = TREE_OPERAND (*tp, 0);
5091 WALK_SUBTREE (DECL_INITIAL (decl));
5092 WALK_SUBTREE (DECL_SIZE (decl));
5093 WALK_SUBTREE (DECL_SIZE_UNIT (decl));
5094 }
5095 break;
5096
5097 case LAMBDA_EXPR:
5098 /* Don't walk into the body of the lambda, but the capture initializers
5099 are part of the enclosing context. */
5100 for (tree cap = LAMBDA_EXPR_CAPTURE_LIST (*tp); cap;
5101 cap = TREE_CHAIN (cap))
5102 WALK_SUBTREE (TREE_VALUE (cap));
5103 break;
5104
5105 case CO_YIELD_EXPR:
5106 if (TREE_OPERAND (*tp, 1))
5107 /* Operand 1 is the tree for the relevant co_await which has any
5108 interesting sub-trees. */
5109 WALK_SUBTREE (TREE_OPERAND (*tp, 1));
5110 break;
5111
5112 case CO_AWAIT_EXPR:
5113 if (TREE_OPERAND (*tp, 1))
5114 /* Operand 1 is frame variable. */
5115 WALK_SUBTREE (TREE_OPERAND (*tp, 1));
5116 if (TREE_OPERAND (*tp, 2))
5117 /* Operand 2 has the initialiser, and we need to walk any subtrees
5118 there. */
5119 WALK_SUBTREE (TREE_OPERAND (*tp, 2));
5120 break;
5121
5122 case CO_RETURN_EXPR:
5123 if (TREE_OPERAND (*tp, 0))
5124 {
5125 if (VOID_TYPE_P (TREE_OPERAND (*tp, 0)))
5126 /* For void expressions, operand 1 is a trivial call, and any
5127 interesting subtrees will be part of operand 0. */
5128 WALK_SUBTREE (TREE_OPERAND (*tp, 0));
5129 else if (TREE_OPERAND (*tp, 1))
5130 /* Interesting sub-trees will be in the return_value () call
5131 arguments. */
5132 WALK_SUBTREE (TREE_OPERAND (*tp, 1));
5133 }
5134 break;
5135
5136 default:
5137 return NULL_TREE;
5138 }
5139
5140 /* We didn't find what we were looking for. */
5141 out:
5142 return result;
5143
5144 #undef WALK_SUBTREE
5145 }
5146
5147 /* Like save_expr, but for C++. */
5148
5149 tree
5150 cp_save_expr (tree expr)
5151 {
5152 /* There is no reason to create a SAVE_EXPR within a template; if
5153 needed, we can create the SAVE_EXPR when instantiating the
5154 template. Furthermore, the middle-end cannot handle C++-specific
5155 tree codes. */
5156 if (processing_template_decl)
5157 return expr;
5158
5159 /* TARGET_EXPRs are only expanded once. */
5160 if (TREE_CODE (expr) == TARGET_EXPR)
5161 return expr;
5162
5163 return save_expr (expr);
5164 }
5165
5166 /* Initialize tree.c. */
5167
5168 void
5169 init_tree (void)
5170 {
5171 list_hash_table = hash_table<list_hasher>::create_ggc (61);
5172 register_scoped_attributes (std_attribute_table, NULL);
5173 }
5174
5175 /* Returns the kind of special function that DECL (a FUNCTION_DECL)
5176 is. Note that sfk_none is zero, so this function can be used as a
5177 predicate to test whether or not DECL is a special function. */
5178
5179 special_function_kind
5180 special_function_p (const_tree decl)
5181 {
5182 /* Rather than doing all this stuff with magic names, we should
5183 probably have a field of type `special_function_kind' in
5184 DECL_LANG_SPECIFIC. */
5185 if (DECL_INHERITED_CTOR (decl))
5186 return sfk_inheriting_constructor;
5187 if (DECL_COPY_CONSTRUCTOR_P (decl))
5188 return sfk_copy_constructor;
5189 if (DECL_MOVE_CONSTRUCTOR_P (decl))
5190 return sfk_move_constructor;
5191 if (DECL_CONSTRUCTOR_P (decl))
5192 return sfk_constructor;
5193 if (DECL_ASSIGNMENT_OPERATOR_P (decl)
5194 && DECL_OVERLOADED_OPERATOR_IS (decl, NOP_EXPR))
5195 {
5196 if (copy_fn_p (decl))
5197 return sfk_copy_assignment;
5198 if (move_fn_p (decl))
5199 return sfk_move_assignment;
5200 }
5201 if (DECL_MAYBE_IN_CHARGE_DESTRUCTOR_P (decl))
5202 return sfk_destructor;
5203 if (DECL_COMPLETE_DESTRUCTOR_P (decl))
5204 return sfk_complete_destructor;
5205 if (DECL_BASE_DESTRUCTOR_P (decl))
5206 return sfk_base_destructor;
5207 if (DECL_DELETING_DESTRUCTOR_P (decl))
5208 return sfk_deleting_destructor;
5209 if (DECL_CONV_FN_P (decl))
5210 return sfk_conversion;
5211 if (deduction_guide_p (decl))
5212 return sfk_deduction_guide;
5213 if (DECL_OVERLOADED_OPERATOR_CODE_RAW (decl) >= OVL_OP_EQ_EXPR
5214 && DECL_OVERLOADED_OPERATOR_CODE_RAW (decl) <= OVL_OP_SPACESHIP_EXPR)
5215 return sfk_comparison;
5216
5217 return sfk_none;
5218 }
5219
5220 /* As above, but only if DECL is a special member function as per 11.3.3
5221 [special]: default/copy/move ctor, copy/move assignment, or destructor. */
5222
5223 special_function_kind
5224 special_memfn_p (const_tree decl)
5225 {
5226 switch (special_function_kind sfk = special_function_p (decl))
5227 {
5228 case sfk_constructor:
5229 if (!default_ctor_p (decl))
5230 break;
5231 gcc_fallthrough();
5232 case sfk_copy_constructor:
5233 case sfk_copy_assignment:
5234 case sfk_move_assignment:
5235 case sfk_move_constructor:
5236 case sfk_destructor:
5237 return sfk;
5238
5239 default:
5240 break;
5241 }
5242 return sfk_none;
5243 }
5244
5245 /* Returns nonzero if TYPE is a character type, including wchar_t. */
5246
5247 int
5248 char_type_p (tree type)
5249 {
5250 return (same_type_p (type, char_type_node)
5251 || same_type_p (type, unsigned_char_type_node)
5252 || same_type_p (type, signed_char_type_node)
5253 || same_type_p (type, char8_type_node)
5254 || same_type_p (type, char16_type_node)
5255 || same_type_p (type, char32_type_node)
5256 || same_type_p (type, wchar_type_node));
5257 }
5258
5259 /* Returns the kind of linkage associated with the indicated DECL. Th
5260 value returned is as specified by the language standard; it is
5261 independent of implementation details regarding template
5262 instantiation, etc. For example, it is possible that a declaration
5263 to which this function assigns external linkage would not show up
5264 as a global symbol when you run `nm' on the resulting object file. */
5265
5266 linkage_kind
5267 decl_linkage (tree decl)
5268 {
5269 /* This function doesn't attempt to calculate the linkage from first
5270 principles as given in [basic.link]. Instead, it makes use of
5271 the fact that we have already set TREE_PUBLIC appropriately, and
5272 then handles a few special cases. Ideally, we would calculate
5273 linkage first, and then transform that into a concrete
5274 implementation. */
5275
5276 /* Things that don't have names have no linkage. */
5277 if (!DECL_NAME (decl))
5278 return lk_none;
5279
5280 /* Fields have no linkage. */
5281 if (TREE_CODE (decl) == FIELD_DECL)
5282 return lk_none;
5283
5284 /* Things in local scope do not have linkage. */
5285 if (decl_function_context (decl))
5286 return lk_none;
5287
5288 /* Things that are TREE_PUBLIC have external linkage. */
5289 if (TREE_PUBLIC (decl))
5290 return lk_external;
5291
5292 /* maybe_thunk_body clears TREE_PUBLIC on the maybe-in-charge 'tor variants,
5293 check one of the "clones" for the real linkage. */
5294 if (DECL_MAYBE_IN_CHARGE_CDTOR_P (decl)
5295 && DECL_CHAIN (decl)
5296 && DECL_CLONED_FUNCTION_P (DECL_CHAIN (decl)))
5297 return decl_linkage (DECL_CHAIN (decl));
5298
5299 if (TREE_CODE (decl) == NAMESPACE_DECL)
5300 return lk_external;
5301
5302 /* Linkage of a CONST_DECL depends on the linkage of the enumeration
5303 type. */
5304 if (TREE_CODE (decl) == CONST_DECL)
5305 return decl_linkage (TYPE_NAME (DECL_CONTEXT (decl)));
5306
5307 /* Members of the anonymous namespace also have TREE_PUBLIC unset, but
5308 are considered to have external linkage for language purposes, as do
5309 template instantiations on targets without weak symbols. DECLs really
5310 meant to have internal linkage have DECL_THIS_STATIC set. */
5311 if (TREE_CODE (decl) == TYPE_DECL)
5312 return lk_external;
5313 if (VAR_OR_FUNCTION_DECL_P (decl))
5314 {
5315 if (!DECL_THIS_STATIC (decl))
5316 return lk_external;
5317
5318 /* Static data members and static member functions from classes
5319 in anonymous namespace also don't have TREE_PUBLIC set. */
5320 if (DECL_CLASS_CONTEXT (decl))
5321 return lk_external;
5322 }
5323
5324 /* Everything else has internal linkage. */
5325 return lk_internal;
5326 }
5327
5328 /* Returns the storage duration of the object or reference associated with
5329 the indicated DECL, which should be a VAR_DECL or PARM_DECL. */
5330
5331 duration_kind
5332 decl_storage_duration (tree decl)
5333 {
5334 if (TREE_CODE (decl) == PARM_DECL)
5335 return dk_auto;
5336 if (TREE_CODE (decl) == FUNCTION_DECL)
5337 return dk_static;
5338 gcc_assert (VAR_P (decl));
5339 if (!TREE_STATIC (decl)
5340 && !DECL_EXTERNAL (decl))
5341 return dk_auto;
5342 if (CP_DECL_THREAD_LOCAL_P (decl))
5343 return dk_thread;
5344 return dk_static;
5345 }
5346 \f
5347 /* EXP is an expression that we want to pre-evaluate. Returns (in
5348 *INITP) an expression that will perform the pre-evaluation. The
5349 value returned by this function is a side-effect free expression
5350 equivalent to the pre-evaluated expression. Callers must ensure
5351 that *INITP is evaluated before EXP. */
5352
5353 tree
5354 stabilize_expr (tree exp, tree* initp)
5355 {
5356 tree init_expr;
5357
5358 if (!TREE_SIDE_EFFECTS (exp))
5359 init_expr = NULL_TREE;
5360 else if (VOID_TYPE_P (TREE_TYPE (exp)))
5361 {
5362 init_expr = exp;
5363 exp = void_node;
5364 }
5365 /* There are no expressions with REFERENCE_TYPE, but there can be call
5366 arguments with such a type; just treat it as a pointer. */
5367 else if (TYPE_REF_P (TREE_TYPE (exp))
5368 || SCALAR_TYPE_P (TREE_TYPE (exp))
5369 || !glvalue_p (exp))
5370 {
5371 init_expr = get_target_expr (exp);
5372 exp = TARGET_EXPR_SLOT (init_expr);
5373 if (CLASS_TYPE_P (TREE_TYPE (exp)))
5374 exp = move (exp);
5375 else
5376 exp = rvalue (exp);
5377 }
5378 else
5379 {
5380 bool xval = !lvalue_p (exp);
5381 exp = cp_build_addr_expr (exp, tf_warning_or_error);
5382 init_expr = get_target_expr (exp);
5383 exp = TARGET_EXPR_SLOT (init_expr);
5384 exp = cp_build_fold_indirect_ref (exp);
5385 if (xval)
5386 exp = move (exp);
5387 }
5388 *initp = init_expr;
5389
5390 gcc_assert (!TREE_SIDE_EFFECTS (exp));
5391 return exp;
5392 }
5393
5394 /* Add NEW_EXPR, an expression whose value we don't care about, after the
5395 similar expression ORIG. */
5396
5397 tree
5398 add_stmt_to_compound (tree orig, tree new_expr)
5399 {
5400 if (!new_expr || !TREE_SIDE_EFFECTS (new_expr))
5401 return orig;
5402 if (!orig || !TREE_SIDE_EFFECTS (orig))
5403 return new_expr;
5404 return build2 (COMPOUND_EXPR, void_type_node, orig, new_expr);
5405 }
5406
5407 /* Like stabilize_expr, but for a call whose arguments we want to
5408 pre-evaluate. CALL is modified in place to use the pre-evaluated
5409 arguments, while, upon return, *INITP contains an expression to
5410 compute the arguments. */
5411
5412 void
5413 stabilize_call (tree call, tree *initp)
5414 {
5415 tree inits = NULL_TREE;
5416 int i;
5417 int nargs = call_expr_nargs (call);
5418
5419 if (call == error_mark_node || processing_template_decl)
5420 {
5421 *initp = NULL_TREE;
5422 return;
5423 }
5424
5425 gcc_assert (TREE_CODE (call) == CALL_EXPR);
5426
5427 for (i = 0; i < nargs; i++)
5428 {
5429 tree init;
5430 CALL_EXPR_ARG (call, i) =
5431 stabilize_expr (CALL_EXPR_ARG (call, i), &init);
5432 inits = add_stmt_to_compound (inits, init);
5433 }
5434
5435 *initp = inits;
5436 }
5437
5438 /* Like stabilize_expr, but for an AGGR_INIT_EXPR whose arguments we want
5439 to pre-evaluate. CALL is modified in place to use the pre-evaluated
5440 arguments, while, upon return, *INITP contains an expression to
5441 compute the arguments. */
5442
5443 static void
5444 stabilize_aggr_init (tree call, tree *initp)
5445 {
5446 tree inits = NULL_TREE;
5447 int i;
5448 int nargs = aggr_init_expr_nargs (call);
5449
5450 if (call == error_mark_node)
5451 return;
5452
5453 gcc_assert (TREE_CODE (call) == AGGR_INIT_EXPR);
5454
5455 for (i = 0; i < nargs; i++)
5456 {
5457 tree init;
5458 AGGR_INIT_EXPR_ARG (call, i) =
5459 stabilize_expr (AGGR_INIT_EXPR_ARG (call, i), &init);
5460 inits = add_stmt_to_compound (inits, init);
5461 }
5462
5463 *initp = inits;
5464 }
5465
5466 /* Like stabilize_expr, but for an initialization.
5467
5468 If the initialization is for an object of class type, this function
5469 takes care not to introduce additional temporaries.
5470
5471 Returns TRUE iff the expression was successfully pre-evaluated,
5472 i.e., if INIT is now side-effect free, except for, possibly, a
5473 single call to a constructor. */
5474
5475 bool
5476 stabilize_init (tree init, tree *initp)
5477 {
5478 tree t = init;
5479
5480 *initp = NULL_TREE;
5481
5482 if (t == error_mark_node || processing_template_decl)
5483 return true;
5484
5485 if (TREE_CODE (t) == INIT_EXPR)
5486 t = TREE_OPERAND (t, 1);
5487 if (TREE_CODE (t) == TARGET_EXPR)
5488 t = TARGET_EXPR_INITIAL (t);
5489
5490 /* If the RHS can be stabilized without breaking copy elision, stabilize
5491 it. We specifically don't stabilize class prvalues here because that
5492 would mean an extra copy, but they might be stabilized below. */
5493 if (TREE_CODE (init) == INIT_EXPR
5494 && TREE_CODE (t) != CONSTRUCTOR
5495 && TREE_CODE (t) != AGGR_INIT_EXPR
5496 && (SCALAR_TYPE_P (TREE_TYPE (t))
5497 || glvalue_p (t)))
5498 {
5499 TREE_OPERAND (init, 1) = stabilize_expr (t, initp);
5500 return true;
5501 }
5502
5503 if (TREE_CODE (t) == COMPOUND_EXPR
5504 && TREE_CODE (init) == INIT_EXPR)
5505 {
5506 tree last = expr_last (t);
5507 /* Handle stabilizing the EMPTY_CLASS_EXPR pattern. */
5508 if (!TREE_SIDE_EFFECTS (last))
5509 {
5510 *initp = t;
5511 TREE_OPERAND (init, 1) = last;
5512 return true;
5513 }
5514 }
5515
5516 if (TREE_CODE (t) == CONSTRUCTOR)
5517 {
5518 /* Aggregate initialization: stabilize each of the field
5519 initializers. */
5520 unsigned i;
5521 constructor_elt *ce;
5522 bool good = true;
5523 vec<constructor_elt, va_gc> *v = CONSTRUCTOR_ELTS (t);
5524 for (i = 0; vec_safe_iterate (v, i, &ce); ++i)
5525 {
5526 tree type = TREE_TYPE (ce->value);
5527 tree subinit;
5528 if (TYPE_REF_P (type)
5529 || SCALAR_TYPE_P (type))
5530 ce->value = stabilize_expr (ce->value, &subinit);
5531 else if (!stabilize_init (ce->value, &subinit))
5532 good = false;
5533 *initp = add_stmt_to_compound (*initp, subinit);
5534 }
5535 return good;
5536 }
5537
5538 if (TREE_CODE (t) == CALL_EXPR)
5539 {
5540 stabilize_call (t, initp);
5541 return true;
5542 }
5543
5544 if (TREE_CODE (t) == AGGR_INIT_EXPR)
5545 {
5546 stabilize_aggr_init (t, initp);
5547 return true;
5548 }
5549
5550 /* The initialization is being performed via a bitwise copy -- and
5551 the item copied may have side effects. */
5552 return !TREE_SIDE_EFFECTS (init);
5553 }
5554
5555 /* Returns true if a cast to TYPE may appear in an integral constant
5556 expression. */
5557
5558 bool
5559 cast_valid_in_integral_constant_expression_p (tree type)
5560 {
5561 return (INTEGRAL_OR_ENUMERATION_TYPE_P (type)
5562 || cxx_dialect >= cxx11
5563 || dependent_type_p (type)
5564 || type == error_mark_node);
5565 }
5566
5567 /* Return true if we need to fix linkage information of DECL. */
5568
5569 static bool
5570 cp_fix_function_decl_p (tree decl)
5571 {
5572 /* Skip if DECL is not externally visible. */
5573 if (!TREE_PUBLIC (decl))
5574 return false;
5575
5576 /* We need to fix DECL if it a appears to be exported but with no
5577 function body. Thunks do not have CFGs and we may need to
5578 handle them specially later. */
5579 if (!gimple_has_body_p (decl)
5580 && !DECL_THUNK_P (decl)
5581 && !DECL_EXTERNAL (decl))
5582 {
5583 struct cgraph_node *node = cgraph_node::get (decl);
5584
5585 /* Don't fix same_body aliases. Although they don't have their own
5586 CFG, they share it with what they alias to. */
5587 if (!node || !node->alias
5588 || !vec_safe_length (node->ref_list.references))
5589 return true;
5590 }
5591
5592 return false;
5593 }
5594
5595 /* Clean the C++ specific parts of the tree T. */
5596
5597 void
5598 cp_free_lang_data (tree t)
5599 {
5600 if (FUNC_OR_METHOD_TYPE_P (t))
5601 {
5602 /* Default args are not interesting anymore. */
5603 tree argtypes = TYPE_ARG_TYPES (t);
5604 while (argtypes)
5605 {
5606 TREE_PURPOSE (argtypes) = 0;
5607 argtypes = TREE_CHAIN (argtypes);
5608 }
5609 }
5610 else if (TREE_CODE (t) == FUNCTION_DECL
5611 && cp_fix_function_decl_p (t))
5612 {
5613 /* If T is used in this translation unit at all, the definition
5614 must exist somewhere else since we have decided to not emit it
5615 in this TU. So make it an external reference. */
5616 DECL_EXTERNAL (t) = 1;
5617 TREE_STATIC (t) = 0;
5618 }
5619 if (TREE_CODE (t) == FUNCTION_DECL)
5620 discard_operator_bindings (t);
5621 if (TREE_CODE (t) == NAMESPACE_DECL)
5622 /* We do not need the leftover chaining of namespaces from the
5623 binding level. */
5624 DECL_CHAIN (t) = NULL_TREE;
5625 }
5626
5627 /* Stub for c-common. Please keep in sync with c-decl.c.
5628 FIXME: If address space support is target specific, then this
5629 should be a C target hook. But currently this is not possible,
5630 because this function is called via REGISTER_TARGET_PRAGMAS. */
5631 void
5632 c_register_addr_space (const char * /*word*/, addr_space_t /*as*/)
5633 {
5634 }
5635
5636 /* Return the number of operands in T that we care about for things like
5637 mangling. */
5638
5639 int
5640 cp_tree_operand_length (const_tree t)
5641 {
5642 enum tree_code code = TREE_CODE (t);
5643
5644 if (TREE_CODE_CLASS (code) == tcc_vl_exp)
5645 return VL_EXP_OPERAND_LENGTH (t);
5646
5647 return cp_tree_code_length (code);
5648 }
5649
5650 /* Like cp_tree_operand_length, but takes a tree_code CODE. */
5651
5652 int
5653 cp_tree_code_length (enum tree_code code)
5654 {
5655 gcc_assert (TREE_CODE_CLASS (code) != tcc_vl_exp);
5656
5657 switch (code)
5658 {
5659 case PREINCREMENT_EXPR:
5660 case PREDECREMENT_EXPR:
5661 case POSTINCREMENT_EXPR:
5662 case POSTDECREMENT_EXPR:
5663 return 1;
5664
5665 case ARRAY_REF:
5666 return 2;
5667
5668 case EXPR_PACK_EXPANSION:
5669 return 1;
5670
5671 default:
5672 return TREE_CODE_LENGTH (code);
5673 }
5674 }
5675
5676 /* Like EXPR_LOCATION, but also handle some tcc_exceptional that have
5677 locations. */
5678
5679 location_t
5680 cp_expr_location (const_tree t_)
5681 {
5682 tree t = CONST_CAST_TREE (t_);
5683 if (t == NULL_TREE)
5684 return UNKNOWN_LOCATION;
5685 switch (TREE_CODE (t))
5686 {
5687 case LAMBDA_EXPR:
5688 return LAMBDA_EXPR_LOCATION (t);
5689 case STATIC_ASSERT:
5690 return STATIC_ASSERT_SOURCE_LOCATION (t);
5691 case TRAIT_EXPR:
5692 return TRAIT_EXPR_LOCATION (t);
5693 default:
5694 return EXPR_LOCATION (t);
5695 }
5696 }
5697
5698 /* Implement -Wzero_as_null_pointer_constant. Return true if the
5699 conditions for the warning hold, false otherwise. */
5700 bool
5701 maybe_warn_zero_as_null_pointer_constant (tree expr, location_t loc)
5702 {
5703 if (c_inhibit_evaluation_warnings == 0
5704 && !null_node_p (expr) && !NULLPTR_TYPE_P (TREE_TYPE (expr)))
5705 {
5706 warning_at (loc, OPT_Wzero_as_null_pointer_constant,
5707 "zero as null pointer constant");
5708 return true;
5709 }
5710 return false;
5711 }
5712 \f
5713 /* Given an initializer INIT for a TYPE, return true if INIT is zero
5714 so that it can be replaced by value initialization. This function
5715 distinguishes betwen empty strings as initializers for arrays and
5716 for pointers (which make it return false). */
5717
5718 bool
5719 type_initializer_zero_p (tree type, tree init)
5720 {
5721 if (type == error_mark_node || init == error_mark_node)
5722 return false;
5723
5724 STRIP_NOPS (init);
5725
5726 if (POINTER_TYPE_P (type))
5727 return TREE_CODE (init) != STRING_CST && initializer_zerop (init);
5728
5729 if (TREE_CODE (init) != CONSTRUCTOR)
5730 return initializer_zerop (init);
5731
5732 if (TREE_CODE (type) == ARRAY_TYPE)
5733 {
5734 tree elt_type = TREE_TYPE (type);
5735 elt_type = TYPE_MAIN_VARIANT (elt_type);
5736 if (elt_type == char_type_node)
5737 return initializer_zerop (init);
5738
5739 tree elt_init;
5740 unsigned HOST_WIDE_INT i;
5741 FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (init), i, elt_init)
5742 if (!type_initializer_zero_p (elt_type, elt_init))
5743 return false;
5744 return true;
5745 }
5746
5747 if (TREE_CODE (type) != RECORD_TYPE)
5748 return initializer_zerop (init);
5749
5750 if (TYPE_NON_AGGREGATE_CLASS (type))
5751 return false;
5752
5753 tree fld = TYPE_FIELDS (type);
5754
5755 tree fld_init;
5756 unsigned HOST_WIDE_INT i;
5757 FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (init), i, fld_init)
5758 {
5759 fld = next_initializable_field (fld);
5760 if (!fld)
5761 return true;
5762
5763 tree fldtype = TREE_TYPE (fld);
5764 if (!type_initializer_zero_p (fldtype, fld_init))
5765 return false;
5766
5767 fld = DECL_CHAIN (fld);
5768 if (!fld)
5769 break;
5770 }
5771
5772 return true;
5773 }
5774 \f
5775 #if defined ENABLE_TREE_CHECKING && (GCC_VERSION >= 2007)
5776 /* Complain that some language-specific thing hanging off a tree
5777 node has been accessed improperly. */
5778
5779 void
5780 lang_check_failed (const char* file, int line, const char* function)
5781 {
5782 internal_error ("%<lang_*%> check: failed in %s, at %s:%d",
5783 function, trim_filename (file), line);
5784 }
5785 #endif /* ENABLE_TREE_CHECKING */
5786
5787 #if CHECKING_P
5788
5789 namespace selftest {
5790
5791 /* Verify that lvalue_kind () works, for various expressions,
5792 and that location wrappers don't affect the results. */
5793
5794 static void
5795 test_lvalue_kind ()
5796 {
5797 location_t loc = BUILTINS_LOCATION;
5798
5799 /* Verify constants and parameters, without and with
5800 location wrappers. */
5801 tree int_cst = build_int_cst (integer_type_node, 42);
5802 ASSERT_EQ (clk_none, lvalue_kind (int_cst));
5803
5804 tree wrapped_int_cst = maybe_wrap_with_location (int_cst, loc);
5805 ASSERT_TRUE (location_wrapper_p (wrapped_int_cst));
5806 ASSERT_EQ (clk_none, lvalue_kind (wrapped_int_cst));
5807
5808 tree string_lit = build_string (4, "foo");
5809 TREE_TYPE (string_lit) = char_array_type_node;
5810 string_lit = fix_string_type (string_lit);
5811 ASSERT_EQ (clk_ordinary, lvalue_kind (string_lit));
5812
5813 tree wrapped_string_lit = maybe_wrap_with_location (string_lit, loc);
5814 ASSERT_TRUE (location_wrapper_p (wrapped_string_lit));
5815 ASSERT_EQ (clk_ordinary, lvalue_kind (wrapped_string_lit));
5816
5817 tree parm = build_decl (UNKNOWN_LOCATION, PARM_DECL,
5818 get_identifier ("some_parm"),
5819 integer_type_node);
5820 ASSERT_EQ (clk_ordinary, lvalue_kind (parm));
5821
5822 tree wrapped_parm = maybe_wrap_with_location (parm, loc);
5823 ASSERT_TRUE (location_wrapper_p (wrapped_parm));
5824 ASSERT_EQ (clk_ordinary, lvalue_kind (wrapped_parm));
5825
5826 /* Verify that lvalue_kind of std::move on a parm isn't
5827 affected by location wrappers. */
5828 tree rvalue_ref_of_parm = move (parm);
5829 ASSERT_EQ (clk_rvalueref, lvalue_kind (rvalue_ref_of_parm));
5830 tree rvalue_ref_of_wrapped_parm = move (wrapped_parm);
5831 ASSERT_EQ (clk_rvalueref, lvalue_kind (rvalue_ref_of_wrapped_parm));
5832
5833 /* Verify lvalue_p. */
5834 ASSERT_FALSE (lvalue_p (int_cst));
5835 ASSERT_FALSE (lvalue_p (wrapped_int_cst));
5836 ASSERT_TRUE (lvalue_p (parm));
5837 ASSERT_TRUE (lvalue_p (wrapped_parm));
5838 ASSERT_FALSE (lvalue_p (rvalue_ref_of_parm));
5839 ASSERT_FALSE (lvalue_p (rvalue_ref_of_wrapped_parm));
5840 }
5841
5842 /* Run all of the selftests within this file. */
5843
5844 void
5845 cp_tree_c_tests ()
5846 {
5847 test_lvalue_kind ();
5848 }
5849
5850 } // namespace selftest
5851
5852 #endif /* #if CHECKING_P */
5853
5854
5855 #include "gt-cp-tree.h"
This page took 0.301896 seconds and 5 git commands to generate.