1 /* Language-dependent node constructors for parse phase of GNU compiler.
2 Copyright (C) 1987, 1988, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
3 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2007, 2008, 2009, 2010, 2011
4 Free Software Foundation, Inc.
5 Hacked by Michael Tiemann (tiemann@cygnus.com)
7 This file is part of GCC.
9 GCC is free software; you can redistribute it and/or modify
10 it under the terms of the GNU General Public License as published by
11 the Free Software Foundation; either version 3, or (at your option)
14 GCC is distributed in the hope that it will be useful,
15 but WITHOUT ANY WARRANTY; without even the implied warranty of
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 GNU General Public License for more details.
19 You should have received a copy of the GNU General Public License
20 along with GCC; see the file COPYING3. If not see
21 <http://www.gnu.org/licenses/>. */
25 #include "coretypes.h"
30 #include "tree-inline.h"
34 #include "splay-tree.h"
35 #include "gimple.h" /* gimple_has_body_p */
37 static tree
bot_manip (tree
*, int *, void *);
38 static tree
bot_replace (tree
*, int *, void *);
39 static int list_hash_eq (const void *, const void *);
40 static hashval_t
list_hash_pieces (tree
, tree
, tree
);
41 static hashval_t
list_hash (const void *);
42 static tree
build_target_expr (tree
, tree
, tsubst_flags_t
);
43 static tree
count_trees_r (tree
*, int *, void *);
44 static tree
verify_stmt_tree_r (tree
*, int *, void *);
45 static tree
build_local_temp (tree
);
47 static tree
handle_java_interface_attribute (tree
*, tree
, tree
, int, bool *);
48 static tree
handle_com_interface_attribute (tree
*, tree
, tree
, int, bool *);
49 static tree
handle_init_priority_attribute (tree
*, tree
, tree
, int, bool *);
51 /* If REF is an lvalue, returns the kind of lvalue that REF is.
52 Otherwise, returns clk_none. */
55 lvalue_kind (const_tree ref
)
57 cp_lvalue_kind op1_lvalue_kind
= clk_none
;
58 cp_lvalue_kind op2_lvalue_kind
= clk_none
;
60 /* Expressions of reference type are sometimes wrapped in
61 INDIRECT_REFs. INDIRECT_REFs are just internal compiler
62 representation, not part of the language, so we have to look
64 if (REFERENCE_REF_P (ref
))
65 return lvalue_kind (TREE_OPERAND (ref
, 0));
68 && TREE_CODE (TREE_TYPE (ref
)) == REFERENCE_TYPE
)
70 /* unnamed rvalue references are rvalues */
71 if (TYPE_REF_IS_RVALUE (TREE_TYPE (ref
))
72 && TREE_CODE (ref
) != PARM_DECL
73 && TREE_CODE (ref
) != VAR_DECL
74 && TREE_CODE (ref
) != COMPONENT_REF
75 /* Functions are always lvalues. */
76 && TREE_CODE (TREE_TYPE (TREE_TYPE (ref
))) != FUNCTION_TYPE
)
79 /* lvalue references and named rvalue references are lvalues. */
83 if (ref
== current_class_ptr
)
86 switch (TREE_CODE (ref
))
90 /* preincrements and predecrements are valid lvals, provided
91 what they refer to are valid lvals. */
92 case PREINCREMENT_EXPR
:
93 case PREDECREMENT_EXPR
:
95 case WITH_CLEANUP_EXPR
:
98 return lvalue_kind (TREE_OPERAND (ref
, 0));
101 op1_lvalue_kind
= lvalue_kind (TREE_OPERAND (ref
, 0));
102 /* Look at the member designator. */
103 if (!op1_lvalue_kind
)
105 else if (is_overloaded_fn (TREE_OPERAND (ref
, 1)))
106 /* The "field" can be a FUNCTION_DECL or an OVERLOAD in some
107 situations. If we're seeing a COMPONENT_REF, it's a non-static
108 member, so it isn't an lvalue. */
109 op1_lvalue_kind
= clk_none
;
110 else if (TREE_CODE (TREE_OPERAND (ref
, 1)) != FIELD_DECL
)
111 /* This can be IDENTIFIER_NODE in a template. */;
112 else if (DECL_C_BIT_FIELD (TREE_OPERAND (ref
, 1)))
114 /* Clear the ordinary bit. If this object was a class
115 rvalue we want to preserve that information. */
116 op1_lvalue_kind
&= ~clk_ordinary
;
117 /* The lvalue is for a bitfield. */
118 op1_lvalue_kind
|= clk_bitfield
;
120 else if (DECL_PACKED (TREE_OPERAND (ref
, 1)))
121 op1_lvalue_kind
|= clk_packed
;
123 return op1_lvalue_kind
;
126 case COMPOUND_LITERAL_EXPR
:
130 /* CONST_DECL without TREE_STATIC are enumeration values and
131 thus not lvalues. With TREE_STATIC they are used by ObjC++
132 in objc_build_string_object and need to be considered as
134 if (! TREE_STATIC (ref
))
137 if (TREE_READONLY (ref
) && ! TREE_STATIC (ref
)
138 && DECL_LANG_SPECIFIC (ref
)
139 && DECL_IN_AGGR_P (ref
))
146 if (TREE_CODE (TREE_TYPE (ref
)) != METHOD_TYPE
)
150 /* A scope ref in a template, left as SCOPE_REF to support later
153 gcc_assert (!type_dependent_expression_p (CONST_CAST_TREE(ref
)));
154 return lvalue_kind (TREE_OPERAND (ref
, 1));
158 /* Disallow <? and >? as lvalues if either argument side-effects. */
159 if (TREE_SIDE_EFFECTS (TREE_OPERAND (ref
, 0))
160 || TREE_SIDE_EFFECTS (TREE_OPERAND (ref
, 1)))
162 op1_lvalue_kind
= lvalue_kind (TREE_OPERAND (ref
, 0));
163 op2_lvalue_kind
= lvalue_kind (TREE_OPERAND (ref
, 1));
167 op1_lvalue_kind
= lvalue_kind (TREE_OPERAND (ref
, 1)
168 ? TREE_OPERAND (ref
, 1)
169 : TREE_OPERAND (ref
, 0));
170 op2_lvalue_kind
= lvalue_kind (TREE_OPERAND (ref
, 2));
178 return lvalue_kind (TREE_OPERAND (ref
, 1));
184 return (CLASS_TYPE_P (TREE_TYPE (ref
)) ? clk_class
: clk_none
);
187 /* We can see calls outside of TARGET_EXPR in templates. */
188 if (CLASS_TYPE_P (TREE_TYPE (ref
)))
193 /* All functions (except non-static-member functions) are
195 return (DECL_NONSTATIC_MEMBER_FUNCTION_P (ref
)
196 ? clk_none
: clk_ordinary
);
199 /* We now represent a reference to a single static member function
201 /* This CONST_CAST is okay because BASELINK_FUNCTIONS returns
202 its argument unmodified and we assign it to a const_tree. */
203 return lvalue_kind (BASELINK_FUNCTIONS (CONST_CAST_TREE (ref
)));
205 case NON_DEPENDENT_EXPR
:
206 /* We used to just return clk_ordinary for NON_DEPENDENT_EXPR because
207 it was safe enough for C++98, but in C++0x lvalues don't bind to
208 rvalue references, so we get bogus errors (c++/44870). */
209 return lvalue_kind (TREE_OPERAND (ref
, 0));
212 if (!TREE_TYPE (ref
))
214 if (CLASS_TYPE_P (TREE_TYPE (ref
)))
219 /* If one operand is not an lvalue at all, then this expression is
221 if (!op1_lvalue_kind
|| !op2_lvalue_kind
)
224 /* Otherwise, it's an lvalue, and it has all the odd properties
225 contributed by either operand. */
226 op1_lvalue_kind
= op1_lvalue_kind
| op2_lvalue_kind
;
227 /* It's not an ordinary lvalue if it involves any other kind. */
228 if ((op1_lvalue_kind
& ~clk_ordinary
) != clk_none
)
229 op1_lvalue_kind
&= ~clk_ordinary
;
230 /* It can't be both a pseudo-lvalue and a non-addressable lvalue.
231 A COND_EXPR of those should be wrapped in a TARGET_EXPR. */
232 if ((op1_lvalue_kind
& (clk_rvalueref
|clk_class
))
233 && (op1_lvalue_kind
& (clk_bitfield
|clk_packed
)))
234 op1_lvalue_kind
= clk_none
;
235 return op1_lvalue_kind
;
238 /* Returns the kind of lvalue that REF is, in the sense of
239 [basic.lval]. This function should really be named lvalue_p; it
240 computes the C++ definition of lvalue. */
243 real_lvalue_p (const_tree ref
)
245 cp_lvalue_kind kind
= lvalue_kind (ref
);
246 if (kind
& (clk_rvalueref
|clk_class
))
252 /* This differs from real_lvalue_p in that class rvalues are considered
256 lvalue_p (const_tree ref
)
258 return (lvalue_kind (ref
) != clk_none
);
261 /* This differs from real_lvalue_p in that rvalues formed by dereferencing
262 rvalue references are considered rvalues. */
265 lvalue_or_rvalue_with_address_p (const_tree ref
)
267 cp_lvalue_kind kind
= lvalue_kind (ref
);
268 if (kind
& clk_class
)
271 return (kind
!= clk_none
);
274 /* Test whether DECL is a builtin that may appear in a
275 constant-expression. */
278 builtin_valid_in_constant_expr_p (const_tree decl
)
280 /* At present BUILT_IN_CONSTANT_P is the only builtin we're allowing
281 in constant-expressions. We may want to add other builtins later. */
282 return DECL_IS_BUILTIN_CONSTANT_P (decl
);
285 /* Build a TARGET_EXPR, initializing the DECL with the VALUE. */
288 build_target_expr (tree decl
, tree value
, tsubst_flags_t complain
)
291 tree type
= TREE_TYPE (decl
);
293 #ifdef ENABLE_CHECKING
294 gcc_assert (VOID_TYPE_P (TREE_TYPE (value
))
295 || TREE_TYPE (decl
) == TREE_TYPE (value
)
296 /* On ARM ctors return 'this'. */
297 || (TREE_CODE (TREE_TYPE (value
)) == POINTER_TYPE
298 && TREE_CODE (value
) == CALL_EXPR
)
299 || useless_type_conversion_p (TREE_TYPE (decl
),
303 t
= cxx_maybe_build_cleanup (decl
, complain
);
304 if (t
== error_mark_node
)
305 return error_mark_node
;
306 t
= build4 (TARGET_EXPR
, type
, decl
, value
, t
, NULL_TREE
);
307 /* We always set TREE_SIDE_EFFECTS so that expand_expr does not
308 ignore the TARGET_EXPR. If there really turn out to be no
309 side-effects, then the optimizer should be able to get rid of
310 whatever code is generated anyhow. */
311 TREE_SIDE_EFFECTS (t
) = 1;
312 if (literal_type_p (type
))
313 TREE_CONSTANT (t
) = TREE_CONSTANT (value
);
318 /* Return an undeclared local temporary of type TYPE for use in building a
322 build_local_temp (tree type
)
324 tree slot
= build_decl (input_location
,
325 VAR_DECL
, NULL_TREE
, type
);
326 DECL_ARTIFICIAL (slot
) = 1;
327 DECL_IGNORED_P (slot
) = 1;
328 DECL_CONTEXT (slot
) = current_function_decl
;
329 layout_decl (slot
, 0);
333 /* Set various status flags when building an AGGR_INIT_EXPR object T. */
336 process_aggr_init_operands (tree t
)
340 side_effects
= TREE_SIDE_EFFECTS (t
);
344 n
= TREE_OPERAND_LENGTH (t
);
345 for (i
= 1; i
< n
; i
++)
347 tree op
= TREE_OPERAND (t
, i
);
348 if (op
&& TREE_SIDE_EFFECTS (op
))
355 TREE_SIDE_EFFECTS (t
) = side_effects
;
358 /* Build an AGGR_INIT_EXPR of class tcc_vl_exp with the indicated RETURN_TYPE,
359 FN, and SLOT. NARGS is the number of call arguments which are specified
360 as a tree array ARGS. */
363 build_aggr_init_array (tree return_type
, tree fn
, tree slot
, int nargs
,
369 t
= build_vl_exp (AGGR_INIT_EXPR
, nargs
+ 3);
370 TREE_TYPE (t
) = return_type
;
371 AGGR_INIT_EXPR_FN (t
) = fn
;
372 AGGR_INIT_EXPR_SLOT (t
) = slot
;
373 for (i
= 0; i
< nargs
; i
++)
374 AGGR_INIT_EXPR_ARG (t
, i
) = args
[i
];
375 process_aggr_init_operands (t
);
379 /* INIT is a CALL_EXPR or AGGR_INIT_EXPR which needs info about its
380 target. TYPE is the type to be initialized.
382 Build an AGGR_INIT_EXPR to represent the initialization. This function
383 differs from build_cplus_new in that an AGGR_INIT_EXPR can only be used
384 to initialize another object, whereas a TARGET_EXPR can either
385 initialize another object or create its own temporary object, and as a
386 result building up a TARGET_EXPR requires that the type's destructor be
390 build_aggr_init_expr (tree type
, tree init
, tsubst_flags_t complain
)
397 /* Make sure that we're not trying to create an instance of an
399 if (abstract_virtuals_error_sfinae (NULL_TREE
, type
, complain
))
400 return error_mark_node
;
402 if (TREE_CODE (init
) == CALL_EXPR
)
403 fn
= CALL_EXPR_FN (init
);
404 else if (TREE_CODE (init
) == AGGR_INIT_EXPR
)
405 fn
= AGGR_INIT_EXPR_FN (init
);
407 return convert (type
, init
);
409 is_ctor
= (TREE_CODE (fn
) == ADDR_EXPR
410 && TREE_CODE (TREE_OPERAND (fn
, 0)) == FUNCTION_DECL
411 && DECL_CONSTRUCTOR_P (TREE_OPERAND (fn
, 0)));
413 /* We split the CALL_EXPR into its function and its arguments here.
414 Then, in expand_expr, we put them back together. The reason for
415 this is that this expression might be a default argument
416 expression. In that case, we need a new temporary every time the
417 expression is used. That's what break_out_target_exprs does; it
418 replaces every AGGR_INIT_EXPR with a copy that uses a fresh
419 temporary slot. Then, expand_expr builds up a call-expression
420 using the new slot. */
422 /* If we don't need to use a constructor to create an object of this
423 type, don't mess with AGGR_INIT_EXPR. */
424 if (is_ctor
|| TREE_ADDRESSABLE (type
))
426 slot
= build_local_temp (type
);
428 if (TREE_CODE(init
) == CALL_EXPR
)
429 rval
= build_aggr_init_array (void_type_node
, fn
, slot
,
430 call_expr_nargs (init
),
431 CALL_EXPR_ARGP (init
));
433 rval
= build_aggr_init_array (void_type_node
, fn
, slot
,
434 aggr_init_expr_nargs (init
),
435 AGGR_INIT_EXPR_ARGP (init
));
436 TREE_SIDE_EFFECTS (rval
) = 1;
437 AGGR_INIT_VIA_CTOR_P (rval
) = is_ctor
;
438 TREE_NOTHROW (rval
) = TREE_NOTHROW (init
);
446 /* INIT is a CALL_EXPR or AGGR_INIT_EXPR which needs info about its
447 target. TYPE is the type that this initialization should appear to
450 Build an encapsulation of the initialization to perform
451 and return it so that it can be processed by language-independent
452 and language-specific expression expanders. */
455 build_cplus_new (tree type
, tree init
, tsubst_flags_t complain
)
457 tree rval
= build_aggr_init_expr (type
, init
, complain
);
460 if (TREE_CODE (rval
) == AGGR_INIT_EXPR
)
461 slot
= AGGR_INIT_EXPR_SLOT (rval
);
462 else if (TREE_CODE (rval
) == CALL_EXPR
463 || TREE_CODE (rval
) == CONSTRUCTOR
)
464 slot
= build_local_temp (type
);
468 rval
= build_target_expr (slot
, rval
, complain
);
470 if (rval
!= error_mark_node
)
471 TARGET_EXPR_IMPLICIT_P (rval
) = 1;
476 /* Subroutine of build_vec_init_expr: Build up a single element
477 intialization as a proxy for the full array initialization to get things
478 marked as used and any appropriate diagnostics.
480 Since we're deferring building the actual constructor calls until
481 gimplification time, we need to build one now and throw it away so
482 that the relevant constructor gets mark_used before cgraph decides
483 what functions are needed. Here we assume that init is either
484 NULL_TREE, void_type_node (indicating value-initialization), or
485 another array to copy. */
488 build_vec_init_elt (tree type
, tree init
, tsubst_flags_t complain
)
490 tree inner_type
= strip_array_types (type
);
491 VEC(tree
,gc
) *argvec
;
493 if (integer_zerop (array_type_nelts_total (type
))
494 || !CLASS_TYPE_P (inner_type
))
495 /* No interesting initialization to do. */
496 return integer_zero_node
;
497 else if (init
== void_type_node
)
498 return build_value_init (inner_type
, complain
);
500 gcc_assert (init
== NULL_TREE
501 || (same_type_ignoring_top_level_qualifiers_p
502 (type
, TREE_TYPE (init
))));
504 argvec
= make_tree_vector ();
507 tree dummy
= build_dummy_object (inner_type
);
508 if (!real_lvalue_p (init
))
509 dummy
= move (dummy
);
510 VEC_quick_push (tree
, argvec
, dummy
);
512 init
= build_special_member_call (NULL_TREE
, complete_ctor_identifier
,
513 &argvec
, inner_type
, LOOKUP_NORMAL
,
515 release_tree_vector (argvec
);
517 /* For a trivial constructor, build_over_call creates a TARGET_EXPR. But
518 we don't want one here because we aren't creating a temporary. */
519 if (TREE_CODE (init
) == TARGET_EXPR
)
520 init
= TARGET_EXPR_INITIAL (init
);
525 /* Return a TARGET_EXPR which expresses the initialization of an array to
526 be named later, either default-initialization or copy-initialization
527 from another array of the same type. */
530 build_vec_init_expr (tree type
, tree init
, tsubst_flags_t complain
)
533 bool value_init
= false;
534 tree elt_init
= build_vec_init_elt (type
, init
, complain
);
536 if (init
== void_type_node
)
542 slot
= build_local_temp (type
);
543 init
= build2 (VEC_INIT_EXPR
, type
, slot
, init
);
544 TREE_SIDE_EFFECTS (init
) = true;
545 SET_EXPR_LOCATION (init
, input_location
);
547 if (cxx_dialect
>= cxx0x
548 && potential_constant_expression (elt_init
))
549 VEC_INIT_EXPR_IS_CONSTEXPR (init
) = true;
550 VEC_INIT_EXPR_VALUE_INIT (init
) = value_init
;
555 /* Give a helpful diagnostic for a non-constexpr VEC_INIT_EXPR in a context
556 that requires a constant expression. */
559 diagnose_non_constexpr_vec_init (tree expr
)
561 tree type
= TREE_TYPE (VEC_INIT_EXPR_SLOT (expr
));
563 if (VEC_INIT_EXPR_VALUE_INIT (expr
))
564 init
= void_zero_node
;
566 init
= VEC_INIT_EXPR_INIT (expr
);
568 elt_init
= build_vec_init_elt (type
, init
, tf_warning_or_error
);
569 require_potential_constant_expression (elt_init
);
573 build_array_copy (tree init
)
575 return build_vec_init_expr (TREE_TYPE (init
), init
, tf_warning_or_error
);
578 /* Build a TARGET_EXPR using INIT to initialize a new temporary of the
582 build_target_expr_with_type (tree init
, tree type
, tsubst_flags_t complain
)
584 gcc_assert (!VOID_TYPE_P (type
));
586 if (TREE_CODE (init
) == TARGET_EXPR
587 || init
== error_mark_node
)
589 else if (CLASS_TYPE_P (type
) && type_has_nontrivial_copy_init (type
)
590 && !VOID_TYPE_P (TREE_TYPE (init
))
591 && TREE_CODE (init
) != COND_EXPR
592 && TREE_CODE (init
) != CONSTRUCTOR
593 && TREE_CODE (init
) != VA_ARG_EXPR
)
594 /* We need to build up a copy constructor call. A void initializer
595 means we're being called from bot_manip. COND_EXPR is a special
596 case because we already have copies on the arms and we don't want
597 another one here. A CONSTRUCTOR is aggregate initialization, which
598 is handled separately. A VA_ARG_EXPR is magic creation of an
599 aggregate; there's no additional work to be done. */
600 return force_rvalue (init
, complain
);
602 return force_target_expr (type
, init
, complain
);
605 /* Like the above function, but without the checking. This function should
606 only be used by code which is deliberately trying to subvert the type
607 system, such as call_builtin_trap. Or build_over_call, to avoid
608 infinite recursion. */
611 force_target_expr (tree type
, tree init
, tsubst_flags_t complain
)
615 gcc_assert (!VOID_TYPE_P (type
));
617 slot
= build_local_temp (type
);
618 return build_target_expr (slot
, init
, complain
);
621 /* Like build_target_expr_with_type, but use the type of INIT. */
624 get_target_expr_sfinae (tree init
, tsubst_flags_t complain
)
626 if (TREE_CODE (init
) == AGGR_INIT_EXPR
)
627 return build_target_expr (AGGR_INIT_EXPR_SLOT (init
), init
, complain
);
628 else if (TREE_CODE (init
) == VEC_INIT_EXPR
)
629 return build_target_expr (VEC_INIT_EXPR_SLOT (init
), init
, complain
);
631 return build_target_expr_with_type (init
, TREE_TYPE (init
), complain
);
635 get_target_expr (tree init
)
637 return get_target_expr_sfinae (init
, tf_warning_or_error
);
640 /* If EXPR is a bitfield reference, convert it to the declared type of
641 the bitfield, and return the resulting expression. Otherwise,
642 return EXPR itself. */
645 convert_bitfield_to_declared_type (tree expr
)
649 bitfield_type
= is_bitfield_expr_with_lowered_type (expr
);
651 expr
= convert_to_integer (TYPE_MAIN_VARIANT (bitfield_type
),
656 /* EXPR is being used in an rvalue context. Return a version of EXPR
657 that is marked as an rvalue. */
664 if (error_operand_p (expr
))
667 expr
= mark_rvalue_use (expr
);
671 Non-class rvalues always have cv-unqualified types. */
672 type
= TREE_TYPE (expr
);
673 if (!CLASS_TYPE_P (type
) && cv_qualified_p (type
))
674 type
= cv_unqualified (type
);
676 /* We need to do this for rvalue refs as well to get the right answer
677 from decltype; see c++/36628. */
678 if (!processing_template_decl
&& lvalue_or_rvalue_with_address_p (expr
))
679 expr
= build1 (NON_LVALUE_EXPR
, type
, expr
);
680 else if (type
!= TREE_TYPE (expr
))
681 expr
= build_nop (type
, expr
);
687 /* Hash an ARRAY_TYPE. K is really of type `tree'. */
690 cplus_array_hash (const void* k
)
693 const_tree
const t
= (const_tree
) k
;
695 hash
= TYPE_UID (TREE_TYPE (t
));
697 hash
^= TYPE_UID (TYPE_DOMAIN (t
));
701 typedef struct cplus_array_info
{
706 /* Compare two ARRAY_TYPEs. K1 is really of type `tree', K2 is really
707 of type `cplus_array_info*'. */
710 cplus_array_compare (const void * k1
, const void * k2
)
712 const_tree
const t1
= (const_tree
) k1
;
713 const cplus_array_info
*const t2
= (const cplus_array_info
*) k2
;
715 return (TREE_TYPE (t1
) == t2
->type
&& TYPE_DOMAIN (t1
) == t2
->domain
);
718 /* Hash table containing dependent array types, which are unsuitable for
719 the language-independent type hash table. */
720 static GTY ((param_is (union tree_node
))) htab_t cplus_array_htab
;
722 /* Like build_array_type, but handle special C++ semantics. */
725 build_cplus_array_type (tree elt_type
, tree index_type
)
729 if (elt_type
== error_mark_node
|| index_type
== error_mark_node
)
730 return error_mark_node
;
732 if (processing_template_decl
733 && (dependent_type_p (elt_type
)
734 || (index_type
&& !TREE_CONSTANT (TYPE_MAX_VALUE (index_type
)))))
737 cplus_array_info cai
;
740 if (cplus_array_htab
== NULL
)
741 cplus_array_htab
= htab_create_ggc (61, &cplus_array_hash
,
742 &cplus_array_compare
, NULL
);
744 hash
= TYPE_UID (elt_type
);
746 hash
^= TYPE_UID (index_type
);
748 cai
.domain
= index_type
;
750 e
= htab_find_slot_with_hash (cplus_array_htab
, &cai
, hash
, INSERT
);
752 /* We have found the type: we're done. */
756 /* Build a new array type. */
757 t
= cxx_make_type (ARRAY_TYPE
);
758 TREE_TYPE (t
) = elt_type
;
759 TYPE_DOMAIN (t
) = index_type
;
761 /* Store it in the hash table. */
764 /* Set the canonical type for this new node. */
765 if (TYPE_STRUCTURAL_EQUALITY_P (elt_type
)
766 || (index_type
&& TYPE_STRUCTURAL_EQUALITY_P (index_type
)))
767 SET_TYPE_STRUCTURAL_EQUALITY (t
);
768 else if (TYPE_CANONICAL (elt_type
) != elt_type
770 && TYPE_CANONICAL (index_type
) != index_type
))
772 = build_cplus_array_type
773 (TYPE_CANONICAL (elt_type
),
774 index_type
? TYPE_CANONICAL (index_type
) : index_type
);
776 TYPE_CANONICAL (t
) = t
;
780 t
= build_array_type (elt_type
, index_type
);
782 /* We want TYPE_MAIN_VARIANT of an array to strip cv-quals from the
783 element type as well, so fix it up if needed. */
784 if (elt_type
!= TYPE_MAIN_VARIANT (elt_type
))
786 tree m
= build_cplus_array_type (TYPE_MAIN_VARIANT (elt_type
),
788 if (TYPE_MAIN_VARIANT (t
) != m
)
790 TYPE_MAIN_VARIANT (t
) = m
;
791 TYPE_NEXT_VARIANT (t
) = TYPE_NEXT_VARIANT (m
);
792 TYPE_NEXT_VARIANT (m
) = t
;
796 /* Push these needs up so that initialization takes place
798 TYPE_NEEDS_CONSTRUCTING (t
)
799 = TYPE_NEEDS_CONSTRUCTING (TYPE_MAIN_VARIANT (elt_type
));
800 TYPE_HAS_NONTRIVIAL_DESTRUCTOR (t
)
801 = TYPE_HAS_NONTRIVIAL_DESTRUCTOR (TYPE_MAIN_VARIANT (elt_type
));
805 /* Return an ARRAY_TYPE with element type ELT and length N. */
808 build_array_of_n_type (tree elt
, int n
)
810 return build_cplus_array_type (elt
, build_index_type (size_int (n
- 1)));
813 /* Return a reference type node referring to TO_TYPE. If RVAL is
814 true, return an rvalue reference type, otherwise return an lvalue
815 reference type. If a type node exists, reuse it, otherwise create
818 cp_build_reference_type (tree to_type
, bool rval
)
821 lvalue_ref
= build_reference_type (to_type
);
825 /* This code to create rvalue reference types is based on and tied
826 to the code creating lvalue reference types in the middle-end
827 functions build_reference_type_for_mode and build_reference_type.
829 It works by putting the rvalue reference type nodes after the
830 lvalue reference nodes in the TYPE_NEXT_REF_TO linked list, so
831 they will effectively be ignored by the middle end. */
833 for (t
= lvalue_ref
; (t
= TYPE_NEXT_REF_TO (t
)); )
834 if (TYPE_REF_IS_RVALUE (t
))
837 t
= build_distinct_type_copy (lvalue_ref
);
839 TYPE_REF_IS_RVALUE (t
) = true;
840 TYPE_NEXT_REF_TO (t
) = TYPE_NEXT_REF_TO (lvalue_ref
);
841 TYPE_NEXT_REF_TO (lvalue_ref
) = t
;
843 if (TYPE_STRUCTURAL_EQUALITY_P (to_type
))
844 SET_TYPE_STRUCTURAL_EQUALITY (t
);
845 else if (TYPE_CANONICAL (to_type
) != to_type
)
847 = cp_build_reference_type (TYPE_CANONICAL (to_type
), rval
);
849 TYPE_CANONICAL (t
) = t
;
857 /* Returns EXPR cast to rvalue reference type, like std::move. */
862 tree type
= TREE_TYPE (expr
);
863 gcc_assert (TREE_CODE (type
) != REFERENCE_TYPE
);
864 type
= cp_build_reference_type (type
, /*rval*/true);
865 return build_static_cast (type
, expr
, tf_warning_or_error
);
868 /* Used by the C++ front end to build qualified array types. However,
869 the C version of this function does not properly maintain canonical
870 types (which are not used in C). */
872 c_build_qualified_type (tree type
, int type_quals
)
874 return cp_build_qualified_type (type
, type_quals
);
878 /* Make a variant of TYPE, qualified with the TYPE_QUALS. Handles
879 arrays correctly. In particular, if TYPE is an array of T's, and
880 TYPE_QUALS is non-empty, returns an array of qualified T's.
882 FLAGS determines how to deal with ill-formed qualifications. If
883 tf_ignore_bad_quals is set, then bad qualifications are dropped
884 (this is permitted if TYPE was introduced via a typedef or template
885 type parameter). If bad qualifications are dropped and tf_warning
886 is set, then a warning is issued for non-const qualifications. If
887 tf_ignore_bad_quals is not set and tf_error is not set, we
888 return error_mark_node. Otherwise, we issue an error, and ignore
891 Qualification of a reference type is valid when the reference came
892 via a typedef or template type argument. [dcl.ref] No such
893 dispensation is provided for qualifying a function type. [dcl.fct]
894 DR 295 queries this and the proposed resolution brings it into line
895 with qualifying a reference. We implement the DR. We also behave
896 in a similar manner for restricting non-pointer types. */
899 cp_build_qualified_type_real (tree type
,
901 tsubst_flags_t complain
)
904 int bad_quals
= TYPE_UNQUALIFIED
;
906 if (type
== error_mark_node
)
909 if (type_quals
== cp_type_quals (type
))
912 if (TREE_CODE (type
) == ARRAY_TYPE
)
914 /* In C++, the qualification really applies to the array element
915 type. Obtain the appropriately qualified element type. */
918 = cp_build_qualified_type_real (TREE_TYPE (type
),
922 if (element_type
== error_mark_node
)
923 return error_mark_node
;
925 /* See if we already have an identically qualified type. Tests
926 should be equivalent to those in check_qualified_type. */
927 for (t
= TYPE_MAIN_VARIANT (type
); t
; t
= TYPE_NEXT_VARIANT (t
))
928 if (TREE_TYPE (t
) == element_type
929 && TYPE_NAME (t
) == TYPE_NAME (type
)
930 && TYPE_CONTEXT (t
) == TYPE_CONTEXT (type
)
931 && attribute_list_equal (TYPE_ATTRIBUTES (t
),
932 TYPE_ATTRIBUTES (type
)))
937 t
= build_cplus_array_type (element_type
, TYPE_DOMAIN (type
));
939 /* Keep the typedef name. */
940 if (TYPE_NAME (t
) != TYPE_NAME (type
))
942 t
= build_variant_type_copy (t
);
943 TYPE_NAME (t
) = TYPE_NAME (type
);
947 /* Even if we already had this variant, we update
948 TYPE_NEEDS_CONSTRUCTING and TYPE_HAS_NONTRIVIAL_DESTRUCTOR in case
949 they changed since the variant was originally created.
951 This seems hokey; if there is some way to use a previous
952 variant *without* coming through here,
953 TYPE_NEEDS_CONSTRUCTING will never be updated. */
954 TYPE_NEEDS_CONSTRUCTING (t
)
955 = TYPE_NEEDS_CONSTRUCTING (TYPE_MAIN_VARIANT (element_type
));
956 TYPE_HAS_NONTRIVIAL_DESTRUCTOR (t
)
957 = TYPE_HAS_NONTRIVIAL_DESTRUCTOR (TYPE_MAIN_VARIANT (element_type
));
960 else if (TYPE_PTRMEMFUNC_P (type
))
962 /* For a pointer-to-member type, we can't just return a
963 cv-qualified version of the RECORD_TYPE. If we do, we
964 haven't changed the field that contains the actual pointer to
965 a method, and so TYPE_PTRMEMFUNC_FN_TYPE will be wrong. */
968 t
= TYPE_PTRMEMFUNC_FN_TYPE (type
);
969 t
= cp_build_qualified_type_real (t
, type_quals
, complain
);
970 return build_ptrmemfunc_type (t
);
972 else if (TREE_CODE (type
) == TYPE_PACK_EXPANSION
)
974 tree t
= PACK_EXPANSION_PATTERN (type
);
976 t
= cp_build_qualified_type_real (t
, type_quals
, complain
);
977 return make_pack_expansion (t
);
980 /* A reference or method type shall not be cv-qualified.
981 [dcl.ref], [dcl.fct]. This used to be an error, but as of DR 295
982 (in CD1) we always ignore extra cv-quals on functions. */
983 if (type_quals
& (TYPE_QUAL_CONST
| TYPE_QUAL_VOLATILE
)
984 && (TREE_CODE (type
) == REFERENCE_TYPE
985 || TREE_CODE (type
) == FUNCTION_TYPE
986 || TREE_CODE (type
) == METHOD_TYPE
))
988 if (TREE_CODE (type
) == REFERENCE_TYPE
)
989 bad_quals
|= type_quals
& (TYPE_QUAL_CONST
| TYPE_QUAL_VOLATILE
);
990 type_quals
&= ~(TYPE_QUAL_CONST
| TYPE_QUAL_VOLATILE
);
993 /* But preserve any function-cv-quals on a FUNCTION_TYPE. */
994 if (TREE_CODE (type
) == FUNCTION_TYPE
)
995 type_quals
|= type_memfn_quals (type
);
997 /* A restrict-qualified type must be a pointer (or reference)
998 to object or incomplete type. */
999 if ((type_quals
& TYPE_QUAL_RESTRICT
)
1000 && TREE_CODE (type
) != TEMPLATE_TYPE_PARM
1001 && TREE_CODE (type
) != TYPENAME_TYPE
1002 && !POINTER_TYPE_P (type
))
1004 bad_quals
|= TYPE_QUAL_RESTRICT
;
1005 type_quals
&= ~TYPE_QUAL_RESTRICT
;
1008 if (bad_quals
== TYPE_UNQUALIFIED
1009 || (complain
& tf_ignore_bad_quals
))
1011 else if (!(complain
& tf_error
))
1012 return error_mark_node
;
1015 tree bad_type
= build_qualified_type (ptr_type_node
, bad_quals
);
1016 error ("%qV qualifiers cannot be applied to %qT",
1020 /* Retrieve (or create) the appropriately qualified variant. */
1021 result
= build_qualified_type (type
, type_quals
);
1023 /* If this was a pointer-to-method type, and we just made a copy,
1024 then we need to unshare the record that holds the cached
1025 pointer-to-member-function type, because these will be distinct
1026 between the unqualified and qualified types. */
1028 && TREE_CODE (type
) == POINTER_TYPE
1029 && TREE_CODE (TREE_TYPE (type
)) == METHOD_TYPE
1030 && TYPE_LANG_SPECIFIC (result
) == TYPE_LANG_SPECIFIC (type
))
1031 TYPE_LANG_SPECIFIC (result
) = NULL
;
1033 /* We may also have ended up building a new copy of the canonical
1034 type of a pointer-to-method type, which could have the same
1035 sharing problem described above. */
1036 if (TYPE_CANONICAL (result
) != TYPE_CANONICAL (type
)
1037 && TREE_CODE (type
) == POINTER_TYPE
1038 && TREE_CODE (TREE_TYPE (type
)) == METHOD_TYPE
1039 && (TYPE_LANG_SPECIFIC (TYPE_CANONICAL (result
))
1040 == TYPE_LANG_SPECIFIC (TYPE_CANONICAL (type
))))
1041 TYPE_LANG_SPECIFIC (TYPE_CANONICAL (result
)) = NULL
;
1046 /* Return TYPE with const and volatile removed. */
1049 cv_unqualified (tree type
)
1053 if (type
== error_mark_node
)
1056 quals
= cp_type_quals (type
);
1057 quals
&= ~(TYPE_QUAL_CONST
|TYPE_QUAL_VOLATILE
);
1058 return cp_build_qualified_type (type
, quals
);
1061 /* Builds a qualified variant of T that is not a typedef variant.
1062 E.g. consider the following declarations:
1063 typedef const int ConstInt;
1064 typedef ConstInt* PtrConstInt;
1065 If T is PtrConstInt, this function returns a type representing
1067 In other words, if T is a typedef, the function returns the underlying type.
1068 The cv-qualification and attributes of the type returned match the
1070 They will always be compatible types.
1071 The returned type is built so that all of its subtypes
1072 recursively have their typedefs stripped as well.
1074 This is different from just returning TYPE_CANONICAL (T)
1075 Because of several reasons:
1076 * If T is a type that needs structural equality
1077 its TYPE_CANONICAL (T) will be NULL.
1078 * TYPE_CANONICAL (T) desn't carry type attributes
1079 and looses template parameter names. */
1082 strip_typedefs (tree t
)
1084 tree result
= NULL
, type
= NULL
, t0
= NULL
;
1086 if (!t
|| t
== error_mark_node
|| t
== TYPE_CANONICAL (t
))
1089 gcc_assert (TYPE_P (t
));
1091 switch (TREE_CODE (t
))
1094 type
= strip_typedefs (TREE_TYPE (t
));
1095 result
= build_pointer_type (type
);
1097 case REFERENCE_TYPE
:
1098 type
= strip_typedefs (TREE_TYPE (t
));
1099 result
= cp_build_reference_type (type
, TYPE_REF_IS_RVALUE (t
));
1102 t0
= strip_typedefs (TYPE_OFFSET_BASETYPE (t
));
1103 type
= strip_typedefs (TREE_TYPE (t
));
1104 result
= build_offset_type (t0
, type
);
1107 if (TYPE_PTRMEMFUNC_P (t
))
1109 t0
= strip_typedefs (TYPE_PTRMEMFUNC_FN_TYPE (t
));
1110 result
= build_ptrmemfunc_type (t0
);
1114 type
= strip_typedefs (TREE_TYPE (t
));
1115 t0
= strip_typedefs (TYPE_DOMAIN (t
));;
1116 result
= build_cplus_array_type (type
, t0
);
1121 tree arg_types
= NULL
, arg_node
, arg_type
;
1122 for (arg_node
= TYPE_ARG_TYPES (t
);
1124 arg_node
= TREE_CHAIN (arg_node
))
1126 if (arg_node
== void_list_node
)
1128 arg_type
= strip_typedefs (TREE_VALUE (arg_node
));
1129 gcc_assert (arg_type
);
1132 tree_cons (TREE_PURPOSE (arg_node
), arg_type
, arg_types
);
1136 arg_types
= nreverse (arg_types
);
1138 /* A list of parameters not ending with an ellipsis
1139 must end with void_list_node. */
1141 arg_types
= chainon (arg_types
, void_list_node
);
1143 type
= strip_typedefs (TREE_TYPE (t
));
1144 if (TREE_CODE (t
) == METHOD_TYPE
)
1146 tree class_type
= TREE_TYPE (TREE_VALUE (arg_types
));
1147 gcc_assert (class_type
);
1149 build_method_type_directly (class_type
, type
,
1150 TREE_CHAIN (arg_types
));
1154 result
= build_function_type (type
,
1156 result
= apply_memfn_quals (result
, type_memfn_quals (t
));
1159 if (TYPE_RAISES_EXCEPTIONS (t
))
1160 result
= build_exception_variant (result
,
1161 TYPE_RAISES_EXCEPTIONS (t
));
1165 result
= make_typename_type (strip_typedefs (TYPE_CONTEXT (t
)),
1166 TYPENAME_TYPE_FULLNAME (t
),
1167 typename_type
, tf_none
);
1174 result
= TYPE_MAIN_VARIANT (t
);
1175 if (TYPE_USER_ALIGN (t
) != TYPE_USER_ALIGN (result
)
1176 || TYPE_ALIGN (t
) != TYPE_ALIGN (result
))
1178 gcc_assert (TYPE_USER_ALIGN (t
));
1179 if (TYPE_ALIGN (t
) == TYPE_ALIGN (result
))
1180 result
= build_variant_type_copy (result
);
1182 result
= build_aligned_type (result
, TYPE_ALIGN (t
));
1183 TYPE_USER_ALIGN (result
) = true;
1185 if (TYPE_ATTRIBUTES (t
))
1186 result
= cp_build_type_attribute_variant (result
, TYPE_ATTRIBUTES (t
));
1187 return cp_build_qualified_type (result
, cp_type_quals (t
));
1190 /* Makes a copy of BINFO and TYPE, which is to be inherited into a
1191 graph dominated by T. If BINFO is NULL, TYPE is a dependent base,
1192 and we do a shallow copy. If BINFO is non-NULL, we do a deep copy.
1193 VIRT indicates whether TYPE is inherited virtually or not.
1194 IGO_PREV points at the previous binfo of the inheritance graph
1195 order chain. The newly copied binfo's TREE_CHAIN forms this
1198 The CLASSTYPE_VBASECLASSES vector of T is constructed in the
1199 correct order. That is in the order the bases themselves should be
1202 The BINFO_INHERITANCE of a virtual base class points to the binfo
1203 of the most derived type. ??? We could probably change this so that
1204 BINFO_INHERITANCE becomes synonymous with BINFO_PRIMARY, and hence
1205 remove a field. They currently can only differ for primary virtual
1209 copy_binfo (tree binfo
, tree type
, tree t
, tree
*igo_prev
, int virt
)
1215 /* See if we've already made this virtual base. */
1216 new_binfo
= binfo_for_vbase (type
, t
);
1221 new_binfo
= make_tree_binfo (binfo
? BINFO_N_BASE_BINFOS (binfo
) : 0);
1222 BINFO_TYPE (new_binfo
) = type
;
1224 /* Chain it into the inheritance graph. */
1225 TREE_CHAIN (*igo_prev
) = new_binfo
;
1226 *igo_prev
= new_binfo
;
1233 gcc_assert (!BINFO_DEPENDENT_BASE_P (binfo
));
1234 gcc_assert (SAME_BINFO_TYPE_P (BINFO_TYPE (binfo
), type
));
1236 BINFO_OFFSET (new_binfo
) = BINFO_OFFSET (binfo
);
1237 BINFO_VIRTUALS (new_binfo
) = BINFO_VIRTUALS (binfo
);
1239 /* We do not need to copy the accesses, as they are read only. */
1240 BINFO_BASE_ACCESSES (new_binfo
) = BINFO_BASE_ACCESSES (binfo
);
1242 /* Recursively copy base binfos of BINFO. */
1243 for (ix
= 0; BINFO_BASE_ITERATE (binfo
, ix
, base_binfo
); ix
++)
1245 tree new_base_binfo
;
1247 gcc_assert (!BINFO_DEPENDENT_BASE_P (base_binfo
));
1248 new_base_binfo
= copy_binfo (base_binfo
, BINFO_TYPE (base_binfo
),
1250 BINFO_VIRTUAL_P (base_binfo
));
1252 if (!BINFO_INHERITANCE_CHAIN (new_base_binfo
))
1253 BINFO_INHERITANCE_CHAIN (new_base_binfo
) = new_binfo
;
1254 BINFO_BASE_APPEND (new_binfo
, new_base_binfo
);
1258 BINFO_DEPENDENT_BASE_P (new_binfo
) = 1;
1262 /* Push it onto the list after any virtual bases it contains
1263 will have been pushed. */
1264 VEC_quick_push (tree
, CLASSTYPE_VBASECLASSES (t
), new_binfo
);
1265 BINFO_VIRTUAL_P (new_binfo
) = 1;
1266 BINFO_INHERITANCE_CHAIN (new_binfo
) = TYPE_BINFO (t
);
1272 /* Hashing of lists so that we don't make duplicates.
1273 The entry point is `list_hash_canon'. */
1275 /* Now here is the hash table. When recording a list, it is added
1276 to the slot whose index is the hash code mod the table size.
1277 Note that the hash table is used for several kinds of lists.
1278 While all these live in the same table, they are completely independent,
1279 and the hash code is computed differently for each of these. */
1281 static GTY ((param_is (union tree_node
))) htab_t list_hash_table
;
1290 /* Compare ENTRY (an entry in the hash table) with DATA (a list_proxy
1291 for a node we are thinking about adding). */
1294 list_hash_eq (const void* entry
, const void* data
)
1296 const_tree
const t
= (const_tree
) entry
;
1297 const struct list_proxy
*const proxy
= (const struct list_proxy
*) data
;
1299 return (TREE_VALUE (t
) == proxy
->value
1300 && TREE_PURPOSE (t
) == proxy
->purpose
1301 && TREE_CHAIN (t
) == proxy
->chain
);
1304 /* Compute a hash code for a list (chain of TREE_LIST nodes
1305 with goodies in the TREE_PURPOSE, TREE_VALUE, and bits of the
1306 TREE_COMMON slots), by adding the hash codes of the individual entries. */
1309 list_hash_pieces (tree purpose
, tree value
, tree chain
)
1311 hashval_t hashcode
= 0;
1314 hashcode
+= TREE_HASH (chain
);
1317 hashcode
+= TREE_HASH (value
);
1321 hashcode
+= TREE_HASH (purpose
);
1327 /* Hash an already existing TREE_LIST. */
1330 list_hash (const void* p
)
1332 const_tree
const t
= (const_tree
) p
;
1333 return list_hash_pieces (TREE_PURPOSE (t
),
1338 /* Given list components PURPOSE, VALUE, AND CHAIN, return the canonical
1339 object for an identical list if one already exists. Otherwise, build a
1340 new one, and record it as the canonical object. */
1343 hash_tree_cons (tree purpose
, tree value
, tree chain
)
1347 struct list_proxy proxy
;
1349 /* Hash the list node. */
1350 hashcode
= list_hash_pieces (purpose
, value
, chain
);
1351 /* Create a proxy for the TREE_LIST we would like to create. We
1352 don't actually create it so as to avoid creating garbage. */
1353 proxy
.purpose
= purpose
;
1354 proxy
.value
= value
;
1355 proxy
.chain
= chain
;
1356 /* See if it is already in the table. */
1357 slot
= htab_find_slot_with_hash (list_hash_table
, &proxy
, hashcode
,
1359 /* If not, create a new node. */
1361 *slot
= tree_cons (purpose
, value
, chain
);
1362 return (tree
) *slot
;
1365 /* Constructor for hashed lists. */
1368 hash_tree_chain (tree value
, tree chain
)
1370 return hash_tree_cons (NULL_TREE
, value
, chain
);
1374 debug_binfo (tree elem
)
1379 fprintf (stderr
, "type \"%s\", offset = " HOST_WIDE_INT_PRINT_DEC
1381 TYPE_NAME_STRING (BINFO_TYPE (elem
)),
1382 TREE_INT_CST_LOW (BINFO_OFFSET (elem
)));
1383 debug_tree (BINFO_TYPE (elem
));
1384 if (BINFO_VTABLE (elem
))
1385 fprintf (stderr
, "vtable decl \"%s\"\n",
1386 IDENTIFIER_POINTER (DECL_NAME (get_vtbl_decl_for_binfo (elem
))));
1388 fprintf (stderr
, "no vtable decl yet\n");
1389 fprintf (stderr
, "virtuals:\n");
1390 virtuals
= BINFO_VIRTUALS (elem
);
1395 tree fndecl
= TREE_VALUE (virtuals
);
1396 fprintf (stderr
, "%s [%ld =? %ld]\n",
1397 IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (fndecl
)),
1398 (long) n
, (long) TREE_INT_CST_LOW (DECL_VINDEX (fndecl
)));
1400 virtuals
= TREE_CHAIN (virtuals
);
1404 /* Build a representation for the qualified name SCOPE::NAME. TYPE is
1405 the type of the result expression, if known, or NULL_TREE if the
1406 resulting expression is type-dependent. If TEMPLATE_P is true,
1407 NAME is known to be a template because the user explicitly used the
1408 "template" keyword after the "::".
1410 All SCOPE_REFs should be built by use of this function. */
1413 build_qualified_name (tree type
, tree scope
, tree name
, bool template_p
)
1416 if (type
== error_mark_node
1417 || scope
== error_mark_node
1418 || name
== error_mark_node
)
1419 return error_mark_node
;
1420 t
= build2 (SCOPE_REF
, type
, scope
, name
);
1421 QUALIFIED_NAME_IS_TEMPLATE (t
) = template_p
;
1422 PTRMEM_OK_P (t
) = true;
1424 t
= convert_from_reference (t
);
1428 /* Returns nonzero if X is an expression for a (possibly overloaded)
1429 function. If "f" is a function or function template, "f", "c->f",
1430 "c.f", "C::f", and "f<int>" will all be considered possibly
1431 overloaded functions. Returns 2 if the function is actually
1432 overloaded, i.e., if it is impossible to know the type of the
1433 function without performing overload resolution. */
1436 is_overloaded_fn (tree x
)
1438 /* A baselink is also considered an overloaded function. */
1439 if (TREE_CODE (x
) == OFFSET_REF
1440 || TREE_CODE (x
) == COMPONENT_REF
)
1441 x
= TREE_OPERAND (x
, 1);
1443 x
= BASELINK_FUNCTIONS (x
);
1444 if (TREE_CODE (x
) == TEMPLATE_ID_EXPR
)
1445 x
= TREE_OPERAND (x
, 0);
1446 if (DECL_FUNCTION_TEMPLATE_P (OVL_CURRENT (x
))
1447 || (TREE_CODE (x
) == OVERLOAD
&& OVL_CHAIN (x
)))
1449 return (TREE_CODE (x
) == FUNCTION_DECL
1450 || TREE_CODE (x
) == OVERLOAD
);
1453 /* X is the CALL_EXPR_FN of a CALL_EXPR. If X represents a dependent name
1454 (14.6.2), return the IDENTIFIER_NODE for that name. Otherwise, return
1458 dependent_name (tree x
)
1460 if (TREE_CODE (x
) == IDENTIFIER_NODE
)
1462 if (TREE_CODE (x
) != COMPONENT_REF
1463 && is_overloaded_fn (x
))
1464 return DECL_NAME (get_first_fn (x
));
1468 /* Returns true iff X is an expression for an overloaded function
1469 whose type cannot be known without performing overload
1473 really_overloaded_fn (tree x
)
1475 return is_overloaded_fn (x
) == 2;
1481 gcc_assert (is_overloaded_fn (from
));
1482 /* A baselink is also considered an overloaded function. */
1483 if (TREE_CODE (from
) == OFFSET_REF
1484 || TREE_CODE (from
) == COMPONENT_REF
)
1485 from
= TREE_OPERAND (from
, 1);
1486 if (BASELINK_P (from
))
1487 from
= BASELINK_FUNCTIONS (from
);
1488 if (TREE_CODE (from
) == TEMPLATE_ID_EXPR
)
1489 from
= TREE_OPERAND (from
, 0);
1494 get_first_fn (tree from
)
1496 return OVL_CURRENT (get_fns (from
));
1499 /* Return a new OVL node, concatenating it with the old one. */
1502 ovl_cons (tree decl
, tree chain
)
1504 tree result
= make_node (OVERLOAD
);
1505 TREE_TYPE (result
) = unknown_type_node
;
1506 OVL_FUNCTION (result
) = decl
;
1507 TREE_CHAIN (result
) = chain
;
1512 /* Build a new overloaded function. If this is the first one,
1513 just return it; otherwise, ovl_cons the _DECLs */
1516 build_overload (tree decl
, tree chain
)
1518 if (! chain
&& TREE_CODE (decl
) != TEMPLATE_DECL
)
1520 return ovl_cons (decl
, chain
);
1523 /* Return TRUE if FN is a non-static member function, FALSE otherwise.
1524 This function looks into BASELINK and OVERLOAD nodes. */
1527 non_static_member_function_p (tree fn
)
1529 if (fn
== NULL_TREE
)
1532 if (is_overloaded_fn (fn
))
1533 fn
= get_first_fn (fn
);
1536 && DECL_NONSTATIC_MEMBER_FUNCTION_P (fn
));
1540 #define PRINT_RING_SIZE 4
1543 cxx_printable_name_internal (tree decl
, int v
, bool translate
)
1545 static unsigned int uid_ring
[PRINT_RING_SIZE
];
1546 static char *print_ring
[PRINT_RING_SIZE
];
1547 static bool trans_ring
[PRINT_RING_SIZE
];
1548 static int ring_counter
;
1551 /* Only cache functions. */
1553 || TREE_CODE (decl
) != FUNCTION_DECL
1554 || DECL_LANG_SPECIFIC (decl
) == 0)
1555 return lang_decl_name (decl
, v
, translate
);
1557 /* See if this print name is lying around. */
1558 for (i
= 0; i
< PRINT_RING_SIZE
; i
++)
1559 if (uid_ring
[i
] == DECL_UID (decl
) && translate
== trans_ring
[i
])
1560 /* yes, so return it. */
1561 return print_ring
[i
];
1563 if (++ring_counter
== PRINT_RING_SIZE
)
1566 if (current_function_decl
!= NULL_TREE
)
1568 /* There may be both translated and untranslated versions of the
1570 for (i
= 0; i
< 2; i
++)
1572 if (uid_ring
[ring_counter
] == DECL_UID (current_function_decl
))
1574 if (ring_counter
== PRINT_RING_SIZE
)
1577 gcc_assert (uid_ring
[ring_counter
] != DECL_UID (current_function_decl
));
1580 free (print_ring
[ring_counter
]);
1582 print_ring
[ring_counter
] = xstrdup (lang_decl_name (decl
, v
, translate
));
1583 uid_ring
[ring_counter
] = DECL_UID (decl
);
1584 trans_ring
[ring_counter
] = translate
;
1585 return print_ring
[ring_counter
];
1589 cxx_printable_name (tree decl
, int v
)
1591 return cxx_printable_name_internal (decl
, v
, false);
1595 cxx_printable_name_translate (tree decl
, int v
)
1597 return cxx_printable_name_internal (decl
, v
, true);
1600 /* Build the FUNCTION_TYPE or METHOD_TYPE which may throw exceptions
1601 listed in RAISES. */
1604 build_exception_variant (tree type
, tree raises
)
1609 if (comp_except_specs (raises
, TYPE_RAISES_EXCEPTIONS (type
), ce_exact
))
1612 type_quals
= TYPE_QUALS (type
);
1613 for (v
= TYPE_MAIN_VARIANT (type
); v
; v
= TYPE_NEXT_VARIANT (v
))
1614 if (check_qualified_type (v
, type
, type_quals
)
1615 && comp_except_specs (raises
, TYPE_RAISES_EXCEPTIONS (v
), ce_exact
))
1618 /* Need to build a new variant. */
1619 v
= build_variant_type_copy (type
);
1620 TYPE_RAISES_EXCEPTIONS (v
) = raises
;
1624 /* Given a TEMPLATE_TEMPLATE_PARM node T, create a new
1625 BOUND_TEMPLATE_TEMPLATE_PARM bound with NEWARGS as its template
1629 bind_template_template_parm (tree t
, tree newargs
)
1631 tree decl
= TYPE_NAME (t
);
1634 t2
= cxx_make_type (BOUND_TEMPLATE_TEMPLATE_PARM
);
1635 decl
= build_decl (input_location
,
1636 TYPE_DECL
, DECL_NAME (decl
), NULL_TREE
);
1638 /* These nodes have to be created to reflect new TYPE_DECL and template
1640 TEMPLATE_TYPE_PARM_INDEX (t2
) = copy_node (TEMPLATE_TYPE_PARM_INDEX (t
));
1641 TEMPLATE_PARM_DECL (TEMPLATE_TYPE_PARM_INDEX (t2
)) = decl
;
1642 TEMPLATE_TEMPLATE_PARM_TEMPLATE_INFO (t2
)
1643 = build_template_info (TEMPLATE_TEMPLATE_PARM_TEMPLATE_DECL (t
), newargs
);
1645 TREE_TYPE (decl
) = t2
;
1646 TYPE_NAME (t2
) = decl
;
1647 TYPE_STUB_DECL (t2
) = decl
;
1649 SET_TYPE_STRUCTURAL_EQUALITY (t2
);
1654 /* Called from count_trees via walk_tree. */
1657 count_trees_r (tree
*tp
, int *walk_subtrees
, void *data
)
1667 /* Debugging function for measuring the rough complexity of a tree
1671 count_trees (tree t
)
1674 cp_walk_tree_without_duplicates (&t
, count_trees_r
, &n_trees
);
1678 /* Called from verify_stmt_tree via walk_tree. */
1681 verify_stmt_tree_r (tree
* tp
,
1682 int* walk_subtrees ATTRIBUTE_UNUSED
,
1686 htab_t
*statements
= (htab_t
*) data
;
1689 if (!STATEMENT_CODE_P (TREE_CODE (t
)))
1692 /* If this statement is already present in the hash table, then
1693 there is a circularity in the statement tree. */
1694 gcc_assert (!htab_find (*statements
, t
));
1696 slot
= htab_find_slot (*statements
, t
, INSERT
);
1702 /* Debugging function to check that the statement T has not been
1703 corrupted. For now, this function simply checks that T contains no
1707 verify_stmt_tree (tree t
)
1710 statements
= htab_create (37, htab_hash_pointer
, htab_eq_pointer
, NULL
);
1711 cp_walk_tree (&t
, verify_stmt_tree_r
, &statements
, NULL
);
1712 htab_delete (statements
);
1715 /* Check if the type T depends on a type with no linkage and if so, return
1716 it. If RELAXED_P then do not consider a class type declared within
1717 a vague-linkage function to have no linkage. */
1720 no_linkage_check (tree t
, bool relaxed_p
)
1724 /* There's no point in checking linkage on template functions; we
1725 can't know their complete types. */
1726 if (processing_template_decl
)
1729 switch (TREE_CODE (t
))
1732 if (TYPE_PTRMEMFUNC_P (t
))
1734 /* Lambda types that don't have mangling scope have no linkage. We
1735 check CLASSTYPE_LAMBDA_EXPR here rather than LAMBDA_TYPE_P because
1736 when we get here from pushtag none of the lambda information is
1737 set up yet, so we want to assume that the lambda has linkage and
1738 fix it up later if not. */
1739 if (CLASSTYPE_LAMBDA_EXPR (t
)
1740 && LAMBDA_TYPE_EXTRA_SCOPE (t
) == NULL_TREE
)
1744 if (!CLASS_TYPE_P (t
))
1748 /* Only treat anonymous types as having no linkage if they're at
1749 namespace scope. This is core issue 966. */
1750 if (TYPE_ANONYMOUS_P (t
) && TYPE_NAMESPACE_SCOPE_P (t
))
1753 for (r
= CP_TYPE_CONTEXT (t
); ; )
1755 /* If we're a nested type of a !TREE_PUBLIC class, we might not
1756 have linkage, or we might just be in an anonymous namespace.
1757 If we're in a TREE_PUBLIC class, we have linkage. */
1758 if (TYPE_P (r
) && !TREE_PUBLIC (TYPE_NAME (r
)))
1759 return no_linkage_check (TYPE_CONTEXT (t
), relaxed_p
);
1760 else if (TREE_CODE (r
) == FUNCTION_DECL
)
1762 if (!relaxed_p
|| !vague_linkage_p (r
))
1765 r
= CP_DECL_CONTEXT (r
);
1775 case REFERENCE_TYPE
:
1776 return no_linkage_check (TREE_TYPE (t
), relaxed_p
);
1780 r
= no_linkage_check (TYPE_PTRMEM_POINTED_TO_TYPE (t
),
1784 return no_linkage_check (TYPE_PTRMEM_CLASS_TYPE (t
), relaxed_p
);
1787 r
= no_linkage_check (TYPE_METHOD_BASETYPE (t
), relaxed_p
);
1794 for (parm
= TYPE_ARG_TYPES (t
);
1795 parm
&& parm
!= void_list_node
;
1796 parm
= TREE_CHAIN (parm
))
1798 r
= no_linkage_check (TREE_VALUE (parm
), relaxed_p
);
1802 return no_linkage_check (TREE_TYPE (t
), relaxed_p
);
1810 #ifdef GATHER_STATISTICS
1811 extern int depth_reached
;
1815 cxx_print_statistics (void)
1817 print_search_statistics ();
1818 print_class_statistics ();
1819 print_template_statistics ();
1820 #ifdef GATHER_STATISTICS
1821 fprintf (stderr
, "maximum template instantiation depth reached: %d\n",
1826 /* Return, as an INTEGER_CST node, the number of elements for TYPE
1827 (which is an ARRAY_TYPE). This counts only elements of the top
1831 array_type_nelts_top (tree type
)
1833 return fold_build2_loc (input_location
,
1834 PLUS_EXPR
, sizetype
,
1835 array_type_nelts (type
),
1839 /* Return, as an INTEGER_CST node, the number of elements for TYPE
1840 (which is an ARRAY_TYPE). This one is a recursive count of all
1841 ARRAY_TYPEs that are clumped together. */
1844 array_type_nelts_total (tree type
)
1846 tree sz
= array_type_nelts_top (type
);
1847 type
= TREE_TYPE (type
);
1848 while (TREE_CODE (type
) == ARRAY_TYPE
)
1850 tree n
= array_type_nelts_top (type
);
1851 sz
= fold_build2_loc (input_location
,
1852 MULT_EXPR
, sizetype
, sz
, n
);
1853 type
= TREE_TYPE (type
);
1858 /* Called from break_out_target_exprs via mapcar. */
1861 bot_manip (tree
* tp
, int* walk_subtrees
, void* data
)
1863 splay_tree target_remap
= ((splay_tree
) data
);
1866 if (!TYPE_P (t
) && TREE_CONSTANT (t
) && !TREE_SIDE_EFFECTS (t
))
1868 /* There can't be any TARGET_EXPRs or their slot variables below this
1869 point. But we must make a copy, in case subsequent processing
1870 alters any part of it. For example, during gimplification a cast
1871 of the form (T) &X::f (where "f" is a member function) will lead
1872 to replacing the PTRMEM_CST for &X::f with a VAR_DECL. */
1874 *tp
= unshare_expr (t
);
1877 if (TREE_CODE (t
) == TARGET_EXPR
)
1881 if (TREE_CODE (TREE_OPERAND (t
, 1)) == AGGR_INIT_EXPR
)
1883 u
= build_cplus_new (TREE_TYPE (t
), TREE_OPERAND (t
, 1),
1884 tf_warning_or_error
);
1885 if (AGGR_INIT_ZERO_FIRST (TREE_OPERAND (t
, 1)))
1886 AGGR_INIT_ZERO_FIRST (TREE_OPERAND (u
, 1)) = true;
1889 u
= build_target_expr_with_type (TREE_OPERAND (t
, 1), TREE_TYPE (t
),
1890 tf_warning_or_error
);
1892 TARGET_EXPR_IMPLICIT_P (u
) = TARGET_EXPR_IMPLICIT_P (t
);
1893 TARGET_EXPR_LIST_INIT_P (u
) = TARGET_EXPR_LIST_INIT_P (t
);
1894 TARGET_EXPR_DIRECT_INIT_P (u
) = TARGET_EXPR_DIRECT_INIT_P (t
);
1896 /* Map the old variable to the new one. */
1897 splay_tree_insert (target_remap
,
1898 (splay_tree_key
) TREE_OPERAND (t
, 0),
1899 (splay_tree_value
) TREE_OPERAND (u
, 0));
1901 TREE_OPERAND (u
, 1) = break_out_target_exprs (TREE_OPERAND (u
, 1));
1903 /* Replace the old expression with the new version. */
1905 /* We don't have to go below this point; the recursive call to
1906 break_out_target_exprs will have handled anything below this
1912 /* Make a copy of this node. */
1913 t
= copy_tree_r (tp
, walk_subtrees
, NULL
);
1914 if (TREE_CODE (*tp
) == CALL_EXPR
)
1915 set_flags_from_callee (*tp
);
1919 /* Replace all remapped VAR_DECLs in T with their new equivalents.
1920 DATA is really a splay-tree mapping old variables to new
1924 bot_replace (tree
* t
,
1925 int* walk_subtrees ATTRIBUTE_UNUSED
,
1928 splay_tree target_remap
= ((splay_tree
) data
);
1930 if (TREE_CODE (*t
) == VAR_DECL
)
1932 splay_tree_node n
= splay_tree_lookup (target_remap
,
1933 (splay_tree_key
) *t
);
1935 *t
= (tree
) n
->value
;
1937 else if (TREE_CODE (*t
) == PARM_DECL
1938 && DECL_NAME (*t
) == this_identifier
)
1940 /* In an NSDMI we need to replace the 'this' parameter we used for
1941 parsing with the real one for this function. */
1942 *t
= current_class_ptr
;
1948 /* When we parse a default argument expression, we may create
1949 temporary variables via TARGET_EXPRs. When we actually use the
1950 default-argument expression, we make a copy of the expression
1951 and replace the temporaries with appropriate local versions. */
1954 break_out_target_exprs (tree t
)
1956 static int target_remap_count
;
1957 static splay_tree target_remap
;
1959 if (!target_remap_count
++)
1960 target_remap
= splay_tree_new (splay_tree_compare_pointers
,
1961 /*splay_tree_delete_key_fn=*/NULL
,
1962 /*splay_tree_delete_value_fn=*/NULL
);
1963 cp_walk_tree (&t
, bot_manip
, target_remap
, NULL
);
1964 cp_walk_tree (&t
, bot_replace
, target_remap
, NULL
);
1966 if (!--target_remap_count
)
1968 splay_tree_delete (target_remap
);
1969 target_remap
= NULL
;
1975 /* Similar to `build_nt', but for template definitions of dependent
1979 build_min_nt (enum tree_code code
, ...)
1986 gcc_assert (TREE_CODE_CLASS (code
) != tcc_vl_exp
);
1990 t
= make_node (code
);
1991 length
= TREE_CODE_LENGTH (code
);
1993 for (i
= 0; i
< length
; i
++)
1995 tree x
= va_arg (p
, tree
);
1996 TREE_OPERAND (t
, i
) = x
;
2004 /* Similar to `build', but for template definitions. */
2007 build_min (enum tree_code code
, tree tt
, ...)
2014 gcc_assert (TREE_CODE_CLASS (code
) != tcc_vl_exp
);
2018 t
= make_node (code
);
2019 length
= TREE_CODE_LENGTH (code
);
2022 for (i
= 0; i
< length
; i
++)
2024 tree x
= va_arg (p
, tree
);
2025 TREE_OPERAND (t
, i
) = x
;
2026 if (x
&& !TYPE_P (x
) && TREE_SIDE_EFFECTS (x
))
2027 TREE_SIDE_EFFECTS (t
) = 1;
2034 /* Similar to `build', but for template definitions of non-dependent
2035 expressions. NON_DEP is the non-dependent expression that has been
2039 build_min_non_dep (enum tree_code code
, tree non_dep
, ...)
2046 gcc_assert (TREE_CODE_CLASS (code
) != tcc_vl_exp
);
2048 va_start (p
, non_dep
);
2050 if (REFERENCE_REF_P (non_dep
))
2051 non_dep
= TREE_OPERAND (non_dep
, 0);
2053 t
= make_node (code
);
2054 length
= TREE_CODE_LENGTH (code
);
2055 TREE_TYPE (t
) = TREE_TYPE (non_dep
);
2056 TREE_SIDE_EFFECTS (t
) = TREE_SIDE_EFFECTS (non_dep
);
2058 for (i
= 0; i
< length
; i
++)
2060 tree x
= va_arg (p
, tree
);
2061 TREE_OPERAND (t
, i
) = x
;
2064 if (code
== COMPOUND_EXPR
&& TREE_CODE (non_dep
) != COMPOUND_EXPR
)
2065 /* This should not be considered a COMPOUND_EXPR, because it
2066 resolves to an overload. */
2067 COMPOUND_EXPR_OVERLOADED (t
) = 1;
2070 return convert_from_reference (t
);
2073 /* Similar to `build_nt_call_vec', but for template definitions of
2074 non-dependent expressions. NON_DEP is the non-dependent expression
2075 that has been built. */
2078 build_min_non_dep_call_vec (tree non_dep
, tree fn
, VEC(tree
,gc
) *argvec
)
2080 tree t
= build_nt_call_vec (fn
, argvec
);
2081 if (REFERENCE_REF_P (non_dep
))
2082 non_dep
= TREE_OPERAND (non_dep
, 0);
2083 TREE_TYPE (t
) = TREE_TYPE (non_dep
);
2084 TREE_SIDE_EFFECTS (t
) = TREE_SIDE_EFFECTS (non_dep
);
2085 return convert_from_reference (t
);
2089 get_type_decl (tree t
)
2091 if (TREE_CODE (t
) == TYPE_DECL
)
2094 return TYPE_STUB_DECL (t
);
2095 gcc_assert (t
== error_mark_node
);
2099 /* Returns the namespace that contains DECL, whether directly or
2103 decl_namespace_context (tree decl
)
2107 if (TREE_CODE (decl
) == NAMESPACE_DECL
)
2109 else if (TYPE_P (decl
))
2110 decl
= CP_DECL_CONTEXT (TYPE_MAIN_DECL (decl
));
2112 decl
= CP_DECL_CONTEXT (decl
);
2116 /* Returns true if decl is within an anonymous namespace, however deeply
2117 nested, or false otherwise. */
2120 decl_anon_ns_mem_p (const_tree decl
)
2124 if (decl
== NULL_TREE
|| decl
== error_mark_node
)
2126 if (TREE_CODE (decl
) == NAMESPACE_DECL
2127 && DECL_NAME (decl
) == NULL_TREE
)
2129 /* Classes and namespaces inside anonymous namespaces have
2130 TREE_PUBLIC == 0, so we can shortcut the search. */
2131 else if (TYPE_P (decl
))
2132 return (TREE_PUBLIC (TYPE_NAME (decl
)) == 0);
2133 else if (TREE_CODE (decl
) == NAMESPACE_DECL
)
2134 return (TREE_PUBLIC (decl
) == 0);
2136 decl
= DECL_CONTEXT (decl
);
2140 /* Return truthvalue of whether T1 is the same tree structure as T2.
2141 Return 1 if they are the same. Return 0 if they are different. */
2144 cp_tree_equal (tree t1
, tree t2
)
2146 enum tree_code code1
, code2
;
2153 for (code1
= TREE_CODE (t1
);
2154 CONVERT_EXPR_CODE_P (code1
)
2155 || code1
== NON_LVALUE_EXPR
;
2156 code1
= TREE_CODE (t1
))
2157 t1
= TREE_OPERAND (t1
, 0);
2158 for (code2
= TREE_CODE (t2
);
2159 CONVERT_EXPR_CODE_P (code2
)
2160 || code1
== NON_LVALUE_EXPR
;
2161 code2
= TREE_CODE (t2
))
2162 t2
= TREE_OPERAND (t2
, 0);
2164 /* They might have become equal now. */
2174 return TREE_INT_CST_LOW (t1
) == TREE_INT_CST_LOW (t2
)
2175 && TREE_INT_CST_HIGH (t1
) == TREE_INT_CST_HIGH (t2
);
2178 return REAL_VALUES_EQUAL (TREE_REAL_CST (t1
), TREE_REAL_CST (t2
));
2181 return TREE_STRING_LENGTH (t1
) == TREE_STRING_LENGTH (t2
)
2182 && !memcmp (TREE_STRING_POINTER (t1
), TREE_STRING_POINTER (t2
),
2183 TREE_STRING_LENGTH (t1
));
2186 return FIXED_VALUES_IDENTICAL (TREE_FIXED_CST (t1
),
2187 TREE_FIXED_CST (t2
));
2190 return cp_tree_equal (TREE_REALPART (t1
), TREE_REALPART (t2
))
2191 && cp_tree_equal (TREE_IMAGPART (t1
), TREE_IMAGPART (t2
));
2194 /* We need to do this when determining whether or not two
2195 non-type pointer to member function template arguments
2197 if (!same_type_p (TREE_TYPE (t1
), TREE_TYPE (t2
))
2198 || CONSTRUCTOR_NELTS (t1
) != CONSTRUCTOR_NELTS (t2
))
2203 FOR_EACH_CONSTRUCTOR_ELT (CONSTRUCTOR_ELTS (t1
), i
, field
, value
)
2205 constructor_elt
*elt2
= CONSTRUCTOR_ELT (t2
, i
);
2206 if (!cp_tree_equal (field
, elt2
->index
)
2207 || !cp_tree_equal (value
, elt2
->value
))
2214 if (!cp_tree_equal (TREE_PURPOSE (t1
), TREE_PURPOSE (t2
)))
2216 if (!cp_tree_equal (TREE_VALUE (t1
), TREE_VALUE (t2
)))
2218 return cp_tree_equal (TREE_CHAIN (t1
), TREE_CHAIN (t2
));
2221 return cp_tree_equal (TREE_OPERAND (t1
, 0), TREE_OPERAND (t2
, 0));
2226 call_expr_arg_iterator iter1
, iter2
;
2227 /* Core 1321: dependent names are equivalent even if the
2228 overload sets are different. */
2229 tree name1
= dependent_name (CALL_EXPR_FN (t1
));
2230 tree name2
= dependent_name (CALL_EXPR_FN (t2
));
2231 if (!(name1
&& name2
&& name1
== name2
)
2232 && !cp_tree_equal (CALL_EXPR_FN (t1
), CALL_EXPR_FN (t2
)))
2234 for (arg1
= first_call_expr_arg (t1
, &iter1
),
2235 arg2
= first_call_expr_arg (t2
, &iter2
);
2237 arg1
= next_call_expr_arg (&iter1
),
2238 arg2
= next_call_expr_arg (&iter2
))
2239 if (!cp_tree_equal (arg1
, arg2
))
2248 tree o1
= TREE_OPERAND (t1
, 0);
2249 tree o2
= TREE_OPERAND (t2
, 0);
2251 /* Special case: if either target is an unallocated VAR_DECL,
2252 it means that it's going to be unified with whatever the
2253 TARGET_EXPR is really supposed to initialize, so treat it
2254 as being equivalent to anything. */
2255 if (TREE_CODE (o1
) == VAR_DECL
&& DECL_NAME (o1
) == NULL_TREE
2256 && !DECL_RTL_SET_P (o1
))
2258 else if (TREE_CODE (o2
) == VAR_DECL
&& DECL_NAME (o2
) == NULL_TREE
2259 && !DECL_RTL_SET_P (o2
))
2261 else if (!cp_tree_equal (o1
, o2
))
2264 return cp_tree_equal (TREE_OPERAND (t1
, 1), TREE_OPERAND (t2
, 1));
2267 case WITH_CLEANUP_EXPR
:
2268 if (!cp_tree_equal (TREE_OPERAND (t1
, 0), TREE_OPERAND (t2
, 0)))
2270 return cp_tree_equal (TREE_OPERAND (t1
, 1), TREE_OPERAND (t1
, 1));
2273 if (TREE_OPERAND (t1
, 1) != TREE_OPERAND (t2
, 1))
2275 return cp_tree_equal (TREE_OPERAND (t1
, 0), TREE_OPERAND (t2
, 0));
2278 /* For comparing uses of parameters in late-specified return types
2279 with an out-of-class definition of the function, but can also come
2280 up for expressions that involve 'this' in a member function
2282 if (same_type_p (TREE_TYPE (t1
), TREE_TYPE (t2
)))
2284 if (DECL_ARTIFICIAL (t1
) ^ DECL_ARTIFICIAL (t2
))
2286 if (DECL_ARTIFICIAL (t1
)
2287 || (DECL_PARM_LEVEL (t1
) == DECL_PARM_LEVEL (t2
)
2288 && DECL_PARM_INDEX (t1
) == DECL_PARM_INDEX (t2
)))
2297 case IDENTIFIER_NODE
:
2302 return (BASELINK_BINFO (t1
) == BASELINK_BINFO (t2
)
2303 && BASELINK_ACCESS_BINFO (t1
) == BASELINK_ACCESS_BINFO (t2
)
2304 && cp_tree_equal (BASELINK_FUNCTIONS (t1
),
2305 BASELINK_FUNCTIONS (t2
)));
2307 case TEMPLATE_PARM_INDEX
:
2308 if (TEMPLATE_PARM_NUM_SIBLINGS (t1
)
2309 != TEMPLATE_PARM_NUM_SIBLINGS (t2
))
2311 return (TEMPLATE_PARM_IDX (t1
) == TEMPLATE_PARM_IDX (t2
)
2312 && TEMPLATE_PARM_LEVEL (t1
) == TEMPLATE_PARM_LEVEL (t2
)
2313 && (TEMPLATE_PARM_PARAMETER_PACK (t1
)
2314 == TEMPLATE_PARM_PARAMETER_PACK (t2
))
2315 && same_type_p (TREE_TYPE (TEMPLATE_PARM_DECL (t1
)),
2316 TREE_TYPE (TEMPLATE_PARM_DECL (t2
))));
2318 case TEMPLATE_ID_EXPR
:
2323 if (!cp_tree_equal (TREE_OPERAND (t1
, 0), TREE_OPERAND (t2
, 0)))
2325 vec1
= TREE_OPERAND (t1
, 1);
2326 vec2
= TREE_OPERAND (t2
, 1);
2329 return !vec1
&& !vec2
;
2331 if (TREE_VEC_LENGTH (vec1
) != TREE_VEC_LENGTH (vec2
))
2334 for (ix
= TREE_VEC_LENGTH (vec1
); ix
--;)
2335 if (!cp_tree_equal (TREE_VEC_ELT (vec1
, ix
),
2336 TREE_VEC_ELT (vec2
, ix
)))
2345 tree o1
= TREE_OPERAND (t1
, 0);
2346 tree o2
= TREE_OPERAND (t2
, 0);
2348 if (TREE_CODE (o1
) != TREE_CODE (o2
))
2351 return same_type_p (o1
, o2
);
2353 return cp_tree_equal (o1
, o2
);
2358 tree t1_op1
, t2_op1
;
2360 if (!cp_tree_equal (TREE_OPERAND (t1
, 0), TREE_OPERAND (t2
, 0)))
2363 t1_op1
= TREE_OPERAND (t1
, 1);
2364 t2_op1
= TREE_OPERAND (t2
, 1);
2365 if (TREE_CODE (t1_op1
) != TREE_CODE (t2_op1
))
2368 return cp_tree_equal (TREE_OPERAND (t1
, 2), TREE_OPERAND (t2
, 2));
2372 /* Two pointer-to-members are the same if they point to the same
2373 field or function in the same class. */
2374 if (PTRMEM_CST_MEMBER (t1
) != PTRMEM_CST_MEMBER (t2
))
2377 return same_type_p (PTRMEM_CST_CLASS (t1
), PTRMEM_CST_CLASS (t2
));
2380 if (OVL_FUNCTION (t1
) != OVL_FUNCTION (t2
))
2382 return cp_tree_equal (OVL_CHAIN (t1
), OVL_CHAIN (t2
));
2385 if (TRAIT_EXPR_KIND (t1
) != TRAIT_EXPR_KIND (t2
))
2387 return same_type_p (TRAIT_EXPR_TYPE1 (t1
), TRAIT_EXPR_TYPE1 (t2
))
2388 && same_type_p (TRAIT_EXPR_TYPE2 (t1
), TRAIT_EXPR_TYPE2 (t2
));
2391 case STATIC_CAST_EXPR
:
2392 case REINTERPRET_CAST_EXPR
:
2393 case CONST_CAST_EXPR
:
2394 case DYNAMIC_CAST_EXPR
:
2395 case IMPLICIT_CONV_EXPR
:
2397 if (!same_type_p (TREE_TYPE (t1
), TREE_TYPE (t2
)))
2399 /* Now compare operands as usual. */
2402 case DEFERRED_NOEXCEPT
:
2403 return (cp_tree_equal (DEFERRED_NOEXCEPT_PATTERN (t1
),
2404 DEFERRED_NOEXCEPT_PATTERN (t2
))
2405 && comp_template_args (DEFERRED_NOEXCEPT_ARGS (t1
),
2406 DEFERRED_NOEXCEPT_ARGS (t2
)));
2413 switch (TREE_CODE_CLASS (code1
))
2417 case tcc_comparison
:
2418 case tcc_expression
:
2425 n
= cp_tree_operand_length (t1
);
2426 if (TREE_CODE_CLASS (code1
) == tcc_vl_exp
2427 && n
!= TREE_OPERAND_LENGTH (t2
))
2430 for (i
= 0; i
< n
; ++i
)
2431 if (!cp_tree_equal (TREE_OPERAND (t1
, i
), TREE_OPERAND (t2
, i
)))
2438 return same_type_p (t1
, t2
);
2442 /* We can get here with --disable-checking. */
2446 /* The type of ARG when used as an lvalue. */
2449 lvalue_type (tree arg
)
2451 tree type
= TREE_TYPE (arg
);
2455 /* The type of ARG for printing error messages; denote lvalues with
2459 error_type (tree arg
)
2461 tree type
= TREE_TYPE (arg
);
2463 if (TREE_CODE (type
) == ARRAY_TYPE
)
2465 else if (TREE_CODE (type
) == ERROR_MARK
)
2467 else if (real_lvalue_p (arg
))
2468 type
= build_reference_type (lvalue_type (arg
));
2469 else if (MAYBE_CLASS_TYPE_P (type
))
2470 type
= lvalue_type (arg
);
2475 /* Does FUNCTION use a variable-length argument list? */
2478 varargs_function_p (const_tree function
)
2480 return stdarg_p (TREE_TYPE (function
));
2483 /* Returns 1 if decl is a member of a class. */
2486 member_p (const_tree decl
)
2488 const_tree
const ctx
= DECL_CONTEXT (decl
);
2489 return (ctx
&& TYPE_P (ctx
));
2492 /* Create a placeholder for member access where we don't actually have an
2493 object that the access is against. */
2496 build_dummy_object (tree type
)
2498 tree decl
= build1 (NOP_EXPR
, build_pointer_type (type
), void_zero_node
);
2499 return cp_build_indirect_ref (decl
, RO_NULL
, tf_warning_or_error
);
2502 /* We've gotten a reference to a member of TYPE. Return *this if appropriate,
2503 or a dummy object otherwise. If BINFOP is non-0, it is filled with the
2504 binfo path from current_class_type to TYPE, or 0. */
2507 maybe_dummy_object (tree type
, tree
* binfop
)
2511 tree current
= current_nonlambda_class_type ();
2514 && (binfo
= lookup_base (current
, type
, ba_any
, NULL
)))
2518 /* Reference from a nested class member function. */
2520 binfo
= TYPE_BINFO (type
);
2526 if (current_class_ref
2527 /* current_class_ref might not correspond to current_class_type if
2528 we're in tsubst_default_argument or a lambda-declarator; in either
2529 case, we want to use current_class_ref if it matches CONTEXT. */
2530 && (same_type_ignoring_top_level_qualifiers_p
2531 (TREE_TYPE (current_class_ref
), context
)))
2532 decl
= current_class_ref
;
2533 else if (current
!= current_class_type
2534 && context
== nonlambda_method_basetype ())
2535 /* In a lambda, need to go through 'this' capture. */
2536 decl
= (build_x_indirect_ref
2537 ((lambda_expr_this_capture
2538 (CLASSTYPE_LAMBDA_EXPR (current_class_type
))),
2539 RO_NULL
, tf_warning_or_error
));
2541 decl
= build_dummy_object (context
);
2546 /* Returns 1 if OB is a placeholder object, or a pointer to one. */
2549 is_dummy_object (const_tree ob
)
2551 if (TREE_CODE (ob
) == INDIRECT_REF
)
2552 ob
= TREE_OPERAND (ob
, 0);
2553 return (TREE_CODE (ob
) == NOP_EXPR
2554 && TREE_OPERAND (ob
, 0) == void_zero_node
);
2557 /* Returns 1 iff type T is something we want to treat as a scalar type for
2558 the purpose of deciding whether it is trivial/POD/standard-layout. */
2561 scalarish_type_p (const_tree t
)
2563 if (t
== error_mark_node
)
2566 return (SCALAR_TYPE_P (t
)
2567 || TREE_CODE (t
) == VECTOR_TYPE
);
2570 /* Returns true iff T requires non-trivial default initialization. */
2573 type_has_nontrivial_default_init (const_tree t
)
2575 t
= strip_array_types (CONST_CAST_TREE (t
));
2577 if (CLASS_TYPE_P (t
))
2578 return TYPE_HAS_COMPLEX_DFLT (t
);
2583 /* Returns true iff copying an object of type T (including via move
2584 constructor) is non-trivial. That is, T has no non-trivial copy
2585 constructors and no non-trivial move constructors. */
2588 type_has_nontrivial_copy_init (const_tree t
)
2590 t
= strip_array_types (CONST_CAST_TREE (t
));
2592 if (CLASS_TYPE_P (t
))
2594 gcc_assert (COMPLETE_TYPE_P (t
));
2595 return ((TYPE_HAS_COPY_CTOR (t
)
2596 && TYPE_HAS_COMPLEX_COPY_CTOR (t
))
2597 || TYPE_HAS_COMPLEX_MOVE_CTOR (t
));
2603 /* Returns 1 iff type T is a trivially copyable type, as defined in
2604 [basic.types] and [class]. */
2607 trivially_copyable_p (const_tree t
)
2609 t
= strip_array_types (CONST_CAST_TREE (t
));
2611 if (CLASS_TYPE_P (t
))
2612 return ((!TYPE_HAS_COPY_CTOR (t
)
2613 || !TYPE_HAS_COMPLEX_COPY_CTOR (t
))
2614 && !TYPE_HAS_COMPLEX_MOVE_CTOR (t
)
2615 && (!TYPE_HAS_COPY_ASSIGN (t
)
2616 || !TYPE_HAS_COMPLEX_COPY_ASSIGN (t
))
2617 && !TYPE_HAS_COMPLEX_MOVE_ASSIGN (t
)
2618 && TYPE_HAS_TRIVIAL_DESTRUCTOR (t
));
2620 return scalarish_type_p (t
);
2623 /* Returns 1 iff type T is a trivial type, as defined in [basic.types] and
2627 trivial_type_p (const_tree t
)
2629 t
= strip_array_types (CONST_CAST_TREE (t
));
2631 if (CLASS_TYPE_P (t
))
2632 return (TYPE_HAS_TRIVIAL_DFLT (t
)
2633 && trivially_copyable_p (t
));
2635 return scalarish_type_p (t
);
2638 /* Returns 1 iff type T is a POD type, as defined in [basic.types]. */
2641 pod_type_p (const_tree t
)
2643 /* This CONST_CAST is okay because strip_array_types returns its
2644 argument unmodified and we assign it to a const_tree. */
2645 t
= strip_array_types (CONST_CAST_TREE(t
));
2647 if (!CLASS_TYPE_P (t
))
2648 return scalarish_type_p (t
);
2649 else if (cxx_dialect
> cxx98
)
2650 /* [class]/10: A POD struct is a class that is both a trivial class and a
2651 standard-layout class, and has no non-static data members of type
2652 non-POD struct, non-POD union (or array of such types).
2654 We don't need to check individual members because if a member is
2655 non-std-layout or non-trivial, the class will be too. */
2656 return (std_layout_type_p (t
) && trivial_type_p (t
));
2658 /* The C++98 definition of POD is different. */
2659 return !CLASSTYPE_NON_LAYOUT_POD_P (t
);
2662 /* Returns true iff T is POD for the purpose of layout, as defined in the
2666 layout_pod_type_p (const_tree t
)
2668 t
= strip_array_types (CONST_CAST_TREE (t
));
2670 if (CLASS_TYPE_P (t
))
2671 return !CLASSTYPE_NON_LAYOUT_POD_P (t
);
2673 return scalarish_type_p (t
);
2676 /* Returns true iff T is a standard-layout type, as defined in
2680 std_layout_type_p (const_tree t
)
2682 t
= strip_array_types (CONST_CAST_TREE (t
));
2684 if (CLASS_TYPE_P (t
))
2685 return !CLASSTYPE_NON_STD_LAYOUT (t
);
2687 return scalarish_type_p (t
);
2690 /* Nonzero iff type T is a class template implicit specialization. */
2693 class_tmpl_impl_spec_p (const_tree t
)
2695 return CLASS_TYPE_P (t
) && CLASSTYPE_TEMPLATE_INSTANTIATION (t
);
2698 /* Returns 1 iff zero initialization of type T means actually storing
2702 zero_init_p (const_tree t
)
2704 /* This CONST_CAST is okay because strip_array_types returns its
2705 argument unmodified and we assign it to a const_tree. */
2706 t
= strip_array_types (CONST_CAST_TREE(t
));
2708 if (t
== error_mark_node
)
2711 /* NULL pointers to data members are initialized with -1. */
2712 if (TYPE_PTRMEM_P (t
))
2715 /* Classes that contain types that can't be zero-initialized, cannot
2716 be zero-initialized themselves. */
2717 if (CLASS_TYPE_P (t
) && CLASSTYPE_NON_ZERO_INIT_P (t
))
2723 /* Table of valid C++ attributes. */
2724 const struct attribute_spec cxx_attribute_table
[] =
2726 /* { name, min_len, max_len, decl_req, type_req, fn_type_req, handler,
2727 affects_type_identity } */
2728 { "java_interface", 0, 0, false, false, false,
2729 handle_java_interface_attribute
, false },
2730 { "com_interface", 0, 0, false, false, false,
2731 handle_com_interface_attribute
, false },
2732 { "init_priority", 1, 1, true, false, false,
2733 handle_init_priority_attribute
, false },
2734 { NULL
, 0, 0, false, false, false, NULL
, false }
2737 /* Handle a "java_interface" attribute; arguments as in
2738 struct attribute_spec.handler. */
2740 handle_java_interface_attribute (tree
* node
,
2742 tree args ATTRIBUTE_UNUSED
,
2747 || !CLASS_TYPE_P (*node
)
2748 || !TYPE_FOR_JAVA (*node
))
2750 error ("%qE attribute can only be applied to Java class definitions",
2752 *no_add_attrs
= true;
2755 if (!(flags
& (int) ATTR_FLAG_TYPE_IN_PLACE
))
2756 *node
= build_variant_type_copy (*node
);
2757 TYPE_JAVA_INTERFACE (*node
) = 1;
2762 /* Handle a "com_interface" attribute; arguments as in
2763 struct attribute_spec.handler. */
2765 handle_com_interface_attribute (tree
* node
,
2767 tree args ATTRIBUTE_UNUSED
,
2768 int flags ATTRIBUTE_UNUSED
,
2773 *no_add_attrs
= true;
2776 || !CLASS_TYPE_P (*node
)
2777 || *node
!= TYPE_MAIN_VARIANT (*node
))
2779 warning (OPT_Wattributes
, "%qE attribute can only be applied "
2780 "to class definitions", name
);
2785 warning (0, "%qE is obsolete; g++ vtables are now COM-compatible by default",
2791 /* Handle an "init_priority" attribute; arguments as in
2792 struct attribute_spec.handler. */
2794 handle_init_priority_attribute (tree
* node
,
2797 int flags ATTRIBUTE_UNUSED
,
2800 tree initp_expr
= TREE_VALUE (args
);
2802 tree type
= TREE_TYPE (decl
);
2805 STRIP_NOPS (initp_expr
);
2807 if (!initp_expr
|| TREE_CODE (initp_expr
) != INTEGER_CST
)
2809 error ("requested init_priority is not an integer constant");
2810 *no_add_attrs
= true;
2814 pri
= TREE_INT_CST_LOW (initp_expr
);
2816 type
= strip_array_types (type
);
2818 if (decl
== NULL_TREE
2819 || TREE_CODE (decl
) != VAR_DECL
2820 || !TREE_STATIC (decl
)
2821 || DECL_EXTERNAL (decl
)
2822 || (TREE_CODE (type
) != RECORD_TYPE
2823 && TREE_CODE (type
) != UNION_TYPE
)
2824 /* Static objects in functions are initialized the
2825 first time control passes through that
2826 function. This is not precise enough to pin down an
2827 init_priority value, so don't allow it. */
2828 || current_function_decl
)
2830 error ("can only use %qE attribute on file-scope definitions "
2831 "of objects of class type", name
);
2832 *no_add_attrs
= true;
2836 if (pri
> MAX_INIT_PRIORITY
|| pri
<= 0)
2838 error ("requested init_priority is out of range");
2839 *no_add_attrs
= true;
2843 /* Check for init_priorities that are reserved for
2844 language and runtime support implementations.*/
2845 if (pri
<= MAX_RESERVED_INIT_PRIORITY
)
2848 (0, "requested init_priority is reserved for internal use");
2851 if (SUPPORTS_INIT_PRIORITY
)
2853 SET_DECL_INIT_PRIORITY (decl
, pri
);
2854 DECL_HAS_INIT_PRIORITY_P (decl
) = 1;
2859 error ("%qE attribute is not supported on this platform", name
);
2860 *no_add_attrs
= true;
2865 /* Return a new PTRMEM_CST of the indicated TYPE. The MEMBER is the
2866 thing pointed to by the constant. */
2869 make_ptrmem_cst (tree type
, tree member
)
2871 tree ptrmem_cst
= make_node (PTRMEM_CST
);
2872 TREE_TYPE (ptrmem_cst
) = type
;
2873 PTRMEM_CST_MEMBER (ptrmem_cst
) = member
;
2877 /* Build a variant of TYPE that has the indicated ATTRIBUTES. May
2878 return an existing type if an appropriate type already exists. */
2881 cp_build_type_attribute_variant (tree type
, tree attributes
)
2885 new_type
= build_type_attribute_variant (type
, attributes
);
2886 if (TREE_CODE (new_type
) == FUNCTION_TYPE
2887 || TREE_CODE (new_type
) == METHOD_TYPE
)
2888 new_type
= build_exception_variant (new_type
,
2889 TYPE_RAISES_EXCEPTIONS (type
));
2891 /* Making a new main variant of a class type is broken. */
2892 gcc_assert (!CLASS_TYPE_P (type
) || new_type
== type
);
2897 /* Return TRUE if TYPE1 and TYPE2 are identical for type hashing purposes.
2898 Called only after doing all language independent checks. Only
2899 to check TYPE_RAISES_EXCEPTIONS for FUNCTION_TYPE, the rest is already
2900 compared in type_hash_eq. */
2903 cxx_type_hash_eq (const_tree typea
, const_tree typeb
)
2905 gcc_assert (TREE_CODE (typea
) == FUNCTION_TYPE
2906 || TREE_CODE (typea
) == METHOD_TYPE
);
2908 return comp_except_specs (TYPE_RAISES_EXCEPTIONS (typea
),
2909 TYPE_RAISES_EXCEPTIONS (typeb
), ce_exact
);
2912 /* Apply FUNC to all language-specific sub-trees of TP in a pre-order
2913 traversal. Called from walk_tree. */
2916 cp_walk_subtrees (tree
*tp
, int *walk_subtrees_p
, walk_tree_fn func
,
2917 void *data
, struct pointer_set_t
*pset
)
2919 enum tree_code code
= TREE_CODE (*tp
);
2922 #define WALK_SUBTREE(NODE) \
2925 result = cp_walk_tree (&(NODE), func, data, pset); \
2926 if (result) goto out; \
2930 /* Not one of the easy cases. We must explicitly go through the
2936 case TEMPLATE_TEMPLATE_PARM
:
2937 case BOUND_TEMPLATE_TEMPLATE_PARM
:
2938 case UNBOUND_CLASS_TEMPLATE
:
2939 case TEMPLATE_PARM_INDEX
:
2940 case TEMPLATE_TYPE_PARM
:
2943 case UNDERLYING_TYPE
:
2944 /* None of these have subtrees other than those already walked
2946 *walk_subtrees_p
= 0;
2950 WALK_SUBTREE (BASELINK_FUNCTIONS (*tp
));
2951 *walk_subtrees_p
= 0;
2955 WALK_SUBTREE (TREE_TYPE (*tp
));
2956 *walk_subtrees_p
= 0;
2960 WALK_SUBTREE (TREE_PURPOSE (*tp
));
2964 WALK_SUBTREE (OVL_FUNCTION (*tp
));
2965 WALK_SUBTREE (OVL_CHAIN (*tp
));
2966 *walk_subtrees_p
= 0;
2970 WALK_SUBTREE (DECL_NAME (*tp
));
2971 WALK_SUBTREE (USING_DECL_SCOPE (*tp
));
2972 WALK_SUBTREE (USING_DECL_DECLS (*tp
));
2973 *walk_subtrees_p
= 0;
2977 if (TYPE_PTRMEMFUNC_P (*tp
))
2978 WALK_SUBTREE (TYPE_PTRMEMFUNC_FN_TYPE (*tp
));
2981 case TYPE_ARGUMENT_PACK
:
2982 case NONTYPE_ARGUMENT_PACK
:
2984 tree args
= ARGUMENT_PACK_ARGS (*tp
);
2985 int i
, len
= TREE_VEC_LENGTH (args
);
2986 for (i
= 0; i
< len
; i
++)
2987 WALK_SUBTREE (TREE_VEC_ELT (args
, i
));
2991 case TYPE_PACK_EXPANSION
:
2992 WALK_SUBTREE (TREE_TYPE (*tp
));
2993 *walk_subtrees_p
= 0;
2996 case EXPR_PACK_EXPANSION
:
2997 WALK_SUBTREE (TREE_OPERAND (*tp
, 0));
2998 *walk_subtrees_p
= 0;
3002 case REINTERPRET_CAST_EXPR
:
3003 case STATIC_CAST_EXPR
:
3004 case CONST_CAST_EXPR
:
3005 case DYNAMIC_CAST_EXPR
:
3006 case IMPLICIT_CONV_EXPR
:
3007 if (TREE_TYPE (*tp
))
3008 WALK_SUBTREE (TREE_TYPE (*tp
));
3012 for (i
= 0; i
< TREE_CODE_LENGTH (TREE_CODE (*tp
)); ++i
)
3013 WALK_SUBTREE (TREE_OPERAND (*tp
, i
));
3015 *walk_subtrees_p
= 0;
3019 WALK_SUBTREE (TRAIT_EXPR_TYPE1 (*tp
));
3020 WALK_SUBTREE (TRAIT_EXPR_TYPE2 (*tp
));
3021 *walk_subtrees_p
= 0;
3025 WALK_SUBTREE (DECLTYPE_TYPE_EXPR (*tp
));
3026 *walk_subtrees_p
= 0;
3034 /* We didn't find what we were looking for. */
3041 /* Like save_expr, but for C++. */
3044 cp_save_expr (tree expr
)
3046 /* There is no reason to create a SAVE_EXPR within a template; if
3047 needed, we can create the SAVE_EXPR when instantiating the
3048 template. Furthermore, the middle-end cannot handle C++-specific
3050 if (processing_template_decl
)
3052 return save_expr (expr
);
3055 /* Initialize tree.c. */
3060 list_hash_table
= htab_create_ggc (31, list_hash
, list_hash_eq
, NULL
);
3063 /* Returns the kind of special function that DECL (a FUNCTION_DECL)
3064 is. Note that sfk_none is zero, so this function can be used as a
3065 predicate to test whether or not DECL is a special function. */
3067 special_function_kind
3068 special_function_p (const_tree decl
)
3070 /* Rather than doing all this stuff with magic names, we should
3071 probably have a field of type `special_function_kind' in
3072 DECL_LANG_SPECIFIC. */
3073 if (DECL_COPY_CONSTRUCTOR_P (decl
))
3074 return sfk_copy_constructor
;
3075 if (DECL_MOVE_CONSTRUCTOR_P (decl
))
3076 return sfk_move_constructor
;
3077 if (DECL_CONSTRUCTOR_P (decl
))
3078 return sfk_constructor
;
3079 if (DECL_OVERLOADED_OPERATOR_P (decl
) == NOP_EXPR
)
3081 if (copy_fn_p (decl
))
3082 return sfk_copy_assignment
;
3083 if (move_fn_p (decl
))
3084 return sfk_move_assignment
;
3086 if (DECL_MAYBE_IN_CHARGE_DESTRUCTOR_P (decl
))
3087 return sfk_destructor
;
3088 if (DECL_COMPLETE_DESTRUCTOR_P (decl
))
3089 return sfk_complete_destructor
;
3090 if (DECL_BASE_DESTRUCTOR_P (decl
))
3091 return sfk_base_destructor
;
3092 if (DECL_DELETING_DESTRUCTOR_P (decl
))
3093 return sfk_deleting_destructor
;
3094 if (DECL_CONV_FN_P (decl
))
3095 return sfk_conversion
;
3100 /* Returns nonzero if TYPE is a character type, including wchar_t. */
3103 char_type_p (tree type
)
3105 return (same_type_p (type
, char_type_node
)
3106 || same_type_p (type
, unsigned_char_type_node
)
3107 || same_type_p (type
, signed_char_type_node
)
3108 || same_type_p (type
, char16_type_node
)
3109 || same_type_p (type
, char32_type_node
)
3110 || same_type_p (type
, wchar_type_node
));
3113 /* Returns the kind of linkage associated with the indicated DECL. Th
3114 value returned is as specified by the language standard; it is
3115 independent of implementation details regarding template
3116 instantiation, etc. For example, it is possible that a declaration
3117 to which this function assigns external linkage would not show up
3118 as a global symbol when you run `nm' on the resulting object file. */
3121 decl_linkage (tree decl
)
3123 /* This function doesn't attempt to calculate the linkage from first
3124 principles as given in [basic.link]. Instead, it makes use of
3125 the fact that we have already set TREE_PUBLIC appropriately, and
3126 then handles a few special cases. Ideally, we would calculate
3127 linkage first, and then transform that into a concrete
3130 /* Things that don't have names have no linkage. */
3131 if (!DECL_NAME (decl
))
3134 /* Fields have no linkage. */
3135 if (TREE_CODE (decl
) == FIELD_DECL
)
3138 /* Things that are TREE_PUBLIC have external linkage. */
3139 if (TREE_PUBLIC (decl
))
3142 if (TREE_CODE (decl
) == NAMESPACE_DECL
)
3145 /* Linkage of a CONST_DECL depends on the linkage of the enumeration
3147 if (TREE_CODE (decl
) == CONST_DECL
)
3148 return decl_linkage (TYPE_NAME (TREE_TYPE (decl
)));
3150 /* Some things that are not TREE_PUBLIC have external linkage, too.
3151 For example, on targets that don't have weak symbols, we make all
3152 template instantiations have internal linkage (in the object
3153 file), but the symbols should still be treated as having external
3154 linkage from the point of view of the language. */
3155 if ((TREE_CODE (decl
) == FUNCTION_DECL
3156 || TREE_CODE (decl
) == VAR_DECL
)
3157 && DECL_COMDAT (decl
))
3160 /* Things in local scope do not have linkage, if they don't have
3162 if (decl_function_context (decl
))
3165 /* Members of the anonymous namespace also have TREE_PUBLIC unset, but
3166 are considered to have external linkage for language purposes. DECLs
3167 really meant to have internal linkage have DECL_THIS_STATIC set. */
3168 if (TREE_CODE (decl
) == TYPE_DECL
)
3170 if (TREE_CODE (decl
) == VAR_DECL
|| TREE_CODE (decl
) == FUNCTION_DECL
)
3172 if (!DECL_THIS_STATIC (decl
))
3175 /* Static data members and static member functions from classes
3176 in anonymous namespace also don't have TREE_PUBLIC set. */
3177 if (DECL_CLASS_CONTEXT (decl
))
3181 /* Everything else has internal linkage. */
3185 /* Returns the storage duration of the object or reference associated with
3186 the indicated DECL, which should be a VAR_DECL or PARM_DECL. */
3189 decl_storage_duration (tree decl
)
3191 if (TREE_CODE (decl
) == PARM_DECL
)
3193 if (TREE_CODE (decl
) == FUNCTION_DECL
)
3195 gcc_assert (TREE_CODE (decl
) == VAR_DECL
);
3196 if (!TREE_STATIC (decl
)
3197 && !DECL_EXTERNAL (decl
))
3199 if (DECL_THREAD_LOCAL_P (decl
))
3204 /* EXP is an expression that we want to pre-evaluate. Returns (in
3205 *INITP) an expression that will perform the pre-evaluation. The
3206 value returned by this function is a side-effect free expression
3207 equivalent to the pre-evaluated expression. Callers must ensure
3208 that *INITP is evaluated before EXP. */
3211 stabilize_expr (tree exp
, tree
* initp
)
3215 if (!TREE_SIDE_EFFECTS (exp
))
3216 init_expr
= NULL_TREE
;
3217 /* There are no expressions with REFERENCE_TYPE, but there can be call
3218 arguments with such a type; just treat it as a pointer. */
3219 else if (TREE_CODE (TREE_TYPE (exp
)) == REFERENCE_TYPE
3220 || SCALAR_TYPE_P (TREE_TYPE (exp
))
3221 || !lvalue_or_rvalue_with_address_p (exp
))
3223 init_expr
= get_target_expr (exp
);
3224 exp
= TARGET_EXPR_SLOT (init_expr
);
3228 bool xval
= !real_lvalue_p (exp
);
3229 exp
= cp_build_addr_expr (exp
, tf_warning_or_error
);
3230 init_expr
= get_target_expr (exp
);
3231 exp
= TARGET_EXPR_SLOT (init_expr
);
3232 exp
= cp_build_indirect_ref (exp
, RO_NULL
, tf_warning_or_error
);
3238 gcc_assert (!TREE_SIDE_EFFECTS (exp
));
3242 /* Add NEW_EXPR, an expression whose value we don't care about, after the
3243 similar expression ORIG. */
3246 add_stmt_to_compound (tree orig
, tree new_expr
)
3248 if (!new_expr
|| !TREE_SIDE_EFFECTS (new_expr
))
3250 if (!orig
|| !TREE_SIDE_EFFECTS (orig
))
3252 return build2 (COMPOUND_EXPR
, void_type_node
, orig
, new_expr
);
3255 /* Like stabilize_expr, but for a call whose arguments we want to
3256 pre-evaluate. CALL is modified in place to use the pre-evaluated
3257 arguments, while, upon return, *INITP contains an expression to
3258 compute the arguments. */
3261 stabilize_call (tree call
, tree
*initp
)
3263 tree inits
= NULL_TREE
;
3265 int nargs
= call_expr_nargs (call
);
3267 if (call
== error_mark_node
|| processing_template_decl
)
3273 gcc_assert (TREE_CODE (call
) == CALL_EXPR
);
3275 for (i
= 0; i
< nargs
; i
++)
3278 CALL_EXPR_ARG (call
, i
) =
3279 stabilize_expr (CALL_EXPR_ARG (call
, i
), &init
);
3280 inits
= add_stmt_to_compound (inits
, init
);
3286 /* Like stabilize_expr, but for an AGGR_INIT_EXPR whose arguments we want
3287 to pre-evaluate. CALL is modified in place to use the pre-evaluated
3288 arguments, while, upon return, *INITP contains an expression to
3289 compute the arguments. */
3292 stabilize_aggr_init (tree call
, tree
*initp
)
3294 tree inits
= NULL_TREE
;
3296 int nargs
= aggr_init_expr_nargs (call
);
3298 if (call
== error_mark_node
)
3301 gcc_assert (TREE_CODE (call
) == AGGR_INIT_EXPR
);
3303 for (i
= 0; i
< nargs
; i
++)
3306 AGGR_INIT_EXPR_ARG (call
, i
) =
3307 stabilize_expr (AGGR_INIT_EXPR_ARG (call
, i
), &init
);
3308 inits
= add_stmt_to_compound (inits
, init
);
3314 /* Like stabilize_expr, but for an initialization.
3316 If the initialization is for an object of class type, this function
3317 takes care not to introduce additional temporaries.
3319 Returns TRUE iff the expression was successfully pre-evaluated,
3320 i.e., if INIT is now side-effect free, except for, possible, a
3321 single call to a constructor. */
3324 stabilize_init (tree init
, tree
*initp
)
3330 if (t
== error_mark_node
|| processing_template_decl
)
3333 if (TREE_CODE (t
) == INIT_EXPR
3334 && TREE_CODE (TREE_OPERAND (t
, 1)) != TARGET_EXPR
3335 && TREE_CODE (TREE_OPERAND (t
, 1)) != AGGR_INIT_EXPR
)
3337 TREE_OPERAND (t
, 1) = stabilize_expr (TREE_OPERAND (t
, 1), initp
);
3341 if (TREE_CODE (t
) == INIT_EXPR
)
3342 t
= TREE_OPERAND (t
, 1);
3343 if (TREE_CODE (t
) == TARGET_EXPR
)
3344 t
= TARGET_EXPR_INITIAL (t
);
3345 if (TREE_CODE (t
) == COMPOUND_EXPR
)
3347 if (TREE_CODE (t
) == CONSTRUCTOR
)
3349 /* Aggregate initialization: stabilize each of the field
3352 constructor_elt
*ce
;
3354 VEC(constructor_elt
,gc
) *v
= CONSTRUCTOR_ELTS (t
);
3355 for (i
= 0; VEC_iterate (constructor_elt
, v
, i
, ce
); ++i
)
3357 tree type
= TREE_TYPE (ce
->value
);
3359 if (TREE_CODE (type
) == REFERENCE_TYPE
3360 || SCALAR_TYPE_P (type
))
3361 ce
->value
= stabilize_expr (ce
->value
, &subinit
);
3362 else if (!stabilize_init (ce
->value
, &subinit
))
3364 *initp
= add_stmt_to_compound (*initp
, subinit
);
3369 /* If the initializer is a COND_EXPR, we can't preevaluate
3371 if (TREE_CODE (t
) == COND_EXPR
)
3374 if (TREE_CODE (t
) == CALL_EXPR
)
3376 stabilize_call (t
, initp
);
3380 if (TREE_CODE (t
) == AGGR_INIT_EXPR
)
3382 stabilize_aggr_init (t
, initp
);
3386 /* The initialization is being performed via a bitwise copy -- and
3387 the item copied may have side effects. */
3388 return TREE_SIDE_EFFECTS (init
);
3391 /* Like "fold", but should be used whenever we might be processing the
3392 body of a template. */
3395 fold_if_not_in_template (tree expr
)
3397 /* In the body of a template, there is never any need to call
3398 "fold". We will call fold later when actually instantiating the
3399 template. Integral constant expressions in templates will be
3400 evaluated via fold_non_dependent_expr, as necessary. */
3401 if (processing_template_decl
)
3404 /* Fold C++ front-end specific tree codes. */
3405 if (TREE_CODE (expr
) == UNARY_PLUS_EXPR
)
3406 return fold_convert (TREE_TYPE (expr
), TREE_OPERAND (expr
, 0));
3411 /* Returns true if a cast to TYPE may appear in an integral constant
3415 cast_valid_in_integral_constant_expression_p (tree type
)
3417 return (INTEGRAL_OR_ENUMERATION_TYPE_P (type
)
3418 || cxx_dialect
>= cxx0x
3419 || dependent_type_p (type
)
3420 || type
== error_mark_node
);
3423 /* Return true if we need to fix linkage information of DECL. */
3426 cp_fix_function_decl_p (tree decl
)
3428 /* Skip if DECL is not externally visible. */
3429 if (!TREE_PUBLIC (decl
))
3432 /* We need to fix DECL if it a appears to be exported but with no
3433 function body. Thunks do not have CFGs and we may need to
3434 handle them specially later. */
3435 if (!gimple_has_body_p (decl
)
3436 && !DECL_THUNK_P (decl
)
3437 && !DECL_EXTERNAL (decl
))
3439 struct cgraph_node
*node
= cgraph_get_node (decl
);
3441 /* Don't fix same_body aliases. Although they don't have their own
3442 CFG, they share it with what they alias to. */
3443 if (!node
|| !node
->alias
3444 || !VEC_length (ipa_ref_t
, node
->ref_list
.references
))
3451 /* Clean the C++ specific parts of the tree T. */
3454 cp_free_lang_data (tree t
)
3456 if (TREE_CODE (t
) == METHOD_TYPE
3457 || TREE_CODE (t
) == FUNCTION_TYPE
)
3459 /* Default args are not interesting anymore. */
3460 tree argtypes
= TYPE_ARG_TYPES (t
);
3463 TREE_PURPOSE (argtypes
) = 0;
3464 argtypes
= TREE_CHAIN (argtypes
);
3467 else if (TREE_CODE (t
) == FUNCTION_DECL
3468 && cp_fix_function_decl_p (t
))
3470 /* If T is used in this translation unit at all, the definition
3471 must exist somewhere else since we have decided to not emit it
3472 in this TU. So make it an external reference. */
3473 DECL_EXTERNAL (t
) = 1;
3474 TREE_STATIC (t
) = 0;
3476 if (CP_AGGREGATE_TYPE_P (t
)
3479 tree name
= TYPE_NAME (t
);
3480 if (TREE_CODE (name
) == TYPE_DECL
)
3481 name
= DECL_NAME (name
);
3482 /* Drop anonymous names. */
3483 if (name
!= NULL_TREE
3484 && ANON_AGGRNAME_P (name
))
3485 TYPE_NAME (t
) = NULL_TREE
;
3487 if (TREE_CODE (t
) == NAMESPACE_DECL
)
3489 /* The list of users of a namespace isn't useful for the middle-end
3490 or debug generators. */
3491 DECL_NAMESPACE_USERS (t
) = NULL_TREE
;
3492 /* Neither do we need the leftover chaining of namespaces
3493 from the binding level. */
3494 DECL_CHAIN (t
) = NULL_TREE
;
3498 /* Stub for c-common. Please keep in sync with c-decl.c.
3499 FIXME: If address space support is target specific, then this
3500 should be a C target hook. But currently this is not possible,
3501 because this function is called via REGISTER_TARGET_PRAGMAS. */
3503 c_register_addr_space (const char *word ATTRIBUTE_UNUSED
,
3504 addr_space_t as ATTRIBUTE_UNUSED
)
3508 /* Return the number of operands in T that we care about for things like
3512 cp_tree_operand_length (const_tree t
)
3514 enum tree_code code
= TREE_CODE (t
);
3518 case PREINCREMENT_EXPR
:
3519 case PREDECREMENT_EXPR
:
3520 case POSTINCREMENT_EXPR
:
3521 case POSTDECREMENT_EXPR
:
3527 case EXPR_PACK_EXPANSION
:
3531 return TREE_OPERAND_LENGTH (t
);
3535 #if defined ENABLE_TREE_CHECKING && (GCC_VERSION >= 2007)
3536 /* Complain that some language-specific thing hanging off a tree
3537 node has been accessed improperly. */
3540 lang_check_failed (const char* file
, int line
, const char* function
)
3542 internal_error ("lang_* check: failed in %s, at %s:%d",
3543 function
, trim_filename (file
), line
);
3545 #endif /* ENABLE_TREE_CHECKING */
3547 #include "gt-cp-tree.h"