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