1 /* Language-dependent node constructors for parse phase of GNU compiler.
2 Copyright (C) 1987-2016 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 "gimple-expr.h"
28 #include "stor-layout.h"
29 #include "print-tree.h"
30 #include "tree-iterator.h"
31 #include "tree-inline.h"
37 static tree
bot_manip (tree
*, int *, void *);
38 static tree
bot_replace (tree
*, int *, void *);
39 static hashval_t
list_hash_pieces (tree
, tree
, tree
);
40 static tree
build_target_expr (tree
, tree
, tsubst_flags_t
);
41 static tree
count_trees_r (tree
*, int *, void *);
42 static tree
verify_stmt_tree_r (tree
*, int *, void *);
43 static tree
build_local_temp (tree
);
45 static tree
handle_java_interface_attribute (tree
*, tree
, tree
, int, bool *);
46 static tree
handle_init_priority_attribute (tree
*, tree
, tree
, int, bool *);
47 static tree
handle_abi_tag_attribute (tree
*, tree
, tree
, int, bool *);
49 /* If REF is an lvalue, returns the kind of lvalue that REF is.
50 Otherwise, returns clk_none. */
53 lvalue_kind (const_tree ref
)
55 cp_lvalue_kind op1_lvalue_kind
= clk_none
;
56 cp_lvalue_kind op2_lvalue_kind
= clk_none
;
58 /* Expressions of reference type are sometimes wrapped in
59 INDIRECT_REFs. INDIRECT_REFs are just internal compiler
60 representation, not part of the language, so we have to look
62 if (REFERENCE_REF_P (ref
))
63 return lvalue_kind (TREE_OPERAND (ref
, 0));
66 && TREE_CODE (TREE_TYPE (ref
)) == REFERENCE_TYPE
)
68 /* unnamed rvalue references are rvalues */
69 if (TYPE_REF_IS_RVALUE (TREE_TYPE (ref
))
70 && TREE_CODE (ref
) != PARM_DECL
72 && TREE_CODE (ref
) != COMPONENT_REF
73 /* Functions are always lvalues. */
74 && TREE_CODE (TREE_TYPE (TREE_TYPE (ref
))) != FUNCTION_TYPE
)
77 /* lvalue references and named rvalue references are lvalues. */
81 if (ref
== current_class_ptr
)
84 switch (TREE_CODE (ref
))
88 /* preincrements and predecrements are valid lvals, provided
89 what they refer to are valid lvals. */
90 case PREINCREMENT_EXPR
:
91 case PREDECREMENT_EXPR
:
93 case WITH_CLEANUP_EXPR
:
96 return lvalue_kind (TREE_OPERAND (ref
, 0));
100 if (TREE_CODE (ref
) == MEMBER_REF
)
101 op1_lvalue_kind
= clk_ordinary
;
103 op1_lvalue_kind
= lvalue_kind (TREE_OPERAND (ref
, 0));
104 if (TYPE_PTRMEMFUNC_P (TREE_TYPE (TREE_OPERAND (ref
, 1))))
105 op1_lvalue_kind
= clk_none
;
106 return op1_lvalue_kind
;
109 op1_lvalue_kind
= lvalue_kind (TREE_OPERAND (ref
, 0));
110 /* Look at the member designator. */
111 if (!op1_lvalue_kind
)
113 else if (is_overloaded_fn (TREE_OPERAND (ref
, 1)))
114 /* The "field" can be a FUNCTION_DECL or an OVERLOAD in some
115 situations. If we're seeing a COMPONENT_REF, it's a non-static
116 member, so it isn't an lvalue. */
117 op1_lvalue_kind
= clk_none
;
118 else if (TREE_CODE (TREE_OPERAND (ref
, 1)) != FIELD_DECL
)
119 /* This can be IDENTIFIER_NODE in a template. */;
120 else if (DECL_C_BIT_FIELD (TREE_OPERAND (ref
, 1)))
122 /* Clear the ordinary bit. If this object was a class
123 rvalue we want to preserve that information. */
124 op1_lvalue_kind
&= ~clk_ordinary
;
125 /* The lvalue is for a bitfield. */
126 op1_lvalue_kind
|= clk_bitfield
;
128 else if (DECL_PACKED (TREE_OPERAND (ref
, 1)))
129 op1_lvalue_kind
|= clk_packed
;
131 return op1_lvalue_kind
;
134 case COMPOUND_LITERAL_EXPR
:
138 /* CONST_DECL without TREE_STATIC are enumeration values and
139 thus not lvalues. With TREE_STATIC they are used by ObjC++
140 in objc_build_string_object and need to be considered as
142 if (! TREE_STATIC (ref
))
145 if (TREE_READONLY (ref
) && ! TREE_STATIC (ref
)
146 && DECL_LANG_SPECIFIC (ref
)
147 && DECL_IN_AGGR_P (ref
))
152 case ARRAY_NOTATION_REF
:
155 case PLACEHOLDER_EXPR
:
158 /* A scope ref in a template, left as SCOPE_REF to support later
161 gcc_assert (!type_dependent_expression_p (CONST_CAST_TREE (ref
)));
163 tree op
= TREE_OPERAND (ref
, 1);
164 if (TREE_CODE (op
) == FIELD_DECL
)
165 return (DECL_C_BIT_FIELD (op
) ? clk_bitfield
: clk_ordinary
);
167 return lvalue_kind (op
);
172 /* Disallow <? and >? as lvalues if either argument side-effects. */
173 if (TREE_SIDE_EFFECTS (TREE_OPERAND (ref
, 0))
174 || TREE_SIDE_EFFECTS (TREE_OPERAND (ref
, 1)))
176 op1_lvalue_kind
= lvalue_kind (TREE_OPERAND (ref
, 0));
177 op2_lvalue_kind
= lvalue_kind (TREE_OPERAND (ref
, 1));
181 op1_lvalue_kind
= lvalue_kind (TREE_OPERAND (ref
, 1)
182 ? TREE_OPERAND (ref
, 1)
183 : TREE_OPERAND (ref
, 0));
184 op2_lvalue_kind
= lvalue_kind (TREE_OPERAND (ref
, 2));
188 /* We expect to see unlowered MODOP_EXPRs only during
189 template processing. */
190 gcc_assert (processing_template_decl
);
198 return lvalue_kind (TREE_OPERAND (ref
, 1));
204 return (CLASS_TYPE_P (TREE_TYPE (ref
)) ? clk_class
: clk_none
);
207 /* We can see calls outside of TARGET_EXPR in templates. */
208 if (CLASS_TYPE_P (TREE_TYPE (ref
)))
213 /* All functions (except non-static-member functions) are
215 return (DECL_NONSTATIC_MEMBER_FUNCTION_P (ref
)
216 ? clk_none
: clk_ordinary
);
219 /* We now represent a reference to a single static member function
221 /* This CONST_CAST is okay because BASELINK_FUNCTIONS returns
222 its argument unmodified and we assign it to a const_tree. */
223 return lvalue_kind (BASELINK_FUNCTIONS (CONST_CAST_TREE (ref
)));
225 case NON_DEPENDENT_EXPR
:
226 return lvalue_kind (TREE_OPERAND (ref
, 0));
229 if (!TREE_TYPE (ref
))
231 if (CLASS_TYPE_P (TREE_TYPE (ref
)))
236 /* If one operand is not an lvalue at all, then this expression is
238 if (!op1_lvalue_kind
|| !op2_lvalue_kind
)
241 /* Otherwise, it's an lvalue, and it has all the odd properties
242 contributed by either operand. */
243 op1_lvalue_kind
= op1_lvalue_kind
| op2_lvalue_kind
;
244 /* It's not an ordinary lvalue if it involves any other kind. */
245 if ((op1_lvalue_kind
& ~clk_ordinary
) != clk_none
)
246 op1_lvalue_kind
&= ~clk_ordinary
;
247 /* It can't be both a pseudo-lvalue and a non-addressable lvalue.
248 A COND_EXPR of those should be wrapped in a TARGET_EXPR. */
249 if ((op1_lvalue_kind
& (clk_rvalueref
|clk_class
))
250 && (op1_lvalue_kind
& (clk_bitfield
|clk_packed
)))
251 op1_lvalue_kind
= clk_none
;
252 return op1_lvalue_kind
;
255 /* Returns the kind of lvalue that REF is, in the sense of
256 [basic.lval]. This function should really be named lvalue_p; it
257 computes the C++ definition of lvalue. */
260 real_lvalue_p (const_tree ref
)
262 cp_lvalue_kind kind
= lvalue_kind (ref
);
263 if (kind
& (clk_rvalueref
|clk_class
))
269 /* This differs from real_lvalue_p in that class rvalues are considered
273 lvalue_p (const_tree ref
)
275 return (lvalue_kind (ref
) != clk_none
);
278 /* This differs from real_lvalue_p in that rvalues formed by dereferencing
279 rvalue references are considered rvalues. */
282 lvalue_or_rvalue_with_address_p (const_tree ref
)
284 cp_lvalue_kind kind
= lvalue_kind (ref
);
285 if (kind
& clk_class
)
288 return (kind
!= clk_none
);
291 /* Returns true if REF is an xvalue, false otherwise. */
294 xvalue_p (const_tree ref
)
296 return (lvalue_kind (ref
) == clk_rvalueref
);
299 /* C++-specific version of stabilize_reference. */
302 cp_stabilize_reference (tree ref
)
304 switch (TREE_CODE (ref
))
306 /* We need to treat specially anything stabilize_reference doesn't
307 handle specifically. */
318 case ARRAY_RANGE_REF
:
322 cp_lvalue_kind kind
= lvalue_kind (ref
);
323 if ((kind
& ~clk_class
) != clk_none
)
325 tree type
= unlowered_expr_type (ref
);
326 bool rval
= !!(kind
& clk_rvalueref
);
327 type
= cp_build_reference_type (type
, rval
);
328 /* This inhibits warnings in, eg, cxx_mark_addressable
330 warning_sentinel
s (extra_warnings
);
331 ref
= build_static_cast (type
, ref
, tf_error
);
335 return stabilize_reference (ref
);
338 /* Test whether DECL is a builtin that may appear in a
339 constant-expression. */
342 builtin_valid_in_constant_expr_p (const_tree decl
)
344 if (!(TREE_CODE (decl
) == FUNCTION_DECL
&& DECL_BUILT_IN (decl
)))
345 /* Not a built-in. */
347 switch (DECL_FUNCTION_CODE (decl
))
349 case BUILT_IN_CONSTANT_P
:
350 case BUILT_IN_ATOMIC_ALWAYS_LOCK_FREE
:
351 /* These have constant results even if their operands are
359 /* Build a TARGET_EXPR, initializing the DECL with the VALUE. */
362 build_target_expr (tree decl
, tree value
, tsubst_flags_t complain
)
365 tree type
= TREE_TYPE (decl
);
367 gcc_checking_assert (VOID_TYPE_P (TREE_TYPE (value
))
368 || TREE_TYPE (decl
) == TREE_TYPE (value
)
369 /* On ARM ctors return 'this'. */
370 || (TYPE_PTR_P (TREE_TYPE (value
))
371 && TREE_CODE (value
) == CALL_EXPR
)
372 || useless_type_conversion_p (TREE_TYPE (decl
),
375 t
= cxx_maybe_build_cleanup (decl
, complain
);
376 if (t
== error_mark_node
)
377 return error_mark_node
;
378 t
= build4 (TARGET_EXPR
, type
, decl
, value
, t
, NULL_TREE
);
379 if (EXPR_HAS_LOCATION (value
))
380 SET_EXPR_LOCATION (t
, EXPR_LOCATION (value
));
381 /* We always set TREE_SIDE_EFFECTS so that expand_expr does not
382 ignore the TARGET_EXPR. If there really turn out to be no
383 side-effects, then the optimizer should be able to get rid of
384 whatever code is generated anyhow. */
385 TREE_SIDE_EFFECTS (t
) = 1;
390 /* Return an undeclared local temporary of type TYPE for use in building a
394 build_local_temp (tree type
)
396 tree slot
= build_decl (input_location
,
397 VAR_DECL
, NULL_TREE
, type
);
398 DECL_ARTIFICIAL (slot
) = 1;
399 DECL_IGNORED_P (slot
) = 1;
400 DECL_CONTEXT (slot
) = current_function_decl
;
401 layout_decl (slot
, 0);
405 /* Set various status flags when building an AGGR_INIT_EXPR object T. */
408 process_aggr_init_operands (tree t
)
412 side_effects
= TREE_SIDE_EFFECTS (t
);
416 n
= TREE_OPERAND_LENGTH (t
);
417 for (i
= 1; i
< n
; i
++)
419 tree op
= TREE_OPERAND (t
, i
);
420 if (op
&& TREE_SIDE_EFFECTS (op
))
427 TREE_SIDE_EFFECTS (t
) = side_effects
;
430 /* Build an AGGR_INIT_EXPR of class tcc_vl_exp with the indicated RETURN_TYPE,
431 FN, and SLOT. NARGS is the number of call arguments which are specified
432 as a tree array ARGS. */
435 build_aggr_init_array (tree return_type
, tree fn
, tree slot
, int nargs
,
441 t
= build_vl_exp (AGGR_INIT_EXPR
, nargs
+ 3);
442 TREE_TYPE (t
) = return_type
;
443 AGGR_INIT_EXPR_FN (t
) = fn
;
444 AGGR_INIT_EXPR_SLOT (t
) = slot
;
445 for (i
= 0; i
< nargs
; i
++)
446 AGGR_INIT_EXPR_ARG (t
, i
) = args
[i
];
447 process_aggr_init_operands (t
);
451 /* INIT is a CALL_EXPR or AGGR_INIT_EXPR which needs info about its
452 target. TYPE is the type to be initialized.
454 Build an AGGR_INIT_EXPR to represent the initialization. This function
455 differs from build_cplus_new in that an AGGR_INIT_EXPR can only be used
456 to initialize another object, whereas a TARGET_EXPR can either
457 initialize another object or create its own temporary object, and as a
458 result building up a TARGET_EXPR requires that the type's destructor be
462 build_aggr_init_expr (tree type
, tree init
)
469 /* Don't build AGGR_INIT_EXPR in a template. */
470 if (processing_template_decl
)
473 fn
= cp_get_callee (init
);
475 return convert (type
, init
);
477 is_ctor
= (TREE_CODE (fn
) == ADDR_EXPR
478 && TREE_CODE (TREE_OPERAND (fn
, 0)) == FUNCTION_DECL
479 && DECL_CONSTRUCTOR_P (TREE_OPERAND (fn
, 0)));
481 /* We split the CALL_EXPR into its function and its arguments here.
482 Then, in expand_expr, we put them back together. The reason for
483 this is that this expression might be a default argument
484 expression. In that case, we need a new temporary every time the
485 expression is used. That's what break_out_target_exprs does; it
486 replaces every AGGR_INIT_EXPR with a copy that uses a fresh
487 temporary slot. Then, expand_expr builds up a call-expression
488 using the new slot. */
490 /* If we don't need to use a constructor to create an object of this
491 type, don't mess with AGGR_INIT_EXPR. */
492 if (is_ctor
|| TREE_ADDRESSABLE (type
))
494 slot
= build_local_temp (type
);
496 if (TREE_CODE (init
) == CALL_EXPR
)
498 rval
= build_aggr_init_array (void_type_node
, fn
, slot
,
499 call_expr_nargs (init
),
500 CALL_EXPR_ARGP (init
));
501 AGGR_INIT_FROM_THUNK_P (rval
)
502 = CALL_FROM_THUNK_P (init
);
506 rval
= build_aggr_init_array (void_type_node
, fn
, slot
,
507 aggr_init_expr_nargs (init
),
508 AGGR_INIT_EXPR_ARGP (init
));
509 AGGR_INIT_FROM_THUNK_P (rval
)
510 = AGGR_INIT_FROM_THUNK_P (init
);
512 TREE_SIDE_EFFECTS (rval
) = 1;
513 AGGR_INIT_VIA_CTOR_P (rval
) = is_ctor
;
514 TREE_NOTHROW (rval
) = TREE_NOTHROW (init
);
515 CALL_EXPR_LIST_INIT_P (rval
) = CALL_EXPR_LIST_INIT_P (init
);
523 /* INIT is a CALL_EXPR or AGGR_INIT_EXPR which needs info about its
524 target. TYPE is the type that this initialization should appear to
527 Build an encapsulation of the initialization to perform
528 and return it so that it can be processed by language-independent
529 and language-specific expression expanders. */
532 build_cplus_new (tree type
, tree init
, tsubst_flags_t complain
)
534 tree rval
= build_aggr_init_expr (type
, init
);
537 if (!complete_type_or_maybe_complain (type
, init
, complain
))
538 return error_mark_node
;
540 /* Make sure that we're not trying to create an instance of an
542 if (abstract_virtuals_error_sfinae (NULL_TREE
, type
, complain
))
543 return error_mark_node
;
545 if (TREE_CODE (rval
) == AGGR_INIT_EXPR
)
546 slot
= AGGR_INIT_EXPR_SLOT (rval
);
547 else if (TREE_CODE (rval
) == CALL_EXPR
548 || TREE_CODE (rval
) == CONSTRUCTOR
)
549 slot
= build_local_temp (type
);
553 rval
= build_target_expr (slot
, rval
, complain
);
555 if (rval
!= error_mark_node
)
556 TARGET_EXPR_IMPLICIT_P (rval
) = 1;
561 /* Subroutine of build_vec_init_expr: Build up a single element
562 intialization as a proxy for the full array initialization to get things
563 marked as used and any appropriate diagnostics.
565 Since we're deferring building the actual constructor calls until
566 gimplification time, we need to build one now and throw it away so
567 that the relevant constructor gets mark_used before cgraph decides
568 what functions are needed. Here we assume that init is either
569 NULL_TREE, void_type_node (indicating value-initialization), or
570 another array to copy. */
573 build_vec_init_elt (tree type
, tree init
, tsubst_flags_t complain
)
575 tree inner_type
= strip_array_types (type
);
576 vec
<tree
, va_gc
> *argvec
;
578 if (integer_zerop (array_type_nelts_total (type
))
579 || !CLASS_TYPE_P (inner_type
))
580 /* No interesting initialization to do. */
581 return integer_zero_node
;
582 else if (init
== void_type_node
)
583 return build_value_init (inner_type
, complain
);
585 gcc_assert (init
== NULL_TREE
586 || (same_type_ignoring_top_level_qualifiers_p
587 (type
, TREE_TYPE (init
))));
589 argvec
= make_tree_vector ();
592 tree init_type
= strip_array_types (TREE_TYPE (init
));
593 tree dummy
= build_dummy_object (init_type
);
594 if (!real_lvalue_p (init
))
595 dummy
= move (dummy
);
596 argvec
->quick_push (dummy
);
598 init
= build_special_member_call (NULL_TREE
, complete_ctor_identifier
,
599 &argvec
, inner_type
, LOOKUP_NORMAL
,
601 release_tree_vector (argvec
);
603 /* For a trivial constructor, build_over_call creates a TARGET_EXPR. But
604 we don't want one here because we aren't creating a temporary. */
605 if (TREE_CODE (init
) == TARGET_EXPR
)
606 init
= TARGET_EXPR_INITIAL (init
);
611 /* Return a TARGET_EXPR which expresses the initialization of an array to
612 be named later, either default-initialization or copy-initialization
613 from another array of the same type. */
616 build_vec_init_expr (tree type
, tree init
, tsubst_flags_t complain
)
619 bool value_init
= false;
620 tree elt_init
= build_vec_init_elt (type
, init
, complain
);
622 if (init
== void_type_node
)
628 slot
= build_local_temp (type
);
629 init
= build2 (VEC_INIT_EXPR
, type
, slot
, init
);
630 TREE_SIDE_EFFECTS (init
) = true;
631 SET_EXPR_LOCATION (init
, input_location
);
633 if (cxx_dialect
>= cxx11
634 && potential_constant_expression (elt_init
))
635 VEC_INIT_EXPR_IS_CONSTEXPR (init
) = true;
636 VEC_INIT_EXPR_VALUE_INIT (init
) = value_init
;
641 /* Give a helpful diagnostic for a non-constexpr VEC_INIT_EXPR in a context
642 that requires a constant expression. */
645 diagnose_non_constexpr_vec_init (tree expr
)
647 tree type
= TREE_TYPE (VEC_INIT_EXPR_SLOT (expr
));
649 if (VEC_INIT_EXPR_VALUE_INIT (expr
))
650 init
= void_type_node
;
652 init
= VEC_INIT_EXPR_INIT (expr
);
654 elt_init
= build_vec_init_elt (type
, init
, tf_warning_or_error
);
655 require_potential_constant_expression (elt_init
);
659 build_array_copy (tree init
)
661 return build_vec_init_expr (TREE_TYPE (init
), init
, tf_warning_or_error
);
664 /* Build a TARGET_EXPR using INIT to initialize a new temporary of the
668 build_target_expr_with_type (tree init
, tree type
, tsubst_flags_t complain
)
670 gcc_assert (!VOID_TYPE_P (type
));
672 if (TREE_CODE (init
) == TARGET_EXPR
673 || init
== error_mark_node
)
675 else if (CLASS_TYPE_P (type
) && type_has_nontrivial_copy_init (type
)
676 && !VOID_TYPE_P (TREE_TYPE (init
))
677 && TREE_CODE (init
) != COND_EXPR
678 && TREE_CODE (init
) != CONSTRUCTOR
679 && TREE_CODE (init
) != VA_ARG_EXPR
)
680 /* We need to build up a copy constructor call. A void initializer
681 means we're being called from bot_manip. COND_EXPR is a special
682 case because we already have copies on the arms and we don't want
683 another one here. A CONSTRUCTOR is aggregate initialization, which
684 is handled separately. A VA_ARG_EXPR is magic creation of an
685 aggregate; there's no additional work to be done. */
686 return force_rvalue (init
, complain
);
688 return force_target_expr (type
, init
, complain
);
691 /* Like the above function, but without the checking. This function should
692 only be used by code which is deliberately trying to subvert the type
693 system, such as call_builtin_trap. Or build_over_call, to avoid
694 infinite recursion. */
697 force_target_expr (tree type
, tree init
, tsubst_flags_t complain
)
701 gcc_assert (!VOID_TYPE_P (type
));
703 slot
= build_local_temp (type
);
704 return build_target_expr (slot
, init
, complain
);
707 /* Like build_target_expr_with_type, but use the type of INIT. */
710 get_target_expr_sfinae (tree init
, tsubst_flags_t complain
)
712 if (TREE_CODE (init
) == AGGR_INIT_EXPR
)
713 return build_target_expr (AGGR_INIT_EXPR_SLOT (init
), init
, complain
);
714 else if (TREE_CODE (init
) == VEC_INIT_EXPR
)
715 return build_target_expr (VEC_INIT_EXPR_SLOT (init
), init
, complain
);
717 return build_target_expr_with_type (init
, TREE_TYPE (init
), complain
);
721 get_target_expr (tree init
)
723 return get_target_expr_sfinae (init
, tf_warning_or_error
);
726 /* If EXPR is a bitfield reference, convert it to the declared type of
727 the bitfield, and return the resulting expression. Otherwise,
728 return EXPR itself. */
731 convert_bitfield_to_declared_type (tree expr
)
735 bitfield_type
= is_bitfield_expr_with_lowered_type (expr
);
737 expr
= convert_to_integer_nofold (TYPE_MAIN_VARIANT (bitfield_type
),
742 /* EXPR is being used in an rvalue context. Return a version of EXPR
743 that is marked as an rvalue. */
750 if (error_operand_p (expr
))
753 expr
= mark_rvalue_use (expr
);
757 Non-class rvalues always have cv-unqualified types. */
758 type
= TREE_TYPE (expr
);
759 if (!CLASS_TYPE_P (type
) && cv_qualified_p (type
))
760 type
= cv_unqualified (type
);
762 /* We need to do this for rvalue refs as well to get the right answer
763 from decltype; see c++/36628. */
764 if (!processing_template_decl
&& lvalue_or_rvalue_with_address_p (expr
))
765 expr
= build1 (NON_LVALUE_EXPR
, type
, expr
);
766 else if (type
!= TREE_TYPE (expr
))
767 expr
= build_nop (type
, expr
);
773 struct cplus_array_info
779 struct cplus_array_hasher
: ggc_ptr_hash
<tree_node
>
781 typedef cplus_array_info
*compare_type
;
783 static hashval_t
hash (tree t
);
784 static bool equal (tree
, cplus_array_info
*);
787 /* Hash an ARRAY_TYPE. K is really of type `tree'. */
790 cplus_array_hasher::hash (tree t
)
794 hash
= TYPE_UID (TREE_TYPE (t
));
796 hash
^= TYPE_UID (TYPE_DOMAIN (t
));
800 /* Compare two ARRAY_TYPEs. K1 is really of type `tree', K2 is really
801 of type `cplus_array_info*'. */
804 cplus_array_hasher::equal (tree t1
, cplus_array_info
*t2
)
806 return (TREE_TYPE (t1
) == t2
->type
&& TYPE_DOMAIN (t1
) == t2
->domain
);
809 /* Hash table containing dependent array types, which are unsuitable for
810 the language-independent type hash table. */
811 static GTY (()) hash_table
<cplus_array_hasher
> *cplus_array_htab
;
813 /* Build an ARRAY_TYPE without laying it out. */
816 build_min_array_type (tree elt_type
, tree index_type
)
818 tree t
= cxx_make_type (ARRAY_TYPE
);
819 TREE_TYPE (t
) = elt_type
;
820 TYPE_DOMAIN (t
) = index_type
;
824 /* Set TYPE_CANONICAL like build_array_type_1, but using
825 build_cplus_array_type. */
828 set_array_type_canon (tree t
, tree elt_type
, tree index_type
)
830 /* Set the canonical type for this new node. */
831 if (TYPE_STRUCTURAL_EQUALITY_P (elt_type
)
832 || (index_type
&& TYPE_STRUCTURAL_EQUALITY_P (index_type
)))
833 SET_TYPE_STRUCTURAL_EQUALITY (t
);
834 else if (TYPE_CANONICAL (elt_type
) != elt_type
835 || (index_type
&& TYPE_CANONICAL (index_type
) != index_type
))
837 = build_cplus_array_type (TYPE_CANONICAL (elt_type
),
839 ? TYPE_CANONICAL (index_type
) : index_type
);
841 TYPE_CANONICAL (t
) = t
;
844 /* Like build_array_type, but handle special C++ semantics: an array of a
845 variant element type is a variant of the array of the main variant of
849 build_cplus_array_type (tree elt_type
, tree index_type
)
853 if (elt_type
== error_mark_node
|| index_type
== error_mark_node
)
854 return error_mark_node
;
856 bool dependent
= (uses_template_parms (elt_type
)
857 || (index_type
&& uses_template_parms (index_type
)));
859 if (elt_type
!= TYPE_MAIN_VARIANT (elt_type
))
860 /* Start with an array of the TYPE_MAIN_VARIANT. */
861 t
= build_cplus_array_type (TYPE_MAIN_VARIANT (elt_type
),
865 /* Since type_hash_canon calls layout_type, we need to use our own
867 cplus_array_info cai
;
870 if (cplus_array_htab
== NULL
)
871 cplus_array_htab
= hash_table
<cplus_array_hasher
>::create_ggc (61);
873 hash
= TYPE_UID (elt_type
);
875 hash
^= TYPE_UID (index_type
);
877 cai
.domain
= index_type
;
879 tree
*e
= cplus_array_htab
->find_slot_with_hash (&cai
, hash
, INSERT
);
881 /* We have found the type: we're done. */
885 /* Build a new array type. */
886 t
= build_min_array_type (elt_type
, index_type
);
888 /* Store it in the hash table. */
891 /* Set the canonical type for this new node. */
892 set_array_type_canon (t
, elt_type
, index_type
);
897 t
= build_array_type (elt_type
, index_type
);
900 /* Now check whether we already have this array variant. */
901 if (elt_type
!= TYPE_MAIN_VARIANT (elt_type
))
904 for (t
= m
; t
; t
= TYPE_NEXT_VARIANT (t
))
905 if (TREE_TYPE (t
) == elt_type
906 && TYPE_NAME (t
) == NULL_TREE
907 && TYPE_ATTRIBUTES (t
) == NULL_TREE
)
911 t
= build_min_array_type (elt_type
, index_type
);
912 set_array_type_canon (t
, elt_type
, index_type
);
916 /* Make sure sizes are shared with the main variant.
917 layout_type can't be called after setting TYPE_NEXT_VARIANT,
918 as it will overwrite alignment etc. of all variants. */
919 TYPE_SIZE (t
) = TYPE_SIZE (m
);
920 TYPE_SIZE_UNIT (t
) = TYPE_SIZE_UNIT (m
);
923 TYPE_MAIN_VARIANT (t
) = m
;
924 TYPE_NEXT_VARIANT (t
) = TYPE_NEXT_VARIANT (m
);
925 TYPE_NEXT_VARIANT (m
) = t
;
929 /* Avoid spurious warnings with VLAs (c++/54583). */
930 if (TYPE_SIZE (t
) && EXPR_P (TYPE_SIZE (t
)))
931 TREE_NO_WARNING (TYPE_SIZE (t
)) = 1;
933 /* Push these needs up to the ARRAY_TYPE so that initialization takes
934 place more easily. */
935 bool needs_ctor
= (TYPE_NEEDS_CONSTRUCTING (t
)
936 = TYPE_NEEDS_CONSTRUCTING (elt_type
));
937 bool needs_dtor
= (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (t
)
938 = TYPE_HAS_NONTRIVIAL_DESTRUCTOR (elt_type
));
940 if (!dependent
&& t
== TYPE_MAIN_VARIANT (t
)
941 && !COMPLETE_TYPE_P (t
) && COMPLETE_TYPE_P (elt_type
))
943 /* The element type has been completed since the last time we saw
944 this array type; update the layout and 'tor flags for any variants
947 for (tree v
= TYPE_NEXT_VARIANT (t
); v
; v
= TYPE_NEXT_VARIANT (v
))
949 TYPE_NEEDS_CONSTRUCTING (v
) = needs_ctor
;
950 TYPE_HAS_NONTRIVIAL_DESTRUCTOR (v
) = needs_dtor
;
957 /* Return an ARRAY_TYPE with element type ELT and length N. */
960 build_array_of_n_type (tree elt
, int n
)
962 return build_cplus_array_type (elt
, build_index_type (size_int (n
- 1)));
965 /* True iff T is an N3639 array of runtime bound (VLA). These were
966 approved for C++14 but then removed. */
969 array_of_runtime_bound_p (tree t
)
971 if (!t
|| TREE_CODE (t
) != ARRAY_TYPE
)
973 tree dom
= TYPE_DOMAIN (t
);
976 tree max
= TYPE_MAX_VALUE (dom
);
977 return (!potential_rvalue_constant_expression (max
)
978 || (!value_dependent_expression_p (max
) && !TREE_CONSTANT (max
)));
981 /* Return a reference type node referring to TO_TYPE. If RVAL is
982 true, return an rvalue reference type, otherwise return an lvalue
983 reference type. If a type node exists, reuse it, otherwise create
986 cp_build_reference_type (tree to_type
, bool rval
)
989 lvalue_ref
= build_reference_type (to_type
);
993 /* This code to create rvalue reference types is based on and tied
994 to the code creating lvalue reference types in the middle-end
995 functions build_reference_type_for_mode and build_reference_type.
997 It works by putting the rvalue reference type nodes after the
998 lvalue reference nodes in the TYPE_NEXT_REF_TO linked list, so
999 they will effectively be ignored by the middle end. */
1001 for (t
= lvalue_ref
; (t
= TYPE_NEXT_REF_TO (t
)); )
1002 if (TYPE_REF_IS_RVALUE (t
))
1005 t
= build_distinct_type_copy (lvalue_ref
);
1007 TYPE_REF_IS_RVALUE (t
) = true;
1008 TYPE_NEXT_REF_TO (t
) = TYPE_NEXT_REF_TO (lvalue_ref
);
1009 TYPE_NEXT_REF_TO (lvalue_ref
) = t
;
1011 if (TYPE_STRUCTURAL_EQUALITY_P (to_type
))
1012 SET_TYPE_STRUCTURAL_EQUALITY (t
);
1013 else if (TYPE_CANONICAL (to_type
) != to_type
)
1015 = cp_build_reference_type (TYPE_CANONICAL (to_type
), rval
);
1017 TYPE_CANONICAL (t
) = t
;
1025 /* Returns EXPR cast to rvalue reference type, like std::move. */
1030 tree type
= TREE_TYPE (expr
);
1031 gcc_assert (TREE_CODE (type
) != REFERENCE_TYPE
);
1032 type
= cp_build_reference_type (type
, /*rval*/true);
1033 return build_static_cast (type
, expr
, tf_warning_or_error
);
1036 /* Used by the C++ front end to build qualified array types. However,
1037 the C version of this function does not properly maintain canonical
1038 types (which are not used in C). */
1040 c_build_qualified_type (tree type
, int type_quals
, tree
/* orig_qual_type */,
1041 size_t /* orig_qual_indirect */)
1043 return cp_build_qualified_type (type
, type_quals
);
1047 /* Make a variant of TYPE, qualified with the TYPE_QUALS. Handles
1048 arrays correctly. In particular, if TYPE is an array of T's, and
1049 TYPE_QUALS is non-empty, returns an array of qualified T's.
1051 FLAGS determines how to deal with ill-formed qualifications. If
1052 tf_ignore_bad_quals is set, then bad qualifications are dropped
1053 (this is permitted if TYPE was introduced via a typedef or template
1054 type parameter). If bad qualifications are dropped and tf_warning
1055 is set, then a warning is issued for non-const qualifications. If
1056 tf_ignore_bad_quals is not set and tf_error is not set, we
1057 return error_mark_node. Otherwise, we issue an error, and ignore
1060 Qualification of a reference type is valid when the reference came
1061 via a typedef or template type argument. [dcl.ref] No such
1062 dispensation is provided for qualifying a function type. [dcl.fct]
1063 DR 295 queries this and the proposed resolution brings it into line
1064 with qualifying a reference. We implement the DR. We also behave
1065 in a similar manner for restricting non-pointer types. */
1068 cp_build_qualified_type_real (tree type
,
1070 tsubst_flags_t complain
)
1073 int bad_quals
= TYPE_UNQUALIFIED
;
1075 if (type
== error_mark_node
)
1078 if (type_quals
== cp_type_quals (type
))
1081 if (TREE_CODE (type
) == ARRAY_TYPE
)
1083 /* In C++, the qualification really applies to the array element
1084 type. Obtain the appropriately qualified element type. */
1087 = cp_build_qualified_type_real (TREE_TYPE (type
),
1091 if (element_type
== error_mark_node
)
1092 return error_mark_node
;
1094 /* See if we already have an identically qualified type. Tests
1095 should be equivalent to those in check_qualified_type. */
1096 for (t
= TYPE_MAIN_VARIANT (type
); t
; t
= TYPE_NEXT_VARIANT (t
))
1097 if (TREE_TYPE (t
) == element_type
1098 && TYPE_NAME (t
) == TYPE_NAME (type
)
1099 && TYPE_CONTEXT (t
) == TYPE_CONTEXT (type
)
1100 && attribute_list_equal (TYPE_ATTRIBUTES (t
),
1101 TYPE_ATTRIBUTES (type
)))
1106 t
= build_cplus_array_type (element_type
, TYPE_DOMAIN (type
));
1108 /* Keep the typedef name. */
1109 if (TYPE_NAME (t
) != TYPE_NAME (type
))
1111 t
= build_variant_type_copy (t
);
1112 TYPE_NAME (t
) = TYPE_NAME (type
);
1113 SET_TYPE_ALIGN (t
, TYPE_ALIGN (type
));
1114 TYPE_USER_ALIGN (t
) = TYPE_USER_ALIGN (type
);
1118 /* Even if we already had this variant, we update
1119 TYPE_NEEDS_CONSTRUCTING and TYPE_HAS_NONTRIVIAL_DESTRUCTOR in case
1120 they changed since the variant was originally created.
1122 This seems hokey; if there is some way to use a previous
1123 variant *without* coming through here,
1124 TYPE_NEEDS_CONSTRUCTING will never be updated. */
1125 TYPE_NEEDS_CONSTRUCTING (t
)
1126 = TYPE_NEEDS_CONSTRUCTING (TYPE_MAIN_VARIANT (element_type
));
1127 TYPE_HAS_NONTRIVIAL_DESTRUCTOR (t
)
1128 = TYPE_HAS_NONTRIVIAL_DESTRUCTOR (TYPE_MAIN_VARIANT (element_type
));
1131 else if (TREE_CODE (type
) == TYPE_PACK_EXPANSION
)
1133 tree t
= PACK_EXPANSION_PATTERN (type
);
1135 t
= cp_build_qualified_type_real (t
, type_quals
, complain
);
1136 return make_pack_expansion (t
);
1139 /* A reference or method type shall not be cv-qualified.
1140 [dcl.ref], [dcl.fct]. This used to be an error, but as of DR 295
1141 (in CD1) we always ignore extra cv-quals on functions. */
1142 if (type_quals
& (TYPE_QUAL_CONST
| TYPE_QUAL_VOLATILE
)
1143 && (TREE_CODE (type
) == REFERENCE_TYPE
1144 || TREE_CODE (type
) == FUNCTION_TYPE
1145 || TREE_CODE (type
) == METHOD_TYPE
))
1147 if (TREE_CODE (type
) == REFERENCE_TYPE
)
1148 bad_quals
|= type_quals
& (TYPE_QUAL_CONST
| TYPE_QUAL_VOLATILE
);
1149 type_quals
&= ~(TYPE_QUAL_CONST
| TYPE_QUAL_VOLATILE
);
1152 /* But preserve any function-cv-quals on a FUNCTION_TYPE. */
1153 if (TREE_CODE (type
) == FUNCTION_TYPE
)
1154 type_quals
|= type_memfn_quals (type
);
1156 /* A restrict-qualified type must be a pointer (or reference)
1157 to object or incomplete type. */
1158 if ((type_quals
& TYPE_QUAL_RESTRICT
)
1159 && TREE_CODE (type
) != TEMPLATE_TYPE_PARM
1160 && TREE_CODE (type
) != TYPENAME_TYPE
1161 && !POINTER_TYPE_P (type
))
1163 bad_quals
|= TYPE_QUAL_RESTRICT
;
1164 type_quals
&= ~TYPE_QUAL_RESTRICT
;
1167 if (bad_quals
== TYPE_UNQUALIFIED
1168 || (complain
& tf_ignore_bad_quals
))
1170 else if (!(complain
& tf_error
))
1171 return error_mark_node
;
1174 tree bad_type
= build_qualified_type (ptr_type_node
, bad_quals
);
1175 error ("%qV qualifiers cannot be applied to %qT",
1179 /* Retrieve (or create) the appropriately qualified variant. */
1180 result
= build_qualified_type (type
, type_quals
);
1182 /* Preserve exception specs and ref-qualifier since build_qualified_type
1183 doesn't know about them. */
1184 if (TREE_CODE (result
) == FUNCTION_TYPE
1185 || TREE_CODE (result
) == METHOD_TYPE
)
1187 result
= build_exception_variant (result
, TYPE_RAISES_EXCEPTIONS (type
));
1188 result
= build_ref_qualified_type (result
, type_memfn_rqual (type
));
1194 /* Return TYPE with const and volatile removed. */
1197 cv_unqualified (tree type
)
1201 if (type
== error_mark_node
)
1204 quals
= cp_type_quals (type
);
1205 quals
&= ~(TYPE_QUAL_CONST
|TYPE_QUAL_VOLATILE
);
1206 return cp_build_qualified_type (type
, quals
);
1209 /* Subroutine of strip_typedefs. We want to apply to RESULT the attributes
1210 from ATTRIBS that affect type identity, and no others. If any are not
1211 applied, set *remove_attributes to true. */
1214 apply_identity_attributes (tree result
, tree attribs
, bool *remove_attributes
)
1216 tree first_ident
= NULL_TREE
;
1217 tree new_attribs
= NULL_TREE
;
1218 tree
*p
= &new_attribs
;
1220 if (OVERLOAD_TYPE_P (result
))
1222 /* On classes and enums all attributes are ingrained. */
1223 gcc_assert (attribs
== TYPE_ATTRIBUTES (result
));
1227 for (tree a
= attribs
; a
; a
= TREE_CHAIN (a
))
1229 const attribute_spec
*as
1230 = lookup_attribute_spec (get_attribute_name (a
));
1231 if (as
&& as
->affects_type_identity
)
1235 else if (first_ident
== error_mark_node
)
1237 *p
= tree_cons (TREE_PURPOSE (a
), TREE_VALUE (a
), NULL_TREE
);
1238 p
= &TREE_CHAIN (*p
);
1241 else if (first_ident
)
1243 for (tree a2
= first_ident
; a2
; a2
= TREE_CHAIN (a2
))
1245 *p
= tree_cons (TREE_PURPOSE (a2
), TREE_VALUE (a2
), NULL_TREE
);
1246 p
= &TREE_CHAIN (*p
);
1248 first_ident
= error_mark_node
;
1251 if (first_ident
!= error_mark_node
)
1252 new_attribs
= first_ident
;
1254 if (first_ident
== attribs
)
1255 /* All attributes affected type identity. */;
1257 *remove_attributes
= true;
1259 return cp_build_type_attribute_variant (result
, new_attribs
);
1262 /* Builds a qualified variant of T that is not a typedef variant.
1263 E.g. consider the following declarations:
1264 typedef const int ConstInt;
1265 typedef ConstInt* PtrConstInt;
1266 If T is PtrConstInt, this function returns a type representing
1268 In other words, if T is a typedef, the function returns the underlying type.
1269 The cv-qualification and attributes of the type returned match the
1271 They will always be compatible types.
1272 The returned type is built so that all of its subtypes
1273 recursively have their typedefs stripped as well.
1275 This is different from just returning TYPE_CANONICAL (T)
1276 Because of several reasons:
1277 * If T is a type that needs structural equality
1278 its TYPE_CANONICAL (T) will be NULL.
1279 * TYPE_CANONICAL (T) desn't carry type attributes
1280 and loses template parameter names.
1282 If REMOVE_ATTRIBUTES is non-null, also strip attributes that don't
1283 affect type identity, and set the referent to true if any were
1287 strip_typedefs (tree t
, bool *remove_attributes
)
1289 tree result
= NULL
, type
= NULL
, t0
= NULL
;
1291 if (!t
|| t
== error_mark_node
)
1294 if (TREE_CODE (t
) == TREE_LIST
)
1296 bool changed
= false;
1297 vec
<tree
,va_gc
> *vec
= make_tree_vector ();
1299 for (; t
; t
= TREE_CHAIN (t
))
1301 gcc_assert (!TREE_PURPOSE (t
));
1302 tree elt
= strip_typedefs (TREE_VALUE (t
), remove_attributes
);
1303 if (elt
!= TREE_VALUE (t
))
1305 vec_safe_push (vec
, elt
);
1308 r
= build_tree_list_vec (vec
);
1309 release_tree_vector (vec
);
1313 gcc_assert (TYPE_P (t
));
1315 if (t
== TYPE_CANONICAL (t
))
1318 if (dependent_alias_template_spec_p (t
))
1319 /* DR 1558: However, if the template-id is dependent, subsequent
1320 template argument substitution still applies to the template-id. */
1323 switch (TREE_CODE (t
))
1326 type
= strip_typedefs (TREE_TYPE (t
), remove_attributes
);
1327 result
= build_pointer_type (type
);
1329 case REFERENCE_TYPE
:
1330 type
= strip_typedefs (TREE_TYPE (t
), remove_attributes
);
1331 result
= cp_build_reference_type (type
, TYPE_REF_IS_RVALUE (t
));
1334 t0
= strip_typedefs (TYPE_OFFSET_BASETYPE (t
), remove_attributes
);
1335 type
= strip_typedefs (TREE_TYPE (t
), remove_attributes
);
1336 result
= build_offset_type (t0
, type
);
1339 if (TYPE_PTRMEMFUNC_P (t
))
1341 t0
= strip_typedefs (TYPE_PTRMEMFUNC_FN_TYPE (t
), remove_attributes
);
1342 result
= build_ptrmemfunc_type (t0
);
1346 type
= strip_typedefs (TREE_TYPE (t
), remove_attributes
);
1347 t0
= strip_typedefs (TYPE_DOMAIN (t
), remove_attributes
);
1348 result
= build_cplus_array_type (type
, t0
);
1353 tree arg_types
= NULL
, arg_node
, arg_node2
, arg_type
;
1356 /* Because we stomp on TREE_PURPOSE of TYPE_ARG_TYPES in many places
1357 around the compiler (e.g. cp_parser_late_parsing_default_args), we
1358 can't expect that re-hashing a function type will find a previous
1359 equivalent type, so try to reuse the input type if nothing has
1360 changed. If the type is itself a variant, that will change. */
1361 bool is_variant
= typedef_variant_p (t
);
1362 if (remove_attributes
1363 && (TYPE_ATTRIBUTES (t
) || TYPE_USER_ALIGN (t
)))
1366 type
= strip_typedefs (TREE_TYPE (t
), remove_attributes
);
1367 changed
= type
!= TREE_TYPE (t
) || is_variant
;
1369 for (arg_node
= TYPE_ARG_TYPES (t
);
1371 arg_node
= TREE_CHAIN (arg_node
))
1373 if (arg_node
== void_list_node
)
1375 arg_type
= strip_typedefs (TREE_VALUE (arg_node
),
1377 gcc_assert (arg_type
);
1378 if (arg_type
== TREE_VALUE (arg_node
) && !changed
)
1384 for (arg_node2
= TYPE_ARG_TYPES (t
);
1385 arg_node2
!= arg_node
;
1386 arg_node2
= TREE_CHAIN (arg_node2
))
1388 = tree_cons (TREE_PURPOSE (arg_node2
),
1389 TREE_VALUE (arg_node2
), arg_types
);
1393 = tree_cons (TREE_PURPOSE (arg_node
), arg_type
, arg_types
);
1400 arg_types
= nreverse (arg_types
);
1402 /* A list of parameters not ending with an ellipsis
1403 must end with void_list_node. */
1405 arg_types
= chainon (arg_types
, void_list_node
);
1407 if (TREE_CODE (t
) == METHOD_TYPE
)
1409 tree class_type
= TREE_TYPE (TREE_VALUE (arg_types
));
1410 gcc_assert (class_type
);
1412 build_method_type_directly (class_type
, type
,
1413 TREE_CHAIN (arg_types
));
1415 = build_ref_qualified_type (result
, type_memfn_rqual (t
));
1419 result
= build_function_type (type
,
1421 result
= apply_memfn_quals (result
,
1422 type_memfn_quals (t
),
1423 type_memfn_rqual (t
));
1426 if (TYPE_RAISES_EXCEPTIONS (t
))
1427 result
= build_exception_variant (result
,
1428 TYPE_RAISES_EXCEPTIONS (t
));
1429 if (TYPE_HAS_LATE_RETURN_TYPE (t
))
1430 TYPE_HAS_LATE_RETURN_TYPE (result
) = 1;
1435 tree fullname
= TYPENAME_TYPE_FULLNAME (t
);
1436 if (TREE_CODE (fullname
) == TEMPLATE_ID_EXPR
1437 && TREE_OPERAND (fullname
, 1))
1439 tree args
= TREE_OPERAND (fullname
, 1);
1440 tree new_args
= copy_node (args
);
1441 bool changed
= false;
1442 for (int i
= 0; i
< TREE_VEC_LENGTH (args
); ++i
)
1444 tree arg
= TREE_VEC_ELT (args
, i
);
1447 strip_arg
= strip_typedefs (arg
, remove_attributes
);
1449 strip_arg
= strip_typedefs_expr (arg
, remove_attributes
);
1450 TREE_VEC_ELT (new_args
, i
) = strip_arg
;
1451 if (strip_arg
!= arg
)
1456 NON_DEFAULT_TEMPLATE_ARGS_COUNT (new_args
)
1457 = NON_DEFAULT_TEMPLATE_ARGS_COUNT (args
);
1459 = lookup_template_function (TREE_OPERAND (fullname
, 0),
1463 ggc_free (new_args
);
1465 result
= make_typename_type (strip_typedefs (TYPE_CONTEXT (t
),
1467 fullname
, typename_type
, tf_none
);
1468 /* Handle 'typedef typename A::N N;' */
1469 if (typedef_variant_p (result
))
1470 result
= TYPE_MAIN_VARIANT (DECL_ORIGINAL_TYPE (TYPE_NAME (result
)));
1474 result
= strip_typedefs_expr (DECLTYPE_TYPE_EXPR (t
),
1476 if (result
== DECLTYPE_TYPE_EXPR (t
))
1479 result
= (finish_decltype_type
1481 DECLTYPE_TYPE_ID_EXPR_OR_MEMBER_ACCESS_P (t
),
1490 if (typedef_variant_p (t
))
1492 /* Explicitly get the underlying type, as TYPE_MAIN_VARIANT doesn't
1493 strip typedefs with attributes. */
1494 result
= TYPE_MAIN_VARIANT (DECL_ORIGINAL_TYPE (TYPE_NAME (t
)));
1495 result
= strip_typedefs (result
);
1498 result
= TYPE_MAIN_VARIANT (t
);
1500 gcc_assert (!typedef_variant_p (result
));
1501 if (TYPE_USER_ALIGN (t
) != TYPE_USER_ALIGN (result
)
1502 || TYPE_ALIGN (t
) != TYPE_ALIGN (result
))
1504 gcc_assert (TYPE_USER_ALIGN (t
));
1505 if (remove_attributes
)
1506 *remove_attributes
= true;
1509 if (TYPE_ALIGN (t
) == TYPE_ALIGN (result
))
1510 result
= build_variant_type_copy (result
);
1512 result
= build_aligned_type (result
, TYPE_ALIGN (t
));
1513 TYPE_USER_ALIGN (result
) = true;
1516 if (TYPE_ATTRIBUTES (t
))
1518 if (remove_attributes
)
1519 result
= apply_identity_attributes (result
, TYPE_ATTRIBUTES (t
),
1522 result
= cp_build_type_attribute_variant (result
, TYPE_ATTRIBUTES (t
));
1524 return cp_build_qualified_type (result
, cp_type_quals (t
));
1527 /* Like strip_typedefs above, but works on expressions, so that in
1529 template<class T> struct A
1535 sizeof(TT) is replaced by sizeof(T). */
1538 strip_typedefs_expr (tree t
, bool *remove_attributes
)
1542 enum tree_code code
;
1544 if (t
== NULL_TREE
|| t
== error_mark_node
)
1547 if (DECL_P (t
) || CONSTANT_CLASS_P (t
))
1550 /* Some expressions have type operands, so let's handle types here rather
1551 than check TYPE_P in multiple places below. */
1553 return strip_typedefs (t
, remove_attributes
);
1555 code
= TREE_CODE (t
);
1558 case IDENTIFIER_NODE
:
1559 case TEMPLATE_PARM_INDEX
:
1562 case ARGUMENT_PACK_SELECT
:
1567 tree type1
= strip_typedefs (TRAIT_EXPR_TYPE1 (t
), remove_attributes
);
1568 tree type2
= strip_typedefs (TRAIT_EXPR_TYPE2 (t
), remove_attributes
);
1569 if (type1
== TRAIT_EXPR_TYPE1 (t
)
1570 && type2
== TRAIT_EXPR_TYPE2 (t
))
1573 TRAIT_EXPR_TYPE1 (r
) = type1
;
1574 TRAIT_EXPR_TYPE2 (r
) = type2
;
1580 vec
<tree
, va_gc
> *vec
= make_tree_vector ();
1581 bool changed
= false;
1583 for (it
= t
; it
; it
= TREE_CHAIN (it
))
1585 tree val
= strip_typedefs_expr (TREE_VALUE (t
), remove_attributes
);
1586 vec_safe_push (vec
, val
);
1587 if (val
!= TREE_VALUE (t
))
1589 gcc_assert (TREE_PURPOSE (it
) == NULL_TREE
);
1594 FOR_EACH_VEC_ELT_REVERSE (*vec
, i
, it
)
1595 r
= tree_cons (NULL_TREE
, it
, r
);
1599 release_tree_vector (vec
);
1605 bool changed
= false;
1606 vec
<tree
, va_gc
> *vec
= make_tree_vector ();
1607 n
= TREE_VEC_LENGTH (t
);
1608 vec_safe_reserve (vec
, n
);
1609 for (i
= 0; i
< n
; ++i
)
1611 tree op
= strip_typedefs_expr (TREE_VEC_ELT (t
, i
),
1613 vec
->quick_push (op
);
1614 if (op
!= TREE_VEC_ELT (t
, i
))
1620 for (i
= 0; i
< n
; ++i
)
1621 TREE_VEC_ELT (r
, i
) = (*vec
)[i
];
1622 NON_DEFAULT_TEMPLATE_ARGS_COUNT (r
)
1623 = NON_DEFAULT_TEMPLATE_ARGS_COUNT (t
);
1627 release_tree_vector (vec
);
1633 bool changed
= false;
1634 vec
<constructor_elt
, va_gc
> *vec
1635 = vec_safe_copy (CONSTRUCTOR_ELTS (t
));
1636 n
= CONSTRUCTOR_NELTS (t
);
1637 type
= strip_typedefs (TREE_TYPE (t
), remove_attributes
);
1638 for (i
= 0; i
< n
; ++i
)
1640 constructor_elt
*e
= &(*vec
)[i
];
1641 tree op
= strip_typedefs_expr (e
->value
, remove_attributes
);
1648 (e
->index
== strip_typedefs_expr (e
->index
, remove_attributes
));
1651 if (!changed
&& type
== TREE_TYPE (t
))
1659 TREE_TYPE (r
) = type
;
1660 CONSTRUCTOR_ELTS (r
) = vec
;
1666 error ("lambda-expression in a constant expression");
1667 return error_mark_node
;
1673 gcc_assert (EXPR_P (t
));
1675 n
= TREE_OPERAND_LENGTH (t
);
1676 ops
= XALLOCAVEC (tree
, n
);
1677 type
= TREE_TYPE (t
);
1682 case IMPLICIT_CONV_EXPR
:
1683 case DYNAMIC_CAST_EXPR
:
1684 case STATIC_CAST_EXPR
:
1685 case CONST_CAST_EXPR
:
1686 case REINTERPRET_CAST_EXPR
:
1689 type
= strip_typedefs (type
, remove_attributes
);
1693 for (i
= 0; i
< n
; ++i
)
1694 ops
[i
] = strip_typedefs_expr (TREE_OPERAND (t
, i
), remove_attributes
);
1698 /* If nothing changed, return t. */
1699 for (i
= 0; i
< n
; ++i
)
1700 if (ops
[i
] != TREE_OPERAND (t
, i
))
1702 if (i
== n
&& type
== TREE_TYPE (t
))
1706 TREE_TYPE (r
) = type
;
1707 for (i
= 0; i
< n
; ++i
)
1708 TREE_OPERAND (r
, i
) = ops
[i
];
1712 /* Makes a copy of BINFO and TYPE, which is to be inherited into a
1713 graph dominated by T. If BINFO is NULL, TYPE is a dependent base,
1714 and we do a shallow copy. If BINFO is non-NULL, we do a deep copy.
1715 VIRT indicates whether TYPE is inherited virtually or not.
1716 IGO_PREV points at the previous binfo of the inheritance graph
1717 order chain. The newly copied binfo's TREE_CHAIN forms this
1720 The CLASSTYPE_VBASECLASSES vector of T is constructed in the
1721 correct order. That is in the order the bases themselves should be
1724 The BINFO_INHERITANCE of a virtual base class points to the binfo
1725 of the most derived type. ??? We could probably change this so that
1726 BINFO_INHERITANCE becomes synonymous with BINFO_PRIMARY, and hence
1727 remove a field. They currently can only differ for primary virtual
1731 copy_binfo (tree binfo
, tree type
, tree t
, tree
*igo_prev
, int virt
)
1737 /* See if we've already made this virtual base. */
1738 new_binfo
= binfo_for_vbase (type
, t
);
1743 new_binfo
= make_tree_binfo (binfo
? BINFO_N_BASE_BINFOS (binfo
) : 0);
1744 BINFO_TYPE (new_binfo
) = type
;
1746 /* Chain it into the inheritance graph. */
1747 TREE_CHAIN (*igo_prev
) = new_binfo
;
1748 *igo_prev
= new_binfo
;
1750 if (binfo
&& !BINFO_DEPENDENT_BASE_P (binfo
))
1755 gcc_assert (SAME_BINFO_TYPE_P (BINFO_TYPE (binfo
), type
));
1757 BINFO_OFFSET (new_binfo
) = BINFO_OFFSET (binfo
);
1758 BINFO_VIRTUALS (new_binfo
) = BINFO_VIRTUALS (binfo
);
1760 /* We do not need to copy the accesses, as they are read only. */
1761 BINFO_BASE_ACCESSES (new_binfo
) = BINFO_BASE_ACCESSES (binfo
);
1763 /* Recursively copy base binfos of BINFO. */
1764 for (ix
= 0; BINFO_BASE_ITERATE (binfo
, ix
, base_binfo
); ix
++)
1766 tree new_base_binfo
;
1767 new_base_binfo
= copy_binfo (base_binfo
, BINFO_TYPE (base_binfo
),
1769 BINFO_VIRTUAL_P (base_binfo
));
1771 if (!BINFO_INHERITANCE_CHAIN (new_base_binfo
))
1772 BINFO_INHERITANCE_CHAIN (new_base_binfo
) = new_binfo
;
1773 BINFO_BASE_APPEND (new_binfo
, new_base_binfo
);
1777 BINFO_DEPENDENT_BASE_P (new_binfo
) = 1;
1781 /* Push it onto the list after any virtual bases it contains
1782 will have been pushed. */
1783 CLASSTYPE_VBASECLASSES (t
)->quick_push (new_binfo
);
1784 BINFO_VIRTUAL_P (new_binfo
) = 1;
1785 BINFO_INHERITANCE_CHAIN (new_binfo
) = TYPE_BINFO (t
);
1791 /* Hashing of lists so that we don't make duplicates.
1792 The entry point is `list_hash_canon'. */
1801 struct list_hasher
: ggc_ptr_hash
<tree_node
>
1803 typedef list_proxy
*compare_type
;
1805 static hashval_t
hash (tree
);
1806 static bool equal (tree
, list_proxy
*);
1809 /* Now here is the hash table. When recording a list, it is added
1810 to the slot whose index is the hash code mod the table size.
1811 Note that the hash table is used for several kinds of lists.
1812 While all these live in the same table, they are completely independent,
1813 and the hash code is computed differently for each of these. */
1815 static GTY (()) hash_table
<list_hasher
> *list_hash_table
;
1817 /* Compare ENTRY (an entry in the hash table) with DATA (a list_proxy
1818 for a node we are thinking about adding). */
1821 list_hasher::equal (tree t
, list_proxy
*proxy
)
1823 return (TREE_VALUE (t
) == proxy
->value
1824 && TREE_PURPOSE (t
) == proxy
->purpose
1825 && TREE_CHAIN (t
) == proxy
->chain
);
1828 /* Compute a hash code for a list (chain of TREE_LIST nodes
1829 with goodies in the TREE_PURPOSE, TREE_VALUE, and bits of the
1830 TREE_COMMON slots), by adding the hash codes of the individual entries. */
1833 list_hash_pieces (tree purpose
, tree value
, tree chain
)
1835 hashval_t hashcode
= 0;
1838 hashcode
+= TREE_HASH (chain
);
1841 hashcode
+= TREE_HASH (value
);
1845 hashcode
+= TREE_HASH (purpose
);
1851 /* Hash an already existing TREE_LIST. */
1854 list_hasher::hash (tree t
)
1856 return list_hash_pieces (TREE_PURPOSE (t
),
1861 /* Given list components PURPOSE, VALUE, AND CHAIN, return the canonical
1862 object for an identical list if one already exists. Otherwise, build a
1863 new one, and record it as the canonical object. */
1866 hash_tree_cons (tree purpose
, tree value
, tree chain
)
1870 struct list_proxy proxy
;
1872 /* Hash the list node. */
1873 hashcode
= list_hash_pieces (purpose
, value
, chain
);
1874 /* Create a proxy for the TREE_LIST we would like to create. We
1875 don't actually create it so as to avoid creating garbage. */
1876 proxy
.purpose
= purpose
;
1877 proxy
.value
= value
;
1878 proxy
.chain
= chain
;
1879 /* See if it is already in the table. */
1880 slot
= list_hash_table
->find_slot_with_hash (&proxy
, hashcode
, INSERT
);
1881 /* If not, create a new node. */
1883 *slot
= tree_cons (purpose
, value
, chain
);
1884 return (tree
) *slot
;
1887 /* Constructor for hashed lists. */
1890 hash_tree_chain (tree value
, tree chain
)
1892 return hash_tree_cons (NULL_TREE
, value
, chain
);
1896 debug_binfo (tree elem
)
1901 fprintf (stderr
, "type \"%s\", offset = " HOST_WIDE_INT_PRINT_DEC
1903 TYPE_NAME_STRING (BINFO_TYPE (elem
)),
1904 TREE_INT_CST_LOW (BINFO_OFFSET (elem
)));
1905 debug_tree (BINFO_TYPE (elem
));
1906 if (BINFO_VTABLE (elem
))
1907 fprintf (stderr
, "vtable decl \"%s\"\n",
1908 IDENTIFIER_POINTER (DECL_NAME (get_vtbl_decl_for_binfo (elem
))));
1910 fprintf (stderr
, "no vtable decl yet\n");
1911 fprintf (stderr
, "virtuals:\n");
1912 virtuals
= BINFO_VIRTUALS (elem
);
1917 tree fndecl
= TREE_VALUE (virtuals
);
1918 fprintf (stderr
, "%s [%ld =? %ld]\n",
1919 IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (fndecl
)),
1920 (long) n
, (long) TREE_INT_CST_LOW (DECL_VINDEX (fndecl
)));
1922 virtuals
= TREE_CHAIN (virtuals
);
1926 /* Build a representation for the qualified name SCOPE::NAME. TYPE is
1927 the type of the result expression, if known, or NULL_TREE if the
1928 resulting expression is type-dependent. If TEMPLATE_P is true,
1929 NAME is known to be a template because the user explicitly used the
1930 "template" keyword after the "::".
1932 All SCOPE_REFs should be built by use of this function. */
1935 build_qualified_name (tree type
, tree scope
, tree name
, bool template_p
)
1938 if (type
== error_mark_node
1939 || scope
== error_mark_node
1940 || name
== error_mark_node
)
1941 return error_mark_node
;
1942 t
= build2 (SCOPE_REF
, type
, scope
, name
);
1943 QUALIFIED_NAME_IS_TEMPLATE (t
) = template_p
;
1944 PTRMEM_OK_P (t
) = true;
1946 t
= convert_from_reference (t
);
1950 /* Like check_qualified_type, but also check ref-qualifier and exception
1954 cp_check_qualified_type (const_tree cand
, const_tree base
, int type_quals
,
1955 cp_ref_qualifier rqual
, tree raises
)
1957 return (check_qualified_type (cand
, base
, type_quals
)
1958 && comp_except_specs (raises
, TYPE_RAISES_EXCEPTIONS (cand
),
1960 && type_memfn_rqual (cand
) == rqual
);
1963 /* Build the FUNCTION_TYPE or METHOD_TYPE with the ref-qualifier RQUAL. */
1966 build_ref_qualified_type (tree type
, cp_ref_qualifier rqual
)
1970 if (rqual
== type_memfn_rqual (type
))
1973 int type_quals
= TYPE_QUALS (type
);
1974 tree raises
= TYPE_RAISES_EXCEPTIONS (type
);
1975 for (t
= TYPE_MAIN_VARIANT (type
); t
; t
= TYPE_NEXT_VARIANT (t
))
1976 if (cp_check_qualified_type (t
, type
, type_quals
, rqual
, raises
))
1979 t
= build_variant_type_copy (type
);
1982 case REF_QUAL_RVALUE
:
1983 FUNCTION_RVALUE_QUALIFIED (t
) = 1;
1984 FUNCTION_REF_QUALIFIED (t
) = 1;
1986 case REF_QUAL_LVALUE
:
1987 FUNCTION_RVALUE_QUALIFIED (t
) = 0;
1988 FUNCTION_REF_QUALIFIED (t
) = 1;
1991 FUNCTION_REF_QUALIFIED (t
) = 0;
1995 if (TYPE_STRUCTURAL_EQUALITY_P (type
))
1996 /* Propagate structural equality. */
1997 SET_TYPE_STRUCTURAL_EQUALITY (t
);
1998 else if (TYPE_CANONICAL (type
) != type
)
1999 /* Build the underlying canonical type, since it is different
2001 TYPE_CANONICAL (t
) = build_ref_qualified_type (TYPE_CANONICAL (type
),
2004 /* T is its own canonical type. */
2005 TYPE_CANONICAL (t
) = t
;
2010 /* Returns nonzero if X is an expression for a (possibly overloaded)
2011 function. If "f" is a function or function template, "f", "c->f",
2012 "c.f", "C::f", and "f<int>" will all be considered possibly
2013 overloaded functions. Returns 2 if the function is actually
2014 overloaded, i.e., if it is impossible to know the type of the
2015 function without performing overload resolution. */
2018 is_overloaded_fn (tree x
)
2020 /* A baselink is also considered an overloaded function. */
2021 if (TREE_CODE (x
) == OFFSET_REF
2022 || TREE_CODE (x
) == COMPONENT_REF
)
2023 x
= TREE_OPERAND (x
, 1);
2025 x
= BASELINK_FUNCTIONS (x
);
2026 if (TREE_CODE (x
) == TEMPLATE_ID_EXPR
)
2027 x
= TREE_OPERAND (x
, 0);
2028 if (DECL_FUNCTION_TEMPLATE_P (OVL_CURRENT (x
))
2029 || (TREE_CODE (x
) == OVERLOAD
&& OVL_CHAIN (x
)))
2031 return (TREE_CODE (x
) == FUNCTION_DECL
2032 || TREE_CODE (x
) == OVERLOAD
);
2035 /* X is the CALL_EXPR_FN of a CALL_EXPR. If X represents a dependent name
2036 (14.6.2), return the IDENTIFIER_NODE for that name. Otherwise, return
2040 dependent_name (tree x
)
2042 if (identifier_p (x
))
2044 if (TREE_CODE (x
) != COMPONENT_REF
2045 && TREE_CODE (x
) != OFFSET_REF
2046 && TREE_CODE (x
) != BASELINK
2047 && is_overloaded_fn (x
))
2048 return DECL_NAME (get_first_fn (x
));
2052 /* Returns true iff X is an expression for an overloaded function
2053 whose type cannot be known without performing overload
2057 really_overloaded_fn (tree x
)
2059 return is_overloaded_fn (x
) == 2;
2065 gcc_assert (is_overloaded_fn (from
));
2066 /* A baselink is also considered an overloaded function. */
2067 if (TREE_CODE (from
) == OFFSET_REF
2068 || TREE_CODE (from
) == COMPONENT_REF
)
2069 from
= TREE_OPERAND (from
, 1);
2070 if (BASELINK_P (from
))
2071 from
= BASELINK_FUNCTIONS (from
);
2072 if (TREE_CODE (from
) == TEMPLATE_ID_EXPR
)
2073 from
= TREE_OPERAND (from
, 0);
2078 get_first_fn (tree from
)
2080 return OVL_CURRENT (get_fns (from
));
2083 /* Return a new OVL node, concatenating it with the old one. */
2086 ovl_cons (tree decl
, tree chain
)
2088 tree result
= make_node (OVERLOAD
);
2089 TREE_TYPE (result
) = unknown_type_node
;
2090 OVL_FUNCTION (result
) = decl
;
2091 TREE_CHAIN (result
) = chain
;
2096 /* Build a new overloaded function. If this is the first one,
2097 just return it; otherwise, ovl_cons the _DECLs */
2100 build_overload (tree decl
, tree chain
)
2102 if (! chain
&& TREE_CODE (decl
) != TEMPLATE_DECL
)
2104 return ovl_cons (decl
, chain
);
2107 /* Return the scope where the overloaded functions OVL were found. */
2110 ovl_scope (tree ovl
)
2112 if (TREE_CODE (ovl
) == OFFSET_REF
2113 || TREE_CODE (ovl
) == COMPONENT_REF
)
2114 ovl
= TREE_OPERAND (ovl
, 1);
2115 if (TREE_CODE (ovl
) == BASELINK
)
2116 return BINFO_TYPE (BASELINK_BINFO (ovl
));
2117 if (TREE_CODE (ovl
) == TEMPLATE_ID_EXPR
)
2118 ovl
= TREE_OPERAND (ovl
, 0);
2119 /* Skip using-declarations. */
2120 while (TREE_CODE (ovl
) == OVERLOAD
&& OVL_USED (ovl
) && OVL_CHAIN (ovl
))
2121 ovl
= OVL_CHAIN (ovl
);
2122 return CP_DECL_CONTEXT (OVL_CURRENT (ovl
));
2125 /* Return TRUE if FN is a non-static member function, FALSE otherwise.
2126 This function looks into BASELINK and OVERLOAD nodes. */
2129 non_static_member_function_p (tree fn
)
2131 if (fn
== NULL_TREE
)
2134 if (is_overloaded_fn (fn
))
2135 fn
= get_first_fn (fn
);
2138 && DECL_NONSTATIC_MEMBER_FUNCTION_P (fn
));
2142 #define PRINT_RING_SIZE 4
2145 cxx_printable_name_internal (tree decl
, int v
, bool translate
)
2147 static unsigned int uid_ring
[PRINT_RING_SIZE
];
2148 static char *print_ring
[PRINT_RING_SIZE
];
2149 static bool trans_ring
[PRINT_RING_SIZE
];
2150 static int ring_counter
;
2153 /* Only cache functions. */
2155 || TREE_CODE (decl
) != FUNCTION_DECL
2156 || DECL_LANG_SPECIFIC (decl
) == 0)
2157 return lang_decl_name (decl
, v
, translate
);
2159 /* See if this print name is lying around. */
2160 for (i
= 0; i
< PRINT_RING_SIZE
; i
++)
2161 if (uid_ring
[i
] == DECL_UID (decl
) && translate
== trans_ring
[i
])
2162 /* yes, so return it. */
2163 return print_ring
[i
];
2165 if (++ring_counter
== PRINT_RING_SIZE
)
2168 if (current_function_decl
!= NULL_TREE
)
2170 /* There may be both translated and untranslated versions of the
2172 for (i
= 0; i
< 2; i
++)
2174 if (uid_ring
[ring_counter
] == DECL_UID (current_function_decl
))
2176 if (ring_counter
== PRINT_RING_SIZE
)
2179 gcc_assert (uid_ring
[ring_counter
] != DECL_UID (current_function_decl
));
2182 free (print_ring
[ring_counter
]);
2184 print_ring
[ring_counter
] = xstrdup (lang_decl_name (decl
, v
, translate
));
2185 uid_ring
[ring_counter
] = DECL_UID (decl
);
2186 trans_ring
[ring_counter
] = translate
;
2187 return print_ring
[ring_counter
];
2191 cxx_printable_name (tree decl
, int v
)
2193 return cxx_printable_name_internal (decl
, v
, false);
2197 cxx_printable_name_translate (tree decl
, int v
)
2199 return cxx_printable_name_internal (decl
, v
, true);
2202 /* Build the FUNCTION_TYPE or METHOD_TYPE which may throw exceptions
2203 listed in RAISES. */
2206 build_exception_variant (tree type
, tree raises
)
2211 if (comp_except_specs (raises
, TYPE_RAISES_EXCEPTIONS (type
), ce_exact
))
2214 type_quals
= TYPE_QUALS (type
);
2215 cp_ref_qualifier rqual
= type_memfn_rqual (type
);
2216 for (v
= TYPE_MAIN_VARIANT (type
); v
; v
= TYPE_NEXT_VARIANT (v
))
2217 if (cp_check_qualified_type (v
, type
, type_quals
, rqual
, raises
))
2220 /* Need to build a new variant. */
2221 v
= build_variant_type_copy (type
);
2222 TYPE_RAISES_EXCEPTIONS (v
) = raises
;
2226 /* Given a TEMPLATE_TEMPLATE_PARM node T, create a new
2227 BOUND_TEMPLATE_TEMPLATE_PARM bound with NEWARGS as its template
2231 bind_template_template_parm (tree t
, tree newargs
)
2233 tree decl
= TYPE_NAME (t
);
2236 t2
= cxx_make_type (BOUND_TEMPLATE_TEMPLATE_PARM
);
2237 decl
= build_decl (input_location
,
2238 TYPE_DECL
, DECL_NAME (decl
), NULL_TREE
);
2240 /* These nodes have to be created to reflect new TYPE_DECL and template
2242 TEMPLATE_TYPE_PARM_INDEX (t2
) = copy_node (TEMPLATE_TYPE_PARM_INDEX (t
));
2243 TEMPLATE_PARM_DECL (TEMPLATE_TYPE_PARM_INDEX (t2
)) = decl
;
2244 TEMPLATE_TEMPLATE_PARM_TEMPLATE_INFO (t2
)
2245 = build_template_info (TEMPLATE_TEMPLATE_PARM_TEMPLATE_DECL (t
), newargs
);
2247 TREE_TYPE (decl
) = t2
;
2248 TYPE_NAME (t2
) = decl
;
2249 TYPE_STUB_DECL (t2
) = decl
;
2251 SET_TYPE_STRUCTURAL_EQUALITY (t2
);
2256 /* Called from count_trees via walk_tree. */
2259 count_trees_r (tree
*tp
, int *walk_subtrees
, void *data
)
2269 /* Debugging function for measuring the rough complexity of a tree
2273 count_trees (tree t
)
2276 cp_walk_tree_without_duplicates (&t
, count_trees_r
, &n_trees
);
2280 /* Called from verify_stmt_tree via walk_tree. */
2283 verify_stmt_tree_r (tree
* tp
, int * /*walk_subtrees*/, void* data
)
2286 hash_table
<nofree_ptr_hash
<tree_node
> > *statements
2287 = static_cast <hash_table
<nofree_ptr_hash
<tree_node
> > *> (data
);
2290 if (!STATEMENT_CODE_P (TREE_CODE (t
)))
2293 /* If this statement is already present in the hash table, then
2294 there is a circularity in the statement tree. */
2295 gcc_assert (!statements
->find (t
));
2297 slot
= statements
->find_slot (t
, INSERT
);
2303 /* Debugging function to check that the statement T has not been
2304 corrupted. For now, this function simply checks that T contains no
2308 verify_stmt_tree (tree t
)
2310 hash_table
<nofree_ptr_hash
<tree_node
> > statements (37);
2311 cp_walk_tree (&t
, verify_stmt_tree_r
, &statements
, NULL
);
2314 /* Check if the type T depends on a type with no linkage and if so, return
2315 it. If RELAXED_P then do not consider a class type declared within
2316 a vague-linkage function to have no linkage. */
2319 no_linkage_check (tree t
, bool relaxed_p
)
2323 /* There's no point in checking linkage on template functions; we
2324 can't know their complete types. */
2325 if (processing_template_decl
)
2328 switch (TREE_CODE (t
))
2331 if (TYPE_PTRMEMFUNC_P (t
))
2333 /* Lambda types that don't have mangling scope have no linkage. We
2334 check CLASSTYPE_LAMBDA_EXPR for error_mark_node because
2335 when we get here from pushtag none of the lambda information is
2336 set up yet, so we want to assume that the lambda has linkage and
2337 fix it up later if not. */
2338 if (CLASSTYPE_LAMBDA_EXPR (t
)
2339 && CLASSTYPE_LAMBDA_EXPR (t
) != error_mark_node
2340 && LAMBDA_TYPE_EXTRA_SCOPE (t
) == NULL_TREE
)
2344 if (!CLASS_TYPE_P (t
))
2348 /* Only treat anonymous types as having no linkage if they're at
2349 namespace scope. This is core issue 966. */
2350 if (TYPE_ANONYMOUS_P (t
) && TYPE_NAMESPACE_SCOPE_P (t
))
2353 for (r
= CP_TYPE_CONTEXT (t
); ; )
2355 /* If we're a nested type of a !TREE_PUBLIC class, we might not
2356 have linkage, or we might just be in an anonymous namespace.
2357 If we're in a TREE_PUBLIC class, we have linkage. */
2358 if (TYPE_P (r
) && !TREE_PUBLIC (TYPE_NAME (r
)))
2359 return no_linkage_check (TYPE_CONTEXT (t
), relaxed_p
);
2360 else if (TREE_CODE (r
) == FUNCTION_DECL
)
2362 if (!relaxed_p
|| !vague_linkage_p (r
))
2365 r
= CP_DECL_CONTEXT (r
);
2375 case REFERENCE_TYPE
:
2377 return no_linkage_check (TREE_TYPE (t
), relaxed_p
);
2381 r
= no_linkage_check (TYPE_PTRMEM_POINTED_TO_TYPE (t
),
2385 return no_linkage_check (TYPE_PTRMEM_CLASS_TYPE (t
), relaxed_p
);
2390 tree parm
= TYPE_ARG_TYPES (t
);
2391 if (TREE_CODE (t
) == METHOD_TYPE
)
2392 /* The 'this' pointer isn't interesting; a method has the same
2393 linkage (or lack thereof) as its enclosing class. */
2394 parm
= TREE_CHAIN (parm
);
2396 parm
&& parm
!= void_list_node
;
2397 parm
= TREE_CHAIN (parm
))
2399 r
= no_linkage_check (TREE_VALUE (parm
), relaxed_p
);
2403 return no_linkage_check (TREE_TYPE (t
), relaxed_p
);
2411 extern int depth_reached
;
2414 cxx_print_statistics (void)
2416 print_search_statistics ();
2417 print_class_statistics ();
2418 print_template_statistics ();
2419 if (GATHER_STATISTICS
)
2420 fprintf (stderr
, "maximum template instantiation depth reached: %d\n",
2424 /* Return, as an INTEGER_CST node, the number of elements for TYPE
2425 (which is an ARRAY_TYPE). This counts only elements of the top
2429 array_type_nelts_top (tree type
)
2431 return fold_build2_loc (input_location
,
2432 PLUS_EXPR
, sizetype
,
2433 array_type_nelts (type
),
2437 /* Return, as an INTEGER_CST node, the number of elements for TYPE
2438 (which is an ARRAY_TYPE). This one is a recursive count of all
2439 ARRAY_TYPEs that are clumped together. */
2442 array_type_nelts_total (tree type
)
2444 tree sz
= array_type_nelts_top (type
);
2445 type
= TREE_TYPE (type
);
2446 while (TREE_CODE (type
) == ARRAY_TYPE
)
2448 tree n
= array_type_nelts_top (type
);
2449 sz
= fold_build2_loc (input_location
,
2450 MULT_EXPR
, sizetype
, sz
, n
);
2451 type
= TREE_TYPE (type
);
2456 /* Called from break_out_target_exprs via mapcar. */
2459 bot_manip (tree
* tp
, int* walk_subtrees
, void* data
)
2461 splay_tree target_remap
= ((splay_tree
) data
);
2464 if (!TYPE_P (t
) && TREE_CONSTANT (t
) && !TREE_SIDE_EFFECTS (t
))
2466 /* There can't be any TARGET_EXPRs or their slot variables below this
2467 point. But we must make a copy, in case subsequent processing
2468 alters any part of it. For example, during gimplification a cast
2469 of the form (T) &X::f (where "f" is a member function) will lead
2470 to replacing the PTRMEM_CST for &X::f with a VAR_DECL. */
2472 *tp
= unshare_expr (t
);
2475 if (TREE_CODE (t
) == TARGET_EXPR
)
2479 if (TREE_CODE (TREE_OPERAND (t
, 1)) == AGGR_INIT_EXPR
)
2481 u
= build_cplus_new (TREE_TYPE (t
), TREE_OPERAND (t
, 1),
2482 tf_warning_or_error
);
2483 if (AGGR_INIT_ZERO_FIRST (TREE_OPERAND (t
, 1)))
2484 AGGR_INIT_ZERO_FIRST (TREE_OPERAND (u
, 1)) = true;
2487 u
= build_target_expr_with_type (TREE_OPERAND (t
, 1), TREE_TYPE (t
),
2488 tf_warning_or_error
);
2490 TARGET_EXPR_IMPLICIT_P (u
) = TARGET_EXPR_IMPLICIT_P (t
);
2491 TARGET_EXPR_LIST_INIT_P (u
) = TARGET_EXPR_LIST_INIT_P (t
);
2492 TARGET_EXPR_DIRECT_INIT_P (u
) = TARGET_EXPR_DIRECT_INIT_P (t
);
2494 /* Map the old variable to the new one. */
2495 splay_tree_insert (target_remap
,
2496 (splay_tree_key
) TREE_OPERAND (t
, 0),
2497 (splay_tree_value
) TREE_OPERAND (u
, 0));
2499 TREE_OPERAND (u
, 1) = break_out_target_exprs (TREE_OPERAND (u
, 1));
2501 /* Replace the old expression with the new version. */
2503 /* We don't have to go below this point; the recursive call to
2504 break_out_target_exprs will have handled anything below this
2509 if (TREE_CODE (*tp
) == SAVE_EXPR
)
2512 splay_tree_node n
= splay_tree_lookup (target_remap
,
2513 (splay_tree_key
) t
);
2516 *tp
= (tree
)n
->value
;
2521 copy_tree_r (tp
, walk_subtrees
, NULL
);
2522 splay_tree_insert (target_remap
,
2524 (splay_tree_value
)*tp
);
2525 /* Make sure we don't remap an already-remapped SAVE_EXPR. */
2526 splay_tree_insert (target_remap
,
2527 (splay_tree_key
)*tp
,
2528 (splay_tree_value
)*tp
);
2533 /* Make a copy of this node. */
2534 t
= copy_tree_r (tp
, walk_subtrees
, NULL
);
2535 if (TREE_CODE (*tp
) == CALL_EXPR
)
2537 set_flags_from_callee (*tp
);
2539 /* builtin_LINE and builtin_FILE get the location where the default
2540 argument is expanded, not where the call was written. */
2541 tree callee
= get_callee_fndecl (*tp
);
2542 if (callee
&& DECL_BUILT_IN (callee
))
2543 switch (DECL_FUNCTION_CODE (callee
))
2547 SET_EXPR_LOCATION (*tp
, input_location
);
2555 /* Replace all remapped VAR_DECLs in T with their new equivalents.
2556 DATA is really a splay-tree mapping old variables to new
2560 bot_replace (tree
* t
, int* /*walk_subtrees*/, void* data
)
2562 splay_tree target_remap
= ((splay_tree
) data
);
2566 splay_tree_node n
= splay_tree_lookup (target_remap
,
2567 (splay_tree_key
) *t
);
2569 *t
= (tree
) n
->value
;
2571 else if (TREE_CODE (*t
) == PARM_DECL
2572 && DECL_NAME (*t
) == this_identifier
2573 && !DECL_CONTEXT (*t
))
2575 /* In an NSDMI we need to replace the 'this' parameter we used for
2576 parsing with the real one for this function. */
2577 *t
= current_class_ptr
;
2579 else if (TREE_CODE (*t
) == CONVERT_EXPR
2580 && CONVERT_EXPR_VBASE_PATH (*t
))
2582 /* In an NSDMI build_base_path defers building conversions to virtual
2583 bases, and we handle it here. */
2584 tree basetype
= TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (*t
)));
2585 vec
<tree
, va_gc
> *vbases
= CLASSTYPE_VBASECLASSES (current_class_type
);
2587 FOR_EACH_VEC_SAFE_ELT (vbases
, i
, binfo
)
2588 if (BINFO_TYPE (binfo
) == basetype
)
2590 *t
= build_base_path (PLUS_EXPR
, TREE_OPERAND (*t
, 0), binfo
, true,
2591 tf_warning_or_error
);
2597 /* When we parse a default argument expression, we may create
2598 temporary variables via TARGET_EXPRs. When we actually use the
2599 default-argument expression, we make a copy of the expression
2600 and replace the temporaries with appropriate local versions. */
2603 break_out_target_exprs (tree t
)
2605 static int target_remap_count
;
2606 static splay_tree target_remap
;
2608 if (!target_remap_count
++)
2609 target_remap
= splay_tree_new (splay_tree_compare_pointers
,
2610 /*splay_tree_delete_key_fn=*/NULL
,
2611 /*splay_tree_delete_value_fn=*/NULL
);
2612 cp_walk_tree (&t
, bot_manip
, target_remap
, NULL
);
2613 cp_walk_tree (&t
, bot_replace
, target_remap
, NULL
);
2615 if (!--target_remap_count
)
2617 splay_tree_delete (target_remap
);
2618 target_remap
= NULL
;
2624 /* Build an expression for the subobject of OBJ at CONSTRUCTOR index INDEX,
2625 which we expect to have type TYPE. */
2628 build_ctor_subob_ref (tree index
, tree type
, tree obj
)
2630 if (index
== NULL_TREE
)
2631 /* Can't refer to a particular member of a vector. */
2633 else if (TREE_CODE (index
) == INTEGER_CST
)
2634 obj
= cp_build_array_ref (input_location
, obj
, index
, tf_none
);
2636 obj
= build_class_member_access_expr (obj
, index
, NULL_TREE
,
2637 /*reference*/false, tf_none
);
2640 tree objtype
= TREE_TYPE (obj
);
2641 if (TREE_CODE (objtype
) == ARRAY_TYPE
&& !TYPE_DOMAIN (objtype
))
2643 /* When the destination object refers to a flexible array member
2644 verify that it matches the type of the source object except
2645 for its domain and qualifiers. */
2646 gcc_assert (comptypes (TYPE_MAIN_VARIANT (type
),
2647 TYPE_MAIN_VARIANT (objtype
),
2648 COMPARE_REDECLARATION
));
2651 gcc_assert (same_type_ignoring_top_level_qualifiers_p (type
, objtype
));
2657 /* Like substitute_placeholder_in_expr, but handle C++ tree codes and
2658 build up subexpressions as we go deeper. */
2661 replace_placeholders_r (tree
* t
, int* walk_subtrees
, void* data_
)
2663 tree obj
= static_cast<tree
>(data_
);
2665 if (TREE_CONSTANT (*t
))
2667 *walk_subtrees
= false;
2671 switch (TREE_CODE (*t
))
2673 case PLACEHOLDER_EXPR
:
2676 for (; !(same_type_ignoring_top_level_qualifiers_p
2677 (TREE_TYPE (*t
), TREE_TYPE (x
)));
2678 x
= TREE_OPERAND (x
, 0))
2679 gcc_assert (TREE_CODE (x
) == COMPONENT_REF
);
2681 *walk_subtrees
= false;
2687 constructor_elt
*ce
;
2688 vec
<constructor_elt
,va_gc
> *v
= CONSTRUCTOR_ELTS (*t
);
2689 for (unsigned i
= 0; vec_safe_iterate (v
, i
, &ce
); ++i
)
2691 tree
*valp
= &ce
->value
;
2692 tree type
= TREE_TYPE (*valp
);
2695 if (TREE_CODE (*valp
) == CONSTRUCTOR
2696 && AGGREGATE_TYPE_P (type
))
2698 /* If we're looking at the initializer for OBJ, then build
2699 a sub-object reference. If we're looking at an
2700 initializer for another object, just pass OBJ down. */
2701 if (same_type_ignoring_top_level_qualifiers_p
2702 (TREE_TYPE (*t
), TREE_TYPE (obj
)))
2703 subob
= build_ctor_subob_ref (ce
->index
, type
, obj
);
2704 if (TREE_CODE (*valp
) == TARGET_EXPR
)
2705 valp
= &TARGET_EXPR_INITIAL (*valp
);
2708 cp_walk_tree (valp
, replace_placeholders_r
,
2711 *walk_subtrees
= false;
2723 replace_placeholders (tree exp
, tree obj
)
2726 if (TREE_CODE (exp
) == TARGET_EXPR
)
2727 tp
= &TARGET_EXPR_INITIAL (exp
);
2728 cp_walk_tree (tp
, replace_placeholders_r
, obj
, NULL
);
2732 /* Similar to `build_nt', but for template definitions of dependent
2736 build_min_nt_loc (location_t loc
, enum tree_code code
, ...)
2743 gcc_assert (TREE_CODE_CLASS (code
) != tcc_vl_exp
);
2747 t
= make_node (code
);
2748 SET_EXPR_LOCATION (t
, loc
);
2749 length
= TREE_CODE_LENGTH (code
);
2751 for (i
= 0; i
< length
; i
++)
2753 tree x
= va_arg (p
, tree
);
2754 TREE_OPERAND (t
, i
) = x
;
2762 /* Similar to `build', but for template definitions. */
2765 build_min (enum tree_code code
, tree tt
, ...)
2772 gcc_assert (TREE_CODE_CLASS (code
) != tcc_vl_exp
);
2776 t
= make_node (code
);
2777 length
= TREE_CODE_LENGTH (code
);
2780 for (i
= 0; i
< length
; i
++)
2782 tree x
= va_arg (p
, tree
);
2783 TREE_OPERAND (t
, i
) = x
;
2784 if (x
&& !TYPE_P (x
) && TREE_SIDE_EFFECTS (x
))
2785 TREE_SIDE_EFFECTS (t
) = 1;
2792 /* Similar to `build', but for template definitions of non-dependent
2793 expressions. NON_DEP is the non-dependent expression that has been
2797 build_min_non_dep (enum tree_code code
, tree non_dep
, ...)
2804 gcc_assert (TREE_CODE_CLASS (code
) != tcc_vl_exp
);
2806 va_start (p
, non_dep
);
2808 if (REFERENCE_REF_P (non_dep
))
2809 non_dep
= TREE_OPERAND (non_dep
, 0);
2811 t
= make_node (code
);
2812 length
= TREE_CODE_LENGTH (code
);
2813 TREE_TYPE (t
) = TREE_TYPE (non_dep
);
2814 TREE_SIDE_EFFECTS (t
) = TREE_SIDE_EFFECTS (non_dep
);
2816 for (i
= 0; i
< length
; i
++)
2818 tree x
= va_arg (p
, tree
);
2819 TREE_OPERAND (t
, i
) = x
;
2822 if (code
== COMPOUND_EXPR
&& TREE_CODE (non_dep
) != COMPOUND_EXPR
)
2823 /* This should not be considered a COMPOUND_EXPR, because it
2824 resolves to an overload. */
2825 COMPOUND_EXPR_OVERLOADED (t
) = 1;
2828 return convert_from_reference (t
);
2831 /* Similar to `build_nt_call_vec', but for template definitions of
2832 non-dependent expressions. NON_DEP is the non-dependent expression
2833 that has been built. */
2836 build_min_non_dep_call_vec (tree non_dep
, tree fn
, vec
<tree
, va_gc
> *argvec
)
2838 tree t
= build_nt_call_vec (fn
, argvec
);
2839 if (REFERENCE_REF_P (non_dep
))
2840 non_dep
= TREE_OPERAND (non_dep
, 0);
2841 TREE_TYPE (t
) = TREE_TYPE (non_dep
);
2842 TREE_SIDE_EFFECTS (t
) = TREE_SIDE_EFFECTS (non_dep
);
2843 return convert_from_reference (t
);
2846 /* Similar to build_min_non_dep, but for expressions that have been resolved to
2847 a call to an operator overload. OP is the operator that has been
2848 overloaded. NON_DEP is the non-dependent expression that's been built,
2849 which should be a CALL_EXPR or an INDIRECT_REF to a CALL_EXPR. OVERLOAD is
2850 the overload that NON_DEP is calling. */
2853 build_min_non_dep_op_overload (enum tree_code op
,
2858 int nargs
, expected_nargs
;
2860 vec
<tree
, va_gc
> *args
;
2862 if (REFERENCE_REF_P (non_dep
))
2863 non_dep
= TREE_OPERAND (non_dep
, 0);
2865 nargs
= call_expr_nargs (non_dep
);
2867 expected_nargs
= cp_tree_code_length (op
);
2868 if (op
== POSTINCREMENT_EXPR
2869 || op
== POSTDECREMENT_EXPR
)
2870 expected_nargs
+= 1;
2871 gcc_assert (nargs
== expected_nargs
);
2873 args
= make_tree_vector ();
2874 va_start (p
, overload
);
2876 if (TREE_CODE (TREE_TYPE (overload
)) == FUNCTION_TYPE
)
2879 for (int i
= 0; i
< nargs
; i
++)
2881 tree arg
= va_arg (p
, tree
);
2882 vec_safe_push (args
, arg
);
2885 else if (TREE_CODE (TREE_TYPE (overload
)) == METHOD_TYPE
)
2887 tree object
= va_arg (p
, tree
);
2888 tree binfo
= TYPE_BINFO (TREE_TYPE (object
));
2889 tree method
= build_baselink (binfo
, binfo
, overload
, NULL_TREE
);
2890 fn
= build_min (COMPONENT_REF
, TREE_TYPE (overload
),
2891 object
, method
, NULL_TREE
);
2892 for (int i
= 1; i
< nargs
; i
++)
2894 tree arg
= va_arg (p
, tree
);
2895 vec_safe_push (args
, arg
);
2902 call
= build_min_non_dep_call_vec (non_dep
, fn
, args
);
2903 release_tree_vector (args
);
2905 tree call_expr
= call
;
2906 if (REFERENCE_REF_P (call_expr
))
2907 call_expr
= TREE_OPERAND (call_expr
, 0);
2908 KOENIG_LOOKUP_P (call_expr
) = KOENIG_LOOKUP_P (non_dep
);
2914 get_type_decl (tree t
)
2916 if (TREE_CODE (t
) == TYPE_DECL
)
2919 return TYPE_STUB_DECL (t
);
2920 gcc_assert (t
== error_mark_node
);
2924 /* Returns the namespace that contains DECL, whether directly or
2928 decl_namespace_context (tree decl
)
2932 if (TREE_CODE (decl
) == NAMESPACE_DECL
)
2934 else if (TYPE_P (decl
))
2935 decl
= CP_DECL_CONTEXT (TYPE_MAIN_DECL (decl
));
2937 decl
= CP_DECL_CONTEXT (decl
);
2941 /* Returns true if decl is within an anonymous namespace, however deeply
2942 nested, or false otherwise. */
2945 decl_anon_ns_mem_p (const_tree decl
)
2949 if (decl
== NULL_TREE
|| decl
== error_mark_node
)
2951 if (TREE_CODE (decl
) == NAMESPACE_DECL
2952 && DECL_NAME (decl
) == NULL_TREE
)
2954 /* Classes and namespaces inside anonymous namespaces have
2955 TREE_PUBLIC == 0, so we can shortcut the search. */
2956 else if (TYPE_P (decl
))
2957 return (TREE_PUBLIC (TYPE_MAIN_DECL (decl
)) == 0);
2958 else if (TREE_CODE (decl
) == NAMESPACE_DECL
)
2959 return (TREE_PUBLIC (decl
) == 0);
2961 decl
= DECL_CONTEXT (decl
);
2965 /* Subroutine of cp_tree_equal: t1 and t2 are the CALL_EXPR_FNs of two
2966 CALL_EXPRS. Return whether they are equivalent. */
2969 called_fns_equal (tree t1
, tree t2
)
2971 /* Core 1321: dependent names are equivalent even if the overload sets
2972 are different. But do compare explicit template arguments. */
2973 tree name1
= dependent_name (t1
);
2974 tree name2
= dependent_name (t2
);
2977 tree targs1
= NULL_TREE
, targs2
= NULL_TREE
;
2982 if (TREE_CODE (t1
) == TEMPLATE_ID_EXPR
)
2983 targs1
= TREE_OPERAND (t1
, 1);
2984 if (TREE_CODE (t2
) == TEMPLATE_ID_EXPR
)
2985 targs2
= TREE_OPERAND (t2
, 1);
2986 return cp_tree_equal (targs1
, targs2
);
2989 return cp_tree_equal (t1
, t2
);
2992 /* Return truthvalue of whether T1 is the same tree structure as T2.
2993 Return 1 if they are the same. Return 0 if they are different. */
2996 cp_tree_equal (tree t1
, tree t2
)
2998 enum tree_code code1
, code2
;
3005 code1
= TREE_CODE (t1
);
3006 code2
= TREE_CODE (t2
);
3014 /* There's only a single VOID_CST node, so we should never reach
3019 return tree_int_cst_equal (t1
, t2
);
3022 return real_equal (&TREE_REAL_CST (t1
), &TREE_REAL_CST (t2
));
3025 return TREE_STRING_LENGTH (t1
) == TREE_STRING_LENGTH (t2
)
3026 && !memcmp (TREE_STRING_POINTER (t1
), TREE_STRING_POINTER (t2
),
3027 TREE_STRING_LENGTH (t1
));
3030 return FIXED_VALUES_IDENTICAL (TREE_FIXED_CST (t1
),
3031 TREE_FIXED_CST (t2
));
3034 return cp_tree_equal (TREE_REALPART (t1
), TREE_REALPART (t2
))
3035 && cp_tree_equal (TREE_IMAGPART (t1
), TREE_IMAGPART (t2
));
3038 return operand_equal_p (t1
, t2
, OEP_ONLY_CONST
);
3041 /* We need to do this when determining whether or not two
3042 non-type pointer to member function template arguments
3044 if (!same_type_p (TREE_TYPE (t1
), TREE_TYPE (t2
))
3045 || CONSTRUCTOR_NELTS (t1
) != CONSTRUCTOR_NELTS (t2
))
3050 FOR_EACH_CONSTRUCTOR_ELT (CONSTRUCTOR_ELTS (t1
), i
, field
, value
)
3052 constructor_elt
*elt2
= CONSTRUCTOR_ELT (t2
, i
);
3053 if (!cp_tree_equal (field
, elt2
->index
)
3054 || !cp_tree_equal (value
, elt2
->value
))
3061 if (!cp_tree_equal (TREE_PURPOSE (t1
), TREE_PURPOSE (t2
)))
3063 if (!cp_tree_equal (TREE_VALUE (t1
), TREE_VALUE (t2
)))
3065 return cp_tree_equal (TREE_CHAIN (t1
), TREE_CHAIN (t2
));
3068 return cp_tree_equal (TREE_OPERAND (t1
, 0), TREE_OPERAND (t2
, 0));
3073 call_expr_arg_iterator iter1
, iter2
;
3074 if (!called_fns_equal (CALL_EXPR_FN (t1
), CALL_EXPR_FN (t2
)))
3076 for (arg1
= first_call_expr_arg (t1
, &iter1
),
3077 arg2
= first_call_expr_arg (t2
, &iter2
);
3079 arg1
= next_call_expr_arg (&iter1
),
3080 arg2
= next_call_expr_arg (&iter2
))
3081 if (!cp_tree_equal (arg1
, arg2
))
3090 tree o1
= TREE_OPERAND (t1
, 0);
3091 tree o2
= TREE_OPERAND (t2
, 0);
3093 /* Special case: if either target is an unallocated VAR_DECL,
3094 it means that it's going to be unified with whatever the
3095 TARGET_EXPR is really supposed to initialize, so treat it
3096 as being equivalent to anything. */
3097 if (VAR_P (o1
) && DECL_NAME (o1
) == NULL_TREE
3098 && !DECL_RTL_SET_P (o1
))
3100 else if (VAR_P (o2
) && DECL_NAME (o2
) == NULL_TREE
3101 && !DECL_RTL_SET_P (o2
))
3103 else if (!cp_tree_equal (o1
, o2
))
3106 return cp_tree_equal (TREE_OPERAND (t1
, 1), TREE_OPERAND (t2
, 1));
3109 case WITH_CLEANUP_EXPR
:
3110 if (!cp_tree_equal (TREE_OPERAND (t1
, 0), TREE_OPERAND (t2
, 0)))
3112 return cp_tree_equal (TREE_OPERAND (t1
, 1), TREE_OPERAND (t1
, 1));
3115 if (TREE_OPERAND (t1
, 1) != TREE_OPERAND (t2
, 1))
3117 return cp_tree_equal (TREE_OPERAND (t1
, 0), TREE_OPERAND (t2
, 0));
3120 /* For comparing uses of parameters in late-specified return types
3121 with an out-of-class definition of the function, but can also come
3122 up for expressions that involve 'this' in a member function
3125 if (comparing_specializations
&& !CONSTRAINT_VAR_P (t1
))
3126 /* When comparing hash table entries, only an exact match is
3127 good enough; we don't want to replace 'this' with the
3128 version from another function. But be more flexible
3129 with local parameters in a requires-expression. */
3132 if (same_type_p (TREE_TYPE (t1
), TREE_TYPE (t2
)))
3134 if (DECL_ARTIFICIAL (t1
) ^ DECL_ARTIFICIAL (t2
))
3136 if (CONSTRAINT_VAR_P (t1
) ^ CONSTRAINT_VAR_P (t2
))
3138 if (DECL_ARTIFICIAL (t1
)
3139 || (DECL_PARM_LEVEL (t1
) == DECL_PARM_LEVEL (t2
)
3140 && DECL_PARM_INDEX (t1
) == DECL_PARM_INDEX (t2
)))
3150 case IDENTIFIER_NODE
:
3155 return (BASELINK_BINFO (t1
) == BASELINK_BINFO (t2
)
3156 && BASELINK_ACCESS_BINFO (t1
) == BASELINK_ACCESS_BINFO (t2
)
3157 && BASELINK_QUALIFIED_P (t1
) == BASELINK_QUALIFIED_P (t2
)
3158 && cp_tree_equal (BASELINK_FUNCTIONS (t1
),
3159 BASELINK_FUNCTIONS (t2
)));
3161 case TEMPLATE_PARM_INDEX
:
3162 return (TEMPLATE_PARM_IDX (t1
) == TEMPLATE_PARM_IDX (t2
)
3163 && TEMPLATE_PARM_LEVEL (t1
) == TEMPLATE_PARM_LEVEL (t2
)
3164 && (TEMPLATE_PARM_PARAMETER_PACK (t1
)
3165 == TEMPLATE_PARM_PARAMETER_PACK (t2
))
3166 && same_type_p (TREE_TYPE (TEMPLATE_PARM_DECL (t1
)),
3167 TREE_TYPE (TEMPLATE_PARM_DECL (t2
))));
3169 case TEMPLATE_ID_EXPR
:
3170 return (cp_tree_equal (TREE_OPERAND (t1
, 0), TREE_OPERAND (t2
, 0))
3171 && cp_tree_equal (TREE_OPERAND (t1
, 1), TREE_OPERAND (t2
, 1)));
3173 case CONSTRAINT_INFO
:
3174 return cp_tree_equal (CI_ASSOCIATED_CONSTRAINTS (t1
),
3175 CI_ASSOCIATED_CONSTRAINTS (t2
));
3180 if (TREE_VEC_LENGTH (t1
) != TREE_VEC_LENGTH (t2
))
3182 for (ix
= TREE_VEC_LENGTH (t1
); ix
--;)
3183 if (!cp_tree_equal (TREE_VEC_ELT (t1
, ix
),
3184 TREE_VEC_ELT (t2
, ix
)))
3192 tree o1
= TREE_OPERAND (t1
, 0);
3193 tree o2
= TREE_OPERAND (t2
, 0);
3195 if (code1
== SIZEOF_EXPR
)
3197 if (SIZEOF_EXPR_TYPE_P (t1
))
3198 o1
= TREE_TYPE (o1
);
3199 if (SIZEOF_EXPR_TYPE_P (t2
))
3200 o2
= TREE_TYPE (o2
);
3202 if (TREE_CODE (o1
) != TREE_CODE (o2
))
3205 return same_type_p (o1
, o2
);
3207 return cp_tree_equal (o1
, o2
);
3212 tree t1_op1
, t2_op1
;
3214 if (!cp_tree_equal (TREE_OPERAND (t1
, 0), TREE_OPERAND (t2
, 0)))
3217 t1_op1
= TREE_OPERAND (t1
, 1);
3218 t2_op1
= TREE_OPERAND (t2
, 1);
3219 if (TREE_CODE (t1_op1
) != TREE_CODE (t2_op1
))
3222 return cp_tree_equal (TREE_OPERAND (t1
, 2), TREE_OPERAND (t2
, 2));
3226 /* Two pointer-to-members are the same if they point to the same
3227 field or function in the same class. */
3228 if (PTRMEM_CST_MEMBER (t1
) != PTRMEM_CST_MEMBER (t2
))
3231 return same_type_p (PTRMEM_CST_CLASS (t1
), PTRMEM_CST_CLASS (t2
));
3234 if (OVL_FUNCTION (t1
) != OVL_FUNCTION (t2
))
3236 return cp_tree_equal (OVL_CHAIN (t1
), OVL_CHAIN (t2
));
3239 if (TRAIT_EXPR_KIND (t1
) != TRAIT_EXPR_KIND (t2
))
3241 return same_type_p (TRAIT_EXPR_TYPE1 (t1
), TRAIT_EXPR_TYPE1 (t2
))
3242 && cp_tree_equal (TRAIT_EXPR_TYPE2 (t1
), TRAIT_EXPR_TYPE2 (t2
));
3245 case STATIC_CAST_EXPR
:
3246 case REINTERPRET_CAST_EXPR
:
3247 case CONST_CAST_EXPR
:
3248 case DYNAMIC_CAST_EXPR
:
3249 case IMPLICIT_CONV_EXPR
:
3252 case NON_LVALUE_EXPR
:
3253 case VIEW_CONVERT_EXPR
:
3254 if (!same_type_p (TREE_TYPE (t1
), TREE_TYPE (t2
)))
3256 /* Now compare operands as usual. */
3259 case DEFERRED_NOEXCEPT
:
3260 return (cp_tree_equal (DEFERRED_NOEXCEPT_PATTERN (t1
),
3261 DEFERRED_NOEXCEPT_PATTERN (t2
))
3262 && comp_template_args (DEFERRED_NOEXCEPT_ARGS (t1
),
3263 DEFERRED_NOEXCEPT_ARGS (t2
)));
3270 switch (TREE_CODE_CLASS (code1
))
3274 case tcc_comparison
:
3275 case tcc_expression
:
3282 n
= cp_tree_operand_length (t1
);
3283 if (TREE_CODE_CLASS (code1
) == tcc_vl_exp
3284 && n
!= TREE_OPERAND_LENGTH (t2
))
3287 for (i
= 0; i
< n
; ++i
)
3288 if (!cp_tree_equal (TREE_OPERAND (t1
, i
), TREE_OPERAND (t2
, i
)))
3295 return same_type_p (t1
, t2
);
3299 /* We can get here with --disable-checking. */
3303 /* The type of ARG when used as an lvalue. */
3306 lvalue_type (tree arg
)
3308 tree type
= TREE_TYPE (arg
);
3312 /* The type of ARG for printing error messages; denote lvalues with
3316 error_type (tree arg
)
3318 tree type
= TREE_TYPE (arg
);
3320 if (TREE_CODE (type
) == ARRAY_TYPE
)
3322 else if (TREE_CODE (type
) == ERROR_MARK
)
3324 else if (real_lvalue_p (arg
))
3325 type
= build_reference_type (lvalue_type (arg
));
3326 else if (MAYBE_CLASS_TYPE_P (type
))
3327 type
= lvalue_type (arg
);
3332 /* Does FUNCTION use a variable-length argument list? */
3335 varargs_function_p (const_tree function
)
3337 return stdarg_p (TREE_TYPE (function
));
3340 /* Returns 1 if decl is a member of a class. */
3343 member_p (const_tree decl
)
3345 const_tree
const ctx
= DECL_CONTEXT (decl
);
3346 return (ctx
&& TYPE_P (ctx
));
3349 /* Create a placeholder for member access where we don't actually have an
3350 object that the access is against. */
3353 build_dummy_object (tree type
)
3355 tree decl
= build1 (CONVERT_EXPR
, build_pointer_type (type
), void_node
);
3356 return cp_build_indirect_ref (decl
, RO_NULL
, tf_warning_or_error
);
3359 /* We've gotten a reference to a member of TYPE. Return *this if appropriate,
3360 or a dummy object otherwise. If BINFOP is non-0, it is filled with the
3361 binfo path from current_class_type to TYPE, or 0. */
3364 maybe_dummy_object (tree type
, tree
* binfop
)
3368 tree current
= current_nonlambda_class_type ();
3371 && (binfo
= lookup_base (current
, type
, ba_any
, NULL
,
3372 tf_warning_or_error
)))
3376 /* Reference from a nested class member function. */
3378 binfo
= TYPE_BINFO (type
);
3384 if (current_class_ref
3385 /* current_class_ref might not correspond to current_class_type if
3386 we're in tsubst_default_argument or a lambda-declarator; in either
3387 case, we want to use current_class_ref if it matches CONTEXT. */
3388 && (same_type_ignoring_top_level_qualifiers_p
3389 (TREE_TYPE (current_class_ref
), context
)))
3390 decl
= current_class_ref
;
3392 decl
= build_dummy_object (context
);
3397 /* Returns 1 if OB is a placeholder object, or a pointer to one. */
3400 is_dummy_object (const_tree ob
)
3402 if (INDIRECT_REF_P (ob
))
3403 ob
= TREE_OPERAND (ob
, 0);
3404 return (TREE_CODE (ob
) == CONVERT_EXPR
3405 && TREE_OPERAND (ob
, 0) == void_node
);
3408 /* Returns 1 iff type T is something we want to treat as a scalar type for
3409 the purpose of deciding whether it is trivial/POD/standard-layout. */
3412 scalarish_type_p (const_tree t
)
3414 if (t
== error_mark_node
)
3417 return (SCALAR_TYPE_P (t
) || VECTOR_TYPE_P (t
));
3420 /* Returns true iff T requires non-trivial default initialization. */
3423 type_has_nontrivial_default_init (const_tree t
)
3425 t
= strip_array_types (CONST_CAST_TREE (t
));
3427 if (CLASS_TYPE_P (t
))
3428 return TYPE_HAS_COMPLEX_DFLT (t
);
3433 /* Returns true iff copying an object of type T (including via move
3434 constructor) is non-trivial. That is, T has no non-trivial copy
3435 constructors and no non-trivial move constructors. */
3438 type_has_nontrivial_copy_init (const_tree t
)
3440 t
= strip_array_types (CONST_CAST_TREE (t
));
3442 if (CLASS_TYPE_P (t
))
3444 gcc_assert (COMPLETE_TYPE_P (t
));
3445 return ((TYPE_HAS_COPY_CTOR (t
)
3446 && TYPE_HAS_COMPLEX_COPY_CTOR (t
))
3447 || TYPE_HAS_COMPLEX_MOVE_CTOR (t
));
3453 /* Returns 1 iff type T is a trivially copyable type, as defined in
3454 [basic.types] and [class]. */
3457 trivially_copyable_p (const_tree t
)
3459 t
= strip_array_types (CONST_CAST_TREE (t
));
3461 if (CLASS_TYPE_P (t
))
3462 return ((!TYPE_HAS_COPY_CTOR (t
)
3463 || !TYPE_HAS_COMPLEX_COPY_CTOR (t
))
3464 && !TYPE_HAS_COMPLEX_MOVE_CTOR (t
)
3465 && (!TYPE_HAS_COPY_ASSIGN (t
)
3466 || !TYPE_HAS_COMPLEX_COPY_ASSIGN (t
))
3467 && !TYPE_HAS_COMPLEX_MOVE_ASSIGN (t
)
3468 && TYPE_HAS_TRIVIAL_DESTRUCTOR (t
));
3470 return !CP_TYPE_VOLATILE_P (t
) && scalarish_type_p (t
);
3473 /* Returns 1 iff type T is a trivial type, as defined in [basic.types] and
3477 trivial_type_p (const_tree t
)
3479 t
= strip_array_types (CONST_CAST_TREE (t
));
3481 if (CLASS_TYPE_P (t
))
3482 return (TYPE_HAS_TRIVIAL_DFLT (t
)
3483 && trivially_copyable_p (t
));
3485 return scalarish_type_p (t
);
3488 /* Returns 1 iff type T is a POD type, as defined in [basic.types]. */
3491 pod_type_p (const_tree t
)
3493 /* This CONST_CAST is okay because strip_array_types returns its
3494 argument unmodified and we assign it to a const_tree. */
3495 t
= strip_array_types (CONST_CAST_TREE(t
));
3497 if (!CLASS_TYPE_P (t
))
3498 return scalarish_type_p (t
);
3499 else if (cxx_dialect
> cxx98
)
3500 /* [class]/10: A POD struct is a class that is both a trivial class and a
3501 standard-layout class, and has no non-static data members of type
3502 non-POD struct, non-POD union (or array of such types).
3504 We don't need to check individual members because if a member is
3505 non-std-layout or non-trivial, the class will be too. */
3506 return (std_layout_type_p (t
) && trivial_type_p (t
));
3508 /* The C++98 definition of POD is different. */
3509 return !CLASSTYPE_NON_LAYOUT_POD_P (t
);
3512 /* Returns true iff T is POD for the purpose of layout, as defined in the
3516 layout_pod_type_p (const_tree t
)
3518 t
= strip_array_types (CONST_CAST_TREE (t
));
3520 if (CLASS_TYPE_P (t
))
3521 return !CLASSTYPE_NON_LAYOUT_POD_P (t
);
3523 return scalarish_type_p (t
);
3526 /* Returns true iff T is a standard-layout type, as defined in
3530 std_layout_type_p (const_tree t
)
3532 t
= strip_array_types (CONST_CAST_TREE (t
));
3534 if (CLASS_TYPE_P (t
))
3535 return !CLASSTYPE_NON_STD_LAYOUT (t
);
3537 return scalarish_type_p (t
);
3540 /* Nonzero iff type T is a class template implicit specialization. */
3543 class_tmpl_impl_spec_p (const_tree t
)
3545 return CLASS_TYPE_P (t
) && CLASSTYPE_TEMPLATE_INSTANTIATION (t
);
3548 /* Returns 1 iff zero initialization of type T means actually storing
3552 zero_init_p (const_tree t
)
3554 /* This CONST_CAST is okay because strip_array_types returns its
3555 argument unmodified and we assign it to a const_tree. */
3556 t
= strip_array_types (CONST_CAST_TREE(t
));
3558 if (t
== error_mark_node
)
3561 /* NULL pointers to data members are initialized with -1. */
3562 if (TYPE_PTRDATAMEM_P (t
))
3565 /* Classes that contain types that can't be zero-initialized, cannot
3566 be zero-initialized themselves. */
3567 if (CLASS_TYPE_P (t
) && CLASSTYPE_NON_ZERO_INIT_P (t
))
3573 /* Handle the C++17 [[nodiscard]] attribute, which is similar to the GNU
3574 warn_unused_result attribute. */
3577 handle_nodiscard_attribute (tree
*node
, tree name
, tree
/*args*/,
3578 int /*flags*/, bool *no_add_attrs
)
3580 if (TREE_CODE (*node
) == FUNCTION_DECL
)
3582 if (VOID_TYPE_P (TREE_TYPE (TREE_TYPE (*node
))))
3583 warning (OPT_Wattributes
, "%qE attribute applied to %qD with void "
3584 "return type", name
, *node
);
3586 else if (OVERLOAD_TYPE_P (*node
))
3590 warning (OPT_Wattributes
, "%qE attribute can only be applied to "
3591 "functions or to class or enumeration types", name
);
3592 *no_add_attrs
= true;
3597 /* Table of valid C++ attributes. */
3598 const struct attribute_spec cxx_attribute_table
[] =
3600 /* { name, min_len, max_len, decl_req, type_req, fn_type_req, handler,
3601 affects_type_identity } */
3602 { "java_interface", 0, 0, false, false, false,
3603 handle_java_interface_attribute
, false },
3604 { "init_priority", 1, 1, true, false, false,
3605 handle_init_priority_attribute
, false },
3606 { "abi_tag", 1, -1, false, false, false,
3607 handle_abi_tag_attribute
, true },
3608 { NULL
, 0, 0, false, false, false, NULL
, false }
3611 /* Table of C++ standard attributes. */
3612 const struct attribute_spec std_attribute_table
[] =
3614 /* { name, min_len, max_len, decl_req, type_req, fn_type_req, handler,
3615 affects_type_identity } */
3616 { "maybe_unused", 0, 0, false, false, false,
3617 handle_unused_attribute
, false },
3618 { "nodiscard", 0, 0, false, false, false,
3619 handle_nodiscard_attribute
, false },
3620 { NULL
, 0, 0, false, false, false, NULL
, false }
3623 /* Handle a "java_interface" attribute; arguments as in
3624 struct attribute_spec.handler. */
3626 handle_java_interface_attribute (tree
* node
,
3633 || !CLASS_TYPE_P (*node
)
3634 || !TYPE_FOR_JAVA (*node
))
3636 error ("%qE attribute can only be applied to Java class definitions",
3638 *no_add_attrs
= true;
3641 if (!(flags
& (int) ATTR_FLAG_TYPE_IN_PLACE
))
3642 *node
= build_variant_type_copy (*node
);
3643 TYPE_JAVA_INTERFACE (*node
) = 1;
3648 /* Handle an "init_priority" attribute; arguments as in
3649 struct attribute_spec.handler. */
3651 handle_init_priority_attribute (tree
* node
,
3657 tree initp_expr
= TREE_VALUE (args
);
3659 tree type
= TREE_TYPE (decl
);
3662 STRIP_NOPS (initp_expr
);
3663 initp_expr
= default_conversion (initp_expr
);
3665 initp_expr
= maybe_constant_value (initp_expr
);
3667 if (!initp_expr
|| TREE_CODE (initp_expr
) != INTEGER_CST
)
3669 error ("requested init_priority is not an integer constant");
3670 cxx_constant_value (initp_expr
);
3671 *no_add_attrs
= true;
3675 pri
= TREE_INT_CST_LOW (initp_expr
);
3677 type
= strip_array_types (type
);
3679 if (decl
== NULL_TREE
3681 || !TREE_STATIC (decl
)
3682 || DECL_EXTERNAL (decl
)
3683 || (TREE_CODE (type
) != RECORD_TYPE
3684 && TREE_CODE (type
) != UNION_TYPE
)
3685 /* Static objects in functions are initialized the
3686 first time control passes through that
3687 function. This is not precise enough to pin down an
3688 init_priority value, so don't allow it. */
3689 || current_function_decl
)
3691 error ("can only use %qE attribute on file-scope definitions "
3692 "of objects of class type", name
);
3693 *no_add_attrs
= true;
3697 if (pri
> MAX_INIT_PRIORITY
|| pri
<= 0)
3699 error ("requested init_priority is out of range");
3700 *no_add_attrs
= true;
3704 /* Check for init_priorities that are reserved for
3705 language and runtime support implementations.*/
3706 if (pri
<= MAX_RESERVED_INIT_PRIORITY
)
3709 (0, "requested init_priority is reserved for internal use");
3712 if (SUPPORTS_INIT_PRIORITY
)
3714 SET_DECL_INIT_PRIORITY (decl
, pri
);
3715 DECL_HAS_INIT_PRIORITY_P (decl
) = 1;
3720 error ("%qE attribute is not supported on this platform", name
);
3721 *no_add_attrs
= true;
3726 /* DECL is being redeclared; the old declaration had the abi tags in OLD,
3727 and the new one has the tags in NEW_. Give an error if there are tags
3728 in NEW_ that weren't in OLD. */
3731 check_abi_tag_redeclaration (const_tree decl
, const_tree old
, const_tree new_
)
3733 if (old
&& TREE_CODE (TREE_VALUE (old
)) == TREE_LIST
)
3734 old
= TREE_VALUE (old
);
3735 if (new_
&& TREE_CODE (TREE_VALUE (new_
)) == TREE_LIST
)
3736 new_
= TREE_VALUE (new_
);
3738 for (const_tree t
= new_
; t
; t
= TREE_CHAIN (t
))
3740 tree str
= TREE_VALUE (t
);
3741 for (const_tree in
= old
; in
; in
= TREE_CHAIN (in
))
3743 tree ostr
= TREE_VALUE (in
);
3744 if (cp_tree_equal (str
, ostr
))
3747 error ("redeclaration of %qD adds abi tag %E", decl
, str
);
3753 inform (DECL_SOURCE_LOCATION (decl
), "previous declaration here");
3759 /* The abi_tag attribute with the name NAME was given ARGS. If they are
3760 ill-formed, give an error and return false; otherwise, return true. */
3763 check_abi_tag_args (tree args
, tree name
)
3767 error ("the %qE attribute requires arguments", name
);
3770 for (tree arg
= args
; arg
; arg
= TREE_CHAIN (arg
))
3772 tree elt
= TREE_VALUE (arg
);
3773 if (TREE_CODE (elt
) != STRING_CST
3774 || (!same_type_ignoring_top_level_qualifiers_p
3775 (strip_array_types (TREE_TYPE (elt
)),
3778 error ("arguments to the %qE attribute must be narrow string "
3782 const char *begin
= TREE_STRING_POINTER (elt
);
3783 const char *end
= begin
+ TREE_STRING_LENGTH (elt
);
3784 for (const char *p
= begin
; p
!= end
; ++p
)
3789 if (!ISALPHA (c
) && c
!= '_')
3791 error ("arguments to the %qE attribute must contain valid "
3792 "identifiers", name
);
3793 inform (input_location
, "%<%c%> is not a valid first "
3794 "character for an identifier", c
);
3798 else if (p
== end
- 1)
3799 gcc_assert (c
== 0);
3802 if (!ISALNUM (c
) && c
!= '_')
3804 error ("arguments to the %qE attribute must contain valid "
3805 "identifiers", name
);
3806 inform (input_location
, "%<%c%> is not a valid character "
3807 "in an identifier", c
);
3816 /* Handle an "abi_tag" attribute; arguments as in
3817 struct attribute_spec.handler. */
3820 handle_abi_tag_attribute (tree
* node
, tree name
, tree args
,
3821 int flags
, bool* no_add_attrs
)
3823 if (!check_abi_tag_args (args
, name
))
3828 if (!OVERLOAD_TYPE_P (*node
))
3830 error ("%qE attribute applied to non-class, non-enum type %qT",
3834 else if (!(flags
& (int)ATTR_FLAG_TYPE_IN_PLACE
))
3836 error ("%qE attribute applied to %qT after its definition",
3840 else if (CLASS_TYPE_P (*node
)
3841 && CLASSTYPE_TEMPLATE_INSTANTIATION (*node
))
3843 warning (OPT_Wattributes
, "ignoring %qE attribute applied to "
3844 "template instantiation %qT", name
, *node
);
3847 else if (CLASS_TYPE_P (*node
)
3848 && CLASSTYPE_TEMPLATE_SPECIALIZATION (*node
))
3850 warning (OPT_Wattributes
, "ignoring %qE attribute applied to "
3851 "template specialization %qT", name
, *node
);
3855 tree attributes
= TYPE_ATTRIBUTES (*node
);
3856 tree decl
= TYPE_NAME (*node
);
3858 /* Make sure all declarations have the same abi tags. */
3859 if (DECL_SOURCE_LOCATION (decl
) != input_location
)
3861 if (!check_abi_tag_redeclaration (decl
,
3862 lookup_attribute ("abi_tag",
3870 if (!VAR_OR_FUNCTION_DECL_P (*node
))
3872 error ("%qE attribute applied to non-function, non-variable %qD",
3876 else if (DECL_LANGUAGE (*node
) == lang_c
)
3878 error ("%qE attribute applied to extern \"C\" declaration %qD",
3887 *no_add_attrs
= true;
3891 /* Return a new PTRMEM_CST of the indicated TYPE. The MEMBER is the
3892 thing pointed to by the constant. */
3895 make_ptrmem_cst (tree type
, tree member
)
3897 tree ptrmem_cst
= make_node (PTRMEM_CST
);
3898 TREE_TYPE (ptrmem_cst
) = type
;
3899 PTRMEM_CST_MEMBER (ptrmem_cst
) = member
;
3903 /* Build a variant of TYPE that has the indicated ATTRIBUTES. May
3904 return an existing type if an appropriate type already exists. */
3907 cp_build_type_attribute_variant (tree type
, tree attributes
)
3911 new_type
= build_type_attribute_variant (type
, attributes
);
3912 if (TREE_CODE (new_type
) == FUNCTION_TYPE
3913 || TREE_CODE (new_type
) == METHOD_TYPE
)
3915 new_type
= build_exception_variant (new_type
,
3916 TYPE_RAISES_EXCEPTIONS (type
));
3917 new_type
= build_ref_qualified_type (new_type
,
3918 type_memfn_rqual (type
));
3921 /* Making a new main variant of a class type is broken. */
3922 gcc_assert (!CLASS_TYPE_P (type
) || new_type
== type
);
3927 /* Return TRUE if TYPE1 and TYPE2 are identical for type hashing purposes.
3928 Called only after doing all language independent checks. Only
3929 to check TYPE_RAISES_EXCEPTIONS for FUNCTION_TYPE, the rest is already
3930 compared in type_hash_eq. */
3933 cxx_type_hash_eq (const_tree typea
, const_tree typeb
)
3935 gcc_assert (TREE_CODE (typea
) == FUNCTION_TYPE
3936 || TREE_CODE (typea
) == METHOD_TYPE
);
3938 return comp_except_specs (TYPE_RAISES_EXCEPTIONS (typea
),
3939 TYPE_RAISES_EXCEPTIONS (typeb
), ce_exact
);
3942 /* Apply FUNC to all language-specific sub-trees of TP in a pre-order
3943 traversal. Called from walk_tree. */
3946 cp_walk_subtrees (tree
*tp
, int *walk_subtrees_p
, walk_tree_fn func
,
3947 void *data
, hash_set
<tree
> *pset
)
3949 enum tree_code code
= TREE_CODE (*tp
);
3952 #define WALK_SUBTREE(NODE) \
3955 result = cp_walk_tree (&(NODE), func, data, pset); \
3956 if (result) goto out; \
3960 /* Not one of the easy cases. We must explicitly go through the
3966 case TEMPLATE_TEMPLATE_PARM
:
3967 case BOUND_TEMPLATE_TEMPLATE_PARM
:
3968 case UNBOUND_CLASS_TEMPLATE
:
3969 case TEMPLATE_PARM_INDEX
:
3970 case TEMPLATE_TYPE_PARM
:
3973 case UNDERLYING_TYPE
:
3974 /* None of these have subtrees other than those already walked
3976 *walk_subtrees_p
= 0;
3980 WALK_SUBTREE (BASELINK_FUNCTIONS (*tp
));
3981 *walk_subtrees_p
= 0;
3985 WALK_SUBTREE (TREE_TYPE (*tp
));
3986 *walk_subtrees_p
= 0;
3990 WALK_SUBTREE (TREE_PURPOSE (*tp
));
3994 WALK_SUBTREE (OVL_FUNCTION (*tp
));
3995 WALK_SUBTREE (OVL_CHAIN (*tp
));
3996 *walk_subtrees_p
= 0;
4000 WALK_SUBTREE (DECL_NAME (*tp
));
4001 WALK_SUBTREE (USING_DECL_SCOPE (*tp
));
4002 WALK_SUBTREE (USING_DECL_DECLS (*tp
));
4003 *walk_subtrees_p
= 0;
4007 if (TYPE_PTRMEMFUNC_P (*tp
))
4008 WALK_SUBTREE (TYPE_PTRMEMFUNC_FN_TYPE_RAW (*tp
));
4011 case TYPE_ARGUMENT_PACK
:
4012 case NONTYPE_ARGUMENT_PACK
:
4014 tree args
= ARGUMENT_PACK_ARGS (*tp
);
4015 int i
, len
= TREE_VEC_LENGTH (args
);
4016 for (i
= 0; i
< len
; i
++)
4017 WALK_SUBTREE (TREE_VEC_ELT (args
, i
));
4021 case TYPE_PACK_EXPANSION
:
4022 WALK_SUBTREE (TREE_TYPE (*tp
));
4023 WALK_SUBTREE (PACK_EXPANSION_EXTRA_ARGS (*tp
));
4024 *walk_subtrees_p
= 0;
4027 case EXPR_PACK_EXPANSION
:
4028 WALK_SUBTREE (TREE_OPERAND (*tp
, 0));
4029 WALK_SUBTREE (PACK_EXPANSION_EXTRA_ARGS (*tp
));
4030 *walk_subtrees_p
= 0;
4034 case REINTERPRET_CAST_EXPR
:
4035 case STATIC_CAST_EXPR
:
4036 case CONST_CAST_EXPR
:
4037 case DYNAMIC_CAST_EXPR
:
4038 case IMPLICIT_CONV_EXPR
:
4039 if (TREE_TYPE (*tp
))
4040 WALK_SUBTREE (TREE_TYPE (*tp
));
4044 for (i
= 0; i
< TREE_CODE_LENGTH (TREE_CODE (*tp
)); ++i
)
4045 WALK_SUBTREE (TREE_OPERAND (*tp
, i
));
4047 *walk_subtrees_p
= 0;
4051 WALK_SUBTREE (TRAIT_EXPR_TYPE1 (*tp
));
4052 WALK_SUBTREE (TRAIT_EXPR_TYPE2 (*tp
));
4053 *walk_subtrees_p
= 0;
4057 WALK_SUBTREE (DECLTYPE_TYPE_EXPR (*tp
));
4058 *walk_subtrees_p
= 0;
4062 // Only recurse through the nested expression. Do not
4063 // walk the parameter list. Doing so causes false
4064 // positives in the pack expansion checker since the
4065 // requires parameters are introduced as pack expansions.
4066 WALK_SUBTREE (TREE_OPERAND (*tp
, 1));
4067 *walk_subtrees_p
= 0;
4074 /* We didn't find what we were looking for. */
4081 /* Like save_expr, but for C++. */
4084 cp_save_expr (tree expr
)
4086 /* There is no reason to create a SAVE_EXPR within a template; if
4087 needed, we can create the SAVE_EXPR when instantiating the
4088 template. Furthermore, the middle-end cannot handle C++-specific
4090 if (processing_template_decl
)
4092 return save_expr (expr
);
4095 /* Initialize tree.c. */
4100 list_hash_table
= hash_table
<list_hasher
>::create_ggc (61);
4101 register_scoped_attributes (std_attribute_table
, NULL
);
4104 /* Returns the kind of special function that DECL (a FUNCTION_DECL)
4105 is. Note that sfk_none is zero, so this function can be used as a
4106 predicate to test whether or not DECL is a special function. */
4108 special_function_kind
4109 special_function_p (const_tree decl
)
4111 /* Rather than doing all this stuff with magic names, we should
4112 probably have a field of type `special_function_kind' in
4113 DECL_LANG_SPECIFIC. */
4114 if (DECL_INHERITED_CTOR_BASE (decl
))
4115 return sfk_inheriting_constructor
;
4116 if (DECL_COPY_CONSTRUCTOR_P (decl
))
4117 return sfk_copy_constructor
;
4118 if (DECL_MOVE_CONSTRUCTOR_P (decl
))
4119 return sfk_move_constructor
;
4120 if (DECL_CONSTRUCTOR_P (decl
))
4121 return sfk_constructor
;
4122 if (DECL_OVERLOADED_OPERATOR_P (decl
) == NOP_EXPR
)
4124 if (copy_fn_p (decl
))
4125 return sfk_copy_assignment
;
4126 if (move_fn_p (decl
))
4127 return sfk_move_assignment
;
4129 if (DECL_MAYBE_IN_CHARGE_DESTRUCTOR_P (decl
))
4130 return sfk_destructor
;
4131 if (DECL_COMPLETE_DESTRUCTOR_P (decl
))
4132 return sfk_complete_destructor
;
4133 if (DECL_BASE_DESTRUCTOR_P (decl
))
4134 return sfk_base_destructor
;
4135 if (DECL_DELETING_DESTRUCTOR_P (decl
))
4136 return sfk_deleting_destructor
;
4137 if (DECL_CONV_FN_P (decl
))
4138 return sfk_conversion
;
4143 /* Returns nonzero if TYPE is a character type, including wchar_t. */
4146 char_type_p (tree type
)
4148 return (same_type_p (type
, char_type_node
)
4149 || same_type_p (type
, unsigned_char_type_node
)
4150 || same_type_p (type
, signed_char_type_node
)
4151 || same_type_p (type
, char16_type_node
)
4152 || same_type_p (type
, char32_type_node
)
4153 || same_type_p (type
, wchar_type_node
));
4156 /* Returns the kind of linkage associated with the indicated DECL. Th
4157 value returned is as specified by the language standard; it is
4158 independent of implementation details regarding template
4159 instantiation, etc. For example, it is possible that a declaration
4160 to which this function assigns external linkage would not show up
4161 as a global symbol when you run `nm' on the resulting object file. */
4164 decl_linkage (tree decl
)
4166 /* This function doesn't attempt to calculate the linkage from first
4167 principles as given in [basic.link]. Instead, it makes use of
4168 the fact that we have already set TREE_PUBLIC appropriately, and
4169 then handles a few special cases. Ideally, we would calculate
4170 linkage first, and then transform that into a concrete
4173 /* Things that don't have names have no linkage. */
4174 if (!DECL_NAME (decl
))
4177 /* Fields have no linkage. */
4178 if (TREE_CODE (decl
) == FIELD_DECL
)
4181 /* Things that are TREE_PUBLIC have external linkage. */
4182 if (TREE_PUBLIC (decl
))
4185 if (TREE_CODE (decl
) == NAMESPACE_DECL
)
4188 /* Linkage of a CONST_DECL depends on the linkage of the enumeration
4190 if (TREE_CODE (decl
) == CONST_DECL
)
4191 return decl_linkage (TYPE_NAME (DECL_CONTEXT (decl
)));
4193 /* Things in local scope do not have linkage, if they don't have
4195 if (decl_function_context (decl
))
4198 /* Members of the anonymous namespace also have TREE_PUBLIC unset, but
4199 are considered to have external linkage for language purposes, as do
4200 template instantiations on targets without weak symbols. DECLs really
4201 meant to have internal linkage have DECL_THIS_STATIC set. */
4202 if (TREE_CODE (decl
) == TYPE_DECL
)
4204 if (VAR_OR_FUNCTION_DECL_P (decl
))
4206 if (!DECL_THIS_STATIC (decl
))
4209 /* Static data members and static member functions from classes
4210 in anonymous namespace also don't have TREE_PUBLIC set. */
4211 if (DECL_CLASS_CONTEXT (decl
))
4215 /* Everything else has internal linkage. */
4219 /* Returns the storage duration of the object or reference associated with
4220 the indicated DECL, which should be a VAR_DECL or PARM_DECL. */
4223 decl_storage_duration (tree decl
)
4225 if (TREE_CODE (decl
) == PARM_DECL
)
4227 if (TREE_CODE (decl
) == FUNCTION_DECL
)
4229 gcc_assert (VAR_P (decl
));
4230 if (!TREE_STATIC (decl
)
4231 && !DECL_EXTERNAL (decl
))
4233 if (CP_DECL_THREAD_LOCAL_P (decl
))
4238 /* EXP is an expression that we want to pre-evaluate. Returns (in
4239 *INITP) an expression that will perform the pre-evaluation. The
4240 value returned by this function is a side-effect free expression
4241 equivalent to the pre-evaluated expression. Callers must ensure
4242 that *INITP is evaluated before EXP. */
4245 stabilize_expr (tree exp
, tree
* initp
)
4249 if (!TREE_SIDE_EFFECTS (exp
))
4250 init_expr
= NULL_TREE
;
4251 else if (VOID_TYPE_P (TREE_TYPE (exp
)))
4256 /* There are no expressions with REFERENCE_TYPE, but there can be call
4257 arguments with such a type; just treat it as a pointer. */
4258 else if (TREE_CODE (TREE_TYPE (exp
)) == REFERENCE_TYPE
4259 || SCALAR_TYPE_P (TREE_TYPE (exp
))
4260 || !lvalue_or_rvalue_with_address_p (exp
))
4262 init_expr
= get_target_expr (exp
);
4263 exp
= TARGET_EXPR_SLOT (init_expr
);
4264 if (CLASS_TYPE_P (TREE_TYPE (exp
)))
4271 bool xval
= !real_lvalue_p (exp
);
4272 exp
= cp_build_addr_expr (exp
, tf_warning_or_error
);
4273 init_expr
= get_target_expr (exp
);
4274 exp
= TARGET_EXPR_SLOT (init_expr
);
4275 exp
= cp_build_indirect_ref (exp
, RO_NULL
, tf_warning_or_error
);
4281 gcc_assert (!TREE_SIDE_EFFECTS (exp
));
4285 /* Add NEW_EXPR, an expression whose value we don't care about, after the
4286 similar expression ORIG. */
4289 add_stmt_to_compound (tree orig
, tree new_expr
)
4291 if (!new_expr
|| !TREE_SIDE_EFFECTS (new_expr
))
4293 if (!orig
|| !TREE_SIDE_EFFECTS (orig
))
4295 return build2 (COMPOUND_EXPR
, void_type_node
, orig
, new_expr
);
4298 /* Like stabilize_expr, but for a call whose arguments we want to
4299 pre-evaluate. CALL is modified in place to use the pre-evaluated
4300 arguments, while, upon return, *INITP contains an expression to
4301 compute the arguments. */
4304 stabilize_call (tree call
, tree
*initp
)
4306 tree inits
= NULL_TREE
;
4308 int nargs
= call_expr_nargs (call
);
4310 if (call
== error_mark_node
|| processing_template_decl
)
4316 gcc_assert (TREE_CODE (call
) == CALL_EXPR
);
4318 for (i
= 0; i
< nargs
; i
++)
4321 CALL_EXPR_ARG (call
, i
) =
4322 stabilize_expr (CALL_EXPR_ARG (call
, i
), &init
);
4323 inits
= add_stmt_to_compound (inits
, init
);
4329 /* Like stabilize_expr, but for an AGGR_INIT_EXPR whose arguments we want
4330 to pre-evaluate. CALL is modified in place to use the pre-evaluated
4331 arguments, while, upon return, *INITP contains an expression to
4332 compute the arguments. */
4335 stabilize_aggr_init (tree call
, tree
*initp
)
4337 tree inits
= NULL_TREE
;
4339 int nargs
= aggr_init_expr_nargs (call
);
4341 if (call
== error_mark_node
)
4344 gcc_assert (TREE_CODE (call
) == AGGR_INIT_EXPR
);
4346 for (i
= 0; i
< nargs
; i
++)
4349 AGGR_INIT_EXPR_ARG (call
, i
) =
4350 stabilize_expr (AGGR_INIT_EXPR_ARG (call
, i
), &init
);
4351 inits
= add_stmt_to_compound (inits
, init
);
4357 /* Like stabilize_expr, but for an initialization.
4359 If the initialization is for an object of class type, this function
4360 takes care not to introduce additional temporaries.
4362 Returns TRUE iff the expression was successfully pre-evaluated,
4363 i.e., if INIT is now side-effect free, except for, possibly, a
4364 single call to a constructor. */
4367 stabilize_init (tree init
, tree
*initp
)
4373 if (t
== error_mark_node
|| processing_template_decl
)
4376 if (TREE_CODE (t
) == INIT_EXPR
)
4377 t
= TREE_OPERAND (t
, 1);
4378 if (TREE_CODE (t
) == TARGET_EXPR
)
4379 t
= TARGET_EXPR_INITIAL (t
);
4381 /* If the RHS can be stabilized without breaking copy elision, stabilize
4382 it. We specifically don't stabilize class prvalues here because that
4383 would mean an extra copy, but they might be stabilized below. */
4384 if (TREE_CODE (init
) == INIT_EXPR
4385 && TREE_CODE (t
) != CONSTRUCTOR
4386 && TREE_CODE (t
) != AGGR_INIT_EXPR
4387 && (SCALAR_TYPE_P (TREE_TYPE (t
))
4388 || lvalue_or_rvalue_with_address_p (t
)))
4390 TREE_OPERAND (init
, 1) = stabilize_expr (t
, initp
);
4394 if (TREE_CODE (t
) == COMPOUND_EXPR
4395 && TREE_CODE (init
) == INIT_EXPR
)
4397 tree last
= expr_last (t
);
4398 /* Handle stabilizing the EMPTY_CLASS_EXPR pattern. */
4399 if (!TREE_SIDE_EFFECTS (last
))
4402 TREE_OPERAND (init
, 1) = last
;
4407 if (TREE_CODE (t
) == CONSTRUCTOR
)
4409 /* Aggregate initialization: stabilize each of the field
4412 constructor_elt
*ce
;
4414 vec
<constructor_elt
, va_gc
> *v
= CONSTRUCTOR_ELTS (t
);
4415 for (i
= 0; vec_safe_iterate (v
, i
, &ce
); ++i
)
4417 tree type
= TREE_TYPE (ce
->value
);
4419 if (TREE_CODE (type
) == REFERENCE_TYPE
4420 || SCALAR_TYPE_P (type
))
4421 ce
->value
= stabilize_expr (ce
->value
, &subinit
);
4422 else if (!stabilize_init (ce
->value
, &subinit
))
4424 *initp
= add_stmt_to_compound (*initp
, subinit
);
4429 if (TREE_CODE (t
) == CALL_EXPR
)
4431 stabilize_call (t
, initp
);
4435 if (TREE_CODE (t
) == AGGR_INIT_EXPR
)
4437 stabilize_aggr_init (t
, initp
);
4441 /* The initialization is being performed via a bitwise copy -- and
4442 the item copied may have side effects. */
4443 return !TREE_SIDE_EFFECTS (init
);
4446 /* Returns true if a cast to TYPE may appear in an integral constant
4450 cast_valid_in_integral_constant_expression_p (tree type
)
4452 return (INTEGRAL_OR_ENUMERATION_TYPE_P (type
)
4453 || cxx_dialect
>= cxx11
4454 || dependent_type_p (type
)
4455 || type
== error_mark_node
);
4458 /* Return true if we need to fix linkage information of DECL. */
4461 cp_fix_function_decl_p (tree decl
)
4463 /* Skip if DECL is not externally visible. */
4464 if (!TREE_PUBLIC (decl
))
4467 /* We need to fix DECL if it a appears to be exported but with no
4468 function body. Thunks do not have CFGs and we may need to
4469 handle them specially later. */
4470 if (!gimple_has_body_p (decl
)
4471 && !DECL_THUNK_P (decl
)
4472 && !DECL_EXTERNAL (decl
))
4474 struct cgraph_node
*node
= cgraph_node::get (decl
);
4476 /* Don't fix same_body aliases. Although they don't have their own
4477 CFG, they share it with what they alias to. */
4478 if (!node
|| !node
->alias
4479 || !vec_safe_length (node
->ref_list
.references
))
4486 /* Clean the C++ specific parts of the tree T. */
4489 cp_free_lang_data (tree t
)
4491 if (TREE_CODE (t
) == METHOD_TYPE
4492 || TREE_CODE (t
) == FUNCTION_TYPE
)
4494 /* Default args are not interesting anymore. */
4495 tree argtypes
= TYPE_ARG_TYPES (t
);
4498 TREE_PURPOSE (argtypes
) = 0;
4499 argtypes
= TREE_CHAIN (argtypes
);
4502 else if (TREE_CODE (t
) == FUNCTION_DECL
4503 && cp_fix_function_decl_p (t
))
4505 /* If T is used in this translation unit at all, the definition
4506 must exist somewhere else since we have decided to not emit it
4507 in this TU. So make it an external reference. */
4508 DECL_EXTERNAL (t
) = 1;
4509 TREE_STATIC (t
) = 0;
4511 if (TREE_CODE (t
) == NAMESPACE_DECL
)
4513 /* The list of users of a namespace isn't useful for the middle-end
4514 or debug generators. */
4515 DECL_NAMESPACE_USERS (t
) = NULL_TREE
;
4516 /* Neither do we need the leftover chaining of namespaces
4517 from the binding level. */
4518 DECL_CHAIN (t
) = NULL_TREE
;
4522 /* Stub for c-common. Please keep in sync with c-decl.c.
4523 FIXME: If address space support is target specific, then this
4524 should be a C target hook. But currently this is not possible,
4525 because this function is called via REGISTER_TARGET_PRAGMAS. */
4527 c_register_addr_space (const char * /*word*/, addr_space_t
/*as*/)
4531 /* Return the number of operands in T that we care about for things like
4535 cp_tree_operand_length (const_tree t
)
4537 enum tree_code code
= TREE_CODE (t
);
4539 if (TREE_CODE_CLASS (code
) == tcc_vl_exp
)
4540 return VL_EXP_OPERAND_LENGTH (t
);
4542 return cp_tree_code_length (code
);
4545 /* Like cp_tree_operand_length, but takes a tree_code CODE. */
4548 cp_tree_code_length (enum tree_code code
)
4550 gcc_assert (TREE_CODE_CLASS (code
) != tcc_vl_exp
);
4554 case PREINCREMENT_EXPR
:
4555 case PREDECREMENT_EXPR
:
4556 case POSTINCREMENT_EXPR
:
4557 case POSTDECREMENT_EXPR
:
4563 case EXPR_PACK_EXPANSION
:
4567 return TREE_CODE_LENGTH (code
);
4571 /* Implement -Wzero_as_null_pointer_constant. Return true if the
4572 conditions for the warning hold, false otherwise. */
4574 maybe_warn_zero_as_null_pointer_constant (tree expr
, location_t loc
)
4576 if (c_inhibit_evaluation_warnings
== 0
4577 && !NULLPTR_TYPE_P (TREE_TYPE (expr
)))
4579 warning_at (loc
, OPT_Wzero_as_null_pointer_constant
,
4580 "zero as null pointer constant");
4586 #if defined ENABLE_TREE_CHECKING && (GCC_VERSION >= 2007)
4587 /* Complain that some language-specific thing hanging off a tree
4588 node has been accessed improperly. */
4591 lang_check_failed (const char* file
, int line
, const char* function
)
4593 internal_error ("lang_* check: failed in %s, at %s:%d",
4594 function
, trim_filename (file
), line
);
4596 #endif /* ENABLE_TREE_CHECKING */
4598 #include "gt-cp-tree.h"