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