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