* typeck.c (more_qualified_p): Remove.
[official-gcc.git] / gcc / cp / typeck.c
blob0485d65e17f2e8812a685e1fcec3bd4135558d80
1 /* Build expressions with type checking for C++ compiler.
2 Copyright (C) 1987, 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
3 1999, 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
4 Hacked by Michael Tiemann (tiemann@cygnus.com)
6 This file is part of GCC.
8 GCC is free software; you can redistribute it and/or modify
9 it under the terms of the GNU General Public License as published by
10 the Free Software Foundation; either version 2, or (at your option)
11 any later version.
13 GCC is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 GNU General Public License for more details.
18 You should have received a copy of the GNU General Public License
19 along with GCC; see the file COPYING. If not, write to
20 the Free Software Foundation, 59 Temple Place - Suite 330,
21 Boston, MA 02111-1307, USA. */
24 /* This file is part of the C++ front end.
25 It contains routines to build C++ expressions given their operands,
26 including computing the types of the result, C and C++ specific error
27 checks, and some optimization. */
29 #include "config.h"
30 #include "system.h"
31 #include "coretypes.h"
32 #include "tm.h"
33 #include "tree.h"
34 #include "rtl.h"
35 #include "expr.h"
36 #include "cp-tree.h"
37 #include "tm_p.h"
38 #include "flags.h"
39 #include "output.h"
40 #include "toplev.h"
41 #include "diagnostic.h"
42 #include "target.h"
43 #include "convert.h"
44 #include "c-common.h"
46 static tree convert_for_assignment (tree, tree, const char *, tree, int);
47 static tree cp_pointer_int_sum (enum tree_code, tree, tree);
48 static tree rationalize_conditional_expr (enum tree_code, tree);
49 static int comp_ptr_ttypes_real (tree, tree, int);
50 static int comp_ptr_ttypes_const (tree, tree);
51 static bool comp_except_types (tree, tree, bool);
52 static bool comp_array_types (tree, tree, bool);
53 static tree common_base_type (tree, tree);
54 static tree pointer_diff (tree, tree, tree);
55 static tree get_delta_difference (tree, tree, bool, bool);
56 static void casts_away_constness_r (tree *, tree *);
57 static bool casts_away_constness (tree, tree);
58 static void maybe_warn_about_returning_address_of_local (tree);
59 static tree lookup_destructor (tree, tree, tree);
61 /* Return the target type of TYPE, which means return T for:
62 T*, T&, T[], T (...), and otherwise, just T. */
64 tree
65 target_type (tree type)
67 type = non_reference (type);
68 while (TREE_CODE (type) == POINTER_TYPE
69 || TREE_CODE (type) == ARRAY_TYPE
70 || TREE_CODE (type) == FUNCTION_TYPE
71 || TREE_CODE (type) == METHOD_TYPE
72 || TYPE_PTRMEM_P (type))
73 type = TREE_TYPE (type);
74 return type;
77 /* Do `exp = require_complete_type (exp);' to make sure exp
78 does not have an incomplete type. (That includes void types.)
79 Returns the error_mark_node if the VALUE does not have
80 complete type when this function returns. */
82 tree
83 require_complete_type (tree value)
85 tree type;
87 if (processing_template_decl || value == error_mark_node)
88 return value;
90 if (TREE_CODE (value) == OVERLOAD)
91 type = unknown_type_node;
92 else
93 type = TREE_TYPE (value);
95 if (type == error_mark_node)
96 return error_mark_node;
98 /* First, detect a valid value with a complete type. */
99 if (COMPLETE_TYPE_P (type))
100 return value;
102 if (complete_type_or_else (type, value))
103 return value;
104 else
105 return error_mark_node;
108 /* Try to complete TYPE, if it is incomplete. For example, if TYPE is
109 a template instantiation, do the instantiation. Returns TYPE,
110 whether or not it could be completed, unless something goes
111 horribly wrong, in which case the error_mark_node is returned. */
113 tree
114 complete_type (tree type)
116 if (type == NULL_TREE)
117 /* Rather than crash, we return something sure to cause an error
118 at some point. */
119 return error_mark_node;
121 if (type == error_mark_node || COMPLETE_TYPE_P (type))
123 else if (TREE_CODE (type) == ARRAY_TYPE && TYPE_DOMAIN (type))
125 tree t = complete_type (TREE_TYPE (type));
126 if (COMPLETE_TYPE_P (t) && !dependent_type_p (type))
127 layout_type (type);
128 TYPE_NEEDS_CONSTRUCTING (type)
129 = TYPE_NEEDS_CONSTRUCTING (TYPE_MAIN_VARIANT (t));
130 TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type)
131 = TYPE_HAS_NONTRIVIAL_DESTRUCTOR (TYPE_MAIN_VARIANT (t));
133 else if (CLASS_TYPE_P (type) && CLASSTYPE_TEMPLATE_INSTANTIATION (type))
134 instantiate_class_template (TYPE_MAIN_VARIANT (type));
136 return type;
139 /* Like complete_type, but issue an error if the TYPE cannot be completed.
140 VALUE is used for informative diagnostics. DIAG_TYPE indicates the type
141 of diagnostic: 0 for an error, 1 for a warning, 2 for a pedwarn.
142 Returns NULL_TREE if the type cannot be made complete. */
144 tree
145 complete_type_or_diagnostic (tree type, tree value, int diag_type)
147 type = complete_type (type);
148 if (type == error_mark_node)
149 /* We already issued an error. */
150 return NULL_TREE;
151 else if (!COMPLETE_TYPE_P (type))
153 cxx_incomplete_type_diagnostic (value, type, diag_type);
154 return NULL_TREE;
156 else
157 return type;
160 /* Return truthvalue of whether type of EXP is instantiated. */
163 type_unknown_p (tree exp)
165 return (TREE_CODE (exp) == TREE_LIST
166 || TREE_TYPE (exp) == unknown_type_node);
170 /* Return the common type of two parameter lists.
171 We assume that comptypes has already been done and returned 1;
172 if that isn't so, this may crash.
174 As an optimization, free the space we allocate if the parameter
175 lists are already common. */
177 tree
178 commonparms (tree p1, tree p2)
180 tree oldargs = p1, newargs, n;
181 int i, len;
182 int any_change = 0;
184 len = list_length (p1);
185 newargs = tree_last (p1);
187 if (newargs == void_list_node)
188 i = 1;
189 else
191 i = 0;
192 newargs = 0;
195 for (; i < len; i++)
196 newargs = tree_cons (NULL_TREE, NULL_TREE, newargs);
198 n = newargs;
200 for (i = 0; p1;
201 p1 = TREE_CHAIN (p1), p2 = TREE_CHAIN (p2), n = TREE_CHAIN (n), i++)
203 if (TREE_PURPOSE (p1) && !TREE_PURPOSE (p2))
205 TREE_PURPOSE (n) = TREE_PURPOSE (p1);
206 any_change = 1;
208 else if (! TREE_PURPOSE (p1))
210 if (TREE_PURPOSE (p2))
212 TREE_PURPOSE (n) = TREE_PURPOSE (p2);
213 any_change = 1;
216 else
218 if (1 != simple_cst_equal (TREE_PURPOSE (p1), TREE_PURPOSE (p2)))
219 any_change = 1;
220 TREE_PURPOSE (n) = TREE_PURPOSE (p2);
222 if (TREE_VALUE (p1) != TREE_VALUE (p2))
224 any_change = 1;
225 TREE_VALUE (n) = merge_types (TREE_VALUE (p1), TREE_VALUE (p2));
227 else
228 TREE_VALUE (n) = TREE_VALUE (p1);
230 if (! any_change)
231 return oldargs;
233 return newargs;
236 /* Given a type, perhaps copied for a typedef,
237 find the "original" version of it. */
238 tree
239 original_type (tree t)
241 while (TYPE_NAME (t) != NULL_TREE)
243 tree x = TYPE_NAME (t);
244 if (TREE_CODE (x) != TYPE_DECL)
245 break;
246 x = DECL_ORIGINAL_TYPE (x);
247 if (x == NULL_TREE)
248 break;
249 t = x;
251 return t;
254 /* T1 and T2 are arithmetic or enumeration types. Return the type
255 that will result from the "usual arithmetic conversions" on T1 and
256 T2 as described in [expr]. */
258 tree
259 type_after_usual_arithmetic_conversions (tree t1, tree t2)
261 enum tree_code code1 = TREE_CODE (t1);
262 enum tree_code code2 = TREE_CODE (t2);
263 tree attributes;
265 /* FIXME: Attributes. */
266 gcc_assert (ARITHMETIC_TYPE_P (t1)
267 || TREE_CODE (t1) == COMPLEX_TYPE
268 || TREE_CODE (t1) == ENUMERAL_TYPE);
269 gcc_assert (ARITHMETIC_TYPE_P (t2)
270 || TREE_CODE (t2) == COMPLEX_TYPE
271 || TREE_CODE (t2) == ENUMERAL_TYPE);
273 /* In what follows, we slightly generalize the rules given in [expr] so
274 as to deal with `long long' and `complex'. First, merge the
275 attributes. */
276 attributes = (*targetm.merge_type_attributes) (t1, t2);
278 /* If one type is complex, form the common type of the non-complex
279 components, then make that complex. Use T1 or T2 if it is the
280 required type. */
281 if (code1 == COMPLEX_TYPE || code2 == COMPLEX_TYPE)
283 tree subtype1 = code1 == COMPLEX_TYPE ? TREE_TYPE (t1) : t1;
284 tree subtype2 = code2 == COMPLEX_TYPE ? TREE_TYPE (t2) : t2;
285 tree subtype
286 = type_after_usual_arithmetic_conversions (subtype1, subtype2);
288 if (code1 == COMPLEX_TYPE && TREE_TYPE (t1) == subtype)
289 return build_type_attribute_variant (t1, attributes);
290 else if (code2 == COMPLEX_TYPE && TREE_TYPE (t2) == subtype)
291 return build_type_attribute_variant (t2, attributes);
292 else
293 return build_type_attribute_variant (build_complex_type (subtype),
294 attributes);
297 /* If only one is real, use it as the result. */
298 if (code1 == REAL_TYPE && code2 != REAL_TYPE)
299 return build_type_attribute_variant (t1, attributes);
300 if (code2 == REAL_TYPE && code1 != REAL_TYPE)
301 return build_type_attribute_variant (t2, attributes);
303 /* Perform the integral promotions. */
304 if (code1 != REAL_TYPE)
306 t1 = type_promotes_to (t1);
307 t2 = type_promotes_to (t2);
310 /* Both real or both integers; use the one with greater precision. */
311 if (TYPE_PRECISION (t1) > TYPE_PRECISION (t2))
312 return build_type_attribute_variant (t1, attributes);
313 else if (TYPE_PRECISION (t2) > TYPE_PRECISION (t1))
314 return build_type_attribute_variant (t2, attributes);
316 /* The types are the same; no need to do anything fancy. */
317 if (TYPE_MAIN_VARIANT (t1) == TYPE_MAIN_VARIANT (t2))
318 return build_type_attribute_variant (t1, attributes);
320 if (code1 != REAL_TYPE)
322 /* If one is a sizetype, use it so size_binop doesn't blow up. */
323 if (TYPE_IS_SIZETYPE (t1) > TYPE_IS_SIZETYPE (t2))
324 return build_type_attribute_variant (t1, attributes);
325 if (TYPE_IS_SIZETYPE (t2) > TYPE_IS_SIZETYPE (t1))
326 return build_type_attribute_variant (t2, attributes);
328 /* If one is unsigned long long, then convert the other to unsigned
329 long long. */
330 if (same_type_p (TYPE_MAIN_VARIANT (t1), long_long_unsigned_type_node)
331 || same_type_p (TYPE_MAIN_VARIANT (t2), long_long_unsigned_type_node))
332 return build_type_attribute_variant (long_long_unsigned_type_node,
333 attributes);
334 /* If one is a long long, and the other is an unsigned long, and
335 long long can represent all the values of an unsigned long, then
336 convert to a long long. Otherwise, convert to an unsigned long
337 long. Otherwise, if either operand is long long, convert the
338 other to long long.
340 Since we're here, we know the TYPE_PRECISION is the same;
341 therefore converting to long long cannot represent all the values
342 of an unsigned long, so we choose unsigned long long in that
343 case. */
344 if (same_type_p (TYPE_MAIN_VARIANT (t1), long_long_integer_type_node)
345 || same_type_p (TYPE_MAIN_VARIANT (t2), long_long_integer_type_node))
347 tree t = ((TYPE_UNSIGNED (t1) || TYPE_UNSIGNED (t2))
348 ? long_long_unsigned_type_node
349 : long_long_integer_type_node);
350 return build_type_attribute_variant (t, attributes);
353 /* Go through the same procedure, but for longs. */
354 if (same_type_p (TYPE_MAIN_VARIANT (t1), long_unsigned_type_node)
355 || same_type_p (TYPE_MAIN_VARIANT (t2), long_unsigned_type_node))
356 return build_type_attribute_variant (long_unsigned_type_node,
357 attributes);
358 if (same_type_p (TYPE_MAIN_VARIANT (t1), long_integer_type_node)
359 || same_type_p (TYPE_MAIN_VARIANT (t2), long_integer_type_node))
361 tree t = ((TYPE_UNSIGNED (t1) || TYPE_UNSIGNED (t2))
362 ? long_unsigned_type_node : long_integer_type_node);
363 return build_type_attribute_variant (t, attributes);
365 /* Otherwise prefer the unsigned one. */
366 if (TYPE_UNSIGNED (t1))
367 return build_type_attribute_variant (t1, attributes);
368 else
369 return build_type_attribute_variant (t2, attributes);
371 else
373 if (same_type_p (TYPE_MAIN_VARIANT (t1), long_double_type_node)
374 || same_type_p (TYPE_MAIN_VARIANT (t2), long_double_type_node))
375 return build_type_attribute_variant (long_double_type_node,
376 attributes);
377 if (same_type_p (TYPE_MAIN_VARIANT (t1), double_type_node)
378 || same_type_p (TYPE_MAIN_VARIANT (t2), double_type_node))
379 return build_type_attribute_variant (double_type_node,
380 attributes);
381 if (same_type_p (TYPE_MAIN_VARIANT (t1), float_type_node)
382 || same_type_p (TYPE_MAIN_VARIANT (t2), float_type_node))
383 return build_type_attribute_variant (float_type_node,
384 attributes);
386 /* Two floating-point types whose TYPE_MAIN_VARIANTs are none of
387 the standard C++ floating-point types. Logic earlier in this
388 function has already eliminated the possibility that
389 TYPE_PRECISION (t2) != TYPE_PRECISION (t1), so there's no
390 compelling reason to choose one or the other. */
391 return build_type_attribute_variant (t1, attributes);
395 /* Subroutine of composite_pointer_type to implement the recursive
396 case. See that function for documentation fo the parameters. */
398 static tree
399 composite_pointer_type_r (tree t1, tree t2, const char* location)
401 tree pointee1;
402 tree pointee2;
403 tree result_type;
404 tree attributes;
406 /* Determine the types pointed to by T1 and T2. */
407 if (TREE_CODE (t1) == POINTER_TYPE)
409 pointee1 = TREE_TYPE (t1);
410 pointee2 = TREE_TYPE (t2);
412 else
414 pointee1 = TYPE_PTRMEM_POINTED_TO_TYPE (t1);
415 pointee2 = TYPE_PTRMEM_POINTED_TO_TYPE (t2);
418 /* [expr.rel]
420 Otherwise, the composite pointer type is a pointer type
421 similar (_conv.qual_) to the type of one of the operands,
422 with a cv-qualification signature (_conv.qual_) that is the
423 union of the cv-qualification signatures of the operand
424 types. */
425 if (same_type_ignoring_top_level_qualifiers_p (pointee1, pointee2))
426 result_type = pointee1;
427 else if ((TREE_CODE (pointee1) == POINTER_TYPE
428 && TREE_CODE (pointee2) == POINTER_TYPE)
429 || (TYPE_PTR_TO_MEMBER_P (pointee1)
430 && TYPE_PTR_TO_MEMBER_P (pointee2)))
431 result_type = composite_pointer_type_r (pointee1, pointee2, location);
432 else
434 pedwarn ("%s between distinct pointer types %qT and %qT "
435 "lacks a cast",
436 location, t1, t2);
437 result_type = void_type_node;
439 result_type = cp_build_qualified_type (result_type,
440 (cp_type_quals (pointee1)
441 | cp_type_quals (pointee2)));
442 /* If the original types were pointers to members, so is the
443 result. */
444 if (TYPE_PTR_TO_MEMBER_P (t1))
446 if (!same_type_p (TYPE_PTRMEM_CLASS_TYPE (t1),
447 TYPE_PTRMEM_CLASS_TYPE (t2)))
448 pedwarn ("%s between distinct pointer types %qT and %qT "
449 "lacks a cast",
450 location, t1, t2);
451 result_type = build_ptrmem_type (TYPE_PTRMEM_CLASS_TYPE (t1),
452 result_type);
454 else
455 result_type = build_pointer_type (result_type);
457 /* Merge the attributes. */
458 attributes = (*targetm.merge_type_attributes) (t1, t2);
459 return build_type_attribute_variant (result_type, attributes);
462 /* Return the composite pointer type (see [expr.rel]) for T1 and T2.
463 ARG1 and ARG2 are the values with those types. The LOCATION is a
464 string describing the current location, in case an error occurs.
466 This routine also implements the computation of a common type for
467 pointers-to-members as per [expr.eq]. */
469 tree
470 composite_pointer_type (tree t1, tree t2, tree arg1, tree arg2,
471 const char* location)
473 tree class1;
474 tree class2;
476 /* [expr.rel]
478 If one operand is a null pointer constant, the composite pointer
479 type is the type of the other operand. */
480 if (null_ptr_cst_p (arg1))
481 return t2;
482 if (null_ptr_cst_p (arg2))
483 return t1;
485 /* We have:
487 [expr.rel]
489 If one of the operands has type "pointer to cv1 void*", then
490 the other has type "pointer to cv2T", and the composite pointer
491 type is "pointer to cv12 void", where cv12 is the union of cv1
492 and cv2.
494 If either type is a pointer to void, make sure it is T1. */
495 if (TREE_CODE (t2) == POINTER_TYPE && VOID_TYPE_P (TREE_TYPE (t2)))
497 tree t;
498 t = t1;
499 t1 = t2;
500 t2 = t;
503 /* Now, if T1 is a pointer to void, merge the qualifiers. */
504 if (TREE_CODE (t1) == POINTER_TYPE && VOID_TYPE_P (TREE_TYPE (t1)))
506 tree attributes;
507 tree result_type;
509 if (pedantic && TYPE_PTRFN_P (t2))
510 pedwarn ("ISO C++ forbids %s between pointer of type %<void *%> "
511 "and pointer-to-function", location);
512 result_type
513 = cp_build_qualified_type (void_type_node,
514 (cp_type_quals (TREE_TYPE (t1))
515 | cp_type_quals (TREE_TYPE (t2))));
516 result_type = build_pointer_type (result_type);
517 /* Merge the attributes. */
518 attributes = (*targetm.merge_type_attributes) (t1, t2);
519 return build_type_attribute_variant (result_type, attributes);
522 /* [expr.eq] permits the application of a pointer conversion to
523 bring the pointers to a common type. */
524 if (TREE_CODE (t1) == POINTER_TYPE && TREE_CODE (t2) == POINTER_TYPE
525 && CLASS_TYPE_P (TREE_TYPE (t1))
526 && CLASS_TYPE_P (TREE_TYPE (t2))
527 && !same_type_ignoring_top_level_qualifiers_p (TREE_TYPE (t1),
528 TREE_TYPE (t2)))
530 class1 = TREE_TYPE (t1);
531 class2 = TREE_TYPE (t2);
533 if (DERIVED_FROM_P (class1, class2))
534 t2 = (build_pointer_type
535 (cp_build_qualified_type (class1, TYPE_QUALS (class2))));
536 else if (DERIVED_FROM_P (class2, class1))
537 t1 = (build_pointer_type
538 (cp_build_qualified_type (class2, TYPE_QUALS (class1))));
539 else
541 error ("%s between distinct pointer types %qT and %qT "
542 "lacks a cast", location, t1, t2);
543 return error_mark_node;
546 /* [expr.eq] permits the application of a pointer-to-member
547 conversion to change the class type of one of the types. */
548 else if (TYPE_PTR_TO_MEMBER_P (t1)
549 && !same_type_p (TYPE_PTRMEM_CLASS_TYPE (t1),
550 TYPE_PTRMEM_CLASS_TYPE (t2)))
552 class1 = TYPE_PTRMEM_CLASS_TYPE (t1);
553 class2 = TYPE_PTRMEM_CLASS_TYPE (t2);
555 if (DERIVED_FROM_P (class1, class2))
556 t1 = build_ptrmem_type (class2, TYPE_PTRMEM_POINTED_TO_TYPE (t1));
557 else if (DERIVED_FROM_P (class2, class1))
558 t2 = build_ptrmem_type (class1, TYPE_PTRMEM_POINTED_TO_TYPE (t2));
559 else
561 error ("%s between distinct pointer-to-member types %qT and %qT "
562 "lacks a cast", location, t1, t2);
563 return error_mark_node;
567 return composite_pointer_type_r (t1, t2, location);
570 /* Return the merged type of two types.
571 We assume that comptypes has already been done and returned 1;
572 if that isn't so, this may crash.
574 This just combines attributes and default arguments; any other
575 differences would cause the two types to compare unalike. */
577 tree
578 merge_types (tree t1, tree t2)
580 enum tree_code code1;
581 enum tree_code code2;
582 tree attributes;
584 /* Save time if the two types are the same. */
585 if (t1 == t2)
586 return t1;
587 if (original_type (t1) == original_type (t2))
588 return t1;
590 /* If one type is nonsense, use the other. */
591 if (t1 == error_mark_node)
592 return t2;
593 if (t2 == error_mark_node)
594 return t1;
596 /* Merge the attributes. */
597 attributes = (*targetm.merge_type_attributes) (t1, t2);
599 if (TYPE_PTRMEMFUNC_P (t1))
600 t1 = TYPE_PTRMEMFUNC_FN_TYPE (t1);
601 if (TYPE_PTRMEMFUNC_P (t2))
602 t2 = TYPE_PTRMEMFUNC_FN_TYPE (t2);
604 code1 = TREE_CODE (t1);
605 code2 = TREE_CODE (t2);
607 switch (code1)
609 case POINTER_TYPE:
610 case REFERENCE_TYPE:
611 /* For two pointers, do this recursively on the target type. */
613 tree target = merge_types (TREE_TYPE (t1), TREE_TYPE (t2));
614 int quals = cp_type_quals (t1);
616 if (code1 == POINTER_TYPE)
617 t1 = build_pointer_type (target);
618 else
619 t1 = build_reference_type (target);
620 t1 = build_type_attribute_variant (t1, attributes);
621 t1 = cp_build_qualified_type (t1, quals);
623 if (TREE_CODE (target) == METHOD_TYPE)
624 t1 = build_ptrmemfunc_type (t1);
626 return t1;
629 case OFFSET_TYPE:
631 int quals;
632 tree pointee;
633 quals = cp_type_quals (t1);
634 pointee = merge_types (TYPE_PTRMEM_POINTED_TO_TYPE (t1),
635 TYPE_PTRMEM_POINTED_TO_TYPE (t2));
636 t1 = build_ptrmem_type (TYPE_PTRMEM_CLASS_TYPE (t1),
637 pointee);
638 t1 = cp_build_qualified_type (t1, quals);
639 break;
642 case ARRAY_TYPE:
644 tree elt = merge_types (TREE_TYPE (t1), TREE_TYPE (t2));
645 /* Save space: see if the result is identical to one of the args. */
646 if (elt == TREE_TYPE (t1) && TYPE_DOMAIN (t1))
647 return build_type_attribute_variant (t1, attributes);
648 if (elt == TREE_TYPE (t2) && TYPE_DOMAIN (t2))
649 return build_type_attribute_variant (t2, attributes);
650 /* Merge the element types, and have a size if either arg has one. */
651 t1 = build_cplus_array_type
652 (elt, TYPE_DOMAIN (TYPE_DOMAIN (t1) ? t1 : t2));
653 break;
656 case FUNCTION_TYPE:
657 /* Function types: prefer the one that specified arg types.
658 If both do, merge the arg types. Also merge the return types. */
660 tree valtype = merge_types (TREE_TYPE (t1), TREE_TYPE (t2));
661 tree p1 = TYPE_ARG_TYPES (t1);
662 tree p2 = TYPE_ARG_TYPES (t2);
663 tree rval, raises;
665 /* Save space: see if the result is identical to one of the args. */
666 if (valtype == TREE_TYPE (t1) && ! p2)
667 return cp_build_type_attribute_variant (t1, attributes);
668 if (valtype == TREE_TYPE (t2) && ! p1)
669 return cp_build_type_attribute_variant (t2, attributes);
671 /* Simple way if one arg fails to specify argument types. */
672 if (p1 == NULL_TREE || TREE_VALUE (p1) == void_type_node)
674 rval = build_function_type (valtype, p2);
675 if ((raises = TYPE_RAISES_EXCEPTIONS (t2)))
676 rval = build_exception_variant (rval, raises);
677 return cp_build_type_attribute_variant (rval, attributes);
679 raises = TYPE_RAISES_EXCEPTIONS (t1);
680 if (p2 == NULL_TREE || TREE_VALUE (p2) == void_type_node)
682 rval = build_function_type (valtype, p1);
683 if (raises)
684 rval = build_exception_variant (rval, raises);
685 return cp_build_type_attribute_variant (rval, attributes);
688 rval = build_function_type (valtype, commonparms (p1, p2));
689 t1 = build_exception_variant (rval, raises);
690 break;
693 case METHOD_TYPE:
695 /* Get this value the long way, since TYPE_METHOD_BASETYPE
696 is just the main variant of this. */
697 tree basetype = TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (t2)));
698 tree raises = TYPE_RAISES_EXCEPTIONS (t1);
699 tree t3;
701 /* If this was a member function type, get back to the
702 original type of type member function (i.e., without
703 the class instance variable up front. */
704 t1 = build_function_type (TREE_TYPE (t1),
705 TREE_CHAIN (TYPE_ARG_TYPES (t1)));
706 t2 = build_function_type (TREE_TYPE (t2),
707 TREE_CHAIN (TYPE_ARG_TYPES (t2)));
708 t3 = merge_types (t1, t2);
709 t3 = build_method_type_directly (basetype, TREE_TYPE (t3),
710 TYPE_ARG_TYPES (t3));
711 t1 = build_exception_variant (t3, raises);
712 break;
715 case TYPENAME_TYPE:
716 /* There is no need to merge attributes into a TYPENAME_TYPE.
717 When the type is instantiated it will have whatever
718 attributes result from the instantiation. */
719 return t1;
721 default:;
723 return cp_build_type_attribute_variant (t1, attributes);
726 /* Return the common type of two types.
727 We assume that comptypes has already been done and returned 1;
728 if that isn't so, this may crash.
730 This is the type for the result of most arithmetic operations
731 if the operands have the given two types. */
733 tree
734 common_type (tree t1, tree t2)
736 enum tree_code code1;
737 enum tree_code code2;
739 /* If one type is nonsense, bail. */
740 if (t1 == error_mark_node || t2 == error_mark_node)
741 return error_mark_node;
743 code1 = TREE_CODE (t1);
744 code2 = TREE_CODE (t2);
746 if ((ARITHMETIC_TYPE_P (t1) || code1 == ENUMERAL_TYPE
747 || code1 == COMPLEX_TYPE)
748 && (ARITHMETIC_TYPE_P (t2) || code2 == ENUMERAL_TYPE
749 || code2 == COMPLEX_TYPE))
750 return type_after_usual_arithmetic_conversions (t1, t2);
752 else if ((TYPE_PTR_P (t1) && TYPE_PTR_P (t2))
753 || (TYPE_PTRMEM_P (t1) && TYPE_PTRMEM_P (t2))
754 || (TYPE_PTRMEMFUNC_P (t1) && TYPE_PTRMEMFUNC_P (t2)))
755 return composite_pointer_type (t1, t2, error_mark_node, error_mark_node,
756 "conversion");
757 else
758 gcc_unreachable ();
761 /* Compare two exception specifier types for exactness or subsetness, if
762 allowed. Returns false for mismatch, true for match (same, or
763 derived and !exact).
765 [except.spec] "If a class X ... objects of class X or any class publicly
766 and unambiguously derived from X. Similarly, if a pointer type Y * ...
767 exceptions of type Y * or that are pointers to any type publicly and
768 unambiguously derived from Y. Otherwise a function only allows exceptions
769 that have the same type ..."
770 This does not mention cv qualifiers and is different to what throw
771 [except.throw] and catch [except.catch] will do. They will ignore the
772 top level cv qualifiers, and allow qualifiers in the pointer to class
773 example.
775 We implement the letter of the standard. */
777 static bool
778 comp_except_types (tree a, tree b, bool exact)
780 if (same_type_p (a, b))
781 return true;
782 else if (!exact)
784 if (cp_type_quals (a) || cp_type_quals (b))
785 return false;
787 if (TREE_CODE (a) == POINTER_TYPE
788 && TREE_CODE (b) == POINTER_TYPE)
790 a = TREE_TYPE (a);
791 b = TREE_TYPE (b);
792 if (cp_type_quals (a) || cp_type_quals (b))
793 return false;
796 if (TREE_CODE (a) != RECORD_TYPE
797 || TREE_CODE (b) != RECORD_TYPE)
798 return false;
800 if (PUBLICLY_UNIQUELY_DERIVED_P (a, b))
801 return true;
803 return false;
806 /* Return true if TYPE1 and TYPE2 are equivalent exception specifiers.
807 If EXACT is false, T2 can be stricter than T1 (according to 15.4/7),
808 otherwise it must be exact. Exception lists are unordered, but
809 we've already filtered out duplicates. Most lists will be in order,
810 we should try to make use of that. */
812 bool
813 comp_except_specs (tree t1, tree t2, bool exact)
815 tree probe;
816 tree base;
817 int length = 0;
819 if (t1 == t2)
820 return true;
822 if (t1 == NULL_TREE) /* T1 is ... */
823 return t2 == NULL_TREE || !exact;
824 if (!TREE_VALUE (t1)) /* t1 is EMPTY */
825 return t2 != NULL_TREE && !TREE_VALUE (t2);
826 if (t2 == NULL_TREE) /* T2 is ... */
827 return false;
828 if (TREE_VALUE (t1) && !TREE_VALUE (t2)) /* T2 is EMPTY, T1 is not */
829 return !exact;
831 /* Neither set is ... or EMPTY, make sure each part of T2 is in T1.
832 Count how many we find, to determine exactness. For exact matching and
833 ordered T1, T2, this is an O(n) operation, otherwise its worst case is
834 O(nm). */
835 for (base = t1; t2 != NULL_TREE; t2 = TREE_CHAIN (t2))
837 for (probe = base; probe != NULL_TREE; probe = TREE_CHAIN (probe))
839 tree a = TREE_VALUE (probe);
840 tree b = TREE_VALUE (t2);
842 if (comp_except_types (a, b, exact))
844 if (probe == base && exact)
845 base = TREE_CHAIN (probe);
846 length++;
847 break;
850 if (probe == NULL_TREE)
851 return false;
853 return !exact || base == NULL_TREE || length == list_length (t1);
856 /* Compare the array types T1 and T2. ALLOW_REDECLARATION is true if
857 [] can match [size]. */
859 static bool
860 comp_array_types (tree t1, tree t2, bool allow_redeclaration)
862 tree d1;
863 tree d2;
864 tree max1, max2;
866 if (t1 == t2)
867 return true;
869 /* The type of the array elements must be the same. */
870 if (!same_type_p (TREE_TYPE (t1), TREE_TYPE (t2)))
871 return false;
873 d1 = TYPE_DOMAIN (t1);
874 d2 = TYPE_DOMAIN (t2);
876 if (d1 == d2)
877 return true;
879 /* If one of the arrays is dimensionless, and the other has a
880 dimension, they are of different types. However, it is valid to
881 write:
883 extern int a[];
884 int a[3];
886 by [basic.link]:
888 declarations for an array object can specify
889 array types that differ by the presence or absence of a major
890 array bound (_dcl.array_). */
891 if (!d1 || !d2)
892 return allow_redeclaration;
894 /* Check that the dimensions are the same. */
896 if (!cp_tree_equal (TYPE_MIN_VALUE (d1), TYPE_MIN_VALUE (d2)))
897 return false;
898 max1 = TYPE_MAX_VALUE (d1);
899 max2 = TYPE_MAX_VALUE (d2);
900 if (processing_template_decl && !abi_version_at_least (2)
901 && !value_dependent_expression_p (max1)
902 && !value_dependent_expression_p (max2))
904 /* With abi-1 we do not fold non-dependent array bounds, (and
905 consequently mangle them incorrectly). We must therefore
906 fold them here, to verify the domains have the same
907 value. */
908 max1 = fold (max1);
909 max2 = fold (max2);
912 if (!cp_tree_equal (max1, max2))
913 return false;
915 return true;
918 /* Return true if T1 and T2 are related as allowed by STRICT. STRICT
919 is a bitwise-or of the COMPARE_* flags. */
921 bool
922 comptypes (tree t1, tree t2, int strict)
924 int retval;
926 if (t1 == t2)
927 return true;
929 /* Suppress errors caused by previously reported errors. */
930 if (t1 == error_mark_node || t2 == error_mark_node)
931 return false;
933 gcc_assert (TYPE_P (t1) && TYPE_P (t2));
935 /* TYPENAME_TYPEs should be resolved if the qualifying scope is the
936 current instantiation. */
937 if (TREE_CODE (t1) == TYPENAME_TYPE)
939 tree resolved = resolve_typename_type (t1, /*only_current_p=*/true);
941 if (resolved != error_mark_node)
942 t1 = resolved;
945 if (TREE_CODE (t2) == TYPENAME_TYPE)
947 tree resolved = resolve_typename_type (t2, /*only_current_p=*/true);
949 if (resolved != error_mark_node)
950 t2 = resolved;
953 /* If either type is the internal version of sizetype, use the
954 language version. */
955 if (TREE_CODE (t1) == INTEGER_TYPE && TYPE_IS_SIZETYPE (t1)
956 && TYPE_ORIG_SIZE_TYPE (t1))
957 t1 = TYPE_ORIG_SIZE_TYPE (t1);
959 if (TREE_CODE (t2) == INTEGER_TYPE && TYPE_IS_SIZETYPE (t2)
960 && TYPE_ORIG_SIZE_TYPE (t2))
961 t2 = TYPE_ORIG_SIZE_TYPE (t2);
963 if (TYPE_PTRMEMFUNC_P (t1))
964 t1 = TYPE_PTRMEMFUNC_FN_TYPE (t1);
965 if (TYPE_PTRMEMFUNC_P (t2))
966 t2 = TYPE_PTRMEMFUNC_FN_TYPE (t2);
968 /* Different classes of types can't be compatible. */
969 if (TREE_CODE (t1) != TREE_CODE (t2))
970 return false;
972 /* Qualifiers must match. For array types, we will check when we
973 recur on the array element types. */
974 if (TREE_CODE (t1) != ARRAY_TYPE
975 && TYPE_QUALS (t1) != TYPE_QUALS (t2))
976 return false;
977 if (TYPE_FOR_JAVA (t1) != TYPE_FOR_JAVA (t2))
978 return false;
980 /* Allow for two different type nodes which have essentially the same
981 definition. Note that we already checked for equality of the type
982 qualifiers (just above). */
984 if (TREE_CODE (t1) != ARRAY_TYPE
985 && TYPE_MAIN_VARIANT (t1) == TYPE_MAIN_VARIANT (t2))
986 return true;
988 if (!(*targetm.comp_type_attributes) (t1, t2))
989 return false;
991 switch (TREE_CODE (t1))
993 case TEMPLATE_TEMPLATE_PARM:
994 case BOUND_TEMPLATE_TEMPLATE_PARM:
995 if (TEMPLATE_TYPE_IDX (t1) != TEMPLATE_TYPE_IDX (t2)
996 || TEMPLATE_TYPE_LEVEL (t1) != TEMPLATE_TYPE_LEVEL (t2))
997 return false;
998 if (!comp_template_parms
999 (DECL_TEMPLATE_PARMS (TEMPLATE_TEMPLATE_PARM_TEMPLATE_DECL (t1)),
1000 DECL_TEMPLATE_PARMS (TEMPLATE_TEMPLATE_PARM_TEMPLATE_DECL (t2))))
1001 return false;
1002 if (TREE_CODE (t1) == TEMPLATE_TEMPLATE_PARM)
1003 return true;
1004 /* Don't check inheritance. */
1005 strict = COMPARE_STRICT;
1006 /* Fall through. */
1008 case RECORD_TYPE:
1009 case UNION_TYPE:
1010 if (TYPE_TEMPLATE_INFO (t1) && TYPE_TEMPLATE_INFO (t2)
1011 && (TYPE_TI_TEMPLATE (t1) == TYPE_TI_TEMPLATE (t2)
1012 || TREE_CODE (t1) == BOUND_TEMPLATE_TEMPLATE_PARM)
1013 && comp_template_args (TYPE_TI_ARGS (t1), TYPE_TI_ARGS (t2)))
1014 return true;
1016 if ((strict & COMPARE_BASE) && DERIVED_FROM_P (t1, t2))
1017 return true;
1018 else if ((strict & COMPARE_DERIVED) && DERIVED_FROM_P (t2, t1))
1019 return true;
1021 /* We may be dealing with Objective-C instances... */
1022 if (TREE_CODE (t1) == RECORD_TYPE
1023 && ((retval = objc_comptypes (t1, t2, 0)) >= 0))
1024 return retval;
1025 /* ...but fall through if we are not. */
1027 return false;
1029 case OFFSET_TYPE:
1030 if (!comptypes (TYPE_OFFSET_BASETYPE (t1), TYPE_OFFSET_BASETYPE (t2),
1031 strict & ~COMPARE_REDECLARATION))
1032 return false;
1033 return same_type_p (TREE_TYPE (t1), TREE_TYPE (t2));
1035 case POINTER_TYPE:
1036 case REFERENCE_TYPE:
1037 return TYPE_MODE (t1) == TYPE_MODE (t2)
1038 && TYPE_REF_CAN_ALIAS_ALL (t1) == TYPE_REF_CAN_ALIAS_ALL (t2)
1039 && same_type_p (TREE_TYPE (t1), TREE_TYPE (t2));
1041 case METHOD_TYPE:
1042 case FUNCTION_TYPE:
1043 if (!same_type_p (TREE_TYPE (t1), TREE_TYPE (t2)))
1044 return false;
1045 return compparms (TYPE_ARG_TYPES (t1), TYPE_ARG_TYPES (t2));
1047 case ARRAY_TYPE:
1048 /* Target types must match incl. qualifiers. */
1049 return comp_array_types (t1, t2, !!(strict & COMPARE_REDECLARATION));
1051 case TEMPLATE_TYPE_PARM:
1052 return (TEMPLATE_TYPE_IDX (t1) == TEMPLATE_TYPE_IDX (t2)
1053 && TEMPLATE_TYPE_LEVEL (t1) == TEMPLATE_TYPE_LEVEL (t2));
1055 case TYPENAME_TYPE:
1056 if (!cp_tree_equal (TYPENAME_TYPE_FULLNAME (t1),
1057 TYPENAME_TYPE_FULLNAME (t2)))
1058 return false;
1059 return same_type_p (TYPE_CONTEXT (t1), TYPE_CONTEXT (t2));
1061 case UNBOUND_CLASS_TEMPLATE:
1062 if (!cp_tree_equal (TYPE_IDENTIFIER (t1), TYPE_IDENTIFIER (t2)))
1063 return false;
1064 return same_type_p (TYPE_CONTEXT (t1), TYPE_CONTEXT (t2));
1066 case COMPLEX_TYPE:
1067 return same_type_p (TREE_TYPE (t1), TREE_TYPE (t2));
1069 case VECTOR_TYPE:
1070 return TYPE_VECTOR_SUBPARTS (t1) == TYPE_VECTOR_SUBPARTS (t2)
1071 && same_type_p (TREE_TYPE (t1), TREE_TYPE (t2));
1072 break;
1074 default:
1075 break;
1077 return false;
1080 /* Returns 1 if TYPE1 is at least as qualified as TYPE2. */
1082 bool
1083 at_least_as_qualified_p (tree type1, tree type2)
1085 int q1 = cp_type_quals (type1);
1086 int q2 = cp_type_quals (type2);
1088 /* All qualifiers for TYPE2 must also appear in TYPE1. */
1089 return (q1 & q2) == q2;
1092 /* Returns 1 if TYPE1 is more cv-qualified than TYPE2, -1 if TYPE2 is
1093 more cv-qualified that TYPE1, and 0 otherwise. */
1096 comp_cv_qualification (tree type1, tree type2)
1098 int q1 = cp_type_quals (type1);
1099 int q2 = cp_type_quals (type2);
1101 if (q1 == q2)
1102 return 0;
1104 if ((q1 & q2) == q2)
1105 return 1;
1106 else if ((q1 & q2) == q1)
1107 return -1;
1109 return 0;
1112 /* Returns 1 if the cv-qualification signature of TYPE1 is a proper
1113 subset of the cv-qualification signature of TYPE2, and the types
1114 are similar. Returns -1 if the other way 'round, and 0 otherwise. */
1117 comp_cv_qual_signature (tree type1, tree type2)
1119 if (comp_ptr_ttypes_real (type2, type1, -1))
1120 return 1;
1121 else if (comp_ptr_ttypes_real (type1, type2, -1))
1122 return -1;
1123 else
1124 return 0;
1127 /* If two types share a common base type, return that basetype.
1128 If there is not a unique most-derived base type, this function
1129 returns ERROR_MARK_NODE. */
1131 static tree
1132 common_base_type (tree tt1, tree tt2)
1134 tree best = NULL_TREE;
1135 int i;
1137 /* If one is a baseclass of another, that's good enough. */
1138 if (UNIQUELY_DERIVED_FROM_P (tt1, tt2))
1139 return tt1;
1140 if (UNIQUELY_DERIVED_FROM_P (tt2, tt1))
1141 return tt2;
1143 /* Otherwise, try to find a unique baseclass of TT1
1144 that is shared by TT2, and follow that down. */
1145 for (i = BINFO_N_BASE_BINFOS (TYPE_BINFO (tt1))-1; i >= 0; i--)
1147 tree basetype = BINFO_TYPE (BINFO_BASE_BINFO (TYPE_BINFO (tt1), i));
1148 tree trial = common_base_type (basetype, tt2);
1150 if (trial)
1152 if (trial == error_mark_node)
1153 return trial;
1154 if (best == NULL_TREE)
1155 best = trial;
1156 else if (best != trial)
1157 return error_mark_node;
1161 /* Same for TT2. */
1162 for (i = BINFO_N_BASE_BINFOS (TYPE_BINFO (tt2))-1; i >= 0; i--)
1164 tree basetype = BINFO_TYPE (BINFO_BASE_BINFO (TYPE_BINFO (tt2), i));
1165 tree trial = common_base_type (tt1, basetype);
1167 if (trial)
1169 if (trial == error_mark_node)
1170 return trial;
1171 if (best == NULL_TREE)
1172 best = trial;
1173 else if (best != trial)
1174 return error_mark_node;
1177 return best;
1180 /* Subroutines of `comptypes'. */
1182 /* Return true if two parameter type lists PARMS1 and PARMS2 are
1183 equivalent in the sense that functions with those parameter types
1184 can have equivalent types. The two lists must be equivalent,
1185 element by element. */
1187 bool
1188 compparms (tree parms1, tree parms2)
1190 tree t1, t2;
1192 /* An unspecified parmlist matches any specified parmlist
1193 whose argument types don't need default promotions. */
1195 for (t1 = parms1, t2 = parms2;
1196 t1 || t2;
1197 t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2))
1199 /* If one parmlist is shorter than the other,
1200 they fail to match. */
1201 if (!t1 || !t2)
1202 return false;
1203 if (!same_type_p (TREE_VALUE (t1), TREE_VALUE (t2)))
1204 return false;
1206 return true;
1210 /* Process a sizeof or alignof expression where the operand is a
1211 type. */
1213 tree
1214 cxx_sizeof_or_alignof_type (tree type, enum tree_code op, bool complain)
1216 enum tree_code type_code;
1217 tree value;
1218 const char *op_name;
1220 gcc_assert (op == SIZEOF_EXPR || op == ALIGNOF_EXPR);
1221 if (type == error_mark_node)
1222 return error_mark_node;
1224 if (processing_template_decl)
1226 value = build_min (op, size_type_node, type);
1227 TREE_READONLY (value) = 1;
1228 return value;
1231 op_name = operator_name_info[(int) op].name;
1233 type = non_reference (type);
1234 type_code = TREE_CODE (type);
1236 if (type_code == METHOD_TYPE)
1238 if (complain && (pedantic || warn_pointer_arith))
1239 pedwarn ("invalid application of %qs to a member function", op_name);
1240 value = size_one_node;
1242 else
1243 value = c_sizeof_or_alignof_type (complete_type (type), op, complain);
1245 return value;
1248 /* Process a sizeof or alignof expression where the operand is an
1249 expression. */
1251 tree
1252 cxx_sizeof_or_alignof_expr (tree e, enum tree_code op)
1254 const char *op_name = operator_name_info[(int) op].name;
1256 if (e == error_mark_node)
1257 return error_mark_node;
1259 if (processing_template_decl)
1261 e = build_min (op, size_type_node, e);
1262 TREE_SIDE_EFFECTS (e) = 0;
1263 TREE_READONLY (e) = 1;
1265 return e;
1268 if (TREE_CODE (e) == COMPONENT_REF
1269 && TREE_CODE (TREE_OPERAND (e, 1)) == FIELD_DECL
1270 && DECL_C_BIT_FIELD (TREE_OPERAND (e, 1)))
1272 error ("invalid application of %qs to a bit-field", op_name);
1273 e = char_type_node;
1275 else if (is_overloaded_fn (e))
1277 pedwarn ("ISO C++ forbids applying %qs to an expression of "
1278 "function type", op_name);
1279 e = char_type_node;
1281 else if (type_unknown_p (e))
1283 cxx_incomplete_type_error (e, TREE_TYPE (e));
1284 e = char_type_node;
1286 else
1287 e = TREE_TYPE (e);
1289 return cxx_sizeof_or_alignof_type (e, op, true);
1293 /* EXPR is being used in a context that is not a function call.
1294 Enforce:
1296 [expr.ref]
1298 The expression can be used only as the left-hand operand of a
1299 member function call.
1301 [expr.mptr.operator]
1303 If the result of .* or ->* is a function, then that result can be
1304 used only as the operand for the function call operator ().
1306 by issuing an error message if appropriate. Returns true iff EXPR
1307 violates these rules. */
1309 bool
1310 invalid_nonstatic_memfn_p (tree expr)
1312 if (TREE_CODE (TREE_TYPE (expr)) == METHOD_TYPE)
1314 error ("invalid use of non-static member function");
1315 return true;
1317 return false;
1320 /* Perform the conversions in [expr] that apply when an lvalue appears
1321 in an rvalue context: the lvalue-to-rvalue, array-to-pointer, and
1322 function-to-pointer conversions.
1324 In addition manifest constants are replaced by their values. */
1326 tree
1327 decay_conversion (tree exp)
1329 tree type;
1330 enum tree_code code;
1332 type = TREE_TYPE (exp);
1333 code = TREE_CODE (type);
1335 if (type == error_mark_node)
1336 return error_mark_node;
1338 if (type_unknown_p (exp))
1340 cxx_incomplete_type_error (exp, TREE_TYPE (exp));
1341 return error_mark_node;
1344 exp = integral_constant_value (exp);
1346 /* build_c_cast puts on a NOP_EXPR to make the result not an lvalue.
1347 Leave such NOP_EXPRs, since RHS is being used in non-lvalue context. */
1349 if (code == VOID_TYPE)
1351 error ("void value not ignored as it ought to be");
1352 return error_mark_node;
1354 if (invalid_nonstatic_memfn_p (exp))
1355 return error_mark_node;
1356 if (code == FUNCTION_TYPE || is_overloaded_fn (exp))
1357 return build_unary_op (ADDR_EXPR, exp, 0);
1358 if (code == ARRAY_TYPE)
1360 tree adr;
1361 tree ptrtype;
1363 if (TREE_CODE (exp) == INDIRECT_REF)
1364 return build_nop (build_pointer_type (TREE_TYPE (type)),
1365 TREE_OPERAND (exp, 0));
1367 if (TREE_CODE (exp) == COMPOUND_EXPR)
1369 tree op1 = decay_conversion (TREE_OPERAND (exp, 1));
1370 return build2 (COMPOUND_EXPR, TREE_TYPE (op1),
1371 TREE_OPERAND (exp, 0), op1);
1374 if (!lvalue_p (exp)
1375 && ! (TREE_CODE (exp) == CONSTRUCTOR && TREE_STATIC (exp)))
1377 error ("invalid use of non-lvalue array");
1378 return error_mark_node;
1381 ptrtype = build_pointer_type (TREE_TYPE (type));
1383 if (TREE_CODE (exp) == VAR_DECL)
1385 if (!cxx_mark_addressable (exp))
1386 return error_mark_node;
1387 adr = build_nop (ptrtype, build_address (exp));
1388 return adr;
1390 /* This way is better for a COMPONENT_REF since it can
1391 simplify the offset for a component. */
1392 adr = build_unary_op (ADDR_EXPR, exp, 1);
1393 return cp_convert (ptrtype, adr);
1396 /* [basic.lval]: Class rvalues can have cv-qualified types; non-class
1397 rvalues always have cv-unqualified types. */
1398 if (! CLASS_TYPE_P (type))
1399 exp = cp_convert (TYPE_MAIN_VARIANT (type), exp);
1401 return exp;
1404 tree
1405 default_conversion (tree exp)
1407 exp = decay_conversion (exp);
1409 if (INTEGRAL_OR_ENUMERATION_TYPE_P (TREE_TYPE (exp)))
1410 exp = perform_integral_promotions (exp);
1412 return exp;
1415 /* EXPR is an expression with an integral or enumeration type.
1416 Perform the integral promotions in [conv.prom], and return the
1417 converted value. */
1419 tree
1420 perform_integral_promotions (tree expr)
1422 tree type;
1423 tree promoted_type;
1425 type = TREE_TYPE (expr);
1426 gcc_assert (INTEGRAL_OR_ENUMERATION_TYPE_P (type));
1427 promoted_type = type_promotes_to (type);
1428 if (type != promoted_type)
1429 expr = cp_convert (promoted_type, expr);
1430 return expr;
1433 /* Take the address of an inline function without setting TREE_ADDRESSABLE
1434 or TREE_USED. */
1436 tree
1437 inline_conversion (tree exp)
1439 if (TREE_CODE (exp) == FUNCTION_DECL)
1440 exp = build1 (ADDR_EXPR, build_pointer_type (TREE_TYPE (exp)), exp);
1442 return exp;
1445 /* Returns nonzero iff exp is a STRING_CST or the result of applying
1446 decay_conversion to one. */
1449 string_conv_p (tree totype, tree exp, int warn)
1451 tree t;
1453 if (! flag_const_strings || TREE_CODE (totype) != POINTER_TYPE)
1454 return 0;
1456 t = TREE_TYPE (totype);
1457 if (!same_type_p (t, char_type_node)
1458 && !same_type_p (t, wchar_type_node))
1459 return 0;
1461 if (TREE_CODE (exp) == STRING_CST)
1463 /* Make sure that we don't try to convert between char and wchar_t. */
1464 if (!same_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (exp))), t))
1465 return 0;
1467 else
1469 /* Is this a string constant which has decayed to 'const char *'? */
1470 t = build_pointer_type (build_qualified_type (t, TYPE_QUAL_CONST));
1471 if (!same_type_p (TREE_TYPE (exp), t))
1472 return 0;
1473 STRIP_NOPS (exp);
1474 if (TREE_CODE (exp) != ADDR_EXPR
1475 || TREE_CODE (TREE_OPERAND (exp, 0)) != STRING_CST)
1476 return 0;
1479 /* This warning is not very useful, as it complains about printf. */
1480 if (warn && warn_write_strings)
1481 warning ("deprecated conversion from string constant to %qT'", totype);
1483 return 1;
1486 /* Given a COND_EXPR, MIN_EXPR, or MAX_EXPR in T, return it in a form that we
1487 can, for example, use as an lvalue. This code used to be in
1488 unary_complex_lvalue, but we needed it to deal with `a = (d == c) ? b : c'
1489 expressions, where we're dealing with aggregates. But now it's again only
1490 called from unary_complex_lvalue. The case (in particular) that led to
1491 this was with CODE == ADDR_EXPR, since it's not an lvalue when we'd
1492 get it there. */
1494 static tree
1495 rationalize_conditional_expr (enum tree_code code, tree t)
1497 /* For MIN_EXPR or MAX_EXPR, fold-const.c has arranged things so that
1498 the first operand is always the one to be used if both operands
1499 are equal, so we know what conditional expression this used to be. */
1500 if (TREE_CODE (t) == MIN_EXPR || TREE_CODE (t) == MAX_EXPR)
1502 /* The following code is incorrect if either operand side-effects. */
1503 gcc_assert (!TREE_SIDE_EFFECTS (TREE_OPERAND (t, 0))
1504 && !TREE_SIDE_EFFECTS (TREE_OPERAND (t, 1)));
1505 return
1506 build_conditional_expr (build_x_binary_op ((TREE_CODE (t) == MIN_EXPR
1507 ? LE_EXPR : GE_EXPR),
1508 TREE_OPERAND (t, 0),
1509 TREE_OPERAND (t, 1),
1510 /*overloaded_p=*/NULL),
1511 build_unary_op (code, TREE_OPERAND (t, 0), 0),
1512 build_unary_op (code, TREE_OPERAND (t, 1), 0));
1515 return
1516 build_conditional_expr (TREE_OPERAND (t, 0),
1517 build_unary_op (code, TREE_OPERAND (t, 1), 0),
1518 build_unary_op (code, TREE_OPERAND (t, 2), 0));
1521 /* Given the TYPE of an anonymous union field inside T, return the
1522 FIELD_DECL for the field. If not found return NULL_TREE. Because
1523 anonymous unions can nest, we must also search all anonymous unions
1524 that are directly reachable. */
1526 tree
1527 lookup_anon_field (tree t, tree type)
1529 tree field;
1531 for (field = TYPE_FIELDS (t); field; field = TREE_CHAIN (field))
1533 if (TREE_STATIC (field))
1534 continue;
1535 if (TREE_CODE (field) != FIELD_DECL || DECL_ARTIFICIAL (field))
1536 continue;
1538 /* If we find it directly, return the field. */
1539 if (DECL_NAME (field) == NULL_TREE
1540 && type == TYPE_MAIN_VARIANT (TREE_TYPE (field)))
1542 return field;
1545 /* Otherwise, it could be nested, search harder. */
1546 if (DECL_NAME (field) == NULL_TREE
1547 && ANON_AGGR_TYPE_P (TREE_TYPE (field)))
1549 tree subfield = lookup_anon_field (TREE_TYPE (field), type);
1550 if (subfield)
1551 return subfield;
1554 return NULL_TREE;
1557 /* Build an expression representing OBJECT.MEMBER. OBJECT is an
1558 expression; MEMBER is a DECL or baselink. If ACCESS_PATH is
1559 non-NULL, it indicates the path to the base used to name MEMBER.
1560 If PRESERVE_REFERENCE is true, the expression returned will have
1561 REFERENCE_TYPE if the MEMBER does. Otherwise, the expression
1562 returned will have the type referred to by the reference.
1564 This function does not perform access control; that is either done
1565 earlier by the parser when the name of MEMBER is resolved to MEMBER
1566 itself, or later when overload resolution selects one of the
1567 functions indicated by MEMBER. */
1569 tree
1570 build_class_member_access_expr (tree object, tree member,
1571 tree access_path, bool preserve_reference)
1573 tree object_type;
1574 tree member_scope;
1575 tree result = NULL_TREE;
1577 if (object == error_mark_node || member == error_mark_node)
1578 return error_mark_node;
1580 if (TREE_CODE (member) == PSEUDO_DTOR_EXPR)
1581 return member;
1583 gcc_assert (DECL_P (member) || BASELINK_P (member));
1585 /* [expr.ref]
1587 The type of the first expression shall be "class object" (of a
1588 complete type). */
1589 object_type = TREE_TYPE (object);
1590 if (!currently_open_class (object_type)
1591 && !complete_type_or_else (object_type, object))
1592 return error_mark_node;
1593 if (!CLASS_TYPE_P (object_type))
1595 error ("request for member %qD in %qE, which is of non-class type %qT",
1596 member, object, object_type);
1597 return error_mark_node;
1600 /* The standard does not seem to actually say that MEMBER must be a
1601 member of OBJECT_TYPE. However, that is clearly what is
1602 intended. */
1603 if (DECL_P (member))
1605 member_scope = DECL_CLASS_CONTEXT (member);
1606 mark_used (member);
1607 if (TREE_DEPRECATED (member))
1608 warn_deprecated_use (member);
1610 else
1611 member_scope = BINFO_TYPE (BASELINK_BINFO (member));
1612 /* If MEMBER is from an anonymous aggregate, MEMBER_SCOPE will
1613 presently be the anonymous union. Go outwards until we find a
1614 type related to OBJECT_TYPE. */
1615 while (ANON_AGGR_TYPE_P (member_scope)
1616 && !same_type_ignoring_top_level_qualifiers_p (member_scope,
1617 object_type))
1618 member_scope = TYPE_CONTEXT (member_scope);
1619 if (!member_scope || !DERIVED_FROM_P (member_scope, object_type))
1621 if (TREE_CODE (member) == FIELD_DECL)
1622 error ("invalid use of nonstatic data member %qE", member);
1623 else
1624 error ("%qD is not a member of %qT", member, object_type);
1625 return error_mark_node;
1628 /* Transform `(a, b).x' into `(*(a, &b)).x', `(a ? b : c).x' into
1629 `(*(a ? &b : &c)).x', and so on. A COND_EXPR is only an lvalue
1630 in the frontend; only _DECLs and _REFs are lvalues in the backend. */
1632 tree temp = unary_complex_lvalue (ADDR_EXPR, object);
1633 if (temp)
1634 object = build_indirect_ref (temp, NULL);
1637 /* In [expr.ref], there is an explicit list of the valid choices for
1638 MEMBER. We check for each of those cases here. */
1639 if (TREE_CODE (member) == VAR_DECL)
1641 /* A static data member. */
1642 result = member;
1643 /* If OBJECT has side-effects, they are supposed to occur. */
1644 if (TREE_SIDE_EFFECTS (object))
1645 result = build2 (COMPOUND_EXPR, TREE_TYPE (result), object, result);
1647 else if (TREE_CODE (member) == FIELD_DECL)
1649 /* A non-static data member. */
1650 bool null_object_p;
1651 int type_quals;
1652 tree member_type;
1654 null_object_p = (TREE_CODE (object) == INDIRECT_REF
1655 && integer_zerop (TREE_OPERAND (object, 0)));
1657 /* Convert OBJECT to the type of MEMBER. */
1658 if (!same_type_p (TYPE_MAIN_VARIANT (object_type),
1659 TYPE_MAIN_VARIANT (member_scope)))
1661 tree binfo;
1662 base_kind kind;
1664 binfo = lookup_base (access_path ? access_path : object_type,
1665 member_scope, ba_unique, &kind);
1666 if (binfo == error_mark_node)
1667 return error_mark_node;
1669 /* It is invalid to try to get to a virtual base of a
1670 NULL object. The most common cause is invalid use of
1671 offsetof macro. */
1672 if (null_object_p && kind == bk_via_virtual)
1674 error ("invalid access to non-static data member %qD of "
1675 "NULL object",
1676 member);
1677 error ("(perhaps the %<offsetof%> macro was used incorrectly)");
1678 return error_mark_node;
1681 /* Convert to the base. */
1682 object = build_base_path (PLUS_EXPR, object, binfo,
1683 /*nonnull=*/1);
1684 /* If we found the base successfully then we should be able
1685 to convert to it successfully. */
1686 gcc_assert (object != error_mark_node);
1689 /* Complain about other invalid uses of offsetof, even though they will
1690 give the right answer. Note that we complain whether or not they
1691 actually used the offsetof macro, since there's no way to know at this
1692 point. So we just give a warning, instead of a pedwarn. */
1693 /* Do not produce this warning for base class field references, because
1694 we know for a fact that didn't come from offsetof. This does occur
1695 in various testsuite cases where a null object is passed where a
1696 vtable access is required. */
1697 if (null_object_p && warn_invalid_offsetof
1698 && CLASSTYPE_NON_POD_P (object_type)
1699 && !DECL_FIELD_IS_BASE (member)
1700 && !skip_evaluation)
1702 warning ("invalid access to non-static data member %qD of NULL object",
1703 member);
1704 warning ("(perhaps the %<offsetof%> macro was used incorrectly)");
1707 /* If MEMBER is from an anonymous aggregate, we have converted
1708 OBJECT so that it refers to the class containing the
1709 anonymous union. Generate a reference to the anonymous union
1710 itself, and recur to find MEMBER. */
1711 if (ANON_AGGR_TYPE_P (DECL_CONTEXT (member))
1712 /* When this code is called from build_field_call, the
1713 object already has the type of the anonymous union.
1714 That is because the COMPONENT_REF was already
1715 constructed, and was then disassembled before calling
1716 build_field_call. After the function-call code is
1717 cleaned up, this waste can be eliminated. */
1718 && (!same_type_ignoring_top_level_qualifiers_p
1719 (TREE_TYPE (object), DECL_CONTEXT (member))))
1721 tree anonymous_union;
1723 anonymous_union = lookup_anon_field (TREE_TYPE (object),
1724 DECL_CONTEXT (member));
1725 object = build_class_member_access_expr (object,
1726 anonymous_union,
1727 /*access_path=*/NULL_TREE,
1728 preserve_reference);
1731 /* Compute the type of the field, as described in [expr.ref]. */
1732 type_quals = TYPE_UNQUALIFIED;
1733 member_type = TREE_TYPE (member);
1734 if (TREE_CODE (member_type) != REFERENCE_TYPE)
1736 type_quals = (cp_type_quals (member_type)
1737 | cp_type_quals (object_type));
1739 /* A field is const (volatile) if the enclosing object, or the
1740 field itself, is const (volatile). But, a mutable field is
1741 not const, even within a const object. */
1742 if (DECL_MUTABLE_P (member))
1743 type_quals &= ~TYPE_QUAL_CONST;
1744 member_type = cp_build_qualified_type (member_type, type_quals);
1747 result = build3 (COMPONENT_REF, member_type, object, member,
1748 NULL_TREE);
1749 result = fold_if_not_in_template (result);
1751 /* Mark the expression const or volatile, as appropriate. Even
1752 though we've dealt with the type above, we still have to mark the
1753 expression itself. */
1754 if (type_quals & TYPE_QUAL_CONST)
1755 TREE_READONLY (result) = 1;
1756 else if (type_quals & TYPE_QUAL_VOLATILE)
1757 TREE_THIS_VOLATILE (result) = 1;
1759 else if (BASELINK_P (member))
1761 /* The member is a (possibly overloaded) member function. */
1762 tree functions;
1763 tree type;
1765 /* If the MEMBER is exactly one static member function, then we
1766 know the type of the expression. Otherwise, we must wait
1767 until overload resolution has been performed. */
1768 functions = BASELINK_FUNCTIONS (member);
1769 if (TREE_CODE (functions) == FUNCTION_DECL
1770 && DECL_STATIC_FUNCTION_P (functions))
1771 type = TREE_TYPE (functions);
1772 else
1773 type = unknown_type_node;
1774 /* Note that we do not convert OBJECT to the BASELINK_BINFO
1775 base. That will happen when the function is called. */
1776 result = build3 (COMPONENT_REF, type, object, member, NULL_TREE);
1778 else if (TREE_CODE (member) == CONST_DECL)
1780 /* The member is an enumerator. */
1781 result = member;
1782 /* If OBJECT has side-effects, they are supposed to occur. */
1783 if (TREE_SIDE_EFFECTS (object))
1784 result = build2 (COMPOUND_EXPR, TREE_TYPE (result),
1785 object, result);
1787 else
1789 error ("invalid use of %qD", member);
1790 return error_mark_node;
1793 if (!preserve_reference)
1794 /* [expr.ref]
1796 If E2 is declared to have type "reference to T", then ... the
1797 type of E1.E2 is T. */
1798 result = convert_from_reference (result);
1800 return result;
1803 /* Return the destructor denoted by OBJECT.SCOPE::~DTOR_NAME, or, if
1804 SCOPE is NULL, by OBJECT.~DTOR_NAME. */
1806 static tree
1807 lookup_destructor (tree object, tree scope, tree dtor_name)
1809 tree object_type = TREE_TYPE (object);
1810 tree dtor_type = TREE_OPERAND (dtor_name, 0);
1811 tree expr;
1813 if (scope && !check_dtor_name (scope, dtor_name))
1815 error ("qualified type %qT does not match destructor name ~%qT",
1816 scope, dtor_type);
1817 return error_mark_node;
1819 if (!DERIVED_FROM_P (dtor_type, TYPE_MAIN_VARIANT (object_type)))
1821 error ("the type being destroyed is %qT, but the destructor refers to %qT",
1822 TYPE_MAIN_VARIANT (object_type), dtor_type);
1823 return error_mark_node;
1825 if (!TYPE_HAS_DESTRUCTOR (dtor_type))
1826 return build3 (PSEUDO_DTOR_EXPR, void_type_node, object, scope,
1827 dtor_type);
1828 expr = lookup_member (dtor_type, complete_dtor_identifier,
1829 /*protect=*/1, /*want_type=*/false);
1830 expr = (adjust_result_of_qualified_name_lookup
1831 (expr, dtor_type, object_type));
1832 return expr;
1835 /* This function is called by the parser to process a class member
1836 access expression of the form OBJECT.NAME. NAME is a node used by
1837 the parser to represent a name; it is not yet a DECL. It may,
1838 however, be a BASELINK where the BASELINK_FUNCTIONS is a
1839 TEMPLATE_ID_EXPR. Templates must be looked up by the parser, and
1840 there is no reason to do the lookup twice, so the parser keeps the
1841 BASELINK. */
1843 tree
1844 finish_class_member_access_expr (tree object, tree name)
1846 tree expr;
1847 tree object_type;
1848 tree member;
1849 tree access_path = NULL_TREE;
1850 tree orig_object = object;
1851 tree orig_name = name;
1853 if (object == error_mark_node || name == error_mark_node)
1854 return error_mark_node;
1856 object_type = TREE_TYPE (object);
1858 if (processing_template_decl)
1860 if (/* If OBJECT_TYPE is dependent, so is OBJECT.NAME. */
1861 dependent_type_p (object_type)
1862 /* If NAME is just an IDENTIFIER_NODE, then the expression
1863 is dependent. */
1864 || TREE_CODE (object) == IDENTIFIER_NODE
1865 /* If NAME is "f<args>", where either 'f' or 'args' is
1866 dependent, then the expression is dependent. */
1867 || (TREE_CODE (name) == TEMPLATE_ID_EXPR
1868 && dependent_template_id_p (TREE_OPERAND (name, 0),
1869 TREE_OPERAND (name, 1)))
1870 /* If NAME is "T::X" where "T" is dependent, then the
1871 expression is dependent. */
1872 || (TREE_CODE (name) == SCOPE_REF
1873 && TYPE_P (TREE_OPERAND (name, 0))
1874 && dependent_type_p (TREE_OPERAND (name, 0))))
1875 return build_min_nt (COMPONENT_REF, object, name, NULL_TREE);
1876 object = build_non_dependent_expr (object);
1879 /* [expr.ref]
1881 The type of the first expression shall be "class object" (of a
1882 complete type). */
1883 if (!currently_open_class (object_type)
1884 && !complete_type_or_else (object_type, object))
1885 return error_mark_node;
1886 if (!CLASS_TYPE_P (object_type))
1888 error ("request for member %qD in %qE, which is of non-class type %qT",
1889 name, object, object_type);
1890 return error_mark_node;
1893 if (BASELINK_P (name))
1895 /* A member function that has already been looked up. */
1896 gcc_assert (TREE_CODE (BASELINK_FUNCTIONS (name)) == TEMPLATE_ID_EXPR);
1897 member = name;
1899 else
1901 bool is_template_id = false;
1902 tree template_args = NULL_TREE;
1903 tree scope;
1905 if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
1907 is_template_id = true;
1908 template_args = TREE_OPERAND (name, 1);
1909 name = TREE_OPERAND (name, 0);
1911 if (TREE_CODE (name) == OVERLOAD)
1912 name = DECL_NAME (get_first_fn (name));
1913 else if (DECL_P (name))
1914 name = DECL_NAME (name);
1917 if (TREE_CODE (name) == SCOPE_REF)
1919 /* A qualified name. The qualifying class or namespace `S' has
1920 already been looked up; it is either a TYPE or a
1921 NAMESPACE_DECL. The member name is either an IDENTIFIER_NODE
1922 or a BIT_NOT_EXPR. */
1923 scope = TREE_OPERAND (name, 0);
1924 name = TREE_OPERAND (name, 1);
1925 gcc_assert (CLASS_TYPE_P (scope)
1926 || TREE_CODE (scope) == NAMESPACE_DECL);
1927 gcc_assert (TREE_CODE (name) == IDENTIFIER_NODE
1928 || TREE_CODE (name) == BIT_NOT_EXPR);
1930 /* If SCOPE is a namespace, then the qualified name does not
1931 name a member of OBJECT_TYPE. */
1932 if (TREE_CODE (scope) == NAMESPACE_DECL)
1934 error ("%<%D::%D%> is not a member of %qT",
1935 scope, name, object_type);
1936 return error_mark_node;
1939 /* Find the base of OBJECT_TYPE corresponding to SCOPE. */
1940 access_path = lookup_base (object_type, scope, ba_check, NULL);
1941 if (access_path == error_mark_node)
1942 return error_mark_node;
1943 if (!access_path)
1945 error ("%qT is not a base of %qT", scope, object_type);
1946 return error_mark_node;
1949 else
1951 scope = NULL_TREE;
1952 access_path = object_type;
1955 if (TREE_CODE (name) == BIT_NOT_EXPR)
1956 member = lookup_destructor (object, scope, name);
1957 else
1959 /* Look up the member. */
1960 member = lookup_member (access_path, name, /*protect=*/1,
1961 /*want_type=*/false);
1962 if (member == NULL_TREE)
1964 error ("%qD has no member named %qE", object_type, name);
1965 return error_mark_node;
1967 if (member == error_mark_node)
1968 return error_mark_node;
1971 if (is_template_id)
1973 tree template = member;
1975 if (BASELINK_P (template))
1976 template = lookup_template_function (template, template_args);
1977 else
1979 error ("%qD is not a member template function", name);
1980 return error_mark_node;
1985 if (TREE_DEPRECATED (member))
1986 warn_deprecated_use (member);
1988 expr = build_class_member_access_expr (object, member, access_path,
1989 /*preserve_reference=*/false);
1990 if (processing_template_decl && expr != error_mark_node)
1991 return build_min_non_dep (COMPONENT_REF, expr,
1992 orig_object, orig_name, NULL_TREE);
1993 return expr;
1996 /* Return an expression for the MEMBER_NAME field in the internal
1997 representation of PTRMEM, a pointer-to-member function. (Each
1998 pointer-to-member function type gets its own RECORD_TYPE so it is
1999 more convenient to access the fields by name than by FIELD_DECL.)
2000 This routine converts the NAME to a FIELD_DECL and then creates the
2001 node for the complete expression. */
2003 tree
2004 build_ptrmemfunc_access_expr (tree ptrmem, tree member_name)
2006 tree ptrmem_type;
2007 tree member;
2008 tree member_type;
2010 /* This code is a stripped down version of
2011 build_class_member_access_expr. It does not work to use that
2012 routine directly because it expects the object to be of class
2013 type. */
2014 ptrmem_type = TREE_TYPE (ptrmem);
2015 gcc_assert (TYPE_PTRMEMFUNC_P (ptrmem_type));
2016 member = lookup_member (ptrmem_type, member_name, /*protect=*/0,
2017 /*want_type=*/false);
2018 member_type = cp_build_qualified_type (TREE_TYPE (member),
2019 cp_type_quals (ptrmem_type));
2020 return fold (build3 (COMPONENT_REF, member_type,
2021 ptrmem, member, NULL_TREE));
2024 /* Given an expression PTR for a pointer, return an expression
2025 for the value pointed to.
2026 ERRORSTRING is the name of the operator to appear in error messages.
2028 This function may need to overload OPERATOR_FNNAME.
2029 Must also handle REFERENCE_TYPEs for C++. */
2031 tree
2032 build_x_indirect_ref (tree expr, const char *errorstring)
2034 tree orig_expr = expr;
2035 tree rval;
2037 if (processing_template_decl)
2039 if (type_dependent_expression_p (expr))
2040 return build_min_nt (INDIRECT_REF, expr);
2041 expr = build_non_dependent_expr (expr);
2044 rval = build_new_op (INDIRECT_REF, LOOKUP_NORMAL, expr, NULL_TREE,
2045 NULL_TREE, /*overloaded_p=*/NULL);
2046 if (!rval)
2047 rval = build_indirect_ref (expr, errorstring);
2049 if (processing_template_decl && rval != error_mark_node)
2050 return build_min_non_dep (INDIRECT_REF, rval, orig_expr);
2051 else
2052 return rval;
2055 tree
2056 build_indirect_ref (tree ptr, const char *errorstring)
2058 tree pointer, type;
2060 if (ptr == error_mark_node)
2061 return error_mark_node;
2063 if (ptr == current_class_ptr)
2064 return current_class_ref;
2066 pointer = (TREE_CODE (TREE_TYPE (ptr)) == REFERENCE_TYPE
2067 ? ptr : decay_conversion (ptr));
2068 type = TREE_TYPE (pointer);
2070 if (POINTER_TYPE_P (type))
2072 /* [expr.unary.op]
2074 If the type of the expression is "pointer to T," the type
2075 of the result is "T."
2077 We must use the canonical variant because certain parts of
2078 the back end, like fold, do pointer comparisons between
2079 types. */
2080 tree t = canonical_type_variant (TREE_TYPE (type));
2082 if (VOID_TYPE_P (t))
2084 /* A pointer to incomplete type (other than cv void) can be
2085 dereferenced [expr.unary.op]/1 */
2086 error ("%qT is not a pointer-to-object type", type);
2087 return error_mark_node;
2089 else if (TREE_CODE (pointer) == ADDR_EXPR
2090 && same_type_p (t, TREE_TYPE (TREE_OPERAND (pointer, 0))))
2091 /* The POINTER was something like `&x'. We simplify `*&x' to
2092 `x'. */
2093 return TREE_OPERAND (pointer, 0);
2094 else
2096 tree ref = build1 (INDIRECT_REF, t, pointer);
2098 /* We *must* set TREE_READONLY when dereferencing a pointer to const,
2099 so that we get the proper error message if the result is used
2100 to assign to. Also, &* is supposed to be a no-op. */
2101 TREE_READONLY (ref) = CP_TYPE_CONST_P (t);
2102 TREE_THIS_VOLATILE (ref) = CP_TYPE_VOLATILE_P (t);
2103 TREE_SIDE_EFFECTS (ref)
2104 = (TREE_THIS_VOLATILE (ref) || TREE_SIDE_EFFECTS (pointer));
2105 return ref;
2108 /* `pointer' won't be an error_mark_node if we were given a
2109 pointer to member, so it's cool to check for this here. */
2110 else if (TYPE_PTR_TO_MEMBER_P (type))
2111 error ("invalid use of %qs on pointer to member", errorstring);
2112 else if (pointer != error_mark_node)
2114 if (errorstring)
2115 error ("invalid type argument of %qs", errorstring);
2116 else
2117 error ("invalid type argument");
2119 return error_mark_node;
2122 /* This handles expressions of the form "a[i]", which denotes
2123 an array reference.
2125 This is logically equivalent in C to *(a+i), but we may do it differently.
2126 If A is a variable or a member, we generate a primitive ARRAY_REF.
2127 This avoids forcing the array out of registers, and can work on
2128 arrays that are not lvalues (for example, members of structures returned
2129 by functions).
2131 If INDEX is of some user-defined type, it must be converted to
2132 integer type. Otherwise, to make a compatible PLUS_EXPR, it
2133 will inherit the type of the array, which will be some pointer type. */
2135 tree
2136 build_array_ref (tree array, tree idx)
2138 if (idx == 0)
2140 error ("subscript missing in array reference");
2141 return error_mark_node;
2144 if (TREE_TYPE (array) == error_mark_node
2145 || TREE_TYPE (idx) == error_mark_node)
2146 return error_mark_node;
2148 /* If ARRAY is a COMPOUND_EXPR or COND_EXPR, move our reference
2149 inside it. */
2150 switch (TREE_CODE (array))
2152 case COMPOUND_EXPR:
2154 tree value = build_array_ref (TREE_OPERAND (array, 1), idx);
2155 return build2 (COMPOUND_EXPR, TREE_TYPE (value),
2156 TREE_OPERAND (array, 0), value);
2159 case COND_EXPR:
2160 return build_conditional_expr
2161 (TREE_OPERAND (array, 0),
2162 build_array_ref (TREE_OPERAND (array, 1), idx),
2163 build_array_ref (TREE_OPERAND (array, 2), idx));
2165 default:
2166 break;
2169 if (TREE_CODE (TREE_TYPE (array)) == ARRAY_TYPE)
2171 tree rval, type;
2173 /* Subscripting with type char is likely to lose
2174 on a machine where chars are signed.
2175 So warn on any machine, but optionally.
2176 Don't warn for unsigned char since that type is safe.
2177 Don't warn for signed char because anyone who uses that
2178 must have done so deliberately. */
2179 if (warn_char_subscripts
2180 && TYPE_MAIN_VARIANT (TREE_TYPE (idx)) == char_type_node)
2181 warning ("array subscript has type %<char%>");
2183 if (!INTEGRAL_OR_ENUMERATION_TYPE_P (TREE_TYPE (idx)))
2185 error ("array subscript is not an integer");
2186 return error_mark_node;
2189 /* Apply integral promotions *after* noticing character types.
2190 (It is unclear why we do these promotions -- the standard
2191 does not say that we should. In fact, the natual thing would
2192 seem to be to convert IDX to ptrdiff_t; we're performing
2193 pointer arithmetic.) */
2194 idx = perform_integral_promotions (idx);
2196 /* An array that is indexed by a non-constant
2197 cannot be stored in a register; we must be able to do
2198 address arithmetic on its address.
2199 Likewise an array of elements of variable size. */
2200 if (TREE_CODE (idx) != INTEGER_CST
2201 || (COMPLETE_TYPE_P (TREE_TYPE (TREE_TYPE (array)))
2202 && (TREE_CODE (TYPE_SIZE (TREE_TYPE (TREE_TYPE (array))))
2203 != INTEGER_CST)))
2205 if (!cxx_mark_addressable (array))
2206 return error_mark_node;
2209 /* An array that is indexed by a constant value which is not within
2210 the array bounds cannot be stored in a register either; because we
2211 would get a crash in store_bit_field/extract_bit_field when trying
2212 to access a non-existent part of the register. */
2213 if (TREE_CODE (idx) == INTEGER_CST
2214 && TYPE_DOMAIN (TREE_TYPE (array))
2215 && ! int_fits_type_p (idx, TYPE_DOMAIN (TREE_TYPE (array))))
2217 if (!cxx_mark_addressable (array))
2218 return error_mark_node;
2221 if (pedantic && !lvalue_p (array))
2222 pedwarn ("ISO C++ forbids subscripting non-lvalue array");
2224 /* Note in C++ it is valid to subscript a `register' array, since
2225 it is valid to take the address of something with that
2226 storage specification. */
2227 if (extra_warnings)
2229 tree foo = array;
2230 while (TREE_CODE (foo) == COMPONENT_REF)
2231 foo = TREE_OPERAND (foo, 0);
2232 if (TREE_CODE (foo) == VAR_DECL && DECL_REGISTER (foo))
2233 warning ("subscripting array declared %<register%>");
2236 type = TREE_TYPE (TREE_TYPE (array));
2237 rval = build4 (ARRAY_REF, type, array, idx, NULL_TREE, NULL_TREE);
2238 /* Array ref is const/volatile if the array elements are
2239 or if the array is.. */
2240 TREE_READONLY (rval)
2241 |= (CP_TYPE_CONST_P (type) | TREE_READONLY (array));
2242 TREE_SIDE_EFFECTS (rval)
2243 |= (CP_TYPE_VOLATILE_P (type) | TREE_SIDE_EFFECTS (array));
2244 TREE_THIS_VOLATILE (rval)
2245 |= (CP_TYPE_VOLATILE_P (type) | TREE_THIS_VOLATILE (array));
2246 return require_complete_type (fold_if_not_in_template (rval));
2250 tree ar = default_conversion (array);
2251 tree ind = default_conversion (idx);
2253 /* Put the integer in IND to simplify error checking. */
2254 if (TREE_CODE (TREE_TYPE (ar)) == INTEGER_TYPE)
2256 tree temp = ar;
2257 ar = ind;
2258 ind = temp;
2261 if (ar == error_mark_node)
2262 return ar;
2264 if (TREE_CODE (TREE_TYPE (ar)) != POINTER_TYPE)
2266 error ("subscripted value is neither array nor pointer");
2267 return error_mark_node;
2269 if (TREE_CODE (TREE_TYPE (ind)) != INTEGER_TYPE)
2271 error ("array subscript is not an integer");
2272 return error_mark_node;
2275 return build_indirect_ref (cp_build_binary_op (PLUS_EXPR, ar, ind),
2276 "array indexing");
2280 /* Resolve a pointer to member function. INSTANCE is the object
2281 instance to use, if the member points to a virtual member.
2283 This used to avoid checking for virtual functions if basetype
2284 has no virtual functions, according to an earlier ANSI draft.
2285 With the final ISO C++ rules, such an optimization is
2286 incorrect: A pointer to a derived member can be static_cast
2287 to pointer-to-base-member, as long as the dynamic object
2288 later has the right member. */
2290 tree
2291 get_member_function_from_ptrfunc (tree *instance_ptrptr, tree function)
2293 if (TREE_CODE (function) == OFFSET_REF)
2294 function = TREE_OPERAND (function, 1);
2296 if (TYPE_PTRMEMFUNC_P (TREE_TYPE (function)))
2298 tree idx, delta, e1, e2, e3, vtbl, basetype;
2299 tree fntype = TYPE_PTRMEMFUNC_FN_TYPE (TREE_TYPE (function));
2301 tree instance_ptr = *instance_ptrptr;
2302 tree instance_save_expr = 0;
2303 if (instance_ptr == error_mark_node)
2305 if (TREE_CODE (function) == PTRMEM_CST)
2307 /* Extracting the function address from a pmf is only
2308 allowed with -Wno-pmf-conversions. It only works for
2309 pmf constants. */
2310 e1 = build_addr_func (PTRMEM_CST_MEMBER (function));
2311 e1 = convert (fntype, e1);
2312 return e1;
2314 else
2316 error ("object missing in use of %qE", function);
2317 return error_mark_node;
2321 if (TREE_SIDE_EFFECTS (instance_ptr))
2322 instance_ptr = instance_save_expr = save_expr (instance_ptr);
2324 if (TREE_SIDE_EFFECTS (function))
2325 function = save_expr (function);
2327 /* Start by extracting all the information from the PMF itself. */
2328 e3 = PFN_FROM_PTRMEMFUNC (function);
2329 delta = build_ptrmemfunc_access_expr (function, delta_identifier);
2330 idx = build1 (NOP_EXPR, vtable_index_type, e3);
2331 switch (TARGET_PTRMEMFUNC_VBIT_LOCATION)
2333 case ptrmemfunc_vbit_in_pfn:
2334 e1 = cp_build_binary_op (BIT_AND_EXPR, idx, integer_one_node);
2335 idx = cp_build_binary_op (MINUS_EXPR, idx, integer_one_node);
2336 break;
2338 case ptrmemfunc_vbit_in_delta:
2339 e1 = cp_build_binary_op (BIT_AND_EXPR, delta, integer_one_node);
2340 delta = cp_build_binary_op (RSHIFT_EXPR, delta, integer_one_node);
2341 break;
2343 default:
2344 gcc_unreachable ();
2347 /* Convert down to the right base before using the instance. First
2348 use the type... */
2349 basetype = TYPE_METHOD_BASETYPE (TREE_TYPE (fntype));
2350 basetype = lookup_base (TREE_TYPE (TREE_TYPE (instance_ptr)),
2351 basetype, ba_check, NULL);
2352 instance_ptr = build_base_path (PLUS_EXPR, instance_ptr, basetype, 1);
2353 if (instance_ptr == error_mark_node)
2354 return error_mark_node;
2355 /* ...and then the delta in the PMF. */
2356 instance_ptr = build2 (PLUS_EXPR, TREE_TYPE (instance_ptr),
2357 instance_ptr, delta);
2359 /* Hand back the adjusted 'this' argument to our caller. */
2360 *instance_ptrptr = instance_ptr;
2362 /* Next extract the vtable pointer from the object. */
2363 vtbl = build1 (NOP_EXPR, build_pointer_type (vtbl_ptr_type_node),
2364 instance_ptr);
2365 vtbl = build_indirect_ref (vtbl, NULL);
2367 /* Finally, extract the function pointer from the vtable. */
2368 e2 = fold (build2 (PLUS_EXPR, TREE_TYPE (vtbl), vtbl, idx));
2369 e2 = build_indirect_ref (e2, NULL);
2370 TREE_CONSTANT (e2) = 1;
2371 TREE_INVARIANT (e2) = 1;
2373 /* When using function descriptors, the address of the
2374 vtable entry is treated as a function pointer. */
2375 if (TARGET_VTABLE_USES_DESCRIPTORS)
2376 e2 = build1 (NOP_EXPR, TREE_TYPE (e2),
2377 build_unary_op (ADDR_EXPR, e2, /*noconvert=*/1));
2379 TREE_TYPE (e2) = TREE_TYPE (e3);
2380 e1 = build_conditional_expr (e1, e2, e3);
2382 /* Make sure this doesn't get evaluated first inside one of the
2383 branches of the COND_EXPR. */
2384 if (instance_save_expr)
2385 e1 = build2 (COMPOUND_EXPR, TREE_TYPE (e1),
2386 instance_save_expr, e1);
2388 function = e1;
2390 return function;
2393 tree
2394 build_function_call (tree function, tree params)
2396 tree fntype, fndecl;
2397 tree coerced_params;
2398 tree name = NULL_TREE;
2399 int is_method;
2400 tree original = function;
2402 /* build_c_cast puts on a NOP_EXPR to make the result not an lvalue.
2403 Strip such NOP_EXPRs, since FUNCTION is used in non-lvalue context. */
2404 if (TREE_CODE (function) == NOP_EXPR
2405 && TREE_TYPE (function) == TREE_TYPE (TREE_OPERAND (function, 0)))
2406 function = TREE_OPERAND (function, 0);
2408 if (TREE_CODE (function) == FUNCTION_DECL)
2410 name = DECL_NAME (function);
2412 mark_used (function);
2413 fndecl = function;
2415 /* Convert anything with function type to a pointer-to-function. */
2416 if (pedantic && DECL_MAIN_P (function))
2417 pedwarn ("ISO C++ forbids calling %<::main%> from within program");
2419 /* Differs from default_conversion by not setting TREE_ADDRESSABLE
2420 (because calling an inline function does not mean the function
2421 needs to be separately compiled). */
2423 if (DECL_INLINE (function))
2424 function = inline_conversion (function);
2425 else
2426 function = build_addr_func (function);
2428 else
2430 fndecl = NULL_TREE;
2432 function = build_addr_func (function);
2435 if (function == error_mark_node)
2436 return error_mark_node;
2438 fntype = TREE_TYPE (function);
2440 if (TYPE_PTRMEMFUNC_P (fntype))
2442 error ("must use %<.*%> or %<->*%> to call pointer-to-member "
2443 "function in %<%E (...)%>",
2444 original);
2445 return error_mark_node;
2448 is_method = (TREE_CODE (fntype) == POINTER_TYPE
2449 && TREE_CODE (TREE_TYPE (fntype)) == METHOD_TYPE);
2451 if (!((TREE_CODE (fntype) == POINTER_TYPE
2452 && TREE_CODE (TREE_TYPE (fntype)) == FUNCTION_TYPE)
2453 || is_method
2454 || TREE_CODE (function) == TEMPLATE_ID_EXPR))
2456 error ("%qE cannot be used as a function", original);
2457 return error_mark_node;
2460 /* fntype now gets the type of function pointed to. */
2461 fntype = TREE_TYPE (fntype);
2463 /* Convert the parameters to the types declared in the
2464 function prototype, or apply default promotions. */
2466 coerced_params = convert_arguments (TYPE_ARG_TYPES (fntype),
2467 params, fndecl, LOOKUP_NORMAL);
2468 if (coerced_params == error_mark_node)
2469 return error_mark_node;
2471 /* Check for errors in format strings and inappropriately
2472 null parameters. */
2474 check_function_arguments (TYPE_ATTRIBUTES (fntype), coerced_params);
2476 return build_cxx_call (function, coerced_params);
2479 /* Convert the actual parameter expressions in the list VALUES
2480 to the types in the list TYPELIST.
2481 If parmdecls is exhausted, or when an element has NULL as its type,
2482 perform the default conversions.
2484 NAME is an IDENTIFIER_NODE or 0. It is used only for error messages.
2486 This is also where warnings about wrong number of args are generated.
2488 Return a list of expressions for the parameters as converted.
2490 Both VALUES and the returned value are chains of TREE_LIST nodes
2491 with the elements of the list in the TREE_VALUE slots of those nodes.
2493 In C++, unspecified trailing parameters can be filled in with their
2494 default arguments, if such were specified. Do so here. */
2496 tree
2497 convert_arguments (tree typelist, tree values, tree fndecl, int flags)
2499 tree typetail, valtail;
2500 tree result = NULL_TREE;
2501 const char *called_thing = 0;
2502 int i = 0;
2504 /* Argument passing is always copy-initialization. */
2505 flags |= LOOKUP_ONLYCONVERTING;
2507 if (fndecl)
2509 if (TREE_CODE (TREE_TYPE (fndecl)) == METHOD_TYPE)
2511 if (DECL_NAME (fndecl) == NULL_TREE
2512 || IDENTIFIER_HAS_TYPE_VALUE (DECL_NAME (fndecl)))
2513 called_thing = "constructor";
2514 else
2515 called_thing = "member function";
2517 else
2518 called_thing = "function";
2521 for (valtail = values, typetail = typelist;
2522 valtail;
2523 valtail = TREE_CHAIN (valtail), i++)
2525 tree type = typetail ? TREE_VALUE (typetail) : 0;
2526 tree val = TREE_VALUE (valtail);
2528 if (val == error_mark_node)
2529 return error_mark_node;
2531 if (type == void_type_node)
2533 if (fndecl)
2535 cp_error_at ("too many arguments to %s %q+#D", called_thing,
2536 fndecl);
2537 error ("at this point in file");
2539 else
2540 error ("too many arguments to function");
2541 /* In case anybody wants to know if this argument
2542 list is valid. */
2543 if (result)
2544 TREE_TYPE (tree_last (result)) = error_mark_node;
2545 break;
2548 /* build_c_cast puts on a NOP_EXPR to make the result not an lvalue.
2549 Strip such NOP_EXPRs, since VAL is used in non-lvalue context. */
2550 if (TREE_CODE (val) == NOP_EXPR
2551 && TREE_TYPE (val) == TREE_TYPE (TREE_OPERAND (val, 0))
2552 && (type == 0 || TREE_CODE (type) != REFERENCE_TYPE))
2553 val = TREE_OPERAND (val, 0);
2555 if (type == 0 || TREE_CODE (type) != REFERENCE_TYPE)
2557 if (TREE_CODE (TREE_TYPE (val)) == ARRAY_TYPE
2558 || TREE_CODE (TREE_TYPE (val)) == FUNCTION_TYPE
2559 || TREE_CODE (TREE_TYPE (val)) == METHOD_TYPE)
2560 val = decay_conversion (val);
2563 if (val == error_mark_node)
2564 return error_mark_node;
2566 if (type != 0)
2568 /* Formal parm type is specified by a function prototype. */
2569 tree parmval;
2571 if (!COMPLETE_TYPE_P (complete_type (type)))
2573 if (fndecl)
2574 error ("parameter %P of %qD has incomplete type %qT",
2575 i, fndecl, type);
2576 else
2577 error ("parameter %P has incomplete type %qT", i, type);
2578 parmval = error_mark_node;
2580 else
2582 parmval = convert_for_initialization
2583 (NULL_TREE, type, val, flags,
2584 "argument passing", fndecl, i);
2585 parmval = convert_for_arg_passing (type, parmval);
2588 if (parmval == error_mark_node)
2589 return error_mark_node;
2591 result = tree_cons (NULL_TREE, parmval, result);
2593 else
2595 if (fndecl && DECL_BUILT_IN (fndecl)
2596 && DECL_FUNCTION_CODE (fndecl) == BUILT_IN_CONSTANT_P)
2597 /* Don't do ellipsis conversion for __built_in_constant_p
2598 as this will result in spurious warnings for non-POD
2599 types. */
2600 val = require_complete_type (val);
2601 else
2602 val = convert_arg_to_ellipsis (val);
2604 result = tree_cons (NULL_TREE, val, result);
2607 if (typetail)
2608 typetail = TREE_CHAIN (typetail);
2611 if (typetail != 0 && typetail != void_list_node)
2613 /* See if there are default arguments that can be used. */
2614 if (TREE_PURPOSE (typetail)
2615 && TREE_CODE (TREE_PURPOSE (typetail)) != DEFAULT_ARG)
2617 for (; typetail != void_list_node; ++i)
2619 tree parmval
2620 = convert_default_arg (TREE_VALUE (typetail),
2621 TREE_PURPOSE (typetail),
2622 fndecl, i);
2624 if (parmval == error_mark_node)
2625 return error_mark_node;
2627 result = tree_cons (0, parmval, result);
2628 typetail = TREE_CHAIN (typetail);
2629 /* ends with `...'. */
2630 if (typetail == NULL_TREE)
2631 break;
2634 else
2636 if (fndecl)
2638 cp_error_at ("too few arguments to %s %q+#D",
2639 called_thing, fndecl);
2640 error ("at this point in file");
2642 else
2643 error ("too few arguments to function");
2644 return error_mark_list;
2648 return nreverse (result);
2651 /* Build a binary-operation expression, after performing default
2652 conversions on the operands. CODE is the kind of expression to build. */
2654 tree
2655 build_x_binary_op (enum tree_code code, tree arg1, tree arg2,
2656 bool *overloaded_p)
2658 tree orig_arg1;
2659 tree orig_arg2;
2660 tree expr;
2662 orig_arg1 = arg1;
2663 orig_arg2 = arg2;
2665 if (processing_template_decl)
2667 if (type_dependent_expression_p (arg1)
2668 || type_dependent_expression_p (arg2))
2669 return build_min_nt (code, arg1, arg2);
2670 arg1 = build_non_dependent_expr (arg1);
2671 arg2 = build_non_dependent_expr (arg2);
2674 if (code == DOTSTAR_EXPR)
2675 expr = build_m_component_ref (arg1, arg2);
2676 else
2677 expr = build_new_op (code, LOOKUP_NORMAL, arg1, arg2, NULL_TREE,
2678 overloaded_p);
2680 if (processing_template_decl && expr != error_mark_node)
2681 return build_min_non_dep (code, expr, orig_arg1, orig_arg2);
2683 return expr;
2686 /* Build a binary-operation expression without default conversions.
2687 CODE is the kind of expression to build.
2688 This function differs from `build' in several ways:
2689 the data type of the result is computed and recorded in it,
2690 warnings are generated if arg data types are invalid,
2691 special handling for addition and subtraction of pointers is known,
2692 and some optimization is done (operations on narrow ints
2693 are done in the narrower type when that gives the same result).
2694 Constant folding is also done before the result is returned.
2696 Note that the operands will never have enumeral types
2697 because either they have just had the default conversions performed
2698 or they have both just been converted to some other type in which
2699 the arithmetic is to be done.
2701 C++: must do special pointer arithmetic when implementing
2702 multiple inheritance, and deal with pointer to member functions. */
2704 tree
2705 build_binary_op (enum tree_code code, tree orig_op0, tree orig_op1,
2706 int convert_p ATTRIBUTE_UNUSED)
2708 tree op0, op1;
2709 enum tree_code code0, code1;
2710 tree type0, type1;
2712 /* Expression code to give to the expression when it is built.
2713 Normally this is CODE, which is what the caller asked for,
2714 but in some special cases we change it. */
2715 enum tree_code resultcode = code;
2717 /* Data type in which the computation is to be performed.
2718 In the simplest cases this is the common type of the arguments. */
2719 tree result_type = NULL;
2721 /* Nonzero means operands have already been type-converted
2722 in whatever way is necessary.
2723 Zero means they need to be converted to RESULT_TYPE. */
2724 int converted = 0;
2726 /* Nonzero means create the expression with this type, rather than
2727 RESULT_TYPE. */
2728 tree build_type = 0;
2730 /* Nonzero means after finally constructing the expression
2731 convert it to this type. */
2732 tree final_type = 0;
2734 tree result;
2736 /* Nonzero if this is an operation like MIN or MAX which can
2737 safely be computed in short if both args are promoted shorts.
2738 Also implies COMMON.
2739 -1 indicates a bitwise operation; this makes a difference
2740 in the exact conditions for when it is safe to do the operation
2741 in a narrower mode. */
2742 int shorten = 0;
2744 /* Nonzero if this is a comparison operation;
2745 if both args are promoted shorts, compare the original shorts.
2746 Also implies COMMON. */
2747 int short_compare = 0;
2749 /* Nonzero if this is a right-shift operation, which can be computed on the
2750 original short and then promoted if the operand is a promoted short. */
2751 int short_shift = 0;
2753 /* Nonzero means set RESULT_TYPE to the common type of the args. */
2754 int common = 0;
2756 /* True if both operands have arithmetic type. */
2757 bool arithmetic_types_p;
2759 /* Apply default conversions. */
2760 op0 = orig_op0;
2761 op1 = orig_op1;
2763 if (code == TRUTH_AND_EXPR || code == TRUTH_ANDIF_EXPR
2764 || code == TRUTH_OR_EXPR || code == TRUTH_ORIF_EXPR
2765 || code == TRUTH_XOR_EXPR)
2767 if (!really_overloaded_fn (op0))
2768 op0 = decay_conversion (op0);
2769 if (!really_overloaded_fn (op1))
2770 op1 = decay_conversion (op1);
2772 else
2774 if (!really_overloaded_fn (op0))
2775 op0 = default_conversion (op0);
2776 if (!really_overloaded_fn (op1))
2777 op1 = default_conversion (op1);
2780 /* Strip NON_LVALUE_EXPRs, etc., since we aren't using as an lvalue. */
2781 STRIP_TYPE_NOPS (op0);
2782 STRIP_TYPE_NOPS (op1);
2784 /* DTRT if one side is an overloaded function, but complain about it. */
2785 if (type_unknown_p (op0))
2787 tree t = instantiate_type (TREE_TYPE (op1), op0, tf_none);
2788 if (t != error_mark_node)
2790 pedwarn ("assuming cast to type %qT from overloaded function",
2791 TREE_TYPE (t));
2792 op0 = t;
2795 if (type_unknown_p (op1))
2797 tree t = instantiate_type (TREE_TYPE (op0), op1, tf_none);
2798 if (t != error_mark_node)
2800 pedwarn ("assuming cast to type %qT from overloaded function",
2801 TREE_TYPE (t));
2802 op1 = t;
2806 type0 = TREE_TYPE (op0);
2807 type1 = TREE_TYPE (op1);
2809 /* The expression codes of the data types of the arguments tell us
2810 whether the arguments are integers, floating, pointers, etc. */
2811 code0 = TREE_CODE (type0);
2812 code1 = TREE_CODE (type1);
2814 /* If an error was already reported for one of the arguments,
2815 avoid reporting another error. */
2817 if (code0 == ERROR_MARK || code1 == ERROR_MARK)
2818 return error_mark_node;
2820 switch (code)
2822 case PLUS_EXPR:
2823 /* Handle the pointer + int case. */
2824 if (code0 == POINTER_TYPE && code1 == INTEGER_TYPE)
2825 return cp_pointer_int_sum (PLUS_EXPR, op0, op1);
2826 else if (code1 == POINTER_TYPE && code0 == INTEGER_TYPE)
2827 return cp_pointer_int_sum (PLUS_EXPR, op1, op0);
2828 else
2829 common = 1;
2830 break;
2832 case MINUS_EXPR:
2833 /* Subtraction of two similar pointers.
2834 We must subtract them as integers, then divide by object size. */
2835 if (code0 == POINTER_TYPE && code1 == POINTER_TYPE
2836 && same_type_ignoring_top_level_qualifiers_p (TREE_TYPE (type0),
2837 TREE_TYPE (type1)))
2838 return pointer_diff (op0, op1, common_type (type0, type1));
2839 /* Handle pointer minus int. Just like pointer plus int. */
2840 else if (code0 == POINTER_TYPE && code1 == INTEGER_TYPE)
2841 return cp_pointer_int_sum (MINUS_EXPR, op0, op1);
2842 else
2843 common = 1;
2844 break;
2846 case MULT_EXPR:
2847 common = 1;
2848 break;
2850 case TRUNC_DIV_EXPR:
2851 case CEIL_DIV_EXPR:
2852 case FLOOR_DIV_EXPR:
2853 case ROUND_DIV_EXPR:
2854 case EXACT_DIV_EXPR:
2855 if ((code0 == INTEGER_TYPE || code0 == REAL_TYPE
2856 || code0 == COMPLEX_TYPE || code0 == VECTOR_TYPE)
2857 && (code1 == INTEGER_TYPE || code1 == REAL_TYPE
2858 || code1 == COMPLEX_TYPE || code1 == VECTOR_TYPE))
2860 if (TREE_CODE (op1) == INTEGER_CST && integer_zerop (op1))
2861 warning ("division by zero in %<%E / 0%>", op0);
2862 else if (TREE_CODE (op1) == REAL_CST && real_zerop (op1))
2863 warning ("division by zero in %<%E / 0.%>", op0);
2865 if (code0 == COMPLEX_TYPE || code0 == VECTOR_TYPE)
2866 code0 = TREE_CODE (TREE_TYPE (TREE_TYPE (op0)));
2867 if (code1 == COMPLEX_TYPE || code1 == VECTOR_TYPE)
2868 code1 = TREE_CODE (TREE_TYPE (TREE_TYPE (op1)));
2870 if (!(code0 == INTEGER_TYPE && code1 == INTEGER_TYPE))
2871 resultcode = RDIV_EXPR;
2872 else
2873 /* When dividing two signed integers, we have to promote to int.
2874 unless we divide by a constant != -1. Note that default
2875 conversion will have been performed on the operands at this
2876 point, so we have to dig out the original type to find out if
2877 it was unsigned. */
2878 shorten = ((TREE_CODE (op0) == NOP_EXPR
2879 && TYPE_UNSIGNED (TREE_TYPE (TREE_OPERAND (op0, 0))))
2880 || (TREE_CODE (op1) == INTEGER_CST
2881 && ! integer_all_onesp (op1)));
2883 common = 1;
2885 break;
2887 case BIT_AND_EXPR:
2888 case BIT_IOR_EXPR:
2889 case BIT_XOR_EXPR:
2890 if (code0 == INTEGER_TYPE && code1 == INTEGER_TYPE)
2891 shorten = -1;
2892 break;
2894 case TRUNC_MOD_EXPR:
2895 case FLOOR_MOD_EXPR:
2896 if (code1 == INTEGER_TYPE && integer_zerop (op1))
2897 warning ("division by zero in %<%E %% 0%>", op0);
2898 else if (code1 == REAL_TYPE && real_zerop (op1))
2899 warning ("division by zero in %<%E %% 0.%>", op0);
2901 if (code0 == INTEGER_TYPE && code1 == INTEGER_TYPE)
2903 /* Although it would be tempting to shorten always here, that loses
2904 on some targets, since the modulo instruction is undefined if the
2905 quotient can't be represented in the computation mode. We shorten
2906 only if unsigned or if dividing by something we know != -1. */
2907 shorten = ((TREE_CODE (op0) == NOP_EXPR
2908 && TYPE_UNSIGNED (TREE_TYPE (TREE_OPERAND (op0, 0))))
2909 || (TREE_CODE (op1) == INTEGER_CST
2910 && ! integer_all_onesp (op1)));
2911 common = 1;
2913 break;
2915 case TRUTH_ANDIF_EXPR:
2916 case TRUTH_ORIF_EXPR:
2917 case TRUTH_AND_EXPR:
2918 case TRUTH_OR_EXPR:
2919 result_type = boolean_type_node;
2920 break;
2922 /* Shift operations: result has same type as first operand;
2923 always convert second operand to int.
2924 Also set SHORT_SHIFT if shifting rightward. */
2926 case RSHIFT_EXPR:
2927 if (code0 == INTEGER_TYPE && code1 == INTEGER_TYPE)
2929 result_type = type0;
2930 if (TREE_CODE (op1) == INTEGER_CST)
2932 if (tree_int_cst_lt (op1, integer_zero_node))
2933 warning ("right shift count is negative");
2934 else
2936 if (! integer_zerop (op1))
2937 short_shift = 1;
2938 if (compare_tree_int (op1, TYPE_PRECISION (type0)) >= 0)
2939 warning ("right shift count >= width of type");
2942 /* Convert the shift-count to an integer, regardless of
2943 size of value being shifted. */
2944 if (TYPE_MAIN_VARIANT (TREE_TYPE (op1)) != integer_type_node)
2945 op1 = cp_convert (integer_type_node, op1);
2946 /* Avoid converting op1 to result_type later. */
2947 converted = 1;
2949 break;
2951 case LSHIFT_EXPR:
2952 if (code0 == INTEGER_TYPE && code1 == INTEGER_TYPE)
2954 result_type = type0;
2955 if (TREE_CODE (op1) == INTEGER_CST)
2957 if (tree_int_cst_lt (op1, integer_zero_node))
2958 warning ("left shift count is negative");
2959 else if (compare_tree_int (op1, TYPE_PRECISION (type0)) >= 0)
2960 warning ("left shift count >= width of type");
2962 /* Convert the shift-count to an integer, regardless of
2963 size of value being shifted. */
2964 if (TYPE_MAIN_VARIANT (TREE_TYPE (op1)) != integer_type_node)
2965 op1 = cp_convert (integer_type_node, op1);
2966 /* Avoid converting op1 to result_type later. */
2967 converted = 1;
2969 break;
2971 case RROTATE_EXPR:
2972 case LROTATE_EXPR:
2973 if (code0 == INTEGER_TYPE && code1 == INTEGER_TYPE)
2975 result_type = type0;
2976 if (TREE_CODE (op1) == INTEGER_CST)
2978 if (tree_int_cst_lt (op1, integer_zero_node))
2979 warning ("%s rotate count is negative",
2980 (code == LROTATE_EXPR) ? "left" : "right");
2981 else if (compare_tree_int (op1, TYPE_PRECISION (type0)) >= 0)
2982 warning ("%s rotate count >= width of type",
2983 (code == LROTATE_EXPR) ? "left" : "right");
2985 /* Convert the shift-count to an integer, regardless of
2986 size of value being shifted. */
2987 if (TYPE_MAIN_VARIANT (TREE_TYPE (op1)) != integer_type_node)
2988 op1 = cp_convert (integer_type_node, op1);
2990 break;
2992 case EQ_EXPR:
2993 case NE_EXPR:
2994 if (warn_float_equal && (code0 == REAL_TYPE || code1 == REAL_TYPE))
2995 warning ("comparing floating point with == or != is unsafe");
2997 build_type = boolean_type_node;
2998 if ((code0 == INTEGER_TYPE || code0 == REAL_TYPE
2999 || code0 == COMPLEX_TYPE)
3000 && (code1 == INTEGER_TYPE || code1 == REAL_TYPE
3001 || code1 == COMPLEX_TYPE))
3002 short_compare = 1;
3003 else if ((code0 == POINTER_TYPE && code1 == POINTER_TYPE)
3004 || (TYPE_PTRMEM_P (type0) && TYPE_PTRMEM_P (type1)))
3005 result_type = composite_pointer_type (type0, type1, op0, op1,
3006 "comparison");
3007 else if ((code0 == POINTER_TYPE || TYPE_PTRMEM_P (type0))
3008 && null_ptr_cst_p (op1))
3009 result_type = type0;
3010 else if ((code1 == POINTER_TYPE || TYPE_PTRMEM_P (type1))
3011 && null_ptr_cst_p (op0))
3012 result_type = type1;
3013 else if (code0 == POINTER_TYPE && code1 == INTEGER_TYPE)
3015 result_type = type0;
3016 error ("ISO C++ forbids comparison between pointer and integer");
3018 else if (code0 == INTEGER_TYPE && code1 == POINTER_TYPE)
3020 result_type = type1;
3021 error ("ISO C++ forbids comparison between pointer and integer");
3023 else if (TYPE_PTRMEMFUNC_P (type0) && null_ptr_cst_p (op1))
3025 op0 = build_ptrmemfunc_access_expr (op0, pfn_identifier);
3026 op1 = cp_convert (TREE_TYPE (op0), integer_zero_node);
3027 result_type = TREE_TYPE (op0);
3029 else if (TYPE_PTRMEMFUNC_P (type1) && null_ptr_cst_p (op0))
3030 return cp_build_binary_op (code, op1, op0);
3031 else if (TYPE_PTRMEMFUNC_P (type0) && TYPE_PTRMEMFUNC_P (type1)
3032 && same_type_p (type0, type1))
3034 /* E will be the final comparison. */
3035 tree e;
3036 /* E1 and E2 are for scratch. */
3037 tree e1;
3038 tree e2;
3039 tree pfn0;
3040 tree pfn1;
3041 tree delta0;
3042 tree delta1;
3044 if (TREE_SIDE_EFFECTS (op0))
3045 op0 = save_expr (op0);
3046 if (TREE_SIDE_EFFECTS (op1))
3047 op1 = save_expr (op1);
3049 /* We generate:
3051 (op0.pfn == op1.pfn
3052 && (!op0.pfn || op0.delta == op1.delta))
3054 The reason for the `!op0.pfn' bit is that a NULL
3055 pointer-to-member is any member with a zero PFN; the
3056 DELTA field is unspecified. */
3057 pfn0 = pfn_from_ptrmemfunc (op0);
3058 pfn1 = pfn_from_ptrmemfunc (op1);
3059 delta0 = build_ptrmemfunc_access_expr (op0,
3060 delta_identifier);
3061 delta1 = build_ptrmemfunc_access_expr (op1,
3062 delta_identifier);
3063 e1 = cp_build_binary_op (EQ_EXPR, delta0, delta1);
3064 e2 = cp_build_binary_op (EQ_EXPR,
3065 pfn0,
3066 cp_convert (TREE_TYPE (pfn0),
3067 integer_zero_node));
3068 e1 = cp_build_binary_op (TRUTH_ORIF_EXPR, e1, e2);
3069 e2 = build2 (EQ_EXPR, boolean_type_node, pfn0, pfn1);
3070 e = cp_build_binary_op (TRUTH_ANDIF_EXPR, e2, e1);
3071 if (code == EQ_EXPR)
3072 return e;
3073 return cp_build_binary_op (EQ_EXPR, e, integer_zero_node);
3075 else
3077 gcc_assert (!TYPE_PTRMEMFUNC_P (type0)
3078 || !same_type_p (TYPE_PTRMEMFUNC_FN_TYPE (type0),
3079 type1));
3080 gcc_assert (!TYPE_PTRMEMFUNC_P (type1)
3081 || !same_type_p (TYPE_PTRMEMFUNC_FN_TYPE (type1),
3082 type0));
3085 break;
3087 case MAX_EXPR:
3088 case MIN_EXPR:
3089 if ((code0 == INTEGER_TYPE || code0 == REAL_TYPE)
3090 && (code1 == INTEGER_TYPE || code1 == REAL_TYPE))
3091 shorten = 1;
3092 else if (code0 == POINTER_TYPE && code1 == POINTER_TYPE)
3093 result_type = composite_pointer_type (type0, type1, op0, op1,
3094 "comparison");
3095 break;
3097 case LE_EXPR:
3098 case GE_EXPR:
3099 case LT_EXPR:
3100 case GT_EXPR:
3101 build_type = boolean_type_node;
3102 if ((code0 == INTEGER_TYPE || code0 == REAL_TYPE)
3103 && (code1 == INTEGER_TYPE || code1 == REAL_TYPE))
3104 short_compare = 1;
3105 else if (code0 == POINTER_TYPE && code1 == POINTER_TYPE)
3106 result_type = composite_pointer_type (type0, type1, op0, op1,
3107 "comparison");
3108 else if (code0 == POINTER_TYPE && TREE_CODE (op1) == INTEGER_CST
3109 && integer_zerop (op1))
3110 result_type = type0;
3111 else if (code1 == POINTER_TYPE && TREE_CODE (op0) == INTEGER_CST
3112 && integer_zerop (op0))
3113 result_type = type1;
3114 else if (code0 == POINTER_TYPE && code1 == INTEGER_TYPE)
3116 result_type = type0;
3117 pedwarn ("ISO C++ forbids comparison between pointer and integer");
3119 else if (code0 == INTEGER_TYPE && code1 == POINTER_TYPE)
3121 result_type = type1;
3122 pedwarn ("ISO C++ forbids comparison between pointer and integer");
3124 break;
3126 case UNORDERED_EXPR:
3127 case ORDERED_EXPR:
3128 case UNLT_EXPR:
3129 case UNLE_EXPR:
3130 case UNGT_EXPR:
3131 case UNGE_EXPR:
3132 case UNEQ_EXPR:
3133 build_type = integer_type_node;
3134 if (code0 != REAL_TYPE || code1 != REAL_TYPE)
3136 error ("unordered comparison on non-floating point argument");
3137 return error_mark_node;
3139 common = 1;
3140 break;
3142 default:
3143 break;
3146 arithmetic_types_p =
3147 ((code0 == INTEGER_TYPE || code0 == REAL_TYPE || code0 == COMPLEX_TYPE)
3148 && (code1 == INTEGER_TYPE || code1 == REAL_TYPE
3149 || code1 == COMPLEX_TYPE));
3150 /* Determine the RESULT_TYPE, if it is not already known. */
3151 if (!result_type
3152 && arithmetic_types_p
3153 && (shorten || common || short_compare))
3154 result_type = common_type (type0, type1);
3156 if (!result_type)
3158 error ("invalid operands of types %qT and %qT to binary %qO",
3159 TREE_TYPE (orig_op0), TREE_TYPE (orig_op1), code);
3160 return error_mark_node;
3163 /* If we're in a template, the only thing we need to know is the
3164 RESULT_TYPE. */
3165 if (processing_template_decl)
3166 return build2 (resultcode,
3167 build_type ? build_type : result_type,
3168 op0, op1);
3170 if (arithmetic_types_p)
3172 int none_complex = (code0 != COMPLEX_TYPE && code1 != COMPLEX_TYPE);
3174 /* For certain operations (which identify themselves by shorten != 0)
3175 if both args were extended from the same smaller type,
3176 do the arithmetic in that type and then extend.
3178 shorten !=0 and !=1 indicates a bitwise operation.
3179 For them, this optimization is safe only if
3180 both args are zero-extended or both are sign-extended.
3181 Otherwise, we might change the result.
3182 Eg, (short)-1 | (unsigned short)-1 is (int)-1
3183 but calculated in (unsigned short) it would be (unsigned short)-1. */
3185 if (shorten && none_complex)
3187 int unsigned0, unsigned1;
3188 tree arg0 = get_narrower (op0, &unsigned0);
3189 tree arg1 = get_narrower (op1, &unsigned1);
3190 /* UNS is 1 if the operation to be done is an unsigned one. */
3191 int uns = TYPE_UNSIGNED (result_type);
3192 tree type;
3194 final_type = result_type;
3196 /* Handle the case that OP0 does not *contain* a conversion
3197 but it *requires* conversion to FINAL_TYPE. */
3199 if (op0 == arg0 && TREE_TYPE (op0) != final_type)
3200 unsigned0 = TYPE_UNSIGNED (TREE_TYPE (op0));
3201 if (op1 == arg1 && TREE_TYPE (op1) != final_type)
3202 unsigned1 = TYPE_UNSIGNED (TREE_TYPE (op1));
3204 /* Now UNSIGNED0 is 1 if ARG0 zero-extends to FINAL_TYPE. */
3206 /* For bitwise operations, signedness of nominal type
3207 does not matter. Consider only how operands were extended. */
3208 if (shorten == -1)
3209 uns = unsigned0;
3211 /* Note that in all three cases below we refrain from optimizing
3212 an unsigned operation on sign-extended args.
3213 That would not be valid. */
3215 /* Both args variable: if both extended in same way
3216 from same width, do it in that width.
3217 Do it unsigned if args were zero-extended. */
3218 if ((TYPE_PRECISION (TREE_TYPE (arg0))
3219 < TYPE_PRECISION (result_type))
3220 && (TYPE_PRECISION (TREE_TYPE (arg1))
3221 == TYPE_PRECISION (TREE_TYPE (arg0)))
3222 && unsigned0 == unsigned1
3223 && (unsigned0 || !uns))
3224 result_type = c_common_signed_or_unsigned_type
3225 (unsigned0, common_type (TREE_TYPE (arg0), TREE_TYPE (arg1)));
3226 else if (TREE_CODE (arg0) == INTEGER_CST
3227 && (unsigned1 || !uns)
3228 && (TYPE_PRECISION (TREE_TYPE (arg1))
3229 < TYPE_PRECISION (result_type))
3230 && (type = c_common_signed_or_unsigned_type
3231 (unsigned1, TREE_TYPE (arg1)),
3232 int_fits_type_p (arg0, type)))
3233 result_type = type;
3234 else if (TREE_CODE (arg1) == INTEGER_CST
3235 && (unsigned0 || !uns)
3236 && (TYPE_PRECISION (TREE_TYPE (arg0))
3237 < TYPE_PRECISION (result_type))
3238 && (type = c_common_signed_or_unsigned_type
3239 (unsigned0, TREE_TYPE (arg0)),
3240 int_fits_type_p (arg1, type)))
3241 result_type = type;
3244 /* Shifts can be shortened if shifting right. */
3246 if (short_shift)
3248 int unsigned_arg;
3249 tree arg0 = get_narrower (op0, &unsigned_arg);
3251 final_type = result_type;
3253 if (arg0 == op0 && final_type == TREE_TYPE (op0))
3254 unsigned_arg = TYPE_UNSIGNED (TREE_TYPE (op0));
3256 if (TYPE_PRECISION (TREE_TYPE (arg0)) < TYPE_PRECISION (result_type)
3257 /* We can shorten only if the shift count is less than the
3258 number of bits in the smaller type size. */
3259 && compare_tree_int (op1, TYPE_PRECISION (TREE_TYPE (arg0))) < 0
3260 /* If arg is sign-extended and then unsigned-shifted,
3261 we can simulate this with a signed shift in arg's type
3262 only if the extended result is at least twice as wide
3263 as the arg. Otherwise, the shift could use up all the
3264 ones made by sign-extension and bring in zeros.
3265 We can't optimize that case at all, but in most machines
3266 it never happens because available widths are 2**N. */
3267 && (!TYPE_UNSIGNED (final_type)
3268 || unsigned_arg
3269 || (((unsigned) 2 * TYPE_PRECISION (TREE_TYPE (arg0)))
3270 <= TYPE_PRECISION (result_type))))
3272 /* Do an unsigned shift if the operand was zero-extended. */
3273 result_type
3274 = c_common_signed_or_unsigned_type (unsigned_arg,
3275 TREE_TYPE (arg0));
3276 /* Convert value-to-be-shifted to that type. */
3277 if (TREE_TYPE (op0) != result_type)
3278 op0 = cp_convert (result_type, op0);
3279 converted = 1;
3283 /* Comparison operations are shortened too but differently.
3284 They identify themselves by setting short_compare = 1. */
3286 if (short_compare)
3288 /* Don't write &op0, etc., because that would prevent op0
3289 from being kept in a register.
3290 Instead, make copies of the our local variables and
3291 pass the copies by reference, then copy them back afterward. */
3292 tree xop0 = op0, xop1 = op1, xresult_type = result_type;
3293 enum tree_code xresultcode = resultcode;
3294 tree val
3295 = shorten_compare (&xop0, &xop1, &xresult_type, &xresultcode);
3296 if (val != 0)
3297 return cp_convert (boolean_type_node, val);
3298 op0 = xop0, op1 = xop1;
3299 converted = 1;
3300 resultcode = xresultcode;
3303 if ((short_compare || code == MIN_EXPR || code == MAX_EXPR)
3304 && warn_sign_compare
3305 /* Do not warn until the template is instantiated; we cannot
3306 bound the ranges of the arguments until that point. */
3307 && !processing_template_decl)
3309 int op0_signed = !TYPE_UNSIGNED (TREE_TYPE (orig_op0));
3310 int op1_signed = !TYPE_UNSIGNED (TREE_TYPE (orig_op1));
3312 int unsignedp0, unsignedp1;
3313 tree primop0 = get_narrower (op0, &unsignedp0);
3314 tree primop1 = get_narrower (op1, &unsignedp1);
3316 /* Check for comparison of different enum types. */
3317 if (TREE_CODE (TREE_TYPE (orig_op0)) == ENUMERAL_TYPE
3318 && TREE_CODE (TREE_TYPE (orig_op1)) == ENUMERAL_TYPE
3319 && TYPE_MAIN_VARIANT (TREE_TYPE (orig_op0))
3320 != TYPE_MAIN_VARIANT (TREE_TYPE (orig_op1)))
3322 warning ("comparison between types %q#T and %q#T",
3323 TREE_TYPE (orig_op0), TREE_TYPE (orig_op1));
3326 /* Give warnings for comparisons between signed and unsigned
3327 quantities that may fail. */
3328 /* Do the checking based on the original operand trees, so that
3329 casts will be considered, but default promotions won't be. */
3331 /* Do not warn if the comparison is being done in a signed type,
3332 since the signed type will only be chosen if it can represent
3333 all the values of the unsigned type. */
3334 if (!TYPE_UNSIGNED (result_type))
3335 /* OK */;
3336 /* Do not warn if both operands are unsigned. */
3337 else if (op0_signed == op1_signed)
3338 /* OK */;
3339 /* Do not warn if the signed quantity is an unsuffixed
3340 integer literal (or some static constant expression
3341 involving such literals or a conditional expression
3342 involving such literals) and it is non-negative. */
3343 else if ((op0_signed && tree_expr_nonnegative_p (orig_op0))
3344 || (op1_signed && tree_expr_nonnegative_p (orig_op1)))
3345 /* OK */;
3346 /* Do not warn if the comparison is an equality operation,
3347 the unsigned quantity is an integral constant and it does
3348 not use the most significant bit of result_type. */
3349 else if ((resultcode == EQ_EXPR || resultcode == NE_EXPR)
3350 && ((op0_signed && TREE_CODE (orig_op1) == INTEGER_CST
3351 && int_fits_type_p (orig_op1, c_common_signed_type
3352 (result_type)))
3353 || (op1_signed && TREE_CODE (orig_op0) == INTEGER_CST
3354 && int_fits_type_p (orig_op0, c_common_signed_type
3355 (result_type)))))
3356 /* OK */;
3357 else
3358 warning ("comparison between signed and unsigned integer expressions");
3360 /* Warn if two unsigned values are being compared in a size
3361 larger than their original size, and one (and only one) is the
3362 result of a `~' operator. This comparison will always fail.
3364 Also warn if one operand is a constant, and the constant does not
3365 have all bits set that are set in the ~ operand when it is
3366 extended. */
3368 if ((TREE_CODE (primop0) == BIT_NOT_EXPR)
3369 ^ (TREE_CODE (primop1) == BIT_NOT_EXPR))
3371 if (TREE_CODE (primop0) == BIT_NOT_EXPR)
3372 primop0 = get_narrower (TREE_OPERAND (op0, 0), &unsignedp0);
3373 if (TREE_CODE (primop1) == BIT_NOT_EXPR)
3374 primop1 = get_narrower (TREE_OPERAND (op1, 0), &unsignedp1);
3376 if (host_integerp (primop0, 0) || host_integerp (primop1, 0))
3378 tree primop;
3379 HOST_WIDE_INT constant, mask;
3380 int unsignedp;
3381 unsigned int bits;
3383 if (host_integerp (primop0, 0))
3385 primop = primop1;
3386 unsignedp = unsignedp1;
3387 constant = tree_low_cst (primop0, 0);
3389 else
3391 primop = primop0;
3392 unsignedp = unsignedp0;
3393 constant = tree_low_cst (primop1, 0);
3396 bits = TYPE_PRECISION (TREE_TYPE (primop));
3397 if (bits < TYPE_PRECISION (result_type)
3398 && bits < HOST_BITS_PER_LONG && unsignedp)
3400 mask = (~ (HOST_WIDE_INT) 0) << bits;
3401 if ((mask & constant) != mask)
3402 warning ("comparison of promoted ~unsigned with constant");
3405 else if (unsignedp0 && unsignedp1
3406 && (TYPE_PRECISION (TREE_TYPE (primop0))
3407 < TYPE_PRECISION (result_type))
3408 && (TYPE_PRECISION (TREE_TYPE (primop1))
3409 < TYPE_PRECISION (result_type)))
3410 warning ("comparison of promoted ~unsigned with unsigned");
3415 /* If CONVERTED is zero, both args will be converted to type RESULT_TYPE.
3416 Then the expression will be built.
3417 It will be given type FINAL_TYPE if that is nonzero;
3418 otherwise, it will be given type RESULT_TYPE. */
3420 /* Issue warnings about peculiar, but valid, uses of NULL. */
3421 if (/* It's reasonable to use pointer values as operands of &&
3422 and ||, so NULL is no exception. */
3423 !(code == TRUTH_ANDIF_EXPR || code == TRUTH_ORIF_EXPR)
3424 && (/* If OP0 is NULL and OP1 is not a pointer, or vice versa. */
3425 (orig_op0 == null_node
3426 && TREE_CODE (TREE_TYPE (op1)) != POINTER_TYPE)
3427 /* Or vice versa. */
3428 || (orig_op1 == null_node
3429 && TREE_CODE (TREE_TYPE (op0)) != POINTER_TYPE)
3430 /* Or, both are NULL and the operation was not a comparison. */
3431 || (orig_op0 == null_node && orig_op1 == null_node
3432 && code != EQ_EXPR && code != NE_EXPR)))
3433 /* Some sort of arithmetic operation involving NULL was
3434 performed. Note that pointer-difference and pointer-addition
3435 have already been handled above, and so we don't end up here in
3436 that case. */
3437 warning ("NULL used in arithmetic");
3439 if (! converted)
3441 if (TREE_TYPE (op0) != result_type)
3442 op0 = cp_convert (result_type, op0);
3443 if (TREE_TYPE (op1) != result_type)
3444 op1 = cp_convert (result_type, op1);
3446 if (op0 == error_mark_node || op1 == error_mark_node)
3447 return error_mark_node;
3450 if (build_type == NULL_TREE)
3451 build_type = result_type;
3453 result = build2 (resultcode, build_type, op0, op1);
3454 result = fold_if_not_in_template (result);
3455 if (final_type != 0)
3456 result = cp_convert (final_type, result);
3457 return result;
3460 /* Return a tree for the sum or difference (RESULTCODE says which)
3461 of pointer PTROP and integer INTOP. */
3463 static tree
3464 cp_pointer_int_sum (enum tree_code resultcode, tree ptrop, tree intop)
3466 tree res_type = TREE_TYPE (ptrop);
3468 /* pointer_int_sum() uses size_in_bytes() on the TREE_TYPE(res_type)
3469 in certain circumstance (when it's valid to do so). So we need
3470 to make sure it's complete. We don't need to check here, if we
3471 can actually complete it at all, as those checks will be done in
3472 pointer_int_sum() anyway. */
3473 complete_type (TREE_TYPE (res_type));
3475 return pointer_int_sum (resultcode, ptrop,
3476 fold_if_not_in_template (intop));
3479 /* Return a tree for the difference of pointers OP0 and OP1.
3480 The resulting tree has type int. */
3482 static tree
3483 pointer_diff (tree op0, tree op1, tree ptrtype)
3485 tree result;
3486 tree restype = ptrdiff_type_node;
3487 tree target_type = TREE_TYPE (ptrtype);
3489 if (!complete_type_or_else (target_type, NULL_TREE))
3490 return error_mark_node;
3492 if (pedantic || warn_pointer_arith)
3494 if (TREE_CODE (target_type) == VOID_TYPE)
3495 pedwarn ("ISO C++ forbids using pointer of type %<void *%> in subtraction");
3496 if (TREE_CODE (target_type) == FUNCTION_TYPE)
3497 pedwarn ("ISO C++ forbids using pointer to a function in subtraction");
3498 if (TREE_CODE (target_type) == METHOD_TYPE)
3499 pedwarn ("ISO C++ forbids using pointer to a method in subtraction");
3502 /* First do the subtraction as integers;
3503 then drop through to build the divide operator. */
3505 op0 = cp_build_binary_op (MINUS_EXPR,
3506 cp_convert (restype, op0),
3507 cp_convert (restype, op1));
3509 /* This generates an error if op1 is a pointer to an incomplete type. */
3510 if (!COMPLETE_TYPE_P (TREE_TYPE (TREE_TYPE (op1))))
3511 error ("invalid use of a pointer to an incomplete type in pointer arithmetic");
3513 op1 = (TYPE_PTROB_P (ptrtype)
3514 ? size_in_bytes (target_type)
3515 : integer_one_node);
3517 /* Do the division. */
3519 result = build2 (EXACT_DIV_EXPR, restype, op0, cp_convert (restype, op1));
3520 return fold_if_not_in_template (result);
3523 /* Construct and perhaps optimize a tree representation
3524 for a unary operation. CODE, a tree_code, specifies the operation
3525 and XARG is the operand. */
3527 tree
3528 build_x_unary_op (enum tree_code code, tree xarg)
3530 tree orig_expr = xarg;
3531 tree exp;
3532 int ptrmem = 0;
3534 if (processing_template_decl)
3536 if (type_dependent_expression_p (xarg))
3537 return build_min_nt (code, xarg, NULL_TREE);
3539 /* For non-dependent pointer-to-member, the SCOPE_REF will be
3540 processed during template substitution. Just compute the
3541 right type here and build an ADDR_EXPR around it for
3542 diagnostics. */
3543 if (code == ADDR_EXPR && TREE_CODE (xarg) == SCOPE_REF)
3545 tree type;
3546 if (TREE_TYPE (xarg) == unknown_type_node)
3547 type = unknown_type_node;
3548 else if (TREE_CODE (TREE_TYPE (xarg)) == FUNCTION_TYPE)
3549 type = build_pointer_type (TREE_TYPE (xarg));
3550 else
3551 type = build_ptrmem_type (TREE_OPERAND (xarg, 0),
3552 TREE_TYPE (xarg));
3553 return build_min (code, type, xarg, NULL_TREE);
3556 xarg = build_non_dependent_expr (xarg);
3559 exp = NULL_TREE;
3561 /* [expr.unary.op] says:
3563 The address of an object of incomplete type can be taken.
3565 (And is just the ordinary address operator, not an overloaded
3566 "operator &".) However, if the type is a template
3567 specialization, we must complete the type at this point so that
3568 an overloaded "operator &" will be available if required. */
3569 if (code == ADDR_EXPR
3570 && TREE_CODE (xarg) != TEMPLATE_ID_EXPR
3571 && ((CLASS_TYPE_P (TREE_TYPE (xarg))
3572 && !COMPLETE_TYPE_P (complete_type (TREE_TYPE (xarg))))
3573 || (TREE_CODE (xarg) == OFFSET_REF)))
3574 /* Don't look for a function. */;
3575 else
3576 exp = build_new_op (code, LOOKUP_NORMAL, xarg, NULL_TREE, NULL_TREE,
3577 /*overloaded_p=*/NULL);
3578 if (!exp && code == ADDR_EXPR)
3580 /* A pointer to member-function can be formed only by saying
3581 &X::mf. */
3582 if (!flag_ms_extensions && TREE_CODE (TREE_TYPE (xarg)) == METHOD_TYPE
3583 && (TREE_CODE (xarg) != OFFSET_REF || !PTRMEM_OK_P (xarg)))
3585 if (TREE_CODE (xarg) != OFFSET_REF)
3587 error ("invalid use of %qE to form a pointer-to-member-function."
3588 " Use a qualified-id.",
3589 xarg);
3590 return error_mark_node;
3592 else
3594 error ("parenthesis around %qE cannot be used to form a"
3595 " pointer-to-member-function",
3596 xarg);
3597 PTRMEM_OK_P (xarg) = 1;
3601 if (TREE_CODE (xarg) == OFFSET_REF)
3603 ptrmem = PTRMEM_OK_P (xarg);
3605 if (!ptrmem && !flag_ms_extensions
3606 && TREE_CODE (TREE_TYPE (TREE_OPERAND (xarg, 1))) == METHOD_TYPE)
3608 /* A single non-static member, make sure we don't allow a
3609 pointer-to-member. */
3610 xarg = build2 (OFFSET_REF, TREE_TYPE (xarg),
3611 TREE_OPERAND (xarg, 0),
3612 ovl_cons (TREE_OPERAND (xarg, 1), NULL_TREE));
3613 PTRMEM_OK_P (xarg) = ptrmem;
3616 else if (TREE_CODE (xarg) == TARGET_EXPR)
3617 warning ("taking address of temporary");
3618 exp = build_unary_op (ADDR_EXPR, xarg, 0);
3619 if (TREE_CODE (exp) == ADDR_EXPR)
3620 PTRMEM_OK_P (exp) = ptrmem;
3623 if (processing_template_decl && exp != error_mark_node)
3624 return build_min_non_dep (code, exp, orig_expr,
3625 /*For {PRE,POST}{INC,DEC}REMENT_EXPR*/NULL_TREE);
3626 return exp;
3629 /* Like c_common_truthvalue_conversion, but handle pointer-to-member
3630 constants, where a null value is represented by an INTEGER_CST of
3631 -1. */
3633 tree
3634 cp_truthvalue_conversion (tree expr)
3636 tree type = TREE_TYPE (expr);
3637 if (TYPE_PTRMEM_P (type))
3638 return build_binary_op (NE_EXPR, expr, integer_zero_node, 1);
3639 else
3640 return c_common_truthvalue_conversion (expr);
3643 /* Just like cp_truthvalue_conversion, but we want a CLEANUP_POINT_EXPR. */
3645 tree
3646 condition_conversion (tree expr)
3648 tree t;
3649 if (processing_template_decl)
3650 return expr;
3651 t = perform_implicit_conversion (boolean_type_node, expr);
3652 t = fold_build_cleanup_point_expr (boolean_type_node, t);
3653 return t;
3656 /* Return an ADDR_EXPR giving the address of T. This function
3657 attempts no optimizations or simplifications; it is a low-level
3658 primitive. */
3660 tree
3661 build_address (tree t)
3663 tree addr;
3665 if (error_operand_p (t) || !cxx_mark_addressable (t))
3666 return error_mark_node;
3668 addr = build1 (ADDR_EXPR, build_pointer_type (TREE_TYPE (t)), t);
3670 return addr;
3673 /* Return a NOP_EXPR converting EXPR to TYPE. */
3675 tree
3676 build_nop (tree type, tree expr)
3678 if (type == error_mark_node || error_operand_p (expr))
3679 return expr;
3680 return build1 (NOP_EXPR, type, expr);
3683 /* C++: Must handle pointers to members.
3685 Perhaps type instantiation should be extended to handle conversion
3686 from aggregates to types we don't yet know we want? (Or are those
3687 cases typically errors which should be reported?)
3689 NOCONVERT nonzero suppresses the default promotions
3690 (such as from short to int). */
3692 tree
3693 build_unary_op (enum tree_code code, tree xarg, int noconvert)
3695 /* No default_conversion here. It causes trouble for ADDR_EXPR. */
3696 tree arg = xarg;
3697 tree argtype = 0;
3698 const char *errstring = NULL;
3699 tree val;
3701 if (arg == error_mark_node)
3702 return error_mark_node;
3704 switch (code)
3706 /* CONVERT_EXPR stands for unary plus in this context. */
3707 case CONVERT_EXPR:
3708 case NEGATE_EXPR:
3710 int flags = WANT_ARITH | WANT_ENUM;
3711 /* Unary plus (but not unary minus) is allowed on pointers. */
3712 if (code == CONVERT_EXPR)
3713 flags |= WANT_POINTER;
3714 arg = build_expr_type_conversion (flags, arg, true);
3715 if (!arg)
3716 errstring = (code == NEGATE_EXPR
3717 ? "wrong type argument to unary minus"
3718 : "wrong type argument to unary plus");
3719 else
3721 if (!noconvert && CP_INTEGRAL_TYPE_P (TREE_TYPE (arg)))
3722 arg = perform_integral_promotions (arg);
3724 /* Make sure the result is not a lvalue: a unary plus or minus
3725 expression is always a rvalue. */
3726 if (real_lvalue_p (arg))
3727 arg = build1 (NON_LVALUE_EXPR, TREE_TYPE (arg), arg);
3730 break;
3732 case BIT_NOT_EXPR:
3733 if (TREE_CODE (TREE_TYPE (arg)) == COMPLEX_TYPE)
3735 code = CONJ_EXPR;
3736 if (!noconvert)
3737 arg = default_conversion (arg);
3739 else if (!(arg = build_expr_type_conversion (WANT_INT | WANT_ENUM,
3740 arg, true)))
3741 errstring = "wrong type argument to bit-complement";
3742 else if (!noconvert)
3743 arg = perform_integral_promotions (arg);
3744 break;
3746 case ABS_EXPR:
3747 if (!(arg = build_expr_type_conversion (WANT_ARITH | WANT_ENUM, arg, true)))
3748 errstring = "wrong type argument to abs";
3749 else if (!noconvert)
3750 arg = default_conversion (arg);
3751 break;
3753 case CONJ_EXPR:
3754 /* Conjugating a real value is a no-op, but allow it anyway. */
3755 if (!(arg = build_expr_type_conversion (WANT_ARITH | WANT_ENUM, arg, true)))
3756 errstring = "wrong type argument to conjugation";
3757 else if (!noconvert)
3758 arg = default_conversion (arg);
3759 break;
3761 case TRUTH_NOT_EXPR:
3762 arg = perform_implicit_conversion (boolean_type_node, arg);
3763 val = invert_truthvalue (arg);
3764 if (arg != error_mark_node)
3765 return val;
3766 errstring = "in argument to unary !";
3767 break;
3769 case NOP_EXPR:
3770 break;
3772 case REALPART_EXPR:
3773 if (TREE_CODE (arg) == COMPLEX_CST)
3774 return TREE_REALPART (arg);
3775 else if (TREE_CODE (TREE_TYPE (arg)) == COMPLEX_TYPE)
3777 arg = build1 (REALPART_EXPR, TREE_TYPE (TREE_TYPE (arg)), arg);
3778 return fold_if_not_in_template (arg);
3780 else
3781 return arg;
3783 case IMAGPART_EXPR:
3784 if (TREE_CODE (arg) == COMPLEX_CST)
3785 return TREE_IMAGPART (arg);
3786 else if (TREE_CODE (TREE_TYPE (arg)) == COMPLEX_TYPE)
3788 arg = build1 (IMAGPART_EXPR, TREE_TYPE (TREE_TYPE (arg)), arg);
3789 return fold_if_not_in_template (arg);
3791 else
3792 return cp_convert (TREE_TYPE (arg), integer_zero_node);
3794 case PREINCREMENT_EXPR:
3795 case POSTINCREMENT_EXPR:
3796 case PREDECREMENT_EXPR:
3797 case POSTDECREMENT_EXPR:
3798 /* Handle complex lvalues (when permitted)
3799 by reduction to simpler cases. */
3801 val = unary_complex_lvalue (code, arg);
3802 if (val != 0)
3803 return val;
3805 /* Increment or decrement the real part of the value,
3806 and don't change the imaginary part. */
3807 if (TREE_CODE (TREE_TYPE (arg)) == COMPLEX_TYPE)
3809 tree real, imag;
3811 arg = stabilize_reference (arg);
3812 real = build_unary_op (REALPART_EXPR, arg, 1);
3813 imag = build_unary_op (IMAGPART_EXPR, arg, 1);
3814 return build2 (COMPLEX_EXPR, TREE_TYPE (arg),
3815 build_unary_op (code, real, 1), imag);
3818 /* Report invalid types. */
3820 if (!(arg = build_expr_type_conversion (WANT_ARITH | WANT_POINTER,
3821 arg, true)))
3823 if (code == PREINCREMENT_EXPR)
3824 errstring ="no pre-increment operator for type";
3825 else if (code == POSTINCREMENT_EXPR)
3826 errstring ="no post-increment operator for type";
3827 else if (code == PREDECREMENT_EXPR)
3828 errstring ="no pre-decrement operator for type";
3829 else
3830 errstring ="no post-decrement operator for type";
3831 break;
3834 /* Report something read-only. */
3836 if (CP_TYPE_CONST_P (TREE_TYPE (arg))
3837 || TREE_READONLY (arg))
3838 readonly_error (arg, ((code == PREINCREMENT_EXPR
3839 || code == POSTINCREMENT_EXPR)
3840 ? "increment" : "decrement"),
3844 tree inc;
3845 tree result_type = TREE_TYPE (arg);
3847 arg = get_unwidened (arg, 0);
3848 argtype = TREE_TYPE (arg);
3850 /* ARM $5.2.5 last annotation says this should be forbidden. */
3851 if (TREE_CODE (argtype) == ENUMERAL_TYPE)
3852 pedwarn ("ISO C++ forbids %sing an enum",
3853 (code == PREINCREMENT_EXPR || code == POSTINCREMENT_EXPR)
3854 ? "increment" : "decrement");
3856 /* Compute the increment. */
3858 if (TREE_CODE (argtype) == POINTER_TYPE)
3860 tree type = complete_type (TREE_TYPE (argtype));
3862 if (!COMPLETE_OR_VOID_TYPE_P (type))
3863 error ("cannot %s a pointer to incomplete type %qT",
3864 ((code == PREINCREMENT_EXPR
3865 || code == POSTINCREMENT_EXPR)
3866 ? "increment" : "decrement"), TREE_TYPE (argtype));
3867 else if ((pedantic || warn_pointer_arith)
3868 && !TYPE_PTROB_P (argtype))
3869 pedwarn ("ISO C++ forbids %sing a pointer of type %qT",
3870 ((code == PREINCREMENT_EXPR
3871 || code == POSTINCREMENT_EXPR)
3872 ? "increment" : "decrement"), argtype);
3873 inc = cxx_sizeof_nowarn (TREE_TYPE (argtype));
3875 else
3876 inc = integer_one_node;
3878 inc = cp_convert (argtype, inc);
3880 /* Handle incrementing a cast-expression. */
3882 switch (TREE_CODE (arg))
3884 case NOP_EXPR:
3885 case CONVERT_EXPR:
3886 case FLOAT_EXPR:
3887 case FIX_TRUNC_EXPR:
3888 case FIX_FLOOR_EXPR:
3889 case FIX_ROUND_EXPR:
3890 case FIX_CEIL_EXPR:
3892 tree incremented, modify, value, compound;
3893 if (! lvalue_p (arg) && pedantic)
3894 pedwarn ("cast to non-reference type used as lvalue");
3895 arg = stabilize_reference (arg);
3896 if (code == PREINCREMENT_EXPR || code == PREDECREMENT_EXPR)
3897 value = arg;
3898 else
3899 value = save_expr (arg);
3900 incremented = build2 (((code == PREINCREMENT_EXPR
3901 || code == POSTINCREMENT_EXPR)
3902 ? PLUS_EXPR : MINUS_EXPR),
3903 argtype, value, inc);
3905 modify = build_modify_expr (arg, NOP_EXPR, incremented);
3906 compound = build2 (COMPOUND_EXPR, TREE_TYPE (arg),
3907 modify, value);
3909 /* Eliminate warning about unused result of + or -. */
3910 TREE_NO_WARNING (compound) = 1;
3911 return compound;
3914 default:
3915 break;
3918 /* Complain about anything else that is not a true lvalue. */
3919 if (!lvalue_or_else (arg, ((code == PREINCREMENT_EXPR
3920 || code == POSTINCREMENT_EXPR)
3921 ? lv_increment : lv_decrement)))
3922 return error_mark_node;
3924 /* Forbid using -- on `bool'. */
3925 if (TREE_TYPE (arg) == boolean_type_node)
3927 if (code == POSTDECREMENT_EXPR || code == PREDECREMENT_EXPR)
3929 error ("invalid use of %<--%> on bool variable %qD", arg);
3930 return error_mark_node;
3932 val = boolean_increment (code, arg);
3934 else
3935 val = build2 (code, TREE_TYPE (arg), arg, inc);
3937 TREE_SIDE_EFFECTS (val) = 1;
3938 return cp_convert (result_type, val);
3941 case ADDR_EXPR:
3942 /* Note that this operation never does default_conversion
3943 regardless of NOCONVERT. */
3945 argtype = lvalue_type (arg);
3947 if (TREE_CODE (arg) == OFFSET_REF)
3948 goto offset_ref;
3950 if (TREE_CODE (argtype) == REFERENCE_TYPE)
3952 tree type = build_pointer_type (TREE_TYPE (argtype));
3953 arg = build1 (CONVERT_EXPR, type, arg);
3954 return arg;
3956 else if (pedantic && DECL_MAIN_P (arg))
3957 /* ARM $3.4 */
3958 pedwarn ("ISO C++ forbids taking address of function %<::main%>");
3960 /* Let &* cancel out to simplify resulting code. */
3961 if (TREE_CODE (arg) == INDIRECT_REF)
3963 /* We don't need to have `current_class_ptr' wrapped in a
3964 NON_LVALUE_EXPR node. */
3965 if (arg == current_class_ref)
3966 return current_class_ptr;
3968 arg = TREE_OPERAND (arg, 0);
3969 if (TREE_CODE (TREE_TYPE (arg)) == REFERENCE_TYPE)
3971 tree type = build_pointer_type (TREE_TYPE (TREE_TYPE (arg)));
3972 arg = build1 (CONVERT_EXPR, type, arg);
3974 else if (lvalue_p (arg))
3975 /* Don't let this be an lvalue. */
3976 return non_lvalue (arg);
3977 return arg;
3980 /* Uninstantiated types are all functions. Taking the
3981 address of a function is a no-op, so just return the
3982 argument. */
3984 gcc_assert (TREE_CODE (arg) != IDENTIFIER_NODE
3985 || !IDENTIFIER_OPNAME_P (arg));
3987 if (TREE_CODE (arg) == COMPONENT_REF && type_unknown_p (arg)
3988 && !really_overloaded_fn (TREE_OPERAND (arg, 1)))
3990 /* They're trying to take the address of a unique non-static
3991 member function. This is ill-formed (except in MS-land),
3992 but let's try to DTRT.
3993 Note: We only handle unique functions here because we don't
3994 want to complain if there's a static overload; non-unique
3995 cases will be handled by instantiate_type. But we need to
3996 handle this case here to allow casts on the resulting PMF.
3997 We could defer this in non-MS mode, but it's easier to give
3998 a useful error here. */
4000 /* Inside constant member functions, the `this' pointer
4001 contains an extra const qualifier. TYPE_MAIN_VARIANT
4002 is used here to remove this const from the diagnostics
4003 and the created OFFSET_REF. */
4004 tree base = TYPE_MAIN_VARIANT (TREE_TYPE (TREE_OPERAND (arg, 0)));
4005 tree name = DECL_NAME (get_first_fn (TREE_OPERAND (arg, 1)));
4007 if (! flag_ms_extensions)
4009 if (current_class_type
4010 && TREE_OPERAND (arg, 0) == current_class_ref)
4011 /* An expression like &memfn. */
4012 pedwarn ("ISO C++ forbids taking the address of an unqualified"
4013 " or parenthesized non-static member function to form"
4014 " a pointer to member function. Say %<&%T::%D%>",
4015 base, name);
4016 else
4017 pedwarn ("ISO C++ forbids taking the address of a bound member"
4018 " function to form a pointer to member function."
4019 " Say %<&%T::%D%>",
4020 base, name);
4022 arg = build_offset_ref (base, name, /*address_p=*/true);
4025 offset_ref:
4026 if (type_unknown_p (arg))
4027 return build1 (ADDR_EXPR, unknown_type_node, arg);
4029 /* Handle complex lvalues (when permitted)
4030 by reduction to simpler cases. */
4031 val = unary_complex_lvalue (code, arg);
4032 if (val != 0)
4033 return val;
4035 switch (TREE_CODE (arg))
4037 case NOP_EXPR:
4038 case CONVERT_EXPR:
4039 case FLOAT_EXPR:
4040 case FIX_TRUNC_EXPR:
4041 case FIX_FLOOR_EXPR:
4042 case FIX_ROUND_EXPR:
4043 case FIX_CEIL_EXPR:
4044 if (! lvalue_p (arg) && pedantic)
4045 pedwarn ("ISO C++ forbids taking the address of a cast to a non-lvalue expression");
4046 break;
4048 case OVERLOAD:
4049 arg = OVL_CURRENT (arg);
4050 break;
4052 default:
4053 break;
4056 /* Allow the address of a constructor if all the elements
4057 are constant. */
4058 if (TREE_CODE (arg) == CONSTRUCTOR && TREE_HAS_CONSTRUCTOR (arg)
4059 && TREE_CONSTANT (arg))
4061 /* Anything not already handled and not a true memory reference
4062 is an error. */
4063 else if (TREE_CODE (argtype) != FUNCTION_TYPE
4064 && TREE_CODE (argtype) != METHOD_TYPE
4065 && !lvalue_or_else (arg, lv_addressof))
4066 return error_mark_node;
4068 if (argtype != error_mark_node)
4069 argtype = build_pointer_type (argtype);
4072 tree addr;
4074 if (TREE_CODE (arg) != COMPONENT_REF
4075 /* Inside a template, we are processing a non-dependent
4076 expression so we can just form an ADDR_EXPR with the
4077 correct type. */
4078 || processing_template_decl)
4079 addr = build_address (arg);
4080 else if (TREE_CODE (TREE_OPERAND (arg, 1)) == BASELINK)
4082 tree fn = BASELINK_FUNCTIONS (TREE_OPERAND (arg, 1));
4084 /* We can only get here with a single static member
4085 function. */
4086 gcc_assert (TREE_CODE (fn) == FUNCTION_DECL
4087 && DECL_STATIC_FUNCTION_P (fn));
4088 mark_used (fn);
4089 addr = build_address (fn);
4090 if (TREE_SIDE_EFFECTS (TREE_OPERAND (arg, 0)))
4091 /* Do not lose object's side effects. */
4092 addr = build2 (COMPOUND_EXPR, TREE_TYPE (addr),
4093 TREE_OPERAND (arg, 0), addr);
4095 else if (DECL_C_BIT_FIELD (TREE_OPERAND (arg, 1)))
4097 error ("attempt to take address of bit-field structure member %qD",
4098 TREE_OPERAND (arg, 1));
4099 return error_mark_node;
4101 else
4103 tree field = TREE_OPERAND (arg, 1);
4104 tree rval = build_unary_op (ADDR_EXPR, TREE_OPERAND (arg, 0), 0);
4105 tree binfo = lookup_base (TREE_TYPE (TREE_TYPE (rval)),
4106 decl_type_context (field),
4107 ba_check, NULL);
4109 rval = build_base_path (PLUS_EXPR, rval, binfo, 1);
4111 TREE_OPERAND (arg, 0) = build_indirect_ref (rval, NULL);
4112 addr = build_address (arg);
4115 if (TREE_CODE (argtype) == POINTER_TYPE
4116 && TREE_CODE (TREE_TYPE (argtype)) == METHOD_TYPE)
4118 build_ptrmemfunc_type (argtype);
4119 addr = build_ptrmemfunc (argtype, addr, 0,
4120 /*c_cast_p=*/false);
4123 return addr;
4126 default:
4127 break;
4130 if (!errstring)
4132 if (argtype == 0)
4133 argtype = TREE_TYPE (arg);
4134 return fold_if_not_in_template (build1 (code, argtype, arg));
4137 error ("%s", errstring);
4138 return error_mark_node;
4141 /* Apply unary lvalue-demanding operator CODE to the expression ARG
4142 for certain kinds of expressions which are not really lvalues
4143 but which we can accept as lvalues.
4145 If ARG is not a kind of expression we can handle, return
4146 NULL_TREE. */
4148 tree
4149 unary_complex_lvalue (enum tree_code code, tree arg)
4151 /* Inside a template, making these kinds of adjustments is
4152 pointless; we are only concerned with the type of the
4153 expression. */
4154 if (processing_template_decl)
4155 return NULL_TREE;
4157 /* Handle (a, b) used as an "lvalue". */
4158 if (TREE_CODE (arg) == COMPOUND_EXPR)
4160 tree real_result = build_unary_op (code, TREE_OPERAND (arg, 1), 0);
4161 return build2 (COMPOUND_EXPR, TREE_TYPE (real_result),
4162 TREE_OPERAND (arg, 0), real_result);
4165 /* Handle (a ? b : c) used as an "lvalue". */
4166 if (TREE_CODE (arg) == COND_EXPR
4167 || TREE_CODE (arg) == MIN_EXPR || TREE_CODE (arg) == MAX_EXPR)
4168 return rationalize_conditional_expr (code, arg);
4170 /* Handle (a = b), (++a), and (--a) used as an "lvalue". */
4171 if (TREE_CODE (arg) == MODIFY_EXPR
4172 || TREE_CODE (arg) == PREINCREMENT_EXPR
4173 || TREE_CODE (arg) == PREDECREMENT_EXPR)
4175 tree lvalue = TREE_OPERAND (arg, 0);
4176 if (TREE_SIDE_EFFECTS (lvalue))
4178 lvalue = stabilize_reference (lvalue);
4179 arg = build2 (TREE_CODE (arg), TREE_TYPE (arg),
4180 lvalue, TREE_OPERAND (arg, 1));
4182 return unary_complex_lvalue
4183 (code, build2 (COMPOUND_EXPR, TREE_TYPE (lvalue), arg, lvalue));
4186 if (code != ADDR_EXPR)
4187 return 0;
4189 /* Handle (a = b) used as an "lvalue" for `&'. */
4190 if (TREE_CODE (arg) == MODIFY_EXPR
4191 || TREE_CODE (arg) == INIT_EXPR)
4193 tree real_result = build_unary_op (code, TREE_OPERAND (arg, 0), 0);
4194 arg = build2 (COMPOUND_EXPR, TREE_TYPE (real_result),
4195 arg, real_result);
4196 TREE_NO_WARNING (arg) = 1;
4197 return arg;
4200 if (TREE_CODE (TREE_TYPE (arg)) == FUNCTION_TYPE
4201 || TREE_CODE (TREE_TYPE (arg)) == METHOD_TYPE
4202 || TREE_CODE (arg) == OFFSET_REF)
4204 tree t;
4206 gcc_assert (TREE_CODE (arg) != SCOPE_REF);
4208 if (TREE_CODE (arg) != OFFSET_REF)
4209 return 0;
4211 t = TREE_OPERAND (arg, 1);
4213 /* Check all this code for right semantics. */
4214 if (TREE_CODE (t) == FUNCTION_DECL)
4216 if (DECL_DESTRUCTOR_P (t))
4217 error ("taking address of destructor");
4218 return build_unary_op (ADDR_EXPR, t, 0);
4220 if (TREE_CODE (t) == VAR_DECL)
4221 return build_unary_op (ADDR_EXPR, t, 0);
4222 else
4224 tree type;
4226 if (TREE_OPERAND (arg, 0)
4227 && ! is_dummy_object (TREE_OPERAND (arg, 0))
4228 && TREE_CODE (t) != FIELD_DECL)
4230 error ("taking address of bound pointer-to-member expression");
4231 return error_mark_node;
4233 if (!PTRMEM_OK_P (arg))
4234 return build_unary_op (code, arg, 0);
4236 if (TREE_CODE (TREE_TYPE (t)) == REFERENCE_TYPE)
4238 error ("cannot create pointer to reference member %qD", t);
4239 return error_mark_node;
4242 type = build_ptrmem_type (context_for_name_lookup (t),
4243 TREE_TYPE (t));
4244 t = make_ptrmem_cst (type, TREE_OPERAND (arg, 1));
4245 return t;
4250 /* We permit compiler to make function calls returning
4251 objects of aggregate type look like lvalues. */
4253 tree targ = arg;
4255 if (TREE_CODE (targ) == SAVE_EXPR)
4256 targ = TREE_OPERAND (targ, 0);
4258 if (TREE_CODE (targ) == CALL_EXPR && IS_AGGR_TYPE (TREE_TYPE (targ)))
4260 if (TREE_CODE (arg) == SAVE_EXPR)
4261 targ = arg;
4262 else
4263 targ = build_cplus_new (TREE_TYPE (arg), arg);
4264 return build1 (ADDR_EXPR, build_pointer_type (TREE_TYPE (arg)), targ);
4267 if (TREE_CODE (arg) == SAVE_EXPR && TREE_CODE (targ) == INDIRECT_REF)
4268 return build3 (SAVE_EXPR, build_pointer_type (TREE_TYPE (arg)),
4269 TREE_OPERAND (targ, 0), current_function_decl, NULL);
4272 /* Don't let anything else be handled specially. */
4273 return 0;
4276 /* Mark EXP saying that we need to be able to take the
4277 address of it; it should not be allocated in a register.
4278 Value is true if successful.
4280 C++: we do not allow `current_class_ptr' to be addressable. */
4282 bool
4283 cxx_mark_addressable (tree exp)
4285 tree x = exp;
4287 while (1)
4288 switch (TREE_CODE (x))
4290 case ADDR_EXPR:
4291 case COMPONENT_REF:
4292 case ARRAY_REF:
4293 case REALPART_EXPR:
4294 case IMAGPART_EXPR:
4295 x = TREE_OPERAND (x, 0);
4296 break;
4298 case PARM_DECL:
4299 if (x == current_class_ptr)
4301 error ("cannot take the address of %<this%>, which is an rvalue expression");
4302 TREE_ADDRESSABLE (x) = 1; /* so compiler doesn't die later. */
4303 return true;
4305 /* Fall through. */
4307 case VAR_DECL:
4308 /* Caller should not be trying to mark initialized
4309 constant fields addressable. */
4310 gcc_assert (DECL_LANG_SPECIFIC (x) == 0
4311 || DECL_IN_AGGR_P (x) == 0
4312 || TREE_STATIC (x)
4313 || DECL_EXTERNAL (x));
4314 /* Fall through. */
4316 case CONST_DECL:
4317 case RESULT_DECL:
4318 if (DECL_REGISTER (x) && !TREE_ADDRESSABLE (x)
4319 && !DECL_ARTIFICIAL (x))
4321 if (DECL_HARD_REGISTER (x) != 0)
4323 error
4324 ("address of explicit register variable %qD requested", x);
4325 return false;
4327 else if (extra_warnings)
4328 warning
4329 ("address requested for %qD, which is declared %<register%>", x);
4331 TREE_ADDRESSABLE (x) = 1;
4332 return true;
4334 case FUNCTION_DECL:
4335 TREE_ADDRESSABLE (x) = 1;
4336 return true;
4338 case CONSTRUCTOR:
4339 TREE_ADDRESSABLE (x) = 1;
4340 return true;
4342 case TARGET_EXPR:
4343 TREE_ADDRESSABLE (x) = 1;
4344 cxx_mark_addressable (TREE_OPERAND (x, 0));
4345 return true;
4347 default:
4348 return true;
4352 /* Build and return a conditional expression IFEXP ? OP1 : OP2. */
4354 tree
4355 build_x_conditional_expr (tree ifexp, tree op1, tree op2)
4357 tree orig_ifexp = ifexp;
4358 tree orig_op1 = op1;
4359 tree orig_op2 = op2;
4360 tree expr;
4362 if (processing_template_decl)
4364 /* The standard says that the expression is type-dependent if
4365 IFEXP is type-dependent, even though the eventual type of the
4366 expression doesn't dependent on IFEXP. */
4367 if (type_dependent_expression_p (ifexp)
4368 /* As a GNU extension, the middle operand may be omitted. */
4369 || (op1 && type_dependent_expression_p (op1))
4370 || type_dependent_expression_p (op2))
4371 return build_min_nt (COND_EXPR, ifexp, op1, op2);
4372 ifexp = build_non_dependent_expr (ifexp);
4373 if (op1)
4374 op1 = build_non_dependent_expr (op1);
4375 op2 = build_non_dependent_expr (op2);
4378 expr = build_conditional_expr (ifexp, op1, op2);
4379 if (processing_template_decl && expr != error_mark_node)
4380 return build_min_non_dep (COND_EXPR, expr,
4381 orig_ifexp, orig_op1, orig_op2);
4382 return expr;
4385 /* Given a list of expressions, return a compound expression
4386 that performs them all and returns the value of the last of them. */
4388 tree build_x_compound_expr_from_list (tree list, const char *msg)
4390 tree expr = TREE_VALUE (list);
4392 if (TREE_CHAIN (list))
4394 if (msg)
4395 pedwarn ("%s expression list treated as compound expression", msg);
4397 for (list = TREE_CHAIN (list); list; list = TREE_CHAIN (list))
4398 expr = build_x_compound_expr (expr, TREE_VALUE (list));
4401 return expr;
4404 /* Handle overloading of the ',' operator when needed. */
4406 tree
4407 build_x_compound_expr (tree op1, tree op2)
4409 tree result;
4410 tree orig_op1 = op1;
4411 tree orig_op2 = op2;
4413 if (processing_template_decl)
4415 if (type_dependent_expression_p (op1)
4416 || type_dependent_expression_p (op2))
4417 return build_min_nt (COMPOUND_EXPR, op1, op2);
4418 op1 = build_non_dependent_expr (op1);
4419 op2 = build_non_dependent_expr (op2);
4422 result = build_new_op (COMPOUND_EXPR, LOOKUP_NORMAL, op1, op2, NULL_TREE,
4423 /*overloaded_p=*/NULL);
4424 if (!result)
4425 result = build_compound_expr (op1, op2);
4427 if (processing_template_decl && result != error_mark_node)
4428 return build_min_non_dep (COMPOUND_EXPR, result, orig_op1, orig_op2);
4430 return result;
4433 /* Build a compound expression. */
4435 tree
4436 build_compound_expr (tree lhs, tree rhs)
4438 lhs = convert_to_void (lhs, "left-hand operand of comma");
4440 if (lhs == error_mark_node || rhs == error_mark_node)
4441 return error_mark_node;
4443 if (TREE_CODE (rhs) == TARGET_EXPR)
4445 /* If the rhs is a TARGET_EXPR, then build the compound
4446 expression inside the target_expr's initializer. This
4447 helps the compiler to eliminate unnecessary temporaries. */
4448 tree init = TREE_OPERAND (rhs, 1);
4450 init = build2 (COMPOUND_EXPR, TREE_TYPE (init), lhs, init);
4451 TREE_OPERAND (rhs, 1) = init;
4453 return rhs;
4456 return build2 (COMPOUND_EXPR, TREE_TYPE (rhs), lhs, rhs);
4459 /* Issue a diagnostic message if casting from SRC_TYPE to DEST_TYPE
4460 casts away constness. DIAG_FN gives the function to call if we
4461 need to issue a diagnostic; if it is NULL, no diagnostic will be
4462 issued. DESCRIPTION explains what operation is taking place. */
4464 static void
4465 check_for_casting_away_constness (tree src_type, tree dest_type,
4466 void (*diag_fn)(const char *, ...),
4467 const char *description)
4469 if (diag_fn && casts_away_constness (src_type, dest_type))
4470 error ("%s from type %qT to type %qT casts away constness",
4471 description, src_type, dest_type);
4474 /* Convert EXPR (an expression with pointer-to-member type) to TYPE
4475 (another pointer-to-member type in the same hierarchy) and return
4476 the converted expression. If ALLOW_INVERSE_P is permitted, a
4477 pointer-to-derived may be converted to pointer-to-base; otherwise,
4478 only the other direction is permitted. If C_CAST_P is true, this
4479 conversion is taking place as part of a C-style cast. */
4481 tree
4482 convert_ptrmem (tree type, tree expr, bool allow_inverse_p,
4483 bool c_cast_p)
4485 if (TYPE_PTRMEM_P (type))
4487 tree delta;
4489 if (TREE_CODE (expr) == PTRMEM_CST)
4490 expr = cplus_expand_constant (expr);
4491 delta = get_delta_difference (TYPE_PTRMEM_CLASS_TYPE (TREE_TYPE (expr)),
4492 TYPE_PTRMEM_CLASS_TYPE (type),
4493 allow_inverse_p,
4494 c_cast_p);
4495 if (!integer_zerop (delta))
4496 expr = cp_build_binary_op (PLUS_EXPR,
4497 build_nop (ptrdiff_type_node, expr),
4498 delta);
4499 return build_nop (type, expr);
4501 else
4502 return build_ptrmemfunc (TYPE_PTRMEMFUNC_FN_TYPE (type), expr,
4503 allow_inverse_p, c_cast_p);
4506 /* Perform a static_cast from EXPR to TYPE. When C_CAST_P is true,
4507 this static_cast is being attempted as one of the possible casts
4508 allowed by a C-style cast. (In that case, accessibility of base
4509 classes is not considered, and it is OK to cast away
4510 constness.) Return the result of the cast. *VALID_P is set to
4511 indicate whether or not the cast was valid. */
4513 static tree
4514 build_static_cast_1 (tree type, tree expr, bool c_cast_p,
4515 bool *valid_p)
4517 tree intype;
4518 tree result;
4519 tree orig;
4520 void (*diag_fn)(const char*, ...);
4521 const char *desc;
4523 /* Assume the cast is valid. */
4524 *valid_p = true;
4526 intype = TREE_TYPE (expr);
4528 /* Determine what to do when casting away constness. */
4529 if (c_cast_p)
4531 /* C-style casts are allowed to cast away constness. With
4532 WARN_CAST_QUAL, we still want to issue a warning. */
4533 diag_fn = warn_cast_qual ? warning : NULL;
4534 desc = "cast";
4536 else
4538 /* A static_cast may not cast away constness. */
4539 diag_fn = error;
4540 desc = "static_cast";
4543 /* [expr.static.cast]
4545 An lvalue of type "cv1 B", where B is a class type, can be cast
4546 to type "reference to cv2 D", where D is a class derived (clause
4547 _class.derived_) from B, if a valid standard conversion from
4548 "pointer to D" to "pointer to B" exists (_conv.ptr_), cv2 is the
4549 same cv-qualification as, or greater cv-qualification than, cv1,
4550 and B is not a virtual base class of D. */
4551 /* We check this case before checking the validity of "TYPE t =
4552 EXPR;" below because for this case:
4554 struct B {};
4555 struct D : public B { D(const B&); };
4556 extern B& b;
4557 void f() { static_cast<const D&>(b); }
4559 we want to avoid constructing a new D. The standard is not
4560 completely clear about this issue, but our interpretation is
4561 consistent with other compilers. */
4562 if (TREE_CODE (type) == REFERENCE_TYPE
4563 && CLASS_TYPE_P (TREE_TYPE (type))
4564 && CLASS_TYPE_P (intype)
4565 && real_lvalue_p (expr)
4566 && DERIVED_FROM_P (intype, TREE_TYPE (type))
4567 && can_convert (build_pointer_type (TYPE_MAIN_VARIANT (intype)),
4568 build_pointer_type (TYPE_MAIN_VARIANT
4569 (TREE_TYPE (type))))
4570 && (c_cast_p
4571 || at_least_as_qualified_p (TREE_TYPE (type), intype)))
4573 tree base;
4575 /* There is a standard conversion from "D*" to "B*" even if "B"
4576 is ambiguous or inaccessible. If this is really a
4577 static_cast, then we check both for inaccessibility and
4578 ambiguity. However, if this is a static_cast being performed
4579 because the user wrote a C-style cast, then accessibility is
4580 not considered. */
4581 base = lookup_base (TREE_TYPE (type), intype,
4582 c_cast_p ? ba_unique : ba_check,
4583 NULL);
4585 /* Convert from "B*" to "D*". This function will check that "B"
4586 is not a virtual base of "D". */
4587 expr = build_base_path (MINUS_EXPR, build_address (expr),
4588 base, /*nonnull=*/false);
4589 /* Convert the pointer to a reference -- but then remember that
4590 there are no expressions with reference type in C++. */
4591 return convert_from_reference (build_nop (type, expr));
4594 orig = expr;
4596 /* [expr.static.cast]
4598 An expression e can be explicitly converted to a type T using a
4599 static_cast of the form static_cast<T>(e) if the declaration T
4600 t(e);" is well-formed, for some invented temporary variable
4601 t. */
4602 result = perform_direct_initialization_if_possible (type, expr,
4603 c_cast_p);
4604 if (result)
4606 result = convert_from_reference (result);
4608 /* Ignore any integer overflow caused by the cast. */
4609 if (TREE_CODE (result) == INTEGER_CST
4610 && CONSTANT_CLASS_P (orig))
4612 TREE_OVERFLOW (result) = TREE_OVERFLOW (orig);
4613 TREE_CONSTANT_OVERFLOW (result)
4614 = TREE_CONSTANT_OVERFLOW (orig);
4616 /* [expr.static.cast]
4618 If T is a reference type, the result is an lvalue; otherwise,
4619 the result is an rvalue. */
4620 if (TREE_CODE (type) != REFERENCE_TYPE
4621 && real_lvalue_p (result))
4622 result = build1 (NON_LVALUE_EXPR, TREE_TYPE (result), result);
4623 return result;
4626 /* [expr.static.cast]
4628 Any expression can be explicitly converted to type cv void. */
4629 if (TREE_CODE (type) == VOID_TYPE)
4630 return convert_to_void (expr, /*implicit=*/NULL);
4632 /* [expr.static.cast]
4634 The inverse of any standard conversion sequence (clause _conv_),
4635 other than the lvalue-to-rvalue (_conv.lval_), array-to-pointer
4636 (_conv.array_), function-to-pointer (_conv.func_), and boolean
4637 (_conv.bool_) conversions, can be performed explicitly using
4638 static_cast subject to the restriction that the explicit
4639 conversion does not cast away constness (_expr.const.cast_), and
4640 the following additional rules for specific cases: */
4641 /* For reference, the conversions not excluded are: integral
4642 promotions, floating point promotion, integral conversions,
4643 floating point conversions, floating-integral conversions,
4644 pointer conversions, and pointer to member conversions. */
4645 if ((ARITHMETIC_TYPE_P (type) && ARITHMETIC_TYPE_P (intype))
4646 /* DR 128
4648 A value of integral _or enumeration_ type can be explicitly
4649 converted to an enumeration type. */
4650 || (INTEGRAL_OR_ENUMERATION_TYPE_P (type)
4651 && INTEGRAL_OR_ENUMERATION_TYPE_P (intype)))
4653 expr = ocp_convert (type, expr, CONV_C_CAST, LOOKUP_NORMAL);
4655 /* Ignore any integer overflow caused by the cast. */
4656 if (TREE_CODE (expr) == INTEGER_CST
4657 && CONSTANT_CLASS_P (orig))
4659 TREE_OVERFLOW (expr) = TREE_OVERFLOW (orig);
4660 TREE_CONSTANT_OVERFLOW (expr) = TREE_CONSTANT_OVERFLOW (orig);
4662 return expr;
4665 if (TYPE_PTR_P (type) && TYPE_PTR_P (intype)
4666 && CLASS_TYPE_P (TREE_TYPE (type))
4667 && CLASS_TYPE_P (TREE_TYPE (intype))
4668 && can_convert (build_pointer_type (TYPE_MAIN_VARIANT
4669 (TREE_TYPE (intype))),
4670 build_pointer_type (TYPE_MAIN_VARIANT
4671 (TREE_TYPE (type)))))
4673 tree base;
4675 if (!c_cast_p)
4676 check_for_casting_away_constness (intype, type, diag_fn, desc);
4677 base = lookup_base (TREE_TYPE (type), TREE_TYPE (intype),
4678 c_cast_p ? ba_unique : ba_check,
4679 NULL);
4680 return build_base_path (MINUS_EXPR, expr, base, /*nonnull=*/false);
4683 if ((TYPE_PTRMEM_P (type) && TYPE_PTRMEM_P (intype))
4684 || (TYPE_PTRMEMFUNC_P (type) && TYPE_PTRMEMFUNC_P (intype)))
4686 tree c1;
4687 tree c2;
4688 tree t1;
4689 tree t2;
4691 c1 = TYPE_PTRMEM_CLASS_TYPE (intype);
4692 c2 = TYPE_PTRMEM_CLASS_TYPE (type);
4694 if (TYPE_PTRMEM_P (type))
4696 t1 = (build_ptrmem_type
4697 (c1,
4698 TYPE_MAIN_VARIANT (TYPE_PTRMEM_POINTED_TO_TYPE (intype))));
4699 t2 = (build_ptrmem_type
4700 (c2,
4701 TYPE_MAIN_VARIANT (TYPE_PTRMEM_POINTED_TO_TYPE (type))));
4703 else
4705 t1 = intype;
4706 t2 = type;
4708 if (can_convert (t1, t2))
4710 if (!c_cast_p)
4711 check_for_casting_away_constness (intype, type, diag_fn,
4712 desc);
4713 return convert_ptrmem (type, expr, /*allow_inverse_p=*/1,
4714 c_cast_p);
4718 /* [expr.static.cast]
4720 An rvalue of type "pointer to cv void" can be explicitly
4721 converted to a pointer to object type. A value of type pointer
4722 to object converted to "pointer to cv void" and back to the
4723 original pointer type will have its original value. */
4724 if (TREE_CODE (intype) == POINTER_TYPE
4725 && VOID_TYPE_P (TREE_TYPE (intype))
4726 && TYPE_PTROB_P (type))
4728 if (!c_cast_p)
4729 check_for_casting_away_constness (intype, type, diag_fn, desc);
4730 return build_nop (type, expr);
4733 *valid_p = false;
4734 return error_mark_node;
4737 /* Return an expression representing static_cast<TYPE>(EXPR). */
4739 tree
4740 build_static_cast (tree type, tree expr)
4742 tree result;
4743 bool valid_p;
4745 if (type == error_mark_node || expr == error_mark_node)
4746 return error_mark_node;
4748 if (processing_template_decl)
4750 expr = build_min (STATIC_CAST_EXPR, type, expr);
4751 /* We don't know if it will or will not have side effects. */
4752 TREE_SIDE_EFFECTS (expr) = 1;
4753 return convert_from_reference (expr);
4756 /* build_c_cast puts on a NOP_EXPR to make the result not an lvalue.
4757 Strip such NOP_EXPRs if VALUE is being used in non-lvalue context. */
4758 if (TREE_CODE (type) != REFERENCE_TYPE
4759 && TREE_CODE (expr) == NOP_EXPR
4760 && TREE_TYPE (expr) == TREE_TYPE (TREE_OPERAND (expr, 0)))
4761 expr = TREE_OPERAND (expr, 0);
4763 result = build_static_cast_1 (type, expr, /*c_cast_p=*/false, &valid_p);
4764 if (valid_p)
4765 return result;
4767 error ("invalid static_cast from type %qT to type %qT",
4768 TREE_TYPE (expr), type);
4769 return error_mark_node;
4772 /* EXPR is an expression with member function or pointer-to-member
4773 function type. TYPE is a pointer type. Converting EXPR to TYPE is
4774 not permitted by ISO C++, but we accept it in some modes. If we
4775 are not in one of those modes, issue a diagnostic. Return the
4776 converted expression. */
4778 tree
4779 convert_member_func_to_ptr (tree type, tree expr)
4781 tree intype;
4782 tree decl;
4784 intype = TREE_TYPE (expr);
4785 gcc_assert (TYPE_PTRMEMFUNC_P (intype)
4786 || TREE_CODE (intype) == METHOD_TYPE);
4788 if (pedantic || warn_pmf2ptr)
4789 pedwarn ("converting from %qT to %qT", intype, type);
4791 if (TREE_CODE (intype) == METHOD_TYPE)
4792 expr = build_addr_func (expr);
4793 else if (TREE_CODE (expr) == PTRMEM_CST)
4794 expr = build_address (PTRMEM_CST_MEMBER (expr));
4795 else
4797 decl = maybe_dummy_object (TYPE_PTRMEM_CLASS_TYPE (intype), 0);
4798 decl = build_address (decl);
4799 expr = get_member_function_from_ptrfunc (&decl, expr);
4802 return build_nop (type, expr);
4805 /* Return a representation for a reinterpret_cast from EXPR to TYPE.
4806 If C_CAST_P is true, this reinterpret cast is being done as part of
4807 a C-style cast. If VALID_P is non-NULL, *VALID_P is set to
4808 indicate whether or not reinterpret_cast was valid. */
4810 static tree
4811 build_reinterpret_cast_1 (tree type, tree expr, bool c_cast_p,
4812 bool *valid_p)
4814 tree intype;
4816 /* Assume the cast is invalid. */
4817 if (valid_p)
4818 *valid_p = true;
4820 if (type == error_mark_node || error_operand_p (expr))
4821 return error_mark_node;
4823 intype = TREE_TYPE (expr);
4825 /* [expr.reinterpret.cast]
4826 An lvalue expression of type T1 can be cast to the type
4827 "reference to T2" if an expression of type "pointer to T1" can be
4828 explicitly converted to the type "pointer to T2" using a
4829 reinterpret_cast. */
4830 if (TREE_CODE (type) == REFERENCE_TYPE)
4832 if (! real_lvalue_p (expr))
4834 error ("invalid cast of an rvalue expression of type "
4835 "%qT to type %qT",
4836 intype, type);
4837 return error_mark_node;
4840 /* Warn about a reinterpret_cast from "A*" to "B&" if "A" and
4841 "B" are related class types; the reinterpret_cast does not
4842 adjust the pointer. */
4843 if (TYPE_PTR_P (intype)
4844 && (comptypes (TREE_TYPE (intype), TREE_TYPE (type),
4845 COMPARE_BASE | COMPARE_DERIVED)))
4846 warning ("casting %qT to %qT does not dereference pointer",
4847 intype, type);
4849 expr = build_unary_op (ADDR_EXPR, expr, 0);
4850 if (expr != error_mark_node)
4851 expr = build_reinterpret_cast_1
4852 (build_pointer_type (TREE_TYPE (type)), expr, c_cast_p,
4853 valid_p);
4854 if (expr != error_mark_node)
4855 expr = build_indirect_ref (expr, 0);
4856 return expr;
4859 /* As a G++ extension, we consider conversions from member
4860 functions, and pointers to member functions to
4861 pointer-to-function and pointer-to-void types. If
4862 -Wno-pmf-conversions has not been specified,
4863 convert_member_func_to_ptr will issue an error message. */
4864 if ((TYPE_PTRMEMFUNC_P (intype)
4865 || TREE_CODE (intype) == METHOD_TYPE)
4866 && TYPE_PTR_P (type)
4867 && (TREE_CODE (TREE_TYPE (type)) == FUNCTION_TYPE
4868 || VOID_TYPE_P (TREE_TYPE (type))))
4869 return convert_member_func_to_ptr (type, expr);
4871 /* If the cast is not to a reference type, the lvalue-to-rvalue,
4872 array-to-pointer, and function-to-pointer conversions are
4873 performed. */
4874 expr = decay_conversion (expr);
4876 /* build_c_cast puts on a NOP_EXPR to make the result not an lvalue.
4877 Strip such NOP_EXPRs if VALUE is being used in non-lvalue context. */
4878 if (TREE_CODE (expr) == NOP_EXPR
4879 && TREE_TYPE (expr) == TREE_TYPE (TREE_OPERAND (expr, 0)))
4880 expr = TREE_OPERAND (expr, 0);
4882 if (error_operand_p (expr))
4883 return error_mark_node;
4885 intype = TREE_TYPE (expr);
4887 /* [expr.reinterpret.cast]
4888 A pointer can be converted to any integral type large enough to
4889 hold it. */
4890 if (CP_INTEGRAL_TYPE_P (type) && TYPE_PTR_P (intype))
4892 if (TYPE_PRECISION (type) < TYPE_PRECISION (intype))
4893 pedwarn ("cast from %qT to %qT loses precision",
4894 intype, type);
4896 /* [expr.reinterpret.cast]
4897 A value of integral or enumeration type can be explicitly
4898 converted to a pointer. */
4899 else if (TYPE_PTR_P (type) && INTEGRAL_OR_ENUMERATION_TYPE_P (intype))
4900 /* OK */
4902 else if ((TYPE_PTRFN_P (type) && TYPE_PTRFN_P (intype))
4903 || (TYPE_PTRMEMFUNC_P (type) && TYPE_PTRMEMFUNC_P (intype)))
4904 return fold_if_not_in_template (build_nop (type, expr));
4905 else if ((TYPE_PTRMEM_P (type) && TYPE_PTRMEM_P (intype))
4906 || (TYPE_PTROBV_P (type) && TYPE_PTROBV_P (intype)))
4908 if (!c_cast_p)
4909 check_for_casting_away_constness (intype, type, error,
4910 "reinterpret_cast");
4911 /* Warn about possible alignment problems. */
4912 if (STRICT_ALIGNMENT && warn_cast_align
4913 && !VOID_TYPE_P (type)
4914 && TREE_CODE (TREE_TYPE (intype)) != FUNCTION_TYPE
4915 && COMPLETE_TYPE_P (TREE_TYPE (type))
4916 && COMPLETE_TYPE_P (TREE_TYPE (intype))
4917 && TYPE_ALIGN (TREE_TYPE (type)) > TYPE_ALIGN (TREE_TYPE (intype)))
4918 warning ("cast from %qT to %qT increases required alignment of "
4919 "target type",
4920 intype, type);
4922 return fold_if_not_in_template (build_nop (type, expr));
4924 else if ((TYPE_PTRFN_P (type) && TYPE_PTROBV_P (intype))
4925 || (TYPE_PTRFN_P (intype) && TYPE_PTROBV_P (type)))
4927 if (pedantic)
4928 /* Only issue a warning, as we have always supported this
4929 where possible, and it is necessary in some cases. DR 195
4930 addresses this issue, but as of 2004/10/26 is still in
4931 drafting. */
4932 warning ("ISO C++ forbids casting between pointer-to-function and pointer-to-object");
4933 return fold_if_not_in_template (build_nop (type, expr));
4935 else if (TREE_CODE (type) == VECTOR_TYPE)
4936 return fold_if_not_in_template (convert_to_vector (type, expr));
4937 else if (TREE_CODE (intype) == VECTOR_TYPE)
4938 return fold_if_not_in_template (convert_to_integer (type, expr));
4939 else
4941 if (valid_p)
4942 *valid_p = false;
4943 error ("invalid cast from type %qT to type %qT", intype, type);
4944 return error_mark_node;
4947 return cp_convert (type, expr);
4950 tree
4951 build_reinterpret_cast (tree type, tree expr)
4953 if (type == error_mark_node || expr == error_mark_node)
4954 return error_mark_node;
4956 if (processing_template_decl)
4958 tree t = build_min (REINTERPRET_CAST_EXPR, type, expr);
4960 if (!TREE_SIDE_EFFECTS (t)
4961 && type_dependent_expression_p (expr))
4962 /* There might turn out to be side effects inside expr. */
4963 TREE_SIDE_EFFECTS (t) = 1;
4964 return convert_from_reference (t);
4967 return build_reinterpret_cast_1 (type, expr, /*c_cast_p=*/false,
4968 /*valid_p=*/NULL);
4971 /* Perform a const_cast from EXPR to TYPE. If the cast is valid,
4972 return an appropriate expression. Otherwise, return
4973 error_mark_node. If the cast is not valid, and COMPLAIN is true,
4974 then a diagnostic will be issued. If VALID_P is non-NULL, its
4975 value upon return will indicate whether or not the conversion
4976 succeeded. */
4978 static tree
4979 build_const_cast_1 (tree dst_type, tree expr, bool complain,
4980 bool *valid_p)
4982 tree src_type;
4983 tree reference_type;
4985 /* Callers are responsible for handling error_mark_node as a
4986 destination type. */
4987 gcc_assert (dst_type != error_mark_node);
4988 /* In a template, callers should be building syntactic
4989 representations of casts, not using this machinery. */
4990 gcc_assert (!processing_template_decl);
4992 /* Assume the conversion is invalid. */
4993 if (valid_p)
4994 *valid_p = false;
4996 if (!POINTER_TYPE_P (dst_type) && !TYPE_PTRMEM_P (dst_type))
4998 if (complain)
4999 error ("invalid use of const_cast with type %qT, "
5000 "which is not a pointer, "
5001 "reference, nor a pointer-to-data-member type", dst_type);
5002 return error_mark_node;
5005 if (TREE_CODE (TREE_TYPE (dst_type)) == FUNCTION_TYPE)
5007 if (complain)
5008 error ("invalid use of const_cast with type %qT, which is a pointer "
5009 "or reference to a function type", dst_type);
5010 return error_mark_node;
5013 src_type = TREE_TYPE (expr);
5014 /* Expressions do not really have reference types. */
5015 if (TREE_CODE (src_type) == REFERENCE_TYPE)
5016 src_type = TREE_TYPE (src_type);
5018 /* [expr.const.cast]
5020 An lvalue of type T1 can be explicitly converted to an lvalue of
5021 type T2 using the cast const_cast<T2&> (where T1 and T2 are object
5022 types) if a pointer to T1 can be explicitly converted to the type
5023 pointer to T2 using a const_cast. */
5024 if (TREE_CODE (dst_type) == REFERENCE_TYPE)
5026 reference_type = dst_type;
5027 if (! real_lvalue_p (expr))
5029 if (complain)
5030 error ("invalid const_cast of an rvalue of type %qT to type %qT",
5031 src_type, dst_type);
5032 return error_mark_node;
5034 dst_type = build_pointer_type (TREE_TYPE (dst_type));
5035 src_type = build_pointer_type (src_type);
5037 else
5039 reference_type = NULL_TREE;
5040 /* If the destination type is not a reference type, the
5041 lvalue-to-rvalue, array-to-pointer, and function-to-pointer
5042 conversions are performed. */
5043 src_type = type_decays_to (src_type);
5044 if (src_type == error_mark_node)
5045 return error_mark_node;
5048 if ((TYPE_PTR_P (src_type) || TYPE_PTRMEM_P (src_type))
5049 && comp_ptr_ttypes_const (dst_type, src_type))
5051 if (valid_p)
5052 *valid_p = true;
5053 if (reference_type)
5055 expr = build_unary_op (ADDR_EXPR, expr, 0);
5056 expr = build_nop (reference_type, expr);
5057 return convert_from_reference (expr);
5059 else
5061 expr = decay_conversion (expr);
5062 /* build_c_cast puts on a NOP_EXPR to make the result not an
5063 lvalue. Strip such NOP_EXPRs if VALUE is being used in
5064 non-lvalue context. */
5065 if (TREE_CODE (expr) == NOP_EXPR
5066 && TREE_TYPE (expr) == TREE_TYPE (TREE_OPERAND (expr, 0)))
5067 expr = TREE_OPERAND (expr, 0);
5068 return build_nop (dst_type, expr);
5072 if (complain)
5073 error ("invalid const_cast from type %qT to type %qT",
5074 src_type, dst_type);
5075 return error_mark_node;
5078 tree
5079 build_const_cast (tree type, tree expr)
5081 if (type == error_mark_node || error_operand_p (expr))
5082 return error_mark_node;
5084 if (processing_template_decl)
5086 tree t = build_min (CONST_CAST_EXPR, type, expr);
5088 if (!TREE_SIDE_EFFECTS (t)
5089 && type_dependent_expression_p (expr))
5090 /* There might turn out to be side effects inside expr. */
5091 TREE_SIDE_EFFECTS (t) = 1;
5092 return convert_from_reference (t);
5095 return build_const_cast_1 (type, expr, /*complain=*/true,
5096 /*valid_p=*/NULL);
5099 /* Build an expression representing an explicit C-style cast to type
5100 TYPE of expression EXPR. */
5102 tree
5103 build_c_cast (tree type, tree expr)
5105 tree value = expr;
5106 tree result;
5107 bool valid_p;
5109 if (type == error_mark_node || error_operand_p (expr))
5110 return error_mark_node;
5112 if (processing_template_decl)
5114 tree t = build_min (CAST_EXPR, type,
5115 tree_cons (NULL_TREE, value, NULL_TREE));
5116 /* We don't know if it will or will not have side effects. */
5117 TREE_SIDE_EFFECTS (t) = 1;
5118 return convert_from_reference (t);
5121 /* Casts to a (pointer to a) specific ObjC class (or 'id' or
5122 'Class') should always be retained, because this information aids
5123 in method lookup. */
5124 if (objc_is_object_ptr (type)
5125 && objc_is_object_ptr (TREE_TYPE (expr)))
5126 return build_nop (type, expr);
5128 /* build_c_cast puts on a NOP_EXPR to make the result not an lvalue.
5129 Strip such NOP_EXPRs if VALUE is being used in non-lvalue context. */
5130 if (TREE_CODE (type) != REFERENCE_TYPE
5131 && TREE_CODE (value) == NOP_EXPR
5132 && TREE_TYPE (value) == TREE_TYPE (TREE_OPERAND (value, 0)))
5133 value = TREE_OPERAND (value, 0);
5135 if (TREE_CODE (type) == ARRAY_TYPE)
5137 /* Allow casting from T1* to T2[] because Cfront allows it.
5138 NIHCL uses it. It is not valid ISO C++ however. */
5139 if (TREE_CODE (TREE_TYPE (expr)) == POINTER_TYPE)
5141 pedwarn ("ISO C++ forbids casting to an array type %qT", type);
5142 type = build_pointer_type (TREE_TYPE (type));
5144 else
5146 error ("ISO C++ forbids casting to an array type %qT", type);
5147 return error_mark_node;
5151 if (TREE_CODE (type) == FUNCTION_TYPE
5152 || TREE_CODE (type) == METHOD_TYPE)
5154 error ("invalid cast to function type %qT", type);
5155 return error_mark_node;
5158 /* A C-style cast can be a const_cast. */
5159 result = build_const_cast_1 (type, value, /*complain=*/false,
5160 &valid_p);
5161 if (valid_p)
5162 return result;
5164 /* Or a static cast. */
5165 result = build_static_cast_1 (type, value, /*c_cast_p=*/true,
5166 &valid_p);
5167 /* Or a reinterpret_cast. */
5168 if (!valid_p)
5169 result = build_reinterpret_cast_1 (type, value, /*c_cast_p=*/true,
5170 &valid_p);
5171 /* The static_cast or reinterpret_cast may be followed by a
5172 const_cast. */
5173 if (valid_p
5174 /* A valid cast may result in errors if, for example, a
5175 conversion to am ambiguous base class is required. */
5176 && !error_operand_p (result))
5178 tree result_type;
5180 /* Non-class rvalues always have cv-unqualified type. */
5181 if (!CLASS_TYPE_P (type))
5182 type = TYPE_MAIN_VARIANT (type);
5183 result_type = TREE_TYPE (result);
5184 if (!CLASS_TYPE_P (result_type))
5185 result_type = TYPE_MAIN_VARIANT (result_type);
5186 /* If the type of RESULT does not match TYPE, perform a
5187 const_cast to make it match. If the static_cast or
5188 reinterpret_cast succeeded, we will differ by at most
5189 cv-qualification, so the follow-on const_cast is guaranteed
5190 to succeed. */
5191 if (!same_type_p (non_reference (type), non_reference (result_type)))
5193 result = build_const_cast_1 (type, result, false, &valid_p);
5194 gcc_assert (valid_p);
5196 return result;
5199 return error_mark_node;
5202 /* Build an assignment expression of lvalue LHS from value RHS.
5203 MODIFYCODE is the code for a binary operator that we use
5204 to combine the old value of LHS with RHS to get the new value.
5205 Or else MODIFYCODE is NOP_EXPR meaning do a simple assignment.
5207 C++: If MODIFYCODE is INIT_EXPR, then leave references unbashed. */
5209 tree
5210 build_modify_expr (tree lhs, enum tree_code modifycode, tree rhs)
5212 tree result;
5213 tree newrhs = rhs;
5214 tree lhstype = TREE_TYPE (lhs);
5215 tree olhstype = lhstype;
5216 tree olhs = NULL_TREE;
5217 bool plain_assign = (modifycode == NOP_EXPR);
5219 /* Avoid duplicate error messages from operands that had errors. */
5220 if (lhs == error_mark_node || rhs == error_mark_node)
5221 return error_mark_node;
5223 /* Handle control structure constructs used as "lvalues". */
5224 switch (TREE_CODE (lhs))
5226 /* Handle --foo = 5; as these are valid constructs in C++. */
5227 case PREDECREMENT_EXPR:
5228 case PREINCREMENT_EXPR:
5229 if (TREE_SIDE_EFFECTS (TREE_OPERAND (lhs, 0)))
5230 lhs = build2 (TREE_CODE (lhs), TREE_TYPE (lhs),
5231 stabilize_reference (TREE_OPERAND (lhs, 0)),
5232 TREE_OPERAND (lhs, 1));
5233 return build2 (COMPOUND_EXPR, lhstype,
5234 lhs,
5235 build_modify_expr (TREE_OPERAND (lhs, 0),
5236 modifycode, rhs));
5238 /* Handle (a, b) used as an "lvalue". */
5239 case COMPOUND_EXPR:
5240 newrhs = build_modify_expr (TREE_OPERAND (lhs, 1),
5241 modifycode, rhs);
5242 if (newrhs == error_mark_node)
5243 return error_mark_node;
5244 return build2 (COMPOUND_EXPR, lhstype,
5245 TREE_OPERAND (lhs, 0), newrhs);
5247 case MODIFY_EXPR:
5248 if (TREE_SIDE_EFFECTS (TREE_OPERAND (lhs, 0)))
5249 lhs = build2 (TREE_CODE (lhs), TREE_TYPE (lhs),
5250 stabilize_reference (TREE_OPERAND (lhs, 0)),
5251 TREE_OPERAND (lhs, 1));
5252 newrhs = build_modify_expr (TREE_OPERAND (lhs, 0), modifycode, rhs);
5253 if (newrhs == error_mark_node)
5254 return error_mark_node;
5255 return build2 (COMPOUND_EXPR, lhstype, lhs, newrhs);
5257 case MIN_EXPR:
5258 case MAX_EXPR:
5259 /* MIN_EXPR and MAX_EXPR are currently only permitted as lvalues,
5260 when neither operand has side-effects. */
5261 if (!lvalue_or_else (lhs, lv_assign))
5262 return error_mark_node;
5264 gcc_assert (!TREE_SIDE_EFFECTS (TREE_OPERAND (lhs, 0))
5265 && !TREE_SIDE_EFFECTS (TREE_OPERAND (lhs, 1)));
5267 lhs = build3 (COND_EXPR, TREE_TYPE (lhs),
5268 build2 (TREE_CODE (lhs) == MIN_EXPR ? LE_EXPR : GE_EXPR,
5269 boolean_type_node,
5270 TREE_OPERAND (lhs, 0),
5271 TREE_OPERAND (lhs, 1)),
5272 TREE_OPERAND (lhs, 0),
5273 TREE_OPERAND (lhs, 1));
5274 /* Fall through. */
5276 /* Handle (a ? b : c) used as an "lvalue". */
5277 case COND_EXPR:
5279 /* Produce (a ? (b = rhs) : (c = rhs))
5280 except that the RHS goes through a save-expr
5281 so the code to compute it is only emitted once. */
5282 tree cond;
5283 tree preeval = NULL_TREE;
5285 rhs = stabilize_expr (rhs, &preeval);
5287 /* Check this here to avoid odd errors when trying to convert
5288 a throw to the type of the COND_EXPR. */
5289 if (!lvalue_or_else (lhs, lv_assign))
5290 return error_mark_node;
5292 cond = build_conditional_expr
5293 (TREE_OPERAND (lhs, 0),
5294 build_modify_expr (cp_convert (TREE_TYPE (lhs),
5295 TREE_OPERAND (lhs, 1)),
5296 modifycode, rhs),
5297 build_modify_expr (cp_convert (TREE_TYPE (lhs),
5298 TREE_OPERAND (lhs, 2)),
5299 modifycode, rhs));
5301 if (cond == error_mark_node)
5302 return cond;
5303 /* Make sure the code to compute the rhs comes out
5304 before the split. */
5305 if (preeval)
5306 cond = build2 (COMPOUND_EXPR, TREE_TYPE (lhs), preeval, cond);
5307 return cond;
5310 default:
5311 break;
5314 if (modifycode == INIT_EXPR)
5316 if (TREE_CODE (rhs) == CONSTRUCTOR)
5318 if (! same_type_p (TREE_TYPE (rhs), lhstype))
5319 /* Call convert to generate an error; see PR 11063. */
5320 rhs = convert (lhstype, rhs);
5321 result = build2 (INIT_EXPR, lhstype, lhs, rhs);
5322 TREE_SIDE_EFFECTS (result) = 1;
5323 return result;
5325 else if (! IS_AGGR_TYPE (lhstype))
5326 /* Do the default thing. */;
5327 else
5329 result = build_special_member_call (lhs, complete_ctor_identifier,
5330 build_tree_list (NULL_TREE, rhs),
5331 lhstype, LOOKUP_NORMAL);
5332 if (result == NULL_TREE)
5333 return error_mark_node;
5334 return result;
5337 else
5339 lhs = require_complete_type (lhs);
5340 if (lhs == error_mark_node)
5341 return error_mark_node;
5343 if (modifycode == NOP_EXPR)
5345 /* `operator=' is not an inheritable operator. */
5346 if (! IS_AGGR_TYPE (lhstype))
5347 /* Do the default thing. */;
5348 else
5350 result = build_new_op (MODIFY_EXPR, LOOKUP_NORMAL,
5351 lhs, rhs, make_node (NOP_EXPR),
5352 /*overloaded_p=*/NULL);
5353 if (result == NULL_TREE)
5354 return error_mark_node;
5355 return result;
5357 lhstype = olhstype;
5359 else
5361 /* A binary op has been requested. Combine the old LHS
5362 value with the RHS producing the value we should actually
5363 store into the LHS. */
5365 gcc_assert (!PROMOTES_TO_AGGR_TYPE (lhstype, REFERENCE_TYPE));
5366 lhs = stabilize_reference (lhs);
5367 newrhs = cp_build_binary_op (modifycode, lhs, rhs);
5368 if (newrhs == error_mark_node)
5370 error (" in evaluation of %<%Q(%#T, %#T)%>", modifycode,
5371 TREE_TYPE (lhs), TREE_TYPE (rhs));
5372 return error_mark_node;
5375 /* Now it looks like a plain assignment. */
5376 modifycode = NOP_EXPR;
5378 gcc_assert (TREE_CODE (lhstype) != REFERENCE_TYPE);
5379 gcc_assert (TREE_CODE (TREE_TYPE (newrhs)) != REFERENCE_TYPE);
5382 /* The left-hand side must be an lvalue. */
5383 if (!lvalue_or_else (lhs, lv_assign))
5384 return error_mark_node;
5386 /* Warn about modifying something that is `const'. Don't warn if
5387 this is initialization. */
5388 if (modifycode != INIT_EXPR
5389 && (TREE_READONLY (lhs) || CP_TYPE_CONST_P (lhstype)
5390 /* Functions are not modifiable, even though they are
5391 lvalues. */
5392 || TREE_CODE (TREE_TYPE (lhs)) == FUNCTION_TYPE
5393 || TREE_CODE (TREE_TYPE (lhs)) == METHOD_TYPE
5394 /* If it's an aggregate and any field is const, then it is
5395 effectively const. */
5396 || (CLASS_TYPE_P (lhstype)
5397 && C_TYPE_FIELDS_READONLY (lhstype))))
5398 readonly_error (lhs, "assignment", 0);
5400 /* If storing into a structure or union member, it has probably been
5401 given type `int'. Compute the type that would go with the actual
5402 amount of storage the member occupies. */
5404 if (TREE_CODE (lhs) == COMPONENT_REF
5405 && (TREE_CODE (lhstype) == INTEGER_TYPE
5406 || TREE_CODE (lhstype) == REAL_TYPE
5407 || TREE_CODE (lhstype) == ENUMERAL_TYPE))
5409 lhstype = TREE_TYPE (get_unwidened (lhs, 0));
5411 /* If storing in a field that is in actuality a short or narrower
5412 than one, we must store in the field in its actual type. */
5414 if (lhstype != TREE_TYPE (lhs))
5416 /* Avoid warnings converting integral types back into enums for
5417 enum bit fields. */
5418 if (TREE_CODE (lhstype) == INTEGER_TYPE
5419 && TREE_CODE (olhstype) == ENUMERAL_TYPE)
5421 if (TREE_SIDE_EFFECTS (lhs))
5422 lhs = stabilize_reference (lhs);
5423 olhs = lhs;
5425 lhs = copy_node (lhs);
5426 TREE_TYPE (lhs) = lhstype;
5430 /* Convert new value to destination type. */
5432 if (TREE_CODE (lhstype) == ARRAY_TYPE)
5434 int from_array;
5436 if (!same_or_base_type_p (TYPE_MAIN_VARIANT (lhstype),
5437 TYPE_MAIN_VARIANT (TREE_TYPE (rhs))))
5439 error ("incompatible types in assignment of %qT to %qT",
5440 TREE_TYPE (rhs), lhstype);
5441 return error_mark_node;
5444 /* Allow array assignment in compiler-generated code. */
5445 if (! DECL_ARTIFICIAL (current_function_decl))
5446 pedwarn ("ISO C++ forbids assignment of arrays");
5448 from_array = TREE_CODE (TREE_TYPE (newrhs)) == ARRAY_TYPE
5449 ? 1 + (modifycode != INIT_EXPR): 0;
5450 return build_vec_init (lhs, NULL_TREE, newrhs, from_array);
5453 if (modifycode == INIT_EXPR)
5454 newrhs = convert_for_initialization (lhs, lhstype, newrhs, LOOKUP_NORMAL,
5455 "initialization", NULL_TREE, 0);
5456 else
5458 /* Avoid warnings on enum bit fields. */
5459 if (TREE_CODE (olhstype) == ENUMERAL_TYPE
5460 && TREE_CODE (lhstype) == INTEGER_TYPE)
5462 newrhs = convert_for_assignment (olhstype, newrhs, "assignment",
5463 NULL_TREE, 0);
5464 newrhs = convert_force (lhstype, newrhs, 0);
5466 else
5467 newrhs = convert_for_assignment (lhstype, newrhs, "assignment",
5468 NULL_TREE, 0);
5469 if (TREE_CODE (newrhs) == CALL_EXPR
5470 && TYPE_NEEDS_CONSTRUCTING (lhstype))
5471 newrhs = build_cplus_new (lhstype, newrhs);
5473 /* Can't initialize directly from a TARGET_EXPR, since that would
5474 cause the lhs to be constructed twice, and possibly result in
5475 accidental self-initialization. So we force the TARGET_EXPR to be
5476 expanded without a target. */
5477 if (TREE_CODE (newrhs) == TARGET_EXPR)
5478 newrhs = build2 (COMPOUND_EXPR, TREE_TYPE (newrhs), newrhs,
5479 TREE_OPERAND (newrhs, 0));
5482 if (newrhs == error_mark_node)
5483 return error_mark_node;
5485 result = build2 (modifycode == NOP_EXPR ? MODIFY_EXPR : INIT_EXPR,
5486 lhstype, lhs, newrhs);
5488 TREE_SIDE_EFFECTS (result) = 1;
5489 if (!plain_assign)
5490 TREE_NO_WARNING (result) = 1;
5492 /* If we got the LHS in a different type for storing in,
5493 convert the result back to the nominal type of LHS
5494 so that the value we return always has the same type
5495 as the LHS argument. */
5497 if (olhstype == TREE_TYPE (result))
5498 return result;
5499 if (olhs)
5501 result = build2 (COMPOUND_EXPR, olhstype, result, olhs);
5502 TREE_NO_WARNING (result) = 1;
5503 return result;
5505 return convert_for_assignment (olhstype, result, "assignment",
5506 NULL_TREE, 0);
5509 tree
5510 build_x_modify_expr (tree lhs, enum tree_code modifycode, tree rhs)
5512 if (processing_template_decl)
5513 return build_min_nt (MODOP_EXPR, lhs,
5514 build_min_nt (modifycode, NULL_TREE, NULL_TREE), rhs);
5516 if (modifycode != NOP_EXPR)
5518 tree rval = build_new_op (MODIFY_EXPR, LOOKUP_NORMAL, lhs, rhs,
5519 make_node (modifycode),
5520 /*overloaded_p=*/NULL);
5521 if (rval)
5523 TREE_NO_WARNING (rval) = 1;
5524 return rval;
5527 return build_modify_expr (lhs, modifycode, rhs);
5531 /* Get difference in deltas for different pointer to member function
5532 types. Returns an integer constant of type PTRDIFF_TYPE_NODE. If
5533 the conversion is invalid, the constant is zero. If
5534 ALLOW_INVERSE_P is true, then allow reverse conversions as well.
5535 If C_CAST_P is true this conversion is taking place as part of a
5536 C-style cast.
5538 Note that the naming of FROM and TO is kind of backwards; the return
5539 value is what we add to a TO in order to get a FROM. They are named
5540 this way because we call this function to find out how to convert from
5541 a pointer to member of FROM to a pointer to member of TO. */
5543 static tree
5544 get_delta_difference (tree from, tree to,
5545 bool allow_inverse_p,
5546 bool c_cast_p)
5548 tree binfo;
5549 tree virt_binfo;
5550 base_kind kind;
5551 tree result;
5553 /* Assume no conversion is required. */
5554 result = integer_zero_node;
5555 binfo = lookup_base (to, from, c_cast_p ? ba_unique : ba_check, &kind);
5556 if (kind == bk_inaccessible || kind == bk_ambig)
5557 error (" in pointer to member function conversion");
5558 else if (!binfo)
5560 if (!allow_inverse_p)
5562 error_not_base_type (from, to);
5563 error (" in pointer to member conversion");
5565 else
5567 binfo = lookup_base (from, to, c_cast_p ? ba_unique : ba_check,
5568 &kind);
5569 if (binfo)
5571 virt_binfo = binfo_from_vbase (binfo);
5572 if (virt_binfo)
5573 /* This is a reinterpret cast, we choose to do nothing. */
5574 warning ("pointer to member cast via virtual base %qT",
5575 BINFO_TYPE (virt_binfo));
5576 else
5577 result = size_diffop (size_zero_node, BINFO_OFFSET (binfo));
5581 else
5583 virt_binfo = binfo_from_vbase (binfo);
5584 if (!virt_binfo)
5585 result = BINFO_OFFSET (binfo);
5586 else
5588 /* This is a reinterpret cast, we choose to do nothing. */
5589 if (allow_inverse_p)
5590 warning ("pointer to member cast via virtual base %qT",
5591 BINFO_TYPE (virt_binfo));
5592 else
5593 error ("pointer to member conversion via virtual base %qT",
5594 BINFO_TYPE (virt_binfo));
5598 return fold_if_not_in_template (convert_to_integer (ptrdiff_type_node,
5599 result));
5602 /* Return a constructor for the pointer-to-member-function TYPE using
5603 the other components as specified. */
5605 tree
5606 build_ptrmemfunc1 (tree type, tree delta, tree pfn)
5608 tree u = NULL_TREE;
5609 tree delta_field;
5610 tree pfn_field;
5612 /* Pull the FIELD_DECLs out of the type. */
5613 pfn_field = TYPE_FIELDS (type);
5614 delta_field = TREE_CHAIN (pfn_field);
5616 /* Make sure DELTA has the type we want. */
5617 delta = convert_and_check (delta_type_node, delta);
5619 /* Finish creating the initializer. */
5620 u = tree_cons (pfn_field, pfn,
5621 build_tree_list (delta_field, delta));
5622 u = build_constructor (type, u);
5623 TREE_CONSTANT (u) = TREE_CONSTANT (pfn) & TREE_CONSTANT (delta);
5624 TREE_INVARIANT (u) = TREE_INVARIANT (pfn) & TREE_INVARIANT (delta);
5625 TREE_STATIC (u) = (TREE_CONSTANT (u)
5626 && (initializer_constant_valid_p (pfn, TREE_TYPE (pfn))
5627 != NULL_TREE)
5628 && (initializer_constant_valid_p (delta, TREE_TYPE (delta))
5629 != NULL_TREE));
5630 return u;
5633 /* Build a constructor for a pointer to member function. It can be
5634 used to initialize global variables, local variable, or used
5635 as a value in expressions. TYPE is the POINTER to METHOD_TYPE we
5636 want to be.
5638 If FORCE is nonzero, then force this conversion, even if
5639 we would rather not do it. Usually set when using an explicit
5640 cast. A C-style cast is being processed iff C_CAST_P is true.
5642 Return error_mark_node, if something goes wrong. */
5644 tree
5645 build_ptrmemfunc (tree type, tree pfn, int force, bool c_cast_p)
5647 tree fn;
5648 tree pfn_type;
5649 tree to_type;
5651 if (error_operand_p (pfn))
5652 return error_mark_node;
5654 pfn_type = TREE_TYPE (pfn);
5655 to_type = build_ptrmemfunc_type (type);
5657 /* Handle multiple conversions of pointer to member functions. */
5658 if (TYPE_PTRMEMFUNC_P (pfn_type))
5660 tree delta = NULL_TREE;
5661 tree npfn = NULL_TREE;
5662 tree n;
5664 if (!force
5665 && !can_convert_arg (to_type, TREE_TYPE (pfn), pfn))
5666 error ("invalid conversion to type %qT from type %qT",
5667 to_type, pfn_type);
5669 n = get_delta_difference (TYPE_PTRMEMFUNC_OBJECT_TYPE (pfn_type),
5670 TYPE_PTRMEMFUNC_OBJECT_TYPE (to_type),
5671 force,
5672 c_cast_p);
5674 /* We don't have to do any conversion to convert a
5675 pointer-to-member to its own type. But, we don't want to
5676 just return a PTRMEM_CST if there's an explicit cast; that
5677 cast should make the expression an invalid template argument. */
5678 if (TREE_CODE (pfn) != PTRMEM_CST)
5680 if (same_type_p (to_type, pfn_type))
5681 return pfn;
5682 else if (integer_zerop (n))
5683 return build_reinterpret_cast (to_type, pfn);
5686 if (TREE_SIDE_EFFECTS (pfn))
5687 pfn = save_expr (pfn);
5689 /* Obtain the function pointer and the current DELTA. */
5690 if (TREE_CODE (pfn) == PTRMEM_CST)
5691 expand_ptrmemfunc_cst (pfn, &delta, &npfn);
5692 else
5694 npfn = build_ptrmemfunc_access_expr (pfn, pfn_identifier);
5695 delta = build_ptrmemfunc_access_expr (pfn, delta_identifier);
5698 /* Just adjust the DELTA field. */
5699 gcc_assert (same_type_ignoring_top_level_qualifiers_p
5700 (TREE_TYPE (delta), ptrdiff_type_node));
5701 if (TARGET_PTRMEMFUNC_VBIT_LOCATION == ptrmemfunc_vbit_in_delta)
5702 n = cp_build_binary_op (LSHIFT_EXPR, n, integer_one_node);
5703 delta = cp_build_binary_op (PLUS_EXPR, delta, n);
5704 return build_ptrmemfunc1 (to_type, delta, npfn);
5707 /* Handle null pointer to member function conversions. */
5708 if (integer_zerop (pfn))
5710 pfn = build_c_cast (type, integer_zero_node);
5711 return build_ptrmemfunc1 (to_type,
5712 integer_zero_node,
5713 pfn);
5716 if (type_unknown_p (pfn))
5717 return instantiate_type (type, pfn, tf_error | tf_warning);
5719 fn = TREE_OPERAND (pfn, 0);
5720 gcc_assert (TREE_CODE (fn) == FUNCTION_DECL);
5721 return make_ptrmem_cst (to_type, fn);
5724 /* Return the DELTA, IDX, PFN, and DELTA2 values for the PTRMEM_CST
5725 given by CST.
5727 ??? There is no consistency as to the types returned for the above
5728 values. Some code acts as if it were a sizetype and some as if it were
5729 integer_type_node. */
5731 void
5732 expand_ptrmemfunc_cst (tree cst, tree *delta, tree *pfn)
5734 tree type = TREE_TYPE (cst);
5735 tree fn = PTRMEM_CST_MEMBER (cst);
5736 tree ptr_class, fn_class;
5738 gcc_assert (TREE_CODE (fn) == FUNCTION_DECL);
5740 /* The class that the function belongs to. */
5741 fn_class = DECL_CONTEXT (fn);
5743 /* The class that we're creating a pointer to member of. */
5744 ptr_class = TYPE_PTRMEMFUNC_OBJECT_TYPE (type);
5746 /* First, calculate the adjustment to the function's class. */
5747 *delta = get_delta_difference (fn_class, ptr_class, /*force=*/0,
5748 /*c_cast_p=*/0);
5750 if (!DECL_VIRTUAL_P (fn))
5751 *pfn = convert (TYPE_PTRMEMFUNC_FN_TYPE (type), build_addr_func (fn));
5752 else
5754 /* If we're dealing with a virtual function, we have to adjust 'this'
5755 again, to point to the base which provides the vtable entry for
5756 fn; the call will do the opposite adjustment. */
5757 tree orig_class = DECL_CONTEXT (fn);
5758 tree binfo = binfo_or_else (orig_class, fn_class);
5759 *delta = build2 (PLUS_EXPR, TREE_TYPE (*delta),
5760 *delta, BINFO_OFFSET (binfo));
5761 *delta = fold_if_not_in_template (*delta);
5763 /* We set PFN to the vtable offset at which the function can be
5764 found, plus one (unless ptrmemfunc_vbit_in_delta, in which
5765 case delta is shifted left, and then incremented). */
5766 *pfn = DECL_VINDEX (fn);
5767 *pfn = build2 (MULT_EXPR, integer_type_node, *pfn,
5768 TYPE_SIZE_UNIT (vtable_entry_type));
5769 *pfn = fold_if_not_in_template (*pfn);
5771 switch (TARGET_PTRMEMFUNC_VBIT_LOCATION)
5773 case ptrmemfunc_vbit_in_pfn:
5774 *pfn = build2 (PLUS_EXPR, integer_type_node, *pfn,
5775 integer_one_node);
5776 *pfn = fold_if_not_in_template (*pfn);
5777 break;
5779 case ptrmemfunc_vbit_in_delta:
5780 *delta = build2 (LSHIFT_EXPR, TREE_TYPE (*delta),
5781 *delta, integer_one_node);
5782 *delta = fold_if_not_in_template (*delta);
5783 *delta = build2 (PLUS_EXPR, TREE_TYPE (*delta),
5784 *delta, integer_one_node);
5785 *delta = fold_if_not_in_template (*delta);
5786 break;
5788 default:
5789 gcc_unreachable ();
5792 *pfn = build_nop (TYPE_PTRMEMFUNC_FN_TYPE (type), *pfn);
5793 *pfn = fold_if_not_in_template (*pfn);
5797 /* Return an expression for PFN from the pointer-to-member function
5798 given by T. */
5800 tree
5801 pfn_from_ptrmemfunc (tree t)
5803 if (TREE_CODE (t) == PTRMEM_CST)
5805 tree delta;
5806 tree pfn;
5808 expand_ptrmemfunc_cst (t, &delta, &pfn);
5809 if (pfn)
5810 return pfn;
5813 return build_ptrmemfunc_access_expr (t, pfn_identifier);
5816 /* Expression EXPR is about to be implicitly converted to TYPE. Warn
5817 if this is a potentially dangerous thing to do. Returns a possibly
5818 marked EXPR. */
5820 tree
5821 dubious_conversion_warnings (tree type, tree expr,
5822 const char *errtype, tree fndecl, int parmnum)
5824 type = non_reference (type);
5826 /* Issue warnings about peculiar, but valid, uses of NULL. */
5827 if (ARITHMETIC_TYPE_P (type) && expr == null_node)
5829 if (fndecl)
5830 warning ("passing NULL used for non-pointer %s %P of %qD",
5831 errtype, parmnum, fndecl);
5832 else
5833 warning ("%s to non-pointer type %qT from NULL", errtype, type);
5836 /* Warn about assigning a floating-point type to an integer type. */
5837 if (TREE_CODE (TREE_TYPE (expr)) == REAL_TYPE
5838 && TREE_CODE (type) == INTEGER_TYPE)
5840 if (fndecl)
5841 warning ("passing %qT for %s %P of %qD",
5842 TREE_TYPE (expr), errtype, parmnum, fndecl);
5843 else
5844 warning ("%s to %qT from %qT", errtype, type, TREE_TYPE (expr));
5846 /* And warn about assigning a negative value to an unsigned
5847 variable. */
5848 else if (TYPE_UNSIGNED (type) && TREE_CODE (type) != BOOLEAN_TYPE)
5850 if (TREE_CODE (expr) == INTEGER_CST && TREE_NEGATED_INT (expr))
5852 if (fndecl)
5853 warning ("passing negative value %qE for %s %P of %qD",
5854 expr, errtype, parmnum, fndecl);
5855 else
5856 warning ("%s of negative value %qE to %qT", errtype, expr, type);
5859 overflow_warning (expr);
5861 if (TREE_CONSTANT (expr))
5862 expr = fold_if_not_in_template (expr);
5864 return expr;
5867 /* Convert value RHS to type TYPE as preparation for an assignment to
5868 an lvalue of type TYPE. ERRTYPE is a string to use in error
5869 messages: "assignment", "return", etc. If FNDECL is non-NULL, we
5870 are doing the conversion in order to pass the PARMNUMth argument of
5871 FNDECL. */
5873 static tree
5874 convert_for_assignment (tree type, tree rhs,
5875 const char *errtype, tree fndecl, int parmnum)
5877 tree rhstype;
5878 enum tree_code coder;
5880 /* Strip NON_LVALUE_EXPRs since we aren't using as an lvalue. */
5881 if (TREE_CODE (rhs) == NON_LVALUE_EXPR)
5882 rhs = TREE_OPERAND (rhs, 0);
5884 rhstype = TREE_TYPE (rhs);
5885 coder = TREE_CODE (rhstype);
5887 if (TREE_CODE (type) == VECTOR_TYPE && coder == VECTOR_TYPE
5888 && vector_types_convertible_p (type, rhstype))
5889 return convert (type, rhs);
5891 if (rhs == error_mark_node || rhstype == error_mark_node)
5892 return error_mark_node;
5893 if (TREE_CODE (rhs) == TREE_LIST && TREE_VALUE (rhs) == error_mark_node)
5894 return error_mark_node;
5896 /* The RHS of an assignment cannot have void type. */
5897 if (coder == VOID_TYPE)
5899 error ("void value not ignored as it ought to be");
5900 return error_mark_node;
5903 /* Simplify the RHS if possible. */
5904 if (TREE_CODE (rhs) == CONST_DECL)
5905 rhs = DECL_INITIAL (rhs);
5907 /* [expr.ass]
5909 The expression is implicitly converted (clause _conv_) to the
5910 cv-unqualified type of the left operand.
5912 We allow bad conversions here because by the time we get to this point
5913 we are committed to doing the conversion. If we end up doing a bad
5914 conversion, convert_like will complain. */
5915 if (!can_convert_arg_bad (type, rhstype, rhs))
5917 /* When -Wno-pmf-conversions is use, we just silently allow
5918 conversions from pointers-to-members to plain pointers. If
5919 the conversion doesn't work, cp_convert will complain. */
5920 if (!warn_pmf2ptr
5921 && TYPE_PTR_P (type)
5922 && TYPE_PTRMEMFUNC_P (rhstype))
5923 rhs = cp_convert (strip_top_quals (type), rhs);
5924 else
5926 /* If the right-hand side has unknown type, then it is an
5927 overloaded function. Call instantiate_type to get error
5928 messages. */
5929 if (rhstype == unknown_type_node)
5930 instantiate_type (type, rhs, tf_error | tf_warning);
5931 else if (fndecl)
5932 error ("cannot convert %qT to %qT for argument %qP to %qD",
5933 rhstype, type, parmnum, fndecl);
5934 else
5935 error ("cannot convert %qT to %qT in %s", rhstype, type, errtype);
5936 return error_mark_node;
5939 return perform_implicit_conversion (strip_top_quals (type), rhs);
5942 /* Convert RHS to be of type TYPE.
5943 If EXP is nonzero, it is the target of the initialization.
5944 ERRTYPE is a string to use in error messages.
5946 Two major differences between the behavior of
5947 `convert_for_assignment' and `convert_for_initialization'
5948 are that references are bashed in the former, while
5949 copied in the latter, and aggregates are assigned in
5950 the former (operator=) while initialized in the
5951 latter (X(X&)).
5953 If using constructor make sure no conversion operator exists, if one does
5954 exist, an ambiguity exists.
5956 If flags doesn't include LOOKUP_COMPLAIN, don't complain about anything. */
5958 tree
5959 convert_for_initialization (tree exp, tree type, tree rhs, int flags,
5960 const char *errtype, tree fndecl, int parmnum)
5962 enum tree_code codel = TREE_CODE (type);
5963 tree rhstype;
5964 enum tree_code coder;
5966 /* build_c_cast puts on a NOP_EXPR to make the result not an lvalue.
5967 Strip such NOP_EXPRs, since RHS is used in non-lvalue context. */
5968 if (TREE_CODE (rhs) == NOP_EXPR
5969 && TREE_TYPE (rhs) == TREE_TYPE (TREE_OPERAND (rhs, 0))
5970 && codel != REFERENCE_TYPE)
5971 rhs = TREE_OPERAND (rhs, 0);
5973 if (rhs == error_mark_node
5974 || (TREE_CODE (rhs) == TREE_LIST && TREE_VALUE (rhs) == error_mark_node))
5975 return error_mark_node;
5977 if ((TREE_CODE (TREE_TYPE (rhs)) == ARRAY_TYPE
5978 && TREE_CODE (type) != ARRAY_TYPE
5979 && (TREE_CODE (type) != REFERENCE_TYPE
5980 || TREE_CODE (TREE_TYPE (type)) != ARRAY_TYPE))
5981 || (TREE_CODE (TREE_TYPE (rhs)) == FUNCTION_TYPE
5982 && (TREE_CODE (type) != REFERENCE_TYPE
5983 || TREE_CODE (TREE_TYPE (type)) != FUNCTION_TYPE))
5984 || TREE_CODE (TREE_TYPE (rhs)) == METHOD_TYPE)
5985 rhs = decay_conversion (rhs);
5987 rhstype = TREE_TYPE (rhs);
5988 coder = TREE_CODE (rhstype);
5990 if (coder == ERROR_MARK)
5991 return error_mark_node;
5993 /* We accept references to incomplete types, so we can
5994 return here before checking if RHS is of complete type. */
5996 if (codel == REFERENCE_TYPE)
5998 /* This should eventually happen in convert_arguments. */
5999 int savew = 0, savee = 0;
6001 if (fndecl)
6002 savew = warningcount, savee = errorcount;
6003 rhs = initialize_reference (type, rhs, /*decl=*/NULL_TREE,
6004 /*cleanup=*/NULL);
6005 if (fndecl)
6007 if (warningcount > savew)
6008 cp_warning_at ("in passing argument %P of %q+D", parmnum, fndecl);
6009 else if (errorcount > savee)
6010 cp_error_at ("in passing argument %P of %q+D", parmnum, fndecl);
6012 return rhs;
6015 if (exp != 0)
6016 exp = require_complete_type (exp);
6017 if (exp == error_mark_node)
6018 return error_mark_node;
6020 rhstype = non_reference (rhstype);
6022 type = complete_type (type);
6024 if (IS_AGGR_TYPE (type))
6025 return ocp_convert (type, rhs, CONV_IMPLICIT|CONV_FORCE_TEMP, flags);
6027 return convert_for_assignment (type, rhs, errtype, fndecl, parmnum);
6030 /* If RETVAL is the address of, or a reference to, a local variable or
6031 temporary give an appropriate warning. */
6033 static void
6034 maybe_warn_about_returning_address_of_local (tree retval)
6036 tree valtype = TREE_TYPE (DECL_RESULT (current_function_decl));
6037 tree whats_returned = retval;
6039 for (;;)
6041 if (TREE_CODE (whats_returned) == COMPOUND_EXPR)
6042 whats_returned = TREE_OPERAND (whats_returned, 1);
6043 else if (TREE_CODE (whats_returned) == CONVERT_EXPR
6044 || TREE_CODE (whats_returned) == NON_LVALUE_EXPR
6045 || TREE_CODE (whats_returned) == NOP_EXPR)
6046 whats_returned = TREE_OPERAND (whats_returned, 0);
6047 else
6048 break;
6051 if (TREE_CODE (whats_returned) != ADDR_EXPR)
6052 return;
6053 whats_returned = TREE_OPERAND (whats_returned, 0);
6055 if (TREE_CODE (valtype) == REFERENCE_TYPE)
6057 if (TREE_CODE (whats_returned) == AGGR_INIT_EXPR
6058 || TREE_CODE (whats_returned) == TARGET_EXPR)
6060 warning ("returning reference to temporary");
6061 return;
6063 if (TREE_CODE (whats_returned) == VAR_DECL
6064 && DECL_NAME (whats_returned)
6065 && TEMP_NAME_P (DECL_NAME (whats_returned)))
6067 warning ("reference to non-lvalue returned");
6068 return;
6072 if (DECL_P (whats_returned)
6073 && DECL_NAME (whats_returned)
6074 && DECL_FUNCTION_SCOPE_P (whats_returned)
6075 && !(TREE_STATIC (whats_returned)
6076 || TREE_PUBLIC (whats_returned)))
6078 if (TREE_CODE (valtype) == REFERENCE_TYPE)
6079 cp_warning_at ("reference to local variable %qD returned",
6080 whats_returned);
6081 else
6082 cp_warning_at ("address of local variable %qD returned",
6083 whats_returned);
6084 return;
6088 /* Check that returning RETVAL from the current function is valid.
6089 Return an expression explicitly showing all conversions required to
6090 change RETVAL into the function return type, and to assign it to
6091 the DECL_RESULT for the function. */
6093 tree
6094 check_return_expr (tree retval)
6096 tree result;
6097 /* The type actually returned by the function, after any
6098 promotions. */
6099 tree valtype;
6100 int fn_returns_value_p;
6102 /* A `volatile' function is one that isn't supposed to return, ever.
6103 (This is a G++ extension, used to get better code for functions
6104 that call the `volatile' function.) */
6105 if (TREE_THIS_VOLATILE (current_function_decl))
6106 warning ("function declared %<noreturn%> has a %<return%> statement");
6108 /* Check for various simple errors. */
6109 if (DECL_DESTRUCTOR_P (current_function_decl))
6111 if (retval)
6112 error ("returning a value from a destructor");
6113 return NULL_TREE;
6115 else if (DECL_CONSTRUCTOR_P (current_function_decl))
6117 if (in_function_try_handler)
6118 /* If a return statement appears in a handler of the
6119 function-try-block of a constructor, the program is ill-formed. */
6120 error ("cannot return from a handler of a function-try-block of a constructor");
6121 else if (retval)
6122 /* You can't return a value from a constructor. */
6123 error ("returning a value from a constructor");
6124 return NULL_TREE;
6127 if (processing_template_decl)
6129 current_function_returns_value = 1;
6130 return retval;
6133 /* When no explicit return-value is given in a function with a named
6134 return value, the named return value is used. */
6135 result = DECL_RESULT (current_function_decl);
6136 valtype = TREE_TYPE (result);
6137 gcc_assert (valtype != NULL_TREE);
6138 fn_returns_value_p = !VOID_TYPE_P (valtype);
6139 if (!retval && DECL_NAME (result) && fn_returns_value_p)
6140 retval = result;
6142 /* Check for a return statement with no return value in a function
6143 that's supposed to return a value. */
6144 if (!retval && fn_returns_value_p)
6146 pedwarn ("return-statement with no value, in function returning %qT",
6147 valtype);
6148 /* Clear this, so finish_function won't say that we reach the
6149 end of a non-void function (which we don't, we gave a
6150 return!). */
6151 current_function_returns_null = 0;
6153 /* Check for a return statement with a value in a function that
6154 isn't supposed to return a value. */
6155 else if (retval && !fn_returns_value_p)
6157 if (VOID_TYPE_P (TREE_TYPE (retval)))
6158 /* You can return a `void' value from a function of `void'
6159 type. In that case, we have to evaluate the expression for
6160 its side-effects. */
6161 finish_expr_stmt (retval);
6162 else
6163 pedwarn ("return-statement with a value, in function "
6164 "returning 'void'");
6166 current_function_returns_null = 1;
6168 /* There's really no value to return, after all. */
6169 return NULL_TREE;
6171 else if (!retval)
6172 /* Remember that this function can sometimes return without a
6173 value. */
6174 current_function_returns_null = 1;
6175 else
6176 /* Remember that this function did return a value. */
6177 current_function_returns_value = 1;
6179 /* Check for erroneous operands -- but after giving ourselves a
6180 chance to provide an error about returning a value from a void
6181 function. */
6182 if (error_operand_p (retval))
6184 current_function_return_value = error_mark_node;
6185 return error_mark_node;
6188 /* Only operator new(...) throw(), can return NULL [expr.new/13]. */
6189 if ((DECL_OVERLOADED_OPERATOR_P (current_function_decl) == NEW_EXPR
6190 || DECL_OVERLOADED_OPERATOR_P (current_function_decl) == VEC_NEW_EXPR)
6191 && !TYPE_NOTHROW_P (TREE_TYPE (current_function_decl))
6192 && ! flag_check_new
6193 && null_ptr_cst_p (retval))
6194 warning ("%<operator new%> must not return NULL unless it is "
6195 "declared %<throw()%> (or -fcheck-new is in effect)");
6197 /* Effective C++ rule 15. See also start_function. */
6198 if (warn_ecpp
6199 && DECL_NAME (current_function_decl) == ansi_assopname(NOP_EXPR))
6201 bool warn = true;
6203 /* The function return type must be a reference to the current
6204 class. */
6205 if (TREE_CODE (valtype) == REFERENCE_TYPE
6206 && same_type_ignoring_top_level_qualifiers_p
6207 (TREE_TYPE (valtype), TREE_TYPE (current_class_ref)))
6209 /* Returning '*this' is obviously OK. */
6210 if (retval == current_class_ref)
6211 warn = false;
6212 /* If we are calling a function whose return type is the same of
6213 the current class reference, it is ok. */
6214 else if (TREE_CODE (retval) == INDIRECT_REF
6215 && TREE_CODE (TREE_OPERAND (retval, 0)) == CALL_EXPR)
6216 warn = false;
6219 if (warn)
6220 warning ("%<operator=%> should return a reference to %<*this%>");
6223 /* The fabled Named Return Value optimization, as per [class.copy]/15:
6225 [...] For a function with a class return type, if the expression
6226 in the return statement is the name of a local object, and the cv-
6227 unqualified type of the local object is the same as the function
6228 return type, an implementation is permitted to omit creating the tem-
6229 porary object to hold the function return value [...]
6231 So, if this is a value-returning function that always returns the same
6232 local variable, remember it.
6234 It might be nice to be more flexible, and choose the first suitable
6235 variable even if the function sometimes returns something else, but
6236 then we run the risk of clobbering the variable we chose if the other
6237 returned expression uses the chosen variable somehow. And people expect
6238 this restriction, anyway. (jason 2000-11-19)
6240 See finish_function and finalize_nrv for the rest of this optimization. */
6242 if (fn_returns_value_p && flag_elide_constructors)
6244 if (retval != NULL_TREE
6245 && (current_function_return_value == NULL_TREE
6246 || current_function_return_value == retval)
6247 && TREE_CODE (retval) == VAR_DECL
6248 && DECL_CONTEXT (retval) == current_function_decl
6249 && ! TREE_STATIC (retval)
6250 && (DECL_ALIGN (retval)
6251 >= DECL_ALIGN (DECL_RESULT (current_function_decl)))
6252 && same_type_p ((TYPE_MAIN_VARIANT
6253 (TREE_TYPE (retval))),
6254 (TYPE_MAIN_VARIANT
6255 (TREE_TYPE (TREE_TYPE (current_function_decl))))))
6256 current_function_return_value = retval;
6257 else
6258 current_function_return_value = error_mark_node;
6261 /* We don't need to do any conversions when there's nothing being
6262 returned. */
6263 if (!retval)
6264 return NULL_TREE;
6266 /* Do any required conversions. */
6267 if (retval == result || DECL_CONSTRUCTOR_P (current_function_decl))
6268 /* No conversions are required. */
6270 else
6272 /* The type the function is declared to return. */
6273 tree functype = TREE_TYPE (TREE_TYPE (current_function_decl));
6275 /* First convert the value to the function's return type, then
6276 to the type of return value's location to handle the
6277 case that functype is smaller than the valtype. */
6278 retval = convert_for_initialization
6279 (NULL_TREE, functype, retval, LOOKUP_NORMAL|LOOKUP_ONLYCONVERTING,
6280 "return", NULL_TREE, 0);
6281 retval = convert (valtype, retval);
6283 /* If the conversion failed, treat this just like `return;'. */
6284 if (retval == error_mark_node)
6285 return retval;
6286 /* We can't initialize a register from a AGGR_INIT_EXPR. */
6287 else if (! current_function_returns_struct
6288 && TREE_CODE (retval) == TARGET_EXPR
6289 && TREE_CODE (TREE_OPERAND (retval, 1)) == AGGR_INIT_EXPR)
6290 retval = build2 (COMPOUND_EXPR, TREE_TYPE (retval), retval,
6291 TREE_OPERAND (retval, 0));
6292 else
6293 maybe_warn_about_returning_address_of_local (retval);
6296 /* Actually copy the value returned into the appropriate location. */
6297 if (retval && retval != result)
6298 retval = build2 (INIT_EXPR, TREE_TYPE (result), result, retval);
6300 return retval;
6304 /* Returns nonzero if the pointer-type FROM can be converted to the
6305 pointer-type TO via a qualification conversion. If CONSTP is -1,
6306 then we return nonzero if the pointers are similar, and the
6307 cv-qualification signature of FROM is a proper subset of that of TO.
6309 If CONSTP is positive, then all outer pointers have been
6310 const-qualified. */
6312 static int
6313 comp_ptr_ttypes_real (tree to, tree from, int constp)
6315 bool to_more_cv_qualified = false;
6317 for (; ; to = TREE_TYPE (to), from = TREE_TYPE (from))
6319 if (TREE_CODE (to) != TREE_CODE (from))
6320 return 0;
6322 if (TREE_CODE (from) == OFFSET_TYPE
6323 && !same_type_p (TYPE_OFFSET_BASETYPE (from),
6324 TYPE_OFFSET_BASETYPE (to)))
6325 return 0;
6327 /* Const and volatile mean something different for function types,
6328 so the usual checks are not appropriate. */
6329 if (TREE_CODE (to) != FUNCTION_TYPE && TREE_CODE (to) != METHOD_TYPE)
6331 if (!at_least_as_qualified_p (to, from))
6332 return 0;
6334 if (!at_least_as_qualified_p (from, to))
6336 if (constp == 0)
6337 return 0;
6338 to_more_cv_qualified = true;
6341 if (constp > 0)
6342 constp &= TYPE_READONLY (to);
6345 if (TREE_CODE (to) != POINTER_TYPE && !TYPE_PTRMEM_P (to))
6346 return ((constp >= 0 || to_more_cv_qualified)
6347 && same_type_ignoring_top_level_qualifiers_p (to, from));
6351 /* When comparing, say, char ** to char const **, this function takes
6352 the 'char *' and 'char const *'. Do not pass non-pointer/reference
6353 types to this function. */
6356 comp_ptr_ttypes (tree to, tree from)
6358 return comp_ptr_ttypes_real (to, from, 1);
6361 /* Returns 1 if to and from are (possibly multi-level) pointers to the same
6362 type or inheritance-related types, regardless of cv-quals. */
6365 ptr_reasonably_similar (tree to, tree from)
6367 for (; ; to = TREE_TYPE (to), from = TREE_TYPE (from))
6369 /* Any target type is similar enough to void. */
6370 if (TREE_CODE (to) == VOID_TYPE
6371 || TREE_CODE (from) == VOID_TYPE)
6372 return 1;
6374 if (TREE_CODE (to) != TREE_CODE (from))
6375 return 0;
6377 if (TREE_CODE (from) == OFFSET_TYPE
6378 && comptypes (TYPE_OFFSET_BASETYPE (to),
6379 TYPE_OFFSET_BASETYPE (from),
6380 COMPARE_BASE | COMPARE_DERIVED))
6381 continue;
6383 if (TREE_CODE (to) == VECTOR_TYPE
6384 && vector_types_convertible_p (to, from))
6385 return 1;
6387 if (TREE_CODE (to) == INTEGER_TYPE
6388 && TYPE_PRECISION (to) == TYPE_PRECISION (from))
6389 return 1;
6391 if (TREE_CODE (to) == FUNCTION_TYPE)
6392 return 1;
6394 if (TREE_CODE (to) != POINTER_TYPE)
6395 return comptypes
6396 (TYPE_MAIN_VARIANT (to), TYPE_MAIN_VARIANT (from),
6397 COMPARE_BASE | COMPARE_DERIVED);
6401 /* Like comp_ptr_ttypes, for const_cast. */
6403 static int
6404 comp_ptr_ttypes_const (tree to, tree from)
6406 for (; ; to = TREE_TYPE (to), from = TREE_TYPE (from))
6408 if (TREE_CODE (to) != TREE_CODE (from))
6409 return 0;
6411 if (TREE_CODE (from) == OFFSET_TYPE
6412 && same_type_p (TYPE_OFFSET_BASETYPE (from),
6413 TYPE_OFFSET_BASETYPE (to)))
6414 continue;
6416 if (TREE_CODE (to) != POINTER_TYPE)
6417 return same_type_ignoring_top_level_qualifiers_p (to, from);
6421 /* Returns the type qualifiers for this type, including the qualifiers on the
6422 elements for an array type. */
6425 cp_type_quals (tree type)
6427 type = strip_array_types (type);
6428 if (type == error_mark_node)
6429 return TYPE_UNQUALIFIED;
6430 return TYPE_QUALS (type);
6433 /* Returns nonzero if the TYPE contains a mutable member. */
6435 bool
6436 cp_has_mutable_p (tree type)
6438 type = strip_array_types (type);
6440 return CLASS_TYPE_P (type) && CLASSTYPE_HAS_MUTABLE (type);
6443 /* Subroutine of casts_away_constness. Make T1 and T2 point at
6444 exemplar types such that casting T1 to T2 is casting away constness
6445 if and only if there is no implicit conversion from T1 to T2. */
6447 static void
6448 casts_away_constness_r (tree *t1, tree *t2)
6450 int quals1;
6451 int quals2;
6453 /* [expr.const.cast]
6455 For multi-level pointer to members and multi-level mixed pointers
6456 and pointers to members (conv.qual), the "member" aspect of a
6457 pointer to member level is ignored when determining if a const
6458 cv-qualifier has been cast away. */
6459 if (TYPE_PTRMEM_P (*t1))
6460 *t1 = build_pointer_type (TYPE_PTRMEM_POINTED_TO_TYPE (*t1));
6461 if (TYPE_PTRMEM_P (*t2))
6462 *t2 = build_pointer_type (TYPE_PTRMEM_POINTED_TO_TYPE (*t2));
6464 /* [expr.const.cast]
6466 For two pointer types:
6468 X1 is T1cv1,1 * ... cv1,N * where T1 is not a pointer type
6469 X2 is T2cv2,1 * ... cv2,M * where T2 is not a pointer type
6470 K is min(N,M)
6472 casting from X1 to X2 casts away constness if, for a non-pointer
6473 type T there does not exist an implicit conversion (clause
6474 _conv_) from:
6476 Tcv1,(N-K+1) * cv1,(N-K+2) * ... cv1,N *
6480 Tcv2,(M-K+1) * cv2,(M-K+2) * ... cv2,M *. */
6482 if (TREE_CODE (*t1) != POINTER_TYPE
6483 || TREE_CODE (*t2) != POINTER_TYPE)
6485 *t1 = cp_build_qualified_type (void_type_node,
6486 cp_type_quals (*t1));
6487 *t2 = cp_build_qualified_type (void_type_node,
6488 cp_type_quals (*t2));
6489 return;
6492 quals1 = cp_type_quals (*t1);
6493 quals2 = cp_type_quals (*t2);
6494 *t1 = TREE_TYPE (*t1);
6495 *t2 = TREE_TYPE (*t2);
6496 casts_away_constness_r (t1, t2);
6497 *t1 = build_pointer_type (*t1);
6498 *t2 = build_pointer_type (*t2);
6499 *t1 = cp_build_qualified_type (*t1, quals1);
6500 *t2 = cp_build_qualified_type (*t2, quals2);
6503 /* Returns nonzero if casting from TYPE1 to TYPE2 casts away
6504 constness. */
6506 static bool
6507 casts_away_constness (tree t1, tree t2)
6509 if (TREE_CODE (t2) == REFERENCE_TYPE)
6511 /* [expr.const.cast]
6513 Casting from an lvalue of type T1 to an lvalue of type T2
6514 using a reference cast casts away constness if a cast from an
6515 rvalue of type "pointer to T1" to the type "pointer to T2"
6516 casts away constness. */
6517 t1 = (TREE_CODE (t1) == REFERENCE_TYPE ? TREE_TYPE (t1) : t1);
6518 return casts_away_constness (build_pointer_type (t1),
6519 build_pointer_type (TREE_TYPE (t2)));
6522 if (TYPE_PTRMEM_P (t1) && TYPE_PTRMEM_P (t2))
6523 /* [expr.const.cast]
6525 Casting from an rvalue of type "pointer to data member of X
6526 of type T1" to the type "pointer to data member of Y of type
6527 T2" casts away constness if a cast from an rvalue of type
6528 "pointer to T1" to the type "pointer to T2" casts away
6529 constness. */
6530 return casts_away_constness
6531 (build_pointer_type (TYPE_PTRMEM_POINTED_TO_TYPE (t1)),
6532 build_pointer_type (TYPE_PTRMEM_POINTED_TO_TYPE (t2)));
6534 /* Casting away constness is only something that makes sense for
6535 pointer or reference types. */
6536 if (TREE_CODE (t1) != POINTER_TYPE
6537 || TREE_CODE (t2) != POINTER_TYPE)
6538 return false;
6540 /* Top-level qualifiers don't matter. */
6541 t1 = TYPE_MAIN_VARIANT (t1);
6542 t2 = TYPE_MAIN_VARIANT (t2);
6543 casts_away_constness_r (&t1, &t2);
6544 if (!can_convert (t2, t1))
6545 return true;
6547 return false;
6550 /* If T is a REFERENCE_TYPE return the type to which T refers.
6551 Otherwise, return T itself. */
6553 tree
6554 non_reference (tree t)
6556 if (TREE_CODE (t) == REFERENCE_TYPE)
6557 t = TREE_TYPE (t);
6558 return t;