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