1 /* Build expressions with type checking for C++ compiler.
2 Copyright (C) 1987, 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
3 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
4 Hacked by Michael Tiemann (tiemann@cygnus.com)
6 This file is part of GCC.
8 GCC is free software; you can redistribute it and/or modify
9 it under the terms of the GNU General Public License as published by
10 the Free Software Foundation; either version 2, or (at your option)
13 GCC is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 GNU General Public License for more details.
18 You should have received a copy of the GNU General Public License
19 along with GCC; see the file COPYING. If not, write to
20 the Free Software Foundation, 59 Temple Place - Suite 330,
21 Boston, MA 02111-1307, USA. */
24 /* This file is part of the C++ front end.
25 It contains routines to build C++ expressions given their operands,
26 including computing the types of the result, C and C++ specific error
27 checks, and some optimization.
29 There are also routines to build RETURN_STMT nodes and CASE_STMT nodes,
30 and to process initializations in declarations (since they work
31 like a strange sort of assignment). */
35 #include "coretypes.h"
45 #include "diagnostic.h"
48 static tree convert_for_assignment PARAMS ((tree, tree, const char *, tree,
50 static tree cp_pointer_int_sum PARAMS ((enum tree_code, tree, tree));
51 static tree rationalize_conditional_expr PARAMS ((enum tree_code, tree));
52 static int comp_target_parms PARAMS ((tree, tree));
53 static int comp_ptr_ttypes_real PARAMS ((tree, tree, int));
54 static int comp_ptr_ttypes_const PARAMS ((tree, tree));
55 static int comp_ptr_ttypes_reinterpret PARAMS ((tree, tree));
56 static int comp_except_types PARAMS ((tree, tree, int));
57 static int comp_array_types PARAMS ((int (*) (tree, tree, int), tree,
59 static tree common_base_type PARAMS ((tree, tree));
60 static tree lookup_anon_field PARAMS ((tree, tree));
61 static tree pointer_diff PARAMS ((tree, tree, tree));
62 static tree qualify_type_recursive PARAMS ((tree, tree));
63 static tree get_delta_difference PARAMS ((tree, tree, int));
64 static int comp_cv_target_types PARAMS ((tree, tree, int));
65 static void casts_away_constness_r PARAMS ((tree *, tree *));
66 static int casts_away_constness PARAMS ((tree, tree));
67 static void maybe_warn_about_returning_address_of_local PARAMS ((tree));
68 static tree strip_all_pointer_quals PARAMS ((tree));
69 static tree lookup_destructor (tree, tree, tree);
71 /* Return the target type of TYPE, which means return T for:
72 T*, T&, T[], T (...), and otherwise, just T. */
78 if (TREE_CODE (type) == REFERENCE_TYPE)
79 type = TREE_TYPE (type);
80 while (TREE_CODE (type) == POINTER_TYPE
81 || TREE_CODE (type) == ARRAY_TYPE
82 || TREE_CODE (type) == FUNCTION_TYPE
83 || TREE_CODE (type) == METHOD_TYPE
84 || TREE_CODE (type) == OFFSET_TYPE)
85 type = TREE_TYPE (type);
89 /* Do `exp = require_complete_type (exp);' to make sure exp
90 does not have an incomplete type. (That includes void types.)
91 Returns the error_mark_node if the VALUE does not have
92 complete type when this function returns. */
95 require_complete_type (value)
100 if (processing_template_decl || value == error_mark_node)
103 if (TREE_CODE (value) == OVERLOAD)
104 type = unknown_type_node;
106 type = TREE_TYPE (value);
108 /* First, detect a valid value with a complete type. */
109 if (COMPLETE_TYPE_P (type))
112 /* If we see X::Y, we build an OFFSET_TYPE which has
113 not been laid out. Try to avoid an error by interpreting
114 it as this->X::Y, if reasonable. */
115 if (TREE_CODE (value) == OFFSET_REF
116 && current_class_ref != 0
117 && TREE_OPERAND (value, 0) == current_class_ref)
119 value = resolve_offset_ref (value);
120 return require_complete_type (value);
123 if (complete_type_or_else (type, value))
126 return error_mark_node;
129 /* Try to complete TYPE, if it is incomplete. For example, if TYPE is
130 a template instantiation, do the instantiation. Returns TYPE,
131 whether or not it could be completed, unless something goes
132 horribly wrong, in which case the error_mark_node is returned. */
138 if (type == NULL_TREE)
139 /* Rather than crash, we return something sure to cause an error
141 return error_mark_node;
143 if (type == error_mark_node || COMPLETE_TYPE_P (type))
145 else if (TREE_CODE (type) == ARRAY_TYPE && TYPE_DOMAIN (type))
147 tree t = complete_type (TREE_TYPE (type));
148 if (COMPLETE_TYPE_P (t) && ! processing_template_decl)
150 TYPE_NEEDS_CONSTRUCTING (type)
151 = TYPE_NEEDS_CONSTRUCTING (TYPE_MAIN_VARIANT (t));
152 TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type)
153 = TYPE_HAS_NONTRIVIAL_DESTRUCTOR (TYPE_MAIN_VARIANT (t));
155 else if (CLASS_TYPE_P (type) && CLASSTYPE_TEMPLATE_INSTANTIATION (type))
156 instantiate_class_template (TYPE_MAIN_VARIANT (type));
161 /* Like complete_type, but issue an error if the TYPE cannot be completed.
162 VALUE is used for informative diagnostics. DIAG_TYPE indicates the type
163 of diagnostic: 0 for an error, 1 for a warning, 2 for a pedwarn.
164 Returns NULL_TREE if the type cannot be made complete. */
167 complete_type_or_diagnostic (type, value, diag_type)
172 type = complete_type (type);
173 if (type == error_mark_node)
174 /* We already issued an error. */
176 else if (!COMPLETE_TYPE_P (type))
178 cxx_incomplete_type_diagnostic (value, type, diag_type);
185 /* Return truthvalue of whether type of EXP is instantiated. */
191 return (TREE_CODE (exp) == OVERLOAD
192 || TREE_CODE (exp) == TREE_LIST
193 || TREE_TYPE (exp) == unknown_type_node
194 || (TREE_CODE (TREE_TYPE (exp)) == OFFSET_TYPE
195 && TREE_TYPE (TREE_TYPE (exp)) == unknown_type_node));
198 /* Return a pointer or pointer to member type similar to T1, with a
199 cv-qualification signature that is the union of the cv-qualification
200 signatures of T1 and T2: [expr.rel], [expr.eq]. */
203 qualify_type_recursive (t1, t2)
206 if ((TYPE_PTR_P (t1) && TYPE_PTR_P (t2))
207 || (TYPE_PTRMEM_P (t1) && TYPE_PTRMEM_P (t2)))
214 tree attributes = (*targetm.merge_type_attributes) (t1, t2);
216 if (TYPE_PTRMEM_P (t1))
218 b1 = TYPE_PTRMEM_CLASS_TYPE (t1);
219 tt1 = TYPE_PTRMEM_POINTED_TO_TYPE (t1);
220 tt2 = TYPE_PTRMEM_POINTED_TO_TYPE (t2);
225 tt1 = TREE_TYPE (t1);
226 tt2 = TREE_TYPE (t2);
229 type_quals = (cp_type_quals (tt1) | cp_type_quals (tt2));
230 tgt = qualify_type_recursive (tt1, tt2);
231 tgt = cp_build_qualified_type (tgt, type_quals);
233 t1 = build_ptrmem_type (b1, tgt);
235 t1 = build_pointer_type (tgt);
236 t1 = build_type_attribute_variant (t1, attributes);
241 /* Return the common type of two parameter lists.
242 We assume that comptypes has already been done and returned 1;
243 if that isn't so, this may crash.
245 As an optimization, free the space we allocate if the parameter
246 lists are already common. */
252 tree oldargs = p1, newargs, n;
256 len = list_length (p1);
257 newargs = tree_last (p1);
259 if (newargs == void_list_node)
268 newargs = tree_cons (NULL_TREE, NULL_TREE, newargs);
273 p1 = TREE_CHAIN (p1), p2 = TREE_CHAIN (p2), n = TREE_CHAIN (n), i++)
275 if (TREE_PURPOSE (p1) && !TREE_PURPOSE (p2))
277 TREE_PURPOSE (n) = TREE_PURPOSE (p1);
280 else if (! TREE_PURPOSE (p1))
282 if (TREE_PURPOSE (p2))
284 TREE_PURPOSE (n) = TREE_PURPOSE (p2);
290 if (1 != simple_cst_equal (TREE_PURPOSE (p1), TREE_PURPOSE (p2)))
292 TREE_PURPOSE (n) = TREE_PURPOSE (p2);
294 if (TREE_VALUE (p1) != TREE_VALUE (p2))
297 TREE_VALUE (n) = merge_types (TREE_VALUE (p1), TREE_VALUE (p2));
300 TREE_VALUE (n) = TREE_VALUE (p1);
308 /* Given a type, perhaps copied for a typedef,
309 find the "original" version of it. */
314 while (TYPE_NAME (t) != NULL_TREE)
316 tree x = TYPE_NAME (t);
317 if (TREE_CODE (x) != TYPE_DECL)
319 x = DECL_ORIGINAL_TYPE (x);
327 /* T1 and T2 are arithmetic or enumeration types. Return the type
328 that will result from the "usual arithmetic conversions" on T1 and
329 T2 as described in [expr]. */
332 type_after_usual_arithmetic_conversions (t1, t2)
336 enum tree_code code1 = TREE_CODE (t1);
337 enum tree_code code2 = TREE_CODE (t2);
340 /* FIXME: Attributes. */
341 my_friendly_assert (ARITHMETIC_TYPE_P (t1)
342 || TREE_CODE (t1) == COMPLEX_TYPE
343 || TREE_CODE (t1) == ENUMERAL_TYPE,
345 my_friendly_assert (ARITHMETIC_TYPE_P (t2)
346 || TREE_CODE (t2) == COMPLEX_TYPE
347 || TREE_CODE (t2) == ENUMERAL_TYPE,
350 /* In what follows, we slightly generalize the rules given in [expr] so
351 as to deal with `long long' and `complex'. First, merge the
353 attributes = (*targetm.merge_type_attributes) (t1, t2);
355 /* If one type is complex, form the common type of the non-complex
356 components, then make that complex. Use T1 or T2 if it is the
358 if (code1 == COMPLEX_TYPE || code2 == COMPLEX_TYPE)
360 tree subtype1 = code1 == COMPLEX_TYPE ? TREE_TYPE (t1) : t1;
361 tree subtype2 = code2 == COMPLEX_TYPE ? TREE_TYPE (t2) : t2;
363 = type_after_usual_arithmetic_conversions (subtype1, subtype2);
365 if (code1 == COMPLEX_TYPE && TREE_TYPE (t1) == subtype)
366 return build_type_attribute_variant (t1, attributes);
367 else if (code2 == COMPLEX_TYPE && TREE_TYPE (t2) == subtype)
368 return build_type_attribute_variant (t2, attributes);
370 return build_type_attribute_variant (build_complex_type (subtype),
374 /* If only one is real, use it as the result. */
375 if (code1 == REAL_TYPE && code2 != REAL_TYPE)
376 return build_type_attribute_variant (t1, attributes);
377 if (code2 == REAL_TYPE && code1 != REAL_TYPE)
378 return build_type_attribute_variant (t2, attributes);
380 /* Perform the integral promotions. */
381 if (code1 != REAL_TYPE)
383 t1 = type_promotes_to (t1);
384 t2 = type_promotes_to (t2);
387 /* Both real or both integers; use the one with greater precision. */
388 if (TYPE_PRECISION (t1) > TYPE_PRECISION (t2))
389 return build_type_attribute_variant (t1, attributes);
390 else if (TYPE_PRECISION (t2) > TYPE_PRECISION (t1))
391 return build_type_attribute_variant (t2, attributes);
393 /* The types are the same; no need to do anything fancy. */
394 if (TYPE_MAIN_VARIANT (t1) == TYPE_MAIN_VARIANT (t2))
395 return build_type_attribute_variant (t1, attributes);
397 if (code1 != REAL_TYPE)
399 /* If one is a sizetype, use it so size_binop doesn't blow up. */
400 if (TYPE_IS_SIZETYPE (t1) > TYPE_IS_SIZETYPE (t2))
401 return build_type_attribute_variant (t1, attributes);
402 if (TYPE_IS_SIZETYPE (t2) > TYPE_IS_SIZETYPE (t1))
403 return build_type_attribute_variant (t2, attributes);
405 /* If one is unsigned long long, then convert the other to unsigned
407 if (same_type_p (TYPE_MAIN_VARIANT (t1), long_long_unsigned_type_node)
408 || same_type_p (TYPE_MAIN_VARIANT (t2), long_long_unsigned_type_node))
409 return build_type_attribute_variant (long_long_unsigned_type_node,
411 /* If one is a long long, and the other is an unsigned long, and
412 long long can represent all the values of an unsigned long, then
413 convert to a long long. Otherwise, convert to an unsigned long
414 long. Otherwise, if either operand is long long, convert the
417 Since we're here, we know the TYPE_PRECISION is the same;
418 therefore converting to long long cannot represent all the values
419 of an unsigned long, so we choose unsigned long long in that
421 if (same_type_p (TYPE_MAIN_VARIANT (t1), long_long_integer_type_node)
422 || same_type_p (TYPE_MAIN_VARIANT (t2), long_long_integer_type_node))
424 tree t = ((TREE_UNSIGNED (t1) || TREE_UNSIGNED (t2))
425 ? long_long_unsigned_type_node
426 : long_long_integer_type_node);
427 return build_type_attribute_variant (t, attributes);
430 /* Go through the same procedure, but for longs. */
431 if (same_type_p (TYPE_MAIN_VARIANT (t1), long_unsigned_type_node)
432 || same_type_p (TYPE_MAIN_VARIANT (t2), long_unsigned_type_node))
433 return build_type_attribute_variant (long_unsigned_type_node,
435 if (same_type_p (TYPE_MAIN_VARIANT (t1), long_integer_type_node)
436 || same_type_p (TYPE_MAIN_VARIANT (t2), long_integer_type_node))
438 tree t = ((TREE_UNSIGNED (t1) || TREE_UNSIGNED (t2))
439 ? long_unsigned_type_node : long_integer_type_node);
440 return build_type_attribute_variant (t, attributes);
442 /* Otherwise prefer the unsigned one. */
443 if (TREE_UNSIGNED (t1))
444 return build_type_attribute_variant (t1, attributes);
446 return build_type_attribute_variant (t2, attributes);
450 if (same_type_p (TYPE_MAIN_VARIANT (t1), long_double_type_node)
451 || same_type_p (TYPE_MAIN_VARIANT (t2), long_double_type_node))
452 return build_type_attribute_variant (long_double_type_node,
454 if (same_type_p (TYPE_MAIN_VARIANT (t1), double_type_node)
455 || same_type_p (TYPE_MAIN_VARIANT (t2), double_type_node))
456 return build_type_attribute_variant (double_type_node,
458 if (same_type_p (TYPE_MAIN_VARIANT (t1), float_type_node)
459 || same_type_p (TYPE_MAIN_VARIANT (t2), float_type_node))
460 return build_type_attribute_variant (float_type_node,
463 /* Two floating-point types whose TYPE_MAIN_VARIANTs are none of
464 the standard C++ floating-point types. Logic earlier in this
465 function has already eliminated the possibility that
466 TYPE_PRECISION (t2) != TYPE_PRECISION (t1), so there's no
467 compelling reason to choose one or the other. */
468 return build_type_attribute_variant (t1, attributes);
472 /* Return the composite pointer type (see [expr.rel]) for T1 and T2.
473 ARG1 and ARG2 are the values with those types. The LOCATION is a
474 string describing the current location, in case an error occurs. */
477 composite_pointer_type (t1, t2, arg1, arg2, location)
482 const char* location;
489 If one operand is a null pointer constant, the composite pointer
490 type is the type of the other operand. */
491 if (null_ptr_cst_p (arg1))
493 if (null_ptr_cst_p (arg2))
496 /* Deal with pointer-to-member functions in the same way as we deal
497 with pointers to functions. */
498 if (TYPE_PTRMEMFUNC_P (t1))
499 t1 = TYPE_PTRMEMFUNC_FN_TYPE (t1);
500 if (TYPE_PTRMEMFUNC_P (t2))
501 t2 = TYPE_PTRMEMFUNC_FN_TYPE (t2);
503 /* Merge the attributes. */
504 attributes = (*targetm.merge_type_attributes) (t1, t2);
510 If one of the operands has type "pointer to cv1 void*", then
511 the other has type "pointer to cv2T", and the composite pointer
512 type is "pointer to cv12 void", where cv12 is the union of cv1
515 If either type is a pointer to void, make sure it is T1. */
516 if (VOID_TYPE_P (TREE_TYPE (t2)))
523 /* Now, if T1 is a pointer to void, merge the qualifiers. */
524 if (VOID_TYPE_P (TREE_TYPE (t1)))
526 if (pedantic && TYPE_PTRFN_P (t2))
527 pedwarn ("ISO C++ forbids %s between pointer of type `void *' and pointer-to-function", location);
530 result_type = cp_build_qualified_type (void_type_node,
532 | cp_type_quals (t2)));
533 result_type = build_pointer_type (result_type);
537 tree full1 = qualify_type_recursive (t1, t2);
538 tree full2 = qualify_type_recursive (t2, t1);
540 int val = comp_target_types (full1, full2, 1);
548 pedwarn ("%s between distinct pointer types `%T' and `%T' lacks a cast",
550 result_type = ptr_type_node;
554 return build_type_attribute_variant (result_type, attributes);
557 /* Return the merged type of two types.
558 We assume that comptypes has already been done and returned 1;
559 if that isn't so, this may crash.
561 This just combines attributes and default arguments; any other
562 differences would cause the two types to compare unalike. */
568 register enum tree_code code1;
569 register enum tree_code code2;
572 /* Save time if the two types are the same. */
575 if (original_type (t1) == original_type (t2))
578 /* If one type is nonsense, use the other. */
579 if (t1 == error_mark_node)
581 if (t2 == error_mark_node)
584 /* Merge the attributes. */
585 attributes = (*targetm.merge_type_attributes) (t1, t2);
587 /* Treat an enum type as the unsigned integer type of the same width. */
589 if (TYPE_PTRMEMFUNC_P (t1))
590 t1 = TYPE_PTRMEMFUNC_FN_TYPE (t1);
591 if (TYPE_PTRMEMFUNC_P (t2))
592 t2 = TYPE_PTRMEMFUNC_FN_TYPE (t2);
594 code1 = TREE_CODE (t1);
595 code2 = TREE_CODE (t2);
601 /* For two pointers, do this recursively on the target type. */
603 tree target = merge_types (TREE_TYPE (t1), TREE_TYPE (t2));
604 int quals = cp_type_quals (t1);
606 if (code1 == POINTER_TYPE)
607 t1 = build_pointer_type (target);
609 t1 = build_reference_type (target);
610 t1 = build_type_attribute_variant (t1, attributes);
611 t1 = cp_build_qualified_type (t1, quals);
613 if (TREE_CODE (target) == METHOD_TYPE)
614 t1 = build_ptrmemfunc_type (t1);
621 tree base = TYPE_OFFSET_BASETYPE (t1);
622 tree target = merge_types (TREE_TYPE (t1), TREE_TYPE (t2));
623 t1 = build_offset_type (base, target);
629 tree elt = merge_types (TREE_TYPE (t1), TREE_TYPE (t2));
630 /* Save space: see if the result is identical to one of the args. */
631 if (elt == TREE_TYPE (t1) && TYPE_DOMAIN (t1))
632 return build_type_attribute_variant (t1, attributes);
633 if (elt == TREE_TYPE (t2) && TYPE_DOMAIN (t2))
634 return build_type_attribute_variant (t2, attributes);
635 /* Merge the element types, and have a size if either arg has one. */
636 t1 = build_cplus_array_type
637 (elt, TYPE_DOMAIN (TYPE_DOMAIN (t1) ? t1 : t2));
642 /* Function types: prefer the one that specified arg types.
643 If both do, merge the arg types. Also merge the return types. */
645 tree valtype = merge_types (TREE_TYPE (t1), TREE_TYPE (t2));
646 tree p1 = TYPE_ARG_TYPES (t1);
647 tree p2 = TYPE_ARG_TYPES (t2);
650 /* Save space: see if the result is identical to one of the args. */
651 if (valtype == TREE_TYPE (t1) && ! p2)
652 return build_type_attribute_variant (t1, attributes);
653 if (valtype == TREE_TYPE (t2) && ! p1)
654 return build_type_attribute_variant (t2, attributes);
656 /* Simple way if one arg fails to specify argument types. */
657 if (p1 == NULL_TREE || TREE_VALUE (p1) == void_type_node)
659 rval = build_function_type (valtype, p2);
660 if ((raises = TYPE_RAISES_EXCEPTIONS (t2)))
661 rval = build_exception_variant (rval, raises);
662 return build_type_attribute_variant (rval, attributes);
664 raises = TYPE_RAISES_EXCEPTIONS (t1);
665 if (p2 == NULL_TREE || TREE_VALUE (p2) == void_type_node)
667 rval = build_function_type (valtype, p1);
669 rval = build_exception_variant (rval, raises);
670 return build_type_attribute_variant (rval, attributes);
673 rval = build_function_type (valtype, commonparms (p1, p2));
674 t1 = build_exception_variant (rval, raises);
680 /* Get this value the long way, since TYPE_METHOD_BASETYPE
681 is just the main variant of this. */
682 tree basetype = TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (t2)));
683 tree raises = TYPE_RAISES_EXCEPTIONS (t1);
686 /* If this was a member function type, get back to the
687 original type of type member function (i.e., without
688 the class instance variable up front. */
689 t1 = build_function_type (TREE_TYPE (t1),
690 TREE_CHAIN (TYPE_ARG_TYPES (t1)));
691 t2 = build_function_type (TREE_TYPE (t2),
692 TREE_CHAIN (TYPE_ARG_TYPES (t2)));
693 t3 = merge_types (t1, t2);
694 t3 = build_cplus_method_type (basetype, TREE_TYPE (t3),
695 TYPE_ARG_TYPES (t3));
696 t1 = build_exception_variant (t3, raises);
702 return build_type_attribute_variant (t1, attributes);
705 /* Return the common type of two types.
706 We assume that comptypes has already been done and returned 1;
707 if that isn't so, this may crash.
709 This is the type for the result of most arithmetic operations
710 if the operands have the given two types. */
716 enum tree_code code1;
717 enum tree_code code2;
719 /* If one type is nonsense, bail. */
720 if (t1 == error_mark_node || t2 == error_mark_node)
721 return error_mark_node;
723 code1 = TREE_CODE (t1);
724 code2 = TREE_CODE (t2);
726 if ((ARITHMETIC_TYPE_P (t1) || code1 == ENUMERAL_TYPE
727 || code1 == COMPLEX_TYPE)
728 && (ARITHMETIC_TYPE_P (t2) || code2 == ENUMERAL_TYPE
729 || code2 == COMPLEX_TYPE))
730 return type_after_usual_arithmetic_conversions (t1, t2);
732 else if ((TYPE_PTR_P (t1) && TYPE_PTR_P (t2))
733 || (TYPE_PTRMEM_P (t1) && TYPE_PTRMEM_P (t2))
734 || (TYPE_PTRMEMFUNC_P (t1) && TYPE_PTRMEMFUNC_P (t2)))
735 return composite_pointer_type (t1, t2, error_mark_node, error_mark_node,
742 /* Compare two exception specifier types for exactness or subsetness, if
743 allowed. Returns 0 for mismatch, 1 for same, 2 if B is allowed by A.
745 [except.spec] "If a class X ... objects of class X or any class publicly
746 and unambigously derrived from X. Similarly, if a pointer type Y * ...
747 exceptions of type Y * or that are pointers to any type publicly and
748 unambigously derrived from Y. Otherwise a function only allows exceptions
749 that have the same type ..."
750 This does not mention cv qualifiers and is different to what throw
751 [except.throw] and catch [except.catch] will do. They will ignore the
752 top level cv qualifiers, and allow qualifiers in the pointer to class
755 We implement the letter of the standard. */
758 comp_except_types (a, b, exact)
762 if (same_type_p (a, b))
766 if (cp_type_quals (a) || cp_type_quals (b))
769 if (TREE_CODE (a) == POINTER_TYPE
770 && TREE_CODE (b) == POINTER_TYPE)
774 if (cp_type_quals (a) || cp_type_quals (b))
778 if (TREE_CODE (a) != RECORD_TYPE
779 || TREE_CODE (b) != RECORD_TYPE)
782 if (ACCESSIBLY_UNIQUELY_DERIVED_P (a, b))
788 /* Return 1 if TYPE1 and TYPE2 are equivalent exception specifiers.
789 If EXACT is 0, T2 can be stricter than T1 (according to 15.4/7),
790 otherwise it must be exact. Exception lists are unordered, but
791 we've already filtered out duplicates. Most lists will be in order,
792 we should try to make use of that. */
795 comp_except_specs (t1, t2, exact)
806 if (t1 == NULL_TREE) /* T1 is ... */
807 return t2 == NULL_TREE || !exact;
808 if (!TREE_VALUE (t1)) /* t1 is EMPTY */
809 return t2 != NULL_TREE && !TREE_VALUE (t2);
810 if (t2 == NULL_TREE) /* T2 is ... */
812 if (TREE_VALUE (t1) && !TREE_VALUE (t2)) /* T2 is EMPTY, T1 is not */
815 /* Neither set is ... or EMPTY, make sure each part of T2 is in T1.
816 Count how many we find, to determine exactness. For exact matching and
817 ordered T1, T2, this is an O(n) operation, otherwise its worst case is
819 for (base = t1; t2 != NULL_TREE; t2 = TREE_CHAIN (t2))
821 for (probe = base; probe != NULL_TREE; probe = TREE_CHAIN (probe))
823 tree a = TREE_VALUE (probe);
824 tree b = TREE_VALUE (t2);
826 if (comp_except_types (a, b, exact))
828 if (probe == base && exact)
829 base = TREE_CHAIN (probe);
834 if (probe == NULL_TREE)
837 return !exact || base == NULL_TREE || length == list_length (t1);
840 /* Compare the array types T1 and T2, using CMP as the type comparison
841 function for the element types. STRICT is as for comptypes. */
844 comp_array_types (cmp, t1, t2, strict)
845 register int (*cmp) PARAMS ((tree, tree, int));
855 /* The type of the array elements must be the same. */
856 if (!(TREE_TYPE (t1) == TREE_TYPE (t2)
857 || (*cmp) (TREE_TYPE (t1), TREE_TYPE (t2),
858 strict & ~COMPARE_REDECLARATION)))
861 d1 = TYPE_DOMAIN (t1);
862 d2 = TYPE_DOMAIN (t2);
867 /* If one of the arrays is dimensionless, and the other has a
868 dimension, they are of different types. However, it is valid to
876 declarations for an array object can specify
877 array types that differ by the presence or absence of a major
878 array bound (_dcl.array_). */
880 return strict & COMPARE_REDECLARATION;
882 /* Check that the dimensions are the same. */
883 return (cp_tree_equal (TYPE_MIN_VALUE (d1),
885 && cp_tree_equal (TYPE_MAX_VALUE (d1),
886 TYPE_MAX_VALUE (d2)));
889 /* Return 1 if T1 and T2 are compatible types for assignment or
890 various other operations. STRICT is a bitwise-or of the COMPARE_*
894 comptypes (t1, t2, strict)
900 int orig_strict = strict;
902 /* The special exemption for redeclaring array types without an
903 array bound only applies at the top level:
908 is invalid, for example. */
909 strict &= ~COMPARE_REDECLARATION;
911 /* Suppress errors caused by previously reported errors */
915 /* This should never happen. */
916 my_friendly_assert (t1 != error_mark_node, 307);
918 if (t2 == error_mark_node)
921 /* If either type is the internal version of sizetype, return the
923 if (TREE_CODE (t1) == INTEGER_TYPE && TYPE_IS_SIZETYPE (t1)
924 && TYPE_DOMAIN (t1) != 0)
925 t1 = TYPE_DOMAIN (t1);
927 if (TREE_CODE (t2) == INTEGER_TYPE && TYPE_IS_SIZETYPE (t2)
928 && TYPE_DOMAIN (t2) != 0)
929 t2 = TYPE_DOMAIN (t2);
931 if (strict & COMPARE_RELAXED)
933 /* Treat an enum type as the unsigned integer type of the same width. */
935 if (TREE_CODE (t1) == ENUMERAL_TYPE)
936 t1 = c_common_type_for_size (TYPE_PRECISION (t1), 1);
937 if (TREE_CODE (t2) == ENUMERAL_TYPE)
938 t2 = c_common_type_for_size (TYPE_PRECISION (t2), 1);
944 if (TYPE_PTRMEMFUNC_P (t1))
945 t1 = TYPE_PTRMEMFUNC_FN_TYPE (t1);
946 if (TYPE_PTRMEMFUNC_P (t2))
947 t2 = TYPE_PTRMEMFUNC_FN_TYPE (t2);
949 /* TYPENAME_TYPEs should be resolved if the qualifying scope is the
950 current instantiation. */
951 if (TREE_CODE (t1) == TYPENAME_TYPE)
952 t1 = resolve_typename_type_in_current_instantiation (t1);
953 if (TREE_CODE (t2) == TYPENAME_TYPE)
954 t2 = resolve_typename_type_in_current_instantiation (t2);
956 /* Different classes of types can't be compatible. */
957 if (TREE_CODE (t1) != TREE_CODE (t2))
960 /* Qualifiers must match. */
961 if (cp_type_quals (t1) != cp_type_quals (t2))
963 if (strict == COMPARE_STRICT
964 && TYPE_FOR_JAVA (t1) != TYPE_FOR_JAVA (t2))
967 /* Allow for two different type nodes which have essentially the same
968 definition. Note that we already checked for equality of the type
969 qualifiers (just above). */
971 if (TYPE_MAIN_VARIANT (t1) == TYPE_MAIN_VARIANT (t2))
974 /* 1 if no need for warning yet, 2 if warning cause has been seen. */
975 if (! (attrval = (*targetm.comp_type_attributes) (t1, t2)))
978 /* 1 if no need for warning yet, 2 if warning cause has been seen. */
981 switch (TREE_CODE (t1))
983 case TEMPLATE_TEMPLATE_PARM:
984 case BOUND_TEMPLATE_TEMPLATE_PARM:
985 if (TEMPLATE_TYPE_IDX (t1) != TEMPLATE_TYPE_IDX (t2)
986 || TEMPLATE_TYPE_LEVEL (t1) != TEMPLATE_TYPE_LEVEL (t2))
988 if (! comp_template_parms
989 (DECL_TEMPLATE_PARMS (TEMPLATE_TEMPLATE_PARM_TEMPLATE_DECL (t1)),
990 DECL_TEMPLATE_PARMS (TEMPLATE_TEMPLATE_PARM_TEMPLATE_DECL (t2))))
992 if (TREE_CODE (t1) == TEMPLATE_TEMPLATE_PARM)
994 /* Don't check inheritance. */
995 strict = COMPARE_STRICT;
1000 if (TYPE_TEMPLATE_INFO (t1) && TYPE_TEMPLATE_INFO (t2)
1001 && (TYPE_TI_TEMPLATE (t1) == TYPE_TI_TEMPLATE (t2)
1002 || TREE_CODE (t1) == BOUND_TEMPLATE_TEMPLATE_PARM))
1003 val = comp_template_args (TYPE_TI_ARGS (t1),
1006 if ((strict & COMPARE_BASE) && DERIVED_FROM_P (t1, t2))
1008 else if ((strict & COMPARE_RELAXED) && DERIVED_FROM_P (t2, t1))
1013 val = (comptypes (build_pointer_type (TYPE_OFFSET_BASETYPE (t1)),
1014 build_pointer_type (TYPE_OFFSET_BASETYPE (t2)), strict)
1015 && comptypes (TREE_TYPE (t1), TREE_TYPE (t2), strict));
1019 case REFERENCE_TYPE:
1020 t1 = TREE_TYPE (t1);
1021 t2 = TREE_TYPE (t2);
1022 /* first, check whether the referred types match with the
1023 required level of strictness */
1024 val = comptypes (t1, t2, strict);
1027 if (TREE_CODE (t1) == RECORD_TYPE
1028 && TREE_CODE (t2) == RECORD_TYPE)
1034 val = ((TREE_TYPE (t1) == TREE_TYPE (t2)
1035 || comptypes (TREE_TYPE (t1), TREE_TYPE (t2), strict))
1036 && compparms (TYPE_ARG_TYPES (t1), TYPE_ARG_TYPES (t2)));
1040 /* Target types must match incl. qualifiers. We use ORIG_STRICT
1041 here since this is the one place where
1042 COMPARE_REDECLARATION should be used. */
1043 val = comp_array_types (comptypes, t1, t2, orig_strict);
1046 case TEMPLATE_TYPE_PARM:
1047 return TEMPLATE_TYPE_IDX (t1) == TEMPLATE_TYPE_IDX (t2)
1048 && TEMPLATE_TYPE_LEVEL (t1) == TEMPLATE_TYPE_LEVEL (t2);
1051 if (cp_tree_equal (TYPENAME_TYPE_FULLNAME (t1),
1052 TYPENAME_TYPE_FULLNAME (t2)) < 1)
1054 return same_type_p (TYPE_CONTEXT (t1), TYPE_CONTEXT (t2));
1056 case UNBOUND_CLASS_TEMPLATE:
1057 if (cp_tree_equal (TYPE_IDENTIFIER (t1),
1058 TYPE_IDENTIFIER (t2)) < 1)
1060 return same_type_p (TYPE_CONTEXT (t1), TYPE_CONTEXT (t2));
1063 return same_type_p (TREE_TYPE (t1), TREE_TYPE (t2));
1068 return attrval == 2 && val == 1 ? 2 : val;
1071 /* Subroutine of comp_target-types. Make sure that the cv-quals change
1072 only in the same direction as the target type. */
1075 comp_cv_target_types (ttl, ttr, nptrs)
1081 if (!at_least_as_qualified_p (ttl, ttr)
1082 && !at_least_as_qualified_p (ttr, ttl))
1083 /* The qualifications are incomparable. */
1086 if (TYPE_MAIN_VARIANT (ttl) == TYPE_MAIN_VARIANT (ttr))
1087 return more_qualified_p (ttr, ttl) ? -1 : 1;
1089 t = comp_target_types (ttl, ttr, nptrs);
1090 if ((t == 1 && at_least_as_qualified_p (ttl, ttr))
1091 || (t == -1 && at_least_as_qualified_p (ttr, ttl)))
1097 /* Return 1 or -1 if TTL and TTR are pointers to types that are equivalent,
1098 ignoring their qualifiers, 0 if not. Return 1 means that TTR can be
1099 converted to TTL. Return -1 means that TTL can be converted to TTR but
1102 NPTRS is the number of pointers we can strip off and keep cool.
1103 This is used to permit (for aggr A, aggr B) A, B* to convert to A*,
1104 but to not permit B** to convert to A**.
1106 This should go away. Callers should use can_convert or something
1107 similar instead. (jason 17 Apr 1997) */
1110 comp_target_types (ttl, ttr, nptrs)
1114 ttl = TYPE_MAIN_VARIANT (ttl);
1115 ttr = TYPE_MAIN_VARIANT (ttr);
1116 if (same_type_p (ttl, ttr))
1119 if (TREE_CODE (ttr) != TREE_CODE (ttl))
1122 if ((TREE_CODE (ttr) == POINTER_TYPE
1123 || TREE_CODE (ttr) == REFERENCE_TYPE)
1124 /* If we get a pointer with nptrs == 0, we don't allow any tweaking
1125 of the type pointed to. This is necessary for reference init
1126 semantics. We won't get here from a previous call with nptrs == 1;
1127 for multi-level pointers we end up in comp_ptr_ttypes. */
1130 int is_ptr = TREE_CODE (ttr) == POINTER_TYPE;
1132 ttl = TREE_TYPE (ttl);
1133 ttr = TREE_TYPE (ttr);
1137 if (TREE_CODE (ttl) == UNKNOWN_TYPE
1138 || TREE_CODE (ttr) == UNKNOWN_TYPE)
1140 else if (TREE_CODE (ttl) == VOID_TYPE
1141 && TREE_CODE (ttr) != FUNCTION_TYPE
1142 && TREE_CODE (ttr) != METHOD_TYPE
1143 && TREE_CODE (ttr) != OFFSET_TYPE)
1145 else if (TREE_CODE (ttr) == VOID_TYPE
1146 && TREE_CODE (ttl) != FUNCTION_TYPE
1147 && TREE_CODE (ttl) != METHOD_TYPE
1148 && TREE_CODE (ttl) != OFFSET_TYPE)
1150 else if (TREE_CODE (ttl) == POINTER_TYPE
1151 || TREE_CODE (ttl) == ARRAY_TYPE)
1153 if (comp_ptr_ttypes (ttl, ttr))
1155 else if (comp_ptr_ttypes (ttr, ttl))
1161 /* Const and volatile mean something different for function types,
1162 so the usual checks are not appropriate. */
1163 if (TREE_CODE (ttl) == FUNCTION_TYPE || TREE_CODE (ttl) == METHOD_TYPE)
1164 return comp_target_types (ttl, ttr, nptrs - 1);
1166 return comp_cv_target_types (ttl, ttr, nptrs - 1);
1169 if (TREE_CODE (ttr) == ARRAY_TYPE)
1170 return comp_array_types (comp_target_types, ttl, ttr, COMPARE_STRICT);
1171 else if (TREE_CODE (ttr) == FUNCTION_TYPE || TREE_CODE (ttr) == METHOD_TYPE)
1178 if (!same_type_p (TREE_TYPE (ttl), TREE_TYPE (ttr)))
1183 switch (comp_target_types (TREE_TYPE (ttl), TREE_TYPE (ttr), -1))
1192 argsl = TYPE_ARG_TYPES (ttl);
1193 argsr = TYPE_ARG_TYPES (ttr);
1195 /* Compare 'this' here, not in comp_target_parms. */
1196 if (TREE_CODE (ttr) == METHOD_TYPE)
1198 tree tl = TYPE_METHOD_BASETYPE (ttl);
1199 tree tr = TYPE_METHOD_BASETYPE (ttr);
1201 if (!same_or_base_type_p (tr, tl))
1203 if (same_or_base_type_p (tl, tr))
1209 argsl = TREE_CHAIN (argsl);
1210 argsr = TREE_CHAIN (argsr);
1213 switch (comp_target_parms (argsl, argsr))
1221 return saw_contra ? -1 : 1;
1224 else if (TREE_CODE (ttr) == OFFSET_TYPE)
1228 /* Contravariance: we can assign a pointer to base member to a pointer
1229 to derived member. Note difference from simple pointer case, where
1230 we can pass a pointer to derived to a pointer to base. */
1231 if (same_or_base_type_p (TYPE_OFFSET_BASETYPE (ttr),
1232 TYPE_OFFSET_BASETYPE (ttl)))
1234 else if (same_or_base_type_p (TYPE_OFFSET_BASETYPE (ttl),
1235 TYPE_OFFSET_BASETYPE (ttr)))
1245 ttl = TREE_TYPE (ttl);
1246 ttr = TREE_TYPE (ttr);
1248 if (TREE_CODE (ttl) == POINTER_TYPE
1249 || TREE_CODE (ttl) == ARRAY_TYPE)
1251 if (comp_ptr_ttypes (ttl, ttr))
1257 if (comp_cv_target_types (ttl, ttr, nptrs) == 1)
1262 else if (IS_AGGR_TYPE (ttl))
1266 if (same_or_base_type_p (build_pointer_type (ttl),
1267 build_pointer_type (ttr)))
1269 if (same_or_base_type_p (build_pointer_type (ttr),
1270 build_pointer_type (ttl)))
1278 /* Returns 1 if TYPE1 is at least as qualified as TYPE2. */
1281 at_least_as_qualified_p (type1, type2)
1285 /* All qualifiers for TYPE2 must also appear in TYPE1. */
1286 return ((cp_type_quals (type1) & cp_type_quals (type2))
1287 == cp_type_quals (type2));
1290 /* Returns 1 if TYPE1 is more qualified than TYPE2. */
1293 more_qualified_p (type1, type2)
1297 return (cp_type_quals (type1) != cp_type_quals (type2)
1298 && at_least_as_qualified_p (type1, type2));
1301 /* Returns 1 if TYPE1 is more cv-qualified than TYPE2, -1 if TYPE2 is
1302 more cv-qualified that TYPE1, and 0 otherwise. */
1305 comp_cv_qualification (type1, type2)
1309 if (cp_type_quals (type1) == cp_type_quals (type2))
1312 if (at_least_as_qualified_p (type1, type2))
1315 else if (at_least_as_qualified_p (type2, type1))
1321 /* Returns 1 if the cv-qualification signature of TYPE1 is a proper
1322 subset of the cv-qualification signature of TYPE2, and the types
1323 are similar. Returns -1 if the other way 'round, and 0 otherwise. */
1326 comp_cv_qual_signature (type1, type2)
1330 if (comp_ptr_ttypes_real (type2, type1, -1))
1332 else if (comp_ptr_ttypes_real (type1, type2, -1))
1338 /* If two types share a common base type, return that basetype.
1339 If there is not a unique most-derived base type, this function
1340 returns ERROR_MARK_NODE. */
1343 common_base_type (tt1, tt2)
1346 tree best = NULL_TREE;
1349 /* If one is a baseclass of another, that's good enough. */
1350 if (UNIQUELY_DERIVED_FROM_P (tt1, tt2))
1352 if (UNIQUELY_DERIVED_FROM_P (tt2, tt1))
1355 /* Otherwise, try to find a unique baseclass of TT1
1356 that is shared by TT2, and follow that down. */
1357 for (i = CLASSTYPE_N_BASECLASSES (tt1)-1; i >= 0; i--)
1359 tree basetype = TYPE_BINFO_BASETYPE (tt1, i);
1360 tree trial = common_base_type (basetype, tt2);
1363 if (trial == error_mark_node)
1365 if (best == NULL_TREE)
1367 else if (best != trial)
1368 return error_mark_node;
1373 for (i = CLASSTYPE_N_BASECLASSES (tt2)-1; i >= 0; i--)
1375 tree basetype = TYPE_BINFO_BASETYPE (tt2, i);
1376 tree trial = common_base_type (tt1, basetype);
1379 if (trial == error_mark_node)
1381 if (best == NULL_TREE)
1383 else if (best != trial)
1384 return error_mark_node;
1390 /* Subroutines of `comptypes'. */
1392 /* Return 1 if two parameter type lists PARMS1 and PARMS2 are
1393 equivalent in the sense that functions with those parameter types
1394 can have equivalent types. The two lists must be equivalent,
1397 C++: See comment above about TYPE1, TYPE2. */
1400 compparms (parms1, parms2)
1401 tree parms1, parms2;
1403 register tree t1 = parms1, t2 = parms2;
1405 /* An unspecified parmlist matches any specified parmlist
1406 whose argument types don't need default promotions. */
1410 if (t1 == 0 && t2 == 0)
1412 /* If one parmlist is shorter than the other,
1413 they fail to match. */
1414 if (t1 == 0 || t2 == 0)
1416 if (!same_type_p (TREE_VALUE (t2), TREE_VALUE (t1)))
1419 t1 = TREE_CHAIN (t1);
1420 t2 = TREE_CHAIN (t2);
1424 /* This really wants return whether or not parameter type lists
1425 would make their owning functions assignment compatible or not.
1427 The return value is like for comp_target_types.
1429 This should go away, possibly with the exception of the empty parmlist
1430 conversion; there are no conversions between function types in C++.
1431 (jason 17 Apr 1997) */
1434 comp_target_parms (parms1, parms2)
1435 tree parms1, parms2;
1437 register tree t1 = parms1, t2 = parms2;
1438 int warn_contravariance = 0;
1440 /* In C, an unspecified parmlist matches any specified parmlist
1441 whose argument types don't need default promotions. This is not
1442 true for C++, but let's do it anyway for unfixed headers. */
1444 if (t1 == 0 && t2 != 0)
1446 pedwarn ("ISO C++ prohibits conversion from `%#T' to `(...)'",
1448 return self_promoting_args_p (t2);
1451 return self_promoting_args_p (t1);
1453 for (; t1 || t2; t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2))
1457 /* If one parmlist is shorter than the other,
1458 they fail to match, unless STRICT is <= 0. */
1459 if (t1 == 0 || t2 == 0)
1461 p1 = TREE_VALUE (t1);
1462 p2 = TREE_VALUE (t2);
1463 if (same_type_p (p1, p2))
1469 if ((TREE_CODE (p1) == POINTER_TYPE && TREE_CODE (p2) == POINTER_TYPE)
1470 || (TREE_CODE (p1) == REFERENCE_TYPE
1471 && TREE_CODE (p2) == REFERENCE_TYPE))
1473 /* The following is wrong for contravariance,
1474 but many programs depend on it. */
1475 if (TREE_TYPE (p1) == void_type_node)
1477 if (TREE_TYPE (p2) == void_type_node)
1479 warn_contravariance = 1;
1482 if (IS_AGGR_TYPE (TREE_TYPE (p1))
1483 && !same_type_ignoring_top_level_qualifiers_p (TREE_TYPE (p1),
1487 /* Note backwards order due to contravariance. */
1488 if (comp_target_types (p2, p1, 1) <= 0)
1490 if (comp_target_types (p1, p2, 1) > 0)
1492 warn_contravariance = 1;
1498 return warn_contravariance ? -1 : 1;
1502 cxx_sizeof_or_alignof_type (type, op, complain)
1507 enum tree_code type_code;
1509 const char *op_name;
1511 my_friendly_assert (op == SIZEOF_EXPR || op == ALIGNOF_EXPR, 20020720);
1512 if (processing_template_decl)
1513 return build_min_nt (op, type);
1515 op_name = operator_name_info[(int) op].name;
1517 if (TREE_CODE (type) == REFERENCE_TYPE)
1518 type = TREE_TYPE (type);
1519 type_code = TREE_CODE (type);
1521 if (type_code == METHOD_TYPE)
1523 if (complain && (pedantic || warn_pointer_arith))
1524 pedwarn ("invalid application of `%s' to a member function", op_name);
1525 value = size_one_node;
1527 else if (type_code == OFFSET_TYPE)
1530 error ("invalid application of `%s' to non-static member", op_name);
1531 value = size_zero_node;
1534 value = c_sizeof_or_alignof_type (complete_type (type), op, complain);
1543 if (processing_template_decl)
1544 return build_min_nt (SIZEOF_EXPR, e);
1546 if (TREE_CODE (e) == COMPONENT_REF
1547 && DECL_C_BIT_FIELD (TREE_OPERAND (e, 1)))
1548 error ("sizeof applied to a bit-field");
1549 if (is_overloaded_fn (e))
1551 pedwarn ("ISO C++ forbids applying `sizeof' to an expression of function type");
1552 return c_sizeof (char_type_node);
1554 else if (type_unknown_p (e))
1556 cxx_incomplete_type_error (e, TREE_TYPE (e));
1557 return c_sizeof (char_type_node);
1559 /* It's invalid to say `sizeof (X::i)' for `i' a non-static data
1560 member unless you're in a non-static member of X. So hand off to
1561 resolve_offset_ref. [expr.prim] */
1562 else if (TREE_CODE (e) == OFFSET_REF)
1563 e = resolve_offset_ref (e);
1565 if (e == error_mark_node)
1568 return cxx_sizeof (TREE_TYPE (e));
1572 /* Perform the array-to-pointer and function-to-pointer conversions
1575 In addition, references are converted to lvalues and manifest
1576 constants are replaced by their values. */
1579 decay_conversion (exp)
1583 register enum tree_code code;
1585 if (TREE_CODE (exp) == OFFSET_REF)
1586 exp = resolve_offset_ref (exp);
1588 type = TREE_TYPE (exp);
1589 code = TREE_CODE (type);
1591 if (code == REFERENCE_TYPE)
1593 exp = convert_from_reference (exp);
1594 type = TREE_TYPE (exp);
1595 code = TREE_CODE (type);
1598 if (type == error_mark_node)
1599 return error_mark_node;
1601 if (type_unknown_p (exp))
1603 cxx_incomplete_type_error (exp, TREE_TYPE (exp));
1604 return error_mark_node;
1607 /* Constants can be used directly unless they're not loadable. */
1608 if (TREE_CODE (exp) == CONST_DECL)
1609 exp = DECL_INITIAL (exp);
1610 /* Replace a nonvolatile const static variable with its value. We
1611 don't do this for arrays, though; we want the address of the
1612 first element of the array, not the address of the first element
1613 of its initializing constant. */
1614 else if (code != ARRAY_TYPE)
1616 exp = decl_constant_value (exp);
1617 type = TREE_TYPE (exp);
1620 /* build_c_cast puts on a NOP_EXPR to make the result not an lvalue.
1621 Leave such NOP_EXPRs, since RHS is being used in non-lvalue context. */
1623 if (code == VOID_TYPE)
1625 error ("void value not ignored as it ought to be");
1626 return error_mark_node;
1628 if (code == METHOD_TYPE)
1630 if (code == FUNCTION_TYPE || is_overloaded_fn (exp))
1631 return build_unary_op (ADDR_EXPR, exp, 0);
1632 if (code == ARRAY_TYPE)
1637 if (TREE_CODE (exp) == INDIRECT_REF)
1639 /* Stripping away the INDIRECT_REF is not the right
1640 thing to do for references... */
1641 tree inner = TREE_OPERAND (exp, 0);
1642 if (TREE_CODE (TREE_TYPE (inner)) == REFERENCE_TYPE)
1644 inner = build1 (CONVERT_EXPR,
1645 build_pointer_type (TREE_TYPE
1646 (TREE_TYPE (inner))),
1648 TREE_CONSTANT (inner) = TREE_CONSTANT (TREE_OPERAND (inner, 0));
1650 return cp_convert (build_pointer_type (TREE_TYPE (type)), inner);
1653 if (TREE_CODE (exp) == COMPOUND_EXPR)
1655 tree op1 = decay_conversion (TREE_OPERAND (exp, 1));
1656 return build (COMPOUND_EXPR, TREE_TYPE (op1),
1657 TREE_OPERAND (exp, 0), op1);
1661 && ! (TREE_CODE (exp) == CONSTRUCTOR && TREE_STATIC (exp)))
1663 error ("invalid use of non-lvalue array");
1664 return error_mark_node;
1667 ptrtype = build_pointer_type (TREE_TYPE (type));
1669 if (TREE_CODE (exp) == VAR_DECL)
1671 /* ??? This is not really quite correct
1672 in that the type of the operand of ADDR_EXPR
1673 is not the target type of the type of the ADDR_EXPR itself.
1674 Question is, can this lossage be avoided? */
1675 adr = build1 (ADDR_EXPR, ptrtype, exp);
1676 if (!cxx_mark_addressable (exp))
1677 return error_mark_node;
1678 TREE_CONSTANT (adr) = staticp (exp);
1679 TREE_SIDE_EFFECTS (adr) = 0; /* Default would be, same as EXP. */
1682 /* This way is better for a COMPONENT_REF since it can
1683 simplify the offset for a component. */
1684 adr = build_unary_op (ADDR_EXPR, exp, 1);
1685 return cp_convert (ptrtype, adr);
1688 /* [basic.lval]: Class rvalues can have cv-qualified types; non-class
1689 rvalues always have cv-unqualified types. */
1690 if (! CLASS_TYPE_P (type))
1691 exp = cp_convert (TYPE_MAIN_VARIANT (type), exp);
1697 default_conversion (exp)
1701 enum tree_code code;
1703 exp = decay_conversion (exp);
1705 type = TREE_TYPE (exp);
1706 code = TREE_CODE (type);
1708 if (INTEGRAL_CODE_P (code))
1710 tree t = type_promotes_to (type);
1712 return cp_convert (t, exp);
1718 /* Take the address of an inline function without setting TREE_ADDRESSABLE
1722 inline_conversion (exp)
1725 if (TREE_CODE (exp) == FUNCTION_DECL)
1726 exp = build1 (ADDR_EXPR, build_pointer_type (TREE_TYPE (exp)), exp);
1731 /* Returns nonzero iff exp is a STRING_CST or the result of applying
1732 decay_conversion to one. */
1735 string_conv_p (totype, exp, warn)
1741 if (! flag_const_strings || TREE_CODE (totype) != POINTER_TYPE)
1744 t = TREE_TYPE (totype);
1745 if (!same_type_p (t, char_type_node)
1746 && !same_type_p (t, wchar_type_node))
1749 if (TREE_CODE (exp) == STRING_CST)
1751 /* Make sure that we don't try to convert between char and wchar_t. */
1752 if (!same_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (exp))), t))
1757 /* Is this a string constant which has decayed to 'const char *'? */
1758 t = build_pointer_type (build_qualified_type (t, TYPE_QUAL_CONST));
1759 if (!same_type_p (TREE_TYPE (exp), t))
1762 if (TREE_CODE (exp) != ADDR_EXPR
1763 || TREE_CODE (TREE_OPERAND (exp, 0)) != STRING_CST)
1767 /* This warning is not very useful, as it complains about printf. */
1768 if (warn && warn_write_strings)
1769 warning ("deprecated conversion from string constant to `%T'", totype);
1774 /* Given a COND_EXPR, MIN_EXPR, or MAX_EXPR in T, return it in a form that we
1775 can, for example, use as an lvalue. This code used to be in
1776 unary_complex_lvalue, but we needed it to deal with `a = (d == c) ? b : c'
1777 expressions, where we're dealing with aggregates. But now it's again only
1778 called from unary_complex_lvalue. The case (in particular) that led to
1779 this was with CODE == ADDR_EXPR, since it's not an lvalue when we'd
1783 rationalize_conditional_expr (code, t)
1784 enum tree_code code;
1787 /* For MIN_EXPR or MAX_EXPR, fold-const.c has arranged things so that
1788 the first operand is always the one to be used if both operands
1789 are equal, so we know what conditional expression this used to be. */
1790 if (TREE_CODE (t) == MIN_EXPR || TREE_CODE (t) == MAX_EXPR)
1793 build_conditional_expr (build_x_binary_op ((TREE_CODE (t) == MIN_EXPR
1794 ? LE_EXPR : GE_EXPR),
1795 TREE_OPERAND (t, 0),
1796 TREE_OPERAND (t, 1)),
1797 build_unary_op (code, TREE_OPERAND (t, 0), 0),
1798 build_unary_op (code, TREE_OPERAND (t, 1), 0));
1802 build_conditional_expr (TREE_OPERAND (t, 0),
1803 build_unary_op (code, TREE_OPERAND (t, 1), 0),
1804 build_unary_op (code, TREE_OPERAND (t, 2), 0));
1807 /* Given the TYPE of an anonymous union field inside T, return the
1808 FIELD_DECL for the field. If not found return NULL_TREE. Because
1809 anonymous unions can nest, we must also search all anonymous unions
1810 that are directly reachable. */
1813 lookup_anon_field (t, type)
1818 for (field = TYPE_FIELDS (t); field; field = TREE_CHAIN (field))
1820 if (TREE_STATIC (field))
1822 if (TREE_CODE (field) != FIELD_DECL || DECL_ARTIFICIAL (field))
1825 /* If we find it directly, return the field. */
1826 if (DECL_NAME (field) == NULL_TREE
1827 && type == TYPE_MAIN_VARIANT (TREE_TYPE (field)))
1832 /* Otherwise, it could be nested, search harder. */
1833 if (DECL_NAME (field) == NULL_TREE
1834 && ANON_AGGR_TYPE_P (TREE_TYPE (field)))
1836 tree subfield = lookup_anon_field (TREE_TYPE (field), type);
1844 /* Build an expression representing OBJECT.MEMBER. OBJECT is an
1845 expression; MEMBER is a DECL or baselink. If ACCESS_PATH is
1846 non-NULL, it indicates the path to the base used to name MEMBER.
1847 If PRESERVE_REFERENCE is true, the expression returned will have
1848 REFERENCE_TYPE if the MEMBER does. Otherwise, the expression
1849 returned will have the type referred to by the reference.
1851 This function does not perform access control; that is either done
1852 earlier by the parser when the name of MEMBER is resolved to MEMBER
1853 itself, or later when overload resolution selects one of the
1854 functions indicated by MEMBER. */
1857 build_class_member_access_expr (tree object, tree member,
1858 tree access_path, bool preserve_reference)
1862 tree result = NULL_TREE;
1864 if (object == error_mark_node || member == error_mark_node)
1865 return error_mark_node;
1867 if (TREE_CODE (member) == PSEUDO_DTOR_EXPR)
1870 my_friendly_assert (DECL_P (member) || BASELINK_P (member),
1875 The type of the first expression shall be "class object" (of a
1877 object_type = TREE_TYPE (object);
1878 if (!complete_type_or_else (object_type, object))
1879 return error_mark_node;
1880 if (!CLASS_TYPE_P (object_type))
1882 error ("request for member `%D' in `%E', which is of non-class type `%T'",
1883 member, object, object_type);
1884 return error_mark_node;
1887 /* The standard does not seem to actually say that MEMBER must be a
1888 member of OBJECT_TYPE. However, that is clearly what is
1890 if (DECL_P (member))
1892 member_scope = DECL_CLASS_CONTEXT (member);
1894 if (TREE_DEPRECATED (member))
1895 warn_deprecated_use (member);
1898 member_scope = BINFO_TYPE (BASELINK_BINFO (member));
1899 /* If MEMBER is from an anonymous aggregate, MEMBER_SCOPE will
1900 presently be the anonymous union. Go outwards until we find a
1901 type related to OBJECT_TYPE. */
1902 while (ANON_AGGR_TYPE_P (member_scope)
1903 && !same_type_ignoring_top_level_qualifiers_p (member_scope,
1905 member_scope = TYPE_CONTEXT (member_scope);
1906 if (!member_scope || !DERIVED_FROM_P (member_scope, object_type))
1908 error ("`%D' is not a member of `%T'", member, object_type);
1909 return error_mark_node;
1912 /* Transform `(a, b).x' into `(*(a, &b)).x', `(a ? b : c).x' into
1913 `(*(a ? &b : &c)).x', and so on. A COND_EXPR is only an lvalue
1914 in the frontend; only _DECLs and _REFs are lvalues in the backend. */
1916 tree temp = unary_complex_lvalue (ADDR_EXPR, object);
1918 object = build_indirect_ref (temp, NULL);
1921 /* In [expr.ref], there is an explicit list of the valid choices for
1922 MEMBER. We check for each of those cases here. */
1923 if (TREE_CODE (member) == VAR_DECL)
1925 /* A static data member. */
1927 /* If OBJECT has side-effects, they are supposed to occur. */
1928 if (TREE_SIDE_EFFECTS (object))
1929 result = build (COMPOUND_EXPR, TREE_TYPE (result), object, result);
1931 else if (TREE_CODE (member) == FIELD_DECL)
1933 /* A non-static data member. */
1938 null_object_p = (TREE_CODE (object) == INDIRECT_REF
1939 && integer_zerop (TREE_OPERAND (object, 0)));
1941 /* Convert OBJECT to the type of MEMBER. */
1942 if (!same_type_p (TYPE_MAIN_VARIANT (object_type),
1943 TYPE_MAIN_VARIANT (member_scope)))
1948 binfo = lookup_base (access_path ? access_path : object_type,
1949 member_scope, ba_ignore, &kind);
1950 if (binfo == error_mark_node)
1951 return error_mark_node;
1953 /* It is invalid to try to get to a virtual base of a
1954 NULL object. The most common cause is invalid use of
1956 if (null_object_p && kind == bk_via_virtual)
1958 error ("invalid access to non-static data member `%D' of NULL object",
1960 error ("(perhaps the `offsetof' macro was used incorrectly)");
1961 return error_mark_node;
1964 /* Convert to the base. */
1965 object = build_base_path (PLUS_EXPR, object, binfo,
1967 /* If we found the base successfully then we should be able
1968 to convert to it successfully. */
1969 my_friendly_assert (object != error_mark_node,
1973 /* Complain about other invalid uses of offsetof, even though they will
1974 give the right answer. Note that we complain whether or not they
1975 actually used the offsetof macro, since there's no way to know at this
1976 point. So we just give a warning, instead of a pedwarn. */
1977 if (null_object_p && warn_invalid_offsetof
1978 && CLASSTYPE_NON_POD_P (object_type))
1980 warning ("invalid access to non-static data member `%D' of NULL object",
1982 warning ("(perhaps the `offsetof' macro was used incorrectly)");
1985 /* If MEMBER is from an anonymous aggregate, we have converted
1986 OBJECT so that it refers to the class containing the
1987 anonymous union. Generate a reference to the anonymous union
1988 itself, and recur to find MEMBER. */
1989 if (ANON_AGGR_TYPE_P (DECL_CONTEXT (member))
1990 /* When this code is called from build_field_call, the
1991 object already has the type of the anonymous union.
1992 That is because the COMPONENT_REF was already
1993 constructed, and was then disassembled before calling
1994 build_field_call. After the function-call code is
1995 cleaned up, this waste can be eliminated. */
1996 && (!same_type_ignoring_top_level_qualifiers_p
1997 (TREE_TYPE (object), DECL_CONTEXT (member))))
1999 tree anonymous_union;
2001 anonymous_union = lookup_anon_field (TREE_TYPE (object),
2002 DECL_CONTEXT (member));
2003 object = build_class_member_access_expr (object,
2005 /*access_path=*/NULL_TREE,
2006 preserve_reference);
2009 /* Compute the type of the field, as described in [expr.ref]. */
2010 type_quals = TYPE_UNQUALIFIED;
2011 member_type = TREE_TYPE (member);
2012 if (TREE_CODE (member_type) != REFERENCE_TYPE)
2014 type_quals = (cp_type_quals (member_type)
2015 | cp_type_quals (object_type));
2017 /* A field is const (volatile) if the enclosing object, or the
2018 field itself, is const (volatile). But, a mutable field is
2019 not const, even within a const object. */
2020 if (DECL_MUTABLE_P (member))
2021 type_quals &= ~TYPE_QUAL_CONST;
2022 member_type = cp_build_qualified_type (member_type, type_quals);
2025 result = fold (build (COMPONENT_REF, member_type, object, member));
2027 /* Mark the expression const or volatile, as appropriate. Even
2028 though we've dealt with the type above, we still have to mark the
2029 expression itself. */
2030 if (type_quals & TYPE_QUAL_CONST)
2031 TREE_READONLY (result) = 1;
2032 else if (type_quals & TYPE_QUAL_VOLATILE)
2033 TREE_THIS_VOLATILE (result) = 1;
2035 else if (BASELINK_P (member))
2037 /* The member is a (possibly overloaded) member function. */
2041 /* If the MEMBER is exactly one static member function, then we
2042 know the type of the expression. Otherwise, we must wait
2043 until overload resolution has been performed. */
2044 functions = BASELINK_FUNCTIONS (member);
2045 if (TREE_CODE (functions) == FUNCTION_DECL
2046 && DECL_STATIC_FUNCTION_P (functions))
2047 type = TREE_TYPE (functions);
2049 type = unknown_type_node;
2050 /* Note that we do not convert OBJECT to the BASELINK_BINFO
2051 base. That will happen when the function is called. */
2052 result = build (COMPONENT_REF, type, object, member);
2054 else if (TREE_CODE (member) == CONST_DECL)
2056 /* The member is an enumerator. */
2058 /* If OBJECT has side-effects, they are supposed to occur. */
2059 if (TREE_SIDE_EFFECTS (object))
2060 result = build (COMPOUND_EXPR, TREE_TYPE (result),
2065 error ("invalid use of `%D'", member);
2066 return error_mark_node;
2069 if (!preserve_reference)
2072 If E2 is declared to have type "reference to T", then ... the
2073 type of E1.E2 is T. */
2074 result = convert_from_reference (result);
2079 /* Return the destructor denoted by OBJECT.SCOPE::~DTOR_NAME, or, if
2080 SCOPE is NULL, by OBJECT.~DTOR_NAME. */
2083 lookup_destructor (tree object, tree scope, tree dtor_name)
2085 tree object_type = TREE_TYPE (object);
2086 tree dtor_type = TREE_OPERAND (dtor_name, 0);
2088 if (scope && !check_dtor_name (scope, dtor_name))
2090 error ("qualified type `%T' does not match destructor name `~%T'",
2092 return error_mark_node;
2094 if (!same_type_p (dtor_type, TYPE_MAIN_VARIANT (object_type)))
2096 error ("destructor name `%T' does not match type `%T' of expression",
2097 dtor_type, object_type);
2098 return error_mark_node;
2100 if (!TYPE_HAS_DESTRUCTOR (object_type))
2101 return build (PSEUDO_DTOR_EXPR, void_type_node, object, scope,
2103 return lookup_member (object_type, complete_dtor_identifier,
2104 /*protect=*/1, /*want_type=*/false);
2107 /* This function is called by the parser to process a class member
2108 access expression of the form OBJECT.NAME. NAME is a node used by
2109 the parser to represent a name; it is not yet a DECL. It may,
2110 however, be a BASELINK where the BASELINK_FUNCTIONS is a
2111 TEMPLATE_ID_EXPR. Templates must be looked up by the parser, and
2112 there is no reason to do the lookup twice, so the parser keeps the
2116 finish_class_member_access_expr (tree object, tree name)
2120 tree access_path = NULL_TREE;
2122 if (object == error_mark_node || name == error_mark_node)
2123 return error_mark_node;
2125 if (processing_template_decl)
2126 return build_min_nt (COMPONENT_REF, object, name);
2128 if (TREE_CODE (object) == OFFSET_REF)
2129 object = resolve_offset_ref (object);
2131 object_type = TREE_TYPE (object);
2132 if (TREE_CODE (object_type) == REFERENCE_TYPE)
2134 object = convert_from_reference (object);
2135 object_type = TREE_TYPE (object);
2140 The type of the first expression shall be "class object" (of a
2142 if (!complete_type_or_else (object_type, object))
2143 return error_mark_node;
2144 if (!CLASS_TYPE_P (object_type))
2146 error ("request for member `%D' in `%E', which is of non-class type `%T'",
2147 name, object, object_type);
2148 return error_mark_node;
2151 if (BASELINK_P (name))
2153 /* A member function that has already been looked up. */
2154 my_friendly_assert ((TREE_CODE (BASELINK_FUNCTIONS (name))
2155 == TEMPLATE_ID_EXPR),
2161 bool is_template_id = false;
2162 tree template_args = NULL_TREE;
2164 if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
2166 is_template_id = true;
2167 template_args = TREE_OPERAND (name, 1);
2168 name = TREE_OPERAND (name, 0);
2171 if (TREE_CODE (name) == SCOPE_REF)
2175 /* A qualified name. The qualifying class or namespace `S' has
2176 already been looked up; it is either a TYPE or a
2177 NAMESPACE_DECL. The member name is either an IDENTIFIER_NODE
2178 or a BIT_NOT_EXPR. */
2179 scope = TREE_OPERAND (name, 0);
2180 name = TREE_OPERAND (name, 1);
2181 my_friendly_assert ((CLASS_TYPE_P (scope)
2182 || TREE_CODE (scope) == NAMESPACE_DECL),
2184 my_friendly_assert ((TREE_CODE (name) == IDENTIFIER_NODE
2185 || TREE_CODE (name) == BIT_NOT_EXPR),
2188 /* If SCOPE is a namespace, then the qualified name does not
2189 name a member of OBJECT_TYPE. */
2190 if (TREE_CODE (scope) == NAMESPACE_DECL)
2192 error ("`%D::%D' is not a member of `%T'",
2193 scope, name, object_type);
2194 return error_mark_node;
2197 /* Find the base of OBJECT_TYPE corresponding to SCOPE. */
2198 access_path = lookup_base (object_type, scope, ba_check, NULL);
2199 if (!access_path || access_path == error_mark_node)
2200 return error_mark_node;
2202 if (TREE_CODE (name) == BIT_NOT_EXPR)
2203 member = lookup_destructor (object, scope, name);
2206 /* Look up the member. */
2207 member = lookup_member (access_path, name, /*protect=*/1,
2208 /*want_type=*/false);
2209 if (member == NULL_TREE)
2211 error ("'%D' has no member named '%E'", object_type, name);
2212 return error_mark_node;
2214 if (member == error_mark_node)
2215 return error_mark_node;
2218 else if (TREE_CODE (name) == BIT_NOT_EXPR)
2219 member = lookup_destructor (object, /*scope=*/NULL_TREE, name);
2220 else if (TREE_CODE (name) == IDENTIFIER_NODE)
2222 /* An unqualified name. */
2223 member = lookup_member (object_type, name, /*protect=*/1,
2224 /*want_type=*/false);
2225 if (member == NULL_TREE)
2227 error ("'%D' has no member named '%E'", object_type, name);
2228 return error_mark_node;
2230 else if (member == error_mark_node)
2231 return error_mark_node;
2235 /* The YACC parser sometimes gives us things that are not names.
2236 These always indicate errors. The recursive-descent parser
2237 does not do this, so this code can go away once that parser
2238 replaces the YACC parser. */
2239 error ("invalid use of `%D'", name);
2240 return error_mark_node;
2245 tree template = member;
2247 if (BASELINK_P (template))
2248 BASELINK_FUNCTIONS (template)
2249 = build_nt (TEMPLATE_ID_EXPR,
2250 BASELINK_FUNCTIONS (template),
2254 error ("`%D' is not a member template function", name);
2255 return error_mark_node;
2260 if (TREE_DEPRECATED (member))
2261 warn_deprecated_use (member);
2263 return build_class_member_access_expr (object, member, access_path,
2264 /*preserve_reference=*/false);
2267 /* Return an expression for the MEMBER_NAME field in the internal
2268 representation of PTRMEM, a pointer-to-member function. (Each
2269 pointer-to-member function type gets its own RECORD_TYPE so it is
2270 more convenient to access the fields by name than by FIELD_DECL.)
2271 This routine converts the NAME to a FIELD_DECL and then creates the
2272 node for the complete expression. */
2275 build_ptrmemfunc_access_expr (tree ptrmem, tree member_name)
2281 /* This code is a stripped down version of
2282 build_class_member_access_expr. It does not work to use that
2283 routine directly because it expects the object to be of class
2285 ptrmem_type = TREE_TYPE (ptrmem);
2286 my_friendly_assert (TYPE_PTRMEMFUNC_P (ptrmem_type), 20020804);
2287 member = lookup_member (ptrmem_type, member_name, /*protect=*/0,
2288 /*want_type=*/false);
2289 member_type = cp_build_qualified_type (TREE_TYPE (member),
2290 cp_type_quals (ptrmem_type));
2291 return fold (build (COMPONENT_REF, member_type, ptrmem, member));
2294 /* Given an expression PTR for a pointer, return an expression
2295 for the value pointed to.
2296 ERRORSTRING is the name of the operator to appear in error messages.
2298 This function may need to overload OPERATOR_FNNAME.
2299 Must also handle REFERENCE_TYPEs for C++. */
2302 build_x_indirect_ref (ptr, errorstring)
2304 const char *errorstring;
2308 if (processing_template_decl)
2309 return build_min_nt (INDIRECT_REF, ptr);
2311 rval = build_new_op (INDIRECT_REF, LOOKUP_NORMAL, ptr, NULL_TREE,
2315 return build_indirect_ref (ptr, errorstring);
2319 build_indirect_ref (ptr, errorstring)
2321 const char *errorstring;
2323 register tree pointer, type;
2325 if (ptr == error_mark_node)
2326 return error_mark_node;
2328 if (ptr == current_class_ptr)
2329 return current_class_ref;
2331 pointer = (TREE_CODE (TREE_TYPE (ptr)) == REFERENCE_TYPE
2332 ? ptr : default_conversion (ptr));
2333 type = TREE_TYPE (pointer);
2335 if (TYPE_PTR_P (type) || TREE_CODE (type) == REFERENCE_TYPE)
2339 If the type of the expression is "pointer to T," the type
2340 of the result is "T."
2342 We must use the canonical variant because certain parts of
2343 the back end, like fold, do pointer comparisons between
2345 tree t = canonical_type_variant (TREE_TYPE (type));
2347 if (VOID_TYPE_P (t))
2349 /* A pointer to incomplete type (other than cv void) can be
2350 dereferenced [expr.unary.op]/1 */
2351 error ("`%T' is not a pointer-to-object type", type);
2352 return error_mark_node;
2354 else if (TREE_CODE (pointer) == ADDR_EXPR
2355 && same_type_p (t, TREE_TYPE (TREE_OPERAND (pointer, 0))))
2356 /* The POINTER was something like `&x'. We simplify `*&x' to
2358 return TREE_OPERAND (pointer, 0);
2361 tree ref = build1 (INDIRECT_REF, t, pointer);
2363 /* We *must* set TREE_READONLY when dereferencing a pointer to const,
2364 so that we get the proper error message if the result is used
2365 to assign to. Also, &* is supposed to be a no-op. */
2366 TREE_READONLY (ref) = CP_TYPE_CONST_P (t);
2367 TREE_THIS_VOLATILE (ref) = CP_TYPE_VOLATILE_P (t);
2368 TREE_SIDE_EFFECTS (ref)
2369 = (TREE_THIS_VOLATILE (ref) || TREE_SIDE_EFFECTS (pointer));
2373 /* `pointer' won't be an error_mark_node if we were given a
2374 pointer to member, so it's cool to check for this here. */
2375 else if (TYPE_PTRMEM_P (type) || TYPE_PTRMEMFUNC_P (type))
2376 error ("invalid use of `%s' on pointer to member", errorstring);
2377 else if (pointer != error_mark_node)
2380 error ("invalid type argument of `%s'", errorstring);
2382 error ("invalid type argument");
2384 return error_mark_node;
2387 /* This handles expressions of the form "a[i]", which denotes
2390 This is logically equivalent in C to *(a+i), but we may do it differently.
2391 If A is a variable or a member, we generate a primitive ARRAY_REF.
2392 This avoids forcing the array out of registers, and can work on
2393 arrays that are not lvalues (for example, members of structures returned
2396 If INDEX is of some user-defined type, it must be converted to
2397 integer type. Otherwise, to make a compatible PLUS_EXPR, it
2398 will inherit the type of the array, which will be some pointer type. */
2401 build_array_ref (array, idx)
2406 error ("subscript missing in array reference");
2407 return error_mark_node;
2410 if (TREE_TYPE (array) == error_mark_node
2411 || TREE_TYPE (idx) == error_mark_node)
2412 return error_mark_node;
2414 /* If ARRAY is a COMPOUND_EXPR or COND_EXPR, move our reference
2416 switch (TREE_CODE (array))
2420 tree value = build_array_ref (TREE_OPERAND (array, 1), idx);
2421 return build (COMPOUND_EXPR, TREE_TYPE (value),
2422 TREE_OPERAND (array, 0), value);
2426 return build_conditional_expr
2427 (TREE_OPERAND (array, 0),
2428 build_array_ref (TREE_OPERAND (array, 1), idx),
2429 build_array_ref (TREE_OPERAND (array, 2), idx));
2435 if (TREE_CODE (TREE_TYPE (array)) == ARRAY_TYPE
2436 && TREE_CODE (array) != INDIRECT_REF)
2440 /* Subscripting with type char is likely to lose
2441 on a machine where chars are signed.
2442 So warn on any machine, but optionally.
2443 Don't warn for unsigned char since that type is safe.
2444 Don't warn for signed char because anyone who uses that
2445 must have done so deliberately. */
2446 if (warn_char_subscripts
2447 && TYPE_MAIN_VARIANT (TREE_TYPE (idx)) == char_type_node)
2448 warning ("array subscript has type `char'");
2450 /* Apply default promotions *after* noticing character types. */
2451 idx = default_conversion (idx);
2453 if (TREE_CODE (TREE_TYPE (idx)) != INTEGER_TYPE)
2455 error ("array subscript is not an integer");
2456 return error_mark_node;
2459 /* An array that is indexed by a non-constant
2460 cannot be stored in a register; we must be able to do
2461 address arithmetic on its address.
2462 Likewise an array of elements of variable size. */
2463 if (TREE_CODE (idx) != INTEGER_CST
2464 || (COMPLETE_TYPE_P (TREE_TYPE (TREE_TYPE (array)))
2465 && (TREE_CODE (TYPE_SIZE (TREE_TYPE (TREE_TYPE (array))))
2468 if (!cxx_mark_addressable (array))
2469 return error_mark_node;
2472 /* An array that is indexed by a constant value which is not within
2473 the array bounds cannot be stored in a register either; because we
2474 would get a crash in store_bit_field/extract_bit_field when trying
2475 to access a non-existent part of the register. */
2476 if (TREE_CODE (idx) == INTEGER_CST
2477 && TYPE_VALUES (TREE_TYPE (array))
2478 && ! int_fits_type_p (idx, TYPE_VALUES (TREE_TYPE (array))))
2480 if (!cxx_mark_addressable (array))
2481 return error_mark_node;
2484 if (pedantic && !lvalue_p (array))
2485 pedwarn ("ISO C++ forbids subscripting non-lvalue array");
2487 /* Note in C++ it is valid to subscript a `register' array, since
2488 it is valid to take the address of something with that
2489 storage specification. */
2493 while (TREE_CODE (foo) == COMPONENT_REF)
2494 foo = TREE_OPERAND (foo, 0);
2495 if (TREE_CODE (foo) == VAR_DECL && DECL_REGISTER (foo))
2496 warning ("subscripting array declared `register'");
2499 type = TREE_TYPE (TREE_TYPE (array));
2500 rval = build (ARRAY_REF, type, array, idx);
2501 /* Array ref is const/volatile if the array elements are
2502 or if the array is.. */
2503 TREE_READONLY (rval)
2504 |= (CP_TYPE_CONST_P (type) | TREE_READONLY (array));
2505 TREE_SIDE_EFFECTS (rval)
2506 |= (CP_TYPE_VOLATILE_P (type) | TREE_SIDE_EFFECTS (array));
2507 TREE_THIS_VOLATILE (rval)
2508 |= (CP_TYPE_VOLATILE_P (type) | TREE_THIS_VOLATILE (array));
2509 return require_complete_type (fold (rval));
2513 tree ar = default_conversion (array);
2514 tree ind = default_conversion (idx);
2516 /* Put the integer in IND to simplify error checking. */
2517 if (TREE_CODE (TREE_TYPE (ar)) == INTEGER_TYPE)
2524 if (ar == error_mark_node)
2527 if (TREE_CODE (TREE_TYPE (ar)) != POINTER_TYPE)
2529 error ("subscripted value is neither array nor pointer");
2530 return error_mark_node;
2532 if (TREE_CODE (TREE_TYPE (ind)) != INTEGER_TYPE)
2534 error ("array subscript is not an integer");
2535 return error_mark_node;
2538 return build_indirect_ref (cp_build_binary_op (PLUS_EXPR, ar, ind),
2543 /* Resolve a pointer to member function. INSTANCE is the object
2544 instance to use, if the member points to a virtual member.
2546 This used to avoid checking for virtual functions if basetype
2547 has no virtual functions, according to an earlier ANSI draft.
2548 With the final ISO C++ rules, such an optimization is
2549 incorrect: A pointer to a derived member can be static_cast
2550 to pointer-to-base-member, as long as the dynamic object
2551 later has the right member. */
2554 get_member_function_from_ptrfunc (instance_ptrptr, function)
2555 tree *instance_ptrptr;
2558 if (TREE_CODE (function) == OFFSET_REF)
2559 function = TREE_OPERAND (function, 1);
2561 if (TYPE_PTRMEMFUNC_P (TREE_TYPE (function)))
2563 tree idx, delta, e1, e2, e3, vtbl, basetype;
2564 tree fntype = TYPE_PTRMEMFUNC_FN_TYPE (TREE_TYPE (function));
2566 tree instance_ptr = *instance_ptrptr;
2567 tree instance_save_expr = 0;
2568 if (instance_ptr == error_mark_node)
2570 if (TREE_CODE (function) == PTRMEM_CST)
2572 /* Extracting the function address from a pmf is only
2573 allowed with -Wno-pmf-conversions. It only works for
2575 e1 = build_addr_func (PTRMEM_CST_MEMBER (function));
2576 e1 = convert (fntype, e1);
2581 error ("object missing in use of `%E'", function);
2582 return error_mark_node;
2586 if (TREE_SIDE_EFFECTS (instance_ptr))
2587 instance_ptr = instance_save_expr = save_expr (instance_ptr);
2589 if (TREE_SIDE_EFFECTS (function))
2590 function = save_expr (function);
2592 /* Start by extracting all the information from the PMF itself. */
2593 e3 = PFN_FROM_PTRMEMFUNC (function);
2594 delta = build_ptrmemfunc_access_expr (function, delta_identifier);
2595 idx = build1 (NOP_EXPR, vtable_index_type, e3);
2596 switch (TARGET_PTRMEMFUNC_VBIT_LOCATION)
2598 case ptrmemfunc_vbit_in_pfn:
2599 e1 = cp_build_binary_op (BIT_AND_EXPR, idx, integer_one_node);
2600 idx = cp_build_binary_op (MINUS_EXPR, idx, integer_one_node);
2603 case ptrmemfunc_vbit_in_delta:
2604 e1 = cp_build_binary_op (BIT_AND_EXPR, delta, integer_one_node);
2605 delta = cp_build_binary_op (RSHIFT_EXPR, delta, integer_one_node);
2612 /* Convert down to the right base before using the instance. First
2614 basetype = TYPE_METHOD_BASETYPE (TREE_TYPE (fntype));
2615 basetype = lookup_base (TREE_TYPE (TREE_TYPE (instance_ptr)),
2616 basetype, ba_check, NULL);
2617 instance_ptr = build_base_path (PLUS_EXPR, instance_ptr, basetype, 1);
2618 if (instance_ptr == error_mark_node)
2619 return error_mark_node;
2620 /* ...and then the delta in the PMF. */
2621 instance_ptr = build (PLUS_EXPR, TREE_TYPE (instance_ptr),
2622 instance_ptr, delta);
2624 /* Hand back the adjusted 'this' argument to our caller. */
2625 *instance_ptrptr = instance_ptr;
2627 /* Next extract the vtable pointer from the object. */
2628 vtbl = build1 (NOP_EXPR, build_pointer_type (vtbl_ptr_type_node),
2630 vtbl = build_indirect_ref (vtbl, NULL);
2632 /* Finally, extract the function pointer from the vtable. */
2633 e2 = fold (build (PLUS_EXPR, TREE_TYPE (vtbl), vtbl, idx));
2634 e2 = build_indirect_ref (e2, NULL);
2635 TREE_CONSTANT (e2) = 1;
2637 /* When using function descriptors, the address of the
2638 vtable entry is treated as a function pointer. */
2639 if (TARGET_VTABLE_USES_DESCRIPTORS)
2640 e2 = build1 (NOP_EXPR, TREE_TYPE (e2),
2641 build_unary_op (ADDR_EXPR, e2, /*noconvert=*/1));
2643 TREE_TYPE (e2) = TREE_TYPE (e3);
2644 e1 = build_conditional_expr (e1, e2, e3);
2646 /* Make sure this doesn't get evaluated first inside one of the
2647 branches of the COND_EXPR. */
2648 if (instance_save_expr)
2649 e1 = build (COMPOUND_EXPR, TREE_TYPE (e1),
2650 instance_save_expr, e1);
2658 build_function_call (function, params)
2659 tree function, params;
2661 register tree fntype, fndecl;
2662 register tree coerced_params;
2664 tree name = NULL_TREE, assembler_name = NULL_TREE;
2666 tree original = function;
2668 /* build_c_cast puts on a NOP_EXPR to make the result not an lvalue.
2669 Strip such NOP_EXPRs, since FUNCTION is used in non-lvalue context. */
2670 if (TREE_CODE (function) == NOP_EXPR
2671 && TREE_TYPE (function) == TREE_TYPE (TREE_OPERAND (function, 0)))
2672 function = TREE_OPERAND (function, 0);
2674 if (TREE_CODE (function) == FUNCTION_DECL)
2676 name = DECL_NAME (function);
2677 assembler_name = DECL_ASSEMBLER_NAME (function);
2679 mark_used (function);
2682 /* Convert anything with function type to a pointer-to-function. */
2683 if (pedantic && DECL_MAIN_P (function))
2684 pedwarn ("ISO C++ forbids calling `::main' from within program");
2686 /* Differs from default_conversion by not setting TREE_ADDRESSABLE
2687 (because calling an inline function does not mean the function
2688 needs to be separately compiled). */
2690 if (DECL_INLINE (function))
2691 function = inline_conversion (function);
2693 function = build_addr_func (function);
2699 function = build_addr_func (function);
2702 if (function == error_mark_node)
2703 return error_mark_node;
2705 fntype = TREE_TYPE (function);
2707 if (TYPE_PTRMEMFUNC_P (fntype))
2709 error ("must use .* or ->* to call pointer-to-member function in `%E (...)'",
2711 return error_mark_node;
2714 is_method = (TREE_CODE (fntype) == POINTER_TYPE
2715 && TREE_CODE (TREE_TYPE (fntype)) == METHOD_TYPE);
2717 if (!((TREE_CODE (fntype) == POINTER_TYPE
2718 && TREE_CODE (TREE_TYPE (fntype)) == FUNCTION_TYPE)
2720 || TREE_CODE (function) == TEMPLATE_ID_EXPR))
2722 error ("`%E' cannot be used as a function", original);
2723 return error_mark_node;
2726 /* fntype now gets the type of function pointed to. */
2727 fntype = TREE_TYPE (fntype);
2729 /* Convert the parameters to the types declared in the
2730 function prototype, or apply default promotions. */
2732 coerced_params = convert_arguments (TYPE_ARG_TYPES (fntype),
2733 params, fndecl, LOOKUP_NORMAL);
2734 if (coerced_params == error_mark_node)
2735 return error_mark_node;
2737 /* Check for errors in format strings. */
2740 check_function_format (NULL, TYPE_ATTRIBUTES (fntype), coerced_params);
2742 /* Recognize certain built-in functions so we can make tree-codes
2743 other than CALL_EXPR. We do this when it enables fold-const.c
2744 to do something useful. */
2746 if (TREE_CODE (function) == ADDR_EXPR
2747 && TREE_CODE (TREE_OPERAND (function, 0)) == FUNCTION_DECL
2748 && DECL_BUILT_IN (TREE_OPERAND (function, 0)))
2750 result = expand_tree_builtin (TREE_OPERAND (function, 0),
2751 params, coerced_params);
2756 return build_cxx_call (function, params, coerced_params);
2759 /* Convert the actual parameter expressions in the list VALUES
2760 to the types in the list TYPELIST.
2761 If parmdecls is exhausted, or when an element has NULL as its type,
2762 perform the default conversions.
2764 NAME is an IDENTIFIER_NODE or 0. It is used only for error messages.
2766 This is also where warnings about wrong number of args are generated.
2768 Return a list of expressions for the parameters as converted.
2770 Both VALUES and the returned value are chains of TREE_LIST nodes
2771 with the elements of the list in the TREE_VALUE slots of those nodes.
2773 In C++, unspecified trailing parameters can be filled in with their
2774 default arguments, if such were specified. Do so here. */
2777 convert_arguments (typelist, values, fndecl, flags)
2778 tree typelist, values, fndecl;
2781 register tree typetail, valtail;
2782 register tree result = NULL_TREE;
2783 const char *called_thing = 0;
2786 /* Argument passing is always copy-initialization. */
2787 flags |= LOOKUP_ONLYCONVERTING;
2791 if (TREE_CODE (TREE_TYPE (fndecl)) == METHOD_TYPE)
2793 if (DECL_NAME (fndecl) == NULL_TREE
2794 || IDENTIFIER_HAS_TYPE_VALUE (DECL_NAME (fndecl)))
2795 called_thing = "constructor";
2797 called_thing = "member function";
2800 called_thing = "function";
2803 for (valtail = values, typetail = typelist;
2805 valtail = TREE_CHAIN (valtail), i++)
2807 register tree type = typetail ? TREE_VALUE (typetail) : 0;
2808 register tree val = TREE_VALUE (valtail);
2810 if (val == error_mark_node)
2811 return error_mark_node;
2813 if (type == void_type_node)
2817 cp_error_at ("too many arguments to %s `%+#D'", called_thing,
2819 error ("at this point in file");
2822 error ("too many arguments to function");
2823 /* In case anybody wants to know if this argument
2826 TREE_TYPE (tree_last (result)) = error_mark_node;
2830 if (TREE_CODE (val) == OFFSET_REF)
2831 val = resolve_offset_ref (val);
2833 /* build_c_cast puts on a NOP_EXPR to make the result not an lvalue.
2834 Strip such NOP_EXPRs, since VAL is used in non-lvalue context. */
2835 if (TREE_CODE (val) == NOP_EXPR
2836 && TREE_TYPE (val) == TREE_TYPE (TREE_OPERAND (val, 0))
2837 && (type == 0 || TREE_CODE (type) != REFERENCE_TYPE))
2838 val = TREE_OPERAND (val, 0);
2840 if (type == 0 || TREE_CODE (type) != REFERENCE_TYPE)
2842 if (TREE_CODE (TREE_TYPE (val)) == ARRAY_TYPE
2843 || TREE_CODE (TREE_TYPE (val)) == FUNCTION_TYPE
2844 || TREE_CODE (TREE_TYPE (val)) == METHOD_TYPE)
2845 val = default_conversion (val);
2848 if (val == error_mark_node)
2849 return error_mark_node;
2853 /* Formal parm type is specified by a function prototype. */
2856 if (!COMPLETE_TYPE_P (complete_type (type)))
2858 error ("parameter type of called function is incomplete");
2863 parmval = convert_for_initialization
2864 (NULL_TREE, type, val, flags,
2865 "argument passing", fndecl, i);
2866 parmval = convert_for_arg_passing (type, parmval);
2869 if (parmval == error_mark_node)
2870 return error_mark_node;
2872 result = tree_cons (NULL_TREE, parmval, result);
2876 if (TREE_CODE (TREE_TYPE (val)) == REFERENCE_TYPE)
2877 val = convert_from_reference (val);
2879 if (fndecl && DECL_BUILT_IN (fndecl)
2880 && DECL_FUNCTION_CODE (fndecl) == BUILT_IN_CONSTANT_P)
2881 /* Don't do ellipsis conversion for __built_in_constant_p
2882 as this will result in spurious warnings for non-POD
2884 val = require_complete_type (val);
2886 val = convert_arg_to_ellipsis (val);
2888 result = tree_cons (NULL_TREE, val, result);
2892 typetail = TREE_CHAIN (typetail);
2895 if (typetail != 0 && typetail != void_list_node)
2897 /* See if there are default arguments that can be used */
2898 if (TREE_PURPOSE (typetail)
2899 && TREE_CODE (TREE_PURPOSE (typetail)) != DEFAULT_ARG)
2901 for (; typetail != void_list_node; ++i)
2904 = convert_default_arg (TREE_VALUE (typetail),
2905 TREE_PURPOSE (typetail),
2908 if (parmval == error_mark_node)
2909 return error_mark_node;
2911 result = tree_cons (0, parmval, result);
2912 typetail = TREE_CHAIN (typetail);
2913 /* ends with `...'. */
2914 if (typetail == NULL_TREE)
2922 cp_error_at ("too few arguments to %s `%+#D'",
2923 called_thing, fndecl);
2924 error ("at this point in file");
2927 error ("too few arguments to function");
2928 return error_mark_list;
2932 return nreverse (result);
2935 /* Build a binary-operation expression, after performing default
2936 conversions on the operands. CODE is the kind of expression to build. */
2939 build_x_binary_op (code, arg1, arg2)
2940 enum tree_code code;
2943 if (processing_template_decl)
2944 return build_min_nt (code, arg1, arg2);
2946 return build_new_op (code, LOOKUP_NORMAL, arg1, arg2, NULL_TREE);
2952 build_template_expr (enum tree_code code, tree op0, tree op1, tree op2)
2956 /* If any of the operands is erroneous the result is erroneous too. */
2957 if (error_operand_p (op0)
2958 || (op1 && error_operand_p (op1))
2959 || (op2 && error_operand_p (op2)))
2960 return error_mark_node;
2962 if (dependent_type_p (TREE_TYPE (op0))
2963 || (op1 && dependent_type_p (TREE_TYPE (op1)))
2964 || (op2 && dependent_type_p (TREE_TYPE (op2))))
2965 /* If at least one operand has a dependent type, we cannot
2966 determine the type of the expression until instantiation time. */
2970 struct z_candidate *cand;
2975 /* None of the operands is dependent, so we can compute the type
2976 of the expression at this point. We must compute the type so
2977 that in things like:
2980 void f() { S<sizeof(I + 3)> s; ... }
2982 we can tell that the type of "s" is non-dependent.
2984 If we're processing a template argument, we do not want to
2985 actually change the operands in any way. Adding conversions,
2986 performing constant folding, etc., would all change mangled
2987 names. For example, in:
2990 void f(S<sizeof(3 + 4 + I)>);
2992 we need to determine that "3 + 4 + I" has type "int", without
2993 actually turning the expression into "7 + I". */
2994 cand = find_overloaded_op (code, op0, op1, op2);
2996 /* If an overloaded operator was found, the expression will
2997 have the type returned by the function. */
2998 type = non_reference (TREE_TYPE (cand->fn));
3001 /* There is no overloaded operator so we can just use the
3002 default rules for determining the type of the operand. */
3003 op0_type = TREE_TYPE (op0);
3004 op1_type = op1 ? TREE_TYPE (op1) : NULL_TREE;
3005 op2_type = op2 ? TREE_TYPE (op2) : NULL_TREE;
3013 The result of the assignment operation is the value
3014 stored in the left operand. */
3018 /* Implement this case. */
3020 case POSTINCREMENT_EXPR:
3021 case POSTDECREMENT_EXPR:
3024 The type of the result is the cv-unqualified version
3025 of the type of the operand. */
3026 type = TYPE_MAIN_VARIANT (op0_type);
3028 case PREINCREMENT_EXPR:
3029 case PREDECREMENT_EXPR:
3032 The value is the new value of the operand. */
3038 If the type of the expression is "pointer to T", the
3039 type of the result is "T". */
3040 type = TREE_TYPE (op0_type);
3045 If the type of the expression is "T", the type of the
3046 result is "pointer to T". */
3047 /* FIXME: Handle the pointer-to-member case. */
3050 /* FIXME: Implement this case. */
3056 The type of the result is that of the promoted left
3061 /* FIXME: Be careful of special pointer-arithmetic
3066 /* These are GNU extensions; the result type is computed
3067 as it would be for other arithmetic operators. */
3073 case TRUNC_DIV_EXPR:
3074 case TRUNC_MOD_EXPR:
3075 /* [expr.bit.and], [expr.xor], [expr.or], [expr.mul]
3077 The usual arithmetic conversions are performed on the
3078 operands and determine the type of the result. */
3079 /* FIXME: Check that this is possible. */
3080 type = type_after_usual_arithmetic_conversions (t1, t2);
3090 The type of the result is bool. */
3091 type = boolean_type_node;
3093 case TRUTH_ANDIF_EXPR:
3094 case TRUTH_ORIF_EXPR:
3095 /* [expr.log.and], [expr.log.org]
3097 The result is a bool. */
3098 type = boolean_type_node;
3101 /* FIXME: Handle special rules for conditioanl
3110 /* If the type of the expression could not be determined,
3111 something is wrong. */
3114 /* If the type is erroneous, the expression is erroneous
3116 if (type == error_mark_node)
3117 return error_mark_node;
3121 return build_min (code, type, op0, op1, op2, NULL_TREE);
3126 /* Build a binary-operation expression without default conversions.
3127 CODE is the kind of expression to build.
3128 This function differs from `build' in several ways:
3129 the data type of the result is computed and recorded in it,
3130 warnings are generated if arg data types are invalid,
3131 special handling for addition and subtraction of pointers is known,
3132 and some optimization is done (operations on narrow ints
3133 are done in the narrower type when that gives the same result).
3134 Constant folding is also done before the result is returned.
3136 Note that the operands will never have enumeral types
3137 because either they have just had the default conversions performed
3138 or they have both just been converted to some other type in which
3139 the arithmetic is to be done.
3141 C++: must do special pointer arithmetic when implementing
3142 multiple inheritance, and deal with pointer to member functions. */
3145 build_binary_op (code, orig_op0, orig_op1, convert_p)
3146 enum tree_code code;
3147 tree orig_op0, orig_op1;
3148 int convert_p ATTRIBUTE_UNUSED;
3151 register enum tree_code code0, code1;
3154 /* Expression code to give to the expression when it is built.
3155 Normally this is CODE, which is what the caller asked for,
3156 but in some special cases we change it. */
3157 register enum tree_code resultcode = code;
3159 /* Data type in which the computation is to be performed.
3160 In the simplest cases this is the common type of the arguments. */
3161 register tree result_type = NULL;
3163 /* Nonzero means operands have already been type-converted
3164 in whatever way is necessary.
3165 Zero means they need to be converted to RESULT_TYPE. */
3168 /* Nonzero means create the expression with this type, rather than
3170 tree build_type = 0;
3172 /* Nonzero means after finally constructing the expression
3173 convert it to this type. */
3174 tree final_type = 0;
3176 /* Nonzero if this is an operation like MIN or MAX which can
3177 safely be computed in short if both args are promoted shorts.
3178 Also implies COMMON.
3179 -1 indicates a bitwise operation; this makes a difference
3180 in the exact conditions for when it is safe to do the operation
3181 in a narrower mode. */
3184 /* Nonzero if this is a comparison operation;
3185 if both args are promoted shorts, compare the original shorts.
3186 Also implies COMMON. */
3187 int short_compare = 0;
3189 /* Nonzero if this is a right-shift operation, which can be computed on the
3190 original short and then promoted if the operand is a promoted short. */
3191 int short_shift = 0;
3193 /* Nonzero means set RESULT_TYPE to the common type of the args. */
3196 /* Apply default conversions. */
3200 if (code == TRUTH_AND_EXPR || code == TRUTH_ANDIF_EXPR
3201 || code == TRUTH_OR_EXPR || code == TRUTH_ORIF_EXPR
3202 || code == TRUTH_XOR_EXPR)
3204 if (!really_overloaded_fn (op0))
3205 op0 = decay_conversion (op0);
3206 if (!really_overloaded_fn (op1))
3207 op1 = decay_conversion (op1);
3211 if (!really_overloaded_fn (op0))
3212 op0 = default_conversion (op0);
3213 if (!really_overloaded_fn (op1))
3214 op1 = default_conversion (op1);
3217 /* Strip NON_LVALUE_EXPRs, etc., since we aren't using as an lvalue. */
3218 STRIP_TYPE_NOPS (op0);
3219 STRIP_TYPE_NOPS (op1);
3221 /* DTRT if one side is an overloaded function, but complain about it. */
3222 if (type_unknown_p (op0))
3224 tree t = instantiate_type (TREE_TYPE (op1), op0, tf_none);
3225 if (t != error_mark_node)
3227 pedwarn ("assuming cast to type `%T' from overloaded function",
3232 if (type_unknown_p (op1))
3234 tree t = instantiate_type (TREE_TYPE (op0), op1, tf_none);
3235 if (t != error_mark_node)
3237 pedwarn ("assuming cast to type `%T' from overloaded function",
3243 type0 = TREE_TYPE (op0);
3244 type1 = TREE_TYPE (op1);
3246 /* The expression codes of the data types of the arguments tell us
3247 whether the arguments are integers, floating, pointers, etc. */
3248 code0 = TREE_CODE (type0);
3249 code1 = TREE_CODE (type1);
3251 /* If an error was already reported for one of the arguments,
3252 avoid reporting another error. */
3254 if (code0 == ERROR_MARK || code1 == ERROR_MARK)
3255 return error_mark_node;
3260 /* Handle the pointer + int case. */
3261 if (code0 == POINTER_TYPE && code1 == INTEGER_TYPE)
3262 return cp_pointer_int_sum (PLUS_EXPR, op0, op1);
3263 else if (code1 == POINTER_TYPE && code0 == INTEGER_TYPE)
3264 return cp_pointer_int_sum (PLUS_EXPR, op1, op0);
3270 /* Subtraction of two similar pointers.
3271 We must subtract them as integers, then divide by object size. */
3272 if (code0 == POINTER_TYPE && code1 == POINTER_TYPE
3273 && comp_target_types (type0, type1, 1))
3274 return pointer_diff (op0, op1, common_type (type0, type1));
3275 /* Handle pointer minus int. Just like pointer plus int. */
3276 else if (code0 == POINTER_TYPE && code1 == INTEGER_TYPE)
3277 return cp_pointer_int_sum (MINUS_EXPR, op0, op1);
3286 case TRUNC_DIV_EXPR:
3288 case FLOOR_DIV_EXPR:
3289 case ROUND_DIV_EXPR:
3290 case EXACT_DIV_EXPR:
3291 if ((code0 == INTEGER_TYPE || code0 == REAL_TYPE
3292 || code0 == COMPLEX_TYPE)
3293 && (code1 == INTEGER_TYPE || code1 == REAL_TYPE
3294 || code1 == COMPLEX_TYPE))
3296 if (TREE_CODE (op1) == INTEGER_CST && integer_zerop (op1))
3297 warning ("division by zero in `%E / 0'", op0);
3298 else if (TREE_CODE (op1) == REAL_CST && real_zerop (op1))
3299 warning ("division by zero in `%E / 0.'", op0);
3301 if (!(code0 == INTEGER_TYPE && code1 == INTEGER_TYPE))
3302 resultcode = RDIV_EXPR;
3304 /* When dividing two signed integers, we have to promote to int.
3305 unless we divide by a constant != -1. Note that default
3306 conversion will have been performed on the operands at this
3307 point, so we have to dig out the original type to find out if
3309 shorten = ((TREE_CODE (op0) == NOP_EXPR
3310 && TREE_UNSIGNED (TREE_TYPE (TREE_OPERAND (op0, 0))))
3311 || (TREE_CODE (op1) == INTEGER_CST
3312 && ! integer_all_onesp (op1)));
3319 case BIT_ANDTC_EXPR:
3322 if (code0 == INTEGER_TYPE && code1 == INTEGER_TYPE)
3326 case TRUNC_MOD_EXPR:
3327 case FLOOR_MOD_EXPR:
3328 if (code1 == INTEGER_TYPE && integer_zerop (op1))
3329 warning ("division by zero in `%E %% 0'", op0);
3330 else if (code1 == REAL_TYPE && real_zerop (op1))
3331 warning ("division by zero in `%E %% 0.'", op0);
3333 if (code0 == INTEGER_TYPE && code1 == INTEGER_TYPE)
3335 /* Although it would be tempting to shorten always here, that loses
3336 on some targets, since the modulo instruction is undefined if the
3337 quotient can't be represented in the computation mode. We shorten
3338 only if unsigned or if dividing by something we know != -1. */
3339 shorten = ((TREE_CODE (op0) == NOP_EXPR
3340 && TREE_UNSIGNED (TREE_TYPE (TREE_OPERAND (op0, 0))))
3341 || (TREE_CODE (op1) == INTEGER_CST
3342 && ! integer_all_onesp (op1)));
3347 case TRUTH_ANDIF_EXPR:
3348 case TRUTH_ORIF_EXPR:
3349 case TRUTH_AND_EXPR:
3351 result_type = boolean_type_node;
3354 /* Shift operations: result has same type as first operand;
3355 always convert second operand to int.
3356 Also set SHORT_SHIFT if shifting rightward. */
3359 if (code0 == INTEGER_TYPE && code1 == INTEGER_TYPE)
3361 result_type = type0;
3362 if (TREE_CODE (op1) == INTEGER_CST)
3364 if (tree_int_cst_lt (op1, integer_zero_node))
3365 warning ("right shift count is negative");
3368 if (! integer_zerop (op1))
3370 if (compare_tree_int (op1, TYPE_PRECISION (type0)) >= 0)
3371 warning ("right shift count >= width of type");
3374 /* Convert the shift-count to an integer, regardless of
3375 size of value being shifted. */
3376 if (TYPE_MAIN_VARIANT (TREE_TYPE (op1)) != integer_type_node)
3377 op1 = cp_convert (integer_type_node, op1);
3378 /* Avoid converting op1 to result_type later. */
3384 if (code0 == INTEGER_TYPE && code1 == INTEGER_TYPE)
3386 result_type = type0;
3387 if (TREE_CODE (op1) == INTEGER_CST)
3389 if (tree_int_cst_lt (op1, integer_zero_node))
3390 warning ("left shift count is negative");
3391 else if (compare_tree_int (op1, TYPE_PRECISION (type0)) >= 0)
3392 warning ("left shift count >= width of type");
3394 /* Convert the shift-count to an integer, regardless of
3395 size of value being shifted. */
3396 if (TYPE_MAIN_VARIANT (TREE_TYPE (op1)) != integer_type_node)
3397 op1 = cp_convert (integer_type_node, op1);
3398 /* Avoid converting op1 to result_type later. */
3405 if (code0 == INTEGER_TYPE && code1 == INTEGER_TYPE)
3407 result_type = type0;
3408 if (TREE_CODE (op1) == INTEGER_CST)
3410 if (tree_int_cst_lt (op1, integer_zero_node))
3411 warning ("%s rotate count is negative",
3412 (code == LROTATE_EXPR) ? "left" : "right");
3413 else if (compare_tree_int (op1, TYPE_PRECISION (type0)) >= 0)
3414 warning ("%s rotate count >= width of type",
3415 (code == LROTATE_EXPR) ? "left" : "right");
3417 /* Convert the shift-count to an integer, regardless of
3418 size of value being shifted. */
3419 if (TYPE_MAIN_VARIANT (TREE_TYPE (op1)) != integer_type_node)
3420 op1 = cp_convert (integer_type_node, op1);
3426 if (warn_float_equal && (code0 == REAL_TYPE || code1 == REAL_TYPE))
3427 warning ("comparing floating point with == or != is unsafe");
3429 build_type = boolean_type_node;
3430 if ((code0 == INTEGER_TYPE || code0 == REAL_TYPE
3431 || code0 == COMPLEX_TYPE)
3432 && (code1 == INTEGER_TYPE || code1 == REAL_TYPE
3433 || code1 == COMPLEX_TYPE))
3435 else if (code0 == POINTER_TYPE && code1 == POINTER_TYPE)
3436 result_type = composite_pointer_type (type0, type1, op0, op1,
3438 else if (code0 == POINTER_TYPE && null_ptr_cst_p (op1))
3439 result_type = type0;
3440 else if (code1 == POINTER_TYPE && null_ptr_cst_p (op0))
3441 result_type = type1;
3442 else if (code0 == POINTER_TYPE && code1 == INTEGER_TYPE)
3444 result_type = type0;
3445 error ("ISO C++ forbids comparison between pointer and integer");
3447 else if (code0 == INTEGER_TYPE && code1 == POINTER_TYPE)
3449 result_type = type1;
3450 error ("ISO C++ forbids comparison between pointer and integer");
3452 else if (TYPE_PTRMEMFUNC_P (type0) && null_ptr_cst_p (op1))
3454 op0 = build_ptrmemfunc_access_expr (op0, pfn_identifier);
3455 op1 = cp_convert (TREE_TYPE (op0), integer_zero_node);
3456 result_type = TREE_TYPE (op0);
3458 else if (TYPE_PTRMEMFUNC_P (type1) && null_ptr_cst_p (op0))
3459 return cp_build_binary_op (code, op1, op0);
3460 else if (TYPE_PTRMEMFUNC_P (type0) && TYPE_PTRMEMFUNC_P (type1)
3461 && same_type_p (type0, type1))
3463 /* E will be the final comparison. */
3465 /* E1 and E2 are for scratch. */
3473 if (TREE_SIDE_EFFECTS (op0))
3474 op0 = save_expr (op0);
3475 if (TREE_SIDE_EFFECTS (op1))
3476 op1 = save_expr (op1);
3481 && (!op0.pfn || op0.delta == op1.delta))
3483 The reason for the `!op0.pfn' bit is that a NULL
3484 pointer-to-member is any member with a zero PFN; the
3485 DELTA field is unspecified. */
3486 pfn0 = pfn_from_ptrmemfunc (op0);
3487 pfn1 = pfn_from_ptrmemfunc (op1);
3488 delta0 = build_ptrmemfunc_access_expr (op0,
3490 delta1 = build_ptrmemfunc_access_expr (op1,
3492 e1 = cp_build_binary_op (EQ_EXPR, delta0, delta1);
3493 e2 = cp_build_binary_op (EQ_EXPR,
3495 cp_convert (TREE_TYPE (pfn0),
3496 integer_zero_node));
3497 e1 = cp_build_binary_op (TRUTH_ORIF_EXPR, e1, e2);
3498 e2 = build (EQ_EXPR, boolean_type_node, pfn0, pfn1);
3499 e = cp_build_binary_op (TRUTH_ANDIF_EXPR, e2, e1);
3500 if (code == EQ_EXPR)
3502 return cp_build_binary_op (EQ_EXPR, e, integer_zero_node);
3504 else if ((TYPE_PTRMEMFUNC_P (type0)
3505 && same_type_p (TYPE_PTRMEMFUNC_FN_TYPE (type0), type1))
3506 || (TYPE_PTRMEMFUNC_P (type1)
3507 && same_type_p (TYPE_PTRMEMFUNC_FN_TYPE (type1), type0)))
3513 if ((code0 == INTEGER_TYPE || code0 == REAL_TYPE)
3514 && (code1 == INTEGER_TYPE || code1 == REAL_TYPE))
3516 else if (code0 == POINTER_TYPE && code1 == POINTER_TYPE)
3517 result_type = composite_pointer_type (type0, type1, op0, op1,
3525 build_type = boolean_type_node;
3526 if ((code0 == INTEGER_TYPE || code0 == REAL_TYPE)
3527 && (code1 == INTEGER_TYPE || code1 == REAL_TYPE))
3529 else if (code0 == POINTER_TYPE && code1 == POINTER_TYPE)
3530 result_type = composite_pointer_type (type0, type1, op0, op1,
3532 else if (code0 == POINTER_TYPE && TREE_CODE (op1) == INTEGER_CST
3533 && integer_zerop (op1))
3534 result_type = type0;
3535 else if (code1 == POINTER_TYPE && TREE_CODE (op0) == INTEGER_CST
3536 && integer_zerop (op0))
3537 result_type = type1;
3538 else if (code0 == POINTER_TYPE && code1 == INTEGER_TYPE)
3540 result_type = type0;
3541 pedwarn ("ISO C++ forbids comparison between pointer and integer");
3543 else if (code0 == INTEGER_TYPE && code1 == POINTER_TYPE)
3545 result_type = type1;
3546 pedwarn ("ISO C++ forbids comparison between pointer and integer");
3550 case UNORDERED_EXPR:
3557 build_type = integer_type_node;
3558 if (code0 != REAL_TYPE || code1 != REAL_TYPE)
3560 error ("unordered comparison on non-floating point argument");
3561 return error_mark_node;
3570 if ((code0 == INTEGER_TYPE || code0 == REAL_TYPE || code0 == COMPLEX_TYPE)
3572 (code1 == INTEGER_TYPE || code1 == REAL_TYPE || code1 == COMPLEX_TYPE))
3574 int none_complex = (code0 != COMPLEX_TYPE && code1 != COMPLEX_TYPE);
3576 if (shorten || common || short_compare)
3577 result_type = common_type (type0, type1);
3579 /* For certain operations (which identify themselves by shorten != 0)
3580 if both args were extended from the same smaller type,
3581 do the arithmetic in that type and then extend.
3583 shorten !=0 and !=1 indicates a bitwise operation.
3584 For them, this optimization is safe only if
3585 both args are zero-extended or both are sign-extended.
3586 Otherwise, we might change the result.
3587 Eg, (short)-1 | (unsigned short)-1 is (int)-1
3588 but calculated in (unsigned short) it would be (unsigned short)-1. */
3590 if (shorten && none_complex)
3592 int unsigned0, unsigned1;
3593 tree arg0 = get_narrower (op0, &unsigned0);
3594 tree arg1 = get_narrower (op1, &unsigned1);
3595 /* UNS is 1 if the operation to be done is an unsigned one. */
3596 int uns = TREE_UNSIGNED (result_type);
3599 final_type = result_type;
3601 /* Handle the case that OP0 does not *contain* a conversion
3602 but it *requires* conversion to FINAL_TYPE. */
3604 if (op0 == arg0 && TREE_TYPE (op0) != final_type)
3605 unsigned0 = TREE_UNSIGNED (TREE_TYPE (op0));
3606 if (op1 == arg1 && TREE_TYPE (op1) != final_type)
3607 unsigned1 = TREE_UNSIGNED (TREE_TYPE (op1));
3609 /* Now UNSIGNED0 is 1 if ARG0 zero-extends to FINAL_TYPE. */
3611 /* For bitwise operations, signedness of nominal type
3612 does not matter. Consider only how operands were extended. */
3616 /* Note that in all three cases below we refrain from optimizing
3617 an unsigned operation on sign-extended args.
3618 That would not be valid. */
3620 /* Both args variable: if both extended in same way
3621 from same width, do it in that width.
3622 Do it unsigned if args were zero-extended. */
3623 if ((TYPE_PRECISION (TREE_TYPE (arg0))
3624 < TYPE_PRECISION (result_type))
3625 && (TYPE_PRECISION (TREE_TYPE (arg1))
3626 == TYPE_PRECISION (TREE_TYPE (arg0)))
3627 && unsigned0 == unsigned1
3628 && (unsigned0 || !uns))
3629 result_type = c_common_signed_or_unsigned_type
3630 (unsigned0, common_type (TREE_TYPE (arg0), TREE_TYPE (arg1)));
3631 else if (TREE_CODE (arg0) == INTEGER_CST
3632 && (unsigned1 || !uns)
3633 && (TYPE_PRECISION (TREE_TYPE (arg1))
3634 < TYPE_PRECISION (result_type))
3635 && (type = c_common_signed_or_unsigned_type
3636 (unsigned1, TREE_TYPE (arg1)),
3637 int_fits_type_p (arg0, type)))
3639 else if (TREE_CODE (arg1) == INTEGER_CST
3640 && (unsigned0 || !uns)
3641 && (TYPE_PRECISION (TREE_TYPE (arg0))
3642 < TYPE_PRECISION (result_type))
3643 && (type = c_common_signed_or_unsigned_type
3644 (unsigned0, TREE_TYPE (arg0)),
3645 int_fits_type_p (arg1, type)))
3649 /* Shifts can be shortened if shifting right. */
3654 tree arg0 = get_narrower (op0, &unsigned_arg);
3656 final_type = result_type;
3658 if (arg0 == op0 && final_type == TREE_TYPE (op0))
3659 unsigned_arg = TREE_UNSIGNED (TREE_TYPE (op0));
3661 if (TYPE_PRECISION (TREE_TYPE (arg0)) < TYPE_PRECISION (result_type)
3662 /* We can shorten only if the shift count is less than the
3663 number of bits in the smaller type size. */
3664 && compare_tree_int (op1, TYPE_PRECISION (TREE_TYPE (arg0))) < 0
3665 /* If arg is sign-extended and then unsigned-shifted,
3666 we can simulate this with a signed shift in arg's type
3667 only if the extended result is at least twice as wide
3668 as the arg. Otherwise, the shift could use up all the
3669 ones made by sign-extension and bring in zeros.
3670 We can't optimize that case at all, but in most machines
3671 it never happens because available widths are 2**N. */
3672 && (!TREE_UNSIGNED (final_type)
3674 || (((unsigned) 2 * TYPE_PRECISION (TREE_TYPE (arg0)))
3675 <= TYPE_PRECISION (result_type))))
3677 /* Do an unsigned shift if the operand was zero-extended. */
3679 = c_common_signed_or_unsigned_type (unsigned_arg,
3681 /* Convert value-to-be-shifted to that type. */
3682 if (TREE_TYPE (op0) != result_type)
3683 op0 = cp_convert (result_type, op0);
3688 /* Comparison operations are shortened too but differently.
3689 They identify themselves by setting short_compare = 1. */
3693 /* Don't write &op0, etc., because that would prevent op0
3694 from being kept in a register.
3695 Instead, make copies of the our local variables and
3696 pass the copies by reference, then copy them back afterward. */
3697 tree xop0 = op0, xop1 = op1, xresult_type = result_type;
3698 enum tree_code xresultcode = resultcode;
3700 = shorten_compare (&xop0, &xop1, &xresult_type, &xresultcode);
3702 return cp_convert (boolean_type_node, val);
3703 op0 = xop0, op1 = xop1;
3705 resultcode = xresultcode;
3708 if ((short_compare || code == MIN_EXPR || code == MAX_EXPR)
3709 && warn_sign_compare)
3711 int op0_signed = ! TREE_UNSIGNED (TREE_TYPE (orig_op0));
3712 int op1_signed = ! TREE_UNSIGNED (TREE_TYPE (orig_op1));
3714 int unsignedp0, unsignedp1;
3715 tree primop0 = get_narrower (op0, &unsignedp0);
3716 tree primop1 = get_narrower (op1, &unsignedp1);
3718 /* Check for comparison of different enum types. */
3719 if (TREE_CODE (TREE_TYPE (orig_op0)) == ENUMERAL_TYPE
3720 && TREE_CODE (TREE_TYPE (orig_op1)) == ENUMERAL_TYPE
3721 && TYPE_MAIN_VARIANT (TREE_TYPE (orig_op0))
3722 != TYPE_MAIN_VARIANT (TREE_TYPE (orig_op1)))
3724 warning ("comparison between types `%#T' and `%#T'",
3725 TREE_TYPE (orig_op0), TREE_TYPE (orig_op1));
3728 /* Give warnings for comparisons between signed and unsigned
3729 quantities that may fail. */
3730 /* Do the checking based on the original operand trees, so that
3731 casts will be considered, but default promotions won't be. */
3733 /* Do not warn if the comparison is being done in a signed type,
3734 since the signed type will only be chosen if it can represent
3735 all the values of the unsigned type. */
3736 if (! TREE_UNSIGNED (result_type))
3738 /* Do not warn if both operands are unsigned. */
3739 else if (op0_signed == op1_signed)
3741 /* Do not warn if the signed quantity is an unsuffixed
3742 integer literal (or some static constant expression
3743 involving such literals or a conditional expression
3744 involving such literals) and it is non-negative. */
3745 else if ((op0_signed && tree_expr_nonnegative_p (orig_op0))
3746 || (op1_signed && tree_expr_nonnegative_p (orig_op1)))
3748 /* Do not warn if the comparison is an equality operation,
3749 the unsigned quantity is an integral constant and it does
3750 not use the most significant bit of result_type. */
3751 else if ((resultcode == EQ_EXPR || resultcode == NE_EXPR)
3752 && ((op0_signed && TREE_CODE (orig_op1) == INTEGER_CST
3753 && int_fits_type_p (orig_op1, c_common_signed_type
3755 || (op1_signed && TREE_CODE (orig_op0) == INTEGER_CST
3756 && int_fits_type_p (orig_op0, c_common_signed_type
3760 warning ("comparison between signed and unsigned integer expressions");
3762 /* Warn if two unsigned values are being compared in a size
3763 larger than their original size, and one (and only one) is the
3764 result of a `~' operator. This comparison will always fail.
3766 Also warn if one operand is a constant, and the constant does not
3767 have all bits set that are set in the ~ operand when it is
3770 if ((TREE_CODE (primop0) == BIT_NOT_EXPR)
3771 ^ (TREE_CODE (primop1) == BIT_NOT_EXPR))
3773 if (TREE_CODE (primop0) == BIT_NOT_EXPR)
3774 primop0 = get_narrower (TREE_OPERAND (op0, 0), &unsignedp0);
3775 if (TREE_CODE (primop1) == BIT_NOT_EXPR)
3776 primop1 = get_narrower (TREE_OPERAND (op1, 0), &unsignedp1);
3778 if (host_integerp (primop0, 0) || host_integerp (primop1, 0))
3781 HOST_WIDE_INT constant, mask;
3785 if (host_integerp (primop0, 0))
3788 unsignedp = unsignedp1;
3789 constant = tree_low_cst (primop0, 0);
3794 unsignedp = unsignedp0;
3795 constant = tree_low_cst (primop1, 0);
3798 bits = TYPE_PRECISION (TREE_TYPE (primop));
3799 if (bits < TYPE_PRECISION (result_type)
3800 && bits < HOST_BITS_PER_LONG && unsignedp)
3802 mask = (~ (HOST_WIDE_INT) 0) << bits;
3803 if ((mask & constant) != mask)
3804 warning ("comparison of promoted ~unsigned with constant");
3807 else if (unsignedp0 && unsignedp1
3808 && (TYPE_PRECISION (TREE_TYPE (primop0))
3809 < TYPE_PRECISION (result_type))
3810 && (TYPE_PRECISION (TREE_TYPE (primop1))
3811 < TYPE_PRECISION (result_type)))
3812 warning ("comparison of promoted ~unsigned with unsigned");
3817 /* At this point, RESULT_TYPE must be nonzero to avoid an error message.
3818 If CONVERTED is zero, both args will be converted to type RESULT_TYPE.
3819 Then the expression will be built.
3820 It will be given type FINAL_TYPE if that is nonzero;
3821 otherwise, it will be given type RESULT_TYPE. */
3825 error ("invalid operands of types `%T' and `%T' to binary `%O'",
3826 TREE_TYPE (orig_op0), TREE_TYPE (orig_op1), code);
3827 return error_mark_node;
3830 /* Issue warnings about peculiar, but valid, uses of NULL. */
3831 if (/* It's reasonable to use pointer values as operands of &&
3832 and ||, so NULL is no exception. */
3833 !(code == TRUTH_ANDIF_EXPR || code == TRUTH_ORIF_EXPR)
3834 && (/* If OP0 is NULL and OP1 is not a pointer, or vice versa. */
3835 (orig_op0 == null_node
3836 && TREE_CODE (TREE_TYPE (op1)) != POINTER_TYPE)
3837 /* Or vice versa. */
3838 || (orig_op1 == null_node
3839 && TREE_CODE (TREE_TYPE (op0)) != POINTER_TYPE)
3840 /* Or, both are NULL and the operation was not a comparison. */
3841 || (orig_op0 == null_node && orig_op1 == null_node
3842 && code != EQ_EXPR && code != NE_EXPR)))
3843 /* Some sort of arithmetic operation involving NULL was
3844 performed. Note that pointer-difference and pointer-addition
3845 have already been handled above, and so we don't end up here in
3847 warning ("NULL used in arithmetic");
3851 if (TREE_TYPE (op0) != result_type)
3852 op0 = cp_convert (result_type, op0);
3853 if (TREE_TYPE (op1) != result_type)
3854 op1 = cp_convert (result_type, op1);
3856 if (op0 == error_mark_node || op1 == error_mark_node)
3857 return error_mark_node;
3860 if (build_type == NULL_TREE)
3861 build_type = result_type;
3864 register tree result = build (resultcode, build_type, op0, op1);
3865 register tree folded;
3867 folded = fold (result);
3868 if (folded == result)
3869 TREE_CONSTANT (folded) = TREE_CONSTANT (op0) & TREE_CONSTANT (op1);
3870 if (final_type != 0)
3871 return cp_convert (final_type, folded);
3876 /* Return a tree for the sum or difference (RESULTCODE says which)
3877 of pointer PTROP and integer INTOP. */
3880 cp_pointer_int_sum (resultcode, ptrop, intop)
3881 enum tree_code resultcode;
3882 register tree ptrop, intop;
3884 tree res_type = TREE_TYPE (ptrop);
3886 /* pointer_int_sum() uses size_in_bytes() on the TREE_TYPE(res_type)
3887 in certain circumstance (when it's valid to do so). So we need
3888 to make sure it's complete. We don't need to check here, if we
3889 can actually complete it at all, as those checks will be done in
3890 pointer_int_sum() anyway. */
3891 complete_type (TREE_TYPE (res_type));
3893 return pointer_int_sum (resultcode, ptrop, fold (intop));
3896 /* Return a tree for the difference of pointers OP0 and OP1.
3897 The resulting tree has type int. */
3900 pointer_diff (op0, op1, ptrtype)
3901 register tree op0, op1;
3902 register tree ptrtype;
3904 register tree result, folded;
3905 tree restype = ptrdiff_type_node;
3906 tree target_type = TREE_TYPE (ptrtype);
3908 if (!complete_type_or_else (target_type, NULL_TREE))
3909 return error_mark_node;
3911 if (pedantic || warn_pointer_arith)
3913 if (TREE_CODE (target_type) == VOID_TYPE)
3914 pedwarn ("ISO C++ forbids using pointer of type `void *' in subtraction");
3915 if (TREE_CODE (target_type) == FUNCTION_TYPE)
3916 pedwarn ("ISO C++ forbids using pointer to a function in subtraction");
3917 if (TREE_CODE (target_type) == METHOD_TYPE)
3918 pedwarn ("ISO C++ forbids using pointer to a method in subtraction");
3919 if (TREE_CODE (target_type) == OFFSET_TYPE)
3920 pedwarn ("ISO C++ forbids using pointer to a member in subtraction");
3923 /* First do the subtraction as integers;
3924 then drop through to build the divide operator. */
3926 op0 = cp_build_binary_op (MINUS_EXPR,
3927 cp_convert (restype, op0),
3928 cp_convert (restype, op1));
3930 /* This generates an error if op1 is a pointer to an incomplete type. */
3931 if (!COMPLETE_TYPE_P (TREE_TYPE (TREE_TYPE (op1))))
3932 error ("invalid use of a pointer to an incomplete type in pointer arithmetic");
3934 op1 = ((TREE_CODE (target_type) == VOID_TYPE
3935 || TREE_CODE (target_type) == FUNCTION_TYPE
3936 || TREE_CODE (target_type) == METHOD_TYPE
3937 || TREE_CODE (target_type) == OFFSET_TYPE)
3939 : size_in_bytes (target_type));
3941 /* Do the division. */
3943 result = build (EXACT_DIV_EXPR, restype, op0, cp_convert (restype, op1));
3945 folded = fold (result);
3946 if (folded == result)
3947 TREE_CONSTANT (folded) = TREE_CONSTANT (op0) & TREE_CONSTANT (op1);
3951 /* Construct and perhaps optimize a tree representation
3952 for a unary operation. CODE, a tree_code, specifies the operation
3953 and XARG is the operand. */
3956 build_x_unary_op (code, xarg)
3957 enum tree_code code;
3963 if (processing_template_decl)
3964 return build_min_nt (code, xarg, NULL_TREE);
3966 /* & rec, on incomplete RECORD_TYPEs is the simple opr &, not an
3968 if (code == ADDR_EXPR
3969 && TREE_CODE (xarg) != TEMPLATE_ID_EXPR
3970 && ((IS_AGGR_TYPE_CODE (TREE_CODE (TREE_TYPE (xarg)))
3971 && !COMPLETE_TYPE_P (TREE_TYPE (xarg)))
3972 || (TREE_CODE (xarg) == OFFSET_REF)))
3973 /* don't look for a function */;
3978 rval = build_new_op (code, LOOKUP_NORMAL, xarg,
3979 NULL_TREE, NULL_TREE);
3980 if (rval || code != ADDR_EXPR)
3983 if (code == ADDR_EXPR)
3985 /* A pointer to member-function can be formed only by saying
3987 if (!flag_ms_extensions && TREE_CODE (TREE_TYPE (xarg)) == METHOD_TYPE
3988 && (TREE_CODE (xarg) != OFFSET_REF || !PTRMEM_OK_P (xarg)))
3990 if (TREE_CODE (xarg) != OFFSET_REF)
3992 error ("invalid use of '%E' to form a pointer-to-member-function. Use a qualified-id.",
3994 return error_mark_node;
3998 error ("parenthesis around '%E' cannot be used to form a pointer-to-member-function",
4000 PTRMEM_OK_P (xarg) = 1;
4004 if (TREE_CODE (xarg) == OFFSET_REF)
4006 ptrmem = PTRMEM_OK_P (xarg);
4008 if (!ptrmem && !flag_ms_extensions
4009 && TREE_CODE (TREE_TYPE (TREE_OPERAND (xarg, 1))) == METHOD_TYPE)
4011 /* A single non-static member, make sure we don't allow a
4012 pointer-to-member. */
4013 xarg = build (OFFSET_REF, TREE_TYPE (xarg),
4014 TREE_OPERAND (xarg, 0),
4015 ovl_cons (TREE_OPERAND (xarg, 1), NULL_TREE));
4016 PTRMEM_OK_P (xarg) = ptrmem;
4020 else if (TREE_CODE (xarg) == TARGET_EXPR)
4021 warning ("taking address of temporary");
4023 exp = build_unary_op (code, xarg, 0);
4024 if (TREE_CODE (exp) == ADDR_EXPR)
4025 PTRMEM_OK_P (exp) = ptrmem;
4030 /* Like c_common_truthvalue_conversion, but handle pointer-to-member
4031 constants, where a null value is represented by an INTEGER_CST of
4035 cp_truthvalue_conversion (expr)
4038 tree type = TREE_TYPE (expr);
4039 if (TYPE_PTRMEM_P (type))
4040 return build_binary_op (NE_EXPR, expr, integer_zero_node, 1);
4042 return c_common_truthvalue_conversion (expr);
4045 /* Just like cp_truthvalue_conversion, but we want a CLEANUP_POINT_EXPR. */
4048 condition_conversion (expr)
4052 if (processing_template_decl)
4054 if (TREE_CODE (expr) == OFFSET_REF)
4055 expr = resolve_offset_ref (expr);
4056 t = perform_implicit_conversion (boolean_type_node, expr);
4057 t = fold (build1 (CLEANUP_POINT_EXPR, boolean_type_node, t));
4061 /* Return an ADDR_EXPR giving the address of T. This function
4062 attempts no optimizations or simplifications; it is a low-level
4066 build_address (tree t)
4070 if (error_operand_p (t) || !cxx_mark_addressable (t))
4071 return error_mark_node;
4073 addr = build1 (ADDR_EXPR,
4074 build_pointer_type (TREE_TYPE (t)),
4077 TREE_CONSTANT (addr) = 1;
4082 /* Return a NOP_EXPR converting EXPR to TYPE. */
4085 build_nop (tree type, tree expr)
4089 if (type == error_mark_node || error_operand_p (expr))
4092 nop = build1 (NOP_EXPR, type, expr);
4093 if (TREE_CONSTANT (expr))
4094 TREE_CONSTANT (nop) = 1;
4099 /* C++: Must handle pointers to members.
4101 Perhaps type instantiation should be extended to handle conversion
4102 from aggregates to types we don't yet know we want? (Or are those
4103 cases typically errors which should be reported?)
4105 NOCONVERT nonzero suppresses the default promotions
4106 (such as from short to int). */
4109 build_unary_op (code, xarg, noconvert)
4110 enum tree_code code;
4114 /* No default_conversion here. It causes trouble for ADDR_EXPR. */
4115 register tree arg = xarg;
4116 register tree argtype = 0;
4117 const char *errstring = NULL;
4120 if (arg == error_mark_node)
4121 return error_mark_node;
4126 /* This is used for unary plus, because a CONVERT_EXPR
4127 is enough to prevent anybody from looking inside for
4128 associativity, but won't generate any code. */
4129 if (!(arg = build_expr_type_conversion
4130 (WANT_ARITH | WANT_ENUM | WANT_POINTER, arg, true)))
4131 errstring = "wrong type argument to unary plus";
4135 arg = default_conversion (arg);
4136 arg = build1 (NON_LVALUE_EXPR, TREE_TYPE (arg), arg);
4137 TREE_CONSTANT (arg) = TREE_CONSTANT (TREE_OPERAND (arg, 0));
4142 if (!(arg = build_expr_type_conversion (WANT_ARITH | WANT_ENUM, arg, true)))
4143 errstring = "wrong type argument to unary minus";
4144 else if (!noconvert)
4145 arg = default_conversion (arg);
4149 if (TREE_CODE (TREE_TYPE (arg)) == COMPLEX_TYPE)
4153 arg = default_conversion (arg);
4155 else if (!(arg = build_expr_type_conversion (WANT_INT | WANT_ENUM,
4157 errstring = "wrong type argument to bit-complement";
4158 else if (!noconvert)
4159 arg = default_conversion (arg);
4163 if (!(arg = build_expr_type_conversion (WANT_ARITH | WANT_ENUM, arg, true)))
4164 errstring = "wrong type argument to abs";
4165 else if (!noconvert)
4166 arg = default_conversion (arg);
4170 /* Conjugating a real value is a no-op, but allow it anyway. */
4171 if (!(arg = build_expr_type_conversion (WANT_ARITH | WANT_ENUM, arg, true)))
4172 errstring = "wrong type argument to conjugation";
4173 else if (!noconvert)
4174 arg = default_conversion (arg);
4177 case TRUTH_NOT_EXPR:
4178 arg = cp_convert (boolean_type_node, arg);
4179 val = invert_truthvalue (arg);
4180 if (arg != error_mark_node)
4182 errstring = "in argument to unary !";
4189 if (TREE_CODE (arg) == COMPLEX_CST)
4190 return TREE_REALPART (arg);
4191 else if (TREE_CODE (TREE_TYPE (arg)) == COMPLEX_TYPE)
4192 return fold (build1 (REALPART_EXPR, TREE_TYPE (TREE_TYPE (arg)), arg));
4197 if (TREE_CODE (arg) == COMPLEX_CST)
4198 return TREE_IMAGPART (arg);
4199 else if (TREE_CODE (TREE_TYPE (arg)) == COMPLEX_TYPE)
4200 return fold (build1 (IMAGPART_EXPR, TREE_TYPE (TREE_TYPE (arg)), arg));
4202 return cp_convert (TREE_TYPE (arg), integer_zero_node);
4204 case PREINCREMENT_EXPR:
4205 case POSTINCREMENT_EXPR:
4206 case PREDECREMENT_EXPR:
4207 case POSTDECREMENT_EXPR:
4208 /* Handle complex lvalues (when permitted)
4209 by reduction to simpler cases. */
4211 val = unary_complex_lvalue (code, arg);
4215 /* Increment or decrement the real part of the value,
4216 and don't change the imaginary part. */
4217 if (TREE_CODE (TREE_TYPE (arg)) == COMPLEX_TYPE)
4221 arg = stabilize_reference (arg);
4222 real = build_unary_op (REALPART_EXPR, arg, 1);
4223 imag = build_unary_op (IMAGPART_EXPR, arg, 1);
4224 return build (COMPLEX_EXPR, TREE_TYPE (arg),
4225 build_unary_op (code, real, 1), imag);
4228 /* Report invalid types. */
4230 if (!(arg = build_expr_type_conversion (WANT_ARITH | WANT_POINTER,
4233 if (code == PREINCREMENT_EXPR)
4234 errstring ="no pre-increment operator for type";
4235 else if (code == POSTINCREMENT_EXPR)
4236 errstring ="no post-increment operator for type";
4237 else if (code == PREDECREMENT_EXPR)
4238 errstring ="no pre-decrement operator for type";
4240 errstring ="no post-decrement operator for type";
4244 /* Report something read-only. */
4246 if (CP_TYPE_CONST_P (TREE_TYPE (arg))
4247 || TREE_READONLY (arg))
4248 readonly_error (arg, ((code == PREINCREMENT_EXPR
4249 || code == POSTINCREMENT_EXPR)
4250 ? "increment" : "decrement"),
4255 tree result_type = TREE_TYPE (arg);
4257 arg = get_unwidened (arg, 0);
4258 argtype = TREE_TYPE (arg);
4260 /* ARM $5.2.5 last annotation says this should be forbidden. */
4261 if (TREE_CODE (argtype) == ENUMERAL_TYPE)
4262 pedwarn ("ISO C++ forbids %sing an enum",
4263 (code == PREINCREMENT_EXPR || code == POSTINCREMENT_EXPR)
4264 ? "increment" : "decrement");
4266 /* Compute the increment. */
4268 if (TREE_CODE (argtype) == POINTER_TYPE)
4270 enum tree_code tmp = TREE_CODE (TREE_TYPE (argtype));
4271 tree type = complete_type (TREE_TYPE (argtype));
4273 if (!COMPLETE_OR_VOID_TYPE_P (type))
4274 error ("cannot %s a pointer to incomplete type `%T'",
4275 ((code == PREINCREMENT_EXPR
4276 || code == POSTINCREMENT_EXPR)
4277 ? "increment" : "decrement"), TREE_TYPE (argtype));
4278 else if ((pedantic || warn_pointer_arith)
4279 && (tmp == FUNCTION_TYPE || tmp == METHOD_TYPE
4280 || tmp == VOID_TYPE || tmp == OFFSET_TYPE))
4281 pedwarn ("ISO C++ forbids %sing a pointer of type `%T'",
4282 ((code == PREINCREMENT_EXPR
4283 || code == POSTINCREMENT_EXPR)
4284 ? "increment" : "decrement"), argtype);
4285 inc = cxx_sizeof_nowarn (TREE_TYPE (argtype));
4288 inc = integer_one_node;
4290 inc = cp_convert (argtype, inc);
4292 /* Handle incrementing a cast-expression. */
4294 switch (TREE_CODE (arg))
4299 case FIX_TRUNC_EXPR:
4300 case FIX_FLOOR_EXPR:
4301 case FIX_ROUND_EXPR:
4304 tree incremented, modify, value, compound;
4305 if (! lvalue_p (arg) && pedantic)
4306 pedwarn ("cast to non-reference type used as lvalue");
4307 arg = stabilize_reference (arg);
4308 if (code == PREINCREMENT_EXPR || code == PREDECREMENT_EXPR)
4311 value = save_expr (arg);
4312 incremented = build (((code == PREINCREMENT_EXPR
4313 || code == POSTINCREMENT_EXPR)
4314 ? PLUS_EXPR : MINUS_EXPR),
4315 argtype, value, inc);
4317 modify = build_modify_expr (arg, NOP_EXPR, incremented);
4318 compound = build (COMPOUND_EXPR, TREE_TYPE (arg), modify, value);
4320 /* Eliminate warning about unused result of + or -. */
4321 TREE_NO_UNUSED_WARNING (compound) = 1;
4329 /* Complain about anything else that is not a true lvalue. */
4330 if (!lvalue_or_else (arg, ((code == PREINCREMENT_EXPR
4331 || code == POSTINCREMENT_EXPR)
4332 ? "increment" : "decrement")))
4333 return error_mark_node;
4335 /* Forbid using -- on `bool'. */
4336 if (TREE_TYPE (arg) == boolean_type_node)
4338 if (code == POSTDECREMENT_EXPR || code == PREDECREMENT_EXPR)
4340 error ("invalid use of `--' on bool variable `%D'", arg);
4341 return error_mark_node;
4344 /* This will only work if someone can convince Kenner to accept
4345 my patch to expand_increment. (jason) */
4346 val = build (code, TREE_TYPE (arg), arg, inc);
4348 val = boolean_increment (code, arg);
4352 val = build (code, TREE_TYPE (arg), arg, inc);
4354 TREE_SIDE_EFFECTS (val) = 1;
4355 return cp_convert (result_type, val);
4359 /* Note that this operation never does default_conversion
4360 regardless of NOCONVERT. */
4362 argtype = lvalue_type (arg);
4363 if (TREE_CODE (argtype) == REFERENCE_TYPE)
4367 build_pointer_type (TREE_TYPE (argtype)), arg);
4368 TREE_CONSTANT (arg) = TREE_CONSTANT (TREE_OPERAND (arg, 0));
4371 else if (pedantic && DECL_MAIN_P (arg))
4373 pedwarn ("ISO C++ forbids taking address of function `::main'");
4375 /* Let &* cancel out to simplify resulting code. */
4376 if (TREE_CODE (arg) == INDIRECT_REF)
4378 /* We don't need to have `current_class_ptr' wrapped in a
4379 NON_LVALUE_EXPR node. */
4380 if (arg == current_class_ref)
4381 return current_class_ptr;
4383 arg = TREE_OPERAND (arg, 0);
4384 if (TREE_CODE (TREE_TYPE (arg)) == REFERENCE_TYPE)
4388 build_pointer_type (TREE_TYPE (TREE_TYPE (arg))), arg);
4389 TREE_CONSTANT (arg) = TREE_CONSTANT (TREE_OPERAND (arg, 0));
4391 else if (lvalue_p (arg))
4392 /* Don't let this be an lvalue. */
4393 return non_lvalue (arg);
4397 /* For &x[y], return x+y */
4398 if (TREE_CODE (arg) == ARRAY_REF)
4400 if (!cxx_mark_addressable (TREE_OPERAND (arg, 0)))
4401 return error_mark_node;
4402 return cp_build_binary_op (PLUS_EXPR, TREE_OPERAND (arg, 0),
4403 TREE_OPERAND (arg, 1));
4406 /* Uninstantiated types are all functions. Taking the
4407 address of a function is a no-op, so just return the
4410 if (TREE_CODE (arg) == IDENTIFIER_NODE
4411 && IDENTIFIER_OPNAME_P (arg))
4414 /* We don't know the type yet, so just work around the problem.
4415 We know that this will resolve to an lvalue. */
4416 return build1 (ADDR_EXPR, unknown_type_node, arg);
4419 if (TREE_CODE (arg) == COMPONENT_REF && type_unknown_p (arg)
4420 && !really_overloaded_fn (TREE_OPERAND (arg, 1)))
4422 /* They're trying to take the address of a unique non-static
4423 member function. This is ill-formed (except in MS-land),
4424 but let's try to DTRT.
4425 Note: We only handle unique functions here because we don't
4426 want to complain if there's a static overload; non-unique
4427 cases will be handled by instantiate_type. But we need to
4428 handle this case here to allow casts on the resulting PMF.
4429 We could defer this in non-MS mode, but it's easier to give
4430 a useful error here. */
4432 /* Inside constant member functions, the `this' pointer
4433 contains an extra const qualifier. TYPE_MAIN_VARIANT
4434 is used here to remove this const from the diagnostics
4435 and the created OFFSET_REF. */
4436 tree base = TYPE_MAIN_VARIANT (TREE_TYPE (TREE_OPERAND (arg, 0)));
4437 tree name = DECL_NAME (get_first_fn (TREE_OPERAND (arg, 1)));
4439 if (! flag_ms_extensions)
4441 if (current_class_type
4442 && TREE_OPERAND (arg, 0) == current_class_ref)
4443 /* An expression like &memfn. */
4444 pedwarn ("ISO C++ forbids taking the address of an unqualified"
4445 " or parenthesized non-static member function to form"
4446 " a pointer to member function. Say `&%T::%D'",
4449 pedwarn ("ISO C++ forbids taking the address of a bound member"
4450 " function to form a pointer to member function."
4454 arg = build_offset_ref (base, name);
4457 if (type_unknown_p (arg))
4458 return build1 (ADDR_EXPR, unknown_type_node, arg);
4460 /* Handle complex lvalues (when permitted)
4461 by reduction to simpler cases. */
4462 val = unary_complex_lvalue (code, arg);
4466 switch (TREE_CODE (arg))
4471 case FIX_TRUNC_EXPR:
4472 case FIX_FLOOR_EXPR:
4473 case FIX_ROUND_EXPR:
4475 if (! lvalue_p (arg) && pedantic)
4476 pedwarn ("ISO C++ forbids taking the address of a cast to a non-lvalue expression");
4483 /* Allow the address of a constructor if all the elements
4485 if (TREE_CODE (arg) == CONSTRUCTOR && TREE_HAS_CONSTRUCTOR (arg)
4486 && TREE_CONSTANT (arg))
4488 /* Anything not already handled and not a true memory reference
4490 else if (TREE_CODE (argtype) != FUNCTION_TYPE
4491 && TREE_CODE (argtype) != METHOD_TYPE
4492 && !non_cast_lvalue_or_else (arg, "unary `&'"))
4493 return error_mark_node;
4495 if (argtype != error_mark_node)
4496 argtype = build_pointer_type (argtype);
4501 if (TREE_CODE (arg) == COMPONENT_REF
4502 && TREE_CODE (TREE_OPERAND (arg, 1)) == BASELINK)
4503 arg = BASELINK_FUNCTIONS (TREE_OPERAND (arg, 1));
4505 if (TREE_CODE (arg) != COMPONENT_REF)
4506 addr = build_address (arg);
4507 else if (DECL_C_BIT_FIELD (TREE_OPERAND (arg, 1)))
4509 error ("attempt to take address of bit-field structure member `%D'",
4510 TREE_OPERAND (arg, 1));
4511 return error_mark_node;
4515 /* Unfortunately we cannot just build an address
4516 expression here, because we would not handle
4517 address-constant-expressions or offsetof correctly. */
4518 tree field = TREE_OPERAND (arg, 1);
4519 tree rval = build_unary_op (ADDR_EXPR, TREE_OPERAND (arg, 0), 0);
4520 tree binfo = lookup_base (TREE_TYPE (TREE_TYPE (rval)),
4521 decl_type_context (field),
4524 rval = build_base_path (PLUS_EXPR, rval, binfo, 1);
4525 rval = build1 (NOP_EXPR, argtype, rval);
4526 TREE_CONSTANT (rval) = TREE_CONSTANT (TREE_OPERAND (rval, 0));
4527 addr = fold (build (PLUS_EXPR, argtype, rval,
4528 cp_convert (argtype, byte_position (field))));
4531 if (TREE_CODE (argtype) == POINTER_TYPE
4532 && TREE_CODE (TREE_TYPE (argtype)) == METHOD_TYPE)
4534 build_ptrmemfunc_type (argtype);
4535 addr = build_ptrmemfunc (argtype, addr, 0);
4548 argtype = TREE_TYPE (arg);
4549 return fold (build1 (code, argtype, arg));
4552 error ("%s", errstring);
4553 return error_mark_node;
4556 /* Apply unary lvalue-demanding operator CODE to the expression ARG
4557 for certain kinds of expressions which are not really lvalues
4558 but which we can accept as lvalues.
4560 If ARG is not a kind of expression we can handle, return zero. */
4563 unary_complex_lvalue (code, arg)
4564 enum tree_code code;
4567 /* Handle (a, b) used as an "lvalue". */
4568 if (TREE_CODE (arg) == COMPOUND_EXPR)
4570 tree real_result = build_unary_op (code, TREE_OPERAND (arg, 1), 0);
4571 return build (COMPOUND_EXPR, TREE_TYPE (real_result),
4572 TREE_OPERAND (arg, 0), real_result);
4575 /* Handle (a ? b : c) used as an "lvalue". */
4576 if (TREE_CODE (arg) == COND_EXPR
4577 || TREE_CODE (arg) == MIN_EXPR || TREE_CODE (arg) == MAX_EXPR)
4578 return rationalize_conditional_expr (code, arg);
4580 /* Handle (a = b), (++a), and (--a) used as an "lvalue". */
4581 if (TREE_CODE (arg) == MODIFY_EXPR
4582 || TREE_CODE (arg) == PREINCREMENT_EXPR
4583 || TREE_CODE (arg) == PREDECREMENT_EXPR)
4585 tree lvalue = TREE_OPERAND (arg, 0);
4586 if (TREE_SIDE_EFFECTS (lvalue))
4588 lvalue = stabilize_reference (lvalue);
4589 arg = build (TREE_CODE (arg), TREE_TYPE (arg),
4590 lvalue, TREE_OPERAND (arg, 1));
4592 return unary_complex_lvalue
4593 (code, build (COMPOUND_EXPR, TREE_TYPE (lvalue), arg, lvalue));
4596 if (code != ADDR_EXPR)
4599 /* Handle (a = b) used as an "lvalue" for `&'. */
4600 if (TREE_CODE (arg) == MODIFY_EXPR
4601 || TREE_CODE (arg) == INIT_EXPR)
4603 tree real_result = build_unary_op (code, TREE_OPERAND (arg, 0), 0);
4604 arg = build (COMPOUND_EXPR, TREE_TYPE (real_result), arg, real_result);
4605 TREE_NO_UNUSED_WARNING (arg) = 1;
4609 if (TREE_CODE (TREE_TYPE (arg)) == FUNCTION_TYPE
4610 || TREE_CODE (TREE_TYPE (arg)) == METHOD_TYPE
4611 || TREE_CODE (TREE_TYPE (arg)) == OFFSET_TYPE)
4613 /* The representation of something of type OFFSET_TYPE
4614 is really the representation of a pointer to it.
4615 Here give the representation its true type. */
4618 my_friendly_assert (TREE_CODE (arg) != SCOPE_REF, 313);
4620 if (TREE_CODE (arg) != OFFSET_REF)
4623 t = TREE_OPERAND (arg, 1);
4625 /* Check all this code for right semantics. */
4626 if (TREE_CODE (t) == FUNCTION_DECL)
4628 if (DECL_DESTRUCTOR_P (t))
4629 error ("taking address of destructor");
4630 return build_unary_op (ADDR_EXPR, t, 0);
4632 if (TREE_CODE (t) == VAR_DECL)
4633 return build_unary_op (ADDR_EXPR, t, 0);
4638 if (TREE_OPERAND (arg, 0)
4639 && ! is_dummy_object (TREE_OPERAND (arg, 0))
4640 && TREE_CODE (t) != FIELD_DECL)
4642 error ("taking address of bound pointer-to-member expression");
4643 return error_mark_node;
4645 if (!PTRMEM_OK_P (arg))
4647 /* This cannot form a pointer to method, so we must
4648 resolve the offset ref, and take the address of the
4649 result. For instance,
4651 arg = resolve_offset_ref (arg);
4653 return build_unary_op (code, arg, 0);
4656 if (TREE_CODE (TREE_TYPE (t)) == REFERENCE_TYPE)
4658 error ("cannot create pointer to reference member `%D'", t);
4659 return error_mark_node;
4662 type = build_ptrmem_type (DECL_FIELD_CONTEXT (t), TREE_TYPE (t));
4663 t = make_ptrmem_cst (type, TREE_OPERAND (arg, 1));
4669 /* We permit compiler to make function calls returning
4670 objects of aggregate type look like lvalues. */
4674 if (TREE_CODE (targ) == SAVE_EXPR)
4675 targ = TREE_OPERAND (targ, 0);
4677 if (TREE_CODE (targ) == CALL_EXPR && IS_AGGR_TYPE (TREE_TYPE (targ)))
4679 if (TREE_CODE (arg) == SAVE_EXPR)
4682 targ = build_cplus_new (TREE_TYPE (arg), arg);
4683 return build1 (ADDR_EXPR, build_pointer_type (TREE_TYPE (arg)), targ);
4686 if (TREE_CODE (arg) == SAVE_EXPR && TREE_CODE (targ) == INDIRECT_REF)
4687 return build (SAVE_EXPR, build_pointer_type (TREE_TYPE (arg)),
4688 TREE_OPERAND (targ, 0), current_function_decl, NULL);
4691 /* Don't let anything else be handled specially. */
4695 /* Mark EXP saying that we need to be able to take the
4696 address of it; it should not be allocated in a register.
4697 Value is true if successful.
4699 C++: we do not allow `current_class_ptr' to be addressable. */
4702 cxx_mark_addressable (exp)
4705 register tree x = exp;
4708 switch (TREE_CODE (x))
4715 x = TREE_OPERAND (x, 0);
4719 if (x == current_class_ptr)
4721 error ("cannot take the address of `this', which is an rvalue expression");
4722 TREE_ADDRESSABLE (x) = 1; /* so compiler doesn't die later */
4728 /* Caller should not be trying to mark initialized
4729 constant fields addressable. */
4730 my_friendly_assert (DECL_LANG_SPECIFIC (x) == 0
4731 || DECL_IN_AGGR_P (x) == 0
4733 || DECL_EXTERNAL (x), 314);
4738 if (DECL_REGISTER (x) && !TREE_ADDRESSABLE (x)
4739 && !DECL_ARTIFICIAL (x) && extra_warnings)
4740 warning ("address requested for `%D', which is declared `register'",
4742 TREE_ADDRESSABLE (x) = 1;
4743 put_var_into_stack (x, /*rescan=*/true);
4747 TREE_ADDRESSABLE (x) = 1;
4748 TREE_ADDRESSABLE (DECL_ASSEMBLER_NAME (x)) = 1;
4752 TREE_ADDRESSABLE (x) = 1;
4756 TREE_ADDRESSABLE (x) = 1;
4757 cxx_mark_addressable (TREE_OPERAND (x, 0));
4765 /* Build and return a conditional expression IFEXP ? OP1 : OP2. */
4768 build_x_conditional_expr (ifexp, op1, op2)
4769 tree ifexp, op1, op2;
4771 if (processing_template_decl)
4772 return build_min_nt (COND_EXPR, ifexp, op1, op2);
4774 return build_conditional_expr (ifexp, op1, op2);
4777 /* Handle overloading of the ',' operator when needed. Otherwise,
4778 this function just builds an expression list. */
4781 build_x_compound_expr (list)
4784 tree rest = TREE_CHAIN (list);
4787 if (processing_template_decl)
4788 return build_min_nt (COMPOUND_EXPR, list, NULL_TREE);
4790 if (rest == NULL_TREE)
4791 return build_compound_expr (list);
4793 result = build_new_op (COMPOUND_EXPR, LOOKUP_NORMAL,
4794 TREE_VALUE (list), TREE_VALUE (rest), NULL_TREE);
4796 return build_x_compound_expr (tree_cons (NULL_TREE, result,
4797 TREE_CHAIN (rest)));
4799 if (! TREE_SIDE_EFFECTS (TREE_VALUE (list)))
4801 /* FIXME: This test should be in the implicit cast to void of the LHS. */
4802 /* the left-hand operand of a comma expression is like an expression
4803 statement: we should warn if it doesn't have any side-effects,
4804 unless it was explicitly cast to (void). */
4805 if (warn_unused_value
4806 && !(TREE_CODE (TREE_VALUE(list)) == CONVERT_EXPR
4807 && VOID_TYPE_P (TREE_TYPE (TREE_VALUE(list)))))
4808 warning("left-hand operand of comma expression has no effect");
4810 #if 0 /* this requires a gcc backend patch to export warn_if_unused_value */
4811 else if (warn_unused_value)
4812 warn_if_unused_value (TREE_VALUE(list));
4815 return build_compound_expr
4816 (tree_cons (NULL_TREE, TREE_VALUE (list),
4817 build_tree_list (NULL_TREE,
4818 build_x_compound_expr (rest))));
4821 /* Given a list of expressions, return a compound expression
4822 that performs them all and returns the value of the last of them. */
4825 build_compound_expr (list)
4831 TREE_VALUE (list) = decl_constant_value (TREE_VALUE (list));
4833 if (TREE_CHAIN (list) == 0)
4835 /* build_c_cast puts on a NOP_EXPR to make the result not an lvalue.
4836 Strip such NOP_EXPRs, since LIST is used in non-lvalue context. */
4837 if (TREE_CODE (list) == NOP_EXPR
4838 && TREE_TYPE (list) == TREE_TYPE (TREE_OPERAND (list, 0)))
4839 list = TREE_OPERAND (list, 0);
4841 return TREE_VALUE (list);
4844 first = TREE_VALUE (list);
4845 first = convert_to_void (first, "left-hand operand of comma");
4846 if (first == error_mark_node)
4847 return error_mark_node;
4849 rest = build_compound_expr (TREE_CHAIN (list));
4850 if (rest == error_mark_node)
4851 return error_mark_node;
4853 /* When pedantic, a compound expression cannot be a constant expression. */
4854 if (! TREE_SIDE_EFFECTS (first) && ! pedantic)
4857 return build (COMPOUND_EXPR, TREE_TYPE (rest), first, rest);
4861 build_static_cast (type, expr)
4867 if (type == error_mark_node || expr == error_mark_node)
4868 return error_mark_node;
4870 if (TREE_CODE (expr) == OFFSET_REF)
4871 expr = resolve_offset_ref (expr);
4873 if (processing_template_decl)
4875 tree t = build_min (STATIC_CAST_EXPR, type, expr);
4879 /* build_c_cast puts on a NOP_EXPR to make the result not an lvalue.
4880 Strip such NOP_EXPRs if VALUE is being used in non-lvalue context. */
4881 if (TREE_CODE (type) != REFERENCE_TYPE
4882 && TREE_CODE (expr) == NOP_EXPR
4883 && TREE_TYPE (expr) == TREE_TYPE (TREE_OPERAND (expr, 0)))
4884 expr = TREE_OPERAND (expr, 0);
4886 if (TREE_CODE (type) == VOID_TYPE)
4888 expr = convert_to_void (expr, /*implicit=*/NULL);
4892 if (TREE_CODE (type) == REFERENCE_TYPE)
4893 return (convert_from_reference
4894 (convert_to_reference (type, expr, CONV_STATIC|CONV_IMPLICIT,
4895 LOOKUP_COMPLAIN, NULL_TREE)));
4897 if (IS_AGGR_TYPE (type))
4898 return build_cplus_new (type, (build_special_member_call
4899 (NULL_TREE, complete_ctor_identifier,
4900 build_tree_list (NULL_TREE, expr),
4901 TYPE_BINFO (type), LOOKUP_NORMAL)));
4903 intype = TREE_TYPE (expr);
4905 /* FIXME handle casting to array type. */
4908 if (IS_AGGR_TYPE (intype)
4909 ? can_convert_arg (type, intype, expr)
4910 : can_convert_arg (strip_all_pointer_quals (type),
4911 strip_all_pointer_quals (intype), expr))
4912 /* This is a standard conversion. */
4914 else if (TYPE_PTROB_P (type) && TYPE_PTROB_P (intype))
4916 /* They're pointers to objects. They must be aggregates that
4917 are related non-virtually. */
4920 if (IS_AGGR_TYPE (TREE_TYPE (type)) && IS_AGGR_TYPE (TREE_TYPE (intype))
4921 && lookup_base (TREE_TYPE (type), TREE_TYPE (intype),
4922 ba_ignore | ba_quiet, &kind)
4923 && kind != bk_via_virtual)
4926 else if (TYPE_PTRMEM_P (type) && TYPE_PTRMEM_P (intype))
4928 /* They're pointers to members. The pointed to objects must be
4929 the same (ignoring CV qualifiers), and the containing classes
4930 must be related non-virtually. */
4934 (strip_all_pointer_quals (TREE_TYPE (TREE_TYPE (type))),
4935 strip_all_pointer_quals (TREE_TYPE (TREE_TYPE (intype))))
4936 && (lookup_base (TYPE_OFFSET_BASETYPE (TREE_TYPE (intype)),
4937 TYPE_OFFSET_BASETYPE (TREE_TYPE (type)),
4938 ba_ignore | ba_quiet, &kind))
4939 && kind != bk_via_virtual)
4942 else if (TREE_CODE (intype) != BOOLEAN_TYPE
4943 && TREE_CODE (type) != ARRAY_TYPE
4944 && TREE_CODE (type) != FUNCTION_TYPE
4945 && can_convert (intype, strip_all_pointer_quals (type)))
4947 else if (TREE_CODE (intype) == ENUMERAL_TYPE
4948 && TREE_CODE (type) == ENUMERAL_TYPE)
4949 /* DR 128: "A value of integral _or enumeration_ type can be explicitly
4950 converted to an enumeration type."
4951 The integral to enumeration will be accepted by the previous clause.
4952 We need to explicitly check for enumeration to enumeration. */
4955 /* [expr.static.cast]
4957 The static_cast operator shall not be used to cast away
4959 if (ok && casts_away_constness (intype, type))
4961 error ("static_cast from type `%T' to type `%T' casts away constness",
4963 return error_mark_node;
4967 return build_c_cast (type, expr);
4969 error ("invalid static_cast from type `%T' to type `%T'", intype, type);
4970 return error_mark_node;
4974 build_reinterpret_cast (type, expr)
4979 if (type == error_mark_node || expr == error_mark_node)
4980 return error_mark_node;
4982 if (TREE_CODE (expr) == OFFSET_REF)
4983 expr = resolve_offset_ref (expr);
4985 if (processing_template_decl)
4987 tree t = build_min (REINTERPRET_CAST_EXPR, type, expr);
4991 if (TREE_CODE (type) != REFERENCE_TYPE)
4993 expr = decay_conversion (expr);
4995 /* build_c_cast puts on a NOP_EXPR to make the result not an lvalue.
4996 Strip such NOP_EXPRs if VALUE is being used in non-lvalue context. */
4997 if (TREE_CODE (expr) == NOP_EXPR
4998 && TREE_TYPE (expr) == TREE_TYPE (TREE_OPERAND (expr, 0)))
4999 expr = TREE_OPERAND (expr, 0);
5002 intype = TREE_TYPE (expr);
5004 if (TREE_CODE (type) == REFERENCE_TYPE)
5006 if (! real_lvalue_p (expr))
5008 error ("invalid reinterpret_cast of an rvalue expression of type `%T' to type `%T'", intype, type);
5009 return error_mark_node;
5011 expr = build_unary_op (ADDR_EXPR, expr, 0);
5012 if (expr != error_mark_node)
5013 expr = build_reinterpret_cast
5014 (build_pointer_type (TREE_TYPE (type)), expr);
5015 if (expr != error_mark_node)
5016 expr = build_indirect_ref (expr, 0);
5019 else if (same_type_ignoring_top_level_qualifiers_p (intype, type))
5020 return build_static_cast (type, expr);
5022 if (TYPE_PTR_P (type) && (TREE_CODE (intype) == INTEGER_TYPE
5023 || TREE_CODE (intype) == ENUMERAL_TYPE))
5025 else if (TREE_CODE (type) == INTEGER_TYPE && TYPE_PTR_P (intype))
5027 if (TYPE_PRECISION (type) < TYPE_PRECISION (intype))
5028 pedwarn ("reinterpret_cast from `%T' to `%T' loses precision",
5031 else if ((TYPE_PTRFN_P (type) && TYPE_PTRFN_P (intype))
5032 || (TYPE_PTRMEMFUNC_P (type) && TYPE_PTRMEMFUNC_P (intype)))
5034 expr = decl_constant_value (expr);
5035 return fold (build1 (NOP_EXPR, type, expr));
5037 else if ((TYPE_PTRMEM_P (type) && TYPE_PTRMEM_P (intype))
5038 || (TYPE_PTROBV_P (type) && TYPE_PTROBV_P (intype)))
5040 if (! comp_ptr_ttypes_reinterpret (TREE_TYPE (type), TREE_TYPE (intype)))
5041 pedwarn ("reinterpret_cast from `%T' to `%T' casts away const (or volatile)",
5044 expr = decl_constant_value (expr);
5045 return fold (build1 (NOP_EXPR, type, expr));
5047 else if ((TYPE_PTRFN_P (type) && TYPE_PTROBV_P (intype))
5048 || (TYPE_PTRFN_P (intype) && TYPE_PTROBV_P (type)))
5050 pedwarn ("ISO C++ forbids casting between pointer-to-function and pointer-to-object");
5051 expr = decl_constant_value (expr);
5052 return fold (build1 (NOP_EXPR, type, expr));
5056 error ("invalid reinterpret_cast from type `%T' to type `%T'",
5058 return error_mark_node;
5061 return cp_convert (type, expr);
5065 build_const_cast (type, expr)
5070 if (type == error_mark_node || expr == error_mark_node)
5071 return error_mark_node;
5073 if (TREE_CODE (expr) == OFFSET_REF)
5074 expr = resolve_offset_ref (expr);
5076 if (processing_template_decl)
5078 tree t = build_min (CONST_CAST_EXPR, type, expr);
5082 if (!POINTER_TYPE_P (type))
5083 error ("invalid use of const_cast with type `%T', which is not a pointer, reference, nor a pointer-to-data-member type", type);
5084 else if (TREE_CODE (TREE_TYPE (type)) == FUNCTION_TYPE)
5086 error ("invalid use of const_cast with type `%T', which is a pointer or reference to a function type", type);
5087 return error_mark_node;
5090 if (TREE_CODE (type) != REFERENCE_TYPE)
5092 expr = decay_conversion (expr);
5094 /* build_c_cast puts on a NOP_EXPR to make the result not an lvalue.
5095 Strip such NOP_EXPRs if VALUE is being used in non-lvalue context. */
5096 if (TREE_CODE (expr) == NOP_EXPR
5097 && TREE_TYPE (expr) == TREE_TYPE (TREE_OPERAND (expr, 0)))
5098 expr = TREE_OPERAND (expr, 0);
5101 intype = TREE_TYPE (expr);
5103 if (same_type_ignoring_top_level_qualifiers_p (intype, type))
5104 return build_static_cast (type, expr);
5105 else if (TREE_CODE (type) == REFERENCE_TYPE)
5107 if (! real_lvalue_p (expr))
5109 error ("invalid const_cast of an rvalue of type `%T' to type `%T'", intype, type);
5110 return error_mark_node;
5113 if (comp_ptr_ttypes_const (TREE_TYPE (type), intype))
5115 expr = build_unary_op (ADDR_EXPR, expr, 0);
5116 expr = build1 (NOP_EXPR, type, expr);
5117 return convert_from_reference (expr);
5120 else if (TREE_CODE (type) == POINTER_TYPE
5121 && TREE_CODE (intype) == POINTER_TYPE
5122 && comp_ptr_ttypes_const (TREE_TYPE (type), TREE_TYPE (intype)))
5123 return cp_convert (type, expr);
5125 error ("invalid const_cast from type `%T' to type `%T'", intype, type);
5126 return error_mark_node;
5129 /* Build an expression representing a cast to type TYPE of expression EXPR.
5131 ALLOW_NONCONVERTING is true if we should allow non-converting constructors
5132 when doing the cast. */
5135 build_c_cast (type, expr)
5138 register tree value = expr;
5141 if (type == error_mark_node || expr == error_mark_node)
5142 return error_mark_node;
5144 if (processing_template_decl)
5146 tree t = build_min (CAST_EXPR, type,
5147 tree_cons (NULL_TREE, value, NULL_TREE));
5151 /* build_c_cast puts on a NOP_EXPR to make the result not an lvalue.
5152 Strip such NOP_EXPRs if VALUE is being used in non-lvalue context. */
5153 if (TREE_CODE (type) != REFERENCE_TYPE
5154 && TREE_CODE (value) == NOP_EXPR
5155 && TREE_TYPE (value) == TREE_TYPE (TREE_OPERAND (value, 0)))
5156 value = TREE_OPERAND (value, 0);
5158 if (TREE_CODE (value) == OFFSET_REF)
5159 value = resolve_offset_ref (value);
5161 if (TREE_CODE (type) == ARRAY_TYPE)
5163 /* Allow casting from T1* to T2[] because Cfront allows it.
5164 NIHCL uses it. It is not valid ISO C++ however. */
5165 if (TREE_CODE (TREE_TYPE (expr)) == POINTER_TYPE)
5167 pedwarn ("ISO C++ forbids casting to an array type `%T'", type);
5168 type = build_pointer_type (TREE_TYPE (type));
5172 error ("ISO C++ forbids casting to an array type `%T'", type);
5173 return error_mark_node;
5177 if (TREE_CODE (type) == FUNCTION_TYPE
5178 || TREE_CODE (type) == METHOD_TYPE)
5180 error ("invalid cast to function type `%T'", type);
5181 return error_mark_node;
5184 if (TREE_CODE (type) == VOID_TYPE)
5186 /* Conversion to void does not cause any of the normal function to
5187 * pointer, array to pointer and lvalue to rvalue decays. */
5189 value = convert_to_void (value, /*implicit=*/NULL);
5192 /* Convert functions and arrays to pointers and
5193 convert references to their expanded types,
5194 but don't convert any other types. If, however, we are
5195 casting to a class type, there's no reason to do this: the
5196 cast will only succeed if there is a converting constructor,
5197 and the default conversions will be done at that point. In
5198 fact, doing the default conversion here is actually harmful
5202 struct S { S(const A&); };
5204 since we don't want the array-to-pointer conversion done. */
5205 if (!IS_AGGR_TYPE (type))
5207 if (TREE_CODE (TREE_TYPE (value)) == FUNCTION_TYPE
5208 || (TREE_CODE (TREE_TYPE (value)) == METHOD_TYPE
5209 /* Don't do the default conversion on a ->* expression. */
5210 && ! (TREE_CODE (type) == POINTER_TYPE
5211 && bound_pmf_p (value)))
5212 || TREE_CODE (TREE_TYPE (value)) == ARRAY_TYPE
5213 || TREE_CODE (TREE_TYPE (value)) == REFERENCE_TYPE)
5214 value = default_conversion (value);
5216 else if (TREE_CODE (TREE_TYPE (value)) == REFERENCE_TYPE)
5217 /* However, even for class types, we still need to strip away
5218 the reference type, since the call to convert_force below
5219 does not expect the input expression to be of reference
5221 value = convert_from_reference (value);
5223 otype = TREE_TYPE (value);
5225 /* Optionally warn about potentially worrisome casts. */
5228 && TREE_CODE (type) == POINTER_TYPE
5229 && TREE_CODE (otype) == POINTER_TYPE
5230 && !at_least_as_qualified_p (TREE_TYPE (type),
5232 warning ("cast from `%T' to `%T' discards qualifiers from pointer target type",
5235 if (TREE_CODE (type) == INTEGER_TYPE
5236 && TREE_CODE (otype) == POINTER_TYPE
5237 && TYPE_PRECISION (type) != TYPE_PRECISION (otype))
5238 warning ("cast from pointer to integer of different size");
5240 if (TREE_CODE (type) == POINTER_TYPE
5241 && TREE_CODE (otype) == INTEGER_TYPE
5242 && TYPE_PRECISION (type) != TYPE_PRECISION (otype)
5243 /* Don't warn about converting any constant. */
5244 && !TREE_CONSTANT (value))
5245 warning ("cast to pointer from integer of different size");
5247 if (TREE_CODE (type) == REFERENCE_TYPE)
5248 value = (convert_from_reference
5249 (convert_to_reference (type, value, CONV_C_CAST,
5250 LOOKUP_COMPLAIN, NULL_TREE)));
5255 value = decl_constant_value (value);
5258 value = convert_force (type, value, CONV_C_CAST);
5260 /* Ignore any integer overflow caused by the cast. */
5261 if (TREE_CODE (value) == INTEGER_CST)
5263 TREE_OVERFLOW (value) = TREE_OVERFLOW (ovalue);
5264 TREE_CONSTANT_OVERFLOW (value) = TREE_CONSTANT_OVERFLOW (ovalue);
5268 /* Warn about possible alignment problems. Do this here when we will have
5269 instantiated any necessary template types. */
5270 if (STRICT_ALIGNMENT && warn_cast_align
5271 && TREE_CODE (type) == POINTER_TYPE
5272 && TREE_CODE (otype) == POINTER_TYPE
5273 && TREE_CODE (TREE_TYPE (otype)) != VOID_TYPE
5274 && TREE_CODE (TREE_TYPE (otype)) != FUNCTION_TYPE
5275 && COMPLETE_TYPE_P (TREE_TYPE (otype))
5276 && COMPLETE_TYPE_P (TREE_TYPE (type))
5277 && TYPE_ALIGN (TREE_TYPE (type)) > TYPE_ALIGN (TREE_TYPE (otype)))
5278 warning ("cast from `%T' to `%T' increases required alignment of target type",
5281 /* Always produce some operator for an explicit cast,
5282 so we can tell (for -pedantic) that the cast is no lvalue. */
5283 if (TREE_CODE (type) != REFERENCE_TYPE && value == expr
5284 && real_lvalue_p (value))
5285 value = non_lvalue (value);
5290 /* Build an assignment expression of lvalue LHS from value RHS.
5291 MODIFYCODE is the code for a binary operator that we use
5292 to combine the old value of LHS with RHS to get the new value.
5293 Or else MODIFYCODE is NOP_EXPR meaning do a simple assignment.
5295 C++: If MODIFYCODE is INIT_EXPR, then leave references unbashed. */
5298 build_modify_expr (lhs, modifycode, rhs)
5300 enum tree_code modifycode;
5303 register tree result;
5305 tree lhstype = TREE_TYPE (lhs);
5306 tree olhstype = lhstype;
5309 /* Avoid duplicate error messages from operands that had errors. */
5310 if (lhs == error_mark_node || rhs == error_mark_node)
5311 return error_mark_node;
5313 /* Handle control structure constructs used as "lvalues". */
5314 switch (TREE_CODE (lhs))
5316 /* Handle --foo = 5; as these are valid constructs in C++ */
5317 case PREDECREMENT_EXPR:
5318 case PREINCREMENT_EXPR:
5319 if (TREE_SIDE_EFFECTS (TREE_OPERAND (lhs, 0)))
5320 lhs = build (TREE_CODE (lhs), TREE_TYPE (lhs),
5321 stabilize_reference (TREE_OPERAND (lhs, 0)),
5322 TREE_OPERAND (lhs, 1));
5323 return build (COMPOUND_EXPR, lhstype,
5325 build_modify_expr (TREE_OPERAND (lhs, 0),
5328 /* Handle (a, b) used as an "lvalue". */
5330 newrhs = build_modify_expr (TREE_OPERAND (lhs, 1),
5332 if (newrhs == error_mark_node)
5333 return error_mark_node;
5334 return build (COMPOUND_EXPR, lhstype,
5335 TREE_OPERAND (lhs, 0), newrhs);
5338 if (TREE_SIDE_EFFECTS (TREE_OPERAND (lhs, 0)))
5339 lhs = build (TREE_CODE (lhs), TREE_TYPE (lhs),
5340 stabilize_reference (TREE_OPERAND (lhs, 0)),
5341 TREE_OPERAND (lhs, 1));
5342 newrhs = build_modify_expr (TREE_OPERAND (lhs, 0), modifycode, rhs);
5343 if (newrhs == error_mark_node)
5344 return error_mark_node;
5345 return build (COMPOUND_EXPR, lhstype, lhs, newrhs);
5347 /* Handle (a ? b : c) used as an "lvalue". */
5350 /* Produce (a ? (b = rhs) : (c = rhs))
5351 except that the RHS goes through a save-expr
5352 so the code to compute it is only emitted once. */
5354 tree preeval = NULL_TREE;
5356 rhs = stabilize_expr (rhs, &preeval);
5358 /* Check this here to avoid odd errors when trying to convert
5359 a throw to the type of the COND_EXPR. */
5360 if (!lvalue_or_else (lhs, "assignment"))
5361 return error_mark_node;
5363 cond = build_conditional_expr
5364 (TREE_OPERAND (lhs, 0),
5365 build_modify_expr (cp_convert (TREE_TYPE (lhs),
5366 TREE_OPERAND (lhs, 1)),
5368 build_modify_expr (cp_convert (TREE_TYPE (lhs),
5369 TREE_OPERAND (lhs, 2)),
5372 if (cond == error_mark_node)
5374 /* Make sure the code to compute the rhs comes out
5375 before the split. */
5376 return build (COMPOUND_EXPR, TREE_TYPE (lhs), preeval, cond);
5380 lhs = resolve_offset_ref (lhs);
5381 if (lhs == error_mark_node)
5382 return error_mark_node;
5383 olhstype = lhstype = TREE_TYPE (lhs);
5389 if (modifycode == INIT_EXPR)
5391 if (TREE_CODE (rhs) == CONSTRUCTOR)
5393 my_friendly_assert (same_type_p (TREE_TYPE (rhs), lhstype),
5395 result = build (INIT_EXPR, lhstype, lhs, rhs);
5396 TREE_SIDE_EFFECTS (result) = 1;
5399 else if (! IS_AGGR_TYPE (lhstype))
5400 /* Do the default thing */;
5403 result = build_special_member_call (lhs, complete_ctor_identifier,
5404 build_tree_list (NULL_TREE, rhs),
5405 TYPE_BINFO (lhstype),
5407 if (result == NULL_TREE)
5408 return error_mark_node;
5414 if (TREE_CODE (lhstype) == REFERENCE_TYPE)
5416 lhs = convert_from_reference (lhs);
5417 olhstype = lhstype = TREE_TYPE (lhs);
5419 lhs = require_complete_type (lhs);
5420 if (lhs == error_mark_node)
5421 return error_mark_node;
5423 if (modifycode == NOP_EXPR)
5425 /* `operator=' is not an inheritable operator. */
5426 if (! IS_AGGR_TYPE (lhstype))
5427 /* Do the default thing */;
5430 result = build_new_op (MODIFY_EXPR, LOOKUP_NORMAL,
5431 lhs, rhs, make_node (NOP_EXPR));
5432 if (result == NULL_TREE)
5433 return error_mark_node;
5440 /* A binary op has been requested. Combine the old LHS
5441 value with the RHS producing the value we should actually
5442 store into the LHS. */
5444 my_friendly_assert (!PROMOTES_TO_AGGR_TYPE (lhstype, REFERENCE_TYPE),
5446 lhs = stabilize_reference (lhs);
5447 newrhs = cp_build_binary_op (modifycode, lhs, rhs);
5448 if (newrhs == error_mark_node)
5450 error (" in evaluation of `%Q(%#T, %#T)'", modifycode,
5451 TREE_TYPE (lhs), TREE_TYPE (rhs));
5452 return error_mark_node;
5455 /* Now it looks like a plain assignment. */
5456 modifycode = NOP_EXPR;
5458 my_friendly_assert (TREE_CODE (lhstype) != REFERENCE_TYPE, 20011220);
5459 my_friendly_assert (TREE_CODE (TREE_TYPE (newrhs)) != REFERENCE_TYPE,
5463 /* Handle a cast used as an "lvalue".
5464 We have already performed any binary operator using the value as cast.
5465 Now convert the result to the cast type of the lhs,
5466 and then true type of the lhs and store it there;
5467 then convert result back to the cast type to be the value
5468 of the assignment. */
5470 switch (TREE_CODE (lhs))
5475 case FIX_TRUNC_EXPR:
5476 case FIX_FLOOR_EXPR:
5477 case FIX_ROUND_EXPR:
5480 tree inner_lhs = TREE_OPERAND (lhs, 0);
5483 if (TREE_CODE (TREE_TYPE (newrhs)) == ARRAY_TYPE
5484 || TREE_CODE (TREE_TYPE (newrhs)) == FUNCTION_TYPE
5485 || TREE_CODE (TREE_TYPE (newrhs)) == METHOD_TYPE
5486 || TREE_CODE (TREE_TYPE (newrhs)) == OFFSET_TYPE)
5487 newrhs = default_conversion (newrhs);
5489 /* ISO C++ 5.4/1: The result is an lvalue if T is a reference
5490 type, otherwise the result is an rvalue. */
5491 if (! lvalue_p (lhs))
5492 pedwarn ("ISO C++ forbids cast to non-reference type used as lvalue");
5494 result = build_modify_expr (inner_lhs, NOP_EXPR,
5495 cp_convert (TREE_TYPE (inner_lhs),
5496 cp_convert (lhstype, newrhs)));
5497 if (result == error_mark_node)
5499 return cp_convert (TREE_TYPE (lhs), result);
5506 /* Now we have handled acceptable kinds of LHS that are not truly lvalues.
5507 Reject anything strange now. */
5509 if (!lvalue_or_else (lhs, "assignment"))
5510 return error_mark_node;
5512 /* Warn about modifying something that is `const'. Don't warn if
5513 this is initialization. */
5514 if (modifycode != INIT_EXPR
5515 && (TREE_READONLY (lhs) || CP_TYPE_CONST_P (lhstype)
5516 /* Functions are not modifiable, even though they are
5518 || TREE_CODE (TREE_TYPE (lhs)) == FUNCTION_TYPE
5519 || TREE_CODE (TREE_TYPE (lhs)) == METHOD_TYPE
5520 /* If it's an aggregate and any field is const, then it is
5521 effectively const. */
5522 || (CLASS_TYPE_P (lhstype)
5523 && C_TYPE_FIELDS_READONLY (lhstype))))
5524 readonly_error (lhs, "assignment", 0);
5526 /* If storing into a structure or union member, it has probably been
5527 given type `int'. Compute the type that would go with the actual
5528 amount of storage the member occupies. */
5530 if (TREE_CODE (lhs) == COMPONENT_REF
5531 && (TREE_CODE (lhstype) == INTEGER_TYPE
5532 || TREE_CODE (lhstype) == REAL_TYPE
5533 || TREE_CODE (lhstype) == ENUMERAL_TYPE))
5535 lhstype = TREE_TYPE (get_unwidened (lhs, 0));
5537 /* If storing in a field that is in actuality a short or narrower
5538 than one, we must store in the field in its actual type. */
5540 if (lhstype != TREE_TYPE (lhs))
5542 lhs = copy_node (lhs);
5543 TREE_TYPE (lhs) = lhstype;
5547 /* Convert new value to destination type. */
5549 if (TREE_CODE (lhstype) == ARRAY_TYPE)
5553 if (!same_or_base_type_p (TYPE_MAIN_VARIANT (lhstype),
5554 TYPE_MAIN_VARIANT (TREE_TYPE (rhs))))
5556 error ("incompatible types in assignment of `%T' to `%T'",
5557 TREE_TYPE (rhs), lhstype);
5558 return error_mark_node;
5561 /* Allow array assignment in compiler-generated code. */
5562 if (! DECL_ARTIFICIAL (current_function_decl))
5563 pedwarn ("ISO C++ forbids assignment of arrays");
5565 from_array = TREE_CODE (TREE_TYPE (newrhs)) == ARRAY_TYPE
5566 ? 1 + (modifycode != INIT_EXPR): 0;
5567 return build_vec_init (lhs, NULL_TREE, newrhs, from_array);
5570 if (modifycode == INIT_EXPR)
5571 newrhs = convert_for_initialization (lhs, lhstype, newrhs, LOOKUP_NORMAL,
5572 "initialization", NULL_TREE, 0);
5575 /* Avoid warnings on enum bit fields. */
5576 if (TREE_CODE (olhstype) == ENUMERAL_TYPE
5577 && TREE_CODE (lhstype) == INTEGER_TYPE)
5579 newrhs = convert_for_assignment (olhstype, newrhs, "assignment",
5581 newrhs = convert_force (lhstype, newrhs, 0);
5584 newrhs = convert_for_assignment (lhstype, newrhs, "assignment",
5586 if (TREE_CODE (newrhs) == CALL_EXPR
5587 && TYPE_NEEDS_CONSTRUCTING (lhstype))
5588 newrhs = build_cplus_new (lhstype, newrhs);
5590 /* Can't initialize directly from a TARGET_EXPR, since that would
5591 cause the lhs to be constructed twice, and possibly result in
5592 accidental self-initialization. So we force the TARGET_EXPR to be
5593 expanded without a target. */
5594 if (TREE_CODE (newrhs) == TARGET_EXPR)
5595 newrhs = build (COMPOUND_EXPR, TREE_TYPE (newrhs), newrhs,
5596 TREE_OPERAND (newrhs, 0));
5599 if (newrhs == error_mark_node)
5600 return error_mark_node;
5602 if (TREE_CODE (newrhs) == COND_EXPR)
5605 tree cond = TREE_OPERAND (newrhs, 0);
5607 if (TREE_SIDE_EFFECTS (lhs))
5608 cond = build_compound_expr (tree_cons
5610 build_tree_list (NULL_TREE, cond)));
5612 /* Cannot have two identical lhs on this one tree (result) as preexpand
5613 calls will rip them out and fill in RTL for them, but when the
5614 rtl is generated, the calls will only be in the first side of the
5615 condition, not on both, or before the conditional jump! (mrs) */
5616 lhs1 = break_out_calls (lhs);
5619 /* If there's no change, the COND_EXPR behaves like any other rhs. */
5620 result = build (modifycode == NOP_EXPR ? MODIFY_EXPR : INIT_EXPR,
5621 lhstype, lhs, newrhs);
5624 tree result_type = TREE_TYPE (newrhs);
5625 /* We have to convert each arm to the proper type because the
5626 types may have been munged by constant folding. */
5628 = build (COND_EXPR, result_type, cond,
5629 build_modify_expr (lhs, modifycode,
5630 cp_convert (result_type,
5631 TREE_OPERAND (newrhs, 1))),
5632 build_modify_expr (lhs1, modifycode,
5633 cp_convert (result_type,
5634 TREE_OPERAND (newrhs, 2))));
5638 result = build (modifycode == NOP_EXPR ? MODIFY_EXPR : INIT_EXPR,
5639 lhstype, lhs, newrhs);
5641 TREE_SIDE_EFFECTS (result) = 1;
5643 /* If we got the LHS in a different type for storing in,
5644 convert the result back to the nominal type of LHS
5645 so that the value we return always has the same type
5646 as the LHS argument. */
5648 if (olhstype == TREE_TYPE (result))
5650 /* Avoid warnings converting integral types back into enums
5651 for enum bit fields. */
5652 if (TREE_CODE (TREE_TYPE (result)) == INTEGER_TYPE
5653 && TREE_CODE (olhstype) == ENUMERAL_TYPE)
5655 result = build (COMPOUND_EXPR, olhstype, result, olhs);
5656 TREE_NO_UNUSED_WARNING (result) = 1;
5659 return convert_for_assignment (olhstype, result, "assignment",
5664 build_x_modify_expr (lhs, modifycode, rhs)
5666 enum tree_code modifycode;
5669 if (processing_template_decl)
5670 return build_min_nt (MODOP_EXPR, lhs,
5671 build_min_nt (modifycode, NULL_TREE, NULL_TREE), rhs);
5673 if (modifycode != NOP_EXPR)
5675 tree rval = build_new_op (MODIFY_EXPR, LOOKUP_NORMAL, lhs, rhs,
5676 make_node (modifycode));
5680 return build_modify_expr (lhs, modifycode, rhs);
5684 /* Get difference in deltas for different pointer to member function
5685 types. Return integer_zero_node, if FROM cannot be converted to a
5686 TO type. If FORCE is true, then allow reverse conversions as well.
5688 Note that the naming of FROM and TO is kind of backwards; the return
5689 value is what we add to a TO in order to get a FROM. They are named
5690 this way because we call this function to find out how to convert from
5691 a pointer to member of FROM to a pointer to member of TO. */
5694 get_delta_difference (from, to, force)
5698 tree delta = integer_zero_node;
5703 binfo = lookup_base (to, from, ba_check, &kind);
5704 if (kind == bk_inaccessible || kind == bk_ambig)
5706 error (" in pointer to member function conversion");
5713 error_not_base_type (from, to);
5714 error (" in pointer to member conversion");
5717 binfo = lookup_base (from, to, ba_check, &kind);
5720 virt_binfo = binfo_from_vbase (binfo);
5724 /* This is a reinterpret cast, we choose to do nothing. */
5725 warning ("pointer to member cast via virtual base `%T'",
5726 BINFO_TYPE (virt_binfo));
5729 delta = BINFO_OFFSET (binfo);
5730 delta = cp_convert (ptrdiff_type_node, delta);
5731 delta = cp_build_binary_op (MINUS_EXPR,
5738 virt_binfo = binfo_from_vbase (binfo);
5741 /* This is a reinterpret cast, we choose to do nothing. */
5743 warning ("pointer to member cast via virtual base `%T'",
5744 BINFO_TYPE (virt_binfo));
5746 error ("pointer to member conversion via virtual base `%T'",
5747 BINFO_TYPE (virt_binfo));
5750 delta = BINFO_OFFSET (binfo);
5752 return cp_convert (ptrdiff_type_node, delta);
5755 /* Return a constructor for the pointer-to-member-function TYPE using
5756 the other components as specified. */
5759 build_ptrmemfunc1 (type, delta, pfn)
5760 tree type, delta, pfn;
5766 /* Pull the FIELD_DECLs out of the type. */
5767 pfn_field = TYPE_FIELDS (type);
5768 delta_field = TREE_CHAIN (pfn_field);
5770 /* Make sure DELTA has the type we want. */
5771 delta = convert_and_check (delta_type_node, delta);
5773 /* Finish creating the initializer. */
5774 u = tree_cons (pfn_field, pfn,
5775 build_tree_list (delta_field, delta));
5776 u = build_constructor (type, u);
5777 TREE_CONSTANT (u) = TREE_CONSTANT (pfn) && TREE_CONSTANT (delta);
5778 TREE_STATIC (u) = (TREE_CONSTANT (u)
5779 && (initializer_constant_valid_p (pfn, TREE_TYPE (pfn))
5781 && (initializer_constant_valid_p (delta, TREE_TYPE (delta))
5786 /* Build a constructor for a pointer to member function. It can be
5787 used to initialize global variables, local variable, or used
5788 as a value in expressions. TYPE is the POINTER to METHOD_TYPE we
5791 If FORCE is nonzero, then force this conversion, even if
5792 we would rather not do it. Usually set when using an explicit
5795 Return error_mark_node, if something goes wrong. */
5798 build_ptrmemfunc (type, pfn, force)
5806 if (error_operand_p (pfn))
5807 return error_mark_node;
5809 pfn_type = TREE_TYPE (pfn);
5810 to_type = build_ptrmemfunc_type (type);
5812 /* Handle multiple conversions of pointer to member functions. */
5813 if (TYPE_PTRMEMFUNC_P (pfn_type))
5815 tree delta = NULL_TREE;
5816 tree npfn = NULL_TREE;
5820 && !can_convert_arg (to_type, TREE_TYPE (pfn), pfn))
5821 error ("invalid conversion to type `%T' from type `%T'",
5824 n = get_delta_difference (TYPE_PTRMEMFUNC_OBJECT_TYPE (pfn_type),
5825 TYPE_PTRMEMFUNC_OBJECT_TYPE (to_type),
5828 /* We don't have to do any conversion to convert a
5829 pointer-to-member to its own type. But, we don't want to
5830 just return a PTRMEM_CST if there's an explicit cast; that
5831 cast should make the expression an invalid template argument. */
5832 if (TREE_CODE (pfn) != PTRMEM_CST)
5834 if (same_type_p (to_type, pfn_type))
5836 else if (integer_zerop (n))
5837 return build_reinterpret_cast (to_type, pfn);
5840 if (TREE_SIDE_EFFECTS (pfn))
5841 pfn = save_expr (pfn);
5843 /* Obtain the function pointer and the current DELTA. */
5844 if (TREE_CODE (pfn) == PTRMEM_CST)
5845 expand_ptrmemfunc_cst (pfn, &delta, &npfn);
5848 npfn = build_ptrmemfunc_access_expr (pfn, pfn_identifier);
5849 delta = build_ptrmemfunc_access_expr (pfn, delta_identifier);
5852 /* Just adjust the DELTA field. */
5853 delta = cp_convert (ptrdiff_type_node, delta);
5854 if (TARGET_PTRMEMFUNC_VBIT_LOCATION == ptrmemfunc_vbit_in_delta)
5855 n = cp_build_binary_op (LSHIFT_EXPR, n, integer_one_node);
5856 delta = cp_build_binary_op (PLUS_EXPR, delta, n);
5857 return build_ptrmemfunc1 (to_type, delta, npfn);
5860 /* Handle null pointer to member function conversions. */
5861 if (integer_zerop (pfn))
5863 pfn = build_c_cast (type, integer_zero_node);
5864 return build_ptrmemfunc1 (to_type,
5869 if (type_unknown_p (pfn))
5870 return instantiate_type (type, pfn, tf_error | tf_warning);
5872 fn = TREE_OPERAND (pfn, 0);
5873 my_friendly_assert (TREE_CODE (fn) == FUNCTION_DECL, 0);
5874 return make_ptrmem_cst (to_type, fn);
5877 /* Return the DELTA, IDX, PFN, and DELTA2 values for the PTRMEM_CST
5880 ??? There is no consistency as to the types returned for the above
5881 values. Some code acts as if its a sizetype and some as if its
5882 integer_type_node. */
5885 expand_ptrmemfunc_cst (cst, delta, pfn)
5890 tree type = TREE_TYPE (cst);
5891 tree fn = PTRMEM_CST_MEMBER (cst);
5892 tree ptr_class, fn_class;
5894 my_friendly_assert (TREE_CODE (fn) == FUNCTION_DECL, 0);
5896 /* The class that the function belongs to. */
5897 fn_class = DECL_CONTEXT (fn);
5899 /* The class that we're creating a pointer to member of. */
5900 ptr_class = TYPE_PTRMEMFUNC_OBJECT_TYPE (type);
5902 /* First, calculate the adjustment to the function's class. */
5903 *delta = get_delta_difference (fn_class, ptr_class, /*force=*/0);
5905 if (!DECL_VIRTUAL_P (fn))
5906 *pfn = convert (TYPE_PTRMEMFUNC_FN_TYPE (type), build_addr_func (fn));
5909 /* If we're dealing with a virtual function, we have to adjust 'this'
5910 again, to point to the base which provides the vtable entry for
5911 fn; the call will do the opposite adjustment. */
5912 tree orig_class = DECL_CONTEXT (fn);
5913 tree binfo = binfo_or_else (orig_class, fn_class);
5914 *delta = fold (build (PLUS_EXPR, TREE_TYPE (*delta),
5915 *delta, BINFO_OFFSET (binfo)));
5917 /* We set PFN to the vtable offset at which the function can be
5918 found, plus one (unless ptrmemfunc_vbit_in_delta, in which
5919 case delta is shifted left, and then incremented). */
5920 *pfn = DECL_VINDEX (fn);
5921 *pfn = fold (build (MULT_EXPR, integer_type_node, *pfn,
5922 TYPE_SIZE_UNIT (vtable_entry_type)));
5924 switch (TARGET_PTRMEMFUNC_VBIT_LOCATION)
5926 case ptrmemfunc_vbit_in_pfn:
5927 *pfn = fold (build (PLUS_EXPR, integer_type_node, *pfn,
5931 case ptrmemfunc_vbit_in_delta:
5932 *delta = fold (build (LSHIFT_EXPR, TREE_TYPE (*delta),
5933 *delta, integer_one_node));
5934 *delta = fold (build (PLUS_EXPR, TREE_TYPE (*delta),
5935 *delta, integer_one_node));
5942 *pfn = fold (build1 (NOP_EXPR, TYPE_PTRMEMFUNC_FN_TYPE (type),
5947 /* Return an expression for PFN from the pointer-to-member function
5951 pfn_from_ptrmemfunc (t)
5954 if (TREE_CODE (t) == PTRMEM_CST)
5959 expand_ptrmemfunc_cst (t, &delta, &pfn);
5964 return build_ptrmemfunc_access_expr (t, pfn_identifier);
5967 /* Expression EXPR is about to be implicitly converted to TYPE. Warn
5968 if this is a potentially dangerous thing to do. Returns a possibly
5972 dubious_conversion_warnings (type, expr, errtype, fndecl, parmnum)
5975 const char *errtype;
5979 if (TREE_CODE (type) == REFERENCE_TYPE)
5980 type = TREE_TYPE (type);
5982 /* Issue warnings about peculiar, but valid, uses of NULL. */
5983 if (ARITHMETIC_TYPE_P (type) && expr == null_node)
5986 warning ("passing NULL used for non-pointer %s %P of `%D'",
5987 errtype, parmnum, fndecl);
5989 warning ("%s to non-pointer type `%T' from NULL", errtype, type);
5992 /* Warn about assigning a floating-point type to an integer type. */
5993 if (TREE_CODE (TREE_TYPE (expr)) == REAL_TYPE
5994 && TREE_CODE (type) == INTEGER_TYPE)
5997 warning ("passing `%T' for %s %P of `%D'",
5998 TREE_TYPE (expr), errtype, parmnum, fndecl);
6000 warning ("%s to `%T' from `%T'", errtype, type, TREE_TYPE (expr));
6002 /* And warn about assigning a negative value to an unsigned
6004 else if (TREE_UNSIGNED (type) && TREE_CODE (type) != BOOLEAN_TYPE)
6006 if (TREE_CODE (expr) == INTEGER_CST
6007 && TREE_NEGATED_INT (expr))
6010 warning ("passing negative value `%E' for %s %P of `%D'",
6011 expr, errtype, parmnum, fndecl);
6013 warning ("%s of negative value `%E' to `%T'",
6014 errtype, expr, type);
6017 overflow_warning (expr);
6019 if (TREE_CONSTANT (expr))
6025 /* Convert value RHS to type TYPE as preparation for an assignment to
6026 an lvalue of type TYPE. ERRTYPE is a string to use in error
6027 messages: "assignment", "return", etc. If FNDECL is non-NULL, we
6028 are doing the conversion in order to pass the PARMNUMth argument of
6032 convert_for_assignment (type, rhs, errtype, fndecl, parmnum)
6034 const char *errtype;
6038 register enum tree_code codel = TREE_CODE (type);
6039 register tree rhstype;
6040 register enum tree_code coder;
6042 if (codel == OFFSET_TYPE)
6045 if (TREE_CODE (rhs) == OFFSET_REF)
6046 rhs = resolve_offset_ref (rhs);
6048 /* Strip NON_LVALUE_EXPRs since we aren't using as an lvalue. */
6049 if (TREE_CODE (rhs) == NON_LVALUE_EXPR)
6050 rhs = TREE_OPERAND (rhs, 0);
6052 rhstype = TREE_TYPE (rhs);
6053 coder = TREE_CODE (rhstype);
6055 if (rhs == error_mark_node || rhstype == error_mark_node)
6056 return error_mark_node;
6057 if (TREE_CODE (rhs) == TREE_LIST && TREE_VALUE (rhs) == error_mark_node)
6058 return error_mark_node;
6060 rhs = dubious_conversion_warnings (type, rhs, errtype, fndecl, parmnum);
6062 /* The RHS of an assignment cannot have void type. */
6063 if (coder == VOID_TYPE)
6065 error ("void value not ignored as it ought to be");
6066 return error_mark_node;
6069 /* Simplify the RHS if possible. */
6070 if (TREE_CODE (rhs) == CONST_DECL)
6071 rhs = DECL_INITIAL (rhs);
6073 /* We do not use decl_constant_value here because of this case:
6075 const char* const s = "s";
6077 The conversion rules for a string literal are more lax than for a
6078 variable; in particular, a string literal can be converted to a
6079 "char *" but the variable "s" cannot be converted in the same
6080 way. If the conversion is allowed, the optimization should be
6081 performed while creating the converted expression. */
6085 The expression is implicitly converted (clause _conv_) to the
6086 cv-unqualified type of the left operand.
6088 We allow bad conversions here because by the time we get to this point
6089 we are committed to doing the conversion. If we end up doing a bad
6090 conversion, convert_like will complain. */
6091 if (!can_convert_arg_bad (type, rhstype, rhs))
6093 /* When -Wno-pmf-conversions is use, we just silently allow
6094 conversions from pointers-to-members to plain pointers. If
6095 the conversion doesn't work, cp_convert will complain. */
6097 && TYPE_PTR_P (type)
6098 && TYPE_PTRMEMFUNC_P (rhstype))
6099 rhs = cp_convert (strip_top_quals (type), rhs);
6102 /* If the right-hand side has unknown type, then it is an
6103 overloaded function. Call instantiate_type to get error
6105 if (rhstype == unknown_type_node)
6106 instantiate_type (type, rhs, tf_error | tf_warning);
6108 error ("cannot convert `%T' to `%T' for argument `%P' to `%D'",
6109 rhstype, type, parmnum, fndecl);
6111 error ("cannot convert `%T' to `%T' in %s", rhstype, type,
6113 return error_mark_node;
6116 return perform_implicit_conversion (strip_top_quals (type), rhs);
6119 /* Convert RHS to be of type TYPE.
6120 If EXP is nonzero, it is the target of the initialization.
6121 ERRTYPE is a string to use in error messages.
6123 Two major differences between the behavior of
6124 `convert_for_assignment' and `convert_for_initialization'
6125 are that references are bashed in the former, while
6126 copied in the latter, and aggregates are assigned in
6127 the former (operator=) while initialized in the
6130 If using constructor make sure no conversion operator exists, if one does
6131 exist, an ambiguity exists.
6133 If flags doesn't include LOOKUP_COMPLAIN, don't complain about anything. */
6136 convert_for_initialization (exp, type, rhs, flags, errtype, fndecl, parmnum)
6137 tree exp, type, rhs;
6139 const char *errtype;
6143 register enum tree_code codel = TREE_CODE (type);
6144 register tree rhstype;
6145 register enum tree_code coder;
6147 /* build_c_cast puts on a NOP_EXPR to make the result not an lvalue.
6148 Strip such NOP_EXPRs, since RHS is used in non-lvalue context. */
6149 if (TREE_CODE (rhs) == NOP_EXPR
6150 && TREE_TYPE (rhs) == TREE_TYPE (TREE_OPERAND (rhs, 0))
6151 && codel != REFERENCE_TYPE)
6152 rhs = TREE_OPERAND (rhs, 0);
6154 if (rhs == error_mark_node
6155 || (TREE_CODE (rhs) == TREE_LIST && TREE_VALUE (rhs) == error_mark_node))
6156 return error_mark_node;
6158 if (TREE_CODE (rhs) == OFFSET_REF)
6160 rhs = resolve_offset_ref (rhs);
6161 if (rhs == error_mark_node)
6162 return error_mark_node;
6165 if (TREE_CODE (TREE_TYPE (rhs)) == REFERENCE_TYPE)
6166 rhs = convert_from_reference (rhs);
6168 if ((TREE_CODE (TREE_TYPE (rhs)) == ARRAY_TYPE
6169 && TREE_CODE (type) != ARRAY_TYPE
6170 && (TREE_CODE (type) != REFERENCE_TYPE
6171 || TREE_CODE (TREE_TYPE (type)) != ARRAY_TYPE))
6172 || (TREE_CODE (TREE_TYPE (rhs)) == FUNCTION_TYPE
6173 && (TREE_CODE (type) != REFERENCE_TYPE
6174 || TREE_CODE (TREE_TYPE (type)) != FUNCTION_TYPE))
6175 || TREE_CODE (TREE_TYPE (rhs)) == METHOD_TYPE)
6176 rhs = default_conversion (rhs);
6178 rhstype = TREE_TYPE (rhs);
6179 coder = TREE_CODE (rhstype);
6181 if (coder == ERROR_MARK)
6182 return error_mark_node;
6184 /* We accept references to incomplete types, so we can
6185 return here before checking if RHS is of complete type. */
6187 if (codel == REFERENCE_TYPE)
6189 /* This should eventually happen in convert_arguments. */
6190 int savew = 0, savee = 0;
6193 savew = warningcount, savee = errorcount;
6194 rhs = initialize_reference (type, rhs, /*decl=*/NULL_TREE);
6197 if (warningcount > savew)
6198 cp_warning_at ("in passing argument %P of `%+D'", parmnum, fndecl);
6199 else if (errorcount > savee)
6200 cp_error_at ("in passing argument %P of `%+D'", parmnum, fndecl);
6206 exp = require_complete_type (exp);
6207 if (exp == error_mark_node)
6208 return error_mark_node;
6210 if (TREE_CODE (rhstype) == REFERENCE_TYPE)
6211 rhstype = TREE_TYPE (rhstype);
6213 type = complete_type (type);
6215 if (IS_AGGR_TYPE (type))
6216 return ocp_convert (type, rhs, CONV_IMPLICIT|CONV_FORCE_TEMP, flags);
6218 return convert_for_assignment (type, rhs, errtype, fndecl, parmnum);
6221 /* Expand an ASM statement with operands, handling output operands
6222 that are not variables or INDIRECT_REFS by transforming such
6223 cases into cases that expand_asm_operands can handle.
6225 Arguments are same as for expand_asm_operands.
6227 We don't do default conversions on all inputs, because it can screw
6228 up operands that are expected to be in memory. */
6231 c_expand_asm_operands (string, outputs, inputs, clobbers, vol, filename, line)
6232 tree string, outputs, inputs, clobbers;
6234 const char *filename;
6237 int noutputs = list_length (outputs);
6239 /* o[I] is the place that output number I should be written. */
6240 register tree *o = (tree *) alloca (noutputs * sizeof (tree));
6243 /* Record the contents of OUTPUTS before it is modified. */
6244 for (i = 0, tail = outputs; tail; tail = TREE_CHAIN (tail), i++)
6245 o[i] = TREE_VALUE (tail);
6247 /* Generate the ASM_OPERANDS insn;
6248 store into the TREE_VALUEs of OUTPUTS some trees for
6249 where the values were actually stored. */
6250 expand_asm_operands (string, outputs, inputs, clobbers, vol, filename, line);
6252 /* Copy all the intermediate outputs into the specified outputs. */
6253 for (i = 0, tail = outputs; tail; tail = TREE_CHAIN (tail), i++)
6255 if (o[i] != TREE_VALUE (tail))
6257 expand_expr (build_modify_expr (o[i], NOP_EXPR, TREE_VALUE (tail)),
6258 const0_rtx, VOIDmode, EXPAND_NORMAL);
6261 /* Restore the original value so that it's correct the next
6262 time we expand this function. */
6263 TREE_VALUE (tail) = o[i];
6265 /* Detect modification of read-only values.
6266 (Otherwise done by build_modify_expr.) */
6269 tree type = TREE_TYPE (o[i]);
6270 if (type != error_mark_node
6271 && (CP_TYPE_CONST_P (type)
6272 || (CLASS_TYPE_P (type) && C_TYPE_FIELDS_READONLY (type))))
6273 readonly_error (o[i], "modification by `asm'", 1);
6277 /* Those MODIFY_EXPRs could do autoincrements. */
6281 /* If RETVAL is the address of, or a reference to, a local variable or
6282 temporary give an appropraite warning. */
6285 maybe_warn_about_returning_address_of_local (retval)
6288 tree valtype = TREE_TYPE (DECL_RESULT (current_function_decl));
6289 tree whats_returned = retval;
6293 if (TREE_CODE (whats_returned) == COMPOUND_EXPR)
6294 whats_returned = TREE_OPERAND (whats_returned, 1);
6295 else if (TREE_CODE (whats_returned) == CONVERT_EXPR
6296 || TREE_CODE (whats_returned) == NON_LVALUE_EXPR
6297 || TREE_CODE (whats_returned) == NOP_EXPR)
6298 whats_returned = TREE_OPERAND (whats_returned, 0);
6303 if (TREE_CODE (whats_returned) != ADDR_EXPR)
6305 whats_returned = TREE_OPERAND (whats_returned, 0);
6307 if (TREE_CODE (valtype) == REFERENCE_TYPE)
6309 if (TREE_CODE (whats_returned) == AGGR_INIT_EXPR
6310 || TREE_CODE (whats_returned) == TARGET_EXPR)
6312 /* Get the target. */
6313 whats_returned = TREE_OPERAND (whats_returned, 0);
6314 warning ("returning reference to temporary");
6317 if (TREE_CODE (whats_returned) == VAR_DECL
6318 && DECL_NAME (whats_returned)
6319 && TEMP_NAME_P (DECL_NAME (whats_returned)))
6321 warning ("reference to non-lvalue returned");
6326 if (TREE_CODE (whats_returned) == VAR_DECL
6327 && DECL_NAME (whats_returned)
6328 && DECL_FUNCTION_SCOPE_P (whats_returned)
6329 && !(TREE_STATIC (whats_returned)
6330 || TREE_PUBLIC (whats_returned)))
6332 if (TREE_CODE (valtype) == REFERENCE_TYPE)
6333 cp_warning_at ("reference to local variable `%D' returned",
6336 cp_warning_at ("address of local variable `%D' returned",
6342 /* Check that returning RETVAL from the current function is valid.
6343 Return an expression explicitly showing all conversions required to
6344 change RETVAL into the function return type, and to assign it to
6345 the DECL_RESULT for the function. */
6348 check_return_expr (retval)
6352 /* The type actually returned by the function, after any
6355 int fn_returns_value_p;
6357 /* A `volatile' function is one that isn't supposed to return, ever.
6358 (This is a G++ extension, used to get better code for functions
6359 that call the `volatile' function.) */
6360 if (TREE_THIS_VOLATILE (current_function_decl))
6361 warning ("function declared `noreturn' has a `return' statement");
6363 /* Check for various simple errors. */
6364 if (DECL_DESTRUCTOR_P (current_function_decl))
6367 error ("returning a value from a destructor");
6370 else if (DECL_CONSTRUCTOR_P (current_function_decl))
6372 if (in_function_try_handler)
6373 /* If a return statement appears in a handler of the
6374 function-try-block of a constructor, the program is ill-formed. */
6375 error ("cannot return from a handler of a function-try-block of a constructor");
6377 /* You can't return a value from a constructor. */
6378 error ("returning a value from a constructor");
6382 if (processing_template_decl)
6384 current_function_returns_value = 1;
6388 /* When no explicit return-value is given in a function with a named
6389 return value, the named return value is used. */
6390 result = DECL_RESULT (current_function_decl);
6391 valtype = TREE_TYPE (result);
6392 my_friendly_assert (valtype != NULL_TREE, 19990924);
6393 fn_returns_value_p = !VOID_TYPE_P (valtype);
6394 if (!retval && DECL_NAME (result) && fn_returns_value_p)
6397 /* Check for a return statement with no return value in a function
6398 that's supposed to return a value. */
6399 if (!retval && fn_returns_value_p)
6401 pedwarn ("return-statement with no value, in function declared with a non-void return type");
6402 /* Clear this, so finish_function won't say that we reach the
6403 end of a non-void function (which we don't, we gave a
6405 current_function_returns_null = 0;
6407 /* Check for a return statement with a value in a function that
6408 isn't supposed to return a value. */
6409 else if (retval && !fn_returns_value_p)
6411 if (VOID_TYPE_P (TREE_TYPE (retval)))
6412 /* You can return a `void' value from a function of `void'
6413 type. In that case, we have to evaluate the expression for
6414 its side-effects. */
6415 finish_expr_stmt (retval);
6417 pedwarn ("return-statement with a value, in function declared with a void return type");
6419 current_function_returns_null = 1;
6421 /* There's really no value to return, after all. */
6425 /* Remember that this function can sometimes return without a
6427 current_function_returns_null = 1;
6429 /* Remember that this function did return a value. */
6430 current_function_returns_value = 1;
6432 /* Only operator new(...) throw(), can return NULL [expr.new/13]. */
6433 if ((DECL_OVERLOADED_OPERATOR_P (current_function_decl) == NEW_EXPR
6434 || DECL_OVERLOADED_OPERATOR_P (current_function_decl) == VEC_NEW_EXPR)
6435 && !TYPE_NOTHROW_P (TREE_TYPE (current_function_decl))
6437 && null_ptr_cst_p (retval))
6438 warning ("`operator new' must not return NULL unless it is declared `throw()' (or -fcheck-new is in effect)");
6440 /* Effective C++ rule 15. See also start_function. */
6442 && DECL_NAME (current_function_decl) == ansi_assopname(NOP_EXPR)
6443 && retval != current_class_ref)
6444 warning ("`operator=' should return a reference to `*this'");
6446 /* The fabled Named Return Value optimization, as per [class.copy]/15:
6448 [...] For a function with a class return type, if the expression
6449 in the return statement is the name of a local object, and the cv-
6450 unqualified type of the local object is the same as the function
6451 return type, an implementation is permitted to omit creating the tem-
6452 porary object to hold the function return value [...]
6454 So, if this is a value-returning function that always returns the same
6455 local variable, remember it.
6457 It might be nice to be more flexible, and choose the first suitable
6458 variable even if the function sometimes returns something else, but
6459 then we run the risk of clobbering the variable we chose if the other
6460 returned expression uses the chosen variable somehow. And people expect
6461 this restriction, anyway. (jason 2000-11-19)
6463 See finish_function, genrtl_start_function, and declare_return_variable
6464 for other pieces of this optimization. */
6466 if (fn_returns_value_p && flag_elide_constructors)
6468 if (retval != NULL_TREE
6469 && (current_function_return_value == NULL_TREE
6470 || current_function_return_value == retval)
6471 && TREE_CODE (retval) == VAR_DECL
6472 && DECL_CONTEXT (retval) == current_function_decl
6473 && ! TREE_STATIC (retval)
6474 && (DECL_ALIGN (retval)
6475 >= DECL_ALIGN (DECL_RESULT (current_function_decl)))
6476 && same_type_p ((TYPE_MAIN_VARIANT
6477 (TREE_TYPE (retval))),
6479 (TREE_TYPE (TREE_TYPE (current_function_decl))))))
6480 current_function_return_value = retval;
6482 current_function_return_value = error_mark_node;
6485 /* We don't need to do any conversions when there's nothing being
6487 if (!retval || retval == error_mark_node)
6490 /* Do any required conversions. */
6491 if (retval == result || DECL_CONSTRUCTOR_P (current_function_decl))
6492 /* No conversions are required. */
6496 /* The type the function is declared to return. */
6497 tree functype = TREE_TYPE (TREE_TYPE (current_function_decl));
6499 /* First convert the value to the function's return type, then
6500 to the type of return value's location to handle the
6501 case that functype is smaller than the valtype. */
6502 retval = convert_for_initialization
6503 (NULL_TREE, functype, retval, LOOKUP_NORMAL|LOOKUP_ONLYCONVERTING,
6504 "return", NULL_TREE, 0);
6505 retval = convert (valtype, retval);
6507 /* If the conversion failed, treat this just like `return;'. */
6508 if (retval == error_mark_node)
6510 /* We can't initialize a register from a AGGR_INIT_EXPR. */
6511 else if (! current_function_returns_struct
6512 && TREE_CODE (retval) == TARGET_EXPR
6513 && TREE_CODE (TREE_OPERAND (retval, 1)) == AGGR_INIT_EXPR)
6514 retval = build (COMPOUND_EXPR, TREE_TYPE (retval), retval,
6515 TREE_OPERAND (retval, 0));
6517 maybe_warn_about_returning_address_of_local (retval);
6520 /* Actually copy the value returned into the appropriate location. */
6521 if (retval && retval != result)
6522 retval = build (INIT_EXPR, TREE_TYPE (result), result, retval);
6528 /* Returns nonzero if the pointer-type FROM can be converted to the
6529 pointer-type TO via a qualification conversion. If CONSTP is -1,
6530 then we return nonzero if the pointers are similar, and the
6531 cv-qualification signature of FROM is a proper subset of that of TO.
6533 If CONSTP is positive, then all outer pointers have been
6537 comp_ptr_ttypes_real (to, from, constp)
6541 int to_more_cv_qualified = 0;
6543 for (; ; to = TREE_TYPE (to), from = TREE_TYPE (from))
6545 if (TREE_CODE (to) != TREE_CODE (from))
6548 if (TREE_CODE (from) == OFFSET_TYPE
6549 && same_type_p (TYPE_OFFSET_BASETYPE (from),
6550 TYPE_OFFSET_BASETYPE (to)))
6553 /* Const and volatile mean something different for function types,
6554 so the usual checks are not appropriate. */
6555 if (TREE_CODE (to) != FUNCTION_TYPE && TREE_CODE (to) != METHOD_TYPE)
6557 if (!at_least_as_qualified_p (to, from))
6560 if (!at_least_as_qualified_p (from, to))
6565 ++to_more_cv_qualified;
6569 constp &= TYPE_READONLY (to);
6572 if (TREE_CODE (to) != POINTER_TYPE)
6573 return ((constp >= 0 || to_more_cv_qualified)
6574 && same_type_ignoring_top_level_qualifiers_p (to, from));
6578 /* When comparing, say, char ** to char const **, this function takes
6579 the 'char *' and 'char const *'. Do not pass non-pointer/reference
6580 types to this function. */
6583 comp_ptr_ttypes (to, from)
6586 return comp_ptr_ttypes_real (to, from, 1);
6589 /* Returns 1 if to and from are (possibly multi-level) pointers to the same
6590 type or inheritance-related types, regardless of cv-quals. */
6593 ptr_reasonably_similar (to, from)
6596 for (; ; to = TREE_TYPE (to), from = TREE_TYPE (from))
6598 /* Any target type is similar enough to void. */
6599 if (TREE_CODE (to) == VOID_TYPE
6600 || TREE_CODE (from) == VOID_TYPE)
6603 if (TREE_CODE (to) != TREE_CODE (from))
6606 if (TREE_CODE (from) == OFFSET_TYPE
6607 && comptypes (TYPE_OFFSET_BASETYPE (to),
6608 TYPE_OFFSET_BASETYPE (from),
6609 COMPARE_BASE | COMPARE_RELAXED))
6612 if (TREE_CODE (to) == INTEGER_TYPE
6613 && TYPE_PRECISION (to) == TYPE_PRECISION (from))
6616 if (TREE_CODE (to) == FUNCTION_TYPE)
6619 if (TREE_CODE (to) != POINTER_TYPE)
6621 (TYPE_MAIN_VARIANT (to), TYPE_MAIN_VARIANT (from),
6622 COMPARE_BASE | COMPARE_RELAXED);
6626 /* Like comp_ptr_ttypes, for const_cast. */
6629 comp_ptr_ttypes_const (to, from)
6632 for (; ; to = TREE_TYPE (to), from = TREE_TYPE (from))
6634 if (TREE_CODE (to) != TREE_CODE (from))
6637 if (TREE_CODE (from) == OFFSET_TYPE
6638 && same_type_p (TYPE_OFFSET_BASETYPE (from),
6639 TYPE_OFFSET_BASETYPE (to)))
6642 if (TREE_CODE (to) != POINTER_TYPE)
6643 return same_type_ignoring_top_level_qualifiers_p (to, from);
6647 /* Like comp_ptr_ttypes, for reinterpret_cast. */
6650 comp_ptr_ttypes_reinterpret (to, from)
6655 for (; ; to = TREE_TYPE (to), from = TREE_TYPE (from))
6657 if (TREE_CODE (from) == OFFSET_TYPE)
6658 from = TREE_TYPE (from);
6659 if (TREE_CODE (to) == OFFSET_TYPE)
6660 to = TREE_TYPE (to);
6662 /* Const and volatile mean something different for function types,
6663 so the usual checks are not appropriate. */
6664 if (TREE_CODE (from) != FUNCTION_TYPE && TREE_CODE (from) != METHOD_TYPE
6665 && TREE_CODE (to) != FUNCTION_TYPE && TREE_CODE (to) != METHOD_TYPE)
6667 if (!at_least_as_qualified_p (to, from))
6671 && !at_least_as_qualified_p (from, to))
6673 constp &= TYPE_READONLY (to);
6676 if (TREE_CODE (from) != POINTER_TYPE
6677 || TREE_CODE (to) != POINTER_TYPE)
6682 /* Returns the type qualifiers for this type, including the qualifiers on the
6683 elements for an array type. */
6686 cp_type_quals (type)
6689 type = strip_array_types (type);
6690 if (type == error_mark_node)
6691 return TYPE_UNQUALIFIED;
6692 return TYPE_QUALS (type);
6695 /* Returns nonzero if the TYPE contains a mutable member */
6698 cp_has_mutable_p (type)
6701 type = strip_array_types (type);
6703 return CLASS_TYPE_P (type) && CLASSTYPE_HAS_MUTABLE (type);
6706 /* Subroutine of casts_away_constness. Make T1 and T2 point at
6707 exemplar types such that casting T1 to T2 is casting away castness
6708 if and only if there is no implicit conversion from T1 to T2. */
6711 casts_away_constness_r (t1, t2)
6718 /* [expr.const.cast]
6720 For multi-level pointer to members and multi-level mixed pointers
6721 and pointers to members (conv.qual), the "member" aspect of a
6722 pointer to member level is ignored when determining if a const
6723 cv-qualifier has been cast away. */
6724 if (TYPE_PTRMEM_P (*t1))
6725 *t1 = build_pointer_type (TREE_TYPE (TREE_TYPE (*t1)));
6726 if (TYPE_PTRMEM_P (*t2))
6727 *t2 = build_pointer_type (TREE_TYPE (TREE_TYPE (*t2)));
6729 /* [expr.const.cast]
6731 For two pointer types:
6733 X1 is T1cv1,1 * ... cv1,N * where T1 is not a pointer type
6734 X2 is T2cv2,1 * ... cv2,M * where T2 is not a pointer type
6737 casting from X1 to X2 casts away constness if, for a non-pointer
6738 type T there does not exist an implicit conversion (clause
6741 Tcv1,(N-K+1) * cv1,(N-K+2) * ... cv1,N *
6745 Tcv2,(M-K+1) * cv2,(M-K+2) * ... cv2,M *. */
6747 if (TREE_CODE (*t1) != POINTER_TYPE
6748 || TREE_CODE (*t2) != POINTER_TYPE)
6750 *t1 = cp_build_qualified_type (void_type_node,
6751 cp_type_quals (*t1));
6752 *t2 = cp_build_qualified_type (void_type_node,
6753 cp_type_quals (*t2));
6757 quals1 = cp_type_quals (*t1);
6758 quals2 = cp_type_quals (*t2);
6759 *t1 = TREE_TYPE (*t1);
6760 *t2 = TREE_TYPE (*t2);
6761 casts_away_constness_r (t1, t2);
6762 *t1 = build_pointer_type (*t1);
6763 *t2 = build_pointer_type (*t2);
6764 *t1 = cp_build_qualified_type (*t1, quals1);
6765 *t2 = cp_build_qualified_type (*t2, quals2);
6768 /* Returns nonzero if casting from TYPE1 to TYPE2 casts away
6772 casts_away_constness (t1, t2)
6776 if (TREE_CODE (t2) == REFERENCE_TYPE)
6778 /* [expr.const.cast]
6780 Casting from an lvalue of type T1 to an lvalue of type T2
6781 using a reference cast casts away constness if a cast from an
6782 rvalue of type "pointer to T1" to the type "pointer to T2"
6783 casts away constness. */
6784 t1 = (TREE_CODE (t1) == REFERENCE_TYPE
6785 ? TREE_TYPE (t1) : t1);
6786 return casts_away_constness (build_pointer_type (t1),
6787 build_pointer_type (TREE_TYPE (t2)));
6790 if (TYPE_PTRMEM_P (t1) && TYPE_PTRMEM_P (t2))
6791 /* [expr.const.cast]
6793 Casting from an rvalue of type "pointer to data member of X
6794 of type T1" to the type "pointer to data member of Y of type
6795 T2" casts away constness if a cast from an rvalue of type
6796 "pointer to T1" to the type "pointer to T2" casts away
6798 return casts_away_constness
6799 (build_pointer_type (TREE_TYPE (TREE_TYPE (t1))),
6800 build_pointer_type (TREE_TYPE (TREE_TYPE (t2))));
6802 /* Casting away constness is only something that makes sense for
6803 pointer or reference types. */
6804 if (TREE_CODE (t1) != POINTER_TYPE
6805 || TREE_CODE (t2) != POINTER_TYPE)
6808 /* Top-level qualifiers don't matter. */
6809 t1 = TYPE_MAIN_VARIANT (t1);
6810 t2 = TYPE_MAIN_VARIANT (t2);
6811 casts_away_constness_r (&t1, &t2);
6812 if (!can_convert (t2, t1))
6818 /* Returns TYPE with its cv qualifiers removed
6819 TYPE is T cv* .. *cv where T is not a pointer type,
6820 returns T * .. *. (If T is an array type, then the cv qualifiers
6821 above are those of the array members.) */
6824 strip_all_pointer_quals (type)
6827 if (TREE_CODE (type) == POINTER_TYPE)
6828 return build_pointer_type (strip_all_pointer_quals (TREE_TYPE (type)));
6829 else if (TREE_CODE (type) == OFFSET_TYPE)
6830 return build_offset_type (TYPE_OFFSET_BASETYPE (type),
6831 strip_all_pointer_quals (TREE_TYPE (type)));
6833 return TYPE_MAIN_VARIANT (type);