1 /* Language-dependent node constructors for parse phase of GNU compiler.
2 Copyright (C) 1987-2014 Free Software Foundation, Inc.
3 Hacked by Michael Tiemann (tiemann@cygnus.com)
5 This file is part of GCC.
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)
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.
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/>. */
23 #include "coretypes.h"
26 #include "tree-hasher.h"
27 #include "stor-layout.h"
28 #include "print-tree.h"
29 #include "tree-iterator.h"
32 #include "tree-inline.h"
36 #include "splay-tree.h"
37 #include "hash-table.h"
38 #include "gimple-expr.h"
42 static tree
bot_manip (tree
*, int *, void *);
43 static tree
bot_replace (tree
*, int *, void *);
44 static hashval_t
list_hash_pieces (tree
, tree
, tree
);
45 static tree
build_target_expr (tree
, tree
, tsubst_flags_t
);
46 static tree
count_trees_r (tree
*, int *, void *);
47 static tree
verify_stmt_tree_r (tree
*, int *, void *);
48 static tree
build_local_temp (tree
);
50 static tree
handle_java_interface_attribute (tree
*, tree
, tree
, int, bool *);
51 static tree
handle_com_interface_attribute (tree
*, tree
, tree
, int, bool *);
52 static tree
handle_init_priority_attribute (tree
*, tree
, tree
, int, bool *);
53 static tree
handle_abi_tag_attribute (tree
*, tree
, tree
, int, bool *);
55 /* If REF is an lvalue, returns the kind of lvalue that REF is.
56 Otherwise, returns clk_none. */
59 lvalue_kind (const_tree ref
)
61 cp_lvalue_kind op1_lvalue_kind
= clk_none
;
62 cp_lvalue_kind op2_lvalue_kind
= clk_none
;
64 /* Expressions of reference type are sometimes wrapped in
65 INDIRECT_REFs. INDIRECT_REFs are just internal compiler
66 representation, not part of the language, so we have to look
68 if (REFERENCE_REF_P (ref
))
69 return lvalue_kind (TREE_OPERAND (ref
, 0));
72 && TREE_CODE (TREE_TYPE (ref
)) == REFERENCE_TYPE
)
74 /* unnamed rvalue references are rvalues */
75 if (TYPE_REF_IS_RVALUE (TREE_TYPE (ref
))
76 && TREE_CODE (ref
) != PARM_DECL
78 && TREE_CODE (ref
) != COMPONENT_REF
79 /* Functions are always lvalues. */
80 && TREE_CODE (TREE_TYPE (TREE_TYPE (ref
))) != FUNCTION_TYPE
)
83 /* lvalue references and named rvalue references are lvalues. */
87 if (ref
== current_class_ptr
)
90 switch (TREE_CODE (ref
))
94 /* preincrements and predecrements are valid lvals, provided
95 what they refer to are valid lvals. */
96 case PREINCREMENT_EXPR
:
97 case PREDECREMENT_EXPR
:
99 case WITH_CLEANUP_EXPR
:
102 return lvalue_kind (TREE_OPERAND (ref
, 0));
106 if (TREE_CODE (ref
) == MEMBER_REF
)
107 op1_lvalue_kind
= clk_ordinary
;
109 op1_lvalue_kind
= lvalue_kind (TREE_OPERAND (ref
, 0));
110 if (TYPE_PTRMEMFUNC_P (TREE_TYPE (TREE_OPERAND (ref
, 1))))
111 op1_lvalue_kind
= clk_none
;
112 return op1_lvalue_kind
;
115 op1_lvalue_kind
= lvalue_kind (TREE_OPERAND (ref
, 0));
116 /* Look at the member designator. */
117 if (!op1_lvalue_kind
)
119 else if (is_overloaded_fn (TREE_OPERAND (ref
, 1)))
120 /* The "field" can be a FUNCTION_DECL or an OVERLOAD in some
121 situations. If we're seeing a COMPONENT_REF, it's a non-static
122 member, so it isn't an lvalue. */
123 op1_lvalue_kind
= clk_none
;
124 else if (TREE_CODE (TREE_OPERAND (ref
, 1)) != FIELD_DECL
)
125 /* This can be IDENTIFIER_NODE in a template. */;
126 else if (DECL_C_BIT_FIELD (TREE_OPERAND (ref
, 1)))
128 /* Clear the ordinary bit. If this object was a class
129 rvalue we want to preserve that information. */
130 op1_lvalue_kind
&= ~clk_ordinary
;
131 /* The lvalue is for a bitfield. */
132 op1_lvalue_kind
|= clk_bitfield
;
134 else if (DECL_PACKED (TREE_OPERAND (ref
, 1)))
135 op1_lvalue_kind
|= clk_packed
;
137 return op1_lvalue_kind
;
140 case COMPOUND_LITERAL_EXPR
:
144 /* CONST_DECL without TREE_STATIC are enumeration values and
145 thus not lvalues. With TREE_STATIC they are used by ObjC++
146 in objc_build_string_object and need to be considered as
148 if (! TREE_STATIC (ref
))
151 if (TREE_READONLY (ref
) && ! TREE_STATIC (ref
)
152 && DECL_LANG_SPECIFIC (ref
)
153 && DECL_IN_AGGR_P (ref
))
158 case ARRAY_NOTATION_REF
:
163 /* A scope ref in a template, left as SCOPE_REF to support later
166 gcc_assert (!type_dependent_expression_p (CONST_CAST_TREE (ref
)));
168 tree op
= TREE_OPERAND (ref
, 1);
169 if (TREE_CODE (op
) == FIELD_DECL
)
170 return (DECL_C_BIT_FIELD (op
) ? clk_bitfield
: clk_ordinary
);
172 return lvalue_kind (op
);
177 /* Disallow <? and >? as lvalues if either argument side-effects. */
178 if (TREE_SIDE_EFFECTS (TREE_OPERAND (ref
, 0))
179 || TREE_SIDE_EFFECTS (TREE_OPERAND (ref
, 1)))
181 op1_lvalue_kind
= lvalue_kind (TREE_OPERAND (ref
, 0));
182 op2_lvalue_kind
= lvalue_kind (TREE_OPERAND (ref
, 1));
186 op1_lvalue_kind
= lvalue_kind (TREE_OPERAND (ref
, 1)
187 ? TREE_OPERAND (ref
, 1)
188 : TREE_OPERAND (ref
, 0));
189 op2_lvalue_kind
= lvalue_kind (TREE_OPERAND (ref
, 2));
197 return lvalue_kind (TREE_OPERAND (ref
, 1));
203 return (CLASS_TYPE_P (TREE_TYPE (ref
)) ? clk_class
: clk_none
);
206 /* We can see calls outside of TARGET_EXPR in templates. */
207 if (CLASS_TYPE_P (TREE_TYPE (ref
)))
212 /* All functions (except non-static-member functions) are
214 return (DECL_NONSTATIC_MEMBER_FUNCTION_P (ref
)
215 ? clk_none
: clk_ordinary
);
218 /* We now represent a reference to a single static member function
220 /* This CONST_CAST is okay because BASELINK_FUNCTIONS returns
221 its argument unmodified and we assign it to a const_tree. */
222 return lvalue_kind (BASELINK_FUNCTIONS (CONST_CAST_TREE (ref
)));
224 case NON_DEPENDENT_EXPR
:
225 /* We just return clk_ordinary for NON_DEPENDENT_EXPR in C++98, but
226 in C++11 lvalues don't bind to rvalue references, so we need to
227 work harder to avoid bogus errors (c++/44870). */
228 if (cxx_dialect
< cxx11
)
231 return lvalue_kind (TREE_OPERAND (ref
, 0));
234 if (!TREE_TYPE (ref
))
236 if (CLASS_TYPE_P (TREE_TYPE (ref
)))
241 /* If one operand is not an lvalue at all, then this expression is
243 if (!op1_lvalue_kind
|| !op2_lvalue_kind
)
246 /* Otherwise, it's an lvalue, and it has all the odd properties
247 contributed by either operand. */
248 op1_lvalue_kind
= op1_lvalue_kind
| op2_lvalue_kind
;
249 /* It's not an ordinary lvalue if it involves any other kind. */
250 if ((op1_lvalue_kind
& ~clk_ordinary
) != clk_none
)
251 op1_lvalue_kind
&= ~clk_ordinary
;
252 /* It can't be both a pseudo-lvalue and a non-addressable lvalue.
253 A COND_EXPR of those should be wrapped in a TARGET_EXPR. */
254 if ((op1_lvalue_kind
& (clk_rvalueref
|clk_class
))
255 && (op1_lvalue_kind
& (clk_bitfield
|clk_packed
)))
256 op1_lvalue_kind
= clk_none
;
257 return op1_lvalue_kind
;
260 /* Returns the kind of lvalue that REF is, in the sense of
261 [basic.lval]. This function should really be named lvalue_p; it
262 computes the C++ definition of lvalue. */
265 real_lvalue_p (const_tree ref
)
267 cp_lvalue_kind kind
= lvalue_kind (ref
);
268 if (kind
& (clk_rvalueref
|clk_class
))
274 /* This differs from real_lvalue_p in that class rvalues are considered
278 lvalue_p (const_tree ref
)
280 return (lvalue_kind (ref
) != clk_none
);
283 /* This differs from real_lvalue_p in that rvalues formed by dereferencing
284 rvalue references are considered rvalues. */
287 lvalue_or_rvalue_with_address_p (const_tree ref
)
289 cp_lvalue_kind kind
= lvalue_kind (ref
);
290 if (kind
& clk_class
)
293 return (kind
!= clk_none
);
296 /* Returns true if REF is an xvalue, false otherwise. */
299 xvalue_p (const_tree ref
)
301 return (lvalue_kind (ref
) == clk_rvalueref
);
304 /* Test whether DECL is a builtin that may appear in a
305 constant-expression. */
308 builtin_valid_in_constant_expr_p (const_tree decl
)
310 /* At present BUILT_IN_CONSTANT_P is the only builtin we're allowing
311 in constant-expressions. We may want to add other builtins later. */
312 return DECL_IS_BUILTIN_CONSTANT_P (decl
);
315 /* Build a TARGET_EXPR, initializing the DECL with the VALUE. */
318 build_target_expr (tree decl
, tree value
, tsubst_flags_t complain
)
321 tree type
= TREE_TYPE (decl
);
323 #ifdef ENABLE_CHECKING
324 gcc_assert (VOID_TYPE_P (TREE_TYPE (value
))
325 || TREE_TYPE (decl
) == TREE_TYPE (value
)
326 /* On ARM ctors return 'this'. */
327 || (TYPE_PTR_P (TREE_TYPE (value
))
328 && TREE_CODE (value
) == CALL_EXPR
)
329 || useless_type_conversion_p (TREE_TYPE (decl
),
333 t
= cxx_maybe_build_cleanup (decl
, complain
);
334 if (t
== error_mark_node
)
335 return error_mark_node
;
336 t
= build4 (TARGET_EXPR
, type
, decl
, value
, t
, NULL_TREE
);
337 /* We always set TREE_SIDE_EFFECTS so that expand_expr does not
338 ignore the TARGET_EXPR. If there really turn out to be no
339 side-effects, then the optimizer should be able to get rid of
340 whatever code is generated anyhow. */
341 TREE_SIDE_EFFECTS (t
) = 1;
346 /* Return an undeclared local temporary of type TYPE for use in building a
350 build_local_temp (tree type
)
352 tree slot
= build_decl (input_location
,
353 VAR_DECL
, NULL_TREE
, type
);
354 DECL_ARTIFICIAL (slot
) = 1;
355 DECL_IGNORED_P (slot
) = 1;
356 DECL_CONTEXT (slot
) = current_function_decl
;
357 layout_decl (slot
, 0);
361 /* Set various status flags when building an AGGR_INIT_EXPR object T. */
364 process_aggr_init_operands (tree t
)
368 side_effects
= TREE_SIDE_EFFECTS (t
);
372 n
= TREE_OPERAND_LENGTH (t
);
373 for (i
= 1; i
< n
; i
++)
375 tree op
= TREE_OPERAND (t
, i
);
376 if (op
&& TREE_SIDE_EFFECTS (op
))
383 TREE_SIDE_EFFECTS (t
) = side_effects
;
386 /* Build an AGGR_INIT_EXPR of class tcc_vl_exp with the indicated RETURN_TYPE,
387 FN, and SLOT. NARGS is the number of call arguments which are specified
388 as a tree array ARGS. */
391 build_aggr_init_array (tree return_type
, tree fn
, tree slot
, int nargs
,
397 t
= build_vl_exp (AGGR_INIT_EXPR
, nargs
+ 3);
398 TREE_TYPE (t
) = return_type
;
399 AGGR_INIT_EXPR_FN (t
) = fn
;
400 AGGR_INIT_EXPR_SLOT (t
) = slot
;
401 for (i
= 0; i
< nargs
; i
++)
402 AGGR_INIT_EXPR_ARG (t
, i
) = args
[i
];
403 process_aggr_init_operands (t
);
407 /* INIT is a CALL_EXPR or AGGR_INIT_EXPR which needs info about its
408 target. TYPE is the type to be initialized.
410 Build an AGGR_INIT_EXPR to represent the initialization. This function
411 differs from build_cplus_new in that an AGGR_INIT_EXPR can only be used
412 to initialize another object, whereas a TARGET_EXPR can either
413 initialize another object or create its own temporary object, and as a
414 result building up a TARGET_EXPR requires that the type's destructor be
418 build_aggr_init_expr (tree type
, tree init
)
425 /* Don't build AGGR_INIT_EXPR in a template. */
426 if (processing_template_decl
)
429 if (TREE_CODE (init
) == CALL_EXPR
)
430 fn
= CALL_EXPR_FN (init
);
431 else if (TREE_CODE (init
) == AGGR_INIT_EXPR
)
432 fn
= AGGR_INIT_EXPR_FN (init
);
434 return convert (type
, init
);
436 is_ctor
= (TREE_CODE (fn
) == ADDR_EXPR
437 && TREE_CODE (TREE_OPERAND (fn
, 0)) == FUNCTION_DECL
438 && DECL_CONSTRUCTOR_P (TREE_OPERAND (fn
, 0)));
440 /* We split the CALL_EXPR into its function and its arguments here.
441 Then, in expand_expr, we put them back together. The reason for
442 this is that this expression might be a default argument
443 expression. In that case, we need a new temporary every time the
444 expression is used. That's what break_out_target_exprs does; it
445 replaces every AGGR_INIT_EXPR with a copy that uses a fresh
446 temporary slot. Then, expand_expr builds up a call-expression
447 using the new slot. */
449 /* If we don't need to use a constructor to create an object of this
450 type, don't mess with AGGR_INIT_EXPR. */
451 if (is_ctor
|| TREE_ADDRESSABLE (type
))
453 slot
= build_local_temp (type
);
455 if (TREE_CODE(init
) == CALL_EXPR
)
456 rval
= build_aggr_init_array (void_type_node
, fn
, slot
,
457 call_expr_nargs (init
),
458 CALL_EXPR_ARGP (init
));
460 rval
= build_aggr_init_array (void_type_node
, fn
, slot
,
461 aggr_init_expr_nargs (init
),
462 AGGR_INIT_EXPR_ARGP (init
));
463 TREE_SIDE_EFFECTS (rval
) = 1;
464 AGGR_INIT_VIA_CTOR_P (rval
) = is_ctor
;
465 TREE_NOTHROW (rval
) = TREE_NOTHROW (init
);
466 CALL_EXPR_LIST_INIT_P (rval
) = CALL_EXPR_LIST_INIT_P (init
);
474 /* INIT is a CALL_EXPR or AGGR_INIT_EXPR which needs info about its
475 target. TYPE is the type that this initialization should appear to
478 Build an encapsulation of the initialization to perform
479 and return it so that it can be processed by language-independent
480 and language-specific expression expanders. */
483 build_cplus_new (tree type
, tree init
, tsubst_flags_t complain
)
485 tree rval
= build_aggr_init_expr (type
, init
);
488 if (!complete_type_or_maybe_complain (type
, init
, complain
))
489 return error_mark_node
;
491 /* Make sure that we're not trying to create an instance of an
493 if (abstract_virtuals_error_sfinae (NULL_TREE
, type
, complain
))
494 return error_mark_node
;
496 if (TREE_CODE (rval
) == AGGR_INIT_EXPR
)
497 slot
= AGGR_INIT_EXPR_SLOT (rval
);
498 else if (TREE_CODE (rval
) == CALL_EXPR
499 || TREE_CODE (rval
) == CONSTRUCTOR
)
500 slot
= build_local_temp (type
);
504 rval
= build_target_expr (slot
, rval
, complain
);
506 if (rval
!= error_mark_node
)
507 TARGET_EXPR_IMPLICIT_P (rval
) = 1;
512 /* Subroutine of build_vec_init_expr: Build up a single element
513 intialization as a proxy for the full array initialization to get things
514 marked as used and any appropriate diagnostics.
516 Since we're deferring building the actual constructor calls until
517 gimplification time, we need to build one now and throw it away so
518 that the relevant constructor gets mark_used before cgraph decides
519 what functions are needed. Here we assume that init is either
520 NULL_TREE, void_type_node (indicating value-initialization), or
521 another array to copy. */
524 build_vec_init_elt (tree type
, tree init
, tsubst_flags_t complain
)
526 tree inner_type
= strip_array_types (type
);
527 vec
<tree
, va_gc
> *argvec
;
529 if (integer_zerop (array_type_nelts_total (type
))
530 || !CLASS_TYPE_P (inner_type
))
531 /* No interesting initialization to do. */
532 return integer_zero_node
;
533 else if (init
== void_type_node
)
534 return build_value_init (inner_type
, complain
);
536 gcc_assert (init
== NULL_TREE
537 || (same_type_ignoring_top_level_qualifiers_p
538 (type
, TREE_TYPE (init
))));
540 argvec
= make_tree_vector ();
543 tree init_type
= strip_array_types (TREE_TYPE (init
));
544 tree dummy
= build_dummy_object (init_type
);
545 if (!real_lvalue_p (init
))
546 dummy
= move (dummy
);
547 argvec
->quick_push (dummy
);
549 init
= build_special_member_call (NULL_TREE
, complete_ctor_identifier
,
550 &argvec
, inner_type
, LOOKUP_NORMAL
,
552 release_tree_vector (argvec
);
554 /* For a trivial constructor, build_over_call creates a TARGET_EXPR. But
555 we don't want one here because we aren't creating a temporary. */
556 if (TREE_CODE (init
) == TARGET_EXPR
)
557 init
= TARGET_EXPR_INITIAL (init
);
562 /* Return a TARGET_EXPR which expresses the initialization of an array to
563 be named later, either default-initialization or copy-initialization
564 from another array of the same type. */
567 build_vec_init_expr (tree type
, tree init
, tsubst_flags_t complain
)
570 bool value_init
= false;
571 tree elt_init
= build_vec_init_elt (type
, init
, complain
);
573 if (init
== void_type_node
)
579 slot
= build_local_temp (type
);
580 init
= build2 (VEC_INIT_EXPR
, type
, slot
, init
);
581 TREE_SIDE_EFFECTS (init
) = true;
582 SET_EXPR_LOCATION (init
, input_location
);
584 if (cxx_dialect
>= cxx11
585 && potential_constant_expression (elt_init
))
586 VEC_INIT_EXPR_IS_CONSTEXPR (init
) = true;
587 VEC_INIT_EXPR_VALUE_INIT (init
) = value_init
;
592 /* Give a helpful diagnostic for a non-constexpr VEC_INIT_EXPR in a context
593 that requires a constant expression. */
596 diagnose_non_constexpr_vec_init (tree expr
)
598 tree type
= TREE_TYPE (VEC_INIT_EXPR_SLOT (expr
));
600 if (VEC_INIT_EXPR_VALUE_INIT (expr
))
601 init
= void_type_node
;
603 init
= VEC_INIT_EXPR_INIT (expr
);
605 elt_init
= build_vec_init_elt (type
, init
, tf_warning_or_error
);
606 require_potential_constant_expression (elt_init
);
610 build_array_copy (tree init
)
612 return build_vec_init_expr (TREE_TYPE (init
), init
, tf_warning_or_error
);
615 /* Build a TARGET_EXPR using INIT to initialize a new temporary of the
619 build_target_expr_with_type (tree init
, tree type
, tsubst_flags_t complain
)
621 gcc_assert (!VOID_TYPE_P (type
));
623 if (TREE_CODE (init
) == TARGET_EXPR
624 || init
== error_mark_node
)
626 else if (CLASS_TYPE_P (type
) && type_has_nontrivial_copy_init (type
)
627 && !VOID_TYPE_P (TREE_TYPE (init
))
628 && TREE_CODE (init
) != COND_EXPR
629 && TREE_CODE (init
) != CONSTRUCTOR
630 && TREE_CODE (init
) != VA_ARG_EXPR
)
631 /* We need to build up a copy constructor call. A void initializer
632 means we're being called from bot_manip. COND_EXPR is a special
633 case because we already have copies on the arms and we don't want
634 another one here. A CONSTRUCTOR is aggregate initialization, which
635 is handled separately. A VA_ARG_EXPR is magic creation of an
636 aggregate; there's no additional work to be done. */
637 return force_rvalue (init
, complain
);
639 return force_target_expr (type
, init
, complain
);
642 /* Like the above function, but without the checking. This function should
643 only be used by code which is deliberately trying to subvert the type
644 system, such as call_builtin_trap. Or build_over_call, to avoid
645 infinite recursion. */
648 force_target_expr (tree type
, tree init
, tsubst_flags_t complain
)
652 gcc_assert (!VOID_TYPE_P (type
));
654 slot
= build_local_temp (type
);
655 return build_target_expr (slot
, init
, complain
);
658 /* Like build_target_expr_with_type, but use the type of INIT. */
661 get_target_expr_sfinae (tree init
, tsubst_flags_t complain
)
663 if (TREE_CODE (init
) == AGGR_INIT_EXPR
)
664 return build_target_expr (AGGR_INIT_EXPR_SLOT (init
), init
, complain
);
665 else if (TREE_CODE (init
) == VEC_INIT_EXPR
)
666 return build_target_expr (VEC_INIT_EXPR_SLOT (init
), init
, complain
);
668 return build_target_expr_with_type (init
, TREE_TYPE (init
), complain
);
672 get_target_expr (tree init
)
674 return get_target_expr_sfinae (init
, tf_warning_or_error
);
677 /* If EXPR is a bitfield reference, convert it to the declared type of
678 the bitfield, and return the resulting expression. Otherwise,
679 return EXPR itself. */
682 convert_bitfield_to_declared_type (tree expr
)
686 bitfield_type
= is_bitfield_expr_with_lowered_type (expr
);
688 expr
= convert_to_integer (TYPE_MAIN_VARIANT (bitfield_type
),
693 /* EXPR is being used in an rvalue context. Return a version of EXPR
694 that is marked as an rvalue. */
701 if (error_operand_p (expr
))
704 expr
= mark_rvalue_use (expr
);
708 Non-class rvalues always have cv-unqualified types. */
709 type
= TREE_TYPE (expr
);
710 if (!CLASS_TYPE_P (type
) && cv_qualified_p (type
))
711 type
= cv_unqualified (type
);
713 /* We need to do this for rvalue refs as well to get the right answer
714 from decltype; see c++/36628. */
715 if (!processing_template_decl
&& lvalue_or_rvalue_with_address_p (expr
))
716 expr
= build1 (NON_LVALUE_EXPR
, type
, expr
);
717 else if (type
!= TREE_TYPE (expr
))
718 expr
= build_nop (type
, expr
);
724 struct cplus_array_info
730 struct cplus_array_hasher
: ggc_hasher
<tree
>
732 typedef cplus_array_info
*compare_type
;
734 static hashval_t
hash (tree t
);
735 static bool equal (tree
, cplus_array_info
*);
738 /* Hash an ARRAY_TYPE. K is really of type `tree'. */
741 cplus_array_hasher::hash (tree t
)
745 hash
= TYPE_UID (TREE_TYPE (t
));
747 hash
^= TYPE_UID (TYPE_DOMAIN (t
));
751 /* Compare two ARRAY_TYPEs. K1 is really of type `tree', K2 is really
752 of type `cplus_array_info*'. */
755 cplus_array_hasher::equal (tree t1
, cplus_array_info
*t2
)
757 return (TREE_TYPE (t1
) == t2
->type
&& TYPE_DOMAIN (t1
) == t2
->domain
);
760 /* Hash table containing dependent array types, which are unsuitable for
761 the language-independent type hash table. */
762 static GTY (()) hash_table
<cplus_array_hasher
> *cplus_array_htab
;
764 /* Build an ARRAY_TYPE without laying it out. */
767 build_min_array_type (tree elt_type
, tree index_type
)
769 tree t
= cxx_make_type (ARRAY_TYPE
);
770 TREE_TYPE (t
) = elt_type
;
771 TYPE_DOMAIN (t
) = index_type
;
775 /* Set TYPE_CANONICAL like build_array_type_1, but using
776 build_cplus_array_type. */
779 set_array_type_canon (tree t
, tree elt_type
, tree index_type
)
781 /* Set the canonical type for this new node. */
782 if (TYPE_STRUCTURAL_EQUALITY_P (elt_type
)
783 || (index_type
&& TYPE_STRUCTURAL_EQUALITY_P (index_type
)))
784 SET_TYPE_STRUCTURAL_EQUALITY (t
);
785 else if (TYPE_CANONICAL (elt_type
) != elt_type
786 || (index_type
&& TYPE_CANONICAL (index_type
) != index_type
))
788 = build_cplus_array_type (TYPE_CANONICAL (elt_type
),
790 ? TYPE_CANONICAL (index_type
) : index_type
);
792 TYPE_CANONICAL (t
) = t
;
795 /* Like build_array_type, but handle special C++ semantics: an array of a
796 variant element type is a variant of the array of the main variant of
800 build_cplus_array_type (tree elt_type
, tree index_type
)
804 if (elt_type
== error_mark_node
|| index_type
== error_mark_node
)
805 return error_mark_node
;
808 = (processing_template_decl
809 && (dependent_type_p (elt_type
)
810 || (index_type
&& !TREE_CONSTANT (TYPE_MAX_VALUE (index_type
)))));
812 if (elt_type
!= TYPE_MAIN_VARIANT (elt_type
))
813 /* Start with an array of the TYPE_MAIN_VARIANT. */
814 t
= build_cplus_array_type (TYPE_MAIN_VARIANT (elt_type
),
818 /* Since type_hash_canon calls layout_type, we need to use our own
820 cplus_array_info cai
;
823 if (cplus_array_htab
== NULL
)
824 cplus_array_htab
= hash_table
<cplus_array_hasher
>::create_ggc (61);
826 hash
= TYPE_UID (elt_type
);
828 hash
^= TYPE_UID (index_type
);
830 cai
.domain
= index_type
;
832 tree
*e
= cplus_array_htab
->find_slot_with_hash (&cai
, hash
, INSERT
);
834 /* We have found the type: we're done. */
838 /* Build a new array type. */
839 t
= build_min_array_type (elt_type
, index_type
);
841 /* Store it in the hash table. */
844 /* Set the canonical type for this new node. */
845 set_array_type_canon (t
, elt_type
, index_type
);
850 t
= build_array_type (elt_type
, index_type
);
853 /* Now check whether we already have this array variant. */
854 if (elt_type
!= TYPE_MAIN_VARIANT (elt_type
))
857 for (t
= m
; t
; t
= TYPE_NEXT_VARIANT (t
))
858 if (TREE_TYPE (t
) == elt_type
859 && TYPE_NAME (t
) == NULL_TREE
860 && TYPE_ATTRIBUTES (t
) == NULL_TREE
)
864 t
= build_min_array_type (elt_type
, index_type
);
865 set_array_type_canon (t
, elt_type
, index_type
);
869 TYPE_MAIN_VARIANT (t
) = m
;
870 TYPE_NEXT_VARIANT (t
) = TYPE_NEXT_VARIANT (m
);
871 TYPE_NEXT_VARIANT (m
) = t
;
875 /* Avoid spurious warnings with VLAs (c++/54583). */
876 if (TYPE_SIZE (t
) && EXPR_P (TYPE_SIZE (t
)))
877 TREE_NO_WARNING (TYPE_SIZE (t
)) = 1;
879 /* Push these needs up to the ARRAY_TYPE so that initialization takes
880 place more easily. */
881 bool needs_ctor
= (TYPE_NEEDS_CONSTRUCTING (t
)
882 = TYPE_NEEDS_CONSTRUCTING (elt_type
));
883 bool needs_dtor
= (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (t
)
884 = TYPE_HAS_NONTRIVIAL_DESTRUCTOR (elt_type
));
886 if (!dependent
&& t
== TYPE_MAIN_VARIANT (t
)
887 && !COMPLETE_TYPE_P (t
) && COMPLETE_TYPE_P (elt_type
))
889 /* The element type has been completed since the last time we saw
890 this array type; update the layout and 'tor flags for any variants
893 for (tree v
= TYPE_NEXT_VARIANT (t
); v
; v
= TYPE_NEXT_VARIANT (v
))
895 TYPE_NEEDS_CONSTRUCTING (v
) = needs_ctor
;
896 TYPE_HAS_NONTRIVIAL_DESTRUCTOR (v
) = needs_dtor
;
903 /* Return an ARRAY_TYPE with element type ELT and length N. */
906 build_array_of_n_type (tree elt
, int n
)
908 return build_cplus_array_type (elt
, build_index_type (size_int (n
- 1)));
911 /* True iff T is a C++14 array of runtime bound (VLA). */
914 array_of_runtime_bound_p (tree t
)
916 if (!t
|| TREE_CODE (t
) != ARRAY_TYPE
)
918 tree dom
= TYPE_DOMAIN (t
);
921 tree max
= TYPE_MAX_VALUE (dom
);
922 return (!potential_rvalue_constant_expression (max
)
923 || (!value_dependent_expression_p (max
) && !TREE_CONSTANT (max
)));
926 /* Return a reference type node referring to TO_TYPE. If RVAL is
927 true, return an rvalue reference type, otherwise return an lvalue
928 reference type. If a type node exists, reuse it, otherwise create
931 cp_build_reference_type (tree to_type
, bool rval
)
934 lvalue_ref
= build_reference_type (to_type
);
938 /* This code to create rvalue reference types is based on and tied
939 to the code creating lvalue reference types in the middle-end
940 functions build_reference_type_for_mode and build_reference_type.
942 It works by putting the rvalue reference type nodes after the
943 lvalue reference nodes in the TYPE_NEXT_REF_TO linked list, so
944 they will effectively be ignored by the middle end. */
946 for (t
= lvalue_ref
; (t
= TYPE_NEXT_REF_TO (t
)); )
947 if (TYPE_REF_IS_RVALUE (t
))
950 t
= build_distinct_type_copy (lvalue_ref
);
952 TYPE_REF_IS_RVALUE (t
) = true;
953 TYPE_NEXT_REF_TO (t
) = TYPE_NEXT_REF_TO (lvalue_ref
);
954 TYPE_NEXT_REF_TO (lvalue_ref
) = t
;
956 if (TYPE_STRUCTURAL_EQUALITY_P (to_type
))
957 SET_TYPE_STRUCTURAL_EQUALITY (t
);
958 else if (TYPE_CANONICAL (to_type
) != to_type
)
960 = cp_build_reference_type (TYPE_CANONICAL (to_type
), rval
);
962 TYPE_CANONICAL (t
) = t
;
970 /* Returns EXPR cast to rvalue reference type, like std::move. */
975 tree type
= TREE_TYPE (expr
);
976 gcc_assert (TREE_CODE (type
) != REFERENCE_TYPE
);
977 type
= cp_build_reference_type (type
, /*rval*/true);
978 return build_static_cast (type
, expr
, tf_warning_or_error
);
981 /* Used by the C++ front end to build qualified array types. However,
982 the C version of this function does not properly maintain canonical
983 types (which are not used in C). */
985 c_build_qualified_type (tree type
, int type_quals
)
987 return cp_build_qualified_type (type
, type_quals
);
991 /* Make a variant of TYPE, qualified with the TYPE_QUALS. Handles
992 arrays correctly. In particular, if TYPE is an array of T's, and
993 TYPE_QUALS is non-empty, returns an array of qualified T's.
995 FLAGS determines how to deal with ill-formed qualifications. If
996 tf_ignore_bad_quals is set, then bad qualifications are dropped
997 (this is permitted if TYPE was introduced via a typedef or template
998 type parameter). If bad qualifications are dropped and tf_warning
999 is set, then a warning is issued for non-const qualifications. If
1000 tf_ignore_bad_quals is not set and tf_error is not set, we
1001 return error_mark_node. Otherwise, we issue an error, and ignore
1004 Qualification of a reference type is valid when the reference came
1005 via a typedef or template type argument. [dcl.ref] No such
1006 dispensation is provided for qualifying a function type. [dcl.fct]
1007 DR 295 queries this and the proposed resolution brings it into line
1008 with qualifying a reference. We implement the DR. We also behave
1009 in a similar manner for restricting non-pointer types. */
1012 cp_build_qualified_type_real (tree type
,
1014 tsubst_flags_t complain
)
1017 int bad_quals
= TYPE_UNQUALIFIED
;
1019 if (type
== error_mark_node
)
1022 if (type_quals
== cp_type_quals (type
))
1025 if (TREE_CODE (type
) == ARRAY_TYPE
)
1027 /* In C++, the qualification really applies to the array element
1028 type. Obtain the appropriately qualified element type. */
1031 = cp_build_qualified_type_real (TREE_TYPE (type
),
1035 if (element_type
== error_mark_node
)
1036 return error_mark_node
;
1038 /* See if we already have an identically qualified type. Tests
1039 should be equivalent to those in check_qualified_type. */
1040 for (t
= TYPE_MAIN_VARIANT (type
); t
; t
= TYPE_NEXT_VARIANT (t
))
1041 if (TREE_TYPE (t
) == element_type
1042 && TYPE_NAME (t
) == TYPE_NAME (type
)
1043 && TYPE_CONTEXT (t
) == TYPE_CONTEXT (type
)
1044 && attribute_list_equal (TYPE_ATTRIBUTES (t
),
1045 TYPE_ATTRIBUTES (type
)))
1050 t
= build_cplus_array_type (element_type
, TYPE_DOMAIN (type
));
1052 /* Keep the typedef name. */
1053 if (TYPE_NAME (t
) != TYPE_NAME (type
))
1055 t
= build_variant_type_copy (t
);
1056 TYPE_NAME (t
) = TYPE_NAME (type
);
1060 /* Even if we already had this variant, we update
1061 TYPE_NEEDS_CONSTRUCTING and TYPE_HAS_NONTRIVIAL_DESTRUCTOR in case
1062 they changed since the variant was originally created.
1064 This seems hokey; if there is some way to use a previous
1065 variant *without* coming through here,
1066 TYPE_NEEDS_CONSTRUCTING will never be updated. */
1067 TYPE_NEEDS_CONSTRUCTING (t
)
1068 = TYPE_NEEDS_CONSTRUCTING (TYPE_MAIN_VARIANT (element_type
));
1069 TYPE_HAS_NONTRIVIAL_DESTRUCTOR (t
)
1070 = TYPE_HAS_NONTRIVIAL_DESTRUCTOR (TYPE_MAIN_VARIANT (element_type
));
1073 else if (TYPE_PTRMEMFUNC_P (type
))
1075 /* For a pointer-to-member type, we can't just return a
1076 cv-qualified version of the RECORD_TYPE. If we do, we
1077 haven't changed the field that contains the actual pointer to
1078 a method, and so TYPE_PTRMEMFUNC_FN_TYPE will be wrong. */
1081 t
= TYPE_PTRMEMFUNC_FN_TYPE (type
);
1082 t
= cp_build_qualified_type_real (t
, type_quals
, complain
);
1083 return build_ptrmemfunc_type (t
);
1085 else if (TREE_CODE (type
) == TYPE_PACK_EXPANSION
)
1087 tree t
= PACK_EXPANSION_PATTERN (type
);
1089 t
= cp_build_qualified_type_real (t
, type_quals
, complain
);
1090 return make_pack_expansion (t
);
1093 /* A reference or method type shall not be cv-qualified.
1094 [dcl.ref], [dcl.fct]. This used to be an error, but as of DR 295
1095 (in CD1) we always ignore extra cv-quals on functions. */
1096 if (type_quals
& (TYPE_QUAL_CONST
| TYPE_QUAL_VOLATILE
)
1097 && (TREE_CODE (type
) == REFERENCE_TYPE
1098 || TREE_CODE (type
) == FUNCTION_TYPE
1099 || TREE_CODE (type
) == METHOD_TYPE
))
1101 if (TREE_CODE (type
) == REFERENCE_TYPE
)
1102 bad_quals
|= type_quals
& (TYPE_QUAL_CONST
| TYPE_QUAL_VOLATILE
);
1103 type_quals
&= ~(TYPE_QUAL_CONST
| TYPE_QUAL_VOLATILE
);
1106 /* But preserve any function-cv-quals on a FUNCTION_TYPE. */
1107 if (TREE_CODE (type
) == FUNCTION_TYPE
)
1108 type_quals
|= type_memfn_quals (type
);
1110 /* A restrict-qualified type must be a pointer (or reference)
1111 to object or incomplete type. */
1112 if ((type_quals
& TYPE_QUAL_RESTRICT
)
1113 && TREE_CODE (type
) != TEMPLATE_TYPE_PARM
1114 && TREE_CODE (type
) != TYPENAME_TYPE
1115 && !POINTER_TYPE_P (type
))
1117 bad_quals
|= TYPE_QUAL_RESTRICT
;
1118 type_quals
&= ~TYPE_QUAL_RESTRICT
;
1121 if (bad_quals
== TYPE_UNQUALIFIED
1122 || (complain
& tf_ignore_bad_quals
))
1124 else if (!(complain
& tf_error
))
1125 return error_mark_node
;
1128 tree bad_type
= build_qualified_type (ptr_type_node
, bad_quals
);
1129 error ("%qV qualifiers cannot be applied to %qT",
1133 /* Retrieve (or create) the appropriately qualified variant. */
1134 result
= build_qualified_type (type
, type_quals
);
1136 /* Preserve exception specs and ref-qualifier since build_qualified_type
1137 doesn't know about them. */
1138 if (TREE_CODE (result
) == FUNCTION_TYPE
1139 || TREE_CODE (result
) == METHOD_TYPE
)
1141 result
= build_exception_variant (result
, TYPE_RAISES_EXCEPTIONS (type
));
1142 result
= build_ref_qualified_type (result
, type_memfn_rqual (type
));
1145 /* If this was a pointer-to-method type, and we just made a copy,
1146 then we need to unshare the record that holds the cached
1147 pointer-to-member-function type, because these will be distinct
1148 between the unqualified and qualified types. */
1150 && TYPE_PTR_P (type
)
1151 && TREE_CODE (TREE_TYPE (type
)) == METHOD_TYPE
1152 && TYPE_LANG_SPECIFIC (result
) == TYPE_LANG_SPECIFIC (type
))
1153 TYPE_LANG_SPECIFIC (result
) = NULL
;
1155 /* We may also have ended up building a new copy of the canonical
1156 type of a pointer-to-method type, which could have the same
1157 sharing problem described above. */
1158 if (TYPE_CANONICAL (result
) != TYPE_CANONICAL (type
)
1159 && TYPE_PTR_P (type
)
1160 && TREE_CODE (TREE_TYPE (type
)) == METHOD_TYPE
1161 && (TYPE_LANG_SPECIFIC (TYPE_CANONICAL (result
))
1162 == TYPE_LANG_SPECIFIC (TYPE_CANONICAL (type
))))
1163 TYPE_LANG_SPECIFIC (TYPE_CANONICAL (result
)) = NULL
;
1168 /* Return TYPE with const and volatile removed. */
1171 cv_unqualified (tree type
)
1175 if (type
== error_mark_node
)
1178 quals
= cp_type_quals (type
);
1179 quals
&= ~(TYPE_QUAL_CONST
|TYPE_QUAL_VOLATILE
);
1180 return cp_build_qualified_type (type
, quals
);
1183 /* Builds a qualified variant of T that is not a typedef variant.
1184 E.g. consider the following declarations:
1185 typedef const int ConstInt;
1186 typedef ConstInt* PtrConstInt;
1187 If T is PtrConstInt, this function returns a type representing
1189 In other words, if T is a typedef, the function returns the underlying type.
1190 The cv-qualification and attributes of the type returned match the
1192 They will always be compatible types.
1193 The returned type is built so that all of its subtypes
1194 recursively have their typedefs stripped as well.
1196 This is different from just returning TYPE_CANONICAL (T)
1197 Because of several reasons:
1198 * If T is a type that needs structural equality
1199 its TYPE_CANONICAL (T) will be NULL.
1200 * TYPE_CANONICAL (T) desn't carry type attributes
1201 and loses template parameter names. */
1204 strip_typedefs (tree t
)
1206 tree result
= NULL
, type
= NULL
, t0
= NULL
;
1208 if (!t
|| t
== error_mark_node
)
1211 if (TREE_CODE (t
) == TREE_LIST
)
1213 bool changed
= false;
1214 vec
<tree
,va_gc
> *vec
= make_tree_vector ();
1215 for (; t
; t
= TREE_CHAIN (t
))
1217 gcc_assert (!TREE_PURPOSE (t
));
1218 tree elt
= strip_typedefs (TREE_VALUE (t
));
1219 if (elt
!= TREE_VALUE (t
))
1221 vec_safe_push (vec
, elt
);
1225 r
= build_tree_list_vec (vec
);
1226 release_tree_vector (vec
);
1230 gcc_assert (TYPE_P (t
));
1232 if (t
== TYPE_CANONICAL (t
))
1235 switch (TREE_CODE (t
))
1238 type
= strip_typedefs (TREE_TYPE (t
));
1239 result
= build_pointer_type (type
);
1241 case REFERENCE_TYPE
:
1242 type
= strip_typedefs (TREE_TYPE (t
));
1243 result
= cp_build_reference_type (type
, TYPE_REF_IS_RVALUE (t
));
1246 t0
= strip_typedefs (TYPE_OFFSET_BASETYPE (t
));
1247 type
= strip_typedefs (TREE_TYPE (t
));
1248 result
= build_offset_type (t0
, type
);
1251 if (TYPE_PTRMEMFUNC_P (t
))
1253 t0
= strip_typedefs (TYPE_PTRMEMFUNC_FN_TYPE (t
));
1254 result
= build_ptrmemfunc_type (t0
);
1258 type
= strip_typedefs (TREE_TYPE (t
));
1259 t0
= strip_typedefs (TYPE_DOMAIN (t
));;
1260 result
= build_cplus_array_type (type
, t0
);
1265 tree arg_types
= NULL
, arg_node
, arg_type
;
1266 for (arg_node
= TYPE_ARG_TYPES (t
);
1268 arg_node
= TREE_CHAIN (arg_node
))
1270 if (arg_node
== void_list_node
)
1272 arg_type
= strip_typedefs (TREE_VALUE (arg_node
));
1273 gcc_assert (arg_type
);
1276 tree_cons (TREE_PURPOSE (arg_node
), arg_type
, arg_types
);
1280 arg_types
= nreverse (arg_types
);
1282 /* A list of parameters not ending with an ellipsis
1283 must end with void_list_node. */
1285 arg_types
= chainon (arg_types
, void_list_node
);
1287 type
= strip_typedefs (TREE_TYPE (t
));
1288 if (TREE_CODE (t
) == METHOD_TYPE
)
1290 tree class_type
= TREE_TYPE (TREE_VALUE (arg_types
));
1291 gcc_assert (class_type
);
1293 build_method_type_directly (class_type
, type
,
1294 TREE_CHAIN (arg_types
));
1296 = build_ref_qualified_type (result
, type_memfn_rqual (t
));
1300 result
= build_function_type (type
,
1302 result
= apply_memfn_quals (result
,
1303 type_memfn_quals (t
),
1304 type_memfn_rqual (t
));
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;
1316 tree fullname
= TYPENAME_TYPE_FULLNAME (t
);
1317 if (TREE_CODE (fullname
) == TEMPLATE_ID_EXPR
1318 && TREE_OPERAND (fullname
, 1))
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
)
1325 tree arg
= TREE_VEC_ELT (args
, i
);
1328 strip_arg
= strip_typedefs (arg
);
1330 strip_arg
= strip_typedefs_expr (arg
);
1331 TREE_VEC_ELT (new_args
, i
) = strip_arg
;
1332 if (strip_arg
!= arg
)
1337 NON_DEFAULT_TEMPLATE_ARGS_COUNT (new_args
)
1338 = NON_DEFAULT_TEMPLATE_ARGS_COUNT (args
);
1340 = lookup_template_function (TREE_OPERAND (fullname
, 0),
1344 ggc_free (new_args
);
1346 result
= make_typename_type (strip_typedefs (TYPE_CONTEXT (t
)),
1347 fullname
, typename_type
, tf_none
);
1351 result
= strip_typedefs_expr (DECLTYPE_TYPE_EXPR (t
));
1352 if (result
== DECLTYPE_TYPE_EXPR (t
))
1355 result
= (finish_decltype_type
1357 DECLTYPE_TYPE_ID_EXPR_OR_MEMBER_ACCESS_P (t
),
1365 result
= TYPE_MAIN_VARIANT (t
);
1366 if (TYPE_USER_ALIGN (t
) != TYPE_USER_ALIGN (result
)
1367 || TYPE_ALIGN (t
) != TYPE_ALIGN (result
))
1369 gcc_assert (TYPE_USER_ALIGN (t
));
1370 if (TYPE_ALIGN (t
) == TYPE_ALIGN (result
))
1371 result
= build_variant_type_copy (result
);
1373 result
= build_aligned_type (result
, TYPE_ALIGN (t
));
1374 TYPE_USER_ALIGN (result
) = true;
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
));
1381 /* Like strip_typedefs above, but works on expressions, so that in
1383 template<class T> struct A
1389 sizeof(TT) is replaced by sizeof(T). */
1392 strip_typedefs_expr (tree t
)
1396 enum tree_code code
;
1398 if (t
== NULL_TREE
|| t
== error_mark_node
)
1401 if (DECL_P (t
) || CONSTANT_CLASS_P (t
))
1404 /* Some expressions have type operands, so let's handle types here rather
1405 than check TYPE_P in multiple places below. */
1407 return strip_typedefs (t
);
1409 code
= TREE_CODE (t
);
1412 case IDENTIFIER_NODE
:
1413 case TEMPLATE_PARM_INDEX
:
1416 case ARGUMENT_PACK_SELECT
:
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
))
1427 TRAIT_EXPR_TYPE1 (t
) = type1
;
1428 TRAIT_EXPR_TYPE2 (t
) = type2
;
1434 vec
<tree
, va_gc
> *vec
= make_tree_vector ();
1435 bool changed
= false;
1437 for (it
= t
; it
; it
= TREE_CHAIN (it
))
1439 tree val
= strip_typedefs_expr (TREE_VALUE (t
));
1440 vec_safe_push (vec
, val
);
1441 if (val
!= TREE_VALUE (t
))
1443 gcc_assert (TREE_PURPOSE (it
) == NULL_TREE
);
1448 FOR_EACH_VEC_ELT_REVERSE (*vec
, i
, it
)
1449 r
= tree_cons (NULL_TREE
, it
, r
);
1453 release_tree_vector (vec
);
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
)
1465 tree op
= strip_typedefs_expr (TREE_VEC_ELT (t
, i
));
1466 vec
->quick_push (op
);
1467 if (op
!= TREE_VEC_ELT (t
, i
))
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
);
1480 release_tree_vector (vec
);
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
)
1493 constructor_elt
*e
= &(*vec
)[i
];
1494 tree op
= strip_typedefs_expr (e
->value
);
1500 gcc_checking_assert (e
->index
== strip_typedefs_expr (e
->index
));
1503 if (!changed
&& type
== TREE_TYPE (t
))
1511 TREE_TYPE (r
) = type
;
1512 CONSTRUCTOR_ELTS (r
) = vec
;
1518 error ("lambda-expression in a constant expression");
1519 return error_mark_node
;
1525 gcc_assert (EXPR_P (t
));
1527 n
= TREE_OPERAND_LENGTH (t
);
1528 ops
= XALLOCAVEC (tree
, n
);
1529 type
= TREE_TYPE (t
);
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
:
1541 type
= strip_typedefs (type
);
1545 for (i
= 0; i
< n
; ++i
)
1546 ops
[i
] = strip_typedefs_expr (TREE_OPERAND (t
, i
));
1550 /* If nothing changed, return t. */
1551 for (i
= 0; i
< n
; ++i
)
1552 if (ops
[i
] != TREE_OPERAND (t
, i
))
1554 if (i
== n
&& type
== TREE_TYPE (t
))
1558 TREE_TYPE (r
) = type
;
1559 for (i
= 0; i
< n
; ++i
)
1560 TREE_OPERAND (r
, i
) = ops
[i
];
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
1572 The CLASSTYPE_VBASECLASSES vector of T is constructed in the
1573 correct order. That is in the order the bases themselves should be
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
1583 copy_binfo (tree binfo
, tree type
, tree t
, tree
*igo_prev
, int virt
)
1589 /* See if we've already made this virtual base. */
1590 new_binfo
= binfo_for_vbase (type
, t
);
1595 new_binfo
= make_tree_binfo (binfo
? BINFO_N_BASE_BINFOS (binfo
) : 0);
1596 BINFO_TYPE (new_binfo
) = type
;
1598 /* Chain it into the inheritance graph. */
1599 TREE_CHAIN (*igo_prev
) = new_binfo
;
1600 *igo_prev
= new_binfo
;
1602 if (binfo
&& !BINFO_DEPENDENT_BASE_P (binfo
))
1607 gcc_assert (SAME_BINFO_TYPE_P (BINFO_TYPE (binfo
), type
));
1609 BINFO_OFFSET (new_binfo
) = BINFO_OFFSET (binfo
);
1610 BINFO_VIRTUALS (new_binfo
) = BINFO_VIRTUALS (binfo
);
1612 /* We do not need to copy the accesses, as they are read only. */
1613 BINFO_BASE_ACCESSES (new_binfo
) = BINFO_BASE_ACCESSES (binfo
);
1615 /* Recursively copy base binfos of BINFO. */
1616 for (ix
= 0; BINFO_BASE_ITERATE (binfo
, ix
, base_binfo
); ix
++)
1618 tree new_base_binfo
;
1619 new_base_binfo
= copy_binfo (base_binfo
, BINFO_TYPE (base_binfo
),
1621 BINFO_VIRTUAL_P (base_binfo
));
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
);
1629 BINFO_DEPENDENT_BASE_P (new_binfo
) = 1;
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
);
1643 /* Hashing of lists so that we don't make duplicates.
1644 The entry point is `list_hash_canon'. */
1653 struct list_hasher
: ggc_hasher
<tree
>
1655 typedef list_proxy
*compare_type
;
1657 static hashval_t
hash (tree
);
1658 static bool equal (tree
, list_proxy
*);
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. */
1667 static GTY (()) hash_table
<list_hasher
> *list_hash_table
;
1669 /* Compare ENTRY (an entry in the hash table) with DATA (a list_proxy
1670 for a node we are thinking about adding). */
1673 list_hasher::equal (tree t
, list_proxy
*proxy
)
1675 return (TREE_VALUE (t
) == proxy
->value
1676 && TREE_PURPOSE (t
) == proxy
->purpose
1677 && TREE_CHAIN (t
) == proxy
->chain
);
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. */
1685 list_hash_pieces (tree purpose
, tree value
, tree chain
)
1687 hashval_t hashcode
= 0;
1690 hashcode
+= TREE_HASH (chain
);
1693 hashcode
+= TREE_HASH (value
);
1697 hashcode
+= TREE_HASH (purpose
);
1703 /* Hash an already existing TREE_LIST. */
1706 list_hasher::hash (tree t
)
1708 return list_hash_pieces (TREE_PURPOSE (t
),
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. */
1718 hash_tree_cons (tree purpose
, tree value
, tree chain
)
1722 struct list_proxy proxy
;
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. */
1735 *slot
= tree_cons (purpose
, value
, chain
);
1736 return (tree
) *slot
;
1739 /* Constructor for hashed lists. */
1742 hash_tree_chain (tree value
, tree chain
)
1744 return hash_tree_cons (NULL_TREE
, value
, chain
);
1748 debug_binfo (tree elem
)
1753 fprintf (stderr
, "type \"%s\", offset = " HOST_WIDE_INT_PRINT_DEC
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
))));
1762 fprintf (stderr
, "no vtable decl yet\n");
1763 fprintf (stderr
, "virtuals:\n");
1764 virtuals
= BINFO_VIRTUALS (elem
);
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
)));
1774 virtuals
= TREE_CHAIN (virtuals
);
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 "::".
1784 All SCOPE_REFs should be built by use of this function. */
1787 build_qualified_name (tree type
, tree scope
, tree name
, bool template_p
)
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;
1798 t
= convert_from_reference (t
);
1802 /* Like check_qualified_type, but also check ref-qualifier and exception
1806 cp_check_qualified_type (const_tree cand
, const_tree base
, int type_quals
,
1807 cp_ref_qualifier rqual
, tree raises
)
1809 return (check_qualified_type (cand
, base
, type_quals
)
1810 && comp_except_specs (raises
, TYPE_RAISES_EXCEPTIONS (cand
),
1812 && type_memfn_rqual (cand
) == rqual
);
1815 /* Build the FUNCTION_TYPE or METHOD_TYPE with the ref-qualifier RQUAL. */
1818 build_ref_qualified_type (tree type
, cp_ref_qualifier rqual
)
1822 if (rqual
== type_memfn_rqual (type
))
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
))
1831 t
= build_variant_type_copy (type
);
1834 case REF_QUAL_RVALUE
:
1835 FUNCTION_RVALUE_QUALIFIED (t
) = 1;
1836 FUNCTION_REF_QUALIFIED (t
) = 1;
1838 case REF_QUAL_LVALUE
:
1839 FUNCTION_RVALUE_QUALIFIED (t
) = 0;
1840 FUNCTION_REF_QUALIFIED (t
) = 1;
1843 FUNCTION_REF_QUALIFIED (t
) = 0;
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
1853 TYPE_CANONICAL (t
) = build_ref_qualified_type (TYPE_CANONICAL (type
),
1856 /* T is its own canonical type. */
1857 TYPE_CANONICAL (t
) = t
;
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. */
1870 is_overloaded_fn (tree x
)
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);
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
)))
1883 return (TREE_CODE (x
) == FUNCTION_DECL
1884 || TREE_CODE (x
) == OVERLOAD
);
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
1892 dependent_name (tree x
)
1894 if (identifier_p (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
));
1904 /* Returns true iff X is an expression for an overloaded function
1905 whose type cannot be known without performing overload
1909 really_overloaded_fn (tree x
)
1911 return is_overloaded_fn (x
) == 2;
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);
1930 get_first_fn (tree from
)
1932 return OVL_CURRENT (get_fns (from
));
1935 /* Return a new OVL node, concatenating it with the old one. */
1938 ovl_cons (tree decl
, tree chain
)
1940 tree result
= make_node (OVERLOAD
);
1941 TREE_TYPE (result
) = unknown_type_node
;
1942 OVL_FUNCTION (result
) = decl
;
1943 TREE_CHAIN (result
) = chain
;
1948 /* Build a new overloaded function. If this is the first one,
1949 just return it; otherwise, ovl_cons the _DECLs */
1952 build_overload (tree decl
, tree chain
)
1954 if (! chain
&& TREE_CODE (decl
) != TEMPLATE_DECL
)
1956 return ovl_cons (decl
, chain
);
1959 /* Return the scope where the overloaded functions OVL were found. */
1962 ovl_scope (tree ovl
)
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
));
1977 /* Return TRUE if FN is a non-static member function, FALSE otherwise.
1978 This function looks into BASELINK and OVERLOAD nodes. */
1981 non_static_member_function_p (tree fn
)
1983 if (fn
== NULL_TREE
)
1986 if (is_overloaded_fn (fn
))
1987 fn
= get_first_fn (fn
);
1990 && DECL_NONSTATIC_MEMBER_FUNCTION_P (fn
));
1994 #define PRINT_RING_SIZE 4
1997 cxx_printable_name_internal (tree decl
, int v
, bool translate
)
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
;
2005 /* Only cache functions. */
2007 || TREE_CODE (decl
) != FUNCTION_DECL
2008 || DECL_LANG_SPECIFIC (decl
) == 0)
2009 return lang_decl_name (decl
, v
, translate
);
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
];
2017 if (++ring_counter
== PRINT_RING_SIZE
)
2020 if (current_function_decl
!= NULL_TREE
)
2022 /* There may be both translated and untranslated versions of the
2024 for (i
= 0; i
< 2; i
++)
2026 if (uid_ring
[ring_counter
] == DECL_UID (current_function_decl
))
2028 if (ring_counter
== PRINT_RING_SIZE
)
2031 gcc_assert (uid_ring
[ring_counter
] != DECL_UID (current_function_decl
));
2034 free (print_ring
[ring_counter
]);
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
];
2043 cxx_printable_name (tree decl
, int v
)
2045 return cxx_printable_name_internal (decl
, v
, false);
2049 cxx_printable_name_translate (tree decl
, int v
)
2051 return cxx_printable_name_internal (decl
, v
, true);
2054 /* Build the FUNCTION_TYPE or METHOD_TYPE which may throw exceptions
2055 listed in RAISES. */
2058 build_exception_variant (tree type
, tree raises
)
2063 if (comp_except_specs (raises
, TYPE_RAISES_EXCEPTIONS (type
), ce_exact
))
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
))
2072 /* Need to build a new variant. */
2073 v
= build_variant_type_copy (type
);
2074 TYPE_RAISES_EXCEPTIONS (v
) = raises
;
2078 /* Given a TEMPLATE_TEMPLATE_PARM node T, create a new
2079 BOUND_TEMPLATE_TEMPLATE_PARM bound with NEWARGS as its template
2083 bind_template_template_parm (tree t
, tree newargs
)
2085 tree decl
= TYPE_NAME (t
);
2088 t2
= cxx_make_type (BOUND_TEMPLATE_TEMPLATE_PARM
);
2089 decl
= build_decl (input_location
,
2090 TYPE_DECL
, DECL_NAME (decl
), NULL_TREE
);
2092 /* These nodes have to be created to reflect new TYPE_DECL and template
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
);
2099 TREE_TYPE (decl
) = t2
;
2100 TYPE_NAME (t2
) = decl
;
2101 TYPE_STUB_DECL (t2
) = decl
;
2103 SET_TYPE_STRUCTURAL_EQUALITY (t2
);
2108 /* Called from count_trees via walk_tree. */
2111 count_trees_r (tree
*tp
, int *walk_subtrees
, void *data
)
2121 /* Debugging function for measuring the rough complexity of a tree
2125 count_trees (tree t
)
2128 cp_walk_tree_without_duplicates (&t
, count_trees_r
, &n_trees
);
2132 /* Called from verify_stmt_tree via walk_tree. */
2135 verify_stmt_tree_r (tree
* tp
, int * /*walk_subtrees*/, void* data
)
2138 hash_table
<pointer_hash
<tree_node
> > *statements
2139 = static_cast <hash_table
<pointer_hash
<tree_node
> > *> (data
);
2142 if (!STATEMENT_CODE_P (TREE_CODE (t
)))
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
));
2149 slot
= statements
->find_slot (t
, INSERT
);
2155 /* Debugging function to check that the statement T has not been
2156 corrupted. For now, this function simply checks that T contains no
2160 verify_stmt_tree (tree t
)
2162 hash_table
<pointer_hash
<tree_node
> > statements (37);
2163 cp_walk_tree (&t
, verify_stmt_tree_r
, &statements
, NULL
);
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. */
2171 no_linkage_check (tree t
, bool relaxed_p
)
2175 /* There's no point in checking linkage on template functions; we
2176 can't know their complete types. */
2177 if (processing_template_decl
)
2180 switch (TREE_CODE (t
))
2183 if (TYPE_PTRMEMFUNC_P (t
))
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
)
2196 if (!CLASS_TYPE_P (t
))
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
))
2205 for (r
= CP_TYPE_CONTEXT (t
); ; )
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
)
2214 if (!relaxed_p
|| !vague_linkage_p (r
))
2217 r
= CP_DECL_CONTEXT (r
);
2227 case REFERENCE_TYPE
:
2229 return no_linkage_check (TREE_TYPE (t
), relaxed_p
);
2233 r
= no_linkage_check (TYPE_PTRMEM_POINTED_TO_TYPE (t
),
2237 return no_linkage_check (TYPE_PTRMEM_CLASS_TYPE (t
), relaxed_p
);
2240 r
= no_linkage_check (TYPE_METHOD_BASETYPE (t
), relaxed_p
);
2247 for (parm
= TYPE_ARG_TYPES (t
);
2248 parm
&& parm
!= void_list_node
;
2249 parm
= TREE_CHAIN (parm
))
2251 r
= no_linkage_check (TREE_VALUE (parm
), relaxed_p
);
2255 return no_linkage_check (TREE_TYPE (t
), relaxed_p
);
2263 extern int depth_reached
;
2266 cxx_print_statistics (void)
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",
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
2281 array_type_nelts_top (tree type
)
2283 return fold_build2_loc (input_location
,
2284 PLUS_EXPR
, sizetype
,
2285 array_type_nelts (type
),
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. */
2294 array_type_nelts_total (tree type
)
2296 tree sz
= array_type_nelts_top (type
);
2297 type
= TREE_TYPE (type
);
2298 while (TREE_CODE (type
) == ARRAY_TYPE
)
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
);
2308 /* Called from break_out_target_exprs via mapcar. */
2311 bot_manip (tree
* tp
, int* walk_subtrees
, void* data
)
2313 splay_tree target_remap
= ((splay_tree
) data
);
2316 if (!TYPE_P (t
) && TREE_CONSTANT (t
) && !TREE_SIDE_EFFECTS (t
))
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. */
2324 *tp
= unshare_expr (t
);
2327 if (TREE_CODE (t
) == TARGET_EXPR
)
2331 if (TREE_CODE (TREE_OPERAND (t
, 1)) == AGGR_INIT_EXPR
)
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;
2339 u
= build_target_expr_with_type (TREE_OPERAND (t
, 1), TREE_TYPE (t
),
2340 tf_warning_or_error
);
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
);
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));
2351 TREE_OPERAND (u
, 1) = break_out_target_exprs (TREE_OPERAND (u
, 1));
2353 /* Replace the old expression with the new version. */
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
2362 /* Make a copy of this node. */
2363 t
= copy_tree_r (tp
, walk_subtrees
, NULL
);
2364 if (TREE_CODE (*tp
) == CALL_EXPR
)
2366 set_flags_from_callee (*tp
);
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
))
2376 SET_EXPR_LOCATION (*tp
, input_location
);
2384 /* Replace all remapped VAR_DECLs in T with their new equivalents.
2385 DATA is really a splay-tree mapping old variables to new
2389 bot_replace (tree
* t
, int* /*walk_subtrees*/, void* data
)
2391 splay_tree target_remap
= ((splay_tree
) data
);
2395 splay_tree_node n
= splay_tree_lookup (target_remap
,
2396 (splay_tree_key
) *t
);
2398 *t
= (tree
) n
->value
;
2400 else if (TREE_CODE (*t
) == PARM_DECL
2401 && DECL_NAME (*t
) == this_identifier
2402 && !DECL_CONTEXT (*t
))
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
;
2408 else if (TREE_CODE (*t
) == CONVERT_EXPR
2409 && CONVERT_EXPR_VBASE_PATH (*t
))
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
);
2416 FOR_EACH_VEC_SAFE_ELT (vbases
, i
, binfo
)
2417 if (BINFO_TYPE (binfo
) == basetype
)
2419 *t
= build_base_path (PLUS_EXPR
, TREE_OPERAND (*t
, 0), binfo
, true,
2420 tf_warning_or_error
);
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. */
2432 break_out_target_exprs (tree t
)
2434 static int target_remap_count
;
2435 static splay_tree target_remap
;
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
);
2444 if (!--target_remap_count
)
2446 splay_tree_delete (target_remap
);
2447 target_remap
= NULL
;
2453 /* Similar to `build_nt', but for template definitions of dependent
2457 build_min_nt_loc (location_t loc
, enum tree_code code
, ...)
2464 gcc_assert (TREE_CODE_CLASS (code
) != tcc_vl_exp
);
2468 t
= make_node (code
);
2469 SET_EXPR_LOCATION (t
, loc
);
2470 length
= TREE_CODE_LENGTH (code
);
2472 for (i
= 0; i
< length
; i
++)
2474 tree x
= va_arg (p
, tree
);
2475 TREE_OPERAND (t
, i
) = x
;
2483 /* Similar to `build', but for template definitions. */
2486 build_min (enum tree_code code
, tree tt
, ...)
2493 gcc_assert (TREE_CODE_CLASS (code
) != tcc_vl_exp
);
2497 t
= make_node (code
);
2498 length
= TREE_CODE_LENGTH (code
);
2501 for (i
= 0; i
< length
; i
++)
2503 tree x
= va_arg (p
, tree
);
2504 TREE_OPERAND (t
, i
) = x
;
2505 if (x
&& !TYPE_P (x
) && TREE_SIDE_EFFECTS (x
))
2506 TREE_SIDE_EFFECTS (t
) = 1;
2513 /* Similar to `build', but for template definitions of non-dependent
2514 expressions. NON_DEP is the non-dependent expression that has been
2518 build_min_non_dep (enum tree_code code
, tree non_dep
, ...)
2525 gcc_assert (TREE_CODE_CLASS (code
) != tcc_vl_exp
);
2527 va_start (p
, non_dep
);
2529 if (REFERENCE_REF_P (non_dep
))
2530 non_dep
= TREE_OPERAND (non_dep
, 0);
2532 t
= make_node (code
);
2533 length
= TREE_CODE_LENGTH (code
);
2534 TREE_TYPE (t
) = TREE_TYPE (non_dep
);
2535 TREE_SIDE_EFFECTS (t
) = TREE_SIDE_EFFECTS (non_dep
);
2537 for (i
= 0; i
< length
; i
++)
2539 tree x
= va_arg (p
, tree
);
2540 TREE_OPERAND (t
, i
) = x
;
2543 if (code
== COMPOUND_EXPR
&& TREE_CODE (non_dep
) != COMPOUND_EXPR
)
2544 /* This should not be considered a COMPOUND_EXPR, because it
2545 resolves to an overload. */
2546 COMPOUND_EXPR_OVERLOADED (t
) = 1;
2549 return convert_from_reference (t
);
2552 /* Similar to `build_nt_call_vec', but for template definitions of
2553 non-dependent expressions. NON_DEP is the non-dependent expression
2554 that has been built. */
2557 build_min_non_dep_call_vec (tree non_dep
, tree fn
, vec
<tree
, va_gc
> *argvec
)
2559 tree t
= build_nt_call_vec (fn
, argvec
);
2560 if (REFERENCE_REF_P (non_dep
))
2561 non_dep
= TREE_OPERAND (non_dep
, 0);
2562 TREE_TYPE (t
) = TREE_TYPE (non_dep
);
2563 TREE_SIDE_EFFECTS (t
) = TREE_SIDE_EFFECTS (non_dep
);
2564 return convert_from_reference (t
);
2568 get_type_decl (tree t
)
2570 if (TREE_CODE (t
) == TYPE_DECL
)
2573 return TYPE_STUB_DECL (t
);
2574 gcc_assert (t
== error_mark_node
);
2578 /* Returns the namespace that contains DECL, whether directly or
2582 decl_namespace_context (tree decl
)
2586 if (TREE_CODE (decl
) == NAMESPACE_DECL
)
2588 else if (TYPE_P (decl
))
2589 decl
= CP_DECL_CONTEXT (TYPE_MAIN_DECL (decl
));
2591 decl
= CP_DECL_CONTEXT (decl
);
2595 /* Returns true if decl is within an anonymous namespace, however deeply
2596 nested, or false otherwise. */
2599 decl_anon_ns_mem_p (const_tree decl
)
2603 if (decl
== NULL_TREE
|| decl
== error_mark_node
)
2605 if (TREE_CODE (decl
) == NAMESPACE_DECL
2606 && DECL_NAME (decl
) == NULL_TREE
)
2608 /* Classes and namespaces inside anonymous namespaces have
2609 TREE_PUBLIC == 0, so we can shortcut the search. */
2610 else if (TYPE_P (decl
))
2611 return (TREE_PUBLIC (TYPE_MAIN_DECL (decl
)) == 0);
2612 else if (TREE_CODE (decl
) == NAMESPACE_DECL
)
2613 return (TREE_PUBLIC (decl
) == 0);
2615 decl
= DECL_CONTEXT (decl
);
2619 /* Subroutine of cp_tree_equal: t1 and t2 are the CALL_EXPR_FNs of two
2620 CALL_EXPRS. Return whether they are equivalent. */
2623 called_fns_equal (tree t1
, tree t2
)
2625 /* Core 1321: dependent names are equivalent even if the overload sets
2626 are different. But do compare explicit template arguments. */
2627 tree name1
= dependent_name (t1
);
2628 tree name2
= dependent_name (t2
);
2631 tree targs1
= NULL_TREE
, targs2
= NULL_TREE
;
2636 if (TREE_CODE (t1
) == TEMPLATE_ID_EXPR
)
2637 targs1
= TREE_OPERAND (t1
, 1);
2638 if (TREE_CODE (t2
) == TEMPLATE_ID_EXPR
)
2639 targs2
= TREE_OPERAND (t2
, 1);
2640 return cp_tree_equal (targs1
, targs2
);
2643 return cp_tree_equal (t1
, t2
);
2646 /* Return truthvalue of whether T1 is the same tree structure as T2.
2647 Return 1 if they are the same. Return 0 if they are different. */
2650 cp_tree_equal (tree t1
, tree t2
)
2652 enum tree_code code1
, code2
;
2659 for (code1
= TREE_CODE (t1
);
2660 CONVERT_EXPR_CODE_P (code1
)
2661 || code1
== NON_LVALUE_EXPR
;
2662 code1
= TREE_CODE (t1
))
2663 t1
= TREE_OPERAND (t1
, 0);
2664 for (code2
= TREE_CODE (t2
);
2665 CONVERT_EXPR_CODE_P (code2
)
2666 || code2
== NON_LVALUE_EXPR
;
2667 code2
= TREE_CODE (t2
))
2668 t2
= TREE_OPERAND (t2
, 0);
2670 /* They might have become equal now. */
2680 /* There's only a single VOID_CST node, so we should never reach
2685 return tree_int_cst_equal (t1
, t2
);
2688 return REAL_VALUES_EQUAL (TREE_REAL_CST (t1
), TREE_REAL_CST (t2
));
2691 return TREE_STRING_LENGTH (t1
) == TREE_STRING_LENGTH (t2
)
2692 && !memcmp (TREE_STRING_POINTER (t1
), TREE_STRING_POINTER (t2
),
2693 TREE_STRING_LENGTH (t1
));
2696 return FIXED_VALUES_IDENTICAL (TREE_FIXED_CST (t1
),
2697 TREE_FIXED_CST (t2
));
2700 return cp_tree_equal (TREE_REALPART (t1
), TREE_REALPART (t2
))
2701 && cp_tree_equal (TREE_IMAGPART (t1
), TREE_IMAGPART (t2
));
2704 return operand_equal_p (t1
, t2
, OEP_ONLY_CONST
);
2707 /* We need to do this when determining whether or not two
2708 non-type pointer to member function template arguments
2710 if (!same_type_p (TREE_TYPE (t1
), TREE_TYPE (t2
))
2711 || CONSTRUCTOR_NELTS (t1
) != CONSTRUCTOR_NELTS (t2
))
2716 FOR_EACH_CONSTRUCTOR_ELT (CONSTRUCTOR_ELTS (t1
), i
, field
, value
)
2718 constructor_elt
*elt2
= CONSTRUCTOR_ELT (t2
, i
);
2719 if (!cp_tree_equal (field
, elt2
->index
)
2720 || !cp_tree_equal (value
, elt2
->value
))
2727 if (!cp_tree_equal (TREE_PURPOSE (t1
), TREE_PURPOSE (t2
)))
2729 if (!cp_tree_equal (TREE_VALUE (t1
), TREE_VALUE (t2
)))
2731 return cp_tree_equal (TREE_CHAIN (t1
), TREE_CHAIN (t2
));
2734 return cp_tree_equal (TREE_OPERAND (t1
, 0), TREE_OPERAND (t2
, 0));
2739 call_expr_arg_iterator iter1
, iter2
;
2740 if (!called_fns_equal (CALL_EXPR_FN (t1
), CALL_EXPR_FN (t2
)))
2742 for (arg1
= first_call_expr_arg (t1
, &iter1
),
2743 arg2
= first_call_expr_arg (t2
, &iter2
);
2745 arg1
= next_call_expr_arg (&iter1
),
2746 arg2
= next_call_expr_arg (&iter2
))
2747 if (!cp_tree_equal (arg1
, arg2
))
2756 tree o1
= TREE_OPERAND (t1
, 0);
2757 tree o2
= TREE_OPERAND (t2
, 0);
2759 /* Special case: if either target is an unallocated VAR_DECL,
2760 it means that it's going to be unified with whatever the
2761 TARGET_EXPR is really supposed to initialize, so treat it
2762 as being equivalent to anything. */
2763 if (VAR_P (o1
) && DECL_NAME (o1
) == NULL_TREE
2764 && !DECL_RTL_SET_P (o1
))
2766 else if (VAR_P (o2
) && DECL_NAME (o2
) == NULL_TREE
2767 && !DECL_RTL_SET_P (o2
))
2769 else if (!cp_tree_equal (o1
, o2
))
2772 return cp_tree_equal (TREE_OPERAND (t1
, 1), TREE_OPERAND (t2
, 1));
2775 case WITH_CLEANUP_EXPR
:
2776 if (!cp_tree_equal (TREE_OPERAND (t1
, 0), TREE_OPERAND (t2
, 0)))
2778 return cp_tree_equal (TREE_OPERAND (t1
, 1), TREE_OPERAND (t1
, 1));
2781 if (TREE_OPERAND (t1
, 1) != TREE_OPERAND (t2
, 1))
2783 return cp_tree_equal (TREE_OPERAND (t1
, 0), TREE_OPERAND (t2
, 0));
2786 /* For comparing uses of parameters in late-specified return types
2787 with an out-of-class definition of the function, but can also come
2788 up for expressions that involve 'this' in a member function
2791 if (comparing_specializations
)
2792 /* When comparing hash table entries, only an exact match is
2793 good enough; we don't want to replace 'this' with the
2794 version from another function. */
2797 if (same_type_p (TREE_TYPE (t1
), TREE_TYPE (t2
)))
2799 if (DECL_ARTIFICIAL (t1
) ^ DECL_ARTIFICIAL (t2
))
2801 if (DECL_ARTIFICIAL (t1
)
2802 || (DECL_PARM_LEVEL (t1
) == DECL_PARM_LEVEL (t2
)
2803 && DECL_PARM_INDEX (t1
) == DECL_PARM_INDEX (t2
)))
2813 case IDENTIFIER_NODE
:
2818 return (BASELINK_BINFO (t1
) == BASELINK_BINFO (t2
)
2819 && BASELINK_ACCESS_BINFO (t1
) == BASELINK_ACCESS_BINFO (t2
)
2820 && BASELINK_QUALIFIED_P (t1
) == BASELINK_QUALIFIED_P (t2
)
2821 && cp_tree_equal (BASELINK_FUNCTIONS (t1
),
2822 BASELINK_FUNCTIONS (t2
)));
2824 case TEMPLATE_PARM_INDEX
:
2825 return (TEMPLATE_PARM_IDX (t1
) == TEMPLATE_PARM_IDX (t2
)
2826 && TEMPLATE_PARM_LEVEL (t1
) == TEMPLATE_PARM_LEVEL (t2
)
2827 && (TEMPLATE_PARM_PARAMETER_PACK (t1
)
2828 == TEMPLATE_PARM_PARAMETER_PACK (t2
))
2829 && same_type_p (TREE_TYPE (TEMPLATE_PARM_DECL (t1
)),
2830 TREE_TYPE (TEMPLATE_PARM_DECL (t2
))));
2832 case TEMPLATE_ID_EXPR
:
2833 return (cp_tree_equal (TREE_OPERAND (t1
, 0), TREE_OPERAND (t2
, 0))
2834 && cp_tree_equal (TREE_OPERAND (t1
, 1), TREE_OPERAND (t2
, 1)));
2839 if (TREE_VEC_LENGTH (t1
) != TREE_VEC_LENGTH (t2
))
2841 for (ix
= TREE_VEC_LENGTH (t1
); ix
--;)
2842 if (!cp_tree_equal (TREE_VEC_ELT (t1
, ix
),
2843 TREE_VEC_ELT (t2
, ix
)))
2851 tree o1
= TREE_OPERAND (t1
, 0);
2852 tree o2
= TREE_OPERAND (t2
, 0);
2854 if (code1
== SIZEOF_EXPR
)
2856 if (SIZEOF_EXPR_TYPE_P (t1
))
2857 o1
= TREE_TYPE (o1
);
2858 if (SIZEOF_EXPR_TYPE_P (t2
))
2859 o2
= TREE_TYPE (o2
);
2861 if (TREE_CODE (o1
) != TREE_CODE (o2
))
2864 return same_type_p (o1
, o2
);
2866 return cp_tree_equal (o1
, o2
);
2871 tree t1_op1
, t2_op1
;
2873 if (!cp_tree_equal (TREE_OPERAND (t1
, 0), TREE_OPERAND (t2
, 0)))
2876 t1_op1
= TREE_OPERAND (t1
, 1);
2877 t2_op1
= TREE_OPERAND (t2
, 1);
2878 if (TREE_CODE (t1_op1
) != TREE_CODE (t2_op1
))
2881 return cp_tree_equal (TREE_OPERAND (t1
, 2), TREE_OPERAND (t2
, 2));
2885 /* Two pointer-to-members are the same if they point to the same
2886 field or function in the same class. */
2887 if (PTRMEM_CST_MEMBER (t1
) != PTRMEM_CST_MEMBER (t2
))
2890 return same_type_p (PTRMEM_CST_CLASS (t1
), PTRMEM_CST_CLASS (t2
));
2893 if (OVL_FUNCTION (t1
) != OVL_FUNCTION (t2
))
2895 return cp_tree_equal (OVL_CHAIN (t1
), OVL_CHAIN (t2
));
2898 if (TRAIT_EXPR_KIND (t1
) != TRAIT_EXPR_KIND (t2
))
2900 return same_type_p (TRAIT_EXPR_TYPE1 (t1
), TRAIT_EXPR_TYPE1 (t2
))
2901 && cp_tree_equal (TRAIT_EXPR_TYPE2 (t1
), TRAIT_EXPR_TYPE2 (t2
));
2904 case STATIC_CAST_EXPR
:
2905 case REINTERPRET_CAST_EXPR
:
2906 case CONST_CAST_EXPR
:
2907 case DYNAMIC_CAST_EXPR
:
2908 case IMPLICIT_CONV_EXPR
:
2910 if (!same_type_p (TREE_TYPE (t1
), TREE_TYPE (t2
)))
2912 /* Now compare operands as usual. */
2915 case DEFERRED_NOEXCEPT
:
2916 return (cp_tree_equal (DEFERRED_NOEXCEPT_PATTERN (t1
),
2917 DEFERRED_NOEXCEPT_PATTERN (t2
))
2918 && comp_template_args (DEFERRED_NOEXCEPT_ARGS (t1
),
2919 DEFERRED_NOEXCEPT_ARGS (t2
)));
2926 switch (TREE_CODE_CLASS (code1
))
2930 case tcc_comparison
:
2931 case tcc_expression
:
2938 n
= cp_tree_operand_length (t1
);
2939 if (TREE_CODE_CLASS (code1
) == tcc_vl_exp
2940 && n
!= TREE_OPERAND_LENGTH (t2
))
2943 for (i
= 0; i
< n
; ++i
)
2944 if (!cp_tree_equal (TREE_OPERAND (t1
, i
), TREE_OPERAND (t2
, i
)))
2951 return same_type_p (t1
, t2
);
2955 /* We can get here with --disable-checking. */
2959 /* The type of ARG when used as an lvalue. */
2962 lvalue_type (tree arg
)
2964 tree type
= TREE_TYPE (arg
);
2968 /* The type of ARG for printing error messages; denote lvalues with
2972 error_type (tree arg
)
2974 tree type
= TREE_TYPE (arg
);
2976 if (TREE_CODE (type
) == ARRAY_TYPE
)
2978 else if (TREE_CODE (type
) == ERROR_MARK
)
2980 else if (real_lvalue_p (arg
))
2981 type
= build_reference_type (lvalue_type (arg
));
2982 else if (MAYBE_CLASS_TYPE_P (type
))
2983 type
= lvalue_type (arg
);
2988 /* Does FUNCTION use a variable-length argument list? */
2991 varargs_function_p (const_tree function
)
2993 return stdarg_p (TREE_TYPE (function
));
2996 /* Returns 1 if decl is a member of a class. */
2999 member_p (const_tree decl
)
3001 const_tree
const ctx
= DECL_CONTEXT (decl
);
3002 return (ctx
&& TYPE_P (ctx
));
3005 /* Create a placeholder for member access where we don't actually have an
3006 object that the access is against. */
3009 build_dummy_object (tree type
)
3011 tree decl
= build1 (CONVERT_EXPR
, build_pointer_type (type
), void_node
);
3012 return cp_build_indirect_ref (decl
, RO_NULL
, tf_warning_or_error
);
3015 /* We've gotten a reference to a member of TYPE. Return *this if appropriate,
3016 or a dummy object otherwise. If BINFOP is non-0, it is filled with the
3017 binfo path from current_class_type to TYPE, or 0. */
3020 maybe_dummy_object (tree type
, tree
* binfop
)
3024 tree current
= current_nonlambda_class_type ();
3027 && (binfo
= lookup_base (current
, type
, ba_any
, NULL
,
3028 tf_warning_or_error
)))
3032 /* Reference from a nested class member function. */
3034 binfo
= TYPE_BINFO (type
);
3040 if (current_class_ref
3041 /* current_class_ref might not correspond to current_class_type if
3042 we're in tsubst_default_argument or a lambda-declarator; in either
3043 case, we want to use current_class_ref if it matches CONTEXT. */
3044 && (same_type_ignoring_top_level_qualifiers_p
3045 (TREE_TYPE (current_class_ref
), context
)))
3046 decl
= current_class_ref
;
3048 decl
= build_dummy_object (context
);
3053 /* Returns 1 if OB is a placeholder object, or a pointer to one. */
3056 is_dummy_object (const_tree ob
)
3058 if (INDIRECT_REF_P (ob
))
3059 ob
= TREE_OPERAND (ob
, 0);
3060 return (TREE_CODE (ob
) == CONVERT_EXPR
3061 && TREE_OPERAND (ob
, 0) == void_node
);
3064 /* Returns 1 iff type T is something we want to treat as a scalar type for
3065 the purpose of deciding whether it is trivial/POD/standard-layout. */
3068 scalarish_type_p (const_tree t
)
3070 if (t
== error_mark_node
)
3073 return (SCALAR_TYPE_P (t
)
3074 || TREE_CODE (t
) == VECTOR_TYPE
);
3077 /* Returns true iff T requires non-trivial default initialization. */
3080 type_has_nontrivial_default_init (const_tree t
)
3082 t
= strip_array_types (CONST_CAST_TREE (t
));
3084 if (CLASS_TYPE_P (t
))
3085 return TYPE_HAS_COMPLEX_DFLT (t
);
3090 /* Returns true iff copying an object of type T (including via move
3091 constructor) is non-trivial. That is, T has no non-trivial copy
3092 constructors and no non-trivial move constructors. */
3095 type_has_nontrivial_copy_init (const_tree t
)
3097 t
= strip_array_types (CONST_CAST_TREE (t
));
3099 if (CLASS_TYPE_P (t
))
3101 gcc_assert (COMPLETE_TYPE_P (t
));
3102 return ((TYPE_HAS_COPY_CTOR (t
)
3103 && TYPE_HAS_COMPLEX_COPY_CTOR (t
))
3104 || TYPE_HAS_COMPLEX_MOVE_CTOR (t
));
3110 /* Returns 1 iff type T is a trivially copyable type, as defined in
3111 [basic.types] and [class]. */
3114 trivially_copyable_p (const_tree t
)
3116 t
= strip_array_types (CONST_CAST_TREE (t
));
3118 if (CLASS_TYPE_P (t
))
3119 return ((!TYPE_HAS_COPY_CTOR (t
)
3120 || !TYPE_HAS_COMPLEX_COPY_CTOR (t
))
3121 && !TYPE_HAS_COMPLEX_MOVE_CTOR (t
)
3122 && (!TYPE_HAS_COPY_ASSIGN (t
)
3123 || !TYPE_HAS_COMPLEX_COPY_ASSIGN (t
))
3124 && !TYPE_HAS_COMPLEX_MOVE_ASSIGN (t
)
3125 && TYPE_HAS_TRIVIAL_DESTRUCTOR (t
));
3127 return scalarish_type_p (t
);
3130 /* Returns 1 iff type T is a trivial type, as defined in [basic.types] and
3134 trivial_type_p (const_tree t
)
3136 t
= strip_array_types (CONST_CAST_TREE (t
));
3138 if (CLASS_TYPE_P (t
))
3139 return (TYPE_HAS_TRIVIAL_DFLT (t
)
3140 && trivially_copyable_p (t
));
3142 return scalarish_type_p (t
);
3145 /* Returns 1 iff type T is a POD type, as defined in [basic.types]. */
3148 pod_type_p (const_tree t
)
3150 /* This CONST_CAST is okay because strip_array_types returns its
3151 argument unmodified and we assign it to a const_tree. */
3152 t
= strip_array_types (CONST_CAST_TREE(t
));
3154 if (!CLASS_TYPE_P (t
))
3155 return scalarish_type_p (t
);
3156 else if (cxx_dialect
> cxx98
)
3157 /* [class]/10: A POD struct is a class that is both a trivial class and a
3158 standard-layout class, and has no non-static data members of type
3159 non-POD struct, non-POD union (or array of such types).
3161 We don't need to check individual members because if a member is
3162 non-std-layout or non-trivial, the class will be too. */
3163 return (std_layout_type_p (t
) && trivial_type_p (t
));
3165 /* The C++98 definition of POD is different. */
3166 return !CLASSTYPE_NON_LAYOUT_POD_P (t
);
3169 /* Returns true iff T is POD for the purpose of layout, as defined in the
3173 layout_pod_type_p (const_tree t
)
3175 t
= strip_array_types (CONST_CAST_TREE (t
));
3177 if (CLASS_TYPE_P (t
))
3178 return !CLASSTYPE_NON_LAYOUT_POD_P (t
);
3180 return scalarish_type_p (t
);
3183 /* Returns true iff T is a standard-layout type, as defined in
3187 std_layout_type_p (const_tree t
)
3189 t
= strip_array_types (CONST_CAST_TREE (t
));
3191 if (CLASS_TYPE_P (t
))
3192 return !CLASSTYPE_NON_STD_LAYOUT (t
);
3194 return scalarish_type_p (t
);
3197 /* Nonzero iff type T is a class template implicit specialization. */
3200 class_tmpl_impl_spec_p (const_tree t
)
3202 return CLASS_TYPE_P (t
) && CLASSTYPE_TEMPLATE_INSTANTIATION (t
);
3205 /* Returns 1 iff zero initialization of type T means actually storing
3209 zero_init_p (const_tree t
)
3211 /* This CONST_CAST is okay because strip_array_types returns its
3212 argument unmodified and we assign it to a const_tree. */
3213 t
= strip_array_types (CONST_CAST_TREE(t
));
3215 if (t
== error_mark_node
)
3218 /* NULL pointers to data members are initialized with -1. */
3219 if (TYPE_PTRDATAMEM_P (t
))
3222 /* Classes that contain types that can't be zero-initialized, cannot
3223 be zero-initialized themselves. */
3224 if (CLASS_TYPE_P (t
) && CLASSTYPE_NON_ZERO_INIT_P (t
))
3230 /* Table of valid C++ attributes. */
3231 const struct attribute_spec cxx_attribute_table
[] =
3233 /* { name, min_len, max_len, decl_req, type_req, fn_type_req, handler,
3234 affects_type_identity } */
3235 { "java_interface", 0, 0, false, false, false,
3236 handle_java_interface_attribute
, false },
3237 { "com_interface", 0, 0, false, false, false,
3238 handle_com_interface_attribute
, false },
3239 { "init_priority", 1, 1, true, false, false,
3240 handle_init_priority_attribute
, false },
3241 { "abi_tag", 1, -1, false, false, false,
3242 handle_abi_tag_attribute
, true },
3243 { NULL
, 0, 0, false, false, false, NULL
, false }
3246 /* Handle a "java_interface" attribute; arguments as in
3247 struct attribute_spec.handler. */
3249 handle_java_interface_attribute (tree
* node
,
3256 || !CLASS_TYPE_P (*node
)
3257 || !TYPE_FOR_JAVA (*node
))
3259 error ("%qE attribute can only be applied to Java class definitions",
3261 *no_add_attrs
= true;
3264 if (!(flags
& (int) ATTR_FLAG_TYPE_IN_PLACE
))
3265 *node
= build_variant_type_copy (*node
);
3266 TYPE_JAVA_INTERFACE (*node
) = 1;
3271 /* Handle a "com_interface" attribute; arguments as in
3272 struct attribute_spec.handler. */
3274 handle_com_interface_attribute (tree
* node
,
3282 *no_add_attrs
= true;
3285 || !CLASS_TYPE_P (*node
)
3286 || *node
!= TYPE_MAIN_VARIANT (*node
))
3288 warning (OPT_Wattributes
, "%qE attribute can only be applied "
3289 "to class definitions", name
);
3294 warning (0, "%qE is obsolete; g++ vtables are now COM-compatible by default",
3300 /* Handle an "init_priority" attribute; arguments as in
3301 struct attribute_spec.handler. */
3303 handle_init_priority_attribute (tree
* node
,
3309 tree initp_expr
= TREE_VALUE (args
);
3311 tree type
= TREE_TYPE (decl
);
3314 STRIP_NOPS (initp_expr
);
3315 initp_expr
= default_conversion (initp_expr
);
3317 if (!initp_expr
|| TREE_CODE (initp_expr
) != INTEGER_CST
)
3319 error ("requested init_priority is not an integer constant");
3320 *no_add_attrs
= true;
3324 pri
= TREE_INT_CST_LOW (initp_expr
);
3326 type
= strip_array_types (type
);
3328 if (decl
== NULL_TREE
3330 || !TREE_STATIC (decl
)
3331 || DECL_EXTERNAL (decl
)
3332 || (TREE_CODE (type
) != RECORD_TYPE
3333 && TREE_CODE (type
) != UNION_TYPE
)
3334 /* Static objects in functions are initialized the
3335 first time control passes through that
3336 function. This is not precise enough to pin down an
3337 init_priority value, so don't allow it. */
3338 || current_function_decl
)
3340 error ("can only use %qE attribute on file-scope definitions "
3341 "of objects of class type", name
);
3342 *no_add_attrs
= true;
3346 if (pri
> MAX_INIT_PRIORITY
|| pri
<= 0)
3348 error ("requested init_priority is out of range");
3349 *no_add_attrs
= true;
3353 /* Check for init_priorities that are reserved for
3354 language and runtime support implementations.*/
3355 if (pri
<= MAX_RESERVED_INIT_PRIORITY
)
3358 (0, "requested init_priority is reserved for internal use");
3361 if (SUPPORTS_INIT_PRIORITY
)
3363 SET_DECL_INIT_PRIORITY (decl
, pri
);
3364 DECL_HAS_INIT_PRIORITY_P (decl
) = 1;
3369 error ("%qE attribute is not supported on this platform", name
);
3370 *no_add_attrs
= true;
3375 /* DECL is being redeclared; the old declaration had the abi tags in OLD,
3376 and the new one has the tags in NEW_. Give an error if there are tags
3377 in NEW_ that weren't in OLD. */
3380 check_abi_tag_redeclaration (const_tree decl
, const_tree old
, const_tree new_
)
3382 if (old
&& TREE_CODE (TREE_VALUE (old
)) == TREE_LIST
)
3383 old
= TREE_VALUE (old
);
3384 if (new_
&& TREE_CODE (TREE_VALUE (new_
)) == TREE_LIST
)
3385 new_
= TREE_VALUE (new_
);
3387 for (const_tree t
= new_
; t
; t
= TREE_CHAIN (t
))
3389 tree str
= TREE_VALUE (t
);
3390 for (const_tree in
= old
; in
; in
= TREE_CHAIN (in
))
3392 tree ostr
= TREE_VALUE (in
);
3393 if (cp_tree_equal (str
, ostr
))
3396 error ("redeclaration of %qD adds abi tag %E", decl
, str
);
3402 inform (DECL_SOURCE_LOCATION (decl
), "previous declaration here");
3408 /* Handle an "abi_tag" attribute; arguments as in
3409 struct attribute_spec.handler. */
3412 handle_abi_tag_attribute (tree
* node
, tree name
, tree args
,
3413 int flags
, bool* no_add_attrs
)
3417 if (!OVERLOAD_TYPE_P (*node
))
3419 error ("%qE attribute applied to non-class, non-enum type %qT",
3423 else if (!(flags
& (int)ATTR_FLAG_TYPE_IN_PLACE
))
3425 error ("%qE attribute applied to %qT after its definition",
3429 else if (CLASSTYPE_TEMPLATE_INSTANTIATION (*node
))
3431 warning (OPT_Wattributes
, "ignoring %qE attribute applied to "
3432 "template instantiation %qT", name
, *node
);
3435 else if (CLASSTYPE_TEMPLATE_SPECIALIZATION (*node
))
3437 warning (OPT_Wattributes
, "ignoring %qE attribute applied to "
3438 "template specialization %qT", name
, *node
);
3442 tree attributes
= TYPE_ATTRIBUTES (*node
);
3443 tree decl
= TYPE_NAME (*node
);
3445 /* Make sure all declarations have the same abi tags. */
3446 if (DECL_SOURCE_LOCATION (decl
) != input_location
)
3448 if (!check_abi_tag_redeclaration (decl
,
3449 lookup_attribute ("abi_tag",
3457 if (TREE_CODE (*node
) != FUNCTION_DECL
)
3459 error ("%qE attribute applied to non-function %qD", name
, *node
);
3462 else if (DECL_LANGUAGE (*node
) == lang_c
)
3464 error ("%qE attribute applied to extern \"C\" function %qD",
3473 *no_add_attrs
= true;
3477 /* Return a new PTRMEM_CST of the indicated TYPE. The MEMBER is the
3478 thing pointed to by the constant. */
3481 make_ptrmem_cst (tree type
, tree member
)
3483 tree ptrmem_cst
= make_node (PTRMEM_CST
);
3484 TREE_TYPE (ptrmem_cst
) = type
;
3485 PTRMEM_CST_MEMBER (ptrmem_cst
) = member
;
3489 /* Build a variant of TYPE that has the indicated ATTRIBUTES. May
3490 return an existing type if an appropriate type already exists. */
3493 cp_build_type_attribute_variant (tree type
, tree attributes
)
3497 new_type
= build_type_attribute_variant (type
, attributes
);
3498 if (TREE_CODE (new_type
) == FUNCTION_TYPE
3499 || TREE_CODE (new_type
) == METHOD_TYPE
)
3501 new_type
= build_exception_variant (new_type
,
3502 TYPE_RAISES_EXCEPTIONS (type
));
3503 new_type
= build_ref_qualified_type (new_type
,
3504 type_memfn_rqual (type
));
3507 /* Making a new main variant of a class type is broken. */
3508 gcc_assert (!CLASS_TYPE_P (type
) || new_type
== type
);
3513 /* Return TRUE if TYPE1 and TYPE2 are identical for type hashing purposes.
3514 Called only after doing all language independent checks. Only
3515 to check TYPE_RAISES_EXCEPTIONS for FUNCTION_TYPE, the rest is already
3516 compared in type_hash_eq. */
3519 cxx_type_hash_eq (const_tree typea
, const_tree typeb
)
3521 gcc_assert (TREE_CODE (typea
) == FUNCTION_TYPE
3522 || TREE_CODE (typea
) == METHOD_TYPE
);
3524 return comp_except_specs (TYPE_RAISES_EXCEPTIONS (typea
),
3525 TYPE_RAISES_EXCEPTIONS (typeb
), ce_exact
);
3528 /* Apply FUNC to all language-specific sub-trees of TP in a pre-order
3529 traversal. Called from walk_tree. */
3532 cp_walk_subtrees (tree
*tp
, int *walk_subtrees_p
, walk_tree_fn func
,
3533 void *data
, hash_set
<tree
> *pset
)
3535 enum tree_code code
= TREE_CODE (*tp
);
3538 #define WALK_SUBTREE(NODE) \
3541 result = cp_walk_tree (&(NODE), func, data, pset); \
3542 if (result) goto out; \
3546 /* Not one of the easy cases. We must explicitly go through the
3552 case TEMPLATE_TEMPLATE_PARM
:
3553 case BOUND_TEMPLATE_TEMPLATE_PARM
:
3554 case UNBOUND_CLASS_TEMPLATE
:
3555 case TEMPLATE_PARM_INDEX
:
3556 case TEMPLATE_TYPE_PARM
:
3559 case UNDERLYING_TYPE
:
3560 /* None of these have subtrees other than those already walked
3562 *walk_subtrees_p
= 0;
3566 WALK_SUBTREE (BASELINK_FUNCTIONS (*tp
));
3567 *walk_subtrees_p
= 0;
3571 WALK_SUBTREE (TREE_TYPE (*tp
));
3572 *walk_subtrees_p
= 0;
3576 WALK_SUBTREE (TREE_PURPOSE (*tp
));
3580 WALK_SUBTREE (OVL_FUNCTION (*tp
));
3581 WALK_SUBTREE (OVL_CHAIN (*tp
));
3582 *walk_subtrees_p
= 0;
3586 WALK_SUBTREE (DECL_NAME (*tp
));
3587 WALK_SUBTREE (USING_DECL_SCOPE (*tp
));
3588 WALK_SUBTREE (USING_DECL_DECLS (*tp
));
3589 *walk_subtrees_p
= 0;
3593 if (TYPE_PTRMEMFUNC_P (*tp
))
3594 WALK_SUBTREE (TYPE_PTRMEMFUNC_FN_TYPE (*tp
));
3597 case TYPE_ARGUMENT_PACK
:
3598 case NONTYPE_ARGUMENT_PACK
:
3600 tree args
= ARGUMENT_PACK_ARGS (*tp
);
3601 int i
, len
= TREE_VEC_LENGTH (args
);
3602 for (i
= 0; i
< len
; i
++)
3603 WALK_SUBTREE (TREE_VEC_ELT (args
, i
));
3607 case TYPE_PACK_EXPANSION
:
3608 WALK_SUBTREE (TREE_TYPE (*tp
));
3609 WALK_SUBTREE (PACK_EXPANSION_EXTRA_ARGS (*tp
));
3610 *walk_subtrees_p
= 0;
3613 case EXPR_PACK_EXPANSION
:
3614 WALK_SUBTREE (TREE_OPERAND (*tp
, 0));
3615 WALK_SUBTREE (PACK_EXPANSION_EXTRA_ARGS (*tp
));
3616 *walk_subtrees_p
= 0;
3620 case REINTERPRET_CAST_EXPR
:
3621 case STATIC_CAST_EXPR
:
3622 case CONST_CAST_EXPR
:
3623 case DYNAMIC_CAST_EXPR
:
3624 case IMPLICIT_CONV_EXPR
:
3625 if (TREE_TYPE (*tp
))
3626 WALK_SUBTREE (TREE_TYPE (*tp
));
3630 for (i
= 0; i
< TREE_CODE_LENGTH (TREE_CODE (*tp
)); ++i
)
3631 WALK_SUBTREE (TREE_OPERAND (*tp
, i
));
3633 *walk_subtrees_p
= 0;
3637 WALK_SUBTREE (TRAIT_EXPR_TYPE1 (*tp
));
3638 WALK_SUBTREE (TRAIT_EXPR_TYPE2 (*tp
));
3639 *walk_subtrees_p
= 0;
3643 WALK_SUBTREE (DECLTYPE_TYPE_EXPR (*tp
));
3644 *walk_subtrees_p
= 0;
3652 /* We didn't find what we were looking for. */
3659 /* Like save_expr, but for C++. */
3662 cp_save_expr (tree expr
)
3664 /* There is no reason to create a SAVE_EXPR within a template; if
3665 needed, we can create the SAVE_EXPR when instantiating the
3666 template. Furthermore, the middle-end cannot handle C++-specific
3668 if (processing_template_decl
)
3670 return save_expr (expr
);
3673 /* Initialize tree.c. */
3678 list_hash_table
= hash_table
<list_hasher
>::create_ggc (61);
3681 /* Returns the kind of special function that DECL (a FUNCTION_DECL)
3682 is. Note that sfk_none is zero, so this function can be used as a
3683 predicate to test whether or not DECL is a special function. */
3685 special_function_kind
3686 special_function_p (const_tree decl
)
3688 /* Rather than doing all this stuff with magic names, we should
3689 probably have a field of type `special_function_kind' in
3690 DECL_LANG_SPECIFIC. */
3691 if (DECL_INHERITED_CTOR_BASE (decl
))
3692 return sfk_inheriting_constructor
;
3693 if (DECL_COPY_CONSTRUCTOR_P (decl
))
3694 return sfk_copy_constructor
;
3695 if (DECL_MOVE_CONSTRUCTOR_P (decl
))
3696 return sfk_move_constructor
;
3697 if (DECL_CONSTRUCTOR_P (decl
))
3698 return sfk_constructor
;
3699 if (DECL_OVERLOADED_OPERATOR_P (decl
) == NOP_EXPR
)
3701 if (copy_fn_p (decl
))
3702 return sfk_copy_assignment
;
3703 if (move_fn_p (decl
))
3704 return sfk_move_assignment
;
3706 if (DECL_MAYBE_IN_CHARGE_DESTRUCTOR_P (decl
))
3707 return sfk_destructor
;
3708 if (DECL_COMPLETE_DESTRUCTOR_P (decl
))
3709 return sfk_complete_destructor
;
3710 if (DECL_BASE_DESTRUCTOR_P (decl
))
3711 return sfk_base_destructor
;
3712 if (DECL_DELETING_DESTRUCTOR_P (decl
))
3713 return sfk_deleting_destructor
;
3714 if (DECL_CONV_FN_P (decl
))
3715 return sfk_conversion
;
3720 /* Returns nonzero if TYPE is a character type, including wchar_t. */
3723 char_type_p (tree type
)
3725 return (same_type_p (type
, char_type_node
)
3726 || same_type_p (type
, unsigned_char_type_node
)
3727 || same_type_p (type
, signed_char_type_node
)
3728 || same_type_p (type
, char16_type_node
)
3729 || same_type_p (type
, char32_type_node
)
3730 || same_type_p (type
, wchar_type_node
));
3733 /* Returns the kind of linkage associated with the indicated DECL. Th
3734 value returned is as specified by the language standard; it is
3735 independent of implementation details regarding template
3736 instantiation, etc. For example, it is possible that a declaration
3737 to which this function assigns external linkage would not show up
3738 as a global symbol when you run `nm' on the resulting object file. */
3741 decl_linkage (tree decl
)
3743 /* This function doesn't attempt to calculate the linkage from first
3744 principles as given in [basic.link]. Instead, it makes use of
3745 the fact that we have already set TREE_PUBLIC appropriately, and
3746 then handles a few special cases. Ideally, we would calculate
3747 linkage first, and then transform that into a concrete
3750 /* Things that don't have names have no linkage. */
3751 if (!DECL_NAME (decl
))
3754 /* Fields have no linkage. */
3755 if (TREE_CODE (decl
) == FIELD_DECL
)
3758 /* Things that are TREE_PUBLIC have external linkage. */
3759 if (TREE_PUBLIC (decl
))
3762 if (TREE_CODE (decl
) == NAMESPACE_DECL
)
3765 /* Linkage of a CONST_DECL depends on the linkage of the enumeration
3767 if (TREE_CODE (decl
) == CONST_DECL
)
3768 return decl_linkage (TYPE_NAME (DECL_CONTEXT (decl
)));
3770 /* Things in local scope do not have linkage, if they don't have
3772 if (decl_function_context (decl
))
3775 /* Members of the anonymous namespace also have TREE_PUBLIC unset, but
3776 are considered to have external linkage for language purposes, as do
3777 template instantiations on targets without weak symbols. DECLs really
3778 meant to have internal linkage have DECL_THIS_STATIC set. */
3779 if (TREE_CODE (decl
) == TYPE_DECL
)
3781 if (VAR_OR_FUNCTION_DECL_P (decl
))
3783 if (!DECL_THIS_STATIC (decl
))
3786 /* Static data members and static member functions from classes
3787 in anonymous namespace also don't have TREE_PUBLIC set. */
3788 if (DECL_CLASS_CONTEXT (decl
))
3792 /* Everything else has internal linkage. */
3796 /* Returns the storage duration of the object or reference associated with
3797 the indicated DECL, which should be a VAR_DECL or PARM_DECL. */
3800 decl_storage_duration (tree decl
)
3802 if (TREE_CODE (decl
) == PARM_DECL
)
3804 if (TREE_CODE (decl
) == FUNCTION_DECL
)
3806 gcc_assert (VAR_P (decl
));
3807 if (!TREE_STATIC (decl
)
3808 && !DECL_EXTERNAL (decl
))
3810 if (DECL_THREAD_LOCAL_P (decl
))
3815 /* EXP is an expression that we want to pre-evaluate. Returns (in
3816 *INITP) an expression that will perform the pre-evaluation. The
3817 value returned by this function is a side-effect free expression
3818 equivalent to the pre-evaluated expression. Callers must ensure
3819 that *INITP is evaluated before EXP. */
3822 stabilize_expr (tree exp
, tree
* initp
)
3826 if (!TREE_SIDE_EFFECTS (exp
))
3827 init_expr
= NULL_TREE
;
3828 else if (VOID_TYPE_P (TREE_TYPE (exp
)))
3833 /* There are no expressions with REFERENCE_TYPE, but there can be call
3834 arguments with such a type; just treat it as a pointer. */
3835 else if (TREE_CODE (TREE_TYPE (exp
)) == REFERENCE_TYPE
3836 || SCALAR_TYPE_P (TREE_TYPE (exp
))
3837 || !lvalue_or_rvalue_with_address_p (exp
))
3839 init_expr
= get_target_expr (exp
);
3840 exp
= TARGET_EXPR_SLOT (init_expr
);
3841 if (CLASS_TYPE_P (TREE_TYPE (exp
)))
3848 bool xval
= !real_lvalue_p (exp
);
3849 exp
= cp_build_addr_expr (exp
, tf_warning_or_error
);
3850 init_expr
= get_target_expr (exp
);
3851 exp
= TARGET_EXPR_SLOT (init_expr
);
3852 exp
= cp_build_indirect_ref (exp
, RO_NULL
, tf_warning_or_error
);
3858 gcc_assert (!TREE_SIDE_EFFECTS (exp
));
3862 /* Add NEW_EXPR, an expression whose value we don't care about, after the
3863 similar expression ORIG. */
3866 add_stmt_to_compound (tree orig
, tree new_expr
)
3868 if (!new_expr
|| !TREE_SIDE_EFFECTS (new_expr
))
3870 if (!orig
|| !TREE_SIDE_EFFECTS (orig
))
3872 return build2 (COMPOUND_EXPR
, void_type_node
, orig
, new_expr
);
3875 /* Like stabilize_expr, but for a call whose arguments we want to
3876 pre-evaluate. CALL is modified in place to use the pre-evaluated
3877 arguments, while, upon return, *INITP contains an expression to
3878 compute the arguments. */
3881 stabilize_call (tree call
, tree
*initp
)
3883 tree inits
= NULL_TREE
;
3885 int nargs
= call_expr_nargs (call
);
3887 if (call
== error_mark_node
|| processing_template_decl
)
3893 gcc_assert (TREE_CODE (call
) == CALL_EXPR
);
3895 for (i
= 0; i
< nargs
; i
++)
3898 CALL_EXPR_ARG (call
, i
) =
3899 stabilize_expr (CALL_EXPR_ARG (call
, i
), &init
);
3900 inits
= add_stmt_to_compound (inits
, init
);
3906 /* Like stabilize_expr, but for an AGGR_INIT_EXPR whose arguments we want
3907 to pre-evaluate. CALL is modified in place to use the pre-evaluated
3908 arguments, while, upon return, *INITP contains an expression to
3909 compute the arguments. */
3912 stabilize_aggr_init (tree call
, tree
*initp
)
3914 tree inits
= NULL_TREE
;
3916 int nargs
= aggr_init_expr_nargs (call
);
3918 if (call
== error_mark_node
)
3921 gcc_assert (TREE_CODE (call
) == AGGR_INIT_EXPR
);
3923 for (i
= 0; i
< nargs
; i
++)
3926 AGGR_INIT_EXPR_ARG (call
, i
) =
3927 stabilize_expr (AGGR_INIT_EXPR_ARG (call
, i
), &init
);
3928 inits
= add_stmt_to_compound (inits
, init
);
3934 /* Like stabilize_expr, but for an initialization.
3936 If the initialization is for an object of class type, this function
3937 takes care not to introduce additional temporaries.
3939 Returns TRUE iff the expression was successfully pre-evaluated,
3940 i.e., if INIT is now side-effect free, except for, possibly, a
3941 single call to a constructor. */
3944 stabilize_init (tree init
, tree
*initp
)
3950 if (t
== error_mark_node
|| processing_template_decl
)
3953 if (TREE_CODE (t
) == INIT_EXPR
)
3954 t
= TREE_OPERAND (t
, 1);
3955 if (TREE_CODE (t
) == TARGET_EXPR
)
3956 t
= TARGET_EXPR_INITIAL (t
);
3958 /* If the RHS can be stabilized without breaking copy elision, stabilize
3959 it. We specifically don't stabilize class prvalues here because that
3960 would mean an extra copy, but they might be stabilized below. */
3961 if (TREE_CODE (init
) == INIT_EXPR
3962 && TREE_CODE (t
) != CONSTRUCTOR
3963 && TREE_CODE (t
) != AGGR_INIT_EXPR
3964 && (SCALAR_TYPE_P (TREE_TYPE (t
))
3965 || lvalue_or_rvalue_with_address_p (t
)))
3967 TREE_OPERAND (init
, 1) = stabilize_expr (t
, initp
);
3971 if (TREE_CODE (t
) == COMPOUND_EXPR
3972 && TREE_CODE (init
) == INIT_EXPR
)
3974 tree last
= expr_last (t
);
3975 /* Handle stabilizing the EMPTY_CLASS_EXPR pattern. */
3976 if (!TREE_SIDE_EFFECTS (last
))
3979 TREE_OPERAND (init
, 1) = last
;
3984 if (TREE_CODE (t
) == CONSTRUCTOR
)
3986 /* Aggregate initialization: stabilize each of the field
3989 constructor_elt
*ce
;
3991 vec
<constructor_elt
, va_gc
> *v
= CONSTRUCTOR_ELTS (t
);
3992 for (i
= 0; vec_safe_iterate (v
, i
, &ce
); ++i
)
3994 tree type
= TREE_TYPE (ce
->value
);
3996 if (TREE_CODE (type
) == REFERENCE_TYPE
3997 || SCALAR_TYPE_P (type
))
3998 ce
->value
= stabilize_expr (ce
->value
, &subinit
);
3999 else if (!stabilize_init (ce
->value
, &subinit
))
4001 *initp
= add_stmt_to_compound (*initp
, subinit
);
4006 if (TREE_CODE (t
) == CALL_EXPR
)
4008 stabilize_call (t
, initp
);
4012 if (TREE_CODE (t
) == AGGR_INIT_EXPR
)
4014 stabilize_aggr_init (t
, initp
);
4018 /* The initialization is being performed via a bitwise copy -- and
4019 the item copied may have side effects. */
4020 return !TREE_SIDE_EFFECTS (init
);
4023 /* Like "fold", but should be used whenever we might be processing the
4024 body of a template. */
4027 fold_if_not_in_template (tree expr
)
4029 /* In the body of a template, there is never any need to call
4030 "fold". We will call fold later when actually instantiating the
4031 template. Integral constant expressions in templates will be
4032 evaluated via fold_non_dependent_expr, as necessary. */
4033 if (processing_template_decl
)
4036 /* Fold C++ front-end specific tree codes. */
4037 if (TREE_CODE (expr
) == UNARY_PLUS_EXPR
)
4038 return fold_convert (TREE_TYPE (expr
), TREE_OPERAND (expr
, 0));
4043 /* Returns true if a cast to TYPE may appear in an integral constant
4047 cast_valid_in_integral_constant_expression_p (tree type
)
4049 return (INTEGRAL_OR_ENUMERATION_TYPE_P (type
)
4050 || cxx_dialect
>= cxx11
4051 || dependent_type_p (type
)
4052 || type
== error_mark_node
);
4055 /* Return true if we need to fix linkage information of DECL. */
4058 cp_fix_function_decl_p (tree decl
)
4060 /* Skip if DECL is not externally visible. */
4061 if (!TREE_PUBLIC (decl
))
4064 /* We need to fix DECL if it a appears to be exported but with no
4065 function body. Thunks do not have CFGs and we may need to
4066 handle them specially later. */
4067 if (!gimple_has_body_p (decl
)
4068 && !DECL_THUNK_P (decl
)
4069 && !DECL_EXTERNAL (decl
))
4071 struct cgraph_node
*node
= cgraph_node::get (decl
);
4073 /* Don't fix same_body aliases. Although they don't have their own
4074 CFG, they share it with what they alias to. */
4075 if (!node
|| !node
->alias
4076 || !vec_safe_length (node
->ref_list
.references
))
4083 /* Clean the C++ specific parts of the tree T. */
4086 cp_free_lang_data (tree t
)
4088 if (TREE_CODE (t
) == METHOD_TYPE
4089 || TREE_CODE (t
) == FUNCTION_TYPE
)
4091 /* Default args are not interesting anymore. */
4092 tree argtypes
= TYPE_ARG_TYPES (t
);
4095 TREE_PURPOSE (argtypes
) = 0;
4096 argtypes
= TREE_CHAIN (argtypes
);
4099 else if (TREE_CODE (t
) == FUNCTION_DECL
4100 && cp_fix_function_decl_p (t
))
4102 /* If T is used in this translation unit at all, the definition
4103 must exist somewhere else since we have decided to not emit it
4104 in this TU. So make it an external reference. */
4105 DECL_EXTERNAL (t
) = 1;
4106 TREE_STATIC (t
) = 0;
4108 if (TREE_CODE (t
) == NAMESPACE_DECL
)
4110 /* The list of users of a namespace isn't useful for the middle-end
4111 or debug generators. */
4112 DECL_NAMESPACE_USERS (t
) = NULL_TREE
;
4113 /* Neither do we need the leftover chaining of namespaces
4114 from the binding level. */
4115 DECL_CHAIN (t
) = NULL_TREE
;
4119 /* Stub for c-common. Please keep in sync with c-decl.c.
4120 FIXME: If address space support is target specific, then this
4121 should be a C target hook. But currently this is not possible,
4122 because this function is called via REGISTER_TARGET_PRAGMAS. */
4124 c_register_addr_space (const char * /*word*/, addr_space_t
/*as*/)
4128 /* Return the number of operands in T that we care about for things like
4132 cp_tree_operand_length (const_tree t
)
4134 enum tree_code code
= TREE_CODE (t
);
4138 case PREINCREMENT_EXPR
:
4139 case PREDECREMENT_EXPR
:
4140 case POSTINCREMENT_EXPR
:
4141 case POSTDECREMENT_EXPR
:
4147 case EXPR_PACK_EXPANSION
:
4151 return TREE_OPERAND_LENGTH (t
);
4155 /* Implement -Wzero_as_null_pointer_constant. Return true if the
4156 conditions for the warning hold, false otherwise. */
4158 maybe_warn_zero_as_null_pointer_constant (tree expr
, location_t loc
)
4160 if (c_inhibit_evaluation_warnings
== 0
4161 && !NULLPTR_TYPE_P (TREE_TYPE (expr
)))
4163 warning_at (loc
, OPT_Wzero_as_null_pointer_constant
,
4164 "zero as null pointer constant");
4170 #if defined ENABLE_TREE_CHECKING && (GCC_VERSION >= 2007)
4171 /* Complain that some language-specific thing hanging off a tree
4172 node has been accessed improperly. */
4175 lang_check_failed (const char* file
, int line
, const char* function
)
4177 internal_error ("lang_* check: failed in %s, at %s:%d",
4178 function
, trim_filename (file
), line
);
4180 #endif /* ENABLE_TREE_CHECKING */
4182 #include "gt-cp-tree.h"