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 Free Software Foundation, Inc.
4 Hacked by Michael Tiemann (tiemann@cygnus.com)
6 This file is part of GNU CC.
8 GNU CC 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 GNU CC 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 GNU CC; 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). */
43 #include "diagnostic.h"
46 static tree convert_for_assignment PARAMS ((tree, tree, const char *, tree,
48 static tree cp_pointer_int_sum PARAMS ((enum tree_code, tree, tree));
49 static tree rationalize_conditional_expr PARAMS ((enum tree_code, tree));
50 static int comp_target_parms PARAMS ((tree, tree));
51 static int comp_ptr_ttypes_real PARAMS ((tree, tree, int));
52 static int comp_ptr_ttypes_const PARAMS ((tree, tree));
53 static int comp_ptr_ttypes_reinterpret PARAMS ((tree, tree));
54 static int comp_except_types PARAMS ((tree, tree, int));
55 static int comp_array_types PARAMS ((int (*) (tree, tree, int), tree,
57 static tree common_base_type PARAMS ((tree, tree));
58 static tree lookup_anon_field PARAMS ((tree, tree));
59 static tree pointer_diff PARAMS ((tree, tree, tree));
60 static tree qualify_type_recursive PARAMS ((tree, tree));
61 static tree get_delta_difference PARAMS ((tree, tree, int));
62 static int comp_cv_target_types PARAMS ((tree, tree, int));
63 static void casts_away_constness_r PARAMS ((tree *, tree *));
64 static int casts_away_constness PARAMS ((tree, tree));
65 static void maybe_warn_about_returning_address_of_local PARAMS ((tree));
66 static tree strip_all_pointer_quals PARAMS ((tree));
68 /* Return the target type of TYPE, which means return T for:
69 T*, T&, T[], T (...), and otherwise, just T. */
75 if (TREE_CODE (type) == REFERENCE_TYPE)
76 type = TREE_TYPE (type);
77 while (TREE_CODE (type) == POINTER_TYPE
78 || TREE_CODE (type) == ARRAY_TYPE
79 || TREE_CODE (type) == FUNCTION_TYPE
80 || TREE_CODE (type) == METHOD_TYPE
81 || TREE_CODE (type) == OFFSET_TYPE)
82 type = TREE_TYPE (type);
86 /* Do `exp = require_complete_type (exp);' to make sure exp
87 does not have an incomplete type. (That includes void types.)
88 Returns the error_mark_node if the VALUE does not have
89 complete type when this function returns. */
92 require_complete_type (value)
97 if (processing_template_decl || value == error_mark_node)
100 if (TREE_CODE (value) == OVERLOAD)
101 type = unknown_type_node;
103 type = TREE_TYPE (value);
105 /* First, detect a valid value with a complete type. */
106 if (COMPLETE_TYPE_P (type))
109 /* If we see X::Y, we build an OFFSET_TYPE which has
110 not been laid out. Try to avoid an error by interpreting
111 it as this->X::Y, if reasonable. */
112 if (TREE_CODE (value) == OFFSET_REF
113 && current_class_ref != 0
114 && TREE_OPERAND (value, 0) == current_class_ref)
116 value = resolve_offset_ref (value);
117 return require_complete_type (value);
120 if (complete_type_or_else (type, value))
123 return error_mark_node;
126 /* Try to complete TYPE, if it is incomplete. For example, if TYPE is
127 a template instantiation, do the instantiation. Returns TYPE,
128 whether or not it could be completed, unless something goes
129 horribly wrong, in which case the error_mark_node is returned. */
135 if (type == NULL_TREE)
136 /* Rather than crash, we return something sure to cause an error
138 return error_mark_node;
140 if (type == error_mark_node || COMPLETE_TYPE_P (type))
142 else if (TREE_CODE (type) == ARRAY_TYPE && TYPE_DOMAIN (type))
144 tree t = complete_type (TREE_TYPE (type));
145 if (COMPLETE_TYPE_P (t) && ! processing_template_decl)
147 TYPE_NEEDS_CONSTRUCTING (type)
148 = TYPE_NEEDS_CONSTRUCTING (TYPE_MAIN_VARIANT (t));
149 TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type)
150 = TYPE_HAS_NONTRIVIAL_DESTRUCTOR (TYPE_MAIN_VARIANT (t));
152 else if (CLASS_TYPE_P (type) && CLASSTYPE_TEMPLATE_INSTANTIATION (type))
153 instantiate_class_template (TYPE_MAIN_VARIANT (type));
158 /* Like complete_type, but issue an error if the TYPE cannot be
159 completed. VALUE is used for informative diagnostics. WARN_ONLY
160 will cause a warning message to be printed, instead of an error.
161 Returns NULL_TREE if the type cannot be made complete. */
164 complete_type_or_diagnostic (type, value, warn_only)
169 type = complete_type (type);
170 if (type == error_mark_node)
171 /* We already issued an error. */
173 else if (!COMPLETE_TYPE_P (type))
175 cxx_incomplete_type_diagnostic (value, type, warn_only);
182 /* Return truthvalue of whether type of EXP is instantiated. */
188 return (TREE_CODE (exp) == OVERLOAD
189 || TREE_CODE (exp) == TREE_LIST
190 || TREE_TYPE (exp) == unknown_type_node
191 || (TREE_CODE (TREE_TYPE (exp)) == OFFSET_TYPE
192 && TREE_TYPE (TREE_TYPE (exp)) == unknown_type_node));
195 /* Return a pointer or pointer to member type similar to T1, with a
196 cv-qualification signature that is the union of the cv-qualification
197 signatures of T1 and T2: [expr.rel], [expr.eq]. */
200 qualify_type_recursive (t1, t2)
203 if ((TYPE_PTR_P (t1) && TYPE_PTR_P (t2))
204 || (TYPE_PTRMEM_P (t1) && TYPE_PTRMEM_P (t2)))
206 tree tt1 = TREE_TYPE (t1);
207 tree tt2 = TREE_TYPE (t2);
211 tree attributes = (*targetm.merge_type_attributes) (t1, t2);
213 if (TREE_CODE (tt1) == OFFSET_TYPE)
215 b1 = TYPE_OFFSET_BASETYPE (tt1);
216 tt1 = TREE_TYPE (tt1);
217 tt2 = TREE_TYPE (tt2);
222 type_quals = (cp_type_quals (tt1) | cp_type_quals (tt2));
223 tgt = qualify_type_recursive (tt1, tt2);
224 tgt = cp_build_qualified_type (tgt, type_quals);
226 tgt = build_offset_type (b1, tgt);
227 t1 = build_pointer_type (tgt);
228 t1 = build_type_attribute_variant (t1, attributes);
233 /* Return the common type of two parameter lists.
234 We assume that comptypes has already been done and returned 1;
235 if that isn't so, this may crash.
237 As an optimization, free the space we allocate if the parameter
238 lists are already common. */
244 tree oldargs = p1, newargs, n;
248 len = list_length (p1);
249 newargs = tree_last (p1);
251 if (newargs == void_list_node)
260 newargs = tree_cons (NULL_TREE, NULL_TREE, newargs);
265 p1 = TREE_CHAIN (p1), p2 = TREE_CHAIN (p2), n = TREE_CHAIN (n), i++)
267 if (TREE_PURPOSE (p1) && !TREE_PURPOSE (p2))
269 TREE_PURPOSE (n) = TREE_PURPOSE (p1);
272 else if (! TREE_PURPOSE (p1))
274 if (TREE_PURPOSE (p2))
276 TREE_PURPOSE (n) = TREE_PURPOSE (p2);
282 if (1 != simple_cst_equal (TREE_PURPOSE (p1), TREE_PURPOSE (p2)))
284 TREE_PURPOSE (n) = TREE_PURPOSE (p2);
286 if (TREE_VALUE (p1) != TREE_VALUE (p2))
289 TREE_VALUE (n) = merge_types (TREE_VALUE (p1), TREE_VALUE (p2));
292 TREE_VALUE (n) = TREE_VALUE (p1);
300 /* Given a type, perhaps copied for a typedef,
301 find the "original" version of it. */
306 while (TYPE_NAME (t) != NULL_TREE)
308 tree x = TYPE_NAME (t);
309 if (TREE_CODE (x) != TYPE_DECL)
311 x = DECL_ORIGINAL_TYPE (x);
319 /* T1 and T2 are arithmetic or enumeration types. Return the type
320 that will result from the "usual arithmetic conversions" on T1 and
321 T2 as described in [expr]. */
324 type_after_usual_arithmetic_conversions (t1, t2)
328 enum tree_code code1 = TREE_CODE (t1);
329 enum tree_code code2 = TREE_CODE (t2);
332 /* FIXME: Attributes. */
333 my_friendly_assert (ARITHMETIC_TYPE_P (t1)
334 || TREE_CODE (t1) == COMPLEX_TYPE
335 || TREE_CODE (t1) == ENUMERAL_TYPE,
337 my_friendly_assert (ARITHMETIC_TYPE_P (t2)
338 || TREE_CODE (t2) == COMPLEX_TYPE
339 || TREE_CODE (t2) == ENUMERAL_TYPE,
342 /* In what follows, we slightly generalize the rules given in [expr] so
343 as to deal with `long long' and `complex'. First, merge the
345 attributes = (*targetm.merge_type_attributes) (t1, t2);
347 /* If one type is complex, form the common type of the non-complex
348 components, then make that complex. Use T1 or T2 if it is the
350 if (code1 == COMPLEX_TYPE || code2 == COMPLEX_TYPE)
352 tree subtype1 = code1 == COMPLEX_TYPE ? TREE_TYPE (t1) : t1;
353 tree subtype2 = code2 == COMPLEX_TYPE ? TREE_TYPE (t2) : t2;
355 = type_after_usual_arithmetic_conversions (subtype1, subtype2);
357 if (code1 == COMPLEX_TYPE && TREE_TYPE (t1) == subtype)
358 return build_type_attribute_variant (t1, attributes);
359 else if (code2 == COMPLEX_TYPE && TREE_TYPE (t2) == subtype)
360 return build_type_attribute_variant (t2, attributes);
362 return build_type_attribute_variant (build_complex_type (subtype),
366 /* If only one is real, use it as the result. */
367 if (code1 == REAL_TYPE && code2 != REAL_TYPE)
368 return build_type_attribute_variant (t1, attributes);
369 if (code2 == REAL_TYPE && code1 != REAL_TYPE)
370 return build_type_attribute_variant (t2, attributes);
372 /* Perform the integral promotions. */
373 if (code1 != REAL_TYPE)
375 t1 = type_promotes_to (t1);
376 t2 = type_promotes_to (t2);
379 /* Both real or both integers; use the one with greater precision. */
380 if (TYPE_PRECISION (t1) > TYPE_PRECISION (t2))
381 return build_type_attribute_variant (t1, attributes);
382 else if (TYPE_PRECISION (t2) > TYPE_PRECISION (t1))
383 return build_type_attribute_variant (t2, attributes);
385 /* The types are the same; no need to do anything fancy. */
386 if (TYPE_MAIN_VARIANT (t1) == TYPE_MAIN_VARIANT (t2))
387 return build_type_attribute_variant (t1, attributes);
389 if (code1 != REAL_TYPE)
391 /* If one is a sizetype, use it so size_binop doesn't blow up. */
392 if (TYPE_IS_SIZETYPE (t1) > TYPE_IS_SIZETYPE (t2))
393 return build_type_attribute_variant (t1, attributes);
394 if (TYPE_IS_SIZETYPE (t2) > TYPE_IS_SIZETYPE (t1))
395 return build_type_attribute_variant (t2, attributes);
397 /* If one is unsigned long long, then convert the other to unsigned
399 if (same_type_p (TYPE_MAIN_VARIANT (t1), long_long_unsigned_type_node)
400 || same_type_p (TYPE_MAIN_VARIANT (t2), long_long_unsigned_type_node))
401 return build_type_attribute_variant (long_long_unsigned_type_node,
403 /* If one is a long long, and the other is an unsigned long, and
404 long long can represent all the values of an unsigned long, then
405 convert to a long long. Otherwise, convert to an unsigned long
406 long. Otherwise, if either operand is long long, convert the
409 Since we're here, we know the TYPE_PRECISION is the same;
410 therefore converting to long long cannot represent all the values
411 of an unsigned long, so we choose unsigned long long in that
413 if (same_type_p (TYPE_MAIN_VARIANT (t1), long_long_integer_type_node)
414 || same_type_p (TYPE_MAIN_VARIANT (t2), long_long_integer_type_node))
416 tree t = ((TREE_UNSIGNED (t1) || TREE_UNSIGNED (t2))
417 ? long_long_unsigned_type_node
418 : long_long_integer_type_node);
419 return build_type_attribute_variant (t, attributes);
422 /* Go through the same procedure, but for longs. */
423 if (same_type_p (TYPE_MAIN_VARIANT (t1), long_unsigned_type_node)
424 || same_type_p (TYPE_MAIN_VARIANT (t2), long_unsigned_type_node))
425 return build_type_attribute_variant (long_unsigned_type_node,
427 if (same_type_p (TYPE_MAIN_VARIANT (t1), long_integer_type_node)
428 || same_type_p (TYPE_MAIN_VARIANT (t2), long_integer_type_node))
430 tree t = ((TREE_UNSIGNED (t1) || TREE_UNSIGNED (t2))
431 ? long_unsigned_type_node : long_integer_type_node);
432 return build_type_attribute_variant (t, attributes);
434 /* Otherwise prefer the unsigned one. */
435 if (TREE_UNSIGNED (t1))
436 return build_type_attribute_variant (t1, attributes);
438 return build_type_attribute_variant (t2, attributes);
442 if (same_type_p (TYPE_MAIN_VARIANT (t1), long_double_type_node)
443 || same_type_p (TYPE_MAIN_VARIANT (t2), long_double_type_node))
444 return build_type_attribute_variant (long_double_type_node,
446 if (same_type_p (TYPE_MAIN_VARIANT (t1), double_type_node)
447 || same_type_p (TYPE_MAIN_VARIANT (t2), double_type_node))
448 return build_type_attribute_variant (double_type_node,
450 if (same_type_p (TYPE_MAIN_VARIANT (t1), float_type_node)
451 || same_type_p (TYPE_MAIN_VARIANT (t2), float_type_node))
452 return build_type_attribute_variant (float_type_node,
455 /* Two floating-point types whose TYPE_MAIN_VARIANTs are none of
456 the standard C++ floating-point types. Logic earlier in this
457 function has already eliminated the possibility that
458 TYPE_PRECISION (t2) != TYPE_PRECISION (t1), so there's no
459 compelling reason to choose one or the other. */
460 return build_type_attribute_variant (t1, attributes);
464 /* Return the composite pointer type (see [expr.rel]) for T1 and T2.
465 ARG1 and ARG2 are the values with those types. The LOCATION is a
466 string describing the current location, in case an error occurs. */
469 composite_pointer_type (t1, t2, arg1, arg2, location)
474 const char* location;
481 If one operand is a null pointer constant, the composite pointer
482 type is the type of the other operand. */
483 if (null_ptr_cst_p (arg1))
485 if (null_ptr_cst_p (arg2))
488 /* Deal with pointer-to-member functions in the same way as we deal
489 with pointers to functions. */
490 if (TYPE_PTRMEMFUNC_P (t1))
491 t1 = TYPE_PTRMEMFUNC_FN_TYPE (t1);
492 if (TYPE_PTRMEMFUNC_P (t2))
493 t2 = TYPE_PTRMEMFUNC_FN_TYPE (t2);
495 /* Merge the attributes. */
496 attributes = (*targetm.merge_type_attributes) (t1, t2);
502 If one of the operands has type "pointer to cv1 void*", then
503 the other has type "pointer to cv2T", and the composite pointer
504 type is "pointer to cv12 void", where cv12 is the union of cv1
507 If either type is a pointer to void, make sure it is T1. */
508 if (VOID_TYPE_P (TREE_TYPE (t2)))
515 /* Now, if T1 is a pointer to void, merge the qualifiers. */
516 if (VOID_TYPE_P (TREE_TYPE (t1)))
518 if (pedantic && TYPE_PTRFN_P (t2))
519 pedwarn ("ISO C++ forbids %s between pointer of type `void *' and pointer-to-function", location);
522 result_type = cp_build_qualified_type (void_type_node,
524 | cp_type_quals (t2)));
525 result_type = build_pointer_type (result_type);
529 tree full1 = qualify_type_recursive (t1, t2);
530 tree full2 = qualify_type_recursive (t2, t1);
532 int val = comp_target_types (full1, full2, 1);
540 pedwarn ("%s between distinct pointer types `%T' and `%T' lacks a cast",
542 result_type = ptr_type_node;
546 return build_type_attribute_variant (result_type, attributes);
549 /* Return the merged type of two types.
550 We assume that comptypes has already been done and returned 1;
551 if that isn't so, this may crash.
553 This just combines attributes and default arguments; any other
554 differences would cause the two types to compare unalike. */
560 register enum tree_code code1;
561 register enum tree_code code2;
564 /* Save time if the two types are the same. */
567 if (original_type (t1) == original_type (t2))
570 /* If one type is nonsense, use the other. */
571 if (t1 == error_mark_node)
573 if (t2 == error_mark_node)
576 /* Merge the attributes. */
577 attributes = (*targetm.merge_type_attributes) (t1, t2);
579 /* Treat an enum type as the unsigned integer type of the same width. */
581 if (TYPE_PTRMEMFUNC_P (t1))
582 t1 = TYPE_PTRMEMFUNC_FN_TYPE (t1);
583 if (TYPE_PTRMEMFUNC_P (t2))
584 t2 = TYPE_PTRMEMFUNC_FN_TYPE (t2);
586 code1 = TREE_CODE (t1);
587 code2 = TREE_CODE (t2);
593 /* For two pointers, do this recursively on the target type. */
595 tree target = merge_types (TREE_TYPE (t1), TREE_TYPE (t2));
596 int quals = cp_type_quals (t1);
598 if (code1 == POINTER_TYPE)
599 t1 = build_pointer_type (target);
601 t1 = build_reference_type (target);
602 t1 = build_type_attribute_variant (t1, attributes);
603 t1 = cp_build_qualified_type (t1, quals);
605 if (TREE_CODE (target) == METHOD_TYPE)
606 t1 = build_ptrmemfunc_type (t1);
613 tree base = TYPE_OFFSET_BASETYPE (t1);
614 tree target = merge_types (TREE_TYPE (t1), TREE_TYPE (t2));
615 t1 = build_offset_type (base, target);
621 tree elt = merge_types (TREE_TYPE (t1), TREE_TYPE (t2));
622 /* Save space: see if the result is identical to one of the args. */
623 if (elt == TREE_TYPE (t1) && TYPE_DOMAIN (t1))
624 return build_type_attribute_variant (t1, attributes);
625 if (elt == TREE_TYPE (t2) && TYPE_DOMAIN (t2))
626 return build_type_attribute_variant (t2, attributes);
627 /* Merge the element types, and have a size if either arg has one. */
628 t1 = build_cplus_array_type
629 (elt, TYPE_DOMAIN (TYPE_DOMAIN (t1) ? t1 : t2));
634 /* Function types: prefer the one that specified arg types.
635 If both do, merge the arg types. Also merge the return types. */
637 tree valtype = merge_types (TREE_TYPE (t1), TREE_TYPE (t2));
638 tree p1 = TYPE_ARG_TYPES (t1);
639 tree p2 = TYPE_ARG_TYPES (t2);
642 /* Save space: see if the result is identical to one of the args. */
643 if (valtype == TREE_TYPE (t1) && ! p2)
644 return build_type_attribute_variant (t1, attributes);
645 if (valtype == TREE_TYPE (t2) && ! p1)
646 return build_type_attribute_variant (t2, attributes);
648 /* Simple way if one arg fails to specify argument types. */
649 if (p1 == NULL_TREE || TREE_VALUE (p1) == void_type_node)
651 rval = build_function_type (valtype, p2);
652 if ((raises = TYPE_RAISES_EXCEPTIONS (t2)))
653 rval = build_exception_variant (rval, raises);
654 return build_type_attribute_variant (rval, attributes);
656 raises = TYPE_RAISES_EXCEPTIONS (t1);
657 if (p2 == NULL_TREE || TREE_VALUE (p2) == void_type_node)
659 rval = build_function_type (valtype, p1);
661 rval = build_exception_variant (rval, raises);
662 return build_type_attribute_variant (rval, attributes);
665 rval = build_function_type (valtype, commonparms (p1, p2));
666 t1 = build_exception_variant (rval, raises);
672 /* Get this value the long way, since TYPE_METHOD_BASETYPE
673 is just the main variant of this. */
674 tree basetype = TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (t2)));
675 tree raises = TYPE_RAISES_EXCEPTIONS (t1);
678 /* If this was a member function type, get back to the
679 original type of type member function (i.e., without
680 the class instance variable up front. */
681 t1 = build_function_type (TREE_TYPE (t1),
682 TREE_CHAIN (TYPE_ARG_TYPES (t1)));
683 t2 = build_function_type (TREE_TYPE (t2),
684 TREE_CHAIN (TYPE_ARG_TYPES (t2)));
685 t3 = merge_types (t1, t2);
686 t3 = build_cplus_method_type (basetype, TREE_TYPE (t3),
687 TYPE_ARG_TYPES (t3));
688 t1 = build_exception_variant (t3, raises);
694 return build_type_attribute_variant (t1, attributes);
697 /* Return the common type of two types.
698 We assume that comptypes has already been done and returned 1;
699 if that isn't so, this may crash.
701 This is the type for the result of most arithmetic operations
702 if the operands have the given two types. */
708 enum tree_code code1;
709 enum tree_code code2;
711 /* If one type is nonsense, bail. */
712 if (t1 == error_mark_node || t2 == error_mark_node)
713 return error_mark_node;
715 code1 = TREE_CODE (t1);
716 code2 = TREE_CODE (t2);
718 if ((ARITHMETIC_TYPE_P (t1) || code1 == ENUMERAL_TYPE
719 || code1 == COMPLEX_TYPE)
720 && (ARITHMETIC_TYPE_P (t2) || code2 == ENUMERAL_TYPE
721 || code2 == COMPLEX_TYPE))
722 return type_after_usual_arithmetic_conversions (t1, t2);
724 else if ((TYPE_PTR_P (t1) && TYPE_PTR_P (t2))
725 || (TYPE_PTRMEM_P (t1) && TYPE_PTRMEM_P (t2))
726 || (TYPE_PTRMEMFUNC_P (t1) && TYPE_PTRMEMFUNC_P (t2)))
727 return composite_pointer_type (t1, t2, error_mark_node, error_mark_node,
734 /* Compare two exception specifier types for exactness or subsetness, if
735 allowed. Returns 0 for mismatch, 1 for same, 2 if B is allowed by A.
737 [except.spec] "If a class X ... objects of class X or any class publicly
738 and unambigously derrived from X. Similarly, if a pointer type Y * ...
739 exceptions of type Y * or that are pointers to any type publicly and
740 unambigously derrived from Y. Otherwise a function only allows exceptions
741 that have the same type ..."
742 This does not mention cv qualifiers and is different to what throw
743 [except.throw] and catch [except.catch] will do. They will ignore the
744 top level cv qualifiers, and allow qualifiers in the pointer to class
747 We implement the letter of the standard. */
750 comp_except_types (a, b, exact)
754 if (same_type_p (a, b))
758 if (cp_type_quals (a) || cp_type_quals (b))
761 if (TREE_CODE (a) == POINTER_TYPE
762 && TREE_CODE (b) == POINTER_TYPE)
766 if (cp_type_quals (a) || cp_type_quals (b))
770 if (TREE_CODE (a) != RECORD_TYPE
771 || TREE_CODE (b) != RECORD_TYPE)
774 if (ACCESSIBLY_UNIQUELY_DERIVED_P (a, b))
780 /* Return 1 if TYPE1 and TYPE2 are equivalent exception specifiers.
781 If EXACT is 0, T2 can be stricter than T1 (according to 15.4/7),
782 otherwise it must be exact. Exception lists are unordered, but
783 we've already filtered out duplicates. Most lists will be in order,
784 we should try to make use of that. */
787 comp_except_specs (t1, t2, exact)
798 if (t1 == NULL_TREE) /* T1 is ... */
799 return t2 == NULL_TREE || !exact;
800 if (!TREE_VALUE (t1)) /* t1 is EMPTY */
801 return t2 != NULL_TREE && !TREE_VALUE (t2);
802 if (t2 == NULL_TREE) /* T2 is ... */
804 if (TREE_VALUE (t1) && !TREE_VALUE (t2)) /* T2 is EMPTY, T1 is not */
807 /* Neither set is ... or EMPTY, make sure each part of T2 is in T1.
808 Count how many we find, to determine exactness. For exact matching and
809 ordered T1, T2, this is an O(n) operation, otherwise its worst case is
811 for (base = t1; t2 != NULL_TREE; t2 = TREE_CHAIN (t2))
813 for (probe = base; probe != NULL_TREE; probe = TREE_CHAIN (probe))
815 tree a = TREE_VALUE (probe);
816 tree b = TREE_VALUE (t2);
818 if (comp_except_types (a, b, exact))
820 if (probe == base && exact)
821 base = TREE_CHAIN (probe);
826 if (probe == NULL_TREE)
829 return !exact || base == NULL_TREE || length == list_length (t1);
832 /* Compare the array types T1 and T2, using CMP as the type comparison
833 function for the element types. STRICT is as for comptypes. */
836 comp_array_types (cmp, t1, t2, strict)
837 register int (*cmp) PARAMS ((tree, tree, int));
847 /* The type of the array elements must be the same. */
848 if (!(TREE_TYPE (t1) == TREE_TYPE (t2)
849 || (*cmp) (TREE_TYPE (t1), TREE_TYPE (t2),
850 strict & ~COMPARE_REDECLARATION)))
853 d1 = TYPE_DOMAIN (t1);
854 d2 = TYPE_DOMAIN (t2);
859 /* If one of the arrays is dimensionless, and the other has a
860 dimension, they are of different types. However, it is legal to
868 declarations for an array object can specify
869 array types that differ by the presence or absence of a major
870 array bound (_dcl.array_). */
872 return strict & COMPARE_REDECLARATION;
874 /* Check that the dimensions are the same. */
875 return (cp_tree_equal (TYPE_MIN_VALUE (d1),
877 && cp_tree_equal (TYPE_MAX_VALUE (d1),
878 TYPE_MAX_VALUE (d2)));
881 /* Return 1 if T1 and T2 are compatible types for assignment or
882 various other operations. STRICT is a bitwise-or of the COMPARE_*
886 comptypes (t1, t2, strict)
892 int orig_strict = strict;
894 /* The special exemption for redeclaring array types without an
895 array bound only applies at the top level:
900 is not legal, for example. */
901 strict &= ~COMPARE_REDECLARATION;
903 /* Suppress errors caused by previously reported errors */
907 /* This should never happen. */
908 my_friendly_assert (t1 != error_mark_node, 307);
910 if (t2 == error_mark_node)
913 /* If either type is the internal version of sizetype, return the
915 if (TREE_CODE (t1) == INTEGER_TYPE && TYPE_IS_SIZETYPE (t1)
916 && TYPE_DOMAIN (t1) != 0)
917 t1 = TYPE_DOMAIN (t1);
919 if (TREE_CODE (t2) == INTEGER_TYPE && TYPE_IS_SIZETYPE (t2)
920 && TYPE_DOMAIN (t2) != 0)
921 t2 = TYPE_DOMAIN (t2);
923 if (strict & COMPARE_RELAXED)
925 /* Treat an enum type as the unsigned integer type of the same width. */
927 if (TREE_CODE (t1) == ENUMERAL_TYPE)
928 t1 = c_common_type_for_size (TYPE_PRECISION (t1), 1);
929 if (TREE_CODE (t2) == ENUMERAL_TYPE)
930 t2 = c_common_type_for_size (TYPE_PRECISION (t2), 1);
936 if (TYPE_PTRMEMFUNC_P (t1))
937 t1 = TYPE_PTRMEMFUNC_FN_TYPE (t1);
938 if (TYPE_PTRMEMFUNC_P (t2))
939 t2 = TYPE_PTRMEMFUNC_FN_TYPE (t2);
941 /* Different classes of types can't be compatible. */
942 if (TREE_CODE (t1) != TREE_CODE (t2))
945 /* Qualifiers must match. */
946 if (cp_type_quals (t1) != cp_type_quals (t2))
948 if (strict == COMPARE_STRICT
949 && TYPE_FOR_JAVA (t1) != TYPE_FOR_JAVA (t2))
952 /* Allow for two different type nodes which have essentially the same
953 definition. Note that we already checked for equality of the type
954 qualifiers (just above). */
956 if (TYPE_MAIN_VARIANT (t1) == TYPE_MAIN_VARIANT (t2))
959 if (strict & COMPARE_NO_ATTRIBUTES)
961 /* 1 if no need for warning yet, 2 if warning cause has been seen. */
962 else if (! (attrval = (*targetm.comp_type_attributes) (t1, t2)))
965 /* 1 if no need for warning yet, 2 if warning cause has been seen. */
968 switch (TREE_CODE (t1))
970 case TEMPLATE_TEMPLATE_PARM:
971 case BOUND_TEMPLATE_TEMPLATE_PARM:
972 if (TEMPLATE_TYPE_IDX (t1) != TEMPLATE_TYPE_IDX (t2)
973 || TEMPLATE_TYPE_LEVEL (t1) != TEMPLATE_TYPE_LEVEL (t2))
975 if (! comp_template_parms
976 (DECL_TEMPLATE_PARMS (TEMPLATE_TEMPLATE_PARM_TEMPLATE_DECL (t1)),
977 DECL_TEMPLATE_PARMS (TEMPLATE_TEMPLATE_PARM_TEMPLATE_DECL (t2))))
979 if (TREE_CODE (t1) == TEMPLATE_TEMPLATE_PARM)
981 /* Don't check inheritance. */
982 strict = COMPARE_STRICT;
987 if (TYPE_TEMPLATE_INFO (t1) && TYPE_TEMPLATE_INFO (t2)
988 && (TYPE_TI_TEMPLATE (t1) == TYPE_TI_TEMPLATE (t2)
989 || TREE_CODE (t1) == BOUND_TEMPLATE_TEMPLATE_PARM))
990 val = comp_template_args (TYPE_TI_ARGS (t1),
993 if ((strict & COMPARE_BASE) && DERIVED_FROM_P (t1, t2))
995 else if ((strict & COMPARE_RELAXED) && DERIVED_FROM_P (t2, t1))
1000 val = (comptypes (build_pointer_type (TYPE_OFFSET_BASETYPE (t1)),
1001 build_pointer_type (TYPE_OFFSET_BASETYPE (t2)), strict)
1002 && comptypes (TREE_TYPE (t1), TREE_TYPE (t2), strict));
1006 case REFERENCE_TYPE:
1007 t1 = TREE_TYPE (t1);
1008 t2 = TREE_TYPE (t2);
1009 /* first, check whether the referred types match with the
1010 required level of strictness */
1011 val = comptypes (t1, t2, strict);
1014 if (TREE_CODE (t1) == RECORD_TYPE
1015 && TREE_CODE (t2) == RECORD_TYPE)
1021 val = ((TREE_TYPE (t1) == TREE_TYPE (t2)
1022 || comptypes (TREE_TYPE (t1), TREE_TYPE (t2), strict))
1023 && compparms (TYPE_ARG_TYPES (t1), TYPE_ARG_TYPES (t2)));
1027 /* Target types must match incl. qualifiers. We use ORIG_STRICT
1028 here since this is the one place where
1029 COMPARE_REDECLARATION should be used. */
1030 val = comp_array_types (comptypes, t1, t2, orig_strict);
1033 case TEMPLATE_TYPE_PARM:
1034 return TEMPLATE_TYPE_IDX (t1) == TEMPLATE_TYPE_IDX (t2)
1035 && TEMPLATE_TYPE_LEVEL (t1) == TEMPLATE_TYPE_LEVEL (t2);
1038 if (cp_tree_equal (TYPENAME_TYPE_FULLNAME (t1),
1039 TYPENAME_TYPE_FULLNAME (t2)) < 1)
1041 return same_type_p (TYPE_CONTEXT (t1), TYPE_CONTEXT (t2));
1043 case UNBOUND_CLASS_TEMPLATE:
1044 if (cp_tree_equal (TYPE_IDENTIFIER (t1),
1045 TYPE_IDENTIFIER (t2)) < 1)
1047 return same_type_p (TYPE_CONTEXT (t1), TYPE_CONTEXT (t2));
1050 return same_type_p (TREE_TYPE (t1), TREE_TYPE (t2));
1055 return attrval == 2 && val == 1 ? 2 : val;
1058 /* Subroutine of comp_target-types. Make sure that the cv-quals change
1059 only in the same direction as the target type. */
1062 comp_cv_target_types (ttl, ttr, nptrs)
1068 if (!at_least_as_qualified_p (ttl, ttr)
1069 && !at_least_as_qualified_p (ttr, ttl))
1070 /* The qualifications are incomparable. */
1073 if (TYPE_MAIN_VARIANT (ttl) == TYPE_MAIN_VARIANT (ttr))
1074 return more_qualified_p (ttr, ttl) ? -1 : 1;
1076 t = comp_target_types (ttl, ttr, nptrs);
1077 if ((t == 1 && at_least_as_qualified_p (ttl, ttr))
1078 || (t == -1 && at_least_as_qualified_p (ttr, ttl)))
1084 /* Return 1 or -1 if TTL and TTR are pointers to types that are equivalent,
1085 ignoring their qualifiers, 0 if not. Return 1 means that TTR can be
1086 converted to TTL. Return -1 means that TTL can be converted to TTR but
1089 NPTRS is the number of pointers we can strip off and keep cool.
1090 This is used to permit (for aggr A, aggr B) A, B* to convert to A*,
1091 but to not permit B** to convert to A**.
1093 This should go away. Callers should use can_convert or something
1094 similar instead. (jason 17 Apr 1997) */
1097 comp_target_types (ttl, ttr, nptrs)
1101 ttl = TYPE_MAIN_VARIANT (ttl);
1102 ttr = TYPE_MAIN_VARIANT (ttr);
1103 if (same_type_p (ttl, ttr))
1106 if (TREE_CODE (ttr) != TREE_CODE (ttl))
1109 if ((TREE_CODE (ttr) == POINTER_TYPE
1110 || TREE_CODE (ttr) == REFERENCE_TYPE)
1111 /* If we get a pointer with nptrs == 0, we don't allow any tweaking
1112 of the type pointed to. This is necessary for reference init
1113 semantics. We won't get here from a previous call with nptrs == 1;
1114 for multi-level pointers we end up in comp_ptr_ttypes. */
1117 int is_ptr = TREE_CODE (ttr) == POINTER_TYPE;
1119 ttl = TREE_TYPE (ttl);
1120 ttr = TREE_TYPE (ttr);
1124 if (TREE_CODE (ttl) == UNKNOWN_TYPE
1125 || TREE_CODE (ttr) == UNKNOWN_TYPE)
1127 else if (TREE_CODE (ttl) == VOID_TYPE
1128 && TREE_CODE (ttr) != FUNCTION_TYPE
1129 && TREE_CODE (ttr) != METHOD_TYPE
1130 && TREE_CODE (ttr) != OFFSET_TYPE)
1132 else if (TREE_CODE (ttr) == VOID_TYPE
1133 && TREE_CODE (ttl) != FUNCTION_TYPE
1134 && TREE_CODE (ttl) != METHOD_TYPE
1135 && TREE_CODE (ttl) != OFFSET_TYPE)
1137 else if (TREE_CODE (ttl) == POINTER_TYPE
1138 || TREE_CODE (ttl) == ARRAY_TYPE)
1140 if (comp_ptr_ttypes (ttl, ttr))
1142 else if (comp_ptr_ttypes (ttr, ttl))
1148 /* Const and volatile mean something different for function types,
1149 so the usual checks are not appropriate. */
1150 if (TREE_CODE (ttl) == FUNCTION_TYPE || TREE_CODE (ttl) == METHOD_TYPE)
1151 return comp_target_types (ttl, ttr, nptrs - 1);
1153 return comp_cv_target_types (ttl, ttr, nptrs - 1);
1156 if (TREE_CODE (ttr) == ARRAY_TYPE)
1157 return comp_array_types (comp_target_types, ttl, ttr, COMPARE_STRICT);
1158 else if (TREE_CODE (ttr) == FUNCTION_TYPE || TREE_CODE (ttr) == METHOD_TYPE)
1165 if (!same_type_p (TREE_TYPE (ttl), TREE_TYPE (ttr)))
1170 switch (comp_target_types (TREE_TYPE (ttl), TREE_TYPE (ttr), -1))
1179 argsl = TYPE_ARG_TYPES (ttl);
1180 argsr = TYPE_ARG_TYPES (ttr);
1182 /* Compare 'this' here, not in comp_target_parms. */
1183 if (TREE_CODE (ttr) == METHOD_TYPE)
1185 tree tl = TYPE_METHOD_BASETYPE (ttl);
1186 tree tr = TYPE_METHOD_BASETYPE (ttr);
1188 if (!same_or_base_type_p (tr, tl))
1190 if (same_or_base_type_p (tl, tr))
1196 argsl = TREE_CHAIN (argsl);
1197 argsr = TREE_CHAIN (argsr);
1200 switch (comp_target_parms (argsl, argsr))
1208 return saw_contra ? -1 : 1;
1211 else if (TREE_CODE (ttr) == OFFSET_TYPE)
1215 /* Contravariance: we can assign a pointer to base member to a pointer
1216 to derived member. Note difference from simple pointer case, where
1217 we can pass a pointer to derived to a pointer to base. */
1218 if (same_or_base_type_p (TYPE_OFFSET_BASETYPE (ttr),
1219 TYPE_OFFSET_BASETYPE (ttl)))
1221 else if (same_or_base_type_p (TYPE_OFFSET_BASETYPE (ttl),
1222 TYPE_OFFSET_BASETYPE (ttr)))
1232 ttl = TREE_TYPE (ttl);
1233 ttr = TREE_TYPE (ttr);
1235 if (TREE_CODE (ttl) == POINTER_TYPE
1236 || TREE_CODE (ttl) == ARRAY_TYPE)
1238 if (comp_ptr_ttypes (ttl, ttr))
1244 if (comp_cv_target_types (ttl, ttr, nptrs) == 1)
1249 else if (IS_AGGR_TYPE (ttl))
1253 if (same_or_base_type_p (build_pointer_type (ttl),
1254 build_pointer_type (ttr)))
1256 if (same_or_base_type_p (build_pointer_type (ttr),
1257 build_pointer_type (ttl)))
1265 /* Returns 1 if TYPE1 is at least as qualified as TYPE2. */
1268 at_least_as_qualified_p (type1, type2)
1272 /* All qualifiers for TYPE2 must also appear in TYPE1. */
1273 return ((cp_type_quals (type1) & cp_type_quals (type2))
1274 == cp_type_quals (type2));
1277 /* Returns 1 if TYPE1 is more qualified than TYPE2. */
1280 more_qualified_p (type1, type2)
1284 return (cp_type_quals (type1) != cp_type_quals (type2)
1285 && at_least_as_qualified_p (type1, type2));
1288 /* Returns 1 if TYPE1 is more cv-qualified than TYPE2, -1 if TYPE2 is
1289 more cv-qualified that TYPE1, and 0 otherwise. */
1292 comp_cv_qualification (type1, type2)
1296 if (cp_type_quals (type1) == cp_type_quals (type2))
1299 if (at_least_as_qualified_p (type1, type2))
1302 else if (at_least_as_qualified_p (type2, type1))
1308 /* Returns 1 if the cv-qualification signature of TYPE1 is a proper
1309 subset of the cv-qualification signature of TYPE2, and the types
1310 are similar. Returns -1 if the other way 'round, and 0 otherwise. */
1313 comp_cv_qual_signature (type1, type2)
1317 if (comp_ptr_ttypes_real (type2, type1, -1))
1319 else if (comp_ptr_ttypes_real (type1, type2, -1))
1325 /* If two types share a common base type, return that basetype.
1326 If there is not a unique most-derived base type, this function
1327 returns ERROR_MARK_NODE. */
1330 common_base_type (tt1, tt2)
1333 tree best = NULL_TREE;
1336 /* If one is a baseclass of another, that's good enough. */
1337 if (UNIQUELY_DERIVED_FROM_P (tt1, tt2))
1339 if (UNIQUELY_DERIVED_FROM_P (tt2, tt1))
1342 /* Otherwise, try to find a unique baseclass of TT1
1343 that is shared by TT2, and follow that down. */
1344 for (i = CLASSTYPE_N_BASECLASSES (tt1)-1; i >= 0; i--)
1346 tree basetype = TYPE_BINFO_BASETYPE (tt1, i);
1347 tree trial = common_base_type (basetype, tt2);
1350 if (trial == error_mark_node)
1352 if (best == NULL_TREE)
1354 else if (best != trial)
1355 return error_mark_node;
1360 for (i = CLASSTYPE_N_BASECLASSES (tt2)-1; i >= 0; i--)
1362 tree basetype = TYPE_BINFO_BASETYPE (tt2, i);
1363 tree trial = common_base_type (tt1, basetype);
1366 if (trial == error_mark_node)
1368 if (best == NULL_TREE)
1370 else if (best != trial)
1371 return error_mark_node;
1377 /* Subroutines of `comptypes'. */
1379 /* Return 1 if two parameter type lists PARMS1 and PARMS2 are
1380 equivalent in the sense that functions with those parameter types
1381 can have equivalent types. The two lists must be equivalent,
1384 C++: See comment above about TYPE1, TYPE2. */
1387 compparms (parms1, parms2)
1388 tree parms1, parms2;
1390 register tree t1 = parms1, t2 = parms2;
1392 /* An unspecified parmlist matches any specified parmlist
1393 whose argument types don't need default promotions. */
1397 if (t1 == 0 && t2 == 0)
1399 /* If one parmlist is shorter than the other,
1400 they fail to match. */
1401 if (t1 == 0 || t2 == 0)
1403 if (!same_type_p (TREE_VALUE (t2), TREE_VALUE (t1)))
1406 t1 = TREE_CHAIN (t1);
1407 t2 = TREE_CHAIN (t2);
1411 /* This really wants return whether or not parameter type lists
1412 would make their owning functions assignment compatible or not.
1414 The return value is like for comp_target_types.
1416 This should go away, possibly with the exception of the empty parmlist
1417 conversion; there are no conversions between function types in C++.
1418 (jason 17 Apr 1997) */
1421 comp_target_parms (parms1, parms2)
1422 tree parms1, parms2;
1424 register tree t1 = parms1, t2 = parms2;
1425 int warn_contravariance = 0;
1427 /* In C, an unspecified parmlist matches any specified parmlist
1428 whose argument types don't need default promotions. This is not
1429 true for C++, but let's do it anyway for unfixed headers. */
1431 if (t1 == 0 && t2 != 0)
1433 pedwarn ("ISO C++ prohibits conversion from `%#T' to `(...)'",
1435 return self_promoting_args_p (t2);
1438 return self_promoting_args_p (t1);
1440 for (; t1 || t2; t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2))
1444 /* If one parmlist is shorter than the other,
1445 they fail to match, unless STRICT is <= 0. */
1446 if (t1 == 0 || t2 == 0)
1448 p1 = TREE_VALUE (t1);
1449 p2 = TREE_VALUE (t2);
1450 if (same_type_p (p1, p2))
1456 if ((TREE_CODE (p1) == POINTER_TYPE && TREE_CODE (p2) == POINTER_TYPE)
1457 || (TREE_CODE (p1) == REFERENCE_TYPE
1458 && TREE_CODE (p2) == REFERENCE_TYPE))
1460 /* The following is wrong for contravariance,
1461 but many programs depend on it. */
1462 if (TREE_TYPE (p1) == void_type_node)
1464 if (TREE_TYPE (p2) == void_type_node)
1466 warn_contravariance = 1;
1469 if (IS_AGGR_TYPE (TREE_TYPE (p1))
1470 && !same_type_ignoring_top_level_qualifiers_p (TREE_TYPE (p1),
1474 /* Note backwards order due to contravariance. */
1475 if (comp_target_types (p2, p1, 1) <= 0)
1477 if (comp_target_types (p1, p2, 1) > 0)
1479 warn_contravariance = 1;
1485 return warn_contravariance ? -1 : 1;
1489 cxx_sizeof_or_alignof_type (type, op, complain)
1494 enum tree_code type_code;
1496 const char *op_name;
1498 my_friendly_assert (op == SIZEOF_EXPR || op == ALIGNOF_EXPR, 20020720);
1499 if (processing_template_decl)
1500 return build_min_nt (op, type);
1502 op_name = operator_name_info[(int) op].name;
1504 if (TREE_CODE (type) == REFERENCE_TYPE)
1505 type = TREE_TYPE (type);
1506 type_code = TREE_CODE (type);
1508 if (type_code == METHOD_TYPE)
1510 if (complain && (pedantic || warn_pointer_arith))
1511 pedwarn ("invalid application of `%s' to a member function", op_name);
1512 value = size_one_node;
1514 else if (type_code == OFFSET_TYPE)
1517 error ("invalid application of `%s' to non-static member", op_name);
1518 value = size_zero_node;
1521 value = c_sizeof_or_alignof_type (complete_type (type), op, complain);
1530 if (processing_template_decl)
1531 return build_min_nt (SIZEOF_EXPR, e);
1533 if (TREE_CODE (e) == COMPONENT_REF
1534 && DECL_C_BIT_FIELD (TREE_OPERAND (e, 1)))
1535 error ("sizeof applied to a bit-field");
1536 if (is_overloaded_fn (e))
1538 pedwarn ("ISO C++ forbids applying `sizeof' to an expression of function type");
1539 return c_sizeof (char_type_node);
1541 else if (type_unknown_p (e))
1543 cxx_incomplete_type_error (e, TREE_TYPE (e));
1544 return c_sizeof (char_type_node);
1546 /* It's illegal to say `sizeof (X::i)' for `i' a non-static data
1547 member unless you're in a non-static member of X. So hand off to
1548 resolve_offset_ref. [expr.prim] */
1549 else if (TREE_CODE (e) == OFFSET_REF)
1550 e = resolve_offset_ref (e);
1552 if (e == error_mark_node)
1555 return cxx_sizeof (TREE_TYPE (e));
1559 /* Perform the array-to-pointer and function-to-pointer conversions
1562 In addition, references are converted to lvalues and manifest
1563 constants are replaced by their values. */
1566 decay_conversion (exp)
1570 register enum tree_code code;
1572 if (TREE_CODE (exp) == OFFSET_REF)
1573 exp = resolve_offset_ref (exp);
1575 type = TREE_TYPE (exp);
1576 code = TREE_CODE (type);
1578 if (code == REFERENCE_TYPE)
1580 exp = convert_from_reference (exp);
1581 type = TREE_TYPE (exp);
1582 code = TREE_CODE (type);
1585 if (type == error_mark_node)
1586 return error_mark_node;
1588 if (type_unknown_p (exp))
1590 cxx_incomplete_type_error (exp, TREE_TYPE (exp));
1591 return error_mark_node;
1594 /* Constants can be used directly unless they're not loadable. */
1595 if (TREE_CODE (exp) == CONST_DECL)
1596 exp = DECL_INITIAL (exp);
1597 /* Replace a nonvolatile const static variable with its value. We
1598 don't do this for arrays, though; we want the address of the
1599 first element of the array, not the address of the first element
1600 of its initializing constant. */
1601 else if (code != ARRAY_TYPE)
1603 exp = decl_constant_value (exp);
1604 type = TREE_TYPE (exp);
1607 /* build_c_cast puts on a NOP_EXPR to make the result not an lvalue.
1608 Leave such NOP_EXPRs, since RHS is being used in non-lvalue context. */
1610 if (code == VOID_TYPE)
1612 error ("void value not ignored as it ought to be");
1613 return error_mark_node;
1615 if (code == METHOD_TYPE)
1617 if (code == FUNCTION_TYPE || is_overloaded_fn (exp))
1618 return build_unary_op (ADDR_EXPR, exp, 0);
1619 if (code == ARRAY_TYPE)
1624 if (TREE_CODE (exp) == INDIRECT_REF)
1626 /* Stripping away the INDIRECT_REF is not the right
1627 thing to do for references... */
1628 tree inner = TREE_OPERAND (exp, 0);
1629 if (TREE_CODE (TREE_TYPE (inner)) == REFERENCE_TYPE)
1631 inner = build1 (CONVERT_EXPR,
1632 build_pointer_type (TREE_TYPE
1633 (TREE_TYPE (inner))),
1635 TREE_CONSTANT (inner) = TREE_CONSTANT (TREE_OPERAND (inner, 0));
1637 return cp_convert (build_pointer_type (TREE_TYPE (type)), inner);
1640 if (TREE_CODE (exp) == COMPOUND_EXPR)
1642 tree op1 = decay_conversion (TREE_OPERAND (exp, 1));
1643 return build (COMPOUND_EXPR, TREE_TYPE (op1),
1644 TREE_OPERAND (exp, 0), op1);
1648 && ! (TREE_CODE (exp) == CONSTRUCTOR && TREE_STATIC (exp)))
1650 error ("invalid use of non-lvalue array");
1651 return error_mark_node;
1654 ptrtype = build_pointer_type (TREE_TYPE (type));
1656 if (TREE_CODE (exp) == VAR_DECL)
1658 /* ??? This is not really quite correct
1659 in that the type of the operand of ADDR_EXPR
1660 is not the target type of the type of the ADDR_EXPR itself.
1661 Question is, can this lossage be avoided? */
1662 adr = build1 (ADDR_EXPR, ptrtype, exp);
1663 if (!cxx_mark_addressable (exp))
1664 return error_mark_node;
1665 TREE_CONSTANT (adr) = staticp (exp);
1666 TREE_SIDE_EFFECTS (adr) = 0; /* Default would be, same as EXP. */
1669 /* This way is better for a COMPONENT_REF since it can
1670 simplify the offset for a component. */
1671 adr = build_unary_op (ADDR_EXPR, exp, 1);
1672 return cp_convert (ptrtype, adr);
1675 /* [basic.lval]: Class rvalues can have cv-qualified types; non-class
1676 rvalues always have cv-unqualified types. */
1677 if (! CLASS_TYPE_P (type))
1678 exp = cp_convert (TYPE_MAIN_VARIANT (type), exp);
1684 default_conversion (exp)
1688 enum tree_code code;
1690 exp = decay_conversion (exp);
1692 type = TREE_TYPE (exp);
1693 code = TREE_CODE (type);
1695 if (INTEGRAL_CODE_P (code))
1697 tree t = type_promotes_to (type);
1699 return cp_convert (t, exp);
1705 /* Take the address of an inline function without setting TREE_ADDRESSABLE
1709 inline_conversion (exp)
1712 if (TREE_CODE (exp) == FUNCTION_DECL)
1713 exp = build1 (ADDR_EXPR, build_pointer_type (TREE_TYPE (exp)), exp);
1718 /* Returns nonzero iff exp is a STRING_CST or the result of applying
1719 decay_conversion to one. */
1722 string_conv_p (totype, exp, warn)
1728 if (! flag_const_strings || TREE_CODE (totype) != POINTER_TYPE)
1731 t = TREE_TYPE (totype);
1732 if (!same_type_p (t, char_type_node)
1733 && !same_type_p (t, wchar_type_node))
1736 if (TREE_CODE (exp) == STRING_CST)
1738 /* Make sure that we don't try to convert between char and wchar_t. */
1739 if (!same_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (exp))), t))
1744 /* Is this a string constant which has decayed to 'const char *'? */
1745 t = build_pointer_type (build_qualified_type (t, TYPE_QUAL_CONST));
1746 if (!same_type_p (TREE_TYPE (exp), t))
1749 if (TREE_CODE (exp) != ADDR_EXPR
1750 || TREE_CODE (TREE_OPERAND (exp, 0)) != STRING_CST)
1754 /* This warning is not very useful, as it complains about printf. */
1755 if (warn && warn_write_strings)
1756 warning ("deprecated conversion from string constant to `%T'", totype);
1761 /* Given a COND_EXPR, MIN_EXPR, or MAX_EXPR in T, return it in a form that we
1762 can, for example, use as an lvalue. This code used to be in
1763 unary_complex_lvalue, but we needed it to deal with `a = (d == c) ? b : c'
1764 expressions, where we're dealing with aggregates. But now it's again only
1765 called from unary_complex_lvalue. The case (in particular) that led to
1766 this was with CODE == ADDR_EXPR, since it's not an lvalue when we'd
1770 rationalize_conditional_expr (code, t)
1771 enum tree_code code;
1774 /* For MIN_EXPR or MAX_EXPR, fold-const.c has arranged things so that
1775 the first operand is always the one to be used if both operands
1776 are equal, so we know what conditional expression this used to be. */
1777 if (TREE_CODE (t) == MIN_EXPR || TREE_CODE (t) == MAX_EXPR)
1780 build_conditional_expr (build_x_binary_op ((TREE_CODE (t) == MIN_EXPR
1781 ? LE_EXPR : GE_EXPR),
1782 TREE_OPERAND (t, 0),
1783 TREE_OPERAND (t, 1)),
1784 build_unary_op (code, TREE_OPERAND (t, 0), 0),
1785 build_unary_op (code, TREE_OPERAND (t, 1), 0));
1789 build_conditional_expr (TREE_OPERAND (t, 0),
1790 build_unary_op (code, TREE_OPERAND (t, 1), 0),
1791 build_unary_op (code, TREE_OPERAND (t, 2), 0));
1794 /* Given the TYPE of an anonymous union field inside T, return the
1795 FIELD_DECL for the field. If not found return NULL_TREE. Because
1796 anonymous unions can nest, we must also search all anonymous unions
1797 that are directly reachable. */
1800 lookup_anon_field (t, type)
1805 for (field = TYPE_FIELDS (t); field; field = TREE_CHAIN (field))
1807 if (TREE_STATIC (field))
1809 if (TREE_CODE (field) != FIELD_DECL)
1812 /* If we find it directly, return the field. */
1813 if (DECL_NAME (field) == NULL_TREE
1814 && type == TYPE_MAIN_VARIANT (TREE_TYPE (field)))
1819 /* Otherwise, it could be nested, search harder. */
1820 if (DECL_NAME (field) == NULL_TREE
1821 && ANON_AGGR_TYPE_P (TREE_TYPE (field)))
1823 tree subfield = lookup_anon_field (TREE_TYPE (field), type);
1831 /* Build an expression representing OBJECT.MEMBER. OBJECT is an
1832 expression; MEMBER is a DECL or baselink. If ACCESS_PATH is
1833 non-NULL, it indicates the path to the base used to name MEMBER.
1834 If PRESERVE_REFERENCE is true, the expression returned will have
1835 REFERENCE_TYPE if the MEMBER does. Otherwise, the expression
1836 returned will have the type referred to by the reference.
1838 This function does not perform access control; that is either done
1839 earlier by the parser when the name of MEMBER is resolved to MEMBER
1840 itself, or later when overload resolution selects one of the
1841 functions indicated by MEMBER. */
1844 build_class_member_access_expr (tree object, tree member,
1845 tree access_path, bool preserve_reference)
1849 tree result = NULL_TREE;
1851 if (object == error_mark_node || member == error_mark_node)
1852 return error_mark_node;
1854 my_friendly_assert (DECL_P (member) || BASELINK_P (member),
1859 The type of the first expression shall be "class object" (of a
1861 object_type = TREE_TYPE (object);
1862 if (!complete_type_or_else (object_type, object))
1863 return error_mark_node;
1864 if (!CLASS_TYPE_P (object_type))
1866 error ("request for member `%D' in `%E', which is of non-class type `%T'",
1867 member, object, object_type);
1868 return error_mark_node;
1871 /* The standard does not seem to actually say that MEMBER must be a
1872 member of OBJECT_TYPE. However, that is clearly what is
1874 if (DECL_P (member))
1876 member_scope = DECL_CLASS_CONTEXT (member);
1878 if (TREE_DEPRECATED (member))
1879 warn_deprecated_use (member);
1882 member_scope = BINFO_TYPE (BASELINK_BINFO (member));
1883 /* If MEMBER is from an anonymous aggregate, MEMBER_SCOPE will
1884 presently be the anonymous union. Go outwards until we find a
1885 type related to OBJECT_TYPE. */
1886 while (ANON_AGGR_TYPE_P (member_scope)
1887 && !same_type_ignoring_top_level_qualifiers_p (member_scope,
1889 member_scope = TYPE_CONTEXT (member_scope);
1890 if (!member_scope || !DERIVED_FROM_P (member_scope, object_type))
1892 error ("`%D' is not a member of `%T'", member, object_type);
1893 return error_mark_node;
1896 /* In [expr.ref], there is an explicit list of the valid choices for
1897 MEMBER. We check for each of those cases here. */
1898 if (TREE_CODE (member) == VAR_DECL)
1900 /* A static data member. */
1902 /* If OBJECT has side-effects, they are supposed to occur. */
1903 if (TREE_SIDE_EFFECTS (object))
1904 result = build (COMPOUND_EXPR, TREE_TYPE (result), object, result);
1906 else if (TREE_CODE (member) == FIELD_DECL)
1908 /* A non-static data member. */
1913 null_object_p = (TREE_CODE (object) == INDIRECT_REF
1914 && integer_zerop (TREE_OPERAND (object, 0)));
1916 /* Convert OBJECT to the type of MEMBER. */
1917 if (!same_type_p (object_type, member_scope))
1922 binfo = lookup_base (access_path ? access_path : object_type,
1923 member_scope, ba_ignore, &kind);
1924 if (binfo == error_mark_node)
1925 return error_mark_node;
1927 /* It is invalid to use to try to get to a virtual base of a
1928 NULL object. The most common cause is invalid use of
1930 if (null_object_p && kind == bk_via_virtual)
1932 error ("invalid access to non-static data member `%D' of NULL object",
1934 error ("(perhaps the `offsetof' macro was used incorrectly)");
1935 return error_mark_node;
1938 /* Convert to the base. */
1939 object = build_base_path (PLUS_EXPR, object, binfo,
1941 /* If we found the base successfully then we should be able
1942 to convert to it successfully. */
1943 my_friendly_assert (object != error_mark_node,
1947 /* Issue a warning about access a member of a NULL object. */
1948 if (null_object_p && CLASSTYPE_NON_POD_P (object_type))
1950 warning ("invalid access to non-static data member `%D' of NULL object",
1952 warning ("(perhaps the `offsetof' macro was used incorrectly)");
1953 return error_mark_node;
1956 /* If MEMBER is from an anonymous aggregate, we have converted
1957 OBJECT so that it refers to the class containing the
1958 anonymous union. Generate a reference to the anonymous union
1959 itself, and recur to find MEMBER. */
1960 if (ANON_AGGR_TYPE_P (DECL_CONTEXT (member)))
1962 tree anonymous_union;
1964 anonymous_union = lookup_anon_field (TREE_TYPE (object),
1965 DECL_CONTEXT (member));
1966 object = build_class_member_access_expr (object,
1968 /*access_path=*/NULL_TREE,
1969 preserve_reference);
1972 /* Compute the type of the field, as described in [expr.ref]. */
1973 type_quals = TYPE_UNQUALIFIED;
1974 member_type = TREE_TYPE (member);
1975 if (TREE_CODE (member_type) != REFERENCE_TYPE)
1977 type_quals = (cp_type_quals (member_type)
1978 | cp_type_quals (object_type));
1980 /* A field is const (volatile) if the enclosing object, or the
1981 field itself, is const (volatile). But, a mutable field is
1982 not const, even within a const object. */
1983 if (DECL_MUTABLE_P (member))
1984 type_quals &= ~TYPE_QUAL_CONST;
1985 member_type = cp_build_qualified_type (member_type, type_quals);
1988 result = fold (build (COMPONENT_REF, member_type, object, member));
1990 /* Mark the expression const or volatile, as appropriate. Even
1991 though we've dealt with the type above, we still have to mark the
1992 expression itself. */
1993 if (type_quals & TYPE_QUAL_CONST)
1994 TREE_READONLY (result) = 1;
1995 else if (type_quals & TYPE_QUAL_VOLATILE)
1996 TREE_THIS_VOLATILE (result) = 1;
1998 else if (BASELINK_P (member))
2000 /* The member is a (possibly overloaded) member function. */
2003 /* If the MEMBER is exactly one static member function, then we
2004 know the type of the expression. Otherwise, we must wait
2005 until overload resolution has been performed. */
2006 functions = BASELINK_FUNCTIONS (member);
2007 if (TREE_CODE (functions) == FUNCTION_DECL
2008 && DECL_STATIC_FUNCTION_P (functions))
2010 /* A static member function. */
2013 /* If OBJECT has side-effects, they are supposed to occur. */
2014 if (TREE_SIDE_EFFECTS (object))
2015 result = build (COMPOUND_EXPR, TREE_TYPE (result),
2019 /* Note that we do not convert OBJECT to the BASELINK_BINFO
2020 base. That will happen when the function is called. */
2021 result = build (COMPONENT_REF, unknown_type_node, object, member);
2023 else if (TREE_CODE (member) == CONST_DECL)
2025 /* The member is an enumerator. */
2027 /* If OBJECT has side-effects, they are supposed to occur. */
2028 if (TREE_SIDE_EFFECTS (object))
2029 result = build (COMPOUND_EXPR, TREE_TYPE (result),
2034 error ("invalid use of `%D'", member);
2035 return error_mark_node;
2038 if (!preserve_reference)
2041 If E2 is declared to have type "reference to T", then ... the
2042 type of E1.E2 is T. */
2043 result = convert_from_reference (result);
2048 /* This function is called by the parser to process a class member
2049 access expression of the form OBJECT.NAME. NAME is a node used by
2050 the parser to represent a name; it is not yet a DECL. It may,
2051 however, be a BASELINK where the BASELINK_FUNCTIONS is a
2052 TEMPLATE_ID_EXPR. Templates must be looked up by the parser, and
2053 there is no reason to do the lookup twice, so the parser keeps the
2057 finish_class_member_access_expr (tree object, tree name)
2061 tree access_path = NULL_TREE;
2063 if (object == error_mark_node || name == error_mark_node)
2064 return error_mark_node;
2066 if (processing_template_decl)
2067 return build_min_nt (COMPONENT_REF, object, name);
2069 if (TREE_CODE (object) == OFFSET_REF)
2070 object = resolve_offset_ref (object);
2072 object_type = TREE_TYPE (object);
2073 if (TREE_CODE (object_type) == REFERENCE_TYPE)
2075 object = convert_from_reference (object);
2076 object_type = TREE_TYPE (object);
2081 The type of the first expression shall be "class object" (of a
2083 if (!complete_type_or_else (object_type, object))
2084 return error_mark_node;
2085 if (!CLASS_TYPE_P (object_type))
2087 error ("request for member `%D' in `%E', which is of non-class type `%T'",
2088 name, object, object_type);
2089 return error_mark_node;
2092 if (BASELINK_P (name))
2094 /* A member function that has already been looked up. */
2095 my_friendly_assert ((TREE_CODE (BASELINK_FUNCTIONS (name))
2096 == TEMPLATE_ID_EXPR),
2102 bool is_template_id = false;
2103 tree template_args = NULL_TREE;
2105 if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
2107 is_template_id = true;
2108 template_args = TREE_OPERAND (name, 1);
2109 name = TREE_OPERAND (name, 0);
2112 if (TREE_CODE (name) == SCOPE_REF)
2116 /* A qualified name. The qualifying class or namespace `S' has
2117 already been looked up; it is either a TYPE or a
2118 NAMESPACE_DECL. The member name is either an IDENTIFIER_NODE
2119 or a BIT_NOT_EXPR. */
2120 scope = TREE_OPERAND (name, 0);
2121 name = TREE_OPERAND (name, 1);
2122 my_friendly_assert ((CLASS_TYPE_P (scope)
2123 || TREE_CODE (scope) == NAMESPACE_DECL),
2125 my_friendly_assert ((TREE_CODE (name) == IDENTIFIER_NODE
2126 || TREE_CODE (name) == BIT_NOT_EXPR),
2129 /* If SCOPE is a namespace, then the qualified name does not
2130 name a member of OBJECT_TYPE. */
2131 if (TREE_CODE (scope) == NAMESPACE_DECL)
2133 error ("`%D::%D' is not a member of `%T'",
2134 scope, member, object_type);
2135 return error_mark_node;
2138 /* Find the base of OBJECT_TYPE corresponding to SCOPE. */
2139 access_path = lookup_base (object_type, scope, ba_check, NULL);
2140 if (!access_path || access_path == error_mark_node)
2141 return error_mark_node;
2143 /* Look up the member. */
2144 member = lookup_member (access_path, name, /*protect=*/1,
2146 if (member == error_mark_node)
2147 return error_mark_node;
2149 else if (TREE_CODE (name) == BIT_NOT_EXPR)
2152 if (TYPE_IDENTIFIER (object_type) != TREE_OPERAND (name, 0))
2154 error ("destructor specifier `%T::~%T' must have matching names",
2155 object_type, TREE_OPERAND (name, 0));
2156 return error_mark_node;
2158 if (! TYPE_HAS_DESTRUCTOR (object_type))
2160 error ("type `%T' has no destructor", object_type);
2161 return error_mark_node;
2163 member = CLASSTYPE_DESTRUCTORS (object_type);
2165 else if (TREE_CODE (name) == IDENTIFIER_NODE)
2167 /* An unqualified name. */
2168 member = lookup_member (object_type, name, /*protect=*/1,
2170 if (member == error_mark_node)
2171 return error_mark_node;
2175 /* The YACC parser sometimes gives us things that are not names.
2176 These always indicate errors. The recursive-descent parser
2177 does not do this, so this code can go away once that parser
2178 replaces the YACC parser. */
2179 error ("invalid use of `%D'", name);
2180 return error_mark_node;
2185 tree template = member;
2187 if (BASELINK_P (template))
2188 BASELINK_FUNCTIONS (template)
2189 = build_nt (TEMPLATE_ID_EXPR,
2190 BASELINK_FUNCTIONS (template),
2194 error ("`%D' is not a member template function", name);
2195 return error_mark_node;
2200 return build_class_member_access_expr (object, member, access_path,
2201 /*preserve_reference=*/false);
2204 /* Return an expression for the MEMBER_NAME field in the internal
2205 representation of PTRMEM, a pointer-to-member function. (Each
2206 pointer-to-member function type gets its own RECORD_TYPE so it is
2207 more convenient to access the fields by name than by FIELD_DECL.)
2208 This routine converts the NAME to a FIELD_DECL and then creates the
2209 node for the complete expression. */
2212 build_ptrmemfunc_access_expr (tree ptrmem, tree member_name)
2218 /* This code is a stripped down version of
2219 build_class_member_access_expr. It does not work to use that
2220 routine directly because it expects the object to be of class
2222 ptrmem_type = TREE_TYPE (ptrmem);
2223 my_friendly_assert (TYPE_PTRMEMFUNC_P (ptrmem_type), 20020804);
2224 member = lookup_member (ptrmem_type, member_name, /*protect=*/0,
2226 member_type = cp_build_qualified_type (TREE_TYPE (member),
2227 cp_type_quals (ptrmem_type));
2228 return fold (build (COMPONENT_REF, member_type, ptrmem, member));
2231 /* Given an expression PTR for a pointer, return an expression
2232 for the value pointed to.
2233 ERRORSTRING is the name of the operator to appear in error messages.
2235 This function may need to overload OPERATOR_FNNAME.
2236 Must also handle REFERENCE_TYPEs for C++. */
2239 build_x_indirect_ref (ptr, errorstring)
2241 const char *errorstring;
2245 if (processing_template_decl)
2246 return build_min_nt (INDIRECT_REF, ptr);
2248 rval = build_opfncall (INDIRECT_REF, LOOKUP_NORMAL, ptr, NULL_TREE,
2252 return build_indirect_ref (ptr, errorstring);
2256 build_indirect_ref (ptr, errorstring)
2258 const char *errorstring;
2260 register tree pointer, type;
2262 if (ptr == error_mark_node)
2263 return error_mark_node;
2265 if (ptr == current_class_ptr)
2266 return current_class_ref;
2268 pointer = (TREE_CODE (TREE_TYPE (ptr)) == REFERENCE_TYPE
2269 ? ptr : default_conversion (ptr));
2270 type = TREE_TYPE (pointer);
2272 if (TYPE_PTR_P (type) || TREE_CODE (type) == REFERENCE_TYPE)
2276 If the type of the expression is "pointer to T," the type
2277 of the result is "T."
2279 We must use the canonical variant because certain parts of
2280 the back end, like fold, do pointer comparisons between
2282 tree t = canonical_type_variant (TREE_TYPE (type));
2284 if (VOID_TYPE_P (t))
2286 /* A pointer to incomplete type (other than cv void) can be
2287 dereferenced [expr.unary.op]/1 */
2288 error ("`%T' is not a pointer-to-object type", type);
2289 return error_mark_node;
2291 else if (TREE_CODE (pointer) == ADDR_EXPR
2293 && same_type_p (t, TREE_TYPE (TREE_OPERAND (pointer, 0))))
2294 /* The POINTER was something like `&x'. We simplify `*&x' to
2296 return TREE_OPERAND (pointer, 0);
2299 tree ref = build1 (INDIRECT_REF, t, pointer);
2301 /* We *must* set TREE_READONLY when dereferencing a pointer to const,
2302 so that we get the proper error message if the result is used
2303 to assign to. Also, &* is supposed to be a no-op. */
2304 TREE_READONLY (ref) = CP_TYPE_CONST_P (t);
2305 TREE_THIS_VOLATILE (ref) = CP_TYPE_VOLATILE_P (t);
2306 TREE_SIDE_EFFECTS (ref)
2307 = (TREE_THIS_VOLATILE (ref) || TREE_SIDE_EFFECTS (pointer)
2312 /* `pointer' won't be an error_mark_node if we were given a
2313 pointer to member, so it's cool to check for this here. */
2314 else if (TYPE_PTRMEM_P (type) || TYPE_PTRMEMFUNC_P (type))
2315 error ("invalid use of `%s' on pointer to member", errorstring);
2316 else if (pointer != error_mark_node)
2319 error ("invalid type argument of `%s'", errorstring);
2321 error ("invalid type argument");
2323 return error_mark_node;
2326 /* This handles expressions of the form "a[i]", which denotes
2329 This is logically equivalent in C to *(a+i), but we may do it differently.
2330 If A is a variable or a member, we generate a primitive ARRAY_REF.
2331 This avoids forcing the array out of registers, and can work on
2332 arrays that are not lvalues (for example, members of structures returned
2335 If INDEX is of some user-defined type, it must be converted to
2336 integer type. Otherwise, to make a compatible PLUS_EXPR, it
2337 will inherit the type of the array, which will be some pointer type. */
2340 build_array_ref (array, idx)
2345 error ("subscript missing in array reference");
2346 return error_mark_node;
2349 if (TREE_TYPE (array) == error_mark_node
2350 || TREE_TYPE (idx) == error_mark_node)
2351 return error_mark_node;
2353 /* If ARRAY is a COMPOUND_EXPR or COND_EXPR, move our reference
2355 switch (TREE_CODE (array))
2359 tree value = build_array_ref (TREE_OPERAND (array, 1), idx);
2360 return build (COMPOUND_EXPR, TREE_TYPE (value),
2361 TREE_OPERAND (array, 0), value);
2365 return build_conditional_expr
2366 (TREE_OPERAND (array, 0),
2367 build_array_ref (TREE_OPERAND (array, 1), idx),
2368 build_array_ref (TREE_OPERAND (array, 2), idx));
2374 if (TREE_CODE (TREE_TYPE (array)) == ARRAY_TYPE
2375 && TREE_CODE (array) != INDIRECT_REF)
2379 /* Subscripting with type char is likely to lose
2380 on a machine where chars are signed.
2381 So warn on any machine, but optionally.
2382 Don't warn for unsigned char since that type is safe.
2383 Don't warn for signed char because anyone who uses that
2384 must have done so deliberately. */
2385 if (warn_char_subscripts
2386 && TYPE_MAIN_VARIANT (TREE_TYPE (idx)) == char_type_node)
2387 warning ("array subscript has type `char'");
2389 /* Apply default promotions *after* noticing character types. */
2390 idx = default_conversion (idx);
2392 if (TREE_CODE (TREE_TYPE (idx)) != INTEGER_TYPE)
2394 error ("array subscript is not an integer");
2395 return error_mark_node;
2398 /* An array that is indexed by a non-constant
2399 cannot be stored in a register; we must be able to do
2400 address arithmetic on its address.
2401 Likewise an array of elements of variable size. */
2402 if (TREE_CODE (idx) != INTEGER_CST
2403 || (COMPLETE_TYPE_P (TREE_TYPE (TREE_TYPE (array)))
2404 && (TREE_CODE (TYPE_SIZE (TREE_TYPE (TREE_TYPE (array))))
2407 if (!cxx_mark_addressable (array))
2408 return error_mark_node;
2411 /* An array that is indexed by a constant value which is not within
2412 the array bounds cannot be stored in a register either; because we
2413 would get a crash in store_bit_field/extract_bit_field when trying
2414 to access a non-existent part of the register. */
2415 if (TREE_CODE (idx) == INTEGER_CST
2416 && TYPE_VALUES (TREE_TYPE (array))
2417 && ! int_fits_type_p (idx, TYPE_VALUES (TREE_TYPE (array))))
2419 if (!cxx_mark_addressable (array))
2420 return error_mark_node;
2423 if (pedantic && !lvalue_p (array))
2424 pedwarn ("ISO C++ forbids subscripting non-lvalue array");
2426 /* Note in C++ it is valid to subscript a `register' array, since
2427 it is valid to take the address of something with that
2428 storage specification. */
2432 while (TREE_CODE (foo) == COMPONENT_REF)
2433 foo = TREE_OPERAND (foo, 0);
2434 if (TREE_CODE (foo) == VAR_DECL && DECL_REGISTER (foo))
2435 warning ("subscripting array declared `register'");
2438 type = TREE_TYPE (TREE_TYPE (array));
2439 rval = build (ARRAY_REF, type, array, idx);
2440 /* Array ref is const/volatile if the array elements are
2441 or if the array is.. */
2442 TREE_READONLY (rval)
2443 |= (CP_TYPE_CONST_P (type) | TREE_READONLY (array));
2444 TREE_SIDE_EFFECTS (rval)
2445 |= (CP_TYPE_VOLATILE_P (type) | TREE_SIDE_EFFECTS (array));
2446 TREE_THIS_VOLATILE (rval)
2447 |= (CP_TYPE_VOLATILE_P (type) | TREE_THIS_VOLATILE (array));
2448 return require_complete_type (fold (rval));
2452 tree ar = default_conversion (array);
2453 tree ind = default_conversion (idx);
2455 /* Put the integer in IND to simplify error checking. */
2456 if (TREE_CODE (TREE_TYPE (ar)) == INTEGER_TYPE)
2463 if (ar == error_mark_node)
2466 if (TREE_CODE (TREE_TYPE (ar)) != POINTER_TYPE)
2468 error ("subscripted value is neither array nor pointer");
2469 return error_mark_node;
2471 if (TREE_CODE (TREE_TYPE (ind)) != INTEGER_TYPE)
2473 error ("array subscript is not an integer");
2474 return error_mark_node;
2477 return build_indirect_ref (cp_build_binary_op (PLUS_EXPR, ar, ind),
2482 /* Resolve a pointer to member function. INSTANCE is the object
2483 instance to use, if the member points to a virtual member.
2485 This used to avoid checking for virtual functions if basetype
2486 has no virtual functions, according to an earlier ANSI draft.
2487 With the final ISO C++ rules, such an optimization is
2488 incorrect: A pointer to a derived member can be static_cast
2489 to pointer-to-base-member, as long as the dynamic object
2490 later has the right member. */
2493 get_member_function_from_ptrfunc (instance_ptrptr, function)
2494 tree *instance_ptrptr;
2497 if (TREE_CODE (function) == OFFSET_REF)
2498 function = TREE_OPERAND (function, 1);
2500 if (TYPE_PTRMEMFUNC_P (TREE_TYPE (function)))
2502 tree idx, delta, e1, e2, e3, vtbl, basetype;
2503 tree fntype = TYPE_PTRMEMFUNC_FN_TYPE (TREE_TYPE (function));
2505 tree instance_ptr = *instance_ptrptr;
2506 if (instance_ptr == error_mark_node)
2508 if (TREE_CODE (function) == PTRMEM_CST)
2510 /* Extracting the function address from a pmf is only
2511 allowed with -Wno-pmf-conversions. It only works for
2513 e1 = build_addr_func (PTRMEM_CST_MEMBER (function));
2514 e1 = convert (fntype, e1);
2519 error ("object missing in use of `%E'", function);
2520 return error_mark_node;
2524 if (TREE_SIDE_EFFECTS (instance_ptr))
2525 instance_ptr = save_expr (instance_ptr);
2527 if (TREE_SIDE_EFFECTS (function))
2528 function = save_expr (function);
2530 /* Start by extracting all the information from the PMF itself. */
2531 e3 = PFN_FROM_PTRMEMFUNC (function);
2532 delta = build_ptrmemfunc_access_expr (function, delta_identifier);
2533 idx = build1 (NOP_EXPR, vtable_index_type, e3);
2534 switch (TARGET_PTRMEMFUNC_VBIT_LOCATION)
2536 case ptrmemfunc_vbit_in_pfn:
2537 e1 = cp_build_binary_op (BIT_AND_EXPR, idx, integer_one_node);
2538 idx = cp_build_binary_op (MINUS_EXPR, idx, integer_one_node);
2541 case ptrmemfunc_vbit_in_delta:
2542 e1 = cp_build_binary_op (BIT_AND_EXPR, delta, integer_one_node);
2543 delta = cp_build_binary_op (RSHIFT_EXPR, delta, integer_one_node);
2550 /* Convert down to the right base before using the instance. First
2552 basetype = TYPE_METHOD_BASETYPE (TREE_TYPE (fntype));
2553 basetype = lookup_base (TREE_TYPE (TREE_TYPE (instance_ptr)),
2554 basetype, ba_check, NULL);
2555 instance_ptr = build_base_path (PLUS_EXPR, instance_ptr, basetype, 1);
2556 if (instance_ptr == error_mark_node)
2557 return error_mark_node;
2558 /* ...and then the delta in the PMF. */
2559 instance_ptr = build (PLUS_EXPR, TREE_TYPE (instance_ptr),
2560 instance_ptr, delta);
2562 /* Hand back the adjusted 'this' argument to our caller. */
2563 *instance_ptrptr = instance_ptr;
2565 /* Next extract the vtable pointer from the object. */
2566 vtbl = build1 (NOP_EXPR, build_pointer_type (vtbl_ptr_type_node),
2568 vtbl = build_indirect_ref (vtbl, NULL);
2570 /* Finally, extract the function pointer from the vtable. */
2571 e2 = fold (build (PLUS_EXPR, TREE_TYPE (vtbl), vtbl, idx));
2572 e2 = build_indirect_ref (e2, NULL);
2573 TREE_CONSTANT (e2) = 1;
2575 /* When using function descriptors, the address of the
2576 vtable entry is treated as a function pointer. */
2577 if (TARGET_VTABLE_USES_DESCRIPTORS)
2578 e2 = build1 (NOP_EXPR, TREE_TYPE (e2),
2579 build_unary_op (ADDR_EXPR, e2, /*noconvert=*/1));
2581 TREE_TYPE (e2) = TREE_TYPE (e3);
2582 e1 = build_conditional_expr (e1, e2, e3);
2584 /* Make sure this doesn't get evaluated first inside one of the
2585 branches of the COND_EXPR. */
2586 if (TREE_CODE (instance_ptr) == SAVE_EXPR)
2587 e1 = build (COMPOUND_EXPR, TREE_TYPE (e1),
2596 build_function_call_real (function, params, require_complete, flags)
2597 tree function, params;
2598 int require_complete, flags;
2600 register tree fntype, fndecl;
2601 register tree value_type;
2602 register tree coerced_params;
2604 tree name = NULL_TREE, assembler_name = NULL_TREE;
2606 tree original = function;
2608 /* build_c_cast puts on a NOP_EXPR to make the result not an lvalue.
2609 Strip such NOP_EXPRs, since FUNCTION is used in non-lvalue context. */
2610 if (TREE_CODE (function) == NOP_EXPR
2611 && TREE_TYPE (function) == TREE_TYPE (TREE_OPERAND (function, 0)))
2612 function = TREE_OPERAND (function, 0);
2614 if (TREE_CODE (function) == FUNCTION_DECL)
2616 name = DECL_NAME (function);
2617 assembler_name = DECL_ASSEMBLER_NAME (function);
2619 mark_used (function);
2622 /* Convert anything with function type to a pointer-to-function. */
2623 if (pedantic && DECL_MAIN_P (function))
2624 pedwarn ("ISO C++ forbids calling `::main' from within program");
2626 /* Differs from default_conversion by not setting TREE_ADDRESSABLE
2627 (because calling an inline function does not mean the function
2628 needs to be separately compiled). */
2630 if (DECL_INLINE (function))
2631 function = inline_conversion (function);
2633 function = build_addr_func (function);
2639 function = build_addr_func (function);
2642 if (function == error_mark_node)
2643 return error_mark_node;
2645 fntype = TREE_TYPE (function);
2647 if (TYPE_PTRMEMFUNC_P (fntype))
2649 error ("must use .* or ->* to call pointer-to-member function in `%E (...)'",
2651 return error_mark_node;
2654 is_method = (TREE_CODE (fntype) == POINTER_TYPE
2655 && TREE_CODE (TREE_TYPE (fntype)) == METHOD_TYPE);
2657 if (!((TREE_CODE (fntype) == POINTER_TYPE
2658 && TREE_CODE (TREE_TYPE (fntype)) == FUNCTION_TYPE)
2660 || TREE_CODE (function) == TEMPLATE_ID_EXPR))
2662 error ("`%E' cannot be used as a function", original);
2663 return error_mark_node;
2666 /* fntype now gets the type of function pointed to. */
2667 fntype = TREE_TYPE (fntype);
2669 /* Convert the parameters to the types declared in the
2670 function prototype, or apply default promotions. */
2672 if (flags & LOOKUP_COMPLAIN)
2673 coerced_params = convert_arguments (TYPE_ARG_TYPES (fntype),
2674 params, fndecl, LOOKUP_NORMAL);
2676 coerced_params = convert_arguments (TYPE_ARG_TYPES (fntype),
2679 if (coerced_params == error_mark_node)
2681 if (flags & LOOKUP_SPECULATIVELY)
2684 return error_mark_node;
2687 /* Check for errors in format strings. */
2690 check_function_format (NULL, TYPE_ATTRIBUTES (fntype), coerced_params);
2692 /* Recognize certain built-in functions so we can make tree-codes
2693 other than CALL_EXPR. We do this when it enables fold-const.c
2694 to do something useful. */
2696 if (TREE_CODE (function) == ADDR_EXPR
2697 && TREE_CODE (TREE_OPERAND (function, 0)) == FUNCTION_DECL
2698 && DECL_BUILT_IN (TREE_OPERAND (function, 0)))
2700 result = expand_tree_builtin (TREE_OPERAND (function, 0),
2701 params, coerced_params);
2706 /* Some built-in function calls will be evaluated at
2707 compile-time in fold (). */
2708 result = fold (build_call (function, coerced_params));
2709 value_type = TREE_TYPE (result);
2711 if (require_complete)
2713 if (TREE_CODE (value_type) == VOID_TYPE)
2715 result = require_complete_type (result);
2717 if (IS_AGGR_TYPE (value_type))
2718 result = build_cplus_new (value_type, result);
2719 return convert_from_reference (result);
2723 build_function_call (function, params)
2724 tree function, params;
2726 return build_function_call_real (function, params, 1, LOOKUP_NORMAL);
2729 /* Convert the actual parameter expressions in the list VALUES
2730 to the types in the list TYPELIST.
2731 If parmdecls is exhausted, or when an element has NULL as its type,
2732 perform the default conversions.
2734 NAME is an IDENTIFIER_NODE or 0. It is used only for error messages.
2736 This is also where warnings about wrong number of args are generated.
2738 Return a list of expressions for the parameters as converted.
2740 Both VALUES and the returned value are chains of TREE_LIST nodes
2741 with the elements of the list in the TREE_VALUE slots of those nodes.
2743 In C++, unspecified trailing parameters can be filled in with their
2744 default arguments, if such were specified. Do so here. */
2747 convert_arguments (typelist, values, fndecl, flags)
2748 tree typelist, values, fndecl;
2751 register tree typetail, valtail;
2752 register tree result = NULL_TREE;
2753 const char *called_thing = 0;
2756 /* Argument passing is always copy-initialization. */
2757 flags |= LOOKUP_ONLYCONVERTING;
2761 if (TREE_CODE (TREE_TYPE (fndecl)) == METHOD_TYPE)
2763 if (DECL_NAME (fndecl) == NULL_TREE
2764 || IDENTIFIER_HAS_TYPE_VALUE (DECL_NAME (fndecl)))
2765 called_thing = "constructor";
2767 called_thing = "member function";
2770 called_thing = "function";
2773 for (valtail = values, typetail = typelist;
2775 valtail = TREE_CHAIN (valtail), i++)
2777 register tree type = typetail ? TREE_VALUE (typetail) : 0;
2778 register tree val = TREE_VALUE (valtail);
2780 if (val == error_mark_node)
2781 return error_mark_node;
2783 if (type == void_type_node)
2787 cp_error_at ("too many arguments to %s `%+#D'", called_thing,
2789 error ("at this point in file");
2792 error ("too many arguments to function");
2793 /* In case anybody wants to know if this argument
2796 TREE_TYPE (tree_last (result)) = error_mark_node;
2800 if (TREE_CODE (val) == OFFSET_REF)
2801 val = resolve_offset_ref (val);
2803 /* build_c_cast puts on a NOP_EXPR to make the result not an lvalue.
2804 Strip such NOP_EXPRs, since VAL is used in non-lvalue context. */
2805 if (TREE_CODE (val) == NOP_EXPR
2806 && TREE_TYPE (val) == TREE_TYPE (TREE_OPERAND (val, 0))
2807 && (type == 0 || TREE_CODE (type) != REFERENCE_TYPE))
2808 val = TREE_OPERAND (val, 0);
2810 if (type == 0 || TREE_CODE (type) != REFERENCE_TYPE)
2812 if (TREE_CODE (TREE_TYPE (val)) == ARRAY_TYPE
2813 || TREE_CODE (TREE_TYPE (val)) == FUNCTION_TYPE
2814 || TREE_CODE (TREE_TYPE (val)) == METHOD_TYPE)
2815 val = default_conversion (val);
2818 if (val == error_mark_node)
2819 return error_mark_node;
2823 /* Formal parm type is specified by a function prototype. */
2826 if (!COMPLETE_TYPE_P (complete_type (type)))
2828 error ("parameter type of called function is incomplete");
2833 parmval = convert_for_initialization
2834 (NULL_TREE, type, val, flags,
2835 "argument passing", fndecl, i);
2836 parmval = convert_for_arg_passing (type, parmval);
2839 if (parmval == error_mark_node)
2840 return error_mark_node;
2842 result = tree_cons (NULL_TREE, parmval, result);
2846 if (TREE_CODE (TREE_TYPE (val)) == REFERENCE_TYPE)
2847 val = convert_from_reference (val);
2849 if (fndecl && DECL_BUILT_IN (fndecl)
2850 && DECL_FUNCTION_CODE (fndecl) == BUILT_IN_CONSTANT_P)
2851 /* Don't do ellipsis conversion for __built_in_constant_p
2852 as this will result in spurious warnings for non-POD
2854 val = require_complete_type (val);
2856 val = convert_arg_to_ellipsis (val);
2858 result = tree_cons (NULL_TREE, val, result);
2862 typetail = TREE_CHAIN (typetail);
2865 if (typetail != 0 && typetail != void_list_node)
2867 /* See if there are default arguments that can be used */
2868 if (TREE_PURPOSE (typetail))
2870 for (; typetail != void_list_node; ++i)
2873 = convert_default_arg (TREE_VALUE (typetail),
2874 TREE_PURPOSE (typetail),
2877 if (parmval == error_mark_node)
2878 return error_mark_node;
2880 result = tree_cons (0, parmval, result);
2881 typetail = TREE_CHAIN (typetail);
2882 /* ends with `...'. */
2883 if (typetail == NULL_TREE)
2891 cp_error_at ("too few arguments to %s `%+#D'",
2892 called_thing, fndecl);
2893 error ("at this point in file");
2896 error ("too few arguments to function");
2897 return error_mark_list;
2901 return nreverse (result);
2904 /* Build a binary-operation expression, after performing default
2905 conversions on the operands. CODE is the kind of expression to build. */
2908 build_x_binary_op (code, arg1, arg2)
2909 enum tree_code code;
2912 if (processing_template_decl)
2913 return build_min_nt (code, arg1, arg2);
2915 return build_new_op (code, LOOKUP_NORMAL, arg1, arg2, NULL_TREE);
2918 /* Build a binary-operation expression without default conversions.
2919 CODE is the kind of expression to build.
2920 This function differs from `build' in several ways:
2921 the data type of the result is computed and recorded in it,
2922 warnings are generated if arg data types are invalid,
2923 special handling for addition and subtraction of pointers is known,
2924 and some optimization is done (operations on narrow ints
2925 are done in the narrower type when that gives the same result).
2926 Constant folding is also done before the result is returned.
2928 Note that the operands will never have enumeral types
2929 because either they have just had the default conversions performed
2930 or they have both just been converted to some other type in which
2931 the arithmetic is to be done.
2933 C++: must do special pointer arithmetic when implementing
2934 multiple inheritance, and deal with pointer to member functions. */
2937 build_binary_op (code, orig_op0, orig_op1, convert_p)
2938 enum tree_code code;
2939 tree orig_op0, orig_op1;
2940 int convert_p ATTRIBUTE_UNUSED;
2943 register enum tree_code code0, code1;
2946 /* Expression code to give to the expression when it is built.
2947 Normally this is CODE, which is what the caller asked for,
2948 but in some special cases we change it. */
2949 register enum tree_code resultcode = code;
2951 /* Data type in which the computation is to be performed.
2952 In the simplest cases this is the common type of the arguments. */
2953 register tree result_type = NULL;
2955 /* Nonzero means operands have already been type-converted
2956 in whatever way is necessary.
2957 Zero means they need to be converted to RESULT_TYPE. */
2960 /* Nonzero means create the expression with this type, rather than
2962 tree build_type = 0;
2964 /* Nonzero means after finally constructing the expression
2965 convert it to this type. */
2966 tree final_type = 0;
2968 /* Nonzero if this is an operation like MIN or MAX which can
2969 safely be computed in short if both args are promoted shorts.
2970 Also implies COMMON.
2971 -1 indicates a bitwise operation; this makes a difference
2972 in the exact conditions for when it is safe to do the operation
2973 in a narrower mode. */
2976 /* Nonzero if this is a comparison operation;
2977 if both args are promoted shorts, compare the original shorts.
2978 Also implies COMMON. */
2979 int short_compare = 0;
2981 /* Nonzero if this is a right-shift operation, which can be computed on the
2982 original short and then promoted if the operand is a promoted short. */
2983 int short_shift = 0;
2985 /* Nonzero means set RESULT_TYPE to the common type of the args. */
2988 /* Apply default conversions. */
2992 if (code == TRUTH_AND_EXPR || code == TRUTH_ANDIF_EXPR
2993 || code == TRUTH_OR_EXPR || code == TRUTH_ORIF_EXPR
2994 || code == TRUTH_XOR_EXPR)
2996 if (!really_overloaded_fn (op0))
2997 op0 = decay_conversion (op0);
2998 if (!really_overloaded_fn (op1))
2999 op1 = decay_conversion (op1);
3003 if (!really_overloaded_fn (op0))
3004 op0 = default_conversion (op0);
3005 if (!really_overloaded_fn (op1))
3006 op1 = default_conversion (op1);
3009 /* Strip NON_LVALUE_EXPRs, etc., since we aren't using as an lvalue. */
3010 STRIP_TYPE_NOPS (op0);
3011 STRIP_TYPE_NOPS (op1);
3013 /* DTRT if one side is an overloaded function, but complain about it. */
3014 if (type_unknown_p (op0))
3016 tree t = instantiate_type (TREE_TYPE (op1), op0, tf_none);
3017 if (t != error_mark_node)
3019 pedwarn ("assuming cast to type `%T' from overloaded function",
3024 if (type_unknown_p (op1))
3026 tree t = instantiate_type (TREE_TYPE (op0), op1, tf_none);
3027 if (t != error_mark_node)
3029 pedwarn ("assuming cast to type `%T' from overloaded function",
3035 type0 = TREE_TYPE (op0);
3036 type1 = TREE_TYPE (op1);
3038 /* The expression codes of the data types of the arguments tell us
3039 whether the arguments are integers, floating, pointers, etc. */
3040 code0 = TREE_CODE (type0);
3041 code1 = TREE_CODE (type1);
3043 /* If an error was already reported for one of the arguments,
3044 avoid reporting another error. */
3046 if (code0 == ERROR_MARK || code1 == ERROR_MARK)
3047 return error_mark_node;
3052 /* Handle the pointer + int case. */
3053 if (code0 == POINTER_TYPE && code1 == INTEGER_TYPE)
3054 return cp_pointer_int_sum (PLUS_EXPR, op0, op1);
3055 else if (code1 == POINTER_TYPE && code0 == INTEGER_TYPE)
3056 return cp_pointer_int_sum (PLUS_EXPR, op1, op0);
3062 /* Subtraction of two similar pointers.
3063 We must subtract them as integers, then divide by object size. */
3064 if (code0 == POINTER_TYPE && code1 == POINTER_TYPE
3065 && comp_target_types (type0, type1, 1))
3066 return pointer_diff (op0, op1, common_type (type0, type1));
3067 /* Handle pointer minus int. Just like pointer plus int. */
3068 else if (code0 == POINTER_TYPE && code1 == INTEGER_TYPE)
3069 return cp_pointer_int_sum (MINUS_EXPR, op0, op1);
3078 case TRUNC_DIV_EXPR:
3080 case FLOOR_DIV_EXPR:
3081 case ROUND_DIV_EXPR:
3082 case EXACT_DIV_EXPR:
3083 if ((code0 == INTEGER_TYPE || code0 == REAL_TYPE
3084 || code0 == COMPLEX_TYPE)
3085 && (code1 == INTEGER_TYPE || code1 == REAL_TYPE
3086 || code1 == COMPLEX_TYPE))
3088 if (TREE_CODE (op1) == INTEGER_CST && integer_zerop (op1))
3089 warning ("division by zero in `%E / 0'", op0);
3090 else if (TREE_CODE (op1) == REAL_CST && real_zerop (op1))
3091 warning ("division by zero in `%E / 0.'", op0);
3093 if (!(code0 == INTEGER_TYPE && code1 == INTEGER_TYPE))
3094 resultcode = RDIV_EXPR;
3096 /* When dividing two signed integers, we have to promote to int.
3097 unless we divide by a constant != -1. Note that default
3098 conversion will have been performed on the operands at this
3099 point, so we have to dig out the original type to find out if
3101 shorten = ((TREE_CODE (op0) == NOP_EXPR
3102 && TREE_UNSIGNED (TREE_TYPE (TREE_OPERAND (op0, 0))))
3103 || (TREE_CODE (op1) == INTEGER_CST
3104 && ! integer_all_onesp (op1)));
3111 case BIT_ANDTC_EXPR:
3114 if (code0 == INTEGER_TYPE && code1 == INTEGER_TYPE)
3118 case TRUNC_MOD_EXPR:
3119 case FLOOR_MOD_EXPR:
3120 if (code1 == INTEGER_TYPE && integer_zerop (op1))
3121 warning ("division by zero in `%E %% 0'", op0);
3122 else if (code1 == REAL_TYPE && real_zerop (op1))
3123 warning ("division by zero in `%E %% 0.'", op0);
3125 if (code0 == INTEGER_TYPE && code1 == INTEGER_TYPE)
3127 /* Although it would be tempting to shorten always here, that loses
3128 on some targets, since the modulo instruction is undefined if the
3129 quotient can't be represented in the computation mode. We shorten
3130 only if unsigned or if dividing by something we know != -1. */
3131 shorten = ((TREE_CODE (op0) == NOP_EXPR
3132 && TREE_UNSIGNED (TREE_TYPE (TREE_OPERAND (op0, 0))))
3133 || (TREE_CODE (op1) == INTEGER_CST
3134 && ! integer_all_onesp (op1)));
3139 case TRUTH_ANDIF_EXPR:
3140 case TRUTH_ORIF_EXPR:
3141 case TRUTH_AND_EXPR:
3143 result_type = boolean_type_node;
3146 /* Shift operations: result has same type as first operand;
3147 always convert second operand to int.
3148 Also set SHORT_SHIFT if shifting rightward. */
3151 if (code0 == INTEGER_TYPE && code1 == INTEGER_TYPE)
3153 result_type = type0;
3154 if (TREE_CODE (op1) == INTEGER_CST)
3156 if (tree_int_cst_lt (op1, integer_zero_node))
3157 warning ("right shift count is negative");
3160 if (! integer_zerop (op1))
3162 if (compare_tree_int (op1, TYPE_PRECISION (type0)) >= 0)
3163 warning ("right shift count >= width of type");
3166 /* Convert the shift-count to an integer, regardless of
3167 size of value being shifted. */
3168 if (TYPE_MAIN_VARIANT (TREE_TYPE (op1)) != integer_type_node)
3169 op1 = cp_convert (integer_type_node, op1);
3170 /* Avoid converting op1 to result_type later. */
3176 if (code0 == INTEGER_TYPE && code1 == INTEGER_TYPE)
3178 result_type = type0;
3179 if (TREE_CODE (op1) == INTEGER_CST)
3181 if (tree_int_cst_lt (op1, integer_zero_node))
3182 warning ("left shift count is negative");
3183 else if (compare_tree_int (op1, TYPE_PRECISION (type0)) >= 0)
3184 warning ("left shift count >= width of type");
3186 /* Convert the shift-count to an integer, regardless of
3187 size of value being shifted. */
3188 if (TYPE_MAIN_VARIANT (TREE_TYPE (op1)) != integer_type_node)
3189 op1 = cp_convert (integer_type_node, op1);
3190 /* Avoid converting op1 to result_type later. */
3197 if (code0 == INTEGER_TYPE && code1 == INTEGER_TYPE)
3199 result_type = type0;
3200 if (TREE_CODE (op1) == INTEGER_CST)
3202 if (tree_int_cst_lt (op1, integer_zero_node))
3203 warning ("%s rotate count is negative",
3204 (code == LROTATE_EXPR) ? "left" : "right");
3205 else if (compare_tree_int (op1, TYPE_PRECISION (type0)) >= 0)
3206 warning ("%s rotate count >= width of type",
3207 (code == LROTATE_EXPR) ? "left" : "right");
3209 /* Convert the shift-count to an integer, regardless of
3210 size of value being shifted. */
3211 if (TYPE_MAIN_VARIANT (TREE_TYPE (op1)) != integer_type_node)
3212 op1 = cp_convert (integer_type_node, op1);
3218 if (warn_float_equal && (code0 == REAL_TYPE || code1 == REAL_TYPE))
3219 warning ("comparing floating point with == or != is unsafe");
3221 build_type = boolean_type_node;
3222 if ((code0 == INTEGER_TYPE || code0 == REAL_TYPE
3223 || code0 == COMPLEX_TYPE)
3224 && (code1 == INTEGER_TYPE || code1 == REAL_TYPE
3225 || code1 == COMPLEX_TYPE))
3227 else if (code0 == POINTER_TYPE && code1 == POINTER_TYPE)
3228 result_type = composite_pointer_type (type0, type1, op0, op1,
3230 else if (code0 == POINTER_TYPE && null_ptr_cst_p (op1))
3231 result_type = type0;
3232 else if (code1 == POINTER_TYPE && null_ptr_cst_p (op0))
3233 result_type = type1;
3234 else if (code0 == POINTER_TYPE && code1 == INTEGER_TYPE)
3236 result_type = type0;
3237 error ("ISO C++ forbids comparison between pointer and integer");
3239 else if (code0 == INTEGER_TYPE && code1 == POINTER_TYPE)
3241 result_type = type1;
3242 error ("ISO C++ forbids comparison between pointer and integer");
3244 else if (TYPE_PTRMEMFUNC_P (type0) && null_ptr_cst_p (op1))
3246 op0 = build_ptrmemfunc_access_expr (op0, pfn_identifier);
3247 op1 = cp_convert (TREE_TYPE (op0), integer_zero_node);
3248 result_type = TREE_TYPE (op0);
3250 else if (TYPE_PTRMEMFUNC_P (type1) && null_ptr_cst_p (op0))
3251 return cp_build_binary_op (code, op1, op0);
3252 else if (TYPE_PTRMEMFUNC_P (type0) && TYPE_PTRMEMFUNC_P (type1)
3253 && same_type_p (type0, type1))
3255 /* E will be the final comparison. */
3257 /* E1 and E2 are for scratch. */
3265 if (TREE_SIDE_EFFECTS (op0))
3266 op0 = save_expr (op0);
3267 if (TREE_SIDE_EFFECTS (op1))
3268 op1 = save_expr (op1);
3273 && (!op0.pfn || op0.delta == op1.delta))
3275 The reason for the `!op0.pfn' bit is that a NULL
3276 pointer-to-member is any member with a zero PFN; the
3277 DELTA field is unspecified. */
3278 pfn0 = pfn_from_ptrmemfunc (op0);
3279 pfn1 = pfn_from_ptrmemfunc (op1);
3280 delta0 = build_ptrmemfunc_access_expr (op0,
3282 delta1 = build_ptrmemfunc_access_expr (op1,
3284 e1 = cp_build_binary_op (EQ_EXPR, delta0, delta1);
3285 e2 = cp_build_binary_op (EQ_EXPR,
3287 cp_convert (TREE_TYPE (pfn0),
3288 integer_zero_node));
3289 e1 = cp_build_binary_op (TRUTH_ORIF_EXPR, e1, e2);
3290 e2 = build (EQ_EXPR, boolean_type_node, pfn0, pfn1);
3291 e = cp_build_binary_op (TRUTH_ANDIF_EXPR, e2, e1);
3292 if (code == EQ_EXPR)
3294 return cp_build_binary_op (EQ_EXPR, e, integer_zero_node);
3296 else if ((TYPE_PTRMEMFUNC_P (type0)
3297 && same_type_p (TYPE_PTRMEMFUNC_FN_TYPE (type0), type1))
3298 || (TYPE_PTRMEMFUNC_P (type1)
3299 && same_type_p (TYPE_PTRMEMFUNC_FN_TYPE (type1), type0)))
3305 if ((code0 == INTEGER_TYPE || code0 == REAL_TYPE)
3306 && (code1 == INTEGER_TYPE || code1 == REAL_TYPE))
3308 else if (code0 == POINTER_TYPE && code1 == POINTER_TYPE)
3309 result_type = composite_pointer_type (type0, type1, op0, op1,
3317 build_type = boolean_type_node;
3318 if ((code0 == INTEGER_TYPE || code0 == REAL_TYPE)
3319 && (code1 == INTEGER_TYPE || code1 == REAL_TYPE))
3321 else if (code0 == POINTER_TYPE && code1 == POINTER_TYPE)
3322 result_type = composite_pointer_type (type0, type1, op0, op1,
3324 else if (code0 == POINTER_TYPE && TREE_CODE (op1) == INTEGER_CST
3325 && integer_zerop (op1))
3326 result_type = type0;
3327 else if (code1 == POINTER_TYPE && TREE_CODE (op0) == INTEGER_CST
3328 && integer_zerop (op0))
3329 result_type = type1;
3330 else if (code0 == POINTER_TYPE && code1 == INTEGER_TYPE)
3332 result_type = type0;
3333 pedwarn ("ISO C++ forbids comparison between pointer and integer");
3335 else if (code0 == INTEGER_TYPE && code1 == POINTER_TYPE)
3337 result_type = type1;
3338 pedwarn ("ISO C++ forbids comparison between pointer and integer");
3342 case UNORDERED_EXPR:
3349 build_type = integer_type_node;
3350 if (code0 != REAL_TYPE || code1 != REAL_TYPE)
3352 error ("unordered comparison on non-floating point argument");
3353 return error_mark_node;
3362 if ((code0 == INTEGER_TYPE || code0 == REAL_TYPE || code0 == COMPLEX_TYPE)
3364 (code1 == INTEGER_TYPE || code1 == REAL_TYPE || code1 == COMPLEX_TYPE))
3366 int none_complex = (code0 != COMPLEX_TYPE && code1 != COMPLEX_TYPE);
3368 if (shorten || common || short_compare)
3369 result_type = common_type (type0, type1);
3371 /* For certain operations (which identify themselves by shorten != 0)
3372 if both args were extended from the same smaller type,
3373 do the arithmetic in that type and then extend.
3375 shorten !=0 and !=1 indicates a bitwise operation.
3376 For them, this optimization is safe only if
3377 both args are zero-extended or both are sign-extended.
3378 Otherwise, we might change the result.
3379 Eg, (short)-1 | (unsigned short)-1 is (int)-1
3380 but calculated in (unsigned short) it would be (unsigned short)-1. */
3382 if (shorten && none_complex)
3384 int unsigned0, unsigned1;
3385 tree arg0 = get_narrower (op0, &unsigned0);
3386 tree arg1 = get_narrower (op1, &unsigned1);
3387 /* UNS is 1 if the operation to be done is an unsigned one. */
3388 int uns = TREE_UNSIGNED (result_type);
3391 final_type = result_type;
3393 /* Handle the case that OP0 does not *contain* a conversion
3394 but it *requires* conversion to FINAL_TYPE. */
3396 if (op0 == arg0 && TREE_TYPE (op0) != final_type)
3397 unsigned0 = TREE_UNSIGNED (TREE_TYPE (op0));
3398 if (op1 == arg1 && TREE_TYPE (op1) != final_type)
3399 unsigned1 = TREE_UNSIGNED (TREE_TYPE (op1));
3401 /* Now UNSIGNED0 is 1 if ARG0 zero-extends to FINAL_TYPE. */
3403 /* For bitwise operations, signedness of nominal type
3404 does not matter. Consider only how operands were extended. */
3408 /* Note that in all three cases below we refrain from optimizing
3409 an unsigned operation on sign-extended args.
3410 That would not be valid. */
3412 /* Both args variable: if both extended in same way
3413 from same width, do it in that width.
3414 Do it unsigned if args were zero-extended. */
3415 if ((TYPE_PRECISION (TREE_TYPE (arg0))
3416 < TYPE_PRECISION (result_type))
3417 && (TYPE_PRECISION (TREE_TYPE (arg1))
3418 == TYPE_PRECISION (TREE_TYPE (arg0)))
3419 && unsigned0 == unsigned1
3420 && (unsigned0 || !uns))
3421 result_type = c_common_signed_or_unsigned_type
3422 (unsigned0, common_type (TREE_TYPE (arg0), TREE_TYPE (arg1)));
3423 else if (TREE_CODE (arg0) == INTEGER_CST
3424 && (unsigned1 || !uns)
3425 && (TYPE_PRECISION (TREE_TYPE (arg1))
3426 < TYPE_PRECISION (result_type))
3427 && (type = c_common_signed_or_unsigned_type
3428 (unsigned1, TREE_TYPE (arg1)),
3429 int_fits_type_p (arg0, type)))
3431 else if (TREE_CODE (arg1) == INTEGER_CST
3432 && (unsigned0 || !uns)
3433 && (TYPE_PRECISION (TREE_TYPE (arg0))
3434 < TYPE_PRECISION (result_type))
3435 && (type = c_common_signed_or_unsigned_type
3436 (unsigned0, TREE_TYPE (arg0)),
3437 int_fits_type_p (arg1, type)))
3441 /* Shifts can be shortened if shifting right. */
3446 tree arg0 = get_narrower (op0, &unsigned_arg);
3448 final_type = result_type;
3450 if (arg0 == op0 && final_type == TREE_TYPE (op0))
3451 unsigned_arg = TREE_UNSIGNED (TREE_TYPE (op0));
3453 if (TYPE_PRECISION (TREE_TYPE (arg0)) < TYPE_PRECISION (result_type)
3454 /* We can shorten only if the shift count is less than the
3455 number of bits in the smaller type size. */
3456 && compare_tree_int (op1, TYPE_PRECISION (TREE_TYPE (arg0))) < 0
3457 /* If arg is sign-extended and then unsigned-shifted,
3458 we can simulate this with a signed shift in arg's type
3459 only if the extended result is at least twice as wide
3460 as the arg. Otherwise, the shift could use up all the
3461 ones made by sign-extension and bring in zeros.
3462 We can't optimize that case at all, but in most machines
3463 it never happens because available widths are 2**N. */
3464 && (!TREE_UNSIGNED (final_type)
3466 || (((unsigned) 2 * TYPE_PRECISION (TREE_TYPE (arg0)))
3467 <= TYPE_PRECISION (result_type))))
3469 /* Do an unsigned shift if the operand was zero-extended. */
3471 = c_common_signed_or_unsigned_type (unsigned_arg,
3473 /* Convert value-to-be-shifted to that type. */
3474 if (TREE_TYPE (op0) != result_type)
3475 op0 = cp_convert (result_type, op0);
3480 /* Comparison operations are shortened too but differently.
3481 They identify themselves by setting short_compare = 1. */
3485 /* Don't write &op0, etc., because that would prevent op0
3486 from being kept in a register.
3487 Instead, make copies of the our local variables and
3488 pass the copies by reference, then copy them back afterward. */
3489 tree xop0 = op0, xop1 = op1, xresult_type = result_type;
3490 enum tree_code xresultcode = resultcode;
3492 = shorten_compare (&xop0, &xop1, &xresult_type, &xresultcode);
3494 return cp_convert (boolean_type_node, val);
3495 op0 = xop0, op1 = xop1;
3497 resultcode = xresultcode;
3500 if ((short_compare || code == MIN_EXPR || code == MAX_EXPR)
3501 && warn_sign_compare)
3503 int op0_signed = ! TREE_UNSIGNED (TREE_TYPE (orig_op0));
3504 int op1_signed = ! TREE_UNSIGNED (TREE_TYPE (orig_op1));
3506 int unsignedp0, unsignedp1;
3507 tree primop0 = get_narrower (op0, &unsignedp0);
3508 tree primop1 = get_narrower (op1, &unsignedp1);
3510 /* Check for comparison of different enum types. */
3511 if (TREE_CODE (TREE_TYPE (orig_op0)) == ENUMERAL_TYPE
3512 && TREE_CODE (TREE_TYPE (orig_op1)) == ENUMERAL_TYPE
3513 && TYPE_MAIN_VARIANT (TREE_TYPE (orig_op0))
3514 != TYPE_MAIN_VARIANT (TREE_TYPE (orig_op1)))
3516 warning ("comparison between types `%#T' and `%#T'",
3517 TREE_TYPE (orig_op0), TREE_TYPE (orig_op1));
3520 /* Give warnings for comparisons between signed and unsigned
3521 quantities that may fail. */
3522 /* Do the checking based on the original operand trees, so that
3523 casts will be considered, but default promotions won't be. */
3525 /* Do not warn if the comparison is being done in a signed type,
3526 since the signed type will only be chosen if it can represent
3527 all the values of the unsigned type. */
3528 if (! TREE_UNSIGNED (result_type))
3530 /* Do not warn if both operands are unsigned. */
3531 else if (op0_signed == op1_signed)
3533 /* Do not warn if the signed quantity is an unsuffixed
3534 integer literal (or some static constant expression
3535 involving such literals or a conditional expression
3536 involving such literals) and it is non-negative. */
3537 else if ((op0_signed && tree_expr_nonnegative_p (orig_op0))
3538 || (op1_signed && tree_expr_nonnegative_p (orig_op1)))
3540 /* Do not warn if the comparison is an equality operation,
3541 the unsigned quantity is an integral constant and it does
3542 not use the most significant bit of result_type. */
3543 else if ((resultcode == EQ_EXPR || resultcode == NE_EXPR)
3544 && ((op0_signed && TREE_CODE (orig_op1) == INTEGER_CST
3545 && int_fits_type_p (orig_op1, c_common_signed_type
3547 || (op1_signed && TREE_CODE (orig_op0) == INTEGER_CST
3548 && int_fits_type_p (orig_op0, c_common_signed_type
3552 warning ("comparison between signed and unsigned integer expressions");
3554 /* Warn if two unsigned values are being compared in a size
3555 larger than their original size, and one (and only one) is the
3556 result of a `~' operator. This comparison will always fail.
3558 Also warn if one operand is a constant, and the constant does not
3559 have all bits set that are set in the ~ operand when it is
3562 if ((TREE_CODE (primop0) == BIT_NOT_EXPR)
3563 ^ (TREE_CODE (primop1) == BIT_NOT_EXPR))
3565 if (TREE_CODE (primop0) == BIT_NOT_EXPR)
3566 primop0 = get_narrower (TREE_OPERAND (op0, 0), &unsignedp0);
3567 if (TREE_CODE (primop1) == BIT_NOT_EXPR)
3568 primop1 = get_narrower (TREE_OPERAND (op1, 0), &unsignedp1);
3570 if (host_integerp (primop0, 0) || host_integerp (primop1, 0))
3573 HOST_WIDE_INT constant, mask;
3577 if (host_integerp (primop0, 0))
3580 unsignedp = unsignedp1;
3581 constant = tree_low_cst (primop0, 0);
3586 unsignedp = unsignedp0;
3587 constant = tree_low_cst (primop1, 0);
3590 bits = TYPE_PRECISION (TREE_TYPE (primop));
3591 if (bits < TYPE_PRECISION (result_type)
3592 && bits < HOST_BITS_PER_LONG && unsignedp)
3594 mask = (~ (HOST_WIDE_INT) 0) << bits;
3595 if ((mask & constant) != mask)
3596 warning ("comparison of promoted ~unsigned with constant");
3599 else if (unsignedp0 && unsignedp1
3600 && (TYPE_PRECISION (TREE_TYPE (primop0))
3601 < TYPE_PRECISION (result_type))
3602 && (TYPE_PRECISION (TREE_TYPE (primop1))
3603 < TYPE_PRECISION (result_type)))
3604 warning ("comparison of promoted ~unsigned with unsigned");
3609 /* At this point, RESULT_TYPE must be nonzero to avoid an error message.
3610 If CONVERTED is zero, both args will be converted to type RESULT_TYPE.
3611 Then the expression will be built.
3612 It will be given type FINAL_TYPE if that is nonzero;
3613 otherwise, it will be given type RESULT_TYPE. */
3617 error ("invalid operands of types `%T' and `%T' to binary `%O'",
3618 TREE_TYPE (orig_op0), TREE_TYPE (orig_op1), code);
3619 return error_mark_node;
3622 /* Issue warnings about peculiar, but legal, uses of NULL. */
3623 if (/* It's reasonable to use pointer values as operands of &&
3624 and ||, so NULL is no exception. */
3625 !(code == TRUTH_ANDIF_EXPR || code == TRUTH_ORIF_EXPR)
3626 && (/* If OP0 is NULL and OP1 is not a pointer, or vice versa. */
3627 (orig_op0 == null_node
3628 && TREE_CODE (TREE_TYPE (op1)) != POINTER_TYPE)
3629 /* Or vice versa. */
3630 || (orig_op1 == null_node
3631 && TREE_CODE (TREE_TYPE (op0)) != POINTER_TYPE)
3632 /* Or, both are NULL and the operation was not a comparison. */
3633 || (orig_op0 == null_node && orig_op1 == null_node
3634 && code != EQ_EXPR && code != NE_EXPR)))
3635 /* Some sort of arithmetic operation involving NULL was
3636 performed. Note that pointer-difference and pointer-addition
3637 have already been handled above, and so we don't end up here in
3639 warning ("NULL used in arithmetic");
3643 if (TREE_TYPE (op0) != result_type)
3644 op0 = cp_convert (result_type, op0);
3645 if (TREE_TYPE (op1) != result_type)
3646 op1 = cp_convert (result_type, op1);
3648 if (op0 == error_mark_node || op1 == error_mark_node)
3649 return error_mark_node;
3652 if (build_type == NULL_TREE)
3653 build_type = result_type;
3656 register tree result = build (resultcode, build_type, op0, op1);
3657 register tree folded;
3659 folded = fold (result);
3660 if (folded == result)
3661 TREE_CONSTANT (folded) = TREE_CONSTANT (op0) & TREE_CONSTANT (op1);
3662 if (final_type != 0)
3663 return cp_convert (final_type, folded);
3668 /* Return a tree for the sum or difference (RESULTCODE says which)
3669 of pointer PTROP and integer INTOP. */
3672 cp_pointer_int_sum (resultcode, ptrop, intop)
3673 enum tree_code resultcode;
3674 register tree ptrop, intop;
3676 tree res_type = TREE_TYPE (ptrop);
3678 /* pointer_int_sum() uses size_in_bytes() on the TREE_TYPE(res_type)
3679 in certain circumstance (when it's valid to do so). So we need
3680 to make sure it's complete. We don't need to check here, if we
3681 can actually complete it at all, as those checks will be done in
3682 pointer_int_sum() anyway. */
3683 complete_type (TREE_TYPE (res_type));
3685 return pointer_int_sum (resultcode, ptrop, fold (intop));
3688 /* Return a tree for the difference of pointers OP0 and OP1.
3689 The resulting tree has type int. */
3692 pointer_diff (op0, op1, ptrtype)
3693 register tree op0, op1;
3694 register tree ptrtype;
3696 register tree result, folded;
3697 tree restype = ptrdiff_type_node;
3698 tree target_type = TREE_TYPE (ptrtype);
3700 if (!complete_type_or_else (target_type, NULL_TREE))
3701 return error_mark_node;
3703 if (pedantic || warn_pointer_arith)
3705 if (TREE_CODE (target_type) == VOID_TYPE)
3706 pedwarn ("ISO C++ forbids using pointer of type `void *' in subtraction");
3707 if (TREE_CODE (target_type) == FUNCTION_TYPE)
3708 pedwarn ("ISO C++ forbids using pointer to a function in subtraction");
3709 if (TREE_CODE (target_type) == METHOD_TYPE)
3710 pedwarn ("ISO C++ forbids using pointer to a method in subtraction");
3711 if (TREE_CODE (target_type) == OFFSET_TYPE)
3712 pedwarn ("ISO C++ forbids using pointer to a member in subtraction");
3715 /* First do the subtraction as integers;
3716 then drop through to build the divide operator. */
3718 op0 = cp_build_binary_op (MINUS_EXPR,
3719 cp_convert (restype, op0),
3720 cp_convert (restype, op1));
3722 /* This generates an error if op1 is a pointer to an incomplete type. */
3723 if (!COMPLETE_TYPE_P (TREE_TYPE (TREE_TYPE (op1))))
3724 error ("invalid use of a pointer to an incomplete type in pointer arithmetic");
3726 op1 = ((TREE_CODE (target_type) == VOID_TYPE
3727 || TREE_CODE (target_type) == FUNCTION_TYPE
3728 || TREE_CODE (target_type) == METHOD_TYPE
3729 || TREE_CODE (target_type) == OFFSET_TYPE)
3731 : size_in_bytes (target_type));
3733 /* Do the division. */
3735 result = build (EXACT_DIV_EXPR, restype, op0, cp_convert (restype, op1));
3737 folded = fold (result);
3738 if (folded == result)
3739 TREE_CONSTANT (folded) = TREE_CONSTANT (op0) & TREE_CONSTANT (op1);
3743 /* Construct and perhaps optimize a tree representation
3744 for a unary operation. CODE, a tree_code, specifies the operation
3745 and XARG is the operand. */
3748 build_x_unary_op (code, xarg)
3749 enum tree_code code;
3755 if (processing_template_decl)
3756 return build_min_nt (code, xarg, NULL_TREE);
3758 /* & rec, on incomplete RECORD_TYPEs is the simple opr &, not an
3760 if (code == ADDR_EXPR
3761 && TREE_CODE (xarg) != TEMPLATE_ID_EXPR
3762 && ((IS_AGGR_TYPE_CODE (TREE_CODE (TREE_TYPE (xarg)))
3763 && !COMPLETE_TYPE_P (TREE_TYPE (xarg)))
3764 || (TREE_CODE (xarg) == OFFSET_REF)))
3765 /* don't look for a function */;
3770 rval = build_new_op (code, LOOKUP_NORMAL, xarg,
3771 NULL_TREE, NULL_TREE);
3772 if (rval || code != ADDR_EXPR)
3775 if (code == ADDR_EXPR)
3777 /* A pointer to member-function can be formed only by saying
3779 if (!flag_ms_extensions && TREE_CODE (TREE_TYPE (xarg)) == METHOD_TYPE
3780 && (TREE_CODE (xarg) != OFFSET_REF || !PTRMEM_OK_P (xarg)))
3782 if (TREE_CODE (xarg) != OFFSET_REF)
3784 error ("invalid use of '%E' to form a pointer-to-member-function. Use a qualified-id.",
3786 return error_mark_node;
3790 error ("parenthesis around '%E' cannot be used to form a pointer-to-member-function",
3792 PTRMEM_OK_P (xarg) = 1;
3796 if (TREE_CODE (xarg) == OFFSET_REF)
3798 ptrmem = PTRMEM_OK_P (xarg);
3800 if (!ptrmem && !flag_ms_extensions
3801 && TREE_CODE (TREE_TYPE (TREE_OPERAND (xarg, 1))) == METHOD_TYPE)
3803 /* A single non-static member, make sure we don't allow a
3804 pointer-to-member. */
3805 xarg = build (OFFSET_REF, TREE_TYPE (xarg),
3806 TREE_OPERAND (xarg, 0),
3807 ovl_cons (TREE_OPERAND (xarg, 1), NULL_TREE));
3808 PTRMEM_OK_P (xarg) = ptrmem;
3812 else if (TREE_CODE (xarg) == TARGET_EXPR)
3813 warning ("taking address of temporary");
3815 exp = build_unary_op (code, xarg, 0);
3816 if (TREE_CODE (exp) == ADDR_EXPR)
3817 PTRMEM_OK_P (exp) = ptrmem;
3822 /* Like c_common_truthvalue_conversion, but handle pointer-to-member
3823 constants, where a null value is represented by an INTEGER_CST of
3827 cp_truthvalue_conversion (expr)
3830 tree type = TREE_TYPE (expr);
3831 if (TYPE_PTRMEM_P (type))
3832 return build_binary_op (NE_EXPR, expr, integer_zero_node, 1);
3834 return c_common_truthvalue_conversion (expr);
3837 /* Just like cp_truthvalue_conversion, but we want a CLEANUP_POINT_EXPR. */
3840 condition_conversion (expr)
3844 if (processing_template_decl)
3846 if (TREE_CODE (expr) == OFFSET_REF)
3847 expr = resolve_offset_ref (expr);
3848 t = perform_implicit_conversion (boolean_type_node, expr);
3849 t = fold (build1 (CLEANUP_POINT_EXPR, boolean_type_node, t));
3853 /* C++: Must handle pointers to members.
3855 Perhaps type instantiation should be extended to handle conversion
3856 from aggregates to types we don't yet know we want? (Or are those
3857 cases typically errors which should be reported?)
3859 NOCONVERT nonzero suppresses the default promotions
3860 (such as from short to int). */
3863 build_unary_op (code, xarg, noconvert)
3864 enum tree_code code;
3868 /* No default_conversion here. It causes trouble for ADDR_EXPR. */
3869 register tree arg = xarg;
3870 register tree argtype = 0;
3871 const char *errstring = NULL;
3874 if (arg == error_mark_node)
3875 return error_mark_node;
3880 /* This is used for unary plus, because a CONVERT_EXPR
3881 is enough to prevent anybody from looking inside for
3882 associativity, but won't generate any code. */
3883 if (!(arg = build_expr_type_conversion
3884 (WANT_ARITH | WANT_ENUM | WANT_POINTER, arg, 1)))
3885 errstring = "wrong type argument to unary plus";
3889 arg = default_conversion (arg);
3890 arg = build1 (NON_LVALUE_EXPR, TREE_TYPE (arg), arg);
3891 TREE_CONSTANT (arg) = TREE_CONSTANT (TREE_OPERAND (arg, 0));
3896 if (!(arg = build_expr_type_conversion (WANT_ARITH | WANT_ENUM, arg, 1)))
3897 errstring = "wrong type argument to unary minus";
3898 else if (!noconvert)
3899 arg = default_conversion (arg);
3903 if (TREE_CODE (TREE_TYPE (arg)) == COMPLEX_TYPE)
3907 arg = default_conversion (arg);
3909 else if (!(arg = build_expr_type_conversion (WANT_INT | WANT_ENUM,
3911 errstring = "wrong type argument to bit-complement";
3912 else if (!noconvert)
3913 arg = default_conversion (arg);
3917 if (!(arg = build_expr_type_conversion (WANT_ARITH | WANT_ENUM, arg, 1)))
3918 errstring = "wrong type argument to abs";
3919 else if (!noconvert)
3920 arg = default_conversion (arg);
3924 /* Conjugating a real value is a no-op, but allow it anyway. */
3925 if (!(arg = build_expr_type_conversion (WANT_ARITH | WANT_ENUM, arg, 1)))
3926 errstring = "wrong type argument to conjugation";
3927 else if (!noconvert)
3928 arg = default_conversion (arg);
3931 case TRUTH_NOT_EXPR:
3932 arg = cp_convert (boolean_type_node, arg);
3933 val = invert_truthvalue (arg);
3934 if (arg != error_mark_node)
3936 errstring = "in argument to unary !";
3943 if (TREE_CODE (arg) == COMPLEX_CST)
3944 return TREE_REALPART (arg);
3945 else if (TREE_CODE (TREE_TYPE (arg)) == COMPLEX_TYPE)
3946 return fold (build1 (REALPART_EXPR, TREE_TYPE (TREE_TYPE (arg)), arg));
3951 if (TREE_CODE (arg) == COMPLEX_CST)
3952 return TREE_IMAGPART (arg);
3953 else if (TREE_CODE (TREE_TYPE (arg)) == COMPLEX_TYPE)
3954 return fold (build1 (IMAGPART_EXPR, TREE_TYPE (TREE_TYPE (arg)), arg));
3956 return cp_convert (TREE_TYPE (arg), integer_zero_node);
3958 case PREINCREMENT_EXPR:
3959 case POSTINCREMENT_EXPR:
3960 case PREDECREMENT_EXPR:
3961 case POSTDECREMENT_EXPR:
3962 /* Handle complex lvalues (when permitted)
3963 by reduction to simpler cases. */
3965 val = unary_complex_lvalue (code, arg);
3969 /* Increment or decrement the real part of the value,
3970 and don't change the imaginary part. */
3971 if (TREE_CODE (TREE_TYPE (arg)) == COMPLEX_TYPE)
3975 arg = stabilize_reference (arg);
3976 real = build_unary_op (REALPART_EXPR, arg, 1);
3977 imag = build_unary_op (IMAGPART_EXPR, arg, 1);
3978 return build (COMPLEX_EXPR, TREE_TYPE (arg),
3979 build_unary_op (code, real, 1), imag);
3982 /* Report invalid types. */
3984 if (!(arg = build_expr_type_conversion (WANT_ARITH | WANT_POINTER,
3987 if (code == PREINCREMENT_EXPR)
3988 errstring ="no pre-increment operator for type";
3989 else if (code == POSTINCREMENT_EXPR)
3990 errstring ="no post-increment operator for type";
3991 else if (code == PREDECREMENT_EXPR)
3992 errstring ="no pre-decrement operator for type";
3994 errstring ="no post-decrement operator for type";
3998 /* Report something read-only. */
4000 if (CP_TYPE_CONST_P (TREE_TYPE (arg))
4001 || TREE_READONLY (arg))
4002 readonly_error (arg, ((code == PREINCREMENT_EXPR
4003 || code == POSTINCREMENT_EXPR)
4004 ? "increment" : "decrement"),
4009 tree result_type = TREE_TYPE (arg);
4011 arg = get_unwidened (arg, 0);
4012 argtype = TREE_TYPE (arg);
4014 /* ARM $5.2.5 last annotation says this should be forbidden. */
4015 if (TREE_CODE (argtype) == ENUMERAL_TYPE)
4016 pedwarn ("ISO C++ forbids %sing an enum",
4017 (code == PREINCREMENT_EXPR || code == POSTINCREMENT_EXPR)
4018 ? "increment" : "decrement");
4020 /* Compute the increment. */
4022 if (TREE_CODE (argtype) == POINTER_TYPE)
4024 enum tree_code tmp = TREE_CODE (TREE_TYPE (argtype));
4025 tree type = complete_type (TREE_TYPE (argtype));
4027 if (!COMPLETE_OR_VOID_TYPE_P (type))
4028 error ("cannot %s a pointer to incomplete type `%T'",
4029 ((code == PREINCREMENT_EXPR
4030 || code == POSTINCREMENT_EXPR)
4031 ? "increment" : "decrement"), TREE_TYPE (argtype));
4032 else if ((pedantic || warn_pointer_arith)
4033 && (tmp == FUNCTION_TYPE || tmp == METHOD_TYPE
4034 || tmp == VOID_TYPE || tmp == OFFSET_TYPE))
4035 pedwarn ("ISO C++ forbids %sing a pointer of type `%T'",
4036 ((code == PREINCREMENT_EXPR
4037 || code == POSTINCREMENT_EXPR)
4038 ? "increment" : "decrement"), argtype);
4039 inc = cxx_sizeof_nowarn (TREE_TYPE (argtype));
4042 inc = integer_one_node;
4044 inc = cp_convert (argtype, inc);
4046 /* Handle incrementing a cast-expression. */
4048 switch (TREE_CODE (arg))
4053 case FIX_TRUNC_EXPR:
4054 case FIX_FLOOR_EXPR:
4055 case FIX_ROUND_EXPR:
4058 tree incremented, modify, value, compound;
4059 if (! lvalue_p (arg) && pedantic)
4060 pedwarn ("cast to non-reference type used as lvalue");
4061 arg = stabilize_reference (arg);
4062 if (code == PREINCREMENT_EXPR || code == PREDECREMENT_EXPR)
4065 value = save_expr (arg);
4066 incremented = build (((code == PREINCREMENT_EXPR
4067 || code == POSTINCREMENT_EXPR)
4068 ? PLUS_EXPR : MINUS_EXPR),
4069 argtype, value, inc);
4071 modify = build_modify_expr (arg, NOP_EXPR, incremented);
4072 compound = build (COMPOUND_EXPR, TREE_TYPE (arg), modify, value);
4074 /* Eliminate warning about unused result of + or -. */
4075 TREE_NO_UNUSED_WARNING (compound) = 1;
4083 /* Complain about anything else that is not a true lvalue. */
4084 if (!lvalue_or_else (arg, ((code == PREINCREMENT_EXPR
4085 || code == POSTINCREMENT_EXPR)
4086 ? "increment" : "decrement")))
4087 return error_mark_node;
4089 /* Forbid using -- on `bool'. */
4090 if (TREE_TYPE (arg) == boolean_type_node)
4092 if (code == POSTDECREMENT_EXPR || code == PREDECREMENT_EXPR)
4094 error ("invalid use of `--' on bool variable `%D'", arg);
4095 return error_mark_node;
4098 /* This will only work if someone can convince Kenner to accept
4099 my patch to expand_increment. (jason) */
4100 val = build (code, TREE_TYPE (arg), arg, inc);
4102 val = boolean_increment (code, arg);
4106 val = build (code, TREE_TYPE (arg), arg, inc);
4108 TREE_SIDE_EFFECTS (val) = 1;
4109 return cp_convert (result_type, val);
4113 /* Note that this operation never does default_conversion
4114 regardless of NOCONVERT. */
4116 argtype = lvalue_type (arg);
4117 if (TREE_CODE (argtype) == REFERENCE_TYPE)
4121 build_pointer_type (TREE_TYPE (argtype)), arg);
4122 TREE_CONSTANT (arg) = TREE_CONSTANT (TREE_OPERAND (arg, 0));
4125 else if (pedantic && DECL_MAIN_P (arg))
4127 pedwarn ("ISO C++ forbids taking address of function `::main'");
4129 /* Let &* cancel out to simplify resulting code. */
4130 if (TREE_CODE (arg) == INDIRECT_REF)
4132 /* We don't need to have `current_class_ptr' wrapped in a
4133 NON_LVALUE_EXPR node. */
4134 if (arg == current_class_ref)
4135 return current_class_ptr;
4137 arg = TREE_OPERAND (arg, 0);
4138 if (TREE_CODE (TREE_TYPE (arg)) == REFERENCE_TYPE)
4142 build_pointer_type (TREE_TYPE (TREE_TYPE (arg))), arg);
4143 TREE_CONSTANT (arg) = TREE_CONSTANT (TREE_OPERAND (arg, 0));
4145 else if (lvalue_p (arg))
4146 /* Don't let this be an lvalue. */
4147 return non_lvalue (arg);
4151 /* For &x[y], return x+y */
4152 if (TREE_CODE (arg) == ARRAY_REF)
4154 if (!cxx_mark_addressable (TREE_OPERAND (arg, 0)))
4155 return error_mark_node;
4156 return cp_build_binary_op (PLUS_EXPR, TREE_OPERAND (arg, 0),
4157 TREE_OPERAND (arg, 1));
4160 /* Uninstantiated types are all functions. Taking the
4161 address of a function is a no-op, so just return the
4164 if (TREE_CODE (arg) == IDENTIFIER_NODE
4165 && IDENTIFIER_OPNAME_P (arg))
4168 /* We don't know the type yet, so just work around the problem.
4169 We know that this will resolve to an lvalue. */
4170 return build1 (ADDR_EXPR, unknown_type_node, arg);
4173 if (TREE_CODE (arg) == COMPONENT_REF && type_unknown_p (arg)
4174 && !really_overloaded_fn (TREE_OPERAND (arg, 1)))
4176 /* They're trying to take the address of a unique non-static
4177 member function. This is ill-formed (except in MS-land),
4178 but let's try to DTRT.
4179 Note: We only handle unique functions here because we don't
4180 want to complain if there's a static overload; non-unique
4181 cases will be handled by instantiate_type. But we need to
4182 handle this case here to allow casts on the resulting PMF.
4183 We could defer this in non-MS mode, but it's easier to give
4184 a useful error here. */
4186 tree base = TREE_TYPE (TREE_OPERAND (arg, 0));
4187 tree name = DECL_NAME (get_first_fn (TREE_OPERAND (arg, 1)));
4189 if (! flag_ms_extensions)
4191 if (current_class_type
4192 && TREE_OPERAND (arg, 0) == current_class_ref)
4193 /* An expression like &memfn. */
4194 pedwarn ("ISO C++ forbids taking the address of an unqualified non-static member function to form a pointer to member function. Say `&%T::%D'", base, name);
4196 pedwarn ("ISO C++ forbids taking the address of a bound member function to form a pointer to member function. Say `&%T::%D'", base, name);
4198 arg = build_offset_ref (base, name);
4201 if (type_unknown_p (arg))
4202 return build1 (ADDR_EXPR, unknown_type_node, arg);
4204 /* Handle complex lvalues (when permitted)
4205 by reduction to simpler cases. */
4206 val = unary_complex_lvalue (code, arg);
4210 switch (TREE_CODE (arg))
4215 case FIX_TRUNC_EXPR:
4216 case FIX_FLOOR_EXPR:
4217 case FIX_ROUND_EXPR:
4219 if (! lvalue_p (arg) && pedantic)
4220 pedwarn ("ISO C++ forbids taking the address of a cast to a non-lvalue expression");
4227 /* Allow the address of a constructor if all the elements
4229 if (TREE_CODE (arg) == CONSTRUCTOR && TREE_HAS_CONSTRUCTOR (arg)
4230 && TREE_CONSTANT (arg))
4232 /* Anything not already handled and not a true memory reference
4234 else if (TREE_CODE (argtype) != FUNCTION_TYPE
4235 && TREE_CODE (argtype) != METHOD_TYPE
4236 && !lvalue_or_else (arg, "unary `&'"))
4237 return error_mark_node;
4239 if (argtype != error_mark_node)
4240 argtype = build_pointer_type (argtype);
4242 if (!cxx_mark_addressable (arg))
4243 return error_mark_node;
4248 if (TREE_CODE (arg) == COMPONENT_REF
4249 && DECL_C_BIT_FIELD (TREE_OPERAND (arg, 1)))
4251 error ("attempt to take address of bit-field structure member `%D'",
4252 TREE_OPERAND (arg, 1));
4253 return error_mark_node;
4256 addr = build1 (ADDR_EXPR, argtype, arg);
4258 /* Address of a static or external variable or
4259 function counts as a constant */
4261 TREE_CONSTANT (addr) = 1;
4263 if (TREE_CODE (argtype) == POINTER_TYPE
4264 && TREE_CODE (TREE_TYPE (argtype)) == METHOD_TYPE)
4266 build_ptrmemfunc_type (argtype);
4267 addr = build_ptrmemfunc (argtype, addr, 0);
4280 argtype = TREE_TYPE (arg);
4281 return fold (build1 (code, argtype, arg));
4284 error ("%s", errstring);
4285 return error_mark_node;
4288 /* Apply unary lvalue-demanding operator CODE to the expression ARG
4289 for certain kinds of expressions which are not really lvalues
4290 but which we can accept as lvalues.
4292 If ARG is not a kind of expression we can handle, return zero. */
4295 unary_complex_lvalue (code, arg)
4296 enum tree_code code;
4299 /* Handle (a, b) used as an "lvalue". */
4300 if (TREE_CODE (arg) == COMPOUND_EXPR)
4302 tree real_result = build_unary_op (code, TREE_OPERAND (arg, 1), 0);
4303 return build (COMPOUND_EXPR, TREE_TYPE (real_result),
4304 TREE_OPERAND (arg, 0), real_result);
4307 /* Handle (a ? b : c) used as an "lvalue". */
4308 if (TREE_CODE (arg) == COND_EXPR
4309 || TREE_CODE (arg) == MIN_EXPR || TREE_CODE (arg) == MAX_EXPR)
4310 return rationalize_conditional_expr (code, arg);
4312 /* Handle (a = b), (++a), and (--a) used as an "lvalue". */
4313 if (TREE_CODE (arg) == MODIFY_EXPR
4314 || TREE_CODE (arg) == PREINCREMENT_EXPR
4315 || TREE_CODE (arg) == PREDECREMENT_EXPR)
4317 tree lvalue = TREE_OPERAND (arg, 0);
4318 if (TREE_SIDE_EFFECTS (lvalue))
4320 lvalue = stabilize_reference (lvalue);
4321 arg = build (TREE_CODE (arg), TREE_TYPE (arg),
4322 lvalue, TREE_OPERAND (arg, 1));
4324 return unary_complex_lvalue
4325 (code, build (COMPOUND_EXPR, TREE_TYPE (lvalue), arg, lvalue));
4328 if (code != ADDR_EXPR)
4331 /* Handle (a = b) used as an "lvalue" for `&'. */
4332 if (TREE_CODE (arg) == MODIFY_EXPR
4333 || TREE_CODE (arg) == INIT_EXPR)
4335 tree real_result = build_unary_op (code, TREE_OPERAND (arg, 0), 0);
4336 arg = build (COMPOUND_EXPR, TREE_TYPE (real_result), arg, real_result);
4337 TREE_NO_UNUSED_WARNING (arg) = 1;
4341 if (TREE_CODE (TREE_TYPE (arg)) == FUNCTION_TYPE
4342 || TREE_CODE (TREE_TYPE (arg)) == METHOD_TYPE
4343 || TREE_CODE (TREE_TYPE (arg)) == OFFSET_TYPE)
4345 /* The representation of something of type OFFSET_TYPE
4346 is really the representation of a pointer to it.
4347 Here give the representation its true type. */
4350 my_friendly_assert (TREE_CODE (arg) != SCOPE_REF, 313);
4352 if (TREE_CODE (arg) != OFFSET_REF)
4355 t = TREE_OPERAND (arg, 1);
4357 /* Check all this code for right semantics. */
4358 if (TREE_CODE (t) == FUNCTION_DECL)
4360 if (DECL_DESTRUCTOR_P (t))
4361 error ("taking address of destructor");
4362 return build_unary_op (ADDR_EXPR, t, 0);
4364 if (TREE_CODE (t) == VAR_DECL)
4365 return build_unary_op (ADDR_EXPR, t, 0);
4370 if (TREE_OPERAND (arg, 0)
4371 && ! is_dummy_object (TREE_OPERAND (arg, 0))
4372 && TREE_CODE (t) != FIELD_DECL)
4374 error ("taking address of bound pointer-to-member expression");
4375 return error_mark_node;
4377 if (!PTRMEM_OK_P (arg))
4379 /* This cannot form a pointer to method, so we must
4380 resolve the offset ref, and take the address of the
4381 result. For instance,
4383 arg = resolve_offset_ref (arg);
4385 return build_unary_op (code, arg, 0);
4388 if (TREE_CODE (TREE_TYPE (t)) == REFERENCE_TYPE)
4390 error ("cannot create pointer to reference member `%D'", t);
4391 return error_mark_node;
4394 type = build_offset_type (DECL_FIELD_CONTEXT (t), TREE_TYPE (t));
4395 type = build_pointer_type (type);
4397 t = make_ptrmem_cst (type, TREE_OPERAND (arg, 1));
4403 /* We permit compiler to make function calls returning
4404 objects of aggregate type look like lvalues. */
4408 if (TREE_CODE (targ) == SAVE_EXPR)
4409 targ = TREE_OPERAND (targ, 0);
4411 if (TREE_CODE (targ) == CALL_EXPR && IS_AGGR_TYPE (TREE_TYPE (targ)))
4413 if (TREE_CODE (arg) == SAVE_EXPR)
4416 targ = build_cplus_new (TREE_TYPE (arg), arg);
4417 return build1 (ADDR_EXPR, build_pointer_type (TREE_TYPE (arg)), targ);
4420 if (TREE_CODE (arg) == SAVE_EXPR && TREE_CODE (targ) == INDIRECT_REF)
4421 return build (SAVE_EXPR, build_pointer_type (TREE_TYPE (arg)),
4422 TREE_OPERAND (targ, 0), current_function_decl, NULL);
4425 /* Don't let anything else be handled specially. */
4429 /* Mark EXP saying that we need to be able to take the
4430 address of it; it should not be allocated in a register.
4431 Value is true if successful.
4433 C++: we do not allow `current_class_ptr' to be addressable. */
4436 cxx_mark_addressable (exp)
4439 register tree x = exp;
4442 switch (TREE_CODE (x))
4449 x = TREE_OPERAND (x, 0);
4453 if (x == current_class_ptr)
4455 error ("cannot take the address of `this', which is an rvalue expression");
4456 TREE_ADDRESSABLE (x) = 1; /* so compiler doesn't die later */
4462 /* Caller should not be trying to mark initialized
4463 constant fields addressable. */
4464 my_friendly_assert (DECL_LANG_SPECIFIC (x) == 0
4465 || DECL_IN_AGGR_P (x) == 0
4467 || DECL_EXTERNAL (x), 314);
4472 if (DECL_REGISTER (x) && !TREE_ADDRESSABLE (x)
4473 && !DECL_ARTIFICIAL (x) && extra_warnings)
4474 warning ("address requested for `%D', which is declared `register'",
4476 TREE_ADDRESSABLE (x) = 1;
4477 put_var_into_stack (x);
4481 TREE_ADDRESSABLE (x) = 1;
4482 TREE_ADDRESSABLE (DECL_ASSEMBLER_NAME (x)) = 1;
4486 TREE_ADDRESSABLE (x) = 1;
4490 TREE_ADDRESSABLE (x) = 1;
4491 cxx_mark_addressable (TREE_OPERAND (x, 0));
4499 /* Build and return a conditional expression IFEXP ? OP1 : OP2. */
4502 build_x_conditional_expr (ifexp, op1, op2)
4503 tree ifexp, op1, op2;
4505 if (processing_template_decl)
4506 return build_min_nt (COND_EXPR, ifexp, op1, op2);
4508 return build_conditional_expr (ifexp, op1, op2);
4511 /* Handle overloading of the ',' operator when needed. Otherwise,
4512 this function just builds an expression list. */
4515 build_x_compound_expr (list)
4518 tree rest = TREE_CHAIN (list);
4521 if (processing_template_decl)
4522 return build_min_nt (COMPOUND_EXPR, list, NULL_TREE);
4524 if (rest == NULL_TREE)
4525 return build_compound_expr (list);
4527 result = build_opfncall (COMPOUND_EXPR, LOOKUP_NORMAL,
4528 TREE_VALUE (list), TREE_VALUE (rest), NULL_TREE);
4530 return build_x_compound_expr (tree_cons (NULL_TREE, result,
4531 TREE_CHAIN (rest)));
4533 if (! TREE_SIDE_EFFECTS (TREE_VALUE (list)))
4535 /* FIXME: This test should be in the implicit cast to void of the LHS. */
4536 /* the left-hand operand of a comma expression is like an expression
4537 statement: we should warn if it doesn't have any side-effects,
4538 unless it was explicitly cast to (void). */
4539 if ((extra_warnings || warn_unused_value)
4540 && !(TREE_CODE (TREE_VALUE(list)) == CONVERT_EXPR
4541 && VOID_TYPE_P (TREE_TYPE (TREE_VALUE(list)))))
4542 warning("left-hand operand of comma expression has no effect");
4544 #if 0 /* this requires a gcc backend patch to export warn_if_unused_value */
4545 else if (warn_unused_value)
4546 warn_if_unused_value (TREE_VALUE(list));
4549 return build_compound_expr
4550 (tree_cons (NULL_TREE, TREE_VALUE (list),
4551 build_tree_list (NULL_TREE,
4552 build_x_compound_expr (rest))));
4555 /* Given a list of expressions, return a compound expression
4556 that performs them all and returns the value of the last of them. */
4559 build_compound_expr (list)
4565 TREE_VALUE (list) = decl_constant_value (TREE_VALUE (list));
4567 if (TREE_CHAIN (list) == 0)
4569 /* build_c_cast puts on a NOP_EXPR to make the result not an lvalue.
4570 Strip such NOP_EXPRs, since LIST is used in non-lvalue context. */
4571 if (TREE_CODE (list) == NOP_EXPR
4572 && TREE_TYPE (list) == TREE_TYPE (TREE_OPERAND (list, 0)))
4573 list = TREE_OPERAND (list, 0);
4575 return TREE_VALUE (list);
4578 first = TREE_VALUE (list);
4579 first = convert_to_void (first, "left-hand operand of comma");
4580 if (first == error_mark_node)
4581 return error_mark_node;
4583 rest = build_compound_expr (TREE_CHAIN (list));
4584 if (rest == error_mark_node)
4585 return error_mark_node;
4587 /* When pedantic, a compound expression cannot be a constant expression. */
4588 if (! TREE_SIDE_EFFECTS (first) && ! pedantic)
4591 return build (COMPOUND_EXPR, TREE_TYPE (rest), first, rest);
4595 build_static_cast (type, expr)
4601 if (type == error_mark_node || expr == error_mark_node)
4602 return error_mark_node;
4604 if (TREE_CODE (expr) == OFFSET_REF)
4605 expr = resolve_offset_ref (expr);
4607 if (processing_template_decl)
4609 tree t = build_min (STATIC_CAST_EXPR, type, expr);
4613 /* build_c_cast puts on a NOP_EXPR to make the result not an lvalue.
4614 Strip such NOP_EXPRs if VALUE is being used in non-lvalue context. */
4615 if (TREE_CODE (type) != REFERENCE_TYPE
4616 && TREE_CODE (expr) == NOP_EXPR
4617 && TREE_TYPE (expr) == TREE_TYPE (TREE_OPERAND (expr, 0)))
4618 expr = TREE_OPERAND (expr, 0);
4620 if (TREE_CODE (type) == VOID_TYPE)
4622 expr = convert_to_void (expr, /*implicit=*/NULL);
4626 if (TREE_CODE (type) == REFERENCE_TYPE)
4627 return (convert_from_reference
4628 (convert_to_reference (type, expr, CONV_STATIC|CONV_IMPLICIT,
4629 LOOKUP_COMPLAIN, NULL_TREE)));
4631 if (IS_AGGR_TYPE (type))
4632 return build_cplus_new (type, (build_special_member_call
4633 (NULL_TREE, complete_ctor_identifier,
4634 build_tree_list (NULL_TREE, expr),
4635 TYPE_BINFO (type), LOOKUP_NORMAL)));
4637 intype = TREE_TYPE (expr);
4639 /* FIXME handle casting to array type. */
4642 if (IS_AGGR_TYPE (intype)
4643 ? can_convert_arg (type, intype, expr)
4644 : can_convert_arg (strip_all_pointer_quals (type),
4645 strip_all_pointer_quals (intype), expr))
4646 /* This is a standard conversion. */
4648 else if (TYPE_PTROB_P (type) && TYPE_PTROB_P (intype))
4650 /* They're pointers to objects. They must be aggregates that
4651 are related non-virtually. */
4654 if (IS_AGGR_TYPE (TREE_TYPE (type)) && IS_AGGR_TYPE (TREE_TYPE (intype))
4655 && lookup_base (TREE_TYPE (type), TREE_TYPE (intype),
4656 ba_ignore | ba_quiet, &kind)
4657 && kind != bk_via_virtual)
4660 else if (TYPE_PTRMEM_P (type) && TYPE_PTRMEM_P (intype))
4662 /* They're pointers to members. The pointed to objects must be
4663 the same (ignoring CV qualifiers), and the containing classes
4664 must be related non-virtually. */
4668 (strip_all_pointer_quals (TREE_TYPE (TREE_TYPE (type))),
4669 strip_all_pointer_quals (TREE_TYPE (TREE_TYPE (intype))))
4670 && (lookup_base (TYPE_OFFSET_BASETYPE (TREE_TYPE (intype)),
4671 TYPE_OFFSET_BASETYPE (TREE_TYPE (type)),
4672 ba_ignore | ba_quiet, &kind))
4673 && kind != bk_via_virtual)
4676 else if (TREE_CODE (intype) != BOOLEAN_TYPE
4677 && TREE_CODE (type) != ARRAY_TYPE
4678 && TREE_CODE (type) != FUNCTION_TYPE
4679 && can_convert (intype, strip_all_pointer_quals (type)))
4681 else if (TREE_CODE (intype) == ENUMERAL_TYPE
4682 && TREE_CODE (type) == ENUMERAL_TYPE)
4683 /* DR 128: "A value of integral _or enumeration_ type can be explicitly
4684 converted to an enumeration type."
4685 The integral to enumeration will be accepted by the previous clause.
4686 We need to explicitly check for enumeration to enumeration. */
4689 /* [expr.static.cast]
4691 The static_cast operator shall not be used to cast away
4693 if (ok && casts_away_constness (intype, type))
4695 error ("static_cast from type `%T' to type `%T' casts away constness",
4697 return error_mark_node;
4701 return build_c_cast (type, expr);
4703 error ("invalid static_cast from type `%T' to type `%T'", intype, type);
4704 return error_mark_node;
4708 build_reinterpret_cast (type, expr)
4713 if (type == error_mark_node || expr == error_mark_node)
4714 return error_mark_node;
4716 if (TREE_CODE (expr) == OFFSET_REF)
4717 expr = resolve_offset_ref (expr);
4719 if (processing_template_decl)
4721 tree t = build_min (REINTERPRET_CAST_EXPR, type, expr);
4725 if (TREE_CODE (type) != REFERENCE_TYPE)
4727 expr = decay_conversion (expr);
4729 /* build_c_cast puts on a NOP_EXPR to make the result not an lvalue.
4730 Strip such NOP_EXPRs if VALUE is being used in non-lvalue context. */
4731 if (TREE_CODE (expr) == NOP_EXPR
4732 && TREE_TYPE (expr) == TREE_TYPE (TREE_OPERAND (expr, 0)))
4733 expr = TREE_OPERAND (expr, 0);
4736 intype = TREE_TYPE (expr);
4738 if (TREE_CODE (type) == REFERENCE_TYPE)
4740 if (! real_lvalue_p (expr))
4742 error ("invalid reinterpret_cast of an rvalue expression of type `%T' to type `%T'", intype, type);
4743 return error_mark_node;
4745 expr = build_unary_op (ADDR_EXPR, expr, 0);
4746 if (expr != error_mark_node)
4747 expr = build_reinterpret_cast
4748 (build_pointer_type (TREE_TYPE (type)), expr);
4749 if (expr != error_mark_node)
4750 expr = build_indirect_ref (expr, 0);
4753 else if (same_type_ignoring_top_level_qualifiers_p (intype, type))
4754 return build_static_cast (type, expr);
4756 if (TYPE_PTR_P (type) && (TREE_CODE (intype) == INTEGER_TYPE
4757 || TREE_CODE (intype) == ENUMERAL_TYPE))
4759 else if (TREE_CODE (type) == INTEGER_TYPE && TYPE_PTR_P (intype))
4761 if (TYPE_PRECISION (type) < TYPE_PRECISION (intype))
4762 pedwarn ("reinterpret_cast from `%T' to `%T' loses precision",
4765 else if ((TYPE_PTRFN_P (type) && TYPE_PTRFN_P (intype))
4766 || (TYPE_PTRMEMFUNC_P (type) && TYPE_PTRMEMFUNC_P (intype)))
4768 expr = decl_constant_value (expr);
4769 return fold (build1 (NOP_EXPR, type, expr));
4771 else if ((TYPE_PTRMEM_P (type) && TYPE_PTRMEM_P (intype))
4772 || (TYPE_PTROBV_P (type) && TYPE_PTROBV_P (intype)))
4774 if (! comp_ptr_ttypes_reinterpret (TREE_TYPE (type), TREE_TYPE (intype)))
4775 pedwarn ("reinterpret_cast from `%T' to `%T' casts away const (or volatile)",
4778 expr = decl_constant_value (expr);
4779 return fold (build1 (NOP_EXPR, type, expr));
4781 else if ((TYPE_PTRFN_P (type) && TYPE_PTROBV_P (intype))
4782 || (TYPE_PTRFN_P (intype) && TYPE_PTROBV_P (type)))
4784 pedwarn ("ISO C++ forbids casting between pointer-to-function and pointer-to-object");
4785 expr = decl_constant_value (expr);
4786 return fold (build1 (NOP_EXPR, type, expr));
4790 error ("invalid reinterpret_cast from type `%T' to type `%T'",
4792 return error_mark_node;
4795 return cp_convert (type, expr);
4799 build_const_cast (type, expr)
4804 if (type == error_mark_node || expr == error_mark_node)
4805 return error_mark_node;
4807 if (TREE_CODE (expr) == OFFSET_REF)
4808 expr = resolve_offset_ref (expr);
4810 if (processing_template_decl)
4812 tree t = build_min (CONST_CAST_EXPR, type, expr);
4816 if (!POINTER_TYPE_P (type))
4817 error ("invalid use of const_cast with type `%T', which is not a pointer, reference, nor a pointer-to-data-member type", type);
4818 else if (TREE_CODE (TREE_TYPE (type)) == FUNCTION_TYPE)
4820 error ("invalid use of const_cast with type `%T', which is a pointer or reference to a function type", type);
4821 return error_mark_node;
4824 if (TREE_CODE (type) != REFERENCE_TYPE)
4826 expr = decay_conversion (expr);
4828 /* build_c_cast puts on a NOP_EXPR to make the result not an lvalue.
4829 Strip such NOP_EXPRs if VALUE is being used in non-lvalue context. */
4830 if (TREE_CODE (expr) == NOP_EXPR
4831 && TREE_TYPE (expr) == TREE_TYPE (TREE_OPERAND (expr, 0)))
4832 expr = TREE_OPERAND (expr, 0);
4835 intype = TREE_TYPE (expr);
4837 if (same_type_ignoring_top_level_qualifiers_p (intype, type))
4838 return build_static_cast (type, expr);
4839 else if (TREE_CODE (type) == REFERENCE_TYPE)
4841 if (! real_lvalue_p (expr))
4843 error ("invalid const_cast of an rvalue of type `%T' to type `%T'", intype, type);
4844 return error_mark_node;
4847 if (comp_ptr_ttypes_const (TREE_TYPE (type), intype))
4849 expr = build_unary_op (ADDR_EXPR, expr, 0);
4850 expr = build1 (NOP_EXPR, type, expr);
4851 return convert_from_reference (expr);
4854 else if (TREE_CODE (type) == POINTER_TYPE
4855 && TREE_CODE (intype) == POINTER_TYPE
4856 && comp_ptr_ttypes_const (TREE_TYPE (type), TREE_TYPE (intype)))
4857 return cp_convert (type, expr);
4859 error ("invalid const_cast from type `%T' to type `%T'", intype, type);
4860 return error_mark_node;
4863 /* Build an expression representing a cast to type TYPE of expression EXPR.
4865 ALLOW_NONCONVERTING is true if we should allow non-converting constructors
4866 when doing the cast. */
4869 build_c_cast (type, expr)
4872 register tree value = expr;
4875 if (type == error_mark_node || expr == error_mark_node)
4876 return error_mark_node;
4878 if (processing_template_decl)
4880 tree t = build_min (CAST_EXPR, type,
4881 tree_cons (NULL_TREE, value, NULL_TREE));
4885 /* build_c_cast puts on a NOP_EXPR to make the result not an lvalue.
4886 Strip such NOP_EXPRs if VALUE is being used in non-lvalue context. */
4887 if (TREE_CODE (type) != REFERENCE_TYPE
4888 && TREE_CODE (value) == NOP_EXPR
4889 && TREE_TYPE (value) == TREE_TYPE (TREE_OPERAND (value, 0)))
4890 value = TREE_OPERAND (value, 0);
4892 if (TREE_CODE (value) == OFFSET_REF)
4893 value = resolve_offset_ref (value);
4895 if (TREE_CODE (type) == ARRAY_TYPE)
4897 /* Allow casting from T1* to T2[] because Cfront allows it.
4898 NIHCL uses it. It is not valid ISO C++ however. */
4899 if (TREE_CODE (TREE_TYPE (expr)) == POINTER_TYPE)
4901 pedwarn ("ISO C++ forbids casting to an array type `%T'", type);
4902 type = build_pointer_type (TREE_TYPE (type));
4906 error ("ISO C++ forbids casting to an array type `%T'", type);
4907 return error_mark_node;
4911 if (TREE_CODE (type) == FUNCTION_TYPE
4912 || TREE_CODE (type) == METHOD_TYPE)
4914 error ("invalid cast to function type `%T'", type);
4915 return error_mark_node;
4918 if (TREE_CODE (type) == VOID_TYPE)
4920 /* Conversion to void does not cause any of the normal function to
4921 * pointer, array to pointer and lvalue to rvalue decays. */
4923 value = convert_to_void (value, /*implicit=*/NULL);
4926 /* Convert functions and arrays to pointers and
4927 convert references to their expanded types,
4928 but don't convert any other types. If, however, we are
4929 casting to a class type, there's no reason to do this: the
4930 cast will only succeed if there is a converting constructor,
4931 and the default conversions will be done at that point. In
4932 fact, doing the default conversion here is actually harmful
4936 struct S { S(const A&); };
4938 since we don't want the array-to-pointer conversion done. */
4939 if (!IS_AGGR_TYPE (type))
4941 if (TREE_CODE (TREE_TYPE (value)) == FUNCTION_TYPE
4942 || (TREE_CODE (TREE_TYPE (value)) == METHOD_TYPE
4943 /* Don't do the default conversion on a ->* expression. */
4944 && ! (TREE_CODE (type) == POINTER_TYPE
4945 && bound_pmf_p (value)))
4946 || TREE_CODE (TREE_TYPE (value)) == ARRAY_TYPE
4947 || TREE_CODE (TREE_TYPE (value)) == REFERENCE_TYPE)
4948 value = default_conversion (value);
4950 else if (TREE_CODE (TREE_TYPE (value)) == REFERENCE_TYPE)
4951 /* However, even for class types, we still need to strip away
4952 the reference type, since the call to convert_force below
4953 does not expect the input expression to be of reference
4955 value = convert_from_reference (value);
4957 otype = TREE_TYPE (value);
4959 /* Optionally warn about potentially worrisome casts. */
4962 && TREE_CODE (type) == POINTER_TYPE
4963 && TREE_CODE (otype) == POINTER_TYPE
4964 && !at_least_as_qualified_p (TREE_TYPE (type),
4966 warning ("cast from `%T' to `%T' discards qualifiers from pointer target type",
4969 if (TREE_CODE (type) == INTEGER_TYPE
4970 && TREE_CODE (otype) == POINTER_TYPE
4971 && TYPE_PRECISION (type) != TYPE_PRECISION (otype))
4972 warning ("cast from pointer to integer of different size");
4974 if (TREE_CODE (type) == POINTER_TYPE
4975 && TREE_CODE (otype) == INTEGER_TYPE
4976 && TYPE_PRECISION (type) != TYPE_PRECISION (otype)
4977 /* Don't warn about converting any constant. */
4978 && !TREE_CONSTANT (value))
4979 warning ("cast to pointer from integer of different size");
4981 if (TREE_CODE (type) == REFERENCE_TYPE)
4982 value = (convert_from_reference
4983 (convert_to_reference (type, value, CONV_C_CAST,
4984 LOOKUP_COMPLAIN, NULL_TREE)));
4989 value = decl_constant_value (value);
4992 value = convert_force (type, value, CONV_C_CAST);
4994 /* Ignore any integer overflow caused by the cast. */
4995 if (TREE_CODE (value) == INTEGER_CST)
4997 TREE_OVERFLOW (value) = TREE_OVERFLOW (ovalue);
4998 TREE_CONSTANT_OVERFLOW (value) = TREE_CONSTANT_OVERFLOW (ovalue);
5002 /* Warn about possible alignment problems. Do this here when we will have
5003 instantiated any necessary template types. */
5004 if (STRICT_ALIGNMENT && warn_cast_align
5005 && TREE_CODE (type) == POINTER_TYPE
5006 && TREE_CODE (otype) == POINTER_TYPE
5007 && TREE_CODE (TREE_TYPE (otype)) != VOID_TYPE
5008 && TREE_CODE (TREE_TYPE (otype)) != FUNCTION_TYPE
5009 && COMPLETE_TYPE_P (TREE_TYPE (otype))
5010 && COMPLETE_TYPE_P (TREE_TYPE (type))
5011 && TYPE_ALIGN (TREE_TYPE (type)) > TYPE_ALIGN (TREE_TYPE (otype)))
5012 warning ("cast from `%T' to `%T' increases required alignment of target type",
5015 /* Always produce some operator for an explicit cast,
5016 so we can tell (for -pedantic) that the cast is no lvalue. */
5017 if (TREE_CODE (type) != REFERENCE_TYPE && value == expr
5018 && real_lvalue_p (value))
5019 value = non_lvalue (value);
5024 /* Build an assignment expression of lvalue LHS from value RHS.
5025 MODIFYCODE is the code for a binary operator that we use
5026 to combine the old value of LHS with RHS to get the new value.
5027 Or else MODIFYCODE is NOP_EXPR meaning do a simple assignment.
5029 C++: If MODIFYCODE is INIT_EXPR, then leave references unbashed. */
5032 build_modify_expr (lhs, modifycode, rhs)
5034 enum tree_code modifycode;
5037 register tree result;
5039 tree lhstype = TREE_TYPE (lhs);
5040 tree olhstype = lhstype;
5043 /* Avoid duplicate error messages from operands that had errors. */
5044 if (lhs == error_mark_node || rhs == error_mark_node)
5045 return error_mark_node;
5047 /* Handle control structure constructs used as "lvalues". */
5048 switch (TREE_CODE (lhs))
5050 /* Handle --foo = 5; as these are valid constructs in C++ */
5051 case PREDECREMENT_EXPR:
5052 case PREINCREMENT_EXPR:
5053 if (TREE_SIDE_EFFECTS (TREE_OPERAND (lhs, 0)))
5054 lhs = build (TREE_CODE (lhs), TREE_TYPE (lhs),
5055 stabilize_reference (TREE_OPERAND (lhs, 0)),
5056 TREE_OPERAND (lhs, 1));
5057 return build (COMPOUND_EXPR, lhstype,
5059 build_modify_expr (TREE_OPERAND (lhs, 0),
5062 /* Handle (a, b) used as an "lvalue". */
5064 newrhs = build_modify_expr (TREE_OPERAND (lhs, 1),
5066 if (newrhs == error_mark_node)
5067 return error_mark_node;
5068 return build (COMPOUND_EXPR, lhstype,
5069 TREE_OPERAND (lhs, 0), newrhs);
5072 newrhs = build_modify_expr (TREE_OPERAND (lhs, 0), modifycode, rhs);
5073 if (newrhs == error_mark_node)
5074 return error_mark_node;
5075 return build (COMPOUND_EXPR, lhstype, lhs, newrhs);
5077 /* Handle (a ? b : c) used as an "lvalue". */
5080 /* Produce (a ? (b = rhs) : (c = rhs))
5081 except that the RHS goes through a save-expr
5082 so the code to compute it is only emitted once. */
5084 tree preeval = NULL_TREE;
5086 rhs = stabilize_expr (rhs, &preeval);
5088 /* Check this here to avoid odd errors when trying to convert
5089 a throw to the type of the COND_EXPR. */
5090 if (!lvalue_or_else (lhs, "assignment"))
5091 return error_mark_node;
5093 cond = build_conditional_expr
5094 (TREE_OPERAND (lhs, 0),
5095 build_modify_expr (cp_convert (TREE_TYPE (lhs),
5096 TREE_OPERAND (lhs, 1)),
5098 build_modify_expr (cp_convert (TREE_TYPE (lhs),
5099 TREE_OPERAND (lhs, 2)),
5102 if (cond == error_mark_node)
5104 /* Make sure the code to compute the rhs comes out
5105 before the split. */
5106 return build (COMPOUND_EXPR, TREE_TYPE (lhs), preeval, cond);
5110 lhs = resolve_offset_ref (lhs);
5111 if (lhs == error_mark_node)
5112 return error_mark_node;
5113 olhstype = lhstype = TREE_TYPE (lhs);
5119 if (modifycode == INIT_EXPR)
5121 if (TREE_CODE (rhs) == CONSTRUCTOR)
5123 my_friendly_assert (same_type_p (TREE_TYPE (rhs), lhstype),
5125 result = build (INIT_EXPR, lhstype, lhs, rhs);
5126 TREE_SIDE_EFFECTS (result) = 1;
5129 else if (! IS_AGGR_TYPE (lhstype))
5130 /* Do the default thing */;
5133 result = build_special_member_call (lhs, complete_ctor_identifier,
5134 build_tree_list (NULL_TREE, rhs),
5135 TYPE_BINFO (lhstype),
5137 if (result == NULL_TREE)
5138 return error_mark_node;
5144 if (TREE_CODE (lhstype) == REFERENCE_TYPE)
5146 lhs = convert_from_reference (lhs);
5147 olhstype = lhstype = TREE_TYPE (lhs);
5149 lhs = require_complete_type (lhs);
5150 if (lhs == error_mark_node)
5151 return error_mark_node;
5153 if (modifycode == NOP_EXPR)
5155 /* `operator=' is not an inheritable operator. */
5156 if (! IS_AGGR_TYPE (lhstype))
5157 /* Do the default thing */;
5160 result = build_opfncall (MODIFY_EXPR, LOOKUP_NORMAL,
5161 lhs, rhs, make_node (NOP_EXPR));
5162 if (result == NULL_TREE)
5163 return error_mark_node;
5170 /* A binary op has been requested. Combine the old LHS
5171 value with the RHS producing the value we should actually
5172 store into the LHS. */
5174 my_friendly_assert (!PROMOTES_TO_AGGR_TYPE (lhstype, REFERENCE_TYPE),
5176 lhs = stabilize_reference (lhs);
5177 newrhs = cp_build_binary_op (modifycode, lhs, rhs);
5178 if (newrhs == error_mark_node)
5180 error (" in evaluation of `%Q(%#T, %#T)'", modifycode,
5181 TREE_TYPE (lhs), TREE_TYPE (rhs));
5182 return error_mark_node;
5185 /* Now it looks like a plain assignment. */
5186 modifycode = NOP_EXPR;
5188 my_friendly_assert (TREE_CODE (lhstype) != REFERENCE_TYPE, 20011220);
5189 my_friendly_assert (TREE_CODE (TREE_TYPE (newrhs)) != REFERENCE_TYPE,
5193 /* Handle a cast used as an "lvalue".
5194 We have already performed any binary operator using the value as cast.
5195 Now convert the result to the cast type of the lhs,
5196 and then true type of the lhs and store it there;
5197 then convert result back to the cast type to be the value
5198 of the assignment. */
5200 switch (TREE_CODE (lhs))
5205 case FIX_TRUNC_EXPR:
5206 case FIX_FLOOR_EXPR:
5207 case FIX_ROUND_EXPR:
5210 tree inner_lhs = TREE_OPERAND (lhs, 0);
5213 if (TREE_CODE (TREE_TYPE (newrhs)) == ARRAY_TYPE
5214 || TREE_CODE (TREE_TYPE (newrhs)) == FUNCTION_TYPE
5215 || TREE_CODE (TREE_TYPE (newrhs)) == METHOD_TYPE
5216 || TREE_CODE (TREE_TYPE (newrhs)) == OFFSET_TYPE)
5217 newrhs = default_conversion (newrhs);
5219 /* ISO C++ 5.4/1: The result is an lvalue if T is a reference
5220 type, otherwise the result is an rvalue. */
5221 if (! lvalue_p (lhs))
5222 pedwarn ("ISO C++ forbids cast to non-reference type used as lvalue");
5224 result = build_modify_expr (inner_lhs, NOP_EXPR,
5225 cp_convert (TREE_TYPE (inner_lhs),
5226 cp_convert (lhstype, newrhs)));
5227 if (result == error_mark_node)
5229 return cp_convert (TREE_TYPE (lhs), result);
5236 /* Now we have handled acceptable kinds of LHS that are not truly lvalues.
5237 Reject anything strange now. */
5239 if (!lvalue_or_else (lhs, "assignment"))
5240 return error_mark_node;
5242 /* Warn about modifying something that is `const'. Don't warn if
5243 this is initialization. */
5244 if (modifycode != INIT_EXPR
5245 && (TREE_READONLY (lhs) || CP_TYPE_CONST_P (lhstype)
5246 /* Functions are not modifiable, even though they are
5248 || TREE_CODE (TREE_TYPE (lhs)) == FUNCTION_TYPE
5249 || TREE_CODE (TREE_TYPE (lhs)) == METHOD_TYPE
5250 /* If it's an aggregate and any field is const, then it is
5251 effectively const. */
5252 || (IS_AGGR_TYPE_CODE (TREE_CODE (lhstype))
5253 && C_TYPE_FIELDS_READONLY (lhstype))))
5254 readonly_error (lhs, "assignment", 0);
5256 /* If storing into a structure or union member, it has probably been
5257 given type `int'. Compute the type that would go with the actual
5258 amount of storage the member occupies. */
5260 if (TREE_CODE (lhs) == COMPONENT_REF
5261 && (TREE_CODE (lhstype) == INTEGER_TYPE
5262 || TREE_CODE (lhstype) == REAL_TYPE
5263 || TREE_CODE (lhstype) == ENUMERAL_TYPE))
5265 lhstype = TREE_TYPE (get_unwidened (lhs, 0));
5267 /* If storing in a field that is in actuality a short or narrower
5268 than one, we must store in the field in its actual type. */
5270 if (lhstype != TREE_TYPE (lhs))
5272 lhs = copy_node (lhs);
5273 TREE_TYPE (lhs) = lhstype;
5277 if (TREE_CODE (lhstype) != REFERENCE_TYPE)
5279 if (TREE_SIDE_EFFECTS (lhs))
5280 lhs = stabilize_reference (lhs);
5281 if (TREE_SIDE_EFFECTS (newrhs))
5282 newrhs = stabilize_reference (newrhs);
5285 /* Convert new value to destination type. */
5287 if (TREE_CODE (lhstype) == ARRAY_TYPE)
5291 if (!same_or_base_type_p (TYPE_MAIN_VARIANT (lhstype),
5292 TYPE_MAIN_VARIANT (TREE_TYPE (rhs))))
5294 error ("incompatible types in assignment of `%T' to `%T'",
5295 TREE_TYPE (rhs), lhstype);
5296 return error_mark_node;
5299 /* Allow array assignment in compiler-generated code. */
5300 if (! DECL_ARTIFICIAL (current_function_decl))
5301 pedwarn ("ISO C++ forbids assignment of arrays");
5303 from_array = TREE_CODE (TREE_TYPE (newrhs)) == ARRAY_TYPE
5304 ? 1 + (modifycode != INIT_EXPR): 0;
5305 return build_vec_init (lhs, newrhs, from_array);
5308 if (modifycode == INIT_EXPR)
5309 newrhs = convert_for_initialization (lhs, lhstype, newrhs, LOOKUP_NORMAL,
5310 "initialization", NULL_TREE, 0);
5313 /* Avoid warnings on enum bit fields. */
5314 if (TREE_CODE (olhstype) == ENUMERAL_TYPE
5315 && TREE_CODE (lhstype) == INTEGER_TYPE)
5317 newrhs = convert_for_assignment (olhstype, newrhs, "assignment",
5319 newrhs = convert_force (lhstype, newrhs, 0);
5322 newrhs = convert_for_assignment (lhstype, newrhs, "assignment",
5324 if (TREE_CODE (newrhs) == CALL_EXPR
5325 && TYPE_NEEDS_CONSTRUCTING (lhstype))
5326 newrhs = build_cplus_new (lhstype, newrhs);
5328 /* Can't initialize directly from a TARGET_EXPR, since that would
5329 cause the lhs to be constructed twice, and possibly result in
5330 accidental self-initialization. So we force the TARGET_EXPR to be
5331 expanded without a target. */
5332 if (TREE_CODE (newrhs) == TARGET_EXPR)
5333 newrhs = build (COMPOUND_EXPR, TREE_TYPE (newrhs), newrhs,
5334 TREE_OPERAND (newrhs, 0));
5337 if (newrhs == error_mark_node)
5338 return error_mark_node;
5340 if (TREE_CODE (newrhs) == COND_EXPR)
5343 tree cond = TREE_OPERAND (newrhs, 0);
5345 if (TREE_SIDE_EFFECTS (lhs))
5346 cond = build_compound_expr (tree_cons
5348 build_tree_list (NULL_TREE, cond)));
5350 /* Cannot have two identical lhs on this one tree (result) as preexpand
5351 calls will rip them out and fill in RTL for them, but when the
5352 rtl is generated, the calls will only be in the first side of the
5353 condition, not on both, or before the conditional jump! (mrs) */
5354 lhs1 = break_out_calls (lhs);
5357 /* If there's no change, the COND_EXPR behaves like any other rhs. */
5358 result = build (modifycode == NOP_EXPR ? MODIFY_EXPR : INIT_EXPR,
5359 lhstype, lhs, newrhs);
5362 tree result_type = TREE_TYPE (newrhs);
5363 /* We have to convert each arm to the proper type because the
5364 types may have been munged by constant folding. */
5366 = build (COND_EXPR, result_type, cond,
5367 build_modify_expr (lhs, modifycode,
5368 cp_convert (result_type,
5369 TREE_OPERAND (newrhs, 1))),
5370 build_modify_expr (lhs1, modifycode,
5371 cp_convert (result_type,
5372 TREE_OPERAND (newrhs, 2))));
5376 result = build (modifycode == NOP_EXPR ? MODIFY_EXPR : INIT_EXPR,
5377 lhstype, lhs, newrhs);
5379 TREE_SIDE_EFFECTS (result) = 1;
5381 /* If we got the LHS in a different type for storing in,
5382 convert the result back to the nominal type of LHS
5383 so that the value we return always has the same type
5384 as the LHS argument. */
5386 if (olhstype == TREE_TYPE (result))
5388 /* Avoid warnings converting integral types back into enums
5389 for enum bit fields. */
5390 if (TREE_CODE (TREE_TYPE (result)) == INTEGER_TYPE
5391 && TREE_CODE (olhstype) == ENUMERAL_TYPE)
5393 result = build (COMPOUND_EXPR, olhstype, result, olhs);
5394 TREE_NO_UNUSED_WARNING (result) = 1;
5397 return convert_for_assignment (olhstype, result, "assignment",
5402 build_x_modify_expr (lhs, modifycode, rhs)
5404 enum tree_code modifycode;
5407 if (processing_template_decl)
5408 return build_min_nt (MODOP_EXPR, lhs,
5409 build_min_nt (modifycode, NULL_TREE, NULL_TREE), rhs);
5411 if (modifycode != NOP_EXPR)
5413 tree rval = build_opfncall (MODIFY_EXPR, LOOKUP_NORMAL, lhs, rhs,
5414 make_node (modifycode));
5418 return build_modify_expr (lhs, modifycode, rhs);
5422 /* Get difference in deltas for different pointer to member function
5423 types. Return integer_zero_node, if FROM cannot be converted to a
5424 TO type. If FORCE is true, then allow reverse conversions as well.
5426 Note that the naming of FROM and TO is kind of backwards; the return
5427 value is what we add to a TO in order to get a FROM. They are named
5428 this way because we call this function to find out how to convert from
5429 a pointer to member of FROM to a pointer to member of TO. */
5432 get_delta_difference (from, to, force)
5436 tree delta = integer_zero_node;
5441 binfo = lookup_base (to, from, ba_check, &kind);
5442 if (kind == bk_inaccessible || kind == bk_ambig)
5444 error (" in pointer to member function conversion");
5451 error_not_base_type (from, to);
5452 error (" in pointer to member conversion");
5455 binfo = lookup_base (from, to, ba_check, &kind);
5458 virt_binfo = binfo_from_vbase (binfo);
5462 /* This is a reinterpret cast, we choose to do nothing. */
5463 warning ("pointer to member cast via virtual base `%T' of `%T'",
5464 BINFO_TYPE (virt_binfo),
5465 BINFO_TYPE (BINFO_INHERITANCE_CHAIN (virt_binfo)));
5468 delta = BINFO_OFFSET (binfo);
5469 delta = cp_convert (ptrdiff_type_node, delta);
5470 delta = cp_build_binary_op (MINUS_EXPR,
5477 virt_binfo = binfo_from_vbase (binfo);
5480 /* This is a reinterpret cast, we choose to do nothing. */
5482 warning ("pointer to member cast via virtual base `%T' of `%T'",
5483 BINFO_TYPE (virt_binfo),
5484 BINFO_TYPE (BINFO_INHERITANCE_CHAIN (virt_binfo)));
5486 error ("pointer to member conversion via virtual base `%T' of `%T'",
5487 BINFO_TYPE (virt_binfo),
5488 BINFO_TYPE (BINFO_INHERITANCE_CHAIN (virt_binfo)));
5491 delta = BINFO_OFFSET (binfo);
5493 return cp_convert (ptrdiff_type_node, delta);
5496 /* Return a constructor for the pointer-to-member-function TYPE using
5497 the other components as specified. */
5500 build_ptrmemfunc1 (type, delta, pfn)
5501 tree type, delta, pfn;
5507 /* Pull the FIELD_DECLs out of the type. */
5508 pfn_field = TYPE_FIELDS (type);
5509 delta_field = TREE_CHAIN (pfn_field);
5511 /* Make sure DELTA has the type we want. */
5512 delta = convert_and_check (delta_type_node, delta);
5514 /* Finish creating the initializer. */
5515 u = tree_cons (pfn_field, pfn,
5516 build_tree_list (delta_field, delta));
5517 u = build (CONSTRUCTOR, type, NULL_TREE, u);
5518 TREE_CONSTANT (u) = TREE_CONSTANT (pfn) && TREE_CONSTANT (delta);
5519 TREE_STATIC (u) = (TREE_CONSTANT (u)
5520 && (initializer_constant_valid_p (pfn, TREE_TYPE (pfn))
5522 && (initializer_constant_valid_p (delta, TREE_TYPE (delta))
5527 /* Build a constructor for a pointer to member function. It can be
5528 used to initialize global variables, local variable, or used
5529 as a value in expressions. TYPE is the POINTER to METHOD_TYPE we
5532 If FORCE is non-zero, then force this conversion, even if
5533 we would rather not do it. Usually set when using an explicit
5536 Return error_mark_node, if something goes wrong. */
5539 build_ptrmemfunc (type, pfn, force)
5544 tree pfn_type = TREE_TYPE (pfn);
5545 tree to_type = build_ptrmemfunc_type (type);
5547 /* Handle multiple conversions of pointer to member functions. */
5548 if (TYPE_PTRMEMFUNC_P (TREE_TYPE (pfn)))
5550 tree delta = NULL_TREE;
5551 tree npfn = NULL_TREE;
5555 && !can_convert_arg (to_type, TREE_TYPE (pfn), pfn))
5556 error ("invalid conversion to type `%T' from type `%T'",
5559 n = get_delta_difference (TYPE_PTRMEMFUNC_OBJECT_TYPE (pfn_type),
5560 TYPE_PTRMEMFUNC_OBJECT_TYPE (to_type),
5563 /* We don't have to do any conversion to convert a
5564 pointer-to-member to its own type. But, we don't want to
5565 just return a PTRMEM_CST if there's an explicit cast; that
5566 cast should make the expression an invalid template argument. */
5567 if (TREE_CODE (pfn) != PTRMEM_CST)
5569 if (same_type_p (to_type, pfn_type))
5571 else if (integer_zerop (n))
5572 return build_reinterpret_cast (to_type, pfn);
5575 if (TREE_SIDE_EFFECTS (pfn))
5576 pfn = save_expr (pfn);
5578 /* Obtain the function pointer and the current DELTA. */
5579 if (TREE_CODE (pfn) == PTRMEM_CST)
5580 expand_ptrmemfunc_cst (pfn, &delta, &npfn);
5583 npfn = build_ptrmemfunc_access_expr (pfn, pfn_identifier);
5584 delta = build_ptrmemfunc_access_expr (pfn, delta_identifier);
5587 /* Just adjust the DELTA field. */
5588 delta = cp_convert (ptrdiff_type_node, delta);
5589 if (TARGET_PTRMEMFUNC_VBIT_LOCATION == ptrmemfunc_vbit_in_delta)
5590 n = cp_build_binary_op (LSHIFT_EXPR, n, integer_one_node);
5591 delta = cp_build_binary_op (PLUS_EXPR, delta, n);
5592 return build_ptrmemfunc1 (to_type, delta, npfn);
5595 /* Handle null pointer to member function conversions. */
5596 if (integer_zerop (pfn))
5598 pfn = build_c_cast (type, integer_zero_node);
5599 return build_ptrmemfunc1 (to_type,
5604 if (type_unknown_p (pfn))
5605 return instantiate_type (type, pfn, tf_error | tf_warning);
5607 fn = TREE_OPERAND (pfn, 0);
5608 my_friendly_assert (TREE_CODE (fn) == FUNCTION_DECL, 0);
5609 return make_ptrmem_cst (to_type, fn);
5612 /* Return the DELTA, IDX, PFN, and DELTA2 values for the PTRMEM_CST
5615 ??? There is no consistency as to the types returned for the above
5616 values. Some code acts as if its a sizetype and some as if its
5617 integer_type_node. */
5620 expand_ptrmemfunc_cst (cst, delta, pfn)
5625 tree type = TREE_TYPE (cst);
5626 tree fn = PTRMEM_CST_MEMBER (cst);
5627 tree ptr_class, fn_class;
5629 my_friendly_assert (TREE_CODE (fn) == FUNCTION_DECL, 0);
5631 /* The class that the function belongs to. */
5632 fn_class = DECL_CONTEXT (fn);
5634 /* The class that we're creating a pointer to member of. */
5635 ptr_class = TYPE_PTRMEMFUNC_OBJECT_TYPE (type);
5637 /* First, calculate the adjustment to the function's class. */
5638 *delta = get_delta_difference (fn_class, ptr_class, /*force=*/0);
5640 if (!DECL_VIRTUAL_P (fn))
5641 *pfn = convert (TYPE_PTRMEMFUNC_FN_TYPE (type), build_addr_func (fn));
5644 /* If we're dealing with a virtual function, we have to adjust 'this'
5645 again, to point to the base which provides the vtable entry for
5646 fn; the call will do the opposite adjustment. */
5647 tree orig_class = DECL_VIRTUAL_CONTEXT (fn);
5648 tree binfo = binfo_or_else (orig_class, fn_class);
5649 *delta = fold (build (PLUS_EXPR, TREE_TYPE (*delta),
5650 *delta, BINFO_OFFSET (binfo)));
5652 /* We set PFN to the vtable offset at which the function can be
5653 found, plus one (unless ptrmemfunc_vbit_in_delta, in which
5654 case delta is shifted left, and then incremented). */
5655 *pfn = DECL_VINDEX (fn);
5656 *pfn = fold (build (MULT_EXPR, integer_type_node, *pfn,
5657 TYPE_SIZE_UNIT (vtable_entry_type)));
5659 switch (TARGET_PTRMEMFUNC_VBIT_LOCATION)
5661 case ptrmemfunc_vbit_in_pfn:
5662 *pfn = fold (build (PLUS_EXPR, integer_type_node, *pfn,
5666 case ptrmemfunc_vbit_in_delta:
5667 *delta = fold (build (LSHIFT_EXPR, TREE_TYPE (*delta),
5668 *delta, integer_one_node));
5669 *delta = fold (build (PLUS_EXPR, TREE_TYPE (*delta),
5670 *delta, integer_one_node));
5677 *pfn = fold (build1 (NOP_EXPR, TYPE_PTRMEMFUNC_FN_TYPE (type),
5682 /* Return an expression for PFN from the pointer-to-member function
5686 pfn_from_ptrmemfunc (t)
5689 if (TREE_CODE (t) == PTRMEM_CST)
5694 expand_ptrmemfunc_cst (t, &delta, &pfn);
5699 return build_ptrmemfunc_access_expr (t, pfn_identifier);
5702 /* Expression EXPR is about to be implicitly converted to TYPE. Warn
5703 if this is a potentially dangerous thing to do. Returns a possibly
5707 dubious_conversion_warnings (type, expr, errtype, fndecl, parmnum)
5710 const char *errtype;
5714 if (TREE_CODE (type) == REFERENCE_TYPE)
5715 type = TREE_TYPE (type);
5717 /* Issue warnings about peculiar, but legal, uses of NULL. */
5718 if (ARITHMETIC_TYPE_P (type) && expr == null_node)
5721 warning ("passing NULL used for non-pointer %s %P of `%D'",
5722 errtype, parmnum, fndecl);
5724 warning ("%s to non-pointer type `%T' from NULL", errtype, type);
5727 /* Warn about assigning a floating-point type to an integer type. */
5728 if (TREE_CODE (TREE_TYPE (expr)) == REAL_TYPE
5729 && TREE_CODE (type) == INTEGER_TYPE)
5732 warning ("passing `%T' for %s %P of `%D'",
5733 TREE_TYPE (expr), errtype, parmnum, fndecl);
5735 warning ("%s to `%T' from `%T'", errtype, type, TREE_TYPE (expr));
5737 /* And warn about assigning a negative value to an unsigned
5739 else if (TREE_UNSIGNED (type) && TREE_CODE (type) != BOOLEAN_TYPE)
5741 if (TREE_CODE (expr) == INTEGER_CST
5742 && TREE_NEGATED_INT (expr))
5745 warning ("passing negative value `%E' for %s %P of `%D'",
5746 expr, errtype, parmnum, fndecl);
5748 warning ("%s of negative value `%E' to `%T'",
5749 errtype, expr, type);
5752 overflow_warning (expr);
5754 if (TREE_CONSTANT (expr))
5760 /* Convert value RHS to type TYPE as preparation for an assignment to
5761 an lvalue of type TYPE. ERRTYPE is a string to use in error
5762 messages: "assignment", "return", etc. If FNDECL is non-NULL, we
5763 are doing the conversion in order to pass the PARMNUMth argument of
5767 convert_for_assignment (type, rhs, errtype, fndecl, parmnum)
5769 const char *errtype;
5773 register enum tree_code codel = TREE_CODE (type);
5774 register tree rhstype;
5775 register enum tree_code coder;
5777 if (codel == OFFSET_TYPE)
5780 if (TREE_CODE (rhs) == OFFSET_REF)
5781 rhs = resolve_offset_ref (rhs);
5783 /* Strip NON_LVALUE_EXPRs since we aren't using as an lvalue. */
5784 if (TREE_CODE (rhs) == NON_LVALUE_EXPR)
5785 rhs = TREE_OPERAND (rhs, 0);
5787 rhstype = TREE_TYPE (rhs);
5788 coder = TREE_CODE (rhstype);
5790 if (rhs == error_mark_node || rhstype == error_mark_node)
5791 return error_mark_node;
5792 if (TREE_CODE (rhs) == TREE_LIST && TREE_VALUE (rhs) == error_mark_node)
5793 return error_mark_node;
5795 rhs = dubious_conversion_warnings (type, rhs, errtype, fndecl, parmnum);
5797 /* The RHS of an assignment cannot have void type. */
5798 if (coder == VOID_TYPE)
5800 error ("void value not ignored as it ought to be");
5801 return error_mark_node;
5804 /* Simplify the RHS if possible. */
5805 if (TREE_CODE (rhs) == CONST_DECL)
5806 rhs = DECL_INITIAL (rhs);
5807 else if (coder != ARRAY_TYPE)
5808 rhs = decl_constant_value (rhs);
5812 The expression is implicitly converted (clause _conv_) to the
5813 cv-unqualified type of the left operand.
5815 We allow bad conversions here because by the time we get to this point
5816 we are committed to doing the conversion. If we end up doing a bad
5817 conversion, convert_like will complain. */
5818 if (!can_convert_arg_bad (type, rhstype, rhs))
5820 /* When -Wno-pmf-conversions is use, we just silently allow
5821 conversions from pointers-to-members to plain pointers. If
5822 the conversion doesn't work, cp_convert will complain. */
5824 && TYPE_PTR_P (type)
5825 && TYPE_PTRMEMFUNC_P (rhstype))
5826 rhs = cp_convert (strip_top_quals (type), rhs);
5829 /* If the right-hand side has unknown type, then it is an
5830 overloaded function. Call instantiate_type to get error
5832 if (rhstype == unknown_type_node)
5833 instantiate_type (type, rhs, tf_error | tf_warning);
5835 error ("cannot convert `%T' to `%T' for argument `%P' to `%D'",
5836 rhstype, type, parmnum, fndecl);
5838 error ("cannot convert `%T' to `%T' in %s", rhstype, type,
5840 return error_mark_node;
5843 return perform_implicit_conversion (strip_top_quals (type), rhs);
5846 /* Convert RHS to be of type TYPE.
5847 If EXP is non-zero, it is the target of the initialization.
5848 ERRTYPE is a string to use in error messages.
5850 Two major differences between the behavior of
5851 `convert_for_assignment' and `convert_for_initialization'
5852 are that references are bashed in the former, while
5853 copied in the latter, and aggregates are assigned in
5854 the former (operator=) while initialized in the
5857 If using constructor make sure no conversion operator exists, if one does
5858 exist, an ambiguity exists.
5860 If flags doesn't include LOOKUP_COMPLAIN, don't complain about anything. */
5863 convert_for_initialization (exp, type, rhs, flags, errtype, fndecl, parmnum)
5864 tree exp, type, rhs;
5866 const char *errtype;
5870 register enum tree_code codel = TREE_CODE (type);
5871 register tree rhstype;
5872 register enum tree_code coder;
5874 /* build_c_cast puts on a NOP_EXPR to make the result not an lvalue.
5875 Strip such NOP_EXPRs, since RHS is used in non-lvalue context. */
5876 if (TREE_CODE (rhs) == NOP_EXPR
5877 && TREE_TYPE (rhs) == TREE_TYPE (TREE_OPERAND (rhs, 0))
5878 && codel != REFERENCE_TYPE)
5879 rhs = TREE_OPERAND (rhs, 0);
5881 if (rhs == error_mark_node
5882 || (TREE_CODE (rhs) == TREE_LIST && TREE_VALUE (rhs) == error_mark_node))
5883 return error_mark_node;
5885 if (TREE_CODE (rhs) == OFFSET_REF)
5887 rhs = resolve_offset_ref (rhs);
5888 if (rhs == error_mark_node)
5889 return error_mark_node;
5892 if (TREE_CODE (TREE_TYPE (rhs)) == REFERENCE_TYPE)
5893 rhs = convert_from_reference (rhs);
5895 if ((TREE_CODE (TREE_TYPE (rhs)) == ARRAY_TYPE
5896 && TREE_CODE (type) != ARRAY_TYPE
5897 && (TREE_CODE (type) != REFERENCE_TYPE
5898 || TREE_CODE (TREE_TYPE (type)) != ARRAY_TYPE))
5899 || (TREE_CODE (TREE_TYPE (rhs)) == FUNCTION_TYPE
5900 && (TREE_CODE (type) != REFERENCE_TYPE
5901 || TREE_CODE (TREE_TYPE (type)) != FUNCTION_TYPE))
5902 || TREE_CODE (TREE_TYPE (rhs)) == METHOD_TYPE)
5903 rhs = default_conversion (rhs);
5905 rhstype = TREE_TYPE (rhs);
5906 coder = TREE_CODE (rhstype);
5908 if (coder == ERROR_MARK)
5909 return error_mark_node;
5911 /* We accept references to incomplete types, so we can
5912 return here before checking if RHS is of complete type. */
5914 if (codel == REFERENCE_TYPE)
5916 /* This should eventually happen in convert_arguments. */
5917 int savew = 0, savee = 0;
5920 savew = warningcount, savee = errorcount;
5921 rhs = initialize_reference (type, rhs);
5924 if (warningcount > savew)
5925 cp_warning_at ("in passing argument %P of `%+D'", parmnum, fndecl);
5926 else if (errorcount > savee)
5927 cp_error_at ("in passing argument %P of `%+D'", parmnum, fndecl);
5933 exp = require_complete_type (exp);
5934 if (exp == error_mark_node)
5935 return error_mark_node;
5937 if (TREE_CODE (rhstype) == REFERENCE_TYPE)
5938 rhstype = TREE_TYPE (rhstype);
5940 type = complete_type (type);
5942 if (IS_AGGR_TYPE (type))
5943 return ocp_convert (type, rhs, CONV_IMPLICIT|CONV_FORCE_TEMP, flags);
5945 return convert_for_assignment (type, rhs, errtype, fndecl, parmnum);
5948 /* Expand an ASM statement with operands, handling output operands
5949 that are not variables or INDIRECT_REFS by transforming such
5950 cases into cases that expand_asm_operands can handle.
5952 Arguments are same as for expand_asm_operands.
5954 We don't do default conversions on all inputs, because it can screw
5955 up operands that are expected to be in memory. */
5958 c_expand_asm_operands (string, outputs, inputs, clobbers, vol, filename, line)
5959 tree string, outputs, inputs, clobbers;
5961 const char *filename;
5964 int noutputs = list_length (outputs);
5966 /* o[I] is the place that output number I should be written. */
5967 register tree *o = (tree *) alloca (noutputs * sizeof (tree));
5970 /* Record the contents of OUTPUTS before it is modified. */
5971 for (i = 0, tail = outputs; tail; tail = TREE_CHAIN (tail), i++)
5972 o[i] = TREE_VALUE (tail);
5974 /* Generate the ASM_OPERANDS insn;
5975 store into the TREE_VALUEs of OUTPUTS some trees for
5976 where the values were actually stored. */
5977 expand_asm_operands (string, outputs, inputs, clobbers, vol, filename, line);
5979 /* Copy all the intermediate outputs into the specified outputs. */
5980 for (i = 0, tail = outputs; tail; tail = TREE_CHAIN (tail), i++)
5982 if (o[i] != TREE_VALUE (tail))
5984 expand_expr (build_modify_expr (o[i], NOP_EXPR, TREE_VALUE (tail)),
5985 const0_rtx, VOIDmode, EXPAND_NORMAL);
5988 /* Restore the original value so that it's correct the next
5989 time we expand this function. */
5990 TREE_VALUE (tail) = o[i];
5992 /* Detect modification of read-only values.
5993 (Otherwise done by build_modify_expr.) */
5996 tree type = TREE_TYPE (o[i]);
5997 if (CP_TYPE_CONST_P (type)
5998 || (IS_AGGR_TYPE_CODE (TREE_CODE (type))
5999 && C_TYPE_FIELDS_READONLY (type)))
6000 readonly_error (o[i], "modification by `asm'", 1);
6004 /* Those MODIFY_EXPRs could do autoincrements. */
6008 /* If RETVAL is the address of, or a reference to, a local variable or
6009 temporary give an appropraite warning. */
6012 maybe_warn_about_returning_address_of_local (retval)
6015 tree valtype = TREE_TYPE (DECL_RESULT (current_function_decl));
6016 tree whats_returned = retval;
6020 if (TREE_CODE (whats_returned) == COMPOUND_EXPR)
6021 whats_returned = TREE_OPERAND (whats_returned, 1);
6022 else if (TREE_CODE (whats_returned) == CONVERT_EXPR
6023 || TREE_CODE (whats_returned) == NON_LVALUE_EXPR
6024 || TREE_CODE (whats_returned) == NOP_EXPR)
6025 whats_returned = TREE_OPERAND (whats_returned, 0);
6030 if (TREE_CODE (whats_returned) != ADDR_EXPR)
6032 whats_returned = TREE_OPERAND (whats_returned, 0);
6034 if (TREE_CODE (valtype) == REFERENCE_TYPE)
6036 if (TREE_CODE (whats_returned) == AGGR_INIT_EXPR
6037 || TREE_CODE (whats_returned) == TARGET_EXPR)
6039 /* Get the target. */
6040 whats_returned = TREE_OPERAND (whats_returned, 0);
6041 warning ("returning reference to temporary");
6044 if (TREE_CODE (whats_returned) == VAR_DECL
6045 && DECL_NAME (whats_returned)
6046 && TEMP_NAME_P (DECL_NAME (whats_returned)))
6048 warning ("reference to non-lvalue returned");
6053 if (TREE_CODE (whats_returned) == VAR_DECL
6054 && DECL_NAME (whats_returned)
6055 && DECL_FUNCTION_SCOPE_P (whats_returned)
6056 && !(TREE_STATIC (whats_returned)
6057 || TREE_PUBLIC (whats_returned)))
6059 if (TREE_CODE (valtype) == REFERENCE_TYPE)
6060 cp_warning_at ("reference to local variable `%D' returned",
6063 cp_warning_at ("address of local variable `%D' returned",
6069 /* Check that returning RETVAL from the current function is legal.
6070 Return an expression explicitly showing all conversions required to
6071 change RETVAL into the function return type, and to assign it to
6072 the DECL_RESULT for the function. */
6075 check_return_expr (retval)
6079 /* The type actually returned by the function, after any
6082 int fn_returns_value_p;
6084 /* A `volatile' function is one that isn't supposed to return, ever.
6085 (This is a G++ extension, used to get better code for functions
6086 that call the `volatile' function.) */
6087 if (TREE_THIS_VOLATILE (current_function_decl))
6088 warning ("function declared `noreturn' has a `return' statement");
6090 /* Check for various simple errors. */
6091 if (DECL_DESTRUCTOR_P (current_function_decl))
6094 error ("returning a value from a destructor");
6097 else if (DECL_CONSTRUCTOR_P (current_function_decl))
6099 if (in_function_try_handler)
6100 /* If a return statement appears in a handler of the
6101 function-try-block of a constructor, the program is ill-formed. */
6102 error ("cannot return from a handler of a function-try-block of a constructor");
6104 /* You can't return a value from a constructor. */
6105 error ("returning a value from a constructor");
6109 /* When no explicit return-value is given in a function with a named
6110 return value, the named return value is used. */
6111 result = DECL_RESULT (current_function_decl);
6112 valtype = TREE_TYPE (result);
6113 my_friendly_assert (valtype != NULL_TREE, 19990924);
6114 fn_returns_value_p = !VOID_TYPE_P (valtype);
6115 if (!retval && DECL_NAME (result) && fn_returns_value_p)
6118 /* Check for a return statement with no return value in a function
6119 that's supposed to return a value. */
6120 if (!retval && fn_returns_value_p)
6122 pedwarn ("return-statement with no value, in function declared with a non-void return type");
6123 /* Clear this, so finish_function won't say that we reach the
6124 end of a non-void function (which we don't, we gave a
6126 current_function_returns_null = 0;
6128 /* Check for a return statement with a value in a function that
6129 isn't supposed to return a value. */
6130 else if (retval && !fn_returns_value_p)
6132 if (VOID_TYPE_P (TREE_TYPE (retval)))
6133 /* You can return a `void' value from a function of `void'
6134 type. In that case, we have to evaluate the expression for
6135 its side-effects. */
6136 finish_expr_stmt (retval);
6138 pedwarn ("return-statement with a value, in function declared with a void return type");
6140 current_function_returns_null = 1;
6142 /* There's really no value to return, after all. */
6146 /* Remember that this function can sometimes return without a
6148 current_function_returns_null = 1;
6150 /* Remember that this function did return a value. */
6151 current_function_returns_value = 1;
6153 /* Only operator new(...) throw(), can return NULL [expr.new/13]. */
6154 if ((DECL_OVERLOADED_OPERATOR_P (current_function_decl) == NEW_EXPR
6155 || DECL_OVERLOADED_OPERATOR_P (current_function_decl) == VEC_NEW_EXPR)
6156 && !TYPE_NOTHROW_P (TREE_TYPE (current_function_decl))
6158 && null_ptr_cst_p (retval))
6159 warning ("`operator new' must not return NULL unless it is declared `throw()' (or -fcheck-new is in effect)");
6161 /* Effective C++ rule 15. See also start_function. */
6163 && DECL_NAME (current_function_decl) == ansi_assopname(NOP_EXPR)
6164 && retval != current_class_ref)
6165 warning ("`operator=' should return a reference to `*this'");
6167 /* The fabled Named Return Value optimization, as per [class.copy]/15:
6169 [...] For a function with a class return type, if the expression
6170 in the return statement is the name of a local object, and the cv-
6171 unqualified type of the local object is the same as the function
6172 return type, an implementation is permitted to omit creating the tem-
6173 porary object to hold the function return value [...]
6175 So, if this is a value-returning function that always returns the same
6176 local variable, remember it.
6178 It might be nice to be more flexible, and choose the first suitable
6179 variable even if the function sometimes returns something else, but
6180 then we run the risk of clobbering the variable we chose if the other
6181 returned expression uses the chosen variable somehow. And people expect
6182 this restriction, anyway. (jason 2000-11-19)
6184 See finish_function, genrtl_start_function, and declare_return_variable
6185 for other pieces of this optimization. */
6187 if (fn_returns_value_p && flag_elide_constructors)
6189 if (retval != NULL_TREE
6190 && (current_function_return_value == NULL_TREE
6191 || current_function_return_value == retval)
6192 && TREE_CODE (retval) == VAR_DECL
6193 && DECL_CONTEXT (retval) == current_function_decl
6194 && ! TREE_STATIC (retval)
6195 && (DECL_ALIGN (retval)
6196 >= DECL_ALIGN (DECL_RESULT (current_function_decl)))
6197 && same_type_p ((TYPE_MAIN_VARIANT
6198 (TREE_TYPE (retval))),
6200 (TREE_TYPE (TREE_TYPE (current_function_decl))))))
6201 current_function_return_value = retval;
6203 current_function_return_value = error_mark_node;
6206 /* We don't need to do any conversions when there's nothing being
6208 if (!retval || retval == error_mark_node)
6211 /* Do any required conversions. */
6212 if (retval == result || DECL_CONSTRUCTOR_P (current_function_decl))
6213 /* No conversions are required. */
6217 /* The type the function is declared to return. */
6218 tree functype = TREE_TYPE (TREE_TYPE (current_function_decl));
6220 /* First convert the value to the function's return type, then
6221 to the type of return value's location to handle the
6222 case that functype is smaller than the valtype. */
6223 retval = convert_for_initialization
6224 (NULL_TREE, functype, retval, LOOKUP_NORMAL|LOOKUP_ONLYCONVERTING,
6225 "return", NULL_TREE, 0);
6226 retval = convert (valtype, retval);
6228 /* If the conversion failed, treat this just like `return;'. */
6229 if (retval == error_mark_node)
6231 /* We can't initialize a register from a AGGR_INIT_EXPR. */
6232 else if (! current_function_returns_struct
6233 && TREE_CODE (retval) == TARGET_EXPR
6234 && TREE_CODE (TREE_OPERAND (retval, 1)) == AGGR_INIT_EXPR)
6235 retval = build (COMPOUND_EXPR, TREE_TYPE (retval), retval,
6236 TREE_OPERAND (retval, 0));
6238 maybe_warn_about_returning_address_of_local (retval);
6241 /* Actually copy the value returned into the appropriate location. */
6242 if (retval && retval != result)
6243 retval = build (INIT_EXPR, TREE_TYPE (result), result, retval);
6249 /* Returns non-zero if the pointer-type FROM can be converted to the
6250 pointer-type TO via a qualification conversion. If CONSTP is -1,
6251 then we return non-zero if the pointers are similar, and the
6252 cv-qualification signature of FROM is a proper subset of that of TO.
6254 If CONSTP is positive, then all outer pointers have been
6258 comp_ptr_ttypes_real (to, from, constp)
6262 int to_more_cv_qualified = 0;
6264 for (; ; to = TREE_TYPE (to), from = TREE_TYPE (from))
6266 if (TREE_CODE (to) != TREE_CODE (from))
6269 if (TREE_CODE (from) == OFFSET_TYPE
6270 && same_type_p (TYPE_OFFSET_BASETYPE (from),
6271 TYPE_OFFSET_BASETYPE (to)))
6274 /* Const and volatile mean something different for function types,
6275 so the usual checks are not appropriate. */
6276 if (TREE_CODE (to) != FUNCTION_TYPE && TREE_CODE (to) != METHOD_TYPE)
6278 if (!at_least_as_qualified_p (to, from))
6281 if (!at_least_as_qualified_p (from, to))
6286 ++to_more_cv_qualified;
6290 constp &= TYPE_READONLY (to);
6293 if (TREE_CODE (to) != POINTER_TYPE)
6295 same_type_ignoring_top_level_qualifiers_p (to, from)
6296 && (constp >= 0 || to_more_cv_qualified);
6300 /* When comparing, say, char ** to char const **, this function takes the
6301 'char *' and 'char const *'. Do not pass non-pointer types to this
6305 comp_ptr_ttypes (to, from)
6308 return comp_ptr_ttypes_real (to, from, 1);
6311 /* Returns 1 if to and from are (possibly multi-level) pointers to the same
6312 type or inheritance-related types, regardless of cv-quals. */
6315 ptr_reasonably_similar (to, from)
6318 for (; ; to = TREE_TYPE (to), from = TREE_TYPE (from))
6320 /* Any target type is similar enough to void. */
6321 if (TREE_CODE (to) == VOID_TYPE
6322 || TREE_CODE (from) == VOID_TYPE)
6325 if (TREE_CODE (to) != TREE_CODE (from))
6328 if (TREE_CODE (from) == OFFSET_TYPE
6329 && comptypes (TYPE_OFFSET_BASETYPE (to),
6330 TYPE_OFFSET_BASETYPE (from),
6331 COMPARE_BASE | COMPARE_RELAXED))
6334 if (TREE_CODE (to) == INTEGER_TYPE
6335 && TYPE_PRECISION (to) == TYPE_PRECISION (from))
6338 if (TREE_CODE (to) == FUNCTION_TYPE)
6341 if (TREE_CODE (to) != POINTER_TYPE)
6343 (TYPE_MAIN_VARIANT (to), TYPE_MAIN_VARIANT (from),
6344 COMPARE_BASE | COMPARE_RELAXED);
6348 /* Like comp_ptr_ttypes, for const_cast. */
6351 comp_ptr_ttypes_const (to, from)
6354 for (; ; to = TREE_TYPE (to), from = TREE_TYPE (from))
6356 if (TREE_CODE (to) != TREE_CODE (from))
6359 if (TREE_CODE (from) == OFFSET_TYPE
6360 && same_type_p (TYPE_OFFSET_BASETYPE (from),
6361 TYPE_OFFSET_BASETYPE (to)))
6364 if (TREE_CODE (to) != POINTER_TYPE)
6365 return same_type_ignoring_top_level_qualifiers_p (to, from);
6369 /* Like comp_ptr_ttypes, for reinterpret_cast. */
6372 comp_ptr_ttypes_reinterpret (to, from)
6377 for (; ; to = TREE_TYPE (to), from = TREE_TYPE (from))
6379 if (TREE_CODE (from) == OFFSET_TYPE)
6380 from = TREE_TYPE (from);
6381 if (TREE_CODE (to) == OFFSET_TYPE)
6382 to = TREE_TYPE (to);
6384 /* Const and volatile mean something different for function types,
6385 so the usual checks are not appropriate. */
6386 if (TREE_CODE (from) != FUNCTION_TYPE && TREE_CODE (from) != METHOD_TYPE
6387 && TREE_CODE (to) != FUNCTION_TYPE && TREE_CODE (to) != METHOD_TYPE)
6389 if (!at_least_as_qualified_p (to, from))
6393 && !at_least_as_qualified_p (from, to))
6395 constp &= TYPE_READONLY (to);
6398 if (TREE_CODE (from) != POINTER_TYPE
6399 || TREE_CODE (to) != POINTER_TYPE)
6404 /* Returns the type qualifiers for this type, including the qualifiers on the
6405 elements for an array type. */
6408 cp_type_quals (type)
6411 type = strip_array_types (type);
6412 return TYPE_QUALS (type);
6415 /* Returns non-zero if the TYPE contains a mutable member */
6418 cp_has_mutable_p (type)
6421 type = strip_array_types (type);
6423 return CLASS_TYPE_P (type) && CLASSTYPE_HAS_MUTABLE (type);
6426 /* Subroutine of casts_away_constness. Make T1 and T2 point at
6427 exemplar types such that casting T1 to T2 is casting away castness
6428 if and only if there is no implicit conversion from T1 to T2. */
6431 casts_away_constness_r (t1, t2)
6438 /* [expr.const.cast]
6440 For multi-level pointer to members and multi-level mixed pointers
6441 and pointers to members (conv.qual), the "member" aspect of a
6442 pointer to member level is ignored when determining if a const
6443 cv-qualifier has been cast away. */
6444 if (TYPE_PTRMEM_P (*t1))
6445 *t1 = build_pointer_type (TREE_TYPE (TREE_TYPE (*t1)));
6446 if (TYPE_PTRMEM_P (*t2))
6447 *t2 = build_pointer_type (TREE_TYPE (TREE_TYPE (*t2)));
6449 /* [expr.const.cast]
6451 For two pointer types:
6453 X1 is T1cv1,1 * ... cv1,N * where T1 is not a pointer type
6454 X2 is T2cv2,1 * ... cv2,M * where T2 is not a pointer type
6457 casting from X1 to X2 casts away constness if, for a non-pointer
6458 type T there does not exist an implicit conversion (clause
6461 Tcv1,(N-K+1) * cv1,(N-K+2) * ... cv1,N *
6465 Tcv2,(M-K+1) * cv2,(M-K+2) * ... cv2,M *. */
6467 if (TREE_CODE (*t1) != POINTER_TYPE
6468 || TREE_CODE (*t2) != POINTER_TYPE)
6470 *t1 = cp_build_qualified_type (void_type_node,
6471 cp_type_quals (*t1));
6472 *t2 = cp_build_qualified_type (void_type_node,
6473 cp_type_quals (*t2));
6477 quals1 = cp_type_quals (*t1);
6478 quals2 = cp_type_quals (*t2);
6479 *t1 = TREE_TYPE (*t1);
6480 *t2 = TREE_TYPE (*t2);
6481 casts_away_constness_r (t1, t2);
6482 *t1 = build_pointer_type (*t1);
6483 *t2 = build_pointer_type (*t2);
6484 *t1 = cp_build_qualified_type (*t1, quals1);
6485 *t2 = cp_build_qualified_type (*t2, quals2);
6488 /* Returns non-zero if casting from TYPE1 to TYPE2 casts away
6492 casts_away_constness (t1, t2)
6496 if (TREE_CODE (t2) == REFERENCE_TYPE)
6498 /* [expr.const.cast]
6500 Casting from an lvalue of type T1 to an lvalue of type T2
6501 using a reference cast casts away constness if a cast from an
6502 rvalue of type "pointer to T1" to the type "pointer to T2"
6503 casts away constness. */
6504 t1 = (TREE_CODE (t1) == REFERENCE_TYPE
6505 ? TREE_TYPE (t1) : t1);
6506 return casts_away_constness (build_pointer_type (t1),
6507 build_pointer_type (TREE_TYPE (t2)));
6510 if (TYPE_PTRMEM_P (t1) && TYPE_PTRMEM_P (t2))
6511 /* [expr.const.cast]
6513 Casting from an rvalue of type "pointer to data member of X
6514 of type T1" to the type "pointer to data member of Y of type
6515 T2" casts away constness if a cast from an rvalue of type
6516 "pointer to T1" to the type "pointer to T2" casts away
6518 return casts_away_constness
6519 (build_pointer_type (TREE_TYPE (TREE_TYPE (t1))),
6520 build_pointer_type (TREE_TYPE (TREE_TYPE (t2))));
6522 /* Casting away constness is only something that makes sense for
6523 pointer or reference types. */
6524 if (TREE_CODE (t1) != POINTER_TYPE
6525 || TREE_CODE (t2) != POINTER_TYPE)
6528 /* Top-level qualifiers don't matter. */
6529 t1 = TYPE_MAIN_VARIANT (t1);
6530 t2 = TYPE_MAIN_VARIANT (t2);
6531 casts_away_constness_r (&t1, &t2);
6532 if (!can_convert (t2, t1))
6538 /* Returns TYPE with its cv qualifiers removed
6539 TYPE is T cv* .. *cv where T is not a pointer type,
6540 returns T * .. *. (If T is an array type, then the cv qualifiers
6541 above are those of the array members.) */
6544 strip_all_pointer_quals (type)
6547 if (TREE_CODE (type) == POINTER_TYPE)
6548 return build_pointer_type (strip_all_pointer_quals (TREE_TYPE (type)));
6549 else if (TREE_CODE (type) == OFFSET_TYPE)
6550 return build_offset_type (TYPE_OFFSET_BASETYPE (type),
6551 strip_all_pointer_quals (TREE_TYPE (type)));
6553 return TYPE_MAIN_VARIANT (type);