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