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
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"
33 #include "insn-config.h"
34 #include "integrate.h"
35 #include "tree-inline.h"
39 #include "tree-flow.h"
41 static tree bot_manip (tree *, int *, void *);
42 static tree bot_replace (tree *, int *, void *);
43 static tree build_cplus_array_type_1 (tree, tree);
44 static int list_hash_eq (const void *, const void *);
45 static hashval_t list_hash_pieces (tree, tree, tree);
46 static hashval_t list_hash (const void *);
47 static cp_lvalue_kind lvalue_p_1 (tree, int);
48 static tree build_target_expr (tree, tree);
49 static tree count_trees_r (tree *, int *, void *);
50 static tree verify_stmt_tree_r (tree *, int *, void *);
51 static tree build_local_temp (tree);
53 static tree handle_java_interface_attribute (tree *, tree, tree, int, bool *);
54 static tree handle_com_interface_attribute (tree *, tree, tree, int, bool *);
55 static tree handle_init_priority_attribute (tree *, tree, tree, int, bool *);
57 /* If REF is an lvalue, returns the kind of lvalue that REF is.
58 Otherwise, returns clk_none. If TREAT_CLASS_RVALUES_AS_LVALUES is
59 nonzero, rvalues of class type are considered lvalues. */
63 int treat_class_rvalues_as_lvalues)
65 cp_lvalue_kind op1_lvalue_kind = clk_none;
66 cp_lvalue_kind op2_lvalue_kind = clk_none;
68 /* Expressions of reference type are sometimes wrapped in
69 INDIRECT_REFs. INDIRECT_REFs are just internal compiler
70 representation, not part of the language, so we have to look
72 if (TREE_CODE (ref) == INDIRECT_REF
73 && TREE_CODE (TREE_TYPE (TREE_OPERAND (ref, 0)))
75 return lvalue_p_1 (TREE_OPERAND (ref, 0),
76 treat_class_rvalues_as_lvalues);
78 if (TREE_CODE (TREE_TYPE (ref)) == REFERENCE_TYPE)
80 /* unnamed rvalue references are rvalues */
81 if (TYPE_REF_IS_RVALUE (TREE_TYPE (ref))
82 && TREE_CODE (ref) != PARM_DECL
83 && TREE_CODE (ref) != VAR_DECL
84 && TREE_CODE (ref) != COMPONENT_REF)
87 /* lvalue references and named rvalue references are lvalues. */
91 if (ref == current_class_ptr)
94 switch (TREE_CODE (ref))
98 /* preincrements and predecrements are valid lvals, provided
99 what they refer to are valid lvals. */
100 case PREINCREMENT_EXPR:
101 case PREDECREMENT_EXPR:
103 case WITH_CLEANUP_EXPR:
106 return lvalue_p_1 (TREE_OPERAND (ref, 0),
107 treat_class_rvalues_as_lvalues);
110 op1_lvalue_kind = lvalue_p_1 (TREE_OPERAND (ref, 0),
111 treat_class_rvalues_as_lvalues);
112 /* Look at the member designator. */
113 if (!op1_lvalue_kind)
115 else if (is_overloaded_fn (TREE_OPERAND (ref, 1)))
116 /* The "field" can be a FUNCTION_DECL or an OVERLOAD in some
117 situations. If we're seeing a COMPONENT_REF, it's a non-static
118 member, so it isn't an lvalue. */
119 op1_lvalue_kind = clk_none;
120 else if (TREE_CODE (TREE_OPERAND (ref, 1)) != FIELD_DECL)
121 /* This can be IDENTIFIER_NODE in a template. */;
122 else if (DECL_C_BIT_FIELD (TREE_OPERAND (ref, 1)))
124 /* Clear the ordinary bit. If this object was a class
125 rvalue we want to preserve that information. */
126 op1_lvalue_kind &= ~clk_ordinary;
127 /* The lvalue is for a bitfield. */
128 op1_lvalue_kind |= clk_bitfield;
130 else if (DECL_PACKED (TREE_OPERAND (ref, 1)))
131 op1_lvalue_kind |= clk_packed;
133 return op1_lvalue_kind;
136 case COMPOUND_LITERAL_EXPR:
141 if (TREE_READONLY (ref) && ! TREE_STATIC (ref)
142 && DECL_LANG_SPECIFIC (ref)
143 && DECL_IN_AGGR_P (ref))
149 if (TREE_CODE (TREE_TYPE (ref)) != METHOD_TYPE)
153 /* A currently unresolved scope ref. */
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_p_1 (TREE_OPERAND (ref, 0),
163 treat_class_rvalues_as_lvalues);
164 op2_lvalue_kind = lvalue_p_1 (TREE_OPERAND (ref, 1),
165 treat_class_rvalues_as_lvalues);
169 op1_lvalue_kind = lvalue_p_1 (TREE_OPERAND (ref, 1)
170 ? TREE_OPERAND (ref, 1)
171 : TREE_OPERAND (ref, 0),
172 treat_class_rvalues_as_lvalues);
173 op2_lvalue_kind = lvalue_p_1 (TREE_OPERAND (ref, 2),
174 treat_class_rvalues_as_lvalues);
181 return lvalue_p_1 (TREE_OPERAND (ref, 1),
182 treat_class_rvalues_as_lvalues);
185 return treat_class_rvalues_as_lvalues ? clk_class : clk_none;
188 return (treat_class_rvalues_as_lvalues
189 && CLASS_TYPE_P (TREE_TYPE (ref))
190 ? clk_class : clk_none);
193 /* Any class-valued call would be wrapped in a TARGET_EXPR. */
197 /* All functions (except non-static-member functions) are
199 return (DECL_NONSTATIC_MEMBER_FUNCTION_P (ref)
200 ? clk_none : clk_ordinary);
203 /* We now represent a reference to a single static member function
205 return lvalue_p_1 (BASELINK_FUNCTIONS (ref),
206 treat_class_rvalues_as_lvalues);
208 case NON_DEPENDENT_EXPR:
209 /* We must consider NON_DEPENDENT_EXPRs to be lvalues so that
210 things like "&E" where "E" is an expression with a
211 non-dependent type work. It is safe to be lenient because an
212 error will be issued when the template is instantiated if "E"
220 /* If one operand is not an lvalue at all, then this expression is
222 if (!op1_lvalue_kind || !op2_lvalue_kind)
225 /* Otherwise, it's an lvalue, and it has all the odd properties
226 contributed by either operand. */
227 op1_lvalue_kind = op1_lvalue_kind | op2_lvalue_kind;
228 /* It's not an ordinary lvalue if it involves either a bit-field or
230 if ((op1_lvalue_kind & ~clk_ordinary) != clk_none)
231 op1_lvalue_kind &= ~clk_ordinary;
232 return op1_lvalue_kind;
235 /* Returns the kind of lvalue that REF is, in the sense of
236 [basic.lval]. This function should really be named lvalue_p; it
237 computes the C++ definition of lvalue. */
240 real_lvalue_p (tree ref)
242 return lvalue_p_1 (ref,
243 /*treat_class_rvalues_as_lvalues=*/0);
246 /* This differs from real_lvalue_p in that class rvalues are
247 considered lvalues. */
253 (lvalue_p_1 (ref, /*class rvalue ok*/ 1) != clk_none);
256 /* Test whether DECL is a builtin that may appear in a
257 constant-expression. */
260 builtin_valid_in_constant_expr_p (const_tree decl)
262 /* At present BUILT_IN_CONSTANT_P is the only builtin we're allowing
263 in constant-expressions. We may want to add other builtins later. */
264 return DECL_IS_BUILTIN_CONSTANT_P (decl);
267 /* Build a TARGET_EXPR, initializing the DECL with the VALUE. */
270 build_target_expr (tree decl, tree value)
274 #ifdef ENABLE_CHECKING
275 gcc_assert (VOID_TYPE_P (TREE_TYPE (value))
276 || TREE_TYPE (decl) == TREE_TYPE (value)
277 || useless_type_conversion_p (TREE_TYPE (decl),
281 t = build4 (TARGET_EXPR, TREE_TYPE (decl), decl, value,
282 cxx_maybe_build_cleanup (decl), NULL_TREE);
283 /* We always set TREE_SIDE_EFFECTS so that expand_expr does not
284 ignore the TARGET_EXPR. If there really turn out to be no
285 side-effects, then the optimizer should be able to get rid of
286 whatever code is generated anyhow. */
287 TREE_SIDE_EFFECTS (t) = 1;
292 /* Return an undeclared local temporary of type TYPE for use in building a
296 build_local_temp (tree type)
298 tree slot = build_decl (VAR_DECL, NULL_TREE, type);
299 DECL_ARTIFICIAL (slot) = 1;
300 DECL_IGNORED_P (slot) = 1;
301 DECL_CONTEXT (slot) = current_function_decl;
302 layout_decl (slot, 0);
306 /* Set various status flags when building an AGGR_INIT_EXPR object T. */
309 process_aggr_init_operands (tree t)
313 side_effects = TREE_SIDE_EFFECTS (t);
317 n = TREE_OPERAND_LENGTH (t);
318 for (i = 1; i < n; i++)
320 tree op = TREE_OPERAND (t, i);
321 if (op && TREE_SIDE_EFFECTS (op))
328 TREE_SIDE_EFFECTS (t) = side_effects;
331 /* Build an AGGR_INIT_EXPR of class tcc_vl_exp with the indicated RETURN_TYPE,
332 FN, and SLOT. NARGS is the number of call arguments which are specified
333 as a tree array ARGS. */
336 build_aggr_init_array (tree return_type, tree fn, tree slot, int nargs,
342 t = build_vl_exp (AGGR_INIT_EXPR, nargs + 3);
343 TREE_TYPE (t) = return_type;
344 AGGR_INIT_EXPR_FN (t) = fn;
345 AGGR_INIT_EXPR_SLOT (t) = slot;
346 for (i = 0; i < nargs; i++)
347 AGGR_INIT_EXPR_ARG (t, i) = args[i];
348 process_aggr_init_operands (t);
352 /* INIT is a CALL_EXPR or AGGR_INIT_EXPR which needs info about its
353 target. TYPE is the type to be initialized.
355 Build an AGGR_INIT_EXPR to represent the initialization. This function
356 differs from build_cplus_new in that an AGGR_INIT_EXPR can only be used
357 to initialize another object, whereas a TARGET_EXPR can either
358 initialize another object or create its own temporary object, and as a
359 result building up a TARGET_EXPR requires that the type's destructor be
363 build_aggr_init_expr (tree type, tree init)
370 /* Make sure that we're not trying to create an instance of an
372 abstract_virtuals_error (NULL_TREE, type);
374 if (TREE_CODE (init) == CALL_EXPR)
375 fn = CALL_EXPR_FN (init);
376 else if (TREE_CODE (init) == AGGR_INIT_EXPR)
377 fn = AGGR_INIT_EXPR_FN (init);
379 return convert (type, init);
381 is_ctor = (TREE_CODE (fn) == ADDR_EXPR
382 && TREE_CODE (TREE_OPERAND (fn, 0)) == FUNCTION_DECL
383 && DECL_CONSTRUCTOR_P (TREE_OPERAND (fn, 0)));
385 /* We split the CALL_EXPR into its function and its arguments here.
386 Then, in expand_expr, we put them back together. The reason for
387 this is that this expression might be a default argument
388 expression. In that case, we need a new temporary every time the
389 expression is used. That's what break_out_target_exprs does; it
390 replaces every AGGR_INIT_EXPR with a copy that uses a fresh
391 temporary slot. Then, expand_expr builds up a call-expression
392 using the new slot. */
394 /* If we don't need to use a constructor to create an object of this
395 type, don't mess with AGGR_INIT_EXPR. */
396 if (is_ctor || TREE_ADDRESSABLE (type))
398 slot = build_local_temp (type);
400 if (TREE_CODE(init) == CALL_EXPR)
401 rval = build_aggr_init_array (void_type_node, fn, slot,
402 call_expr_nargs (init),
403 CALL_EXPR_ARGP (init));
405 rval = build_aggr_init_array (void_type_node, fn, slot,
406 aggr_init_expr_nargs (init),
407 AGGR_INIT_EXPR_ARGP (init));
408 TREE_SIDE_EFFECTS (rval) = 1;
409 AGGR_INIT_VIA_CTOR_P (rval) = is_ctor;
417 /* INIT is a CALL_EXPR or AGGR_INIT_EXPR which needs info about its
418 target. TYPE is the type that this initialization should appear to
421 Build an encapsulation of the initialization to perform
422 and return it so that it can be processed by language-independent
423 and language-specific expression expanders. */
426 build_cplus_new (tree type, tree init)
428 tree rval = build_aggr_init_expr (type, init);
431 if (TREE_CODE (rval) == AGGR_INIT_EXPR)
432 slot = AGGR_INIT_EXPR_SLOT (rval);
433 else if (TREE_CODE (rval) == CALL_EXPR)
434 slot = build_local_temp (type);
438 rval = build_target_expr (slot, rval);
439 TARGET_EXPR_IMPLICIT_P (rval) = 1;
444 /* Build a TARGET_EXPR using INIT to initialize a new temporary of the
448 build_target_expr_with_type (tree init, tree type)
450 gcc_assert (!VOID_TYPE_P (type));
452 if (TREE_CODE (init) == TARGET_EXPR)
454 else if (CLASS_TYPE_P (type) && !TYPE_HAS_TRIVIAL_INIT_REF (type)
455 && !VOID_TYPE_P (TREE_TYPE (init))
456 && TREE_CODE (init) != COND_EXPR
457 && TREE_CODE (init) != CONSTRUCTOR
458 && TREE_CODE (init) != VA_ARG_EXPR)
459 /* We need to build up a copy constructor call. A void initializer
460 means we're being called from bot_manip. COND_EXPR is a special
461 case because we already have copies on the arms and we don't want
462 another one here. A CONSTRUCTOR is aggregate initialization, which
463 is handled separately. A VA_ARG_EXPR is magic creation of an
464 aggregate; there's no additional work to be done. */
465 return force_rvalue (init);
467 return force_target_expr (type, init);
470 /* Like the above function, but without the checking. This function should
471 only be used by code which is deliberately trying to subvert the type
472 system, such as call_builtin_trap. */
475 force_target_expr (tree type, tree init)
479 gcc_assert (!VOID_TYPE_P (type));
481 slot = build_local_temp (type);
482 return build_target_expr (slot, init);
485 /* Like build_target_expr_with_type, but use the type of INIT. */
488 get_target_expr (tree init)
490 return build_target_expr_with_type (init, TREE_TYPE (init));
493 /* If EXPR is a bitfield reference, convert it to the declared type of
494 the bitfield, and return the resulting expression. Otherwise,
495 return EXPR itself. */
498 convert_bitfield_to_declared_type (tree expr)
502 bitfield_type = is_bitfield_expr_with_lowered_type (expr);
504 expr = convert_to_integer (TYPE_MAIN_VARIANT (bitfield_type),
509 /* EXPR is being used in an rvalue context. Return a version of EXPR
510 that is marked as an rvalue. */
517 if (error_operand_p (expr))
522 Non-class rvalues always have cv-unqualified types. */
523 type = TREE_TYPE (expr);
524 if (!CLASS_TYPE_P (type) && cp_type_quals (type))
525 type = TYPE_MAIN_VARIANT (type);
527 if (!processing_template_decl && real_lvalue_p (expr))
528 expr = build1 (NON_LVALUE_EXPR, type, expr);
529 else if (type != TREE_TYPE (expr))
530 expr = build_nop (type, expr);
536 /* Hash an ARRAY_TYPE. K is really of type `tree'. */
539 cplus_array_hash (const void* k)
542 const_tree const t = (const_tree) k;
544 hash = TYPE_UID (TREE_TYPE (t));
546 hash ^= TYPE_UID (TYPE_DOMAIN (t));
550 typedef struct cplus_array_info {
555 /* Compare two ARRAY_TYPEs. K1 is really of type `tree', K2 is really
556 of type `cplus_array_info*'. */
559 cplus_array_compare (const void * k1, const void * k2)
561 const_tree const t1 = (const_tree) k1;
562 const cplus_array_info *const t2 = (const cplus_array_info*) k2;
564 return (TREE_TYPE (t1) == t2->type && TYPE_DOMAIN (t1) == t2->domain);
567 /* Hash table containing all of the C++ array types, including
568 dependent array types and array types whose element type is
570 static GTY ((param_is (union tree_node))) htab_t cplus_array_htab;
574 build_cplus_array_type_1 (tree elt_type, tree index_type)
578 if (elt_type == error_mark_node || index_type == error_mark_node)
579 return error_mark_node;
581 if (processing_template_decl
582 && (dependent_type_p (elt_type)
583 || (index_type && !TREE_CONSTANT (TYPE_MAX_VALUE (index_type)))))
586 cplus_array_info cai;
589 if (cplus_array_htab == NULL)
590 cplus_array_htab = htab_create_ggc (61, &cplus_array_hash,
591 &cplus_array_compare, NULL);
593 hash = TYPE_UID (elt_type);
595 hash ^= TYPE_UID (index_type);
597 cai.domain = index_type;
599 e = htab_find_slot_with_hash (cplus_array_htab, &cai, hash, INSERT);
601 /* We have found the type: we're done. */
605 /* Build a new array type. */
606 t = make_node (ARRAY_TYPE);
607 TREE_TYPE (t) = elt_type;
608 TYPE_DOMAIN (t) = index_type;
610 /* Store it in the hash table. */
613 /* Set the canonical type for this new node. */
614 if (TYPE_STRUCTURAL_EQUALITY_P (elt_type)
615 || (index_type && TYPE_STRUCTURAL_EQUALITY_P (index_type)))
616 SET_TYPE_STRUCTURAL_EQUALITY (t);
617 else if (TYPE_CANONICAL (elt_type) != elt_type
619 && TYPE_CANONICAL (index_type) != index_type))
621 = build_cplus_array_type
622 (TYPE_CANONICAL (elt_type),
623 index_type ? TYPE_CANONICAL (index_type) : index_type);
625 TYPE_CANONICAL (t) = t;
629 t = build_array_type (elt_type, index_type);
631 /* Push these needs up so that initialization takes place
633 TYPE_NEEDS_CONSTRUCTING (t)
634 = TYPE_NEEDS_CONSTRUCTING (TYPE_MAIN_VARIANT (elt_type));
635 TYPE_HAS_NONTRIVIAL_DESTRUCTOR (t)
636 = TYPE_HAS_NONTRIVIAL_DESTRUCTOR (TYPE_MAIN_VARIANT (elt_type));
641 build_cplus_array_type (tree elt_type, tree index_type)
644 int type_quals = cp_type_quals (elt_type);
646 if (type_quals != TYPE_UNQUALIFIED)
647 elt_type = cp_build_qualified_type (elt_type, TYPE_UNQUALIFIED);
649 t = build_cplus_array_type_1 (elt_type, index_type);
651 if (type_quals != TYPE_UNQUALIFIED)
652 t = cp_build_qualified_type (t, type_quals);
657 /* Return an ARRAY_TYPE with element type ELT and length N. */
660 build_array_of_n_type (tree elt, int n)
662 return build_cplus_array_type (elt, build_index_type (size_int (n - 1)));
665 /* Return a reference type node referring to TO_TYPE. If RVAL is
666 true, return an rvalue reference type, otherwise return an lvalue
667 reference type. If a type node exists, reuse it, otherwise create
670 cp_build_reference_type (tree to_type, bool rval)
673 lvalue_ref = build_reference_type (to_type);
677 /* This code to create rvalue reference types is based on and tied
678 to the code creating lvalue reference types in the middle-end
679 functions build_reference_type_for_mode and build_reference_type.
681 It works by putting the rvalue reference type nodes after the
682 lvalue reference nodes in the TYPE_NEXT_REF_TO linked list, so
683 they will effectively be ignored by the middle end. */
685 for (t = lvalue_ref; (t = TYPE_NEXT_REF_TO (t)); )
686 if (TYPE_REF_IS_RVALUE (t))
689 t = copy_node (lvalue_ref);
691 TYPE_REF_IS_RVALUE (t) = true;
692 TYPE_NEXT_REF_TO (t) = TYPE_NEXT_REF_TO (lvalue_ref);
693 TYPE_NEXT_REF_TO (lvalue_ref) = t;
694 TYPE_MAIN_VARIANT (t) = t;
696 if (TYPE_STRUCTURAL_EQUALITY_P (to_type))
697 SET_TYPE_STRUCTURAL_EQUALITY (t);
698 else if (TYPE_CANONICAL (to_type) != to_type)
700 = cp_build_reference_type (TYPE_CANONICAL (to_type), rval);
702 TYPE_CANONICAL (t) = t;
710 /* Used by the C++ front end to build qualified array types. However,
711 the C version of this function does not properly maintain canonical
712 types (which are not used in C). */
714 c_build_qualified_type (tree type, int type_quals)
716 return cp_build_qualified_type (type, type_quals);
720 /* Make a variant of TYPE, qualified with the TYPE_QUALS. Handles
721 arrays correctly. In particular, if TYPE is an array of T's, and
722 TYPE_QUALS is non-empty, returns an array of qualified T's.
724 FLAGS determines how to deal with ill-formed qualifications. If
725 tf_ignore_bad_quals is set, then bad qualifications are dropped
726 (this is permitted if TYPE was introduced via a typedef or template
727 type parameter). If bad qualifications are dropped and tf_warning
728 is set, then a warning is issued for non-const qualifications. If
729 tf_ignore_bad_quals is not set and tf_error is not set, we
730 return error_mark_node. Otherwise, we issue an error, and ignore
733 Qualification of a reference type is valid when the reference came
734 via a typedef or template type argument. [dcl.ref] No such
735 dispensation is provided for qualifying a function type. [dcl.fct]
736 DR 295 queries this and the proposed resolution brings it into line
737 with qualifying a reference. We implement the DR. We also behave
738 in a similar manner for restricting non-pointer types. */
741 cp_build_qualified_type_real (tree type,
743 tsubst_flags_t complain)
746 int bad_quals = TYPE_UNQUALIFIED;
748 if (type == error_mark_node)
751 if (type_quals == cp_type_quals (type))
754 if (TREE_CODE (type) == ARRAY_TYPE)
756 /* In C++, the qualification really applies to the array element
757 type. Obtain the appropriately qualified element type. */
760 = cp_build_qualified_type_real (TREE_TYPE (type),
764 if (element_type == error_mark_node)
765 return error_mark_node;
767 /* See if we already have an identically qualified type. */
768 for (t = TYPE_MAIN_VARIANT (type); t; t = TYPE_NEXT_VARIANT (t))
769 if (cp_type_quals (t) == type_quals
770 && TYPE_NAME (t) == TYPE_NAME (type)
771 && TYPE_CONTEXT (t) == TYPE_CONTEXT (type))
776 t = build_cplus_array_type_1 (element_type, TYPE_DOMAIN (type));
778 if (TYPE_MAIN_VARIANT (t) != TYPE_MAIN_VARIANT (type))
780 /* Set the main variant of the newly-created ARRAY_TYPE
781 (with cv-qualified element type) to the main variant of
782 the unqualified ARRAY_TYPE we started with. */
783 tree last_variant = t;
784 tree m = TYPE_MAIN_VARIANT (type);
786 /* Find the last variant on the new ARRAY_TYPEs list of
787 variants, setting the main variant of each of the other
788 types to the main variant of our unqualified
790 while (TYPE_NEXT_VARIANT (last_variant))
792 TYPE_MAIN_VARIANT (last_variant) = m;
793 last_variant = TYPE_NEXT_VARIANT (last_variant);
796 /* Splice in the newly-created variants. */
797 TYPE_NEXT_VARIANT (last_variant) = TYPE_NEXT_VARIANT (m);
798 TYPE_NEXT_VARIANT (m) = t;
799 TYPE_MAIN_VARIANT (last_variant) = m;
803 /* Even if we already had this variant, we update
804 TYPE_NEEDS_CONSTRUCTING and TYPE_HAS_NONTRIVIAL_DESTRUCTOR in case
805 they changed since the variant was originally created.
807 This seems hokey; if there is some way to use a previous
808 variant *without* coming through here,
809 TYPE_NEEDS_CONSTRUCTING will never be updated. */
810 TYPE_NEEDS_CONSTRUCTING (t)
811 = TYPE_NEEDS_CONSTRUCTING (TYPE_MAIN_VARIANT (element_type));
812 TYPE_HAS_NONTRIVIAL_DESTRUCTOR (t)
813 = TYPE_HAS_NONTRIVIAL_DESTRUCTOR (TYPE_MAIN_VARIANT (element_type));
816 else if (TYPE_PTRMEMFUNC_P (type))
818 /* For a pointer-to-member type, we can't just return a
819 cv-qualified version of the RECORD_TYPE. If we do, we
820 haven't changed the field that contains the actual pointer to
821 a method, and so TYPE_PTRMEMFUNC_FN_TYPE will be wrong. */
824 t = TYPE_PTRMEMFUNC_FN_TYPE (type);
825 t = cp_build_qualified_type_real (t, type_quals, complain);
826 return build_ptrmemfunc_type (t);
828 else if (TREE_CODE (type) == TYPE_PACK_EXPANSION)
830 tree t = PACK_EXPANSION_PATTERN (type);
832 t = cp_build_qualified_type_real (t, type_quals, complain);
833 return make_pack_expansion (t);
836 /* A reference or method type shall not be cv-qualified.
837 [dcl.ref], [dcl.fct] */
838 if (type_quals & (TYPE_QUAL_CONST | TYPE_QUAL_VOLATILE)
839 && (TREE_CODE (type) == REFERENCE_TYPE
840 || TREE_CODE (type) == METHOD_TYPE))
842 bad_quals |= type_quals & (TYPE_QUAL_CONST | TYPE_QUAL_VOLATILE);
843 type_quals &= ~(TYPE_QUAL_CONST | TYPE_QUAL_VOLATILE);
846 /* A restrict-qualified type must be a pointer (or reference)
847 to object or incomplete type, or a function type. */
848 if ((type_quals & TYPE_QUAL_RESTRICT)
849 && TREE_CODE (type) != TEMPLATE_TYPE_PARM
850 && TREE_CODE (type) != TYPENAME_TYPE
851 && TREE_CODE (type) != FUNCTION_TYPE
852 && !POINTER_TYPE_P (type))
854 bad_quals |= TYPE_QUAL_RESTRICT;
855 type_quals &= ~TYPE_QUAL_RESTRICT;
858 if (bad_quals == TYPE_UNQUALIFIED)
860 else if (!(complain & (tf_error | tf_ignore_bad_quals)))
861 return error_mark_node;
864 if (complain & tf_ignore_bad_quals)
865 /* We're not going to warn about constifying things that can't
867 bad_quals &= ~TYPE_QUAL_CONST;
870 tree bad_type = build_qualified_type (ptr_type_node, bad_quals);
872 if (!(complain & tf_ignore_bad_quals))
873 error ("%qV qualifiers cannot be applied to %qT",
878 /* Retrieve (or create) the appropriately qualified variant. */
879 result = build_qualified_type (type, type_quals);
881 /* If this was a pointer-to-method type, and we just made a copy,
882 then we need to unshare the record that holds the cached
883 pointer-to-member-function type, because these will be distinct
884 between the unqualified and qualified types. */
886 && TREE_CODE (type) == POINTER_TYPE
887 && TREE_CODE (TREE_TYPE (type)) == METHOD_TYPE
888 && TYPE_LANG_SPECIFIC (result) == TYPE_LANG_SPECIFIC (type))
889 TYPE_LANG_SPECIFIC (result) = NULL;
891 /* We may also have ended up building a new copy of the canonical
892 type of a pointer-to-method type, which could have the same
893 sharing problem described above. */
894 if (TYPE_CANONICAL (result) != TYPE_CANONICAL (type)
895 && TREE_CODE (type) == POINTER_TYPE
896 && TREE_CODE (TREE_TYPE (type)) == METHOD_TYPE
897 && (TYPE_LANG_SPECIFIC (TYPE_CANONICAL (result))
898 == TYPE_LANG_SPECIFIC (TYPE_CANONICAL (type))))
899 TYPE_LANG_SPECIFIC (TYPE_CANONICAL (result)) = NULL;
905 /* Returns the canonical version of TYPE. In other words, if TYPE is
906 a typedef, returns the underlying type. The cv-qualification of
907 the type returned matches the type input; they will always be
911 canonical_type_variant (tree t)
913 if (t == error_mark_node)
914 return error_mark_node;
916 return cp_build_qualified_type (TYPE_MAIN_VARIANT (t), cp_type_quals (t));
919 /* Makes a copy of BINFO and TYPE, which is to be inherited into a
920 graph dominated by T. If BINFO is NULL, TYPE is a dependent base,
921 and we do a shallow copy. If BINFO is non-NULL, we do a deep copy.
922 VIRT indicates whether TYPE is inherited virtually or not.
923 IGO_PREV points at the previous binfo of the inheritance graph
924 order chain. The newly copied binfo's TREE_CHAIN forms this
927 The CLASSTYPE_VBASECLASSES vector of T is constructed in the
928 correct order. That is in the order the bases themselves should be
931 The BINFO_INHERITANCE of a virtual base class points to the binfo
932 of the most derived type. ??? We could probably change this so that
933 BINFO_INHERITANCE becomes synonymous with BINFO_PRIMARY, and hence
934 remove a field. They currently can only differ for primary virtual
938 copy_binfo (tree binfo, tree type, tree t, tree *igo_prev, int virt)
944 /* See if we've already made this virtual base. */
945 new_binfo = binfo_for_vbase (type, t);
950 new_binfo = make_tree_binfo (binfo ? BINFO_N_BASE_BINFOS (binfo) : 0);
951 BINFO_TYPE (new_binfo) = type;
953 /* Chain it into the inheritance graph. */
954 TREE_CHAIN (*igo_prev) = new_binfo;
955 *igo_prev = new_binfo;
962 gcc_assert (!BINFO_DEPENDENT_BASE_P (binfo));
963 gcc_assert (SAME_BINFO_TYPE_P (BINFO_TYPE (binfo), type));
965 BINFO_OFFSET (new_binfo) = BINFO_OFFSET (binfo);
966 BINFO_VIRTUALS (new_binfo) = BINFO_VIRTUALS (binfo);
968 /* We do not need to copy the accesses, as they are read only. */
969 BINFO_BASE_ACCESSES (new_binfo) = BINFO_BASE_ACCESSES (binfo);
971 /* Recursively copy base binfos of BINFO. */
972 for (ix = 0; BINFO_BASE_ITERATE (binfo, ix, base_binfo); ix++)
976 gcc_assert (!BINFO_DEPENDENT_BASE_P (base_binfo));
977 new_base_binfo = copy_binfo (base_binfo, BINFO_TYPE (base_binfo),
979 BINFO_VIRTUAL_P (base_binfo));
981 if (!BINFO_INHERITANCE_CHAIN (new_base_binfo))
982 BINFO_INHERITANCE_CHAIN (new_base_binfo) = new_binfo;
983 BINFO_BASE_APPEND (new_binfo, new_base_binfo);
987 BINFO_DEPENDENT_BASE_P (new_binfo) = 1;
991 /* Push it onto the list after any virtual bases it contains
992 will have been pushed. */
993 VEC_quick_push (tree, CLASSTYPE_VBASECLASSES (t), new_binfo);
994 BINFO_VIRTUAL_P (new_binfo) = 1;
995 BINFO_INHERITANCE_CHAIN (new_binfo) = TYPE_BINFO (t);
1001 /* Hashing of lists so that we don't make duplicates.
1002 The entry point is `list_hash_canon'. */
1004 /* Now here is the hash table. When recording a list, it is added
1005 to the slot whose index is the hash code mod the table size.
1006 Note that the hash table is used for several kinds of lists.
1007 While all these live in the same table, they are completely independent,
1008 and the hash code is computed differently for each of these. */
1010 static GTY ((param_is (union tree_node))) htab_t list_hash_table;
1019 /* Compare ENTRY (an entry in the hash table) with DATA (a list_proxy
1020 for a node we are thinking about adding). */
1023 list_hash_eq (const void* entry, const void* data)
1025 const_tree const t = (const_tree) entry;
1026 const struct list_proxy *const proxy = (const struct list_proxy *) data;
1028 return (TREE_VALUE (t) == proxy->value
1029 && TREE_PURPOSE (t) == proxy->purpose
1030 && TREE_CHAIN (t) == proxy->chain);
1033 /* Compute a hash code for a list (chain of TREE_LIST nodes
1034 with goodies in the TREE_PURPOSE, TREE_VALUE, and bits of the
1035 TREE_COMMON slots), by adding the hash codes of the individual entries. */
1038 list_hash_pieces (tree purpose, tree value, tree chain)
1040 hashval_t hashcode = 0;
1043 hashcode += TREE_HASH (chain);
1046 hashcode += TREE_HASH (value);
1050 hashcode += TREE_HASH (purpose);
1056 /* Hash an already existing TREE_LIST. */
1059 list_hash (const void* p)
1061 const_tree const t = (const_tree) p;
1062 return list_hash_pieces (TREE_PURPOSE (t),
1067 /* Given list components PURPOSE, VALUE, AND CHAIN, return the canonical
1068 object for an identical list if one already exists. Otherwise, build a
1069 new one, and record it as the canonical object. */
1072 hash_tree_cons (tree purpose, tree value, tree chain)
1076 struct list_proxy proxy;
1078 /* Hash the list node. */
1079 hashcode = list_hash_pieces (purpose, value, chain);
1080 /* Create a proxy for the TREE_LIST we would like to create. We
1081 don't actually create it so as to avoid creating garbage. */
1082 proxy.purpose = purpose;
1083 proxy.value = value;
1084 proxy.chain = chain;
1085 /* See if it is already in the table. */
1086 slot = htab_find_slot_with_hash (list_hash_table, &proxy, hashcode,
1088 /* If not, create a new node. */
1090 *slot = tree_cons (purpose, value, chain);
1091 return (tree) *slot;
1094 /* Constructor for hashed lists. */
1097 hash_tree_chain (tree value, tree chain)
1099 return hash_tree_cons (NULL_TREE, value, chain);
1103 debug_binfo (tree elem)
1108 fprintf (stderr, "type \"%s\", offset = " HOST_WIDE_INT_PRINT_DEC
1110 TYPE_NAME_STRING (BINFO_TYPE (elem)),
1111 TREE_INT_CST_LOW (BINFO_OFFSET (elem)));
1112 debug_tree (BINFO_TYPE (elem));
1113 if (BINFO_VTABLE (elem))
1114 fprintf (stderr, "vtable decl \"%s\"\n",
1115 IDENTIFIER_POINTER (DECL_NAME (get_vtbl_decl_for_binfo (elem))));
1117 fprintf (stderr, "no vtable decl yet\n");
1118 fprintf (stderr, "virtuals:\n");
1119 virtuals = BINFO_VIRTUALS (elem);
1124 tree fndecl = TREE_VALUE (virtuals);
1125 fprintf (stderr, "%s [%ld =? %ld]\n",
1126 IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (fndecl)),
1127 (long) n, (long) TREE_INT_CST_LOW (DECL_VINDEX (fndecl)));
1129 virtuals = TREE_CHAIN (virtuals);
1133 /* Build a representation for the qualified name SCOPE::NAME. TYPE is
1134 the type of the result expression, if known, or NULL_TREE if the
1135 resulting expression is type-dependent. If TEMPLATE_P is true,
1136 NAME is known to be a template because the user explicitly used the
1137 "template" keyword after the "::".
1139 All SCOPE_REFs should be built by use of this function. */
1142 build_qualified_name (tree type, tree scope, tree name, bool template_p)
1145 if (type == error_mark_node
1146 || scope == error_mark_node
1147 || name == error_mark_node)
1148 return error_mark_node;
1149 t = build2 (SCOPE_REF, type, scope, name);
1150 QUALIFIED_NAME_IS_TEMPLATE (t) = template_p;
1154 /* Returns nonzero if X is an expression for a (possibly overloaded)
1155 function. If "f" is a function or function template, "f", "c->f",
1156 "c.f", "C::f", and "f<int>" will all be considered possibly
1157 overloaded functions. Returns 2 if the function is actually
1158 overloaded, i.e., if it is impossible to know the type of the
1159 function without performing overload resolution. */
1162 is_overloaded_fn (tree x)
1164 /* A baselink is also considered an overloaded function. */
1165 if (TREE_CODE (x) == OFFSET_REF
1166 || TREE_CODE (x) == COMPONENT_REF)
1167 x = TREE_OPERAND (x, 1);
1169 x = BASELINK_FUNCTIONS (x);
1170 if (TREE_CODE (x) == TEMPLATE_ID_EXPR
1171 || DECL_FUNCTION_TEMPLATE_P (OVL_CURRENT (x))
1172 || (TREE_CODE (x) == OVERLOAD && OVL_CHAIN (x)))
1174 return (TREE_CODE (x) == FUNCTION_DECL
1175 || TREE_CODE (x) == OVERLOAD);
1178 /* Returns true iff X is an expression for an overloaded function
1179 whose type cannot be known without performing overload
1183 really_overloaded_fn (tree x)
1185 return is_overloaded_fn (x) == 2;
1189 get_first_fn (tree from)
1191 gcc_assert (is_overloaded_fn (from));
1192 /* A baselink is also considered an overloaded function. */
1193 if (TREE_CODE (from) == COMPONENT_REF)
1194 from = TREE_OPERAND (from, 1);
1195 if (BASELINK_P (from))
1196 from = BASELINK_FUNCTIONS (from);
1197 return OVL_CURRENT (from);
1200 /* Return a new OVL node, concatenating it with the old one. */
1203 ovl_cons (tree decl, tree chain)
1205 tree result = make_node (OVERLOAD);
1206 TREE_TYPE (result) = unknown_type_node;
1207 OVL_FUNCTION (result) = decl;
1208 TREE_CHAIN (result) = chain;
1213 /* Build a new overloaded function. If this is the first one,
1214 just return it; otherwise, ovl_cons the _DECLs */
1217 build_overload (tree decl, tree chain)
1219 if (! chain && TREE_CODE (decl) != TEMPLATE_DECL)
1221 if (chain && TREE_CODE (chain) != OVERLOAD)
1222 chain = ovl_cons (chain, NULL_TREE);
1223 return ovl_cons (decl, chain);
1227 #define PRINT_RING_SIZE 4
1230 cxx_printable_name (tree decl, int v)
1232 static unsigned int uid_ring[PRINT_RING_SIZE];
1233 static char *print_ring[PRINT_RING_SIZE];
1234 static int ring_counter;
1237 /* Only cache functions. */
1239 || TREE_CODE (decl) != FUNCTION_DECL
1240 || DECL_LANG_SPECIFIC (decl) == 0)
1241 return lang_decl_name (decl, v);
1243 /* See if this print name is lying around. */
1244 for (i = 0; i < PRINT_RING_SIZE; i++)
1245 if (uid_ring[i] == DECL_UID (decl))
1246 /* yes, so return it. */
1247 return print_ring[i];
1249 if (++ring_counter == PRINT_RING_SIZE)
1252 if (current_function_decl != NULL_TREE)
1254 if (uid_ring[ring_counter] == DECL_UID (current_function_decl))
1256 if (ring_counter == PRINT_RING_SIZE)
1258 gcc_assert (uid_ring[ring_counter] != DECL_UID (current_function_decl));
1261 if (print_ring[ring_counter])
1262 free (print_ring[ring_counter]);
1264 print_ring[ring_counter] = xstrdup (lang_decl_name (decl, v));
1265 uid_ring[ring_counter] = DECL_UID (decl);
1266 return print_ring[ring_counter];
1269 /* Build the FUNCTION_TYPE or METHOD_TYPE which may throw exceptions
1270 listed in RAISES. */
1273 build_exception_variant (tree type, tree raises)
1275 tree v = TYPE_MAIN_VARIANT (type);
1276 int type_quals = TYPE_QUALS (type);
1278 for (; v; v = TYPE_NEXT_VARIANT (v))
1279 if (check_qualified_type (v, type, type_quals)
1280 && comp_except_specs (raises, TYPE_RAISES_EXCEPTIONS (v), 1))
1283 /* Need to build a new variant. */
1284 v = build_variant_type_copy (type);
1285 TYPE_RAISES_EXCEPTIONS (v) = raises;
1289 /* Given a TEMPLATE_TEMPLATE_PARM node T, create a new
1290 BOUND_TEMPLATE_TEMPLATE_PARM bound with NEWARGS as its template
1294 bind_template_template_parm (tree t, tree newargs)
1296 tree decl = TYPE_NAME (t);
1299 t2 = cxx_make_type (BOUND_TEMPLATE_TEMPLATE_PARM);
1300 decl = build_decl (TYPE_DECL, DECL_NAME (decl), NULL_TREE);
1302 /* These nodes have to be created to reflect new TYPE_DECL and template
1304 TEMPLATE_TYPE_PARM_INDEX (t2) = copy_node (TEMPLATE_TYPE_PARM_INDEX (t));
1305 TEMPLATE_PARM_DECL (TEMPLATE_TYPE_PARM_INDEX (t2)) = decl;
1306 TEMPLATE_TEMPLATE_PARM_TEMPLATE_INFO (t2)
1307 = tree_cons (TEMPLATE_TEMPLATE_PARM_TEMPLATE_DECL (t),
1308 newargs, NULL_TREE);
1310 TREE_TYPE (decl) = t2;
1311 TYPE_NAME (t2) = decl;
1312 TYPE_STUB_DECL (t2) = decl;
1314 SET_TYPE_STRUCTURAL_EQUALITY (t2);
1319 /* Called from count_trees via walk_tree. */
1322 count_trees_r (tree *tp, int *walk_subtrees, void *data)
1332 /* Debugging function for measuring the rough complexity of a tree
1336 count_trees (tree t)
1339 cp_walk_tree_without_duplicates (&t, count_trees_r, &n_trees);
1343 /* Called from verify_stmt_tree via walk_tree. */
1346 verify_stmt_tree_r (tree* tp,
1347 int* walk_subtrees ATTRIBUTE_UNUSED ,
1351 htab_t *statements = (htab_t *) data;
1354 if (!STATEMENT_CODE_P (TREE_CODE (t)))
1357 /* If this statement is already present in the hash table, then
1358 there is a circularity in the statement tree. */
1359 gcc_assert (!htab_find (*statements, t));
1361 slot = htab_find_slot (*statements, t, INSERT);
1367 /* Debugging function to check that the statement T has not been
1368 corrupted. For now, this function simply checks that T contains no
1372 verify_stmt_tree (tree t)
1375 statements = htab_create (37, htab_hash_pointer, htab_eq_pointer, NULL);
1376 cp_walk_tree (&t, verify_stmt_tree_r, &statements, NULL);
1377 htab_delete (statements);
1380 /* Check if the type T depends on a type with no linkage and if so, return
1381 it. If RELAXED_P then do not consider a class type declared within
1382 a TREE_PUBLIC function to have no linkage. */
1385 no_linkage_check (tree t, bool relaxed_p)
1389 /* There's no point in checking linkage on template functions; we
1390 can't know their complete types. */
1391 if (processing_template_decl)
1394 switch (TREE_CODE (t))
1399 if (TYPE_PTRMEMFUNC_P (t))
1403 if (!CLASS_TYPE_P (t))
1407 if (TYPE_ANONYMOUS_P (t))
1409 fn = decl_function_context (TYPE_MAIN_DECL (t));
1410 if (fn && (!relaxed_p || !TREE_PUBLIC (fn)))
1416 case REFERENCE_TYPE:
1417 return no_linkage_check (TREE_TYPE (t), relaxed_p);
1421 r = no_linkage_check (TYPE_PTRMEM_POINTED_TO_TYPE (t),
1425 return no_linkage_check (TYPE_PTRMEM_CLASS_TYPE (t), relaxed_p);
1428 r = no_linkage_check (TYPE_METHOD_BASETYPE (t), relaxed_p);
1435 for (parm = TYPE_ARG_TYPES (t);
1436 parm && parm != void_list_node;
1437 parm = TREE_CHAIN (parm))
1439 r = no_linkage_check (TREE_VALUE (parm), relaxed_p);
1443 return no_linkage_check (TREE_TYPE (t), relaxed_p);
1451 #ifdef GATHER_STATISTICS
1452 extern int depth_reached;
1456 cxx_print_statistics (void)
1458 print_search_statistics ();
1459 print_class_statistics ();
1460 #ifdef GATHER_STATISTICS
1461 fprintf (stderr, "maximum template instantiation depth reached: %d\n",
1466 /* Return, as an INTEGER_CST node, the number of elements for TYPE
1467 (which is an ARRAY_TYPE). This counts only elements of the top
1471 array_type_nelts_top (tree type)
1473 return fold_build2 (PLUS_EXPR, sizetype,
1474 array_type_nelts (type),
1478 /* Return, as an INTEGER_CST node, the number of elements for TYPE
1479 (which is an ARRAY_TYPE). This one is a recursive count of all
1480 ARRAY_TYPEs that are clumped together. */
1483 array_type_nelts_total (tree type)
1485 tree sz = array_type_nelts_top (type);
1486 type = TREE_TYPE (type);
1487 while (TREE_CODE (type) == ARRAY_TYPE)
1489 tree n = array_type_nelts_top (type);
1490 sz = fold_build2 (MULT_EXPR, sizetype, sz, n);
1491 type = TREE_TYPE (type);
1496 /* Called from break_out_target_exprs via mapcar. */
1499 bot_manip (tree* tp, int* walk_subtrees, void* data)
1501 splay_tree target_remap = ((splay_tree) data);
1504 if (!TYPE_P (t) && TREE_CONSTANT (t))
1506 /* There can't be any TARGET_EXPRs or their slot variables below
1507 this point. We used to check !TREE_SIDE_EFFECTS, but then we
1508 failed to copy an ADDR_EXPR of the slot VAR_DECL. */
1512 if (TREE_CODE (t) == TARGET_EXPR)
1516 if (TREE_CODE (TREE_OPERAND (t, 1)) == AGGR_INIT_EXPR)
1517 u = build_cplus_new (TREE_TYPE (t), TREE_OPERAND (t, 1));
1519 u = build_target_expr_with_type (TREE_OPERAND (t, 1), TREE_TYPE (t));
1521 /* Map the old variable to the new one. */
1522 splay_tree_insert (target_remap,
1523 (splay_tree_key) TREE_OPERAND (t, 0),
1524 (splay_tree_value) TREE_OPERAND (u, 0));
1526 TREE_OPERAND (u, 1) = break_out_target_exprs (TREE_OPERAND (u, 1));
1528 /* Replace the old expression with the new version. */
1530 /* We don't have to go below this point; the recursive call to
1531 break_out_target_exprs will have handled anything below this
1537 /* Make a copy of this node. */
1538 return copy_tree_r (tp, walk_subtrees, NULL);
1541 /* Replace all remapped VAR_DECLs in T with their new equivalents.
1542 DATA is really a splay-tree mapping old variables to new
1546 bot_replace (tree* t,
1547 int* walk_subtrees ATTRIBUTE_UNUSED ,
1550 splay_tree target_remap = ((splay_tree) data);
1552 if (TREE_CODE (*t) == VAR_DECL)
1554 splay_tree_node n = splay_tree_lookup (target_remap,
1555 (splay_tree_key) *t);
1557 *t = (tree) n->value;
1563 /* When we parse a default argument expression, we may create
1564 temporary variables via TARGET_EXPRs. When we actually use the
1565 default-argument expression, we make a copy of the expression, but
1566 we must replace the temporaries with appropriate local versions. */
1569 break_out_target_exprs (tree t)
1571 static int target_remap_count;
1572 static splay_tree target_remap;
1574 if (!target_remap_count++)
1575 target_remap = splay_tree_new (splay_tree_compare_pointers,
1576 /*splay_tree_delete_key_fn=*/NULL,
1577 /*splay_tree_delete_value_fn=*/NULL);
1578 cp_walk_tree (&t, bot_manip, target_remap, NULL);
1579 cp_walk_tree (&t, bot_replace, target_remap, NULL);
1581 if (!--target_remap_count)
1583 splay_tree_delete (target_remap);
1584 target_remap = NULL;
1590 /* Similar to `build_nt', but for template definitions of dependent
1594 build_min_nt (enum tree_code code, ...)
1601 gcc_assert (TREE_CODE_CLASS (code) != tcc_vl_exp);
1605 t = make_node (code);
1606 length = TREE_CODE_LENGTH (code);
1608 for (i = 0; i < length; i++)
1610 tree x = va_arg (p, tree);
1611 TREE_OPERAND (t, i) = x;
1619 /* Similar to `build', but for template definitions. */
1622 build_min (enum tree_code code, tree tt, ...)
1629 gcc_assert (TREE_CODE_CLASS (code) != tcc_vl_exp);
1633 t = make_node (code);
1634 length = TREE_CODE_LENGTH (code);
1637 for (i = 0; i < length; i++)
1639 tree x = va_arg (p, tree);
1640 TREE_OPERAND (t, i) = x;
1641 if (x && !TYPE_P (x) && TREE_SIDE_EFFECTS (x))
1642 TREE_SIDE_EFFECTS (t) = 1;
1649 /* Similar to `build', but for template definitions of non-dependent
1650 expressions. NON_DEP is the non-dependent expression that has been
1654 build_min_non_dep (enum tree_code code, tree non_dep, ...)
1661 gcc_assert (TREE_CODE_CLASS (code) != tcc_vl_exp);
1663 va_start (p, non_dep);
1665 t = make_node (code);
1666 length = TREE_CODE_LENGTH (code);
1667 TREE_TYPE (t) = TREE_TYPE (non_dep);
1668 TREE_SIDE_EFFECTS (t) = TREE_SIDE_EFFECTS (non_dep);
1670 for (i = 0; i < length; i++)
1672 tree x = va_arg (p, tree);
1673 TREE_OPERAND (t, i) = x;
1676 if (code == COMPOUND_EXPR && TREE_CODE (non_dep) != COMPOUND_EXPR)
1677 /* This should not be considered a COMPOUND_EXPR, because it
1678 resolves to an overload. */
1679 COMPOUND_EXPR_OVERLOADED (t) = 1;
1685 /* Similar to `build_call_list', but for template definitions of non-dependent
1686 expressions. NON_DEP is the non-dependent expression that has been
1690 build_min_non_dep_call_list (tree non_dep, tree fn, tree arglist)
1692 tree t = build_nt_call_list (fn, arglist);
1693 TREE_TYPE (t) = TREE_TYPE (non_dep);
1694 TREE_SIDE_EFFECTS (t) = TREE_SIDE_EFFECTS (non_dep);
1699 get_type_decl (tree t)
1701 if (TREE_CODE (t) == TYPE_DECL)
1704 return TYPE_STUB_DECL (t);
1705 gcc_assert (t == error_mark_node);
1709 /* Returns the namespace that contains DECL, whether directly or
1713 decl_namespace_context (tree decl)
1717 if (TREE_CODE (decl) == NAMESPACE_DECL)
1719 else if (TYPE_P (decl))
1720 decl = CP_DECL_CONTEXT (TYPE_MAIN_DECL (decl));
1722 decl = CP_DECL_CONTEXT (decl);
1726 /* Returns true if decl is within an anonymous namespace, however deeply
1727 nested, or false otherwise. */
1730 decl_anon_ns_mem_p (const_tree decl)
1734 if (decl == NULL_TREE || decl == error_mark_node)
1736 if (TREE_CODE (decl) == NAMESPACE_DECL
1737 && DECL_NAME (decl) == NULL_TREE)
1739 /* Classes and namespaces inside anonymous namespaces have
1740 TREE_PUBLIC == 0, so we can shortcut the search. */
1741 else if (TYPE_P (decl))
1742 return (TREE_PUBLIC (TYPE_NAME (decl)) == 0);
1743 else if (TREE_CODE (decl) == NAMESPACE_DECL)
1744 return (TREE_PUBLIC (decl) == 0);
1746 decl = DECL_CONTEXT (decl);
1750 /* Return truthvalue of whether T1 is the same tree structure as T2.
1751 Return 1 if they are the same. Return 0 if they are different. */
1754 cp_tree_equal (tree t1, tree t2)
1756 enum tree_code code1, code2;
1763 for (code1 = TREE_CODE (t1);
1764 CONVERT_EXPR_CODE_P (code1)
1765 || code1 == NON_LVALUE_EXPR;
1766 code1 = TREE_CODE (t1))
1767 t1 = TREE_OPERAND (t1, 0);
1768 for (code2 = TREE_CODE (t2);
1769 CONVERT_EXPR_CODE_P (code2)
1770 || code1 == NON_LVALUE_EXPR;
1771 code2 = TREE_CODE (t2))
1772 t2 = TREE_OPERAND (t2, 0);
1774 /* They might have become equal now. */
1784 return TREE_INT_CST_LOW (t1) == TREE_INT_CST_LOW (t2)
1785 && TREE_INT_CST_HIGH (t1) == TREE_INT_CST_HIGH (t2);
1788 return REAL_VALUES_EQUAL (TREE_REAL_CST (t1), TREE_REAL_CST (t2));
1791 return TREE_STRING_LENGTH (t1) == TREE_STRING_LENGTH (t2)
1792 && !memcmp (TREE_STRING_POINTER (t1), TREE_STRING_POINTER (t2),
1793 TREE_STRING_LENGTH (t1));
1796 return FIXED_VALUES_IDENTICAL (TREE_FIXED_CST (t1),
1797 TREE_FIXED_CST (t2));
1800 return cp_tree_equal (TREE_REALPART (t1), TREE_REALPART (t2))
1801 && cp_tree_equal (TREE_IMAGPART (t1), TREE_IMAGPART (t2));
1804 /* We need to do this when determining whether or not two
1805 non-type pointer to member function template arguments
1807 if (!(same_type_p (TREE_TYPE (t1), TREE_TYPE (t2))
1808 /* The first operand is RTL. */
1809 && TREE_OPERAND (t1, 0) == TREE_OPERAND (t2, 0)))
1811 return cp_tree_equal (TREE_OPERAND (t1, 1), TREE_OPERAND (t2, 1));
1814 if (!cp_tree_equal (TREE_PURPOSE (t1), TREE_PURPOSE (t2)))
1816 if (!cp_tree_equal (TREE_VALUE (t1), TREE_VALUE (t2)))
1818 return cp_tree_equal (TREE_CHAIN (t1), TREE_CHAIN (t2));
1821 return cp_tree_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0));
1826 call_expr_arg_iterator iter1, iter2;
1827 if (!cp_tree_equal (CALL_EXPR_FN (t1), CALL_EXPR_FN (t2)))
1829 for (arg1 = first_call_expr_arg (t1, &iter1),
1830 arg2 = first_call_expr_arg (t2, &iter2);
1832 arg1 = next_call_expr_arg (&iter1),
1833 arg2 = next_call_expr_arg (&iter2))
1834 if (!cp_tree_equal (arg1, arg2))
1836 return (arg1 || arg2);
1841 tree o1 = TREE_OPERAND (t1, 0);
1842 tree o2 = TREE_OPERAND (t2, 0);
1844 /* Special case: if either target is an unallocated VAR_DECL,
1845 it means that it's going to be unified with whatever the
1846 TARGET_EXPR is really supposed to initialize, so treat it
1847 as being equivalent to anything. */
1848 if (TREE_CODE (o1) == VAR_DECL && DECL_NAME (o1) == NULL_TREE
1849 && !DECL_RTL_SET_P (o1))
1851 else if (TREE_CODE (o2) == VAR_DECL && DECL_NAME (o2) == NULL_TREE
1852 && !DECL_RTL_SET_P (o2))
1854 else if (!cp_tree_equal (o1, o2))
1857 return cp_tree_equal (TREE_OPERAND (t1, 1), TREE_OPERAND (t2, 1));
1860 case WITH_CLEANUP_EXPR:
1861 if (!cp_tree_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0)))
1863 return cp_tree_equal (TREE_OPERAND (t1, 1), TREE_OPERAND (t1, 1));
1866 if (TREE_OPERAND (t1, 1) != TREE_OPERAND (t2, 1))
1868 return cp_tree_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0));
1871 /* For comparing uses of parameters in late-specified return types
1872 with an out-of-class definition of the function. */
1873 if ((!DECL_CONTEXT (t1) || !DECL_CONTEXT (t2))
1874 && same_type_p (TREE_TYPE (t1), TREE_TYPE (t2))
1875 && DECL_NAME (t1) == DECL_NAME (t2))
1884 case IDENTIFIER_NODE:
1889 return (BASELINK_BINFO (t1) == BASELINK_BINFO (t2)
1890 && BASELINK_ACCESS_BINFO (t1) == BASELINK_ACCESS_BINFO (t2)
1891 && cp_tree_equal (BASELINK_FUNCTIONS (t1),
1892 BASELINK_FUNCTIONS (t2)));
1894 case TEMPLATE_PARM_INDEX:
1895 return (TEMPLATE_PARM_IDX (t1) == TEMPLATE_PARM_IDX (t2)
1896 && TEMPLATE_PARM_LEVEL (t1) == TEMPLATE_PARM_LEVEL (t2)
1897 && same_type_p (TREE_TYPE (TEMPLATE_PARM_DECL (t1)),
1898 TREE_TYPE (TEMPLATE_PARM_DECL (t2))));
1900 case TEMPLATE_ID_EXPR:
1905 if (!cp_tree_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0)))
1907 vec1 = TREE_OPERAND (t1, 1);
1908 vec2 = TREE_OPERAND (t2, 1);
1911 return !vec1 && !vec2;
1913 if (TREE_VEC_LENGTH (vec1) != TREE_VEC_LENGTH (vec2))
1916 for (ix = TREE_VEC_LENGTH (vec1); ix--;)
1917 if (!cp_tree_equal (TREE_VEC_ELT (vec1, ix),
1918 TREE_VEC_ELT (vec2, ix)))
1927 tree o1 = TREE_OPERAND (t1, 0);
1928 tree o2 = TREE_OPERAND (t2, 0);
1930 if (TREE_CODE (o1) != TREE_CODE (o2))
1933 return same_type_p (o1, o2);
1935 return cp_tree_equal (o1, o2);
1940 tree t1_op1, t2_op1;
1942 if (!cp_tree_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0)))
1945 t1_op1 = TREE_OPERAND (t1, 1);
1946 t2_op1 = TREE_OPERAND (t2, 1);
1947 if (TREE_CODE (t1_op1) != TREE_CODE (t2_op1))
1950 return cp_tree_equal (TREE_OPERAND (t1, 2), TREE_OPERAND (t2, 2));
1954 /* Two pointer-to-members are the same if they point to the same
1955 field or function in the same class. */
1956 if (PTRMEM_CST_MEMBER (t1) != PTRMEM_CST_MEMBER (t2))
1959 return same_type_p (PTRMEM_CST_CLASS (t1), PTRMEM_CST_CLASS (t2));
1962 if (OVL_FUNCTION (t1) != OVL_FUNCTION (t2))
1964 return cp_tree_equal (OVL_CHAIN (t1), OVL_CHAIN (t2));
1967 if (TRAIT_EXPR_KIND (t1) != TRAIT_EXPR_KIND (t2))
1969 return same_type_p (TRAIT_EXPR_TYPE1 (t1), TRAIT_EXPR_TYPE1 (t2))
1970 && same_type_p (TRAIT_EXPR_TYPE2 (t1), TRAIT_EXPR_TYPE2 (t2));
1976 switch (TREE_CODE_CLASS (code1))
1980 case tcc_comparison:
1981 case tcc_expression:
1988 n = TREE_OPERAND_LENGTH (t1);
1989 if (TREE_CODE_CLASS (code1) == tcc_vl_exp
1990 && n != TREE_OPERAND_LENGTH (t2))
1993 for (i = 0; i < n; ++i)
1994 if (!cp_tree_equal (TREE_OPERAND (t1, i), TREE_OPERAND (t2, i)))
2001 return same_type_p (t1, t2);
2005 /* We can get here with --disable-checking. */
2009 /* The type of ARG when used as an lvalue. */
2012 lvalue_type (tree arg)
2014 tree type = TREE_TYPE (arg);
2018 /* The type of ARG for printing error messages; denote lvalues with
2022 error_type (tree arg)
2024 tree type = TREE_TYPE (arg);
2026 if (TREE_CODE (type) == ARRAY_TYPE)
2028 else if (TREE_CODE (type) == ERROR_MARK)
2030 else if (real_lvalue_p (arg))
2031 type = build_reference_type (lvalue_type (arg));
2032 else if (MAYBE_CLASS_TYPE_P (type))
2033 type = lvalue_type (arg);
2038 /* Does FUNCTION use a variable-length argument list? */
2041 varargs_function_p (const_tree function)
2043 const_tree parm = TYPE_ARG_TYPES (TREE_TYPE (function));
2044 for (; parm; parm = TREE_CHAIN (parm))
2045 if (TREE_VALUE (parm) == void_type_node)
2050 /* Returns 1 if decl is a member of a class. */
2053 member_p (const_tree decl)
2055 const_tree const ctx = DECL_CONTEXT (decl);
2056 return (ctx && TYPE_P (ctx));
2059 /* Create a placeholder for member access where we don't actually have an
2060 object that the access is against. */
2063 build_dummy_object (tree type)
2065 tree decl = build1 (NOP_EXPR, build_pointer_type (type), void_zero_node);
2066 return cp_build_indirect_ref (decl, NULL, tf_warning_or_error);
2069 /* We've gotten a reference to a member of TYPE. Return *this if appropriate,
2070 or a dummy object otherwise. If BINFOP is non-0, it is filled with the
2071 binfo path from current_class_type to TYPE, or 0. */
2074 maybe_dummy_object (tree type, tree* binfop)
2079 if (current_class_type
2080 && (binfo = lookup_base (current_class_type, type,
2081 ba_unique | ba_quiet, NULL)))
2082 context = current_class_type;
2085 /* Reference from a nested class member function. */
2087 binfo = TYPE_BINFO (type);
2093 if (current_class_ref && context == current_class_type
2094 /* Kludge: Make sure that current_class_type is actually
2095 correct. It might not be if we're in the middle of
2096 tsubst_default_argument. */
2097 && same_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (current_class_ref)),
2098 current_class_type))
2099 decl = current_class_ref;
2101 decl = build_dummy_object (context);
2106 /* Returns 1 if OB is a placeholder object, or a pointer to one. */
2109 is_dummy_object (const_tree ob)
2111 if (TREE_CODE (ob) == INDIRECT_REF)
2112 ob = TREE_OPERAND (ob, 0);
2113 return (TREE_CODE (ob) == NOP_EXPR
2114 && TREE_OPERAND (ob, 0) == void_zero_node);
2117 /* Returns 1 iff type T is a POD type, as defined in [basic.types]. */
2120 pod_type_p (const_tree t)
2122 /* This CONST_CAST is okay because strip_array_types returns its
2123 argument unmodified and we assign it to a const_tree. */
2124 t = strip_array_types (CONST_CAST_TREE(t));
2126 if (t == error_mark_node)
2128 if (INTEGRAL_TYPE_P (t))
2129 return 1; /* integral, character or enumeral type */
2130 if (FLOAT_TYPE_P (t))
2133 return 1; /* pointer to non-member */
2134 if (TYPE_PTR_TO_MEMBER_P (t))
2135 return 1; /* pointer to member */
2137 if (TREE_CODE (t) == VECTOR_TYPE)
2138 return 1; /* vectors are (small) arrays of scalars */
2140 if (! RECORD_OR_UNION_CODE_P (TREE_CODE (t)))
2141 return 0; /* other non-class type (reference or function) */
2142 if (! CLASS_TYPE_P (t))
2143 return 1; /* struct created by the back end */
2144 if (CLASSTYPE_NON_POD_P (t))
2149 /* Nonzero iff type T is a class template implicit specialization. */
2152 class_tmpl_impl_spec_p (const_tree t)
2154 return CLASS_TYPE_P (t) && CLASSTYPE_TEMPLATE_INSTANTIATION (t);
2157 /* Returns 1 iff zero initialization of type T means actually storing
2161 zero_init_p (const_tree t)
2163 /* This CONST_CAST is okay because strip_array_types returns its
2164 argument unmodified and we assign it to a const_tree. */
2165 t = strip_array_types (CONST_CAST_TREE(t));
2167 if (t == error_mark_node)
2170 /* NULL pointers to data members are initialized with -1. */
2171 if (TYPE_PTRMEM_P (t))
2174 /* Classes that contain types that can't be zero-initialized, cannot
2175 be zero-initialized themselves. */
2176 if (CLASS_TYPE_P (t) && CLASSTYPE_NON_ZERO_INIT_P (t))
2182 /* Table of valid C++ attributes. */
2183 const struct attribute_spec cxx_attribute_table[] =
2185 /* { name, min_len, max_len, decl_req, type_req, fn_type_req, handler } */
2186 { "java_interface", 0, 0, false, false, false, handle_java_interface_attribute },
2187 { "com_interface", 0, 0, false, false, false, handle_com_interface_attribute },
2188 { "init_priority", 1, 1, true, false, false, handle_init_priority_attribute },
2189 { NULL, 0, 0, false, false, false, NULL }
2192 /* Handle a "java_interface" attribute; arguments as in
2193 struct attribute_spec.handler. */
2195 handle_java_interface_attribute (tree* node,
2197 tree args ATTRIBUTE_UNUSED ,
2202 || !CLASS_TYPE_P (*node)
2203 || !TYPE_FOR_JAVA (*node))
2205 error ("%qE attribute can only be applied to Java class definitions",
2207 *no_add_attrs = true;
2210 if (!(flags & (int) ATTR_FLAG_TYPE_IN_PLACE))
2211 *node = build_variant_type_copy (*node);
2212 TYPE_JAVA_INTERFACE (*node) = 1;
2217 /* Handle a "com_interface" attribute; arguments as in
2218 struct attribute_spec.handler. */
2220 handle_com_interface_attribute (tree* node,
2222 tree args ATTRIBUTE_UNUSED ,
2223 int flags ATTRIBUTE_UNUSED ,
2228 *no_add_attrs = true;
2231 || !CLASS_TYPE_P (*node)
2232 || *node != TYPE_MAIN_VARIANT (*node))
2234 warning (OPT_Wattributes, "%qE attribute can only be applied "
2235 "to class definitions", name);
2240 warning (0, "%qE is obsolete; g++ vtables are now COM-compatible by default",
2246 /* Handle an "init_priority" attribute; arguments as in
2247 struct attribute_spec.handler. */
2249 handle_init_priority_attribute (tree* node,
2252 int flags ATTRIBUTE_UNUSED ,
2255 tree initp_expr = TREE_VALUE (args);
2257 tree type = TREE_TYPE (decl);
2260 STRIP_NOPS (initp_expr);
2262 if (!initp_expr || TREE_CODE (initp_expr) != INTEGER_CST)
2264 error ("requested init_priority is not an integer constant");
2265 *no_add_attrs = true;
2269 pri = TREE_INT_CST_LOW (initp_expr);
2271 type = strip_array_types (type);
2273 if (decl == NULL_TREE
2274 || TREE_CODE (decl) != VAR_DECL
2275 || !TREE_STATIC (decl)
2276 || DECL_EXTERNAL (decl)
2277 || (TREE_CODE (type) != RECORD_TYPE
2278 && TREE_CODE (type) != UNION_TYPE)
2279 /* Static objects in functions are initialized the
2280 first time control passes through that
2281 function. This is not precise enough to pin down an
2282 init_priority value, so don't allow it. */
2283 || current_function_decl)
2285 error ("can only use %qE attribute on file-scope definitions "
2286 "of objects of class type", name);
2287 *no_add_attrs = true;
2291 if (pri > MAX_INIT_PRIORITY || pri <= 0)
2293 error ("requested init_priority is out of range");
2294 *no_add_attrs = true;
2298 /* Check for init_priorities that are reserved for
2299 language and runtime support implementations.*/
2300 if (pri <= MAX_RESERVED_INIT_PRIORITY)
2303 (0, "requested init_priority is reserved for internal use");
2306 if (SUPPORTS_INIT_PRIORITY)
2308 SET_DECL_INIT_PRIORITY (decl, pri);
2309 DECL_HAS_INIT_PRIORITY_P (decl) = 1;
2314 error ("%qE attribute is not supported on this platform", name);
2315 *no_add_attrs = true;
2320 /* Return a new PTRMEM_CST of the indicated TYPE. The MEMBER is the
2321 thing pointed to by the constant. */
2324 make_ptrmem_cst (tree type, tree member)
2326 tree ptrmem_cst = make_node (PTRMEM_CST);
2327 TREE_TYPE (ptrmem_cst) = type;
2328 PTRMEM_CST_MEMBER (ptrmem_cst) = member;
2332 /* Build a variant of TYPE that has the indicated ATTRIBUTES. May
2333 return an existing type if an appropriate type already exists. */
2336 cp_build_type_attribute_variant (tree type, tree attributes)
2340 new_type = build_type_attribute_variant (type, attributes);
2341 if (TREE_CODE (new_type) == FUNCTION_TYPE
2342 && (TYPE_RAISES_EXCEPTIONS (new_type)
2343 != TYPE_RAISES_EXCEPTIONS (type)))
2344 new_type = build_exception_variant (new_type,
2345 TYPE_RAISES_EXCEPTIONS (type));
2347 /* Making a new main variant of a class type is broken. */
2348 gcc_assert (!CLASS_TYPE_P (type) || new_type == type);
2353 /* Return TRUE if TYPE1 and TYPE2 are identical for type hashing purposes.
2354 Called only after doing all language independent checks. Only
2355 to check TYPE_RAISES_EXCEPTIONS for FUNCTION_TYPE, the rest is already
2356 compared in type_hash_eq. */
2359 cxx_type_hash_eq (const_tree typea, const_tree typeb)
2361 gcc_assert (TREE_CODE (typea) == FUNCTION_TYPE);
2363 return comp_except_specs (TYPE_RAISES_EXCEPTIONS (typea),
2364 TYPE_RAISES_EXCEPTIONS (typeb), 1);
2367 /* Apply FUNC to all language-specific sub-trees of TP in a pre-order
2368 traversal. Called from walk_tree. */
2371 cp_walk_subtrees (tree *tp, int *walk_subtrees_p, walk_tree_fn func,
2372 void *data, struct pointer_set_t *pset)
2374 enum tree_code code = TREE_CODE (*tp);
2377 #define WALK_SUBTREE(NODE) \
2380 result = cp_walk_tree (&(NODE), func, data, pset); \
2381 if (result) goto out; \
2385 /* Not one of the easy cases. We must explicitly go through the
2391 case TEMPLATE_TEMPLATE_PARM:
2392 case BOUND_TEMPLATE_TEMPLATE_PARM:
2393 case UNBOUND_CLASS_TEMPLATE:
2394 case TEMPLATE_PARM_INDEX:
2395 case TEMPLATE_TYPE_PARM:
2398 /* None of these have subtrees other than those already walked
2400 *walk_subtrees_p = 0;
2404 WALK_SUBTREE (BASELINK_FUNCTIONS (*tp));
2405 *walk_subtrees_p = 0;
2409 WALK_SUBTREE (TREE_TYPE (*tp));
2410 *walk_subtrees_p = 0;
2414 WALK_SUBTREE (TREE_PURPOSE (*tp));
2418 WALK_SUBTREE (OVL_FUNCTION (*tp));
2419 WALK_SUBTREE (OVL_CHAIN (*tp));
2420 *walk_subtrees_p = 0;
2424 WALK_SUBTREE (DECL_NAME (*tp));
2425 WALK_SUBTREE (USING_DECL_SCOPE (*tp));
2426 WALK_SUBTREE (USING_DECL_DECLS (*tp));
2427 *walk_subtrees_p = 0;
2431 if (TYPE_PTRMEMFUNC_P (*tp))
2432 WALK_SUBTREE (TYPE_PTRMEMFUNC_FN_TYPE (*tp));
2435 case TYPE_ARGUMENT_PACK:
2436 case NONTYPE_ARGUMENT_PACK:
2438 tree args = ARGUMENT_PACK_ARGS (*tp);
2439 int i, len = TREE_VEC_LENGTH (args);
2440 for (i = 0; i < len; i++)
2441 WALK_SUBTREE (TREE_VEC_ELT (args, i));
2445 case TYPE_PACK_EXPANSION:
2446 WALK_SUBTREE (TREE_TYPE (*tp));
2447 *walk_subtrees_p = 0;
2450 case EXPR_PACK_EXPANSION:
2451 WALK_SUBTREE (TREE_OPERAND (*tp, 0));
2452 *walk_subtrees_p = 0;
2456 case REINTERPRET_CAST_EXPR:
2457 case STATIC_CAST_EXPR:
2458 case CONST_CAST_EXPR:
2459 case DYNAMIC_CAST_EXPR:
2460 if (TREE_TYPE (*tp))
2461 WALK_SUBTREE (TREE_TYPE (*tp));
2465 for (i = 0; i < TREE_CODE_LENGTH (TREE_CODE (*tp)); ++i)
2466 WALK_SUBTREE (TREE_OPERAND (*tp, i));
2468 *walk_subtrees_p = 0;
2472 WALK_SUBTREE (TRAIT_EXPR_TYPE1 (*tp));
2473 WALK_SUBTREE (TRAIT_EXPR_TYPE2 (*tp));
2474 *walk_subtrees_p = 0;
2478 WALK_SUBTREE (DECLTYPE_TYPE_EXPR (*tp));
2479 *walk_subtrees_p = 0;
2487 /* We didn't find what we were looking for. */
2494 /* Like save_expr, but for C++. */
2497 cp_save_expr (tree expr)
2499 /* There is no reason to create a SAVE_EXPR within a template; if
2500 needed, we can create the SAVE_EXPR when instantiating the
2501 template. Furthermore, the middle-end cannot handle C++-specific
2503 if (processing_template_decl)
2505 return save_expr (expr);
2508 /* Initialize tree.c. */
2513 list_hash_table = htab_create_ggc (31, list_hash, list_hash_eq, NULL);
2516 /* Returns the kind of special function that DECL (a FUNCTION_DECL)
2517 is. Note that sfk_none is zero, so this function can be used as a
2518 predicate to test whether or not DECL is a special function. */
2520 special_function_kind
2521 special_function_p (const_tree decl)
2523 /* Rather than doing all this stuff with magic names, we should
2524 probably have a field of type `special_function_kind' in
2525 DECL_LANG_SPECIFIC. */
2526 if (DECL_COPY_CONSTRUCTOR_P (decl))
2527 return sfk_copy_constructor;
2528 if (DECL_CONSTRUCTOR_P (decl))
2529 return sfk_constructor;
2530 if (DECL_OVERLOADED_OPERATOR_P (decl) == NOP_EXPR)
2531 return sfk_assignment_operator;
2532 if (DECL_MAYBE_IN_CHARGE_DESTRUCTOR_P (decl))
2533 return sfk_destructor;
2534 if (DECL_COMPLETE_DESTRUCTOR_P (decl))
2535 return sfk_complete_destructor;
2536 if (DECL_BASE_DESTRUCTOR_P (decl))
2537 return sfk_base_destructor;
2538 if (DECL_DELETING_DESTRUCTOR_P (decl))
2539 return sfk_deleting_destructor;
2540 if (DECL_CONV_FN_P (decl))
2541 return sfk_conversion;
2546 /* Returns nonzero if TYPE is a character type, including wchar_t. */
2549 char_type_p (tree type)
2551 return (same_type_p (type, char_type_node)
2552 || same_type_p (type, unsigned_char_type_node)
2553 || same_type_p (type, signed_char_type_node)
2554 || same_type_p (type, char16_type_node)
2555 || same_type_p (type, char32_type_node)
2556 || same_type_p (type, wchar_type_node));
2559 /* Returns the kind of linkage associated with the indicated DECL. Th
2560 value returned is as specified by the language standard; it is
2561 independent of implementation details regarding template
2562 instantiation, etc. For example, it is possible that a declaration
2563 to which this function assigns external linkage would not show up
2564 as a global symbol when you run `nm' on the resulting object file. */
2567 decl_linkage (tree decl)
2569 /* This function doesn't attempt to calculate the linkage from first
2570 principles as given in [basic.link]. Instead, it makes use of
2571 the fact that we have already set TREE_PUBLIC appropriately, and
2572 then handles a few special cases. Ideally, we would calculate
2573 linkage first, and then transform that into a concrete
2576 /* Things that don't have names have no linkage. */
2577 if (!DECL_NAME (decl))
2580 /* Fields have no linkage. */
2581 if (TREE_CODE (decl) == FIELD_DECL)
2584 /* Things that are TREE_PUBLIC have external linkage. */
2585 if (TREE_PUBLIC (decl))
2588 if (TREE_CODE (decl) == NAMESPACE_DECL)
2591 /* Linkage of a CONST_DECL depends on the linkage of the enumeration
2593 if (TREE_CODE (decl) == CONST_DECL)
2594 return decl_linkage (TYPE_NAME (TREE_TYPE (decl)));
2596 /* Some things that are not TREE_PUBLIC have external linkage, too.
2597 For example, on targets that don't have weak symbols, we make all
2598 template instantiations have internal linkage (in the object
2599 file), but the symbols should still be treated as having external
2600 linkage from the point of view of the language. */
2601 if (TREE_CODE (decl) != TYPE_DECL && DECL_LANG_SPECIFIC (decl)
2602 && DECL_COMDAT (decl))
2605 /* Things in local scope do not have linkage, if they don't have
2607 if (decl_function_context (decl))
2610 /* Members of the anonymous namespace also have TREE_PUBLIC unset, but
2611 are considered to have external linkage for language purposes. DECLs
2612 really meant to have internal linkage have DECL_THIS_STATIC set. */
2613 if (TREE_CODE (decl) == TYPE_DECL)
2615 if (TREE_CODE (decl) == VAR_DECL || TREE_CODE (decl) == FUNCTION_DECL)
2617 if (!DECL_THIS_STATIC (decl))
2620 /* Static data members and static member functions from classes
2621 in anonymous namespace also don't have TREE_PUBLIC set. */
2622 if (DECL_CLASS_CONTEXT (decl))
2626 /* Everything else has internal linkage. */
2630 /* EXP is an expression that we want to pre-evaluate. Returns (in
2631 *INITP) an expression that will perform the pre-evaluation. The
2632 value returned by this function is a side-effect free expression
2633 equivalent to the pre-evaluated expression. Callers must ensure
2634 that *INITP is evaluated before EXP. */
2637 stabilize_expr (tree exp, tree* initp)
2641 if (!TREE_SIDE_EFFECTS (exp))
2642 init_expr = NULL_TREE;
2643 else if (!real_lvalue_p (exp)
2644 || !TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (exp)))
2646 init_expr = get_target_expr (exp);
2647 exp = TARGET_EXPR_SLOT (init_expr);
2651 exp = cp_build_unary_op (ADDR_EXPR, exp, 1, tf_warning_or_error);
2652 init_expr = get_target_expr (exp);
2653 exp = TARGET_EXPR_SLOT (init_expr);
2654 exp = cp_build_indirect_ref (exp, 0, tf_warning_or_error);
2658 gcc_assert (!TREE_SIDE_EFFECTS (exp));
2662 /* Add NEW_EXPR, an expression whose value we don't care about, after the
2663 similar expression ORIG. */
2666 add_stmt_to_compound (tree orig, tree new_expr)
2668 if (!new_expr || !TREE_SIDE_EFFECTS (new_expr))
2670 if (!orig || !TREE_SIDE_EFFECTS (orig))
2672 return build2 (COMPOUND_EXPR, void_type_node, orig, new_expr);
2675 /* Like stabilize_expr, but for a call whose arguments we want to
2676 pre-evaluate. CALL is modified in place to use the pre-evaluated
2677 arguments, while, upon return, *INITP contains an expression to
2678 compute the arguments. */
2681 stabilize_call (tree call, tree *initp)
2683 tree inits = NULL_TREE;
2685 int nargs = call_expr_nargs (call);
2687 if (call == error_mark_node || processing_template_decl)
2693 gcc_assert (TREE_CODE (call) == CALL_EXPR);
2695 for (i = 0; i < nargs; i++)
2698 CALL_EXPR_ARG (call, i) =
2699 stabilize_expr (CALL_EXPR_ARG (call, i), &init);
2700 inits = add_stmt_to_compound (inits, init);
2706 /* Like stabilize_expr, but for an AGGR_INIT_EXPR whose arguments we want
2707 to pre-evaluate. CALL is modified in place to use the pre-evaluated
2708 arguments, while, upon return, *INITP contains an expression to
2709 compute the arguments. */
2712 stabilize_aggr_init (tree call, tree *initp)
2714 tree inits = NULL_TREE;
2716 int nargs = aggr_init_expr_nargs (call);
2718 if (call == error_mark_node)
2721 gcc_assert (TREE_CODE (call) == AGGR_INIT_EXPR);
2723 for (i = 0; i < nargs; i++)
2726 AGGR_INIT_EXPR_ARG (call, i) =
2727 stabilize_expr (AGGR_INIT_EXPR_ARG (call, i), &init);
2728 inits = add_stmt_to_compound (inits, init);
2734 /* Like stabilize_expr, but for an initialization.
2736 If the initialization is for an object of class type, this function
2737 takes care not to introduce additional temporaries.
2739 Returns TRUE iff the expression was successfully pre-evaluated,
2740 i.e., if INIT is now side-effect free, except for, possible, a
2741 single call to a constructor. */
2744 stabilize_init (tree init, tree *initp)
2750 if (t == error_mark_node || processing_template_decl)
2753 if (TREE_CODE (t) == INIT_EXPR
2754 && TREE_CODE (TREE_OPERAND (t, 1)) != TARGET_EXPR
2755 && TREE_CODE (TREE_OPERAND (t, 1)) != AGGR_INIT_EXPR)
2757 TREE_OPERAND (t, 1) = stabilize_expr (TREE_OPERAND (t, 1), initp);
2761 if (TREE_CODE (t) == INIT_EXPR)
2762 t = TREE_OPERAND (t, 1);
2763 if (TREE_CODE (t) == TARGET_EXPR)
2764 t = TARGET_EXPR_INITIAL (t);
2765 if (TREE_CODE (t) == COMPOUND_EXPR)
2767 if (TREE_CODE (t) == CONSTRUCTOR
2768 && EMPTY_CONSTRUCTOR_P (t))
2769 /* Default-initialization. */
2772 /* If the initializer is a COND_EXPR, we can't preevaluate
2774 if (TREE_CODE (t) == COND_EXPR)
2777 if (TREE_CODE (t) == CALL_EXPR)
2779 stabilize_call (t, initp);
2783 if (TREE_CODE (t) == AGGR_INIT_EXPR)
2785 stabilize_aggr_init (t, initp);
2789 /* The initialization is being performed via a bitwise copy -- and
2790 the item copied may have side effects. */
2791 return TREE_SIDE_EFFECTS (init);
2794 /* Like "fold", but should be used whenever we might be processing the
2795 body of a template. */
2798 fold_if_not_in_template (tree expr)
2800 /* In the body of a template, there is never any need to call
2801 "fold". We will call fold later when actually instantiating the
2802 template. Integral constant expressions in templates will be
2803 evaluated via fold_non_dependent_expr, as necessary. */
2804 if (processing_template_decl)
2807 /* Fold C++ front-end specific tree codes. */
2808 if (TREE_CODE (expr) == UNARY_PLUS_EXPR)
2809 return fold_convert (TREE_TYPE (expr), TREE_OPERAND (expr, 0));
2814 /* Returns true if a cast to TYPE may appear in an integral constant
2818 cast_valid_in_integral_constant_expression_p (tree type)
2820 return (INTEGRAL_OR_ENUMERATION_TYPE_P (type)
2821 || dependent_type_p (type)
2822 || type == error_mark_node);
2826 #if defined ENABLE_TREE_CHECKING && (GCC_VERSION >= 2007)
2827 /* Complain that some language-specific thing hanging off a tree
2828 node has been accessed improperly. */
2831 lang_check_failed (const char* file, int line, const char* function)
2833 internal_error ("lang_* check: failed in %s, at %s:%d",
2834 function, trim_filename (file), line);
2836 #endif /* ENABLE_TREE_CHECKING */
2838 #include "gt-cp-tree.h"