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)
1882 u = build_cplus_new (TREE_TYPE (t), TREE_OPERAND (t, 1),
1883 tf_warning_or_error);
1885 u = build_target_expr_with_type (TREE_OPERAND (t, 1), TREE_TYPE (t),
1886 tf_warning_or_error);
1888 /* Map the old variable to the new one. */
1889 splay_tree_insert (target_remap,
1890 (splay_tree_key) TREE_OPERAND (t, 0),
1891 (splay_tree_value) TREE_OPERAND (u, 0));
1893 TREE_OPERAND (u, 1) = break_out_target_exprs (TREE_OPERAND (u, 1));
1895 /* Replace the old expression with the new version. */
1897 /* We don't have to go below this point; the recursive call to
1898 break_out_target_exprs will have handled anything below this
1904 /* Make a copy of this node. */
1905 t = copy_tree_r (tp, walk_subtrees, NULL);
1906 if (TREE_CODE (*tp) == CALL_EXPR)
1907 set_flags_from_callee (*tp);
1911 /* Replace all remapped VAR_DECLs in T with their new equivalents.
1912 DATA is really a splay-tree mapping old variables to new
1916 bot_replace (tree* t,
1917 int* walk_subtrees ATTRIBUTE_UNUSED ,
1920 splay_tree target_remap = ((splay_tree) data);
1922 if (TREE_CODE (*t) == VAR_DECL)
1924 splay_tree_node n = splay_tree_lookup (target_remap,
1925 (splay_tree_key) *t);
1927 *t = (tree) n->value;
1933 /* When we parse a default argument expression, we may create
1934 temporary variables via TARGET_EXPRs. When we actually use the
1935 default-argument expression, we make a copy of the expression
1936 and replace the temporaries with appropriate local versions. */
1939 break_out_target_exprs (tree t)
1941 static int target_remap_count;
1942 static splay_tree target_remap;
1944 if (!target_remap_count++)
1945 target_remap = splay_tree_new (splay_tree_compare_pointers,
1946 /*splay_tree_delete_key_fn=*/NULL,
1947 /*splay_tree_delete_value_fn=*/NULL);
1948 cp_walk_tree (&t, bot_manip, target_remap, NULL);
1949 cp_walk_tree (&t, bot_replace, target_remap, NULL);
1951 if (!--target_remap_count)
1953 splay_tree_delete (target_remap);
1954 target_remap = NULL;
1960 /* Similar to `build_nt', but for template definitions of dependent
1964 build_min_nt (enum tree_code code, ...)
1971 gcc_assert (TREE_CODE_CLASS (code) != tcc_vl_exp);
1975 t = make_node (code);
1976 length = TREE_CODE_LENGTH (code);
1978 for (i = 0; i < length; i++)
1980 tree x = va_arg (p, tree);
1981 TREE_OPERAND (t, i) = x;
1989 /* Similar to `build', but for template definitions. */
1992 build_min (enum tree_code code, tree tt, ...)
1999 gcc_assert (TREE_CODE_CLASS (code) != tcc_vl_exp);
2003 t = make_node (code);
2004 length = TREE_CODE_LENGTH (code);
2007 for (i = 0; i < length; i++)
2009 tree x = va_arg (p, tree);
2010 TREE_OPERAND (t, i) = x;
2011 if (x && !TYPE_P (x) && TREE_SIDE_EFFECTS (x))
2012 TREE_SIDE_EFFECTS (t) = 1;
2019 /* Similar to `build', but for template definitions of non-dependent
2020 expressions. NON_DEP is the non-dependent expression that has been
2024 build_min_non_dep (enum tree_code code, tree non_dep, ...)
2031 gcc_assert (TREE_CODE_CLASS (code) != tcc_vl_exp);
2033 va_start (p, non_dep);
2035 if (REFERENCE_REF_P (non_dep))
2036 non_dep = TREE_OPERAND (non_dep, 0);
2038 t = make_node (code);
2039 length = TREE_CODE_LENGTH (code);
2040 TREE_TYPE (t) = TREE_TYPE (non_dep);
2041 TREE_SIDE_EFFECTS (t) = TREE_SIDE_EFFECTS (non_dep);
2043 for (i = 0; i < length; i++)
2045 tree x = va_arg (p, tree);
2046 TREE_OPERAND (t, i) = x;
2049 if (code == COMPOUND_EXPR && TREE_CODE (non_dep) != COMPOUND_EXPR)
2050 /* This should not be considered a COMPOUND_EXPR, because it
2051 resolves to an overload. */
2052 COMPOUND_EXPR_OVERLOADED (t) = 1;
2055 return convert_from_reference (t);
2058 /* Similar to `build_nt_call_vec', but for template definitions of
2059 non-dependent expressions. NON_DEP is the non-dependent expression
2060 that has been built. */
2063 build_min_non_dep_call_vec (tree non_dep, tree fn, VEC(tree,gc) *argvec)
2065 tree t = build_nt_call_vec (fn, argvec);
2066 if (REFERENCE_REF_P (non_dep))
2067 non_dep = TREE_OPERAND (non_dep, 0);
2068 TREE_TYPE (t) = TREE_TYPE (non_dep);
2069 TREE_SIDE_EFFECTS (t) = TREE_SIDE_EFFECTS (non_dep);
2070 return convert_from_reference (t);
2074 get_type_decl (tree t)
2076 if (TREE_CODE (t) == TYPE_DECL)
2079 return TYPE_STUB_DECL (t);
2080 gcc_assert (t == error_mark_node);
2084 /* Returns the namespace that contains DECL, whether directly or
2088 decl_namespace_context (tree decl)
2092 if (TREE_CODE (decl) == NAMESPACE_DECL)
2094 else if (TYPE_P (decl))
2095 decl = CP_DECL_CONTEXT (TYPE_MAIN_DECL (decl));
2097 decl = CP_DECL_CONTEXT (decl);
2101 /* Returns true if decl is within an anonymous namespace, however deeply
2102 nested, or false otherwise. */
2105 decl_anon_ns_mem_p (const_tree decl)
2109 if (decl == NULL_TREE || decl == error_mark_node)
2111 if (TREE_CODE (decl) == NAMESPACE_DECL
2112 && DECL_NAME (decl) == NULL_TREE)
2114 /* Classes and namespaces inside anonymous namespaces have
2115 TREE_PUBLIC == 0, so we can shortcut the search. */
2116 else if (TYPE_P (decl))
2117 return (TREE_PUBLIC (TYPE_NAME (decl)) == 0);
2118 else if (TREE_CODE (decl) == NAMESPACE_DECL)
2119 return (TREE_PUBLIC (decl) == 0);
2121 decl = DECL_CONTEXT (decl);
2125 /* Return truthvalue of whether T1 is the same tree structure as T2.
2126 Return 1 if they are the same. Return 0 if they are different. */
2129 cp_tree_equal (tree t1, tree t2)
2131 enum tree_code code1, code2;
2138 for (code1 = TREE_CODE (t1);
2139 CONVERT_EXPR_CODE_P (code1)
2140 || code1 == NON_LVALUE_EXPR;
2141 code1 = TREE_CODE (t1))
2142 t1 = TREE_OPERAND (t1, 0);
2143 for (code2 = TREE_CODE (t2);
2144 CONVERT_EXPR_CODE_P (code2)
2145 || code1 == NON_LVALUE_EXPR;
2146 code2 = TREE_CODE (t2))
2147 t2 = TREE_OPERAND (t2, 0);
2149 /* They might have become equal now. */
2159 return TREE_INT_CST_LOW (t1) == TREE_INT_CST_LOW (t2)
2160 && TREE_INT_CST_HIGH (t1) == TREE_INT_CST_HIGH (t2);
2163 return REAL_VALUES_EQUAL (TREE_REAL_CST (t1), TREE_REAL_CST (t2));
2166 return TREE_STRING_LENGTH (t1) == TREE_STRING_LENGTH (t2)
2167 && !memcmp (TREE_STRING_POINTER (t1), TREE_STRING_POINTER (t2),
2168 TREE_STRING_LENGTH (t1));
2171 return FIXED_VALUES_IDENTICAL (TREE_FIXED_CST (t1),
2172 TREE_FIXED_CST (t2));
2175 return cp_tree_equal (TREE_REALPART (t1), TREE_REALPART (t2))
2176 && cp_tree_equal (TREE_IMAGPART (t1), TREE_IMAGPART (t2));
2179 /* We need to do this when determining whether or not two
2180 non-type pointer to member function template arguments
2182 if (!same_type_p (TREE_TYPE (t1), TREE_TYPE (t2))
2183 || CONSTRUCTOR_NELTS (t1) != CONSTRUCTOR_NELTS (t2))
2188 FOR_EACH_CONSTRUCTOR_ELT (CONSTRUCTOR_ELTS (t1), i, field, value)
2190 constructor_elt *elt2 = CONSTRUCTOR_ELT (t2, i);
2191 if (!cp_tree_equal (field, elt2->index)
2192 || !cp_tree_equal (value, elt2->value))
2199 if (!cp_tree_equal (TREE_PURPOSE (t1), TREE_PURPOSE (t2)))
2201 if (!cp_tree_equal (TREE_VALUE (t1), TREE_VALUE (t2)))
2203 return cp_tree_equal (TREE_CHAIN (t1), TREE_CHAIN (t2));
2206 return cp_tree_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0));
2211 call_expr_arg_iterator iter1, iter2;
2212 /* Core 1321: dependent names are equivalent even if the
2213 overload sets are different. */
2214 tree name1 = dependent_name (CALL_EXPR_FN (t1));
2215 tree name2 = dependent_name (CALL_EXPR_FN (t2));
2216 if (!(name1 && name2 && name1 == name2)
2217 && !cp_tree_equal (CALL_EXPR_FN (t1), CALL_EXPR_FN (t2)))
2219 for (arg1 = first_call_expr_arg (t1, &iter1),
2220 arg2 = first_call_expr_arg (t2, &iter2);
2222 arg1 = next_call_expr_arg (&iter1),
2223 arg2 = next_call_expr_arg (&iter2))
2224 if (!cp_tree_equal (arg1, arg2))
2233 tree o1 = TREE_OPERAND (t1, 0);
2234 tree o2 = TREE_OPERAND (t2, 0);
2236 /* Special case: if either target is an unallocated VAR_DECL,
2237 it means that it's going to be unified with whatever the
2238 TARGET_EXPR is really supposed to initialize, so treat it
2239 as being equivalent to anything. */
2240 if (TREE_CODE (o1) == VAR_DECL && DECL_NAME (o1) == NULL_TREE
2241 && !DECL_RTL_SET_P (o1))
2243 else if (TREE_CODE (o2) == VAR_DECL && DECL_NAME (o2) == NULL_TREE
2244 && !DECL_RTL_SET_P (o2))
2246 else if (!cp_tree_equal (o1, o2))
2249 return cp_tree_equal (TREE_OPERAND (t1, 1), TREE_OPERAND (t2, 1));
2252 case WITH_CLEANUP_EXPR:
2253 if (!cp_tree_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0)))
2255 return cp_tree_equal (TREE_OPERAND (t1, 1), TREE_OPERAND (t1, 1));
2258 if (TREE_OPERAND (t1, 1) != TREE_OPERAND (t2, 1))
2260 return cp_tree_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0));
2263 /* For comparing uses of parameters in late-specified return types
2264 with an out-of-class definition of the function, but can also come
2265 up for expressions that involve 'this' in a member function
2267 if (same_type_p (TREE_TYPE (t1), TREE_TYPE (t2)))
2269 if (DECL_ARTIFICIAL (t1) ^ DECL_ARTIFICIAL (t2))
2271 if (DECL_ARTIFICIAL (t1)
2272 || (DECL_PARM_LEVEL (t1) == DECL_PARM_LEVEL (t2)
2273 && DECL_PARM_INDEX (t1) == DECL_PARM_INDEX (t2)))
2282 case IDENTIFIER_NODE:
2287 return (BASELINK_BINFO (t1) == BASELINK_BINFO (t2)
2288 && BASELINK_ACCESS_BINFO (t1) == BASELINK_ACCESS_BINFO (t2)
2289 && cp_tree_equal (BASELINK_FUNCTIONS (t1),
2290 BASELINK_FUNCTIONS (t2)));
2292 case TEMPLATE_PARM_INDEX:
2293 if (TEMPLATE_PARM_NUM_SIBLINGS (t1)
2294 != TEMPLATE_PARM_NUM_SIBLINGS (t2))
2296 return (TEMPLATE_PARM_IDX (t1) == TEMPLATE_PARM_IDX (t2)
2297 && TEMPLATE_PARM_LEVEL (t1) == TEMPLATE_PARM_LEVEL (t2)
2298 && (TEMPLATE_PARM_PARAMETER_PACK (t1)
2299 == TEMPLATE_PARM_PARAMETER_PACK (t2))
2300 && same_type_p (TREE_TYPE (TEMPLATE_PARM_DECL (t1)),
2301 TREE_TYPE (TEMPLATE_PARM_DECL (t2))));
2303 case TEMPLATE_ID_EXPR:
2308 if (!cp_tree_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0)))
2310 vec1 = TREE_OPERAND (t1, 1);
2311 vec2 = TREE_OPERAND (t2, 1);
2314 return !vec1 && !vec2;
2316 if (TREE_VEC_LENGTH (vec1) != TREE_VEC_LENGTH (vec2))
2319 for (ix = TREE_VEC_LENGTH (vec1); ix--;)
2320 if (!cp_tree_equal (TREE_VEC_ELT (vec1, ix),
2321 TREE_VEC_ELT (vec2, ix)))
2330 tree o1 = TREE_OPERAND (t1, 0);
2331 tree o2 = TREE_OPERAND (t2, 0);
2333 if (TREE_CODE (o1) != TREE_CODE (o2))
2336 return same_type_p (o1, o2);
2338 return cp_tree_equal (o1, o2);
2343 tree t1_op1, t2_op1;
2345 if (!cp_tree_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0)))
2348 t1_op1 = TREE_OPERAND (t1, 1);
2349 t2_op1 = TREE_OPERAND (t2, 1);
2350 if (TREE_CODE (t1_op1) != TREE_CODE (t2_op1))
2353 return cp_tree_equal (TREE_OPERAND (t1, 2), TREE_OPERAND (t2, 2));
2357 /* Two pointer-to-members are the same if they point to the same
2358 field or function in the same class. */
2359 if (PTRMEM_CST_MEMBER (t1) != PTRMEM_CST_MEMBER (t2))
2362 return same_type_p (PTRMEM_CST_CLASS (t1), PTRMEM_CST_CLASS (t2));
2365 if (OVL_FUNCTION (t1) != OVL_FUNCTION (t2))
2367 return cp_tree_equal (OVL_CHAIN (t1), OVL_CHAIN (t2));
2370 if (TRAIT_EXPR_KIND (t1) != TRAIT_EXPR_KIND (t2))
2372 return same_type_p (TRAIT_EXPR_TYPE1 (t1), TRAIT_EXPR_TYPE1 (t2))
2373 && same_type_p (TRAIT_EXPR_TYPE2 (t1), TRAIT_EXPR_TYPE2 (t2));
2376 case STATIC_CAST_EXPR:
2377 case REINTERPRET_CAST_EXPR:
2378 case CONST_CAST_EXPR:
2379 case DYNAMIC_CAST_EXPR:
2381 if (!same_type_p (TREE_TYPE (t1), TREE_TYPE (t2)))
2383 /* Now compare operands as usual. */
2386 case DEFERRED_NOEXCEPT:
2387 return (cp_tree_equal (DEFERRED_NOEXCEPT_PATTERN (t1),
2388 DEFERRED_NOEXCEPT_PATTERN (t2))
2389 && comp_template_args (DEFERRED_NOEXCEPT_ARGS (t1),
2390 DEFERRED_NOEXCEPT_ARGS (t2)));
2397 switch (TREE_CODE_CLASS (code1))
2401 case tcc_comparison:
2402 case tcc_expression:
2409 n = cp_tree_operand_length (t1);
2410 if (TREE_CODE_CLASS (code1) == tcc_vl_exp
2411 && n != TREE_OPERAND_LENGTH (t2))
2414 for (i = 0; i < n; ++i)
2415 if (!cp_tree_equal (TREE_OPERAND (t1, i), TREE_OPERAND (t2, i)))
2422 return same_type_p (t1, t2);
2426 /* We can get here with --disable-checking. */
2430 /* The type of ARG when used as an lvalue. */
2433 lvalue_type (tree arg)
2435 tree type = TREE_TYPE (arg);
2439 /* The type of ARG for printing error messages; denote lvalues with
2443 error_type (tree arg)
2445 tree type = TREE_TYPE (arg);
2447 if (TREE_CODE (type) == ARRAY_TYPE)
2449 else if (TREE_CODE (type) == ERROR_MARK)
2451 else if (real_lvalue_p (arg))
2452 type = build_reference_type (lvalue_type (arg));
2453 else if (MAYBE_CLASS_TYPE_P (type))
2454 type = lvalue_type (arg);
2459 /* Does FUNCTION use a variable-length argument list? */
2462 varargs_function_p (const_tree function)
2464 return stdarg_p (TREE_TYPE (function));
2467 /* Returns 1 if decl is a member of a class. */
2470 member_p (const_tree decl)
2472 const_tree const ctx = DECL_CONTEXT (decl);
2473 return (ctx && TYPE_P (ctx));
2476 /* Create a placeholder for member access where we don't actually have an
2477 object that the access is against. */
2480 build_dummy_object (tree type)
2482 tree decl = build1 (NOP_EXPR, build_pointer_type (type), void_zero_node);
2483 return cp_build_indirect_ref (decl, RO_NULL, tf_warning_or_error);
2486 /* We've gotten a reference to a member of TYPE. Return *this if appropriate,
2487 or a dummy object otherwise. If BINFOP is non-0, it is filled with the
2488 binfo path from current_class_type to TYPE, or 0. */
2491 maybe_dummy_object (tree type, tree* binfop)
2495 tree current = current_nonlambda_class_type ();
2498 && (binfo = lookup_base (current, type, ba_any, NULL)))
2502 /* Reference from a nested class member function. */
2504 binfo = TYPE_BINFO (type);
2510 if (current_class_ref
2511 /* current_class_ref might not correspond to current_class_type if
2512 we're in tsubst_default_argument or a lambda-declarator; in either
2513 case, we want to use current_class_ref if it matches CONTEXT. */
2514 && (same_type_ignoring_top_level_qualifiers_p
2515 (TREE_TYPE (current_class_ref), context)))
2516 decl = current_class_ref;
2517 else if (current != current_class_type
2518 && context == nonlambda_method_basetype ())
2519 /* In a lambda, need to go through 'this' capture. */
2520 decl = (build_x_indirect_ref
2521 ((lambda_expr_this_capture
2522 (CLASSTYPE_LAMBDA_EXPR (current_class_type))),
2523 RO_NULL, tf_warning_or_error));
2525 decl = build_dummy_object (context);
2530 /* Returns 1 if OB is a placeholder object, or a pointer to one. */
2533 is_dummy_object (const_tree ob)
2535 if (TREE_CODE (ob) == INDIRECT_REF)
2536 ob = TREE_OPERAND (ob, 0);
2537 return (TREE_CODE (ob) == NOP_EXPR
2538 && TREE_OPERAND (ob, 0) == void_zero_node);
2541 /* Returns 1 iff type T is something we want to treat as a scalar type for
2542 the purpose of deciding whether it is trivial/POD/standard-layout. */
2545 scalarish_type_p (const_tree t)
2547 if (t == error_mark_node)
2550 return (SCALAR_TYPE_P (t)
2551 || TREE_CODE (t) == VECTOR_TYPE);
2554 /* Returns true iff T requires non-trivial default initialization. */
2557 type_has_nontrivial_default_init (const_tree t)
2559 t = strip_array_types (CONST_CAST_TREE (t));
2561 if (CLASS_TYPE_P (t))
2562 return TYPE_HAS_COMPLEX_DFLT (t);
2567 /* Returns true iff copying an object of type T (including via move
2568 constructor) is non-trivial. That is, T has no non-trivial copy
2569 constructors and no non-trivial move constructors. */
2572 type_has_nontrivial_copy_init (const_tree t)
2574 t = strip_array_types (CONST_CAST_TREE (t));
2576 if (CLASS_TYPE_P (t))
2578 gcc_assert (COMPLETE_TYPE_P (t));
2579 return ((TYPE_HAS_COPY_CTOR (t)
2580 && TYPE_HAS_COMPLEX_COPY_CTOR (t))
2581 || TYPE_HAS_COMPLEX_MOVE_CTOR (t));
2587 /* Returns 1 iff type T is a trivially copyable type, as defined in
2588 [basic.types] and [class]. */
2591 trivially_copyable_p (const_tree t)
2593 t = strip_array_types (CONST_CAST_TREE (t));
2595 if (CLASS_TYPE_P (t))
2596 return ((!TYPE_HAS_COPY_CTOR (t)
2597 || !TYPE_HAS_COMPLEX_COPY_CTOR (t))
2598 && !TYPE_HAS_COMPLEX_MOVE_CTOR (t)
2599 && (!TYPE_HAS_COPY_ASSIGN (t)
2600 || !TYPE_HAS_COMPLEX_COPY_ASSIGN (t))
2601 && !TYPE_HAS_COMPLEX_MOVE_ASSIGN (t)
2602 && TYPE_HAS_TRIVIAL_DESTRUCTOR (t));
2604 return scalarish_type_p (t);
2607 /* Returns 1 iff type T is a trivial type, as defined in [basic.types] and
2611 trivial_type_p (const_tree t)
2613 t = strip_array_types (CONST_CAST_TREE (t));
2615 if (CLASS_TYPE_P (t))
2616 return (TYPE_HAS_TRIVIAL_DFLT (t)
2617 && trivially_copyable_p (t));
2619 return scalarish_type_p (t);
2622 /* Returns 1 iff type T is a POD type, as defined in [basic.types]. */
2625 pod_type_p (const_tree t)
2627 /* This CONST_CAST is okay because strip_array_types returns its
2628 argument unmodified and we assign it to a const_tree. */
2629 t = strip_array_types (CONST_CAST_TREE(t));
2631 if (!CLASS_TYPE_P (t))
2632 return scalarish_type_p (t);
2633 else if (cxx_dialect > cxx98)
2634 /* [class]/10: A POD struct is a class that is both a trivial class and a
2635 standard-layout class, and has no non-static data members of type
2636 non-POD struct, non-POD union (or array of such types).
2638 We don't need to check individual members because if a member is
2639 non-std-layout or non-trivial, the class will be too. */
2640 return (std_layout_type_p (t) && trivial_type_p (t));
2642 /* The C++98 definition of POD is different. */
2643 return !CLASSTYPE_NON_LAYOUT_POD_P (t);
2646 /* Returns true iff T is POD for the purpose of layout, as defined in the
2650 layout_pod_type_p (const_tree t)
2652 t = strip_array_types (CONST_CAST_TREE (t));
2654 if (CLASS_TYPE_P (t))
2655 return !CLASSTYPE_NON_LAYOUT_POD_P (t);
2657 return scalarish_type_p (t);
2660 /* Returns true iff T is a standard-layout type, as defined in
2664 std_layout_type_p (const_tree t)
2666 t = strip_array_types (CONST_CAST_TREE (t));
2668 if (CLASS_TYPE_P (t))
2669 return !CLASSTYPE_NON_STD_LAYOUT (t);
2671 return scalarish_type_p (t);
2674 /* Nonzero iff type T is a class template implicit specialization. */
2677 class_tmpl_impl_spec_p (const_tree t)
2679 return CLASS_TYPE_P (t) && CLASSTYPE_TEMPLATE_INSTANTIATION (t);
2682 /* Returns 1 iff zero initialization of type T means actually storing
2686 zero_init_p (const_tree t)
2688 /* This CONST_CAST is okay because strip_array_types returns its
2689 argument unmodified and we assign it to a const_tree. */
2690 t = strip_array_types (CONST_CAST_TREE(t));
2692 if (t == error_mark_node)
2695 /* NULL pointers to data members are initialized with -1. */
2696 if (TYPE_PTRMEM_P (t))
2699 /* Classes that contain types that can't be zero-initialized, cannot
2700 be zero-initialized themselves. */
2701 if (CLASS_TYPE_P (t) && CLASSTYPE_NON_ZERO_INIT_P (t))
2707 /* Table of valid C++ attributes. */
2708 const struct attribute_spec cxx_attribute_table[] =
2710 /* { name, min_len, max_len, decl_req, type_req, fn_type_req, handler,
2711 affects_type_identity } */
2712 { "java_interface", 0, 0, false, false, false,
2713 handle_java_interface_attribute, false },
2714 { "com_interface", 0, 0, false, false, false,
2715 handle_com_interface_attribute, false },
2716 { "init_priority", 1, 1, true, false, false,
2717 handle_init_priority_attribute, false },
2718 { NULL, 0, 0, false, false, false, NULL, false }
2721 /* Handle a "java_interface" attribute; arguments as in
2722 struct attribute_spec.handler. */
2724 handle_java_interface_attribute (tree* node,
2726 tree args ATTRIBUTE_UNUSED ,
2731 || !CLASS_TYPE_P (*node)
2732 || !TYPE_FOR_JAVA (*node))
2734 error ("%qE attribute can only be applied to Java class definitions",
2736 *no_add_attrs = true;
2739 if (!(flags & (int) ATTR_FLAG_TYPE_IN_PLACE))
2740 *node = build_variant_type_copy (*node);
2741 TYPE_JAVA_INTERFACE (*node) = 1;
2746 /* Handle a "com_interface" attribute; arguments as in
2747 struct attribute_spec.handler. */
2749 handle_com_interface_attribute (tree* node,
2751 tree args ATTRIBUTE_UNUSED ,
2752 int flags ATTRIBUTE_UNUSED ,
2757 *no_add_attrs = true;
2760 || !CLASS_TYPE_P (*node)
2761 || *node != TYPE_MAIN_VARIANT (*node))
2763 warning (OPT_Wattributes, "%qE attribute can only be applied "
2764 "to class definitions", name);
2769 warning (0, "%qE is obsolete; g++ vtables are now COM-compatible by default",
2775 /* Handle an "init_priority" attribute; arguments as in
2776 struct attribute_spec.handler. */
2778 handle_init_priority_attribute (tree* node,
2781 int flags ATTRIBUTE_UNUSED ,
2784 tree initp_expr = TREE_VALUE (args);
2786 tree type = TREE_TYPE (decl);
2789 STRIP_NOPS (initp_expr);
2791 if (!initp_expr || TREE_CODE (initp_expr) != INTEGER_CST)
2793 error ("requested init_priority is not an integer constant");
2794 *no_add_attrs = true;
2798 pri = TREE_INT_CST_LOW (initp_expr);
2800 type = strip_array_types (type);
2802 if (decl == NULL_TREE
2803 || TREE_CODE (decl) != VAR_DECL
2804 || !TREE_STATIC (decl)
2805 || DECL_EXTERNAL (decl)
2806 || (TREE_CODE (type) != RECORD_TYPE
2807 && TREE_CODE (type) != UNION_TYPE)
2808 /* Static objects in functions are initialized the
2809 first time control passes through that
2810 function. This is not precise enough to pin down an
2811 init_priority value, so don't allow it. */
2812 || current_function_decl)
2814 error ("can only use %qE attribute on file-scope definitions "
2815 "of objects of class type", name);
2816 *no_add_attrs = true;
2820 if (pri > MAX_INIT_PRIORITY || pri <= 0)
2822 error ("requested init_priority is out of range");
2823 *no_add_attrs = true;
2827 /* Check for init_priorities that are reserved for
2828 language and runtime support implementations.*/
2829 if (pri <= MAX_RESERVED_INIT_PRIORITY)
2832 (0, "requested init_priority is reserved for internal use");
2835 if (SUPPORTS_INIT_PRIORITY)
2837 SET_DECL_INIT_PRIORITY (decl, pri);
2838 DECL_HAS_INIT_PRIORITY_P (decl) = 1;
2843 error ("%qE attribute is not supported on this platform", name);
2844 *no_add_attrs = true;
2849 /* Return a new PTRMEM_CST of the indicated TYPE. The MEMBER is the
2850 thing pointed to by the constant. */
2853 make_ptrmem_cst (tree type, tree member)
2855 tree ptrmem_cst = make_node (PTRMEM_CST);
2856 TREE_TYPE (ptrmem_cst) = type;
2857 PTRMEM_CST_MEMBER (ptrmem_cst) = member;
2861 /* Build a variant of TYPE that has the indicated ATTRIBUTES. May
2862 return an existing type if an appropriate type already exists. */
2865 cp_build_type_attribute_variant (tree type, tree attributes)
2869 new_type = build_type_attribute_variant (type, attributes);
2870 if (TREE_CODE (new_type) == FUNCTION_TYPE
2871 || TREE_CODE (new_type) == METHOD_TYPE)
2872 new_type = build_exception_variant (new_type,
2873 TYPE_RAISES_EXCEPTIONS (type));
2875 /* Making a new main variant of a class type is broken. */
2876 gcc_assert (!CLASS_TYPE_P (type) || new_type == type);
2881 /* Return TRUE if TYPE1 and TYPE2 are identical for type hashing purposes.
2882 Called only after doing all language independent checks. Only
2883 to check TYPE_RAISES_EXCEPTIONS for FUNCTION_TYPE, the rest is already
2884 compared in type_hash_eq. */
2887 cxx_type_hash_eq (const_tree typea, const_tree typeb)
2889 gcc_assert (TREE_CODE (typea) == FUNCTION_TYPE
2890 || TREE_CODE (typea) == METHOD_TYPE);
2892 return comp_except_specs (TYPE_RAISES_EXCEPTIONS (typea),
2893 TYPE_RAISES_EXCEPTIONS (typeb), ce_exact);
2896 /* Apply FUNC to all language-specific sub-trees of TP in a pre-order
2897 traversal. Called from walk_tree. */
2900 cp_walk_subtrees (tree *tp, int *walk_subtrees_p, walk_tree_fn func,
2901 void *data, struct pointer_set_t *pset)
2903 enum tree_code code = TREE_CODE (*tp);
2906 #define WALK_SUBTREE(NODE) \
2909 result = cp_walk_tree (&(NODE), func, data, pset); \
2910 if (result) goto out; \
2914 /* Not one of the easy cases. We must explicitly go through the
2920 case TEMPLATE_TEMPLATE_PARM:
2921 case BOUND_TEMPLATE_TEMPLATE_PARM:
2922 case UNBOUND_CLASS_TEMPLATE:
2923 case TEMPLATE_PARM_INDEX:
2924 case TEMPLATE_TYPE_PARM:
2927 case UNDERLYING_TYPE:
2928 /* None of these have subtrees other than those already walked
2930 *walk_subtrees_p = 0;
2934 WALK_SUBTREE (BASELINK_FUNCTIONS (*tp));
2935 *walk_subtrees_p = 0;
2939 WALK_SUBTREE (TREE_TYPE (*tp));
2940 *walk_subtrees_p = 0;
2944 WALK_SUBTREE (TREE_PURPOSE (*tp));
2948 WALK_SUBTREE (OVL_FUNCTION (*tp));
2949 WALK_SUBTREE (OVL_CHAIN (*tp));
2950 *walk_subtrees_p = 0;
2954 WALK_SUBTREE (DECL_NAME (*tp));
2955 WALK_SUBTREE (USING_DECL_SCOPE (*tp));
2956 WALK_SUBTREE (USING_DECL_DECLS (*tp));
2957 *walk_subtrees_p = 0;
2961 if (TYPE_PTRMEMFUNC_P (*tp))
2962 WALK_SUBTREE (TYPE_PTRMEMFUNC_FN_TYPE (*tp));
2965 case TYPE_ARGUMENT_PACK:
2966 case NONTYPE_ARGUMENT_PACK:
2968 tree args = ARGUMENT_PACK_ARGS (*tp);
2969 int i, len = TREE_VEC_LENGTH (args);
2970 for (i = 0; i < len; i++)
2971 WALK_SUBTREE (TREE_VEC_ELT (args, i));
2975 case TYPE_PACK_EXPANSION:
2976 WALK_SUBTREE (TREE_TYPE (*tp));
2977 *walk_subtrees_p = 0;
2980 case EXPR_PACK_EXPANSION:
2981 WALK_SUBTREE (TREE_OPERAND (*tp, 0));
2982 *walk_subtrees_p = 0;
2986 case REINTERPRET_CAST_EXPR:
2987 case STATIC_CAST_EXPR:
2988 case CONST_CAST_EXPR:
2989 case DYNAMIC_CAST_EXPR:
2990 if (TREE_TYPE (*tp))
2991 WALK_SUBTREE (TREE_TYPE (*tp));
2995 for (i = 0; i < TREE_CODE_LENGTH (TREE_CODE (*tp)); ++i)
2996 WALK_SUBTREE (TREE_OPERAND (*tp, i));
2998 *walk_subtrees_p = 0;
3002 WALK_SUBTREE (TRAIT_EXPR_TYPE1 (*tp));
3003 WALK_SUBTREE (TRAIT_EXPR_TYPE2 (*tp));
3004 *walk_subtrees_p = 0;
3008 WALK_SUBTREE (DECLTYPE_TYPE_EXPR (*tp));
3009 *walk_subtrees_p = 0;
3017 /* We didn't find what we were looking for. */
3024 /* Like save_expr, but for C++. */
3027 cp_save_expr (tree expr)
3029 /* There is no reason to create a SAVE_EXPR within a template; if
3030 needed, we can create the SAVE_EXPR when instantiating the
3031 template. Furthermore, the middle-end cannot handle C++-specific
3033 if (processing_template_decl)
3035 return save_expr (expr);
3038 /* Initialize tree.c. */
3043 list_hash_table = htab_create_ggc (31, list_hash, list_hash_eq, NULL);
3046 /* Returns the kind of special function that DECL (a FUNCTION_DECL)
3047 is. Note that sfk_none is zero, so this function can be used as a
3048 predicate to test whether or not DECL is a special function. */
3050 special_function_kind
3051 special_function_p (const_tree decl)
3053 /* Rather than doing all this stuff with magic names, we should
3054 probably have a field of type `special_function_kind' in
3055 DECL_LANG_SPECIFIC. */
3056 if (DECL_COPY_CONSTRUCTOR_P (decl))
3057 return sfk_copy_constructor;
3058 if (DECL_MOVE_CONSTRUCTOR_P (decl))
3059 return sfk_move_constructor;
3060 if (DECL_CONSTRUCTOR_P (decl))
3061 return sfk_constructor;
3062 if (DECL_OVERLOADED_OPERATOR_P (decl) == NOP_EXPR)
3064 if (copy_fn_p (decl))
3065 return sfk_copy_assignment;
3066 if (move_fn_p (decl))
3067 return sfk_move_assignment;
3069 if (DECL_MAYBE_IN_CHARGE_DESTRUCTOR_P (decl))
3070 return sfk_destructor;
3071 if (DECL_COMPLETE_DESTRUCTOR_P (decl))
3072 return sfk_complete_destructor;
3073 if (DECL_BASE_DESTRUCTOR_P (decl))
3074 return sfk_base_destructor;
3075 if (DECL_DELETING_DESTRUCTOR_P (decl))
3076 return sfk_deleting_destructor;
3077 if (DECL_CONV_FN_P (decl))
3078 return sfk_conversion;
3083 /* Returns nonzero if TYPE is a character type, including wchar_t. */
3086 char_type_p (tree type)
3088 return (same_type_p (type, char_type_node)
3089 || same_type_p (type, unsigned_char_type_node)
3090 || same_type_p (type, signed_char_type_node)
3091 || same_type_p (type, char16_type_node)
3092 || same_type_p (type, char32_type_node)
3093 || same_type_p (type, wchar_type_node));
3096 /* Returns the kind of linkage associated with the indicated DECL. Th
3097 value returned is as specified by the language standard; it is
3098 independent of implementation details regarding template
3099 instantiation, etc. For example, it is possible that a declaration
3100 to which this function assigns external linkage would not show up
3101 as a global symbol when you run `nm' on the resulting object file. */
3104 decl_linkage (tree decl)
3106 /* This function doesn't attempt to calculate the linkage from first
3107 principles as given in [basic.link]. Instead, it makes use of
3108 the fact that we have already set TREE_PUBLIC appropriately, and
3109 then handles a few special cases. Ideally, we would calculate
3110 linkage first, and then transform that into a concrete
3113 /* Things that don't have names have no linkage. */
3114 if (!DECL_NAME (decl))
3117 /* Fields have no linkage. */
3118 if (TREE_CODE (decl) == FIELD_DECL)
3121 /* Things that are TREE_PUBLIC have external linkage. */
3122 if (TREE_PUBLIC (decl))
3125 if (TREE_CODE (decl) == NAMESPACE_DECL)
3128 /* Linkage of a CONST_DECL depends on the linkage of the enumeration
3130 if (TREE_CODE (decl) == CONST_DECL)
3131 return decl_linkage (TYPE_NAME (TREE_TYPE (decl)));
3133 /* Some things that are not TREE_PUBLIC have external linkage, too.
3134 For example, on targets that don't have weak symbols, we make all
3135 template instantiations have internal linkage (in the object
3136 file), but the symbols should still be treated as having external
3137 linkage from the point of view of the language. */
3138 if ((TREE_CODE (decl) == FUNCTION_DECL
3139 || TREE_CODE (decl) == VAR_DECL)
3140 && DECL_COMDAT (decl))
3143 /* Things in local scope do not have linkage, if they don't have
3145 if (decl_function_context (decl))
3148 /* Members of the anonymous namespace also have TREE_PUBLIC unset, but
3149 are considered to have external linkage for language purposes. DECLs
3150 really meant to have internal linkage have DECL_THIS_STATIC set. */
3151 if (TREE_CODE (decl) == TYPE_DECL)
3153 if (TREE_CODE (decl) == VAR_DECL || TREE_CODE (decl) == FUNCTION_DECL)
3155 if (!DECL_THIS_STATIC (decl))
3158 /* Static data members and static member functions from classes
3159 in anonymous namespace also don't have TREE_PUBLIC set. */
3160 if (DECL_CLASS_CONTEXT (decl))
3164 /* Everything else has internal linkage. */
3168 /* Returns the storage duration of the object or reference associated with
3169 the indicated DECL, which should be a VAR_DECL or PARM_DECL. */
3172 decl_storage_duration (tree decl)
3174 if (TREE_CODE (decl) == PARM_DECL)
3176 if (TREE_CODE (decl) == FUNCTION_DECL)
3178 gcc_assert (TREE_CODE (decl) == VAR_DECL);
3179 if (!TREE_STATIC (decl)
3180 && !DECL_EXTERNAL (decl))
3182 if (DECL_THREAD_LOCAL_P (decl))
3187 /* EXP is an expression that we want to pre-evaluate. Returns (in
3188 *INITP) an expression that will perform the pre-evaluation. The
3189 value returned by this function is a side-effect free expression
3190 equivalent to the pre-evaluated expression. Callers must ensure
3191 that *INITP is evaluated before EXP. */
3194 stabilize_expr (tree exp, tree* initp)
3198 if (!TREE_SIDE_EFFECTS (exp))
3199 init_expr = NULL_TREE;
3200 /* There are no expressions with REFERENCE_TYPE, but there can be call
3201 arguments with such a type; just treat it as a pointer. */
3202 else if (TREE_CODE (TREE_TYPE (exp)) == REFERENCE_TYPE
3203 || SCALAR_TYPE_P (TREE_TYPE (exp))
3204 || !lvalue_or_rvalue_with_address_p (exp))
3206 init_expr = get_target_expr (exp);
3207 exp = TARGET_EXPR_SLOT (init_expr);
3211 bool xval = !real_lvalue_p (exp);
3212 exp = cp_build_addr_expr (exp, tf_warning_or_error);
3213 init_expr = get_target_expr (exp);
3214 exp = TARGET_EXPR_SLOT (init_expr);
3215 exp = cp_build_indirect_ref (exp, RO_NULL, tf_warning_or_error);
3221 gcc_assert (!TREE_SIDE_EFFECTS (exp));
3225 /* Add NEW_EXPR, an expression whose value we don't care about, after the
3226 similar expression ORIG. */
3229 add_stmt_to_compound (tree orig, tree new_expr)
3231 if (!new_expr || !TREE_SIDE_EFFECTS (new_expr))
3233 if (!orig || !TREE_SIDE_EFFECTS (orig))
3235 return build2 (COMPOUND_EXPR, void_type_node, orig, new_expr);
3238 /* Like stabilize_expr, but for a call whose arguments we want to
3239 pre-evaluate. CALL is modified in place to use the pre-evaluated
3240 arguments, while, upon return, *INITP contains an expression to
3241 compute the arguments. */
3244 stabilize_call (tree call, tree *initp)
3246 tree inits = NULL_TREE;
3248 int nargs = call_expr_nargs (call);
3250 if (call == error_mark_node || processing_template_decl)
3256 gcc_assert (TREE_CODE (call) == CALL_EXPR);
3258 for (i = 0; i < nargs; i++)
3261 CALL_EXPR_ARG (call, i) =
3262 stabilize_expr (CALL_EXPR_ARG (call, i), &init);
3263 inits = add_stmt_to_compound (inits, init);
3269 /* Like stabilize_expr, but for an AGGR_INIT_EXPR whose arguments we want
3270 to pre-evaluate. CALL is modified in place to use the pre-evaluated
3271 arguments, while, upon return, *INITP contains an expression to
3272 compute the arguments. */
3275 stabilize_aggr_init (tree call, tree *initp)
3277 tree inits = NULL_TREE;
3279 int nargs = aggr_init_expr_nargs (call);
3281 if (call == error_mark_node)
3284 gcc_assert (TREE_CODE (call) == AGGR_INIT_EXPR);
3286 for (i = 0; i < nargs; i++)
3289 AGGR_INIT_EXPR_ARG (call, i) =
3290 stabilize_expr (AGGR_INIT_EXPR_ARG (call, i), &init);
3291 inits = add_stmt_to_compound (inits, init);
3297 /* Like stabilize_expr, but for an initialization.
3299 If the initialization is for an object of class type, this function
3300 takes care not to introduce additional temporaries.
3302 Returns TRUE iff the expression was successfully pre-evaluated,
3303 i.e., if INIT is now side-effect free, except for, possible, a
3304 single call to a constructor. */
3307 stabilize_init (tree init, tree *initp)
3313 if (t == error_mark_node || processing_template_decl)
3316 if (TREE_CODE (t) == INIT_EXPR
3317 && TREE_CODE (TREE_OPERAND (t, 1)) != TARGET_EXPR
3318 && TREE_CODE (TREE_OPERAND (t, 1)) != AGGR_INIT_EXPR)
3320 TREE_OPERAND (t, 1) = stabilize_expr (TREE_OPERAND (t, 1), initp);
3324 if (TREE_CODE (t) == INIT_EXPR)
3325 t = TREE_OPERAND (t, 1);
3326 if (TREE_CODE (t) == TARGET_EXPR)
3327 t = TARGET_EXPR_INITIAL (t);
3328 if (TREE_CODE (t) == COMPOUND_EXPR)
3330 if (TREE_CODE (t) == CONSTRUCTOR)
3332 /* Aggregate initialization: stabilize each of the field
3337 FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (t), i, value)
3338 if (!stabilize_init (value, initp))
3343 /* If the initializer is a COND_EXPR, we can't preevaluate
3345 if (TREE_CODE (t) == COND_EXPR)
3348 if (TREE_CODE (t) == CALL_EXPR)
3350 stabilize_call (t, initp);
3354 if (TREE_CODE (t) == AGGR_INIT_EXPR)
3356 stabilize_aggr_init (t, initp);
3360 /* The initialization is being performed via a bitwise copy -- and
3361 the item copied may have side effects. */
3362 return TREE_SIDE_EFFECTS (init);
3365 /* Like "fold", but should be used whenever we might be processing the
3366 body of a template. */
3369 fold_if_not_in_template (tree expr)
3371 /* In the body of a template, there is never any need to call
3372 "fold". We will call fold later when actually instantiating the
3373 template. Integral constant expressions in templates will be
3374 evaluated via fold_non_dependent_expr, as necessary. */
3375 if (processing_template_decl)
3378 /* Fold C++ front-end specific tree codes. */
3379 if (TREE_CODE (expr) == UNARY_PLUS_EXPR)
3380 return fold_convert (TREE_TYPE (expr), TREE_OPERAND (expr, 0));
3385 /* Returns true if a cast to TYPE may appear in an integral constant
3389 cast_valid_in_integral_constant_expression_p (tree type)
3391 return (INTEGRAL_OR_ENUMERATION_TYPE_P (type)
3392 || cxx_dialect >= cxx0x
3393 || dependent_type_p (type)
3394 || type == error_mark_node);
3397 /* Return true if we need to fix linkage information of DECL. */
3400 cp_fix_function_decl_p (tree decl)
3402 /* Skip if DECL is not externally visible. */
3403 if (!TREE_PUBLIC (decl))
3406 /* We need to fix DECL if it a appears to be exported but with no
3407 function body. Thunks do not have CFGs and we may need to
3408 handle them specially later. */
3409 if (!gimple_has_body_p (decl)
3410 && !DECL_THUNK_P (decl)
3411 && !DECL_EXTERNAL (decl))
3413 struct cgraph_node *node = cgraph_get_node (decl);
3415 /* Don't fix same_body aliases. Although they don't have their own
3416 CFG, they share it with what they alias to. */
3417 if (!node || !node->alias
3418 || !VEC_length (ipa_ref_t, node->ref_list.references))
3425 /* Clean the C++ specific parts of the tree T. */
3428 cp_free_lang_data (tree t)
3430 if (TREE_CODE (t) == METHOD_TYPE
3431 || TREE_CODE (t) == FUNCTION_TYPE)
3433 /* Default args are not interesting anymore. */
3434 tree argtypes = TYPE_ARG_TYPES (t);
3437 TREE_PURPOSE (argtypes) = 0;
3438 argtypes = TREE_CHAIN (argtypes);
3441 else if (TREE_CODE (t) == FUNCTION_DECL
3442 && cp_fix_function_decl_p (t))
3444 /* If T is used in this translation unit at all, the definition
3445 must exist somewhere else since we have decided to not emit it
3446 in this TU. So make it an external reference. */
3447 DECL_EXTERNAL (t) = 1;
3448 TREE_STATIC (t) = 0;
3450 if (CP_AGGREGATE_TYPE_P (t)
3453 tree name = TYPE_NAME (t);
3454 if (TREE_CODE (name) == TYPE_DECL)
3455 name = DECL_NAME (name);
3456 /* Drop anonymous names. */
3457 if (name != NULL_TREE
3458 && ANON_AGGRNAME_P (name))
3459 TYPE_NAME (t) = NULL_TREE;
3461 if (TREE_CODE (t) == NAMESPACE_DECL)
3463 /* The list of users of a namespace isn't useful for the middle-end
3464 or debug generators. */
3465 DECL_NAMESPACE_USERS (t) = NULL_TREE;
3466 /* Neither do we need the leftover chaining of namespaces
3467 from the binding level. */
3468 DECL_CHAIN (t) = NULL_TREE;
3472 /* Stub for c-common. Please keep in sync with c-decl.c.
3473 FIXME: If address space support is target specific, then this
3474 should be a C target hook. But currently this is not possible,
3475 because this function is called via REGISTER_TARGET_PRAGMAS. */
3477 c_register_addr_space (const char *word ATTRIBUTE_UNUSED,
3478 addr_space_t as ATTRIBUTE_UNUSED)
3482 /* Return the number of operands in T that we care about for things like
3486 cp_tree_operand_length (const_tree t)
3488 enum tree_code code = TREE_CODE (t);
3492 case PREINCREMENT_EXPR:
3493 case PREDECREMENT_EXPR:
3494 case POSTINCREMENT_EXPR:
3495 case POSTDECREMENT_EXPR:
3501 case EXPR_PACK_EXPANSION:
3505 return TREE_OPERAND_LENGTH (t);
3509 #if defined ENABLE_TREE_CHECKING && (GCC_VERSION >= 2007)
3510 /* Complain that some language-specific thing hanging off a tree
3511 node has been accessed improperly. */
3514 lang_check_failed (const char* file, int line, const char* function)
3516 internal_error ("lang_* check: failed in %s, at %s:%d",
3517 function, trim_filename (file), line);
3519 #endif /* ENABLE_TREE_CHECKING */
3521 #include "gt-cp-tree.h"