(thumb_jump): Reduce the backward branch range, and increase the forward branch
[official-gcc.git] / gcc / cp / typeck.c
blobedd86ea99262a198ce929653c57257329b4d7ffb
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 There are also routines to build RETURN_STMT nodes and CASE_STMT nodes,
30 and to process initializations in declarations (since they work
31 like a strange sort of assignment). */
33 #include "config.h"
34 #include "system.h"
35 #include "coretypes.h"
36 #include "tm.h"
37 #include "tree.h"
38 #include "rtl.h"
39 #include "expr.h"
40 #include "cp-tree.h"
41 #include "tm_p.h"
42 #include "flags.h"
43 #include "output.h"
44 #include "toplev.h"
45 #include "diagnostic.h"
46 #include "target.h"
47 #include "convert.h"
49 static tree convert_for_assignment (tree, tree, const char *, tree, int);
50 static tree cp_pointer_int_sum (enum tree_code, tree, tree);
51 static tree rationalize_conditional_expr (enum tree_code, tree);
52 static int comp_ptr_ttypes_real (tree, tree, int);
53 static int comp_ptr_ttypes_const (tree, tree);
54 static bool comp_except_types (tree, tree, bool);
55 static bool comp_array_types (tree, tree, bool);
56 static tree common_base_type (tree, tree);
57 static tree lookup_anon_field (tree, tree);
58 static tree pointer_diff (tree, tree, tree);
59 static tree get_delta_difference (tree, tree, int);
60 static void casts_away_constness_r (tree *, tree *);
61 static bool casts_away_constness (tree, tree);
62 static void maybe_warn_about_returning_address_of_local (tree);
63 static tree lookup_destructor (tree, tree, tree);
65 /* Return the target type of TYPE, which means return T for:
66 T*, T&, T[], T (...), and otherwise, just T. */
68 tree
69 target_type (tree type)
71 type = non_reference (type);
72 while (TREE_CODE (type) == POINTER_TYPE
73 || TREE_CODE (type) == ARRAY_TYPE
74 || TREE_CODE (type) == FUNCTION_TYPE
75 || TREE_CODE (type) == METHOD_TYPE
76 || TYPE_PTRMEM_P (type))
77 type = TREE_TYPE (type);
78 return type;
81 /* Do `exp = require_complete_type (exp);' to make sure exp
82 does not have an incomplete type. (That includes void types.)
83 Returns the error_mark_node if the VALUE does not have
84 complete type when this function returns. */
86 tree
87 require_complete_type (tree value)
89 tree type;
91 if (processing_template_decl || value == error_mark_node)
92 return value;
94 if (TREE_CODE (value) == OVERLOAD)
95 type = unknown_type_node;
96 else
97 type = TREE_TYPE (value);
99 /* First, detect a valid value with a complete type. */
100 if (COMPLETE_TYPE_P (type))
101 return value;
103 if (complete_type_or_else (type, value))
104 return value;
105 else
106 return error_mark_node;
109 /* Try to complete TYPE, if it is incomplete. For example, if TYPE is
110 a template instantiation, do the instantiation. Returns TYPE,
111 whether or not it could be completed, unless something goes
112 horribly wrong, in which case the error_mark_node is returned. */
114 tree
115 complete_type (tree type)
117 if (type == NULL_TREE)
118 /* Rather than crash, we return something sure to cause an error
119 at some point. */
120 return error_mark_node;
122 if (type == error_mark_node || COMPLETE_TYPE_P (type))
124 else if (TREE_CODE (type) == ARRAY_TYPE && TYPE_DOMAIN (type))
126 tree t = complete_type (TREE_TYPE (type));
127 if (COMPLETE_TYPE_P (t) && ! processing_template_decl)
128 layout_type (type);
129 TYPE_NEEDS_CONSTRUCTING (type)
130 = TYPE_NEEDS_CONSTRUCTING (TYPE_MAIN_VARIANT (t));
131 TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type)
132 = TYPE_HAS_NONTRIVIAL_DESTRUCTOR (TYPE_MAIN_VARIANT (t));
134 else if (CLASS_TYPE_P (type) && CLASSTYPE_TEMPLATE_INSTANTIATION (type))
135 instantiate_class_template (TYPE_MAIN_VARIANT (type));
137 return type;
140 /* Like complete_type, but issue an error if the TYPE cannot be completed.
141 VALUE is used for informative diagnostics. DIAG_TYPE indicates the type
142 of diagnostic: 0 for an error, 1 for a warning, 2 for a pedwarn.
143 Returns NULL_TREE if the type cannot be made complete. */
145 tree
146 complete_type_or_diagnostic (tree type, tree value, int diag_type)
148 type = complete_type (type);
149 if (type == error_mark_node)
150 /* We already issued an error. */
151 return NULL_TREE;
152 else if (!COMPLETE_TYPE_P (type))
154 cxx_incomplete_type_diagnostic (value, type, diag_type);
155 return NULL_TREE;
157 else
158 return type;
161 /* Return truthvalue of whether type of EXP is instantiated. */
164 type_unknown_p (tree exp)
166 return (TREE_CODE (exp) == TREE_LIST
167 || TREE_TYPE (exp) == unknown_type_node);
171 /* Return the common type of two parameter lists.
172 We assume that comptypes has already been done and returned 1;
173 if that isn't so, this may crash.
175 As an optimization, free the space we allocate if the parameter
176 lists are already common. */
178 tree
179 commonparms (tree p1, tree p2)
181 tree oldargs = p1, newargs, n;
182 int i, len;
183 int any_change = 0;
185 len = list_length (p1);
186 newargs = tree_last (p1);
188 if (newargs == void_list_node)
189 i = 1;
190 else
192 i = 0;
193 newargs = 0;
196 for (; i < len; i++)
197 newargs = tree_cons (NULL_TREE, NULL_TREE, newargs);
199 n = newargs;
201 for (i = 0; p1;
202 p1 = TREE_CHAIN (p1), p2 = TREE_CHAIN (p2), n = TREE_CHAIN (n), i++)
204 if (TREE_PURPOSE (p1) && !TREE_PURPOSE (p2))
206 TREE_PURPOSE (n) = TREE_PURPOSE (p1);
207 any_change = 1;
209 else if (! TREE_PURPOSE (p1))
211 if (TREE_PURPOSE (p2))
213 TREE_PURPOSE (n) = TREE_PURPOSE (p2);
214 any_change = 1;
217 else
219 if (1 != simple_cst_equal (TREE_PURPOSE (p1), TREE_PURPOSE (p2)))
220 any_change = 1;
221 TREE_PURPOSE (n) = TREE_PURPOSE (p2);
223 if (TREE_VALUE (p1) != TREE_VALUE (p2))
225 any_change = 1;
226 TREE_VALUE (n) = merge_types (TREE_VALUE (p1), TREE_VALUE (p2));
228 else
229 TREE_VALUE (n) = TREE_VALUE (p1);
231 if (! any_change)
232 return oldargs;
234 return newargs;
237 /* Given a type, perhaps copied for a typedef,
238 find the "original" version of it. */
239 tree
240 original_type (tree t)
242 while (TYPE_NAME (t) != NULL_TREE)
244 tree x = TYPE_NAME (t);
245 if (TREE_CODE (x) != TYPE_DECL)
246 break;
247 x = DECL_ORIGINAL_TYPE (x);
248 if (x == NULL_TREE)
249 break;
250 t = x;
252 return t;
255 /* T1 and T2 are arithmetic or enumeration types. Return the type
256 that will result from the "usual arithmetic conversions" on T1 and
257 T2 as described in [expr]. */
259 tree
260 type_after_usual_arithmetic_conversions (tree t1, tree t2)
262 enum tree_code code1 = TREE_CODE (t1);
263 enum tree_code code2 = TREE_CODE (t2);
264 tree attributes;
266 /* FIXME: Attributes. */
267 my_friendly_assert (ARITHMETIC_TYPE_P (t1)
268 || TREE_CODE (t1) == COMPLEX_TYPE
269 || TREE_CODE (t1) == ENUMERAL_TYPE,
270 19990725);
271 my_friendly_assert (ARITHMETIC_TYPE_P (t2)
272 || TREE_CODE (t2) == COMPLEX_TYPE
273 || TREE_CODE (t2) == ENUMERAL_TYPE,
274 19990725);
276 /* In what follows, we slightly generalize the rules given in [expr] so
277 as to deal with `long long' and `complex'. First, merge the
278 attributes. */
279 attributes = (*targetm.merge_type_attributes) (t1, t2);
281 /* If one type is complex, form the common type of the non-complex
282 components, then make that complex. Use T1 or T2 if it is the
283 required type. */
284 if (code1 == COMPLEX_TYPE || code2 == COMPLEX_TYPE)
286 tree subtype1 = code1 == COMPLEX_TYPE ? TREE_TYPE (t1) : t1;
287 tree subtype2 = code2 == COMPLEX_TYPE ? TREE_TYPE (t2) : t2;
288 tree subtype
289 = type_after_usual_arithmetic_conversions (subtype1, subtype2);
291 if (code1 == COMPLEX_TYPE && TREE_TYPE (t1) == subtype)
292 return build_type_attribute_variant (t1, attributes);
293 else if (code2 == COMPLEX_TYPE && TREE_TYPE (t2) == subtype)
294 return build_type_attribute_variant (t2, attributes);
295 else
296 return build_type_attribute_variant (build_complex_type (subtype),
297 attributes);
300 /* If only one is real, use it as the result. */
301 if (code1 == REAL_TYPE && code2 != REAL_TYPE)
302 return build_type_attribute_variant (t1, attributes);
303 if (code2 == REAL_TYPE && code1 != REAL_TYPE)
304 return build_type_attribute_variant (t2, attributes);
306 /* Perform the integral promotions. */
307 if (code1 != REAL_TYPE)
309 t1 = type_promotes_to (t1);
310 t2 = type_promotes_to (t2);
313 /* Both real or both integers; use the one with greater precision. */
314 if (TYPE_PRECISION (t1) > TYPE_PRECISION (t2))
315 return build_type_attribute_variant (t1, attributes);
316 else if (TYPE_PRECISION (t2) > TYPE_PRECISION (t1))
317 return build_type_attribute_variant (t2, attributes);
319 /* The types are the same; no need to do anything fancy. */
320 if (TYPE_MAIN_VARIANT (t1) == TYPE_MAIN_VARIANT (t2))
321 return build_type_attribute_variant (t1, attributes);
323 if (code1 != REAL_TYPE)
325 /* If one is a sizetype, use it so size_binop doesn't blow up. */
326 if (TYPE_IS_SIZETYPE (t1) > TYPE_IS_SIZETYPE (t2))
327 return build_type_attribute_variant (t1, attributes);
328 if (TYPE_IS_SIZETYPE (t2) > TYPE_IS_SIZETYPE (t1))
329 return build_type_attribute_variant (t2, attributes);
331 /* If one is unsigned long long, then convert the other to unsigned
332 long long. */
333 if (same_type_p (TYPE_MAIN_VARIANT (t1), long_long_unsigned_type_node)
334 || same_type_p (TYPE_MAIN_VARIANT (t2), long_long_unsigned_type_node))
335 return build_type_attribute_variant (long_long_unsigned_type_node,
336 attributes);
337 /* If one is a long long, and the other is an unsigned long, and
338 long long can represent all the values of an unsigned long, then
339 convert to a long long. Otherwise, convert to an unsigned long
340 long. Otherwise, if either operand is long long, convert the
341 other to long long.
343 Since we're here, we know the TYPE_PRECISION is the same;
344 therefore converting to long long cannot represent all the values
345 of an unsigned long, so we choose unsigned long long in that
346 case. */
347 if (same_type_p (TYPE_MAIN_VARIANT (t1), long_long_integer_type_node)
348 || same_type_p (TYPE_MAIN_VARIANT (t2), long_long_integer_type_node))
350 tree t = ((TREE_UNSIGNED (t1) || TREE_UNSIGNED (t2))
351 ? long_long_unsigned_type_node
352 : long_long_integer_type_node);
353 return build_type_attribute_variant (t, attributes);
356 /* Go through the same procedure, but for longs. */
357 if (same_type_p (TYPE_MAIN_VARIANT (t1), long_unsigned_type_node)
358 || same_type_p (TYPE_MAIN_VARIANT (t2), long_unsigned_type_node))
359 return build_type_attribute_variant (long_unsigned_type_node,
360 attributes);
361 if (same_type_p (TYPE_MAIN_VARIANT (t1), long_integer_type_node)
362 || same_type_p (TYPE_MAIN_VARIANT (t2), long_integer_type_node))
364 tree t = ((TREE_UNSIGNED (t1) || TREE_UNSIGNED (t2))
365 ? long_unsigned_type_node : long_integer_type_node);
366 return build_type_attribute_variant (t, attributes);
368 /* Otherwise prefer the unsigned one. */
369 if (TREE_UNSIGNED (t1))
370 return build_type_attribute_variant (t1, attributes);
371 else
372 return build_type_attribute_variant (t2, attributes);
374 else
376 if (same_type_p (TYPE_MAIN_VARIANT (t1), long_double_type_node)
377 || same_type_p (TYPE_MAIN_VARIANT (t2), long_double_type_node))
378 return build_type_attribute_variant (long_double_type_node,
379 attributes);
380 if (same_type_p (TYPE_MAIN_VARIANT (t1), double_type_node)
381 || same_type_p (TYPE_MAIN_VARIANT (t2), double_type_node))
382 return build_type_attribute_variant (double_type_node,
383 attributes);
384 if (same_type_p (TYPE_MAIN_VARIANT (t1), float_type_node)
385 || same_type_p (TYPE_MAIN_VARIANT (t2), float_type_node))
386 return build_type_attribute_variant (float_type_node,
387 attributes);
389 /* Two floating-point types whose TYPE_MAIN_VARIANTs are none of
390 the standard C++ floating-point types. Logic earlier in this
391 function has already eliminated the possibility that
392 TYPE_PRECISION (t2) != TYPE_PRECISION (t1), so there's no
393 compelling reason to choose one or the other. */
394 return build_type_attribute_variant (t1, attributes);
398 /* Subroutine of composite_pointer_type to implement the recursive
399 case. See that function for documentation fo the parameters. */
401 static tree
402 composite_pointer_type_r (tree t1, tree t2, const char* location)
404 tree pointee1;
405 tree pointee2;
406 tree result_type;
407 tree attributes;
409 /* Determine the types pointed to by T1 and T2. */
410 if (TREE_CODE (t1) == POINTER_TYPE)
412 pointee1 = TREE_TYPE (t1);
413 pointee2 = TREE_TYPE (t2);
415 else
417 pointee1 = TYPE_PTRMEM_POINTED_TO_TYPE (t1);
418 pointee2 = TYPE_PTRMEM_POINTED_TO_TYPE (t2);
421 /* [expr.rel]
423 Otherwise, the composite pointer type is a pointer type
424 similar (_conv.qual_) to the type of one of the operands,
425 with a cv-qualification signature (_conv.qual_) that is the
426 union of the cv-qualification signatures of the operand
427 types. */
428 if (same_type_ignoring_top_level_qualifiers_p (pointee1, pointee2))
429 result_type = pointee1;
430 else if ((TREE_CODE (pointee1) == POINTER_TYPE
431 && TREE_CODE (pointee2) == POINTER_TYPE)
432 || (TYPE_PTR_TO_MEMBER_P (pointee1)
433 && TYPE_PTR_TO_MEMBER_P (pointee2)))
434 result_type = composite_pointer_type_r (pointee1, pointee2, location);
435 else
437 pedwarn ("%s between distinct pointer types `%T' and `%T' "
438 "lacks a cast",
439 location, t1, t2);
440 result_type = void_type_node;
442 result_type = cp_build_qualified_type (result_type,
443 (cp_type_quals (pointee1)
444 | cp_type_quals (pointee2)));
445 /* If the original types were pointers to members, so is the
446 result. */
447 if (TYPE_PTR_TO_MEMBER_P (t1))
449 if (!same_type_p (TYPE_PTRMEM_CLASS_TYPE (t1),
450 TYPE_PTRMEM_CLASS_TYPE (t2)))
451 pedwarn ("%s between distinct pointer types `%T' and `%T' "
452 "lacks a cast",
453 location, t1, t2);
454 result_type = build_ptrmem_type (TYPE_PTRMEM_CLASS_TYPE (t1),
455 result_type);
457 else
458 result_type = build_pointer_type (result_type);
460 /* Merge the attributes. */
461 attributes = (*targetm.merge_type_attributes) (t1, t2);
462 return build_type_attribute_variant (result_type, attributes);
465 /* Return the composite pointer type (see [expr.rel]) for T1 and T2.
466 ARG1 and ARG2 are the values with those types. The LOCATION is a
467 string describing the current location, in case an error occurs.
469 This routine also implements the computation of a common type for
470 pointers-to-members as per [expr.eq]. */
472 tree
473 composite_pointer_type (tree t1, tree t2, tree arg1, tree arg2,
474 const char* location)
476 tree class1;
477 tree class2;
479 /* [expr.rel]
481 If one operand is a null pointer constant, the composite pointer
482 type is the type of the other operand. */
483 if (null_ptr_cst_p (arg1))
484 return t2;
485 if (null_ptr_cst_p (arg2))
486 return t1;
488 /* We have:
490 [expr.rel]
492 If one of the operands has type "pointer to cv1 void*", then
493 the other has type "pointer to cv2T", and the composite pointer
494 type is "pointer to cv12 void", where cv12 is the union of cv1
495 and cv2.
497 If either type is a pointer to void, make sure it is T1. */
498 if (TREE_CODE (t2) == POINTER_TYPE && VOID_TYPE_P (TREE_TYPE (t2)))
500 tree t;
501 t = t1;
502 t1 = t2;
503 t2 = t;
506 /* Now, if T1 is a pointer to void, merge the qualifiers. */
507 if (TREE_CODE (t1) == POINTER_TYPE && VOID_TYPE_P (TREE_TYPE (t1)))
509 tree attributes;
510 tree result_type;
512 if (pedantic && TYPE_PTRFN_P (t2))
513 pedwarn ("ISO C++ forbids %s between pointer of type `void *' and pointer-to-function", location);
514 result_type
515 = cp_build_qualified_type (void_type_node,
516 (cp_type_quals (TREE_TYPE (t1))
517 | cp_type_quals (TREE_TYPE (t2))));
518 result_type = build_pointer_type (result_type);
519 /* Merge the attributes. */
520 attributes = (*targetm.merge_type_attributes) (t1, t2);
521 return build_type_attribute_variant (result_type, attributes);
524 /* [expr.eq] permits the application of a pointer conversion to
525 bring the pointers to a common type. */
526 if (TREE_CODE (t1) == POINTER_TYPE && TREE_CODE (t2) == POINTER_TYPE
527 && CLASS_TYPE_P (TREE_TYPE (t1))
528 && CLASS_TYPE_P (TREE_TYPE (t2))
529 && !same_type_ignoring_top_level_qualifiers_p (TREE_TYPE (t1),
530 TREE_TYPE (t2)))
532 class1 = TREE_TYPE (t1);
533 class2 = TREE_TYPE (t2);
535 if (DERIVED_FROM_P (class1, class2))
536 t2 = (build_pointer_type
537 (cp_build_qualified_type (class1, TYPE_QUALS (class2))));
538 else if (DERIVED_FROM_P (class2, class1))
539 t1 = (build_pointer_type
540 (cp_build_qualified_type (class2, TYPE_QUALS (class1))));
541 else
543 error ("%s between distinct pointer types `%T' and `%T' "
544 "lacks a cast", location, t1, t2);
545 return error_mark_node;
548 /* [expr.eq] permits the application of a pointer-to-member
549 conversion to change the class type of one of the types. */
550 else if (TYPE_PTR_TO_MEMBER_P (t1)
551 && !same_type_p (TYPE_PTRMEM_CLASS_TYPE (t1),
552 TYPE_PTRMEM_CLASS_TYPE (t2)))
554 class1 = TYPE_PTRMEM_CLASS_TYPE (t1);
555 class2 = TYPE_PTRMEM_CLASS_TYPE (t2);
557 if (DERIVED_FROM_P (class1, class2))
558 t1 = build_ptrmem_type (class2, TYPE_PTRMEM_POINTED_TO_TYPE (t1));
559 else if (DERIVED_FROM_P (class2, class1))
560 t2 = build_ptrmem_type (class1, TYPE_PTRMEM_POINTED_TO_TYPE (t2));
561 else
563 error ("%s between distinct pointer-to-member types `%T' and `%T' "
564 "lacks a cast", location, t1, t2);
565 return error_mark_node;
569 return composite_pointer_type_r (t1, t2, location);
572 /* Return the merged type of two types.
573 We assume that comptypes has already been done and returned 1;
574 if that isn't so, this may crash.
576 This just combines attributes and default arguments; any other
577 differences would cause the two types to compare unalike. */
579 tree
580 merge_types (tree t1, tree t2)
582 enum tree_code code1;
583 enum tree_code code2;
584 tree attributes;
586 /* Save time if the two types are the same. */
587 if (t1 == t2)
588 return t1;
589 if (original_type (t1) == original_type (t2))
590 return t1;
592 /* If one type is nonsense, use the other. */
593 if (t1 == error_mark_node)
594 return t2;
595 if (t2 == error_mark_node)
596 return t1;
598 /* Merge the attributes. */
599 attributes = (*targetm.merge_type_attributes) (t1, t2);
601 if (TYPE_PTRMEMFUNC_P (t1))
602 t1 = TYPE_PTRMEMFUNC_FN_TYPE (t1);
603 if (TYPE_PTRMEMFUNC_P (t2))
604 t2 = TYPE_PTRMEMFUNC_FN_TYPE (t2);
606 code1 = TREE_CODE (t1);
607 code2 = TREE_CODE (t2);
609 switch (code1)
611 case POINTER_TYPE:
612 case REFERENCE_TYPE:
613 /* For two pointers, do this recursively on the target type. */
615 tree target = merge_types (TREE_TYPE (t1), TREE_TYPE (t2));
616 int quals = cp_type_quals (t1);
618 if (code1 == POINTER_TYPE)
619 t1 = build_pointer_type (target);
620 else
621 t1 = build_reference_type (target);
622 t1 = build_type_attribute_variant (t1, attributes);
623 t1 = cp_build_qualified_type (t1, quals);
625 if (TREE_CODE (target) == METHOD_TYPE)
626 t1 = build_ptrmemfunc_type (t1);
628 return t1;
631 case OFFSET_TYPE:
633 int quals;
634 tree pointee;
635 quals = cp_type_quals (t1);
636 pointee = merge_types (TYPE_PTRMEM_POINTED_TO_TYPE (t1),
637 TYPE_PTRMEM_POINTED_TO_TYPE (t2));
638 t1 = build_ptrmem_type (TYPE_PTRMEM_CLASS_TYPE (t1),
639 pointee);
640 t1 = cp_build_qualified_type (t1, quals);
641 break;
644 case ARRAY_TYPE:
646 tree elt = merge_types (TREE_TYPE (t1), TREE_TYPE (t2));
647 /* Save space: see if the result is identical to one of the args. */
648 if (elt == TREE_TYPE (t1) && TYPE_DOMAIN (t1))
649 return build_type_attribute_variant (t1, attributes);
650 if (elt == TREE_TYPE (t2) && TYPE_DOMAIN (t2))
651 return build_type_attribute_variant (t2, attributes);
652 /* Merge the element types, and have a size if either arg has one. */
653 t1 = build_cplus_array_type
654 (elt, TYPE_DOMAIN (TYPE_DOMAIN (t1) ? t1 : t2));
655 break;
658 case FUNCTION_TYPE:
659 /* Function types: prefer the one that specified arg types.
660 If both do, merge the arg types. Also merge the return types. */
662 tree valtype = merge_types (TREE_TYPE (t1), TREE_TYPE (t2));
663 tree p1 = TYPE_ARG_TYPES (t1);
664 tree p2 = TYPE_ARG_TYPES (t2);
665 tree rval, raises;
667 /* Save space: see if the result is identical to one of the args. */
668 if (valtype == TREE_TYPE (t1) && ! p2)
669 return cp_build_type_attribute_variant (t1, attributes);
670 if (valtype == TREE_TYPE (t2) && ! p1)
671 return cp_build_type_attribute_variant (t2, attributes);
673 /* Simple way if one arg fails to specify argument types. */
674 if (p1 == NULL_TREE || TREE_VALUE (p1) == void_type_node)
676 rval = build_function_type (valtype, p2);
677 if ((raises = TYPE_RAISES_EXCEPTIONS (t2)))
678 rval = build_exception_variant (rval, raises);
679 return cp_build_type_attribute_variant (rval, attributes);
681 raises = TYPE_RAISES_EXCEPTIONS (t1);
682 if (p2 == NULL_TREE || TREE_VALUE (p2) == void_type_node)
684 rval = build_function_type (valtype, p1);
685 if (raises)
686 rval = build_exception_variant (rval, raises);
687 return cp_build_type_attribute_variant (rval, attributes);
690 rval = build_function_type (valtype, commonparms (p1, p2));
691 t1 = build_exception_variant (rval, raises);
692 break;
695 case METHOD_TYPE:
697 /* Get this value the long way, since TYPE_METHOD_BASETYPE
698 is just the main variant of this. */
699 tree basetype = TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (t2)));
700 tree raises = TYPE_RAISES_EXCEPTIONS (t1);
701 tree t3;
703 /* If this was a member function type, get back to the
704 original type of type member function (i.e., without
705 the class instance variable up front. */
706 t1 = build_function_type (TREE_TYPE (t1),
707 TREE_CHAIN (TYPE_ARG_TYPES (t1)));
708 t2 = build_function_type (TREE_TYPE (t2),
709 TREE_CHAIN (TYPE_ARG_TYPES (t2)));
710 t3 = merge_types (t1, t2);
711 t3 = build_method_type_directly (basetype, TREE_TYPE (t3),
712 TYPE_ARG_TYPES (t3));
713 t1 = build_exception_variant (t3, raises);
714 break;
717 case TYPENAME_TYPE:
718 /* There is no need to merge attributes into a TYPENAME_TYPE.
719 When the type is instantiated it will have whatever
720 attributes result from the instantiation. */
721 return t1;
723 default:;
725 return cp_build_type_attribute_variant (t1, attributes);
728 /* Return the common type of two types.
729 We assume that comptypes has already been done and returned 1;
730 if that isn't so, this may crash.
732 This is the type for the result of most arithmetic operations
733 if the operands have the given two types. */
735 tree
736 common_type (tree t1, tree t2)
738 enum tree_code code1;
739 enum tree_code code2;
741 /* If one type is nonsense, bail. */
742 if (t1 == error_mark_node || t2 == error_mark_node)
743 return error_mark_node;
745 code1 = TREE_CODE (t1);
746 code2 = TREE_CODE (t2);
748 if ((ARITHMETIC_TYPE_P (t1) || code1 == ENUMERAL_TYPE
749 || code1 == COMPLEX_TYPE)
750 && (ARITHMETIC_TYPE_P (t2) || code2 == ENUMERAL_TYPE
751 || code2 == COMPLEX_TYPE))
752 return type_after_usual_arithmetic_conversions (t1, t2);
754 else if ((TYPE_PTR_P (t1) && TYPE_PTR_P (t2))
755 || (TYPE_PTRMEM_P (t1) && TYPE_PTRMEM_P (t2))
756 || (TYPE_PTRMEMFUNC_P (t1) && TYPE_PTRMEMFUNC_P (t2)))
757 return composite_pointer_type (t1, t2, error_mark_node, error_mark_node,
758 "conversion");
759 else
760 abort ();
763 /* Compare two exception specifier types for exactness or subsetness, if
764 allowed. Returns false for mismatch, true for match (same, or
765 derived and !exact).
767 [except.spec] "If a class X ... objects of class X or any class publicly
768 and unambiguously derived from X. Similarly, if a pointer type Y * ...
769 exceptions of type Y * or that are pointers to any type publicly and
770 unambiguously derived from Y. Otherwise a function only allows exceptions
771 that have the same type ..."
772 This does not mention cv qualifiers and is different to what throw
773 [except.throw] and catch [except.catch] will do. They will ignore the
774 top level cv qualifiers, and allow qualifiers in the pointer to class
775 example.
777 We implement the letter of the standard. */
779 static bool
780 comp_except_types (tree a, tree b, bool exact)
782 if (same_type_p (a, b))
783 return true;
784 else if (!exact)
786 if (cp_type_quals (a) || cp_type_quals (b))
787 return false;
789 if (TREE_CODE (a) == POINTER_TYPE
790 && TREE_CODE (b) == POINTER_TYPE)
792 a = TREE_TYPE (a);
793 b = TREE_TYPE (b);
794 if (cp_type_quals (a) || cp_type_quals (b))
795 return false;
798 if (TREE_CODE (a) != RECORD_TYPE
799 || TREE_CODE (b) != RECORD_TYPE)
800 return false;
802 if (ACCESSIBLY_UNIQUELY_DERIVED_P (a, b))
803 return true;
805 return false;
808 /* Return true if TYPE1 and TYPE2 are equivalent exception specifiers.
809 If EXACT is false, T2 can be stricter than T1 (according to 15.4/7),
810 otherwise it must be exact. Exception lists are unordered, but
811 we've already filtered out duplicates. Most lists will be in order,
812 we should try to make use of that. */
814 bool
815 comp_except_specs (tree t1, tree t2, bool exact)
817 tree probe;
818 tree base;
819 int length = 0;
821 if (t1 == t2)
822 return true;
824 if (t1 == NULL_TREE) /* T1 is ... */
825 return t2 == NULL_TREE || !exact;
826 if (!TREE_VALUE (t1)) /* t1 is EMPTY */
827 return t2 != NULL_TREE && !TREE_VALUE (t2);
828 if (t2 == NULL_TREE) /* T2 is ... */
829 return false;
830 if (TREE_VALUE (t1) && !TREE_VALUE (t2)) /* T2 is EMPTY, T1 is not */
831 return !exact;
833 /* Neither set is ... or EMPTY, make sure each part of T2 is in T1.
834 Count how many we find, to determine exactness. For exact matching and
835 ordered T1, T2, this is an O(n) operation, otherwise its worst case is
836 O(nm). */
837 for (base = t1; t2 != NULL_TREE; t2 = TREE_CHAIN (t2))
839 for (probe = base; probe != NULL_TREE; probe = TREE_CHAIN (probe))
841 tree a = TREE_VALUE (probe);
842 tree b = TREE_VALUE (t2);
844 if (comp_except_types (a, b, exact))
846 if (probe == base && exact)
847 base = TREE_CHAIN (probe);
848 length++;
849 break;
852 if (probe == NULL_TREE)
853 return false;
855 return !exact || base == NULL_TREE || length == list_length (t1);
858 /* Compare the array types T1 and T2. ALLOW_REDECLARATION is true if
859 [] can match [size]. */
861 static bool
862 comp_array_types (tree t1, tree t2, bool allow_redeclaration)
864 tree d1;
865 tree d2;
866 tree max1, max2;
868 if (t1 == t2)
869 return true;
871 /* The type of the array elements must be the same. */
872 if (!same_type_p (TREE_TYPE (t1), TREE_TYPE (t2)))
873 return false;
875 d1 = TYPE_DOMAIN (t1);
876 d2 = TYPE_DOMAIN (t2);
878 if (d1 == d2)
879 return true;
881 /* If one of the arrays is dimensionless, and the other has a
882 dimension, they are of different types. However, it is valid to
883 write:
885 extern int a[];
886 int a[3];
888 by [basic.link]:
890 declarations for an array object can specify
891 array types that differ by the presence or absence of a major
892 array bound (_dcl.array_). */
893 if (!d1 || !d2)
894 return allow_redeclaration;
896 /* Check that the dimensions are the same. */
898 if (!cp_tree_equal (TYPE_MIN_VALUE (d1), TYPE_MIN_VALUE (d2)))
899 return false;
900 max1 = TYPE_MAX_VALUE (d1);
901 max2 = TYPE_MAX_VALUE (d2);
902 if (processing_template_decl && !abi_version_at_least (2)
903 && !value_dependent_expression_p (max1)
904 && !value_dependent_expression_p (max2))
906 /* With abi-1 we do not fold non-dependent array bounds, (and
907 consequently mangle them incorrectly). We must therefore
908 fold them here, to verify the domains have the same
909 value. */
910 max1 = fold (max1);
911 max2 = fold (max2);
914 if (!cp_tree_equal (max1, max2))
915 return false;
917 return true;
920 /* Return true if T1 and T2 are related as allowed by STRICT. STRICT
921 is a bitwise-or of the COMPARE_* flags. */
923 bool
924 comptypes (tree t1, tree t2, int strict)
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 my_friendly_assert (TYPE_P (t1) && TYPE_P (t2), 20030623);
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 return false;
1023 case OFFSET_TYPE:
1024 if (!comptypes (TYPE_OFFSET_BASETYPE (t1), TYPE_OFFSET_BASETYPE (t2),
1025 strict & ~COMPARE_REDECLARATION))
1026 return false;
1027 /* Fall through. */
1029 case POINTER_TYPE:
1030 case REFERENCE_TYPE:
1031 return same_type_p (TREE_TYPE (t1), TREE_TYPE (t2));
1033 case METHOD_TYPE:
1034 case FUNCTION_TYPE:
1035 if (!same_type_p (TREE_TYPE (t1), TREE_TYPE (t2)))
1036 return false;
1037 return compparms (TYPE_ARG_TYPES (t1), TYPE_ARG_TYPES (t2));
1039 case ARRAY_TYPE:
1040 /* Target types must match incl. qualifiers. */
1041 return comp_array_types (t1, t2, !!(strict & COMPARE_REDECLARATION));
1043 case TEMPLATE_TYPE_PARM:
1044 return (TEMPLATE_TYPE_IDX (t1) == TEMPLATE_TYPE_IDX (t2)
1045 && TEMPLATE_TYPE_LEVEL (t1) == TEMPLATE_TYPE_LEVEL (t2));
1047 case TYPENAME_TYPE:
1048 if (!cp_tree_equal (TYPENAME_TYPE_FULLNAME (t1),
1049 TYPENAME_TYPE_FULLNAME (t2)))
1050 return false;
1051 return same_type_p (TYPE_CONTEXT (t1), TYPE_CONTEXT (t2));
1053 case UNBOUND_CLASS_TEMPLATE:
1054 if (!cp_tree_equal (TYPE_IDENTIFIER (t1), TYPE_IDENTIFIER (t2)))
1055 return false;
1056 return same_type_p (TYPE_CONTEXT (t1), TYPE_CONTEXT (t2));
1058 case COMPLEX_TYPE:
1059 return same_type_p (TREE_TYPE (t1), TREE_TYPE (t2));
1061 default:
1062 break;
1064 return false;
1067 /* Returns 1 if TYPE1 is at least as qualified as TYPE2. */
1069 bool
1070 at_least_as_qualified_p (tree type1, tree type2)
1072 int q1 = cp_type_quals (type1);
1073 int q2 = cp_type_quals (type2);
1075 /* All qualifiers for TYPE2 must also appear in TYPE1. */
1076 return (q1 & q2) == q2;
1079 /* Returns 1 if TYPE1 is more qualified than TYPE2. */
1081 bool
1082 more_qualified_p (tree type1, tree type2)
1084 int q1 = cp_type_quals (type1);
1085 int q2 = cp_type_quals (type2);
1087 return q1 != q2 && (q1 & q2) == q2;
1090 /* Returns 1 if TYPE1 is more cv-qualified than TYPE2, -1 if TYPE2 is
1091 more cv-qualified that TYPE1, and 0 otherwise. */
1094 comp_cv_qualification (tree type1, tree type2)
1096 int q1 = cp_type_quals (type1);
1097 int q2 = cp_type_quals (type2);
1099 if (q1 == q2)
1100 return 0;
1102 if ((q1 & q2) == q2)
1103 return 1;
1104 else if ((q1 & q2) == q1)
1105 return -1;
1107 return 0;
1110 /* Returns 1 if the cv-qualification signature of TYPE1 is a proper
1111 subset of the cv-qualification signature of TYPE2, and the types
1112 are similar. Returns -1 if the other way 'round, and 0 otherwise. */
1115 comp_cv_qual_signature (tree type1, tree type2)
1117 if (comp_ptr_ttypes_real (type2, type1, -1))
1118 return 1;
1119 else if (comp_ptr_ttypes_real (type1, type2, -1))
1120 return -1;
1121 else
1122 return 0;
1125 /* If two types share a common base type, return that basetype.
1126 If there is not a unique most-derived base type, this function
1127 returns ERROR_MARK_NODE. */
1129 static tree
1130 common_base_type (tree tt1, tree tt2)
1132 tree best = NULL_TREE;
1133 int i;
1135 /* If one is a baseclass of another, that's good enough. */
1136 if (UNIQUELY_DERIVED_FROM_P (tt1, tt2))
1137 return tt1;
1138 if (UNIQUELY_DERIVED_FROM_P (tt2, tt1))
1139 return tt2;
1141 /* Otherwise, try to find a unique baseclass of TT1
1142 that is shared by TT2, and follow that down. */
1143 for (i = CLASSTYPE_N_BASECLASSES (tt1)-1; i >= 0; i--)
1145 tree basetype = TYPE_BINFO_BASETYPE (tt1, i);
1146 tree trial = common_base_type (basetype, tt2);
1147 if (trial)
1149 if (trial == error_mark_node)
1150 return trial;
1151 if (best == NULL_TREE)
1152 best = trial;
1153 else if (best != trial)
1154 return error_mark_node;
1158 /* Same for TT2. */
1159 for (i = CLASSTYPE_N_BASECLASSES (tt2)-1; i >= 0; i--)
1161 tree basetype = TYPE_BINFO_BASETYPE (tt2, i);
1162 tree trial = common_base_type (tt1, basetype);
1163 if (trial)
1165 if (trial == error_mark_node)
1166 return trial;
1167 if (best == NULL_TREE)
1168 best = trial;
1169 else if (best != trial)
1170 return error_mark_node;
1173 return best;
1176 /* Subroutines of `comptypes'. */
1178 /* Return true if two parameter type lists PARMS1 and PARMS2 are
1179 equivalent in the sense that functions with those parameter types
1180 can have equivalent types. The two lists must be equivalent,
1181 element by element. */
1183 bool
1184 compparms (tree parms1, tree parms2)
1186 tree t1, t2;
1188 /* An unspecified parmlist matches any specified parmlist
1189 whose argument types don't need default promotions. */
1191 for (t1 = parms1, t2 = parms2;
1192 t1 || t2;
1193 t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2))
1195 /* If one parmlist is shorter than the other,
1196 they fail to match. */
1197 if (!t1 || !t2)
1198 return false;
1199 if (!same_type_p (TREE_VALUE (t1), TREE_VALUE (t2)))
1200 return false;
1202 return true;
1206 /* Process a sizeof or alignof expression where the operand is a
1207 type. */
1209 tree
1210 cxx_sizeof_or_alignof_type (tree type, enum tree_code op, bool complain)
1212 enum tree_code type_code;
1213 tree value;
1214 const char *op_name;
1216 my_friendly_assert (op == SIZEOF_EXPR || op == ALIGNOF_EXPR, 20020720);
1217 if (type == error_mark_node)
1218 return error_mark_node;
1220 if (processing_template_decl)
1222 value = build_min (op, size_type_node, type);
1223 TREE_READONLY (value) = 1;
1224 return value;
1227 op_name = operator_name_info[(int) op].name;
1229 type = non_reference (type);
1230 type_code = TREE_CODE (type);
1232 if (type_code == METHOD_TYPE)
1234 if (complain && (pedantic || warn_pointer_arith))
1235 pedwarn ("invalid application of `%s' to a member function", op_name);
1236 value = size_one_node;
1238 else
1239 value = c_sizeof_or_alignof_type (complete_type (type), op, complain);
1241 return value;
1244 /* Process a sizeof or alignof expression where the operand is an
1245 expression. */
1247 tree
1248 cxx_sizeof_or_alignof_expr (tree e, enum tree_code op)
1250 const char *op_name = operator_name_info[(int) op].name;
1252 if (e == error_mark_node)
1253 return error_mark_node;
1255 if (processing_template_decl)
1257 e = build_min (op, size_type_node, e);
1258 TREE_SIDE_EFFECTS (e) = 0;
1259 TREE_READONLY (e) = 1;
1261 return e;
1264 if (TREE_CODE (e) == COMPONENT_REF
1265 && TREE_CODE (TREE_OPERAND (e, 1)) == FIELD_DECL
1266 && DECL_C_BIT_FIELD (TREE_OPERAND (e, 1)))
1268 error ("invalid application of `%s' to a bit-field", op_name);
1269 e = char_type_node;
1271 else if (is_overloaded_fn (e))
1273 pedwarn ("ISO C++ forbids applying `%s' to an expression of function type", op_name);
1274 e = char_type_node;
1276 else if (type_unknown_p (e))
1278 cxx_incomplete_type_error (e, TREE_TYPE (e));
1279 e = char_type_node;
1281 else
1282 e = TREE_TYPE (e);
1284 return cxx_sizeof_or_alignof_type (e, op, true);
1288 /* Perform the conversions in [expr] that apply when an lvalue appears
1289 in an rvalue context: the lvalue-to-rvalue, array-to-pointer, and
1290 function-to-pointer conversions.
1292 In addition manifest constants are replaced by their values. */
1294 tree
1295 decay_conversion (tree exp)
1297 tree type;
1298 enum tree_code code;
1300 type = TREE_TYPE (exp);
1301 code = TREE_CODE (type);
1303 if (code == REFERENCE_TYPE)
1305 exp = convert_from_reference (exp);
1306 type = TREE_TYPE (exp);
1307 code = TREE_CODE (type);
1310 if (type == error_mark_node)
1311 return error_mark_node;
1313 if (type_unknown_p (exp))
1315 cxx_incomplete_type_error (exp, TREE_TYPE (exp));
1316 return error_mark_node;
1319 /* Constants can be used directly unless they're not loadable. */
1320 if (TREE_CODE (exp) == CONST_DECL)
1321 exp = DECL_INITIAL (exp);
1322 /* Replace a nonvolatile const static variable with its value. We
1323 don't do this for arrays, though; we want the address of the
1324 first element of the array, not the address of the first element
1325 of its initializing constant. */
1326 else if (code != ARRAY_TYPE)
1328 exp = decl_constant_value (exp);
1329 type = TREE_TYPE (exp);
1332 /* build_c_cast puts on a NOP_EXPR to make the result not an lvalue.
1333 Leave such NOP_EXPRs, since RHS is being used in non-lvalue context. */
1335 if (code == VOID_TYPE)
1337 error ("void value not ignored as it ought to be");
1338 return error_mark_node;
1340 if (code == METHOD_TYPE)
1342 error ("invalid use of non-static member function");
1343 return error_mark_node;
1345 if (code == FUNCTION_TYPE || is_overloaded_fn (exp))
1346 return build_unary_op (ADDR_EXPR, exp, 0);
1347 if (code == ARRAY_TYPE)
1349 tree adr;
1350 tree ptrtype;
1352 if (TREE_CODE (exp) == INDIRECT_REF)
1353 return build_nop (build_pointer_type (TREE_TYPE (type)),
1354 TREE_OPERAND (exp, 0));
1356 if (TREE_CODE (exp) == COMPOUND_EXPR)
1358 tree op1 = decay_conversion (TREE_OPERAND (exp, 1));
1359 return build (COMPOUND_EXPR, TREE_TYPE (op1),
1360 TREE_OPERAND (exp, 0), op1);
1363 if (!lvalue_p (exp)
1364 && ! (TREE_CODE (exp) == CONSTRUCTOR && TREE_STATIC (exp)))
1366 error ("invalid use of non-lvalue array");
1367 return error_mark_node;
1370 ptrtype = build_pointer_type (TREE_TYPE (type));
1372 if (TREE_CODE (exp) == VAR_DECL)
1374 if (!cxx_mark_addressable (exp))
1375 return error_mark_node;
1376 adr = build_nop (ptrtype, build_address (exp));
1377 TREE_SIDE_EFFECTS (adr) = 0; /* Default would be, same as EXP. */
1378 return adr;
1380 /* This way is better for a COMPONENT_REF since it can
1381 simplify the offset for a component. */
1382 adr = build_unary_op (ADDR_EXPR, exp, 1);
1383 return cp_convert (ptrtype, adr);
1386 /* [basic.lval]: Class rvalues can have cv-qualified types; non-class
1387 rvalues always have cv-unqualified types. */
1388 if (! CLASS_TYPE_P (type))
1389 exp = cp_convert (TYPE_MAIN_VARIANT (type), exp);
1391 return exp;
1394 tree
1395 default_conversion (tree exp)
1397 exp = decay_conversion (exp);
1399 if (INTEGRAL_OR_ENUMERATION_TYPE_P (TREE_TYPE (exp)))
1400 exp = perform_integral_promotions (exp);
1402 return exp;
1405 /* EXPR is an expression with an integral or enumeration type.
1406 Perform the integral promotions in [conv.prom], and return the
1407 converted value. */
1409 tree
1410 perform_integral_promotions (tree expr)
1412 tree type;
1413 tree promoted_type;
1415 type = TREE_TYPE (expr);
1416 my_friendly_assert (INTEGRAL_OR_ENUMERATION_TYPE_P (type), 20030703);
1417 promoted_type = type_promotes_to (type);
1418 if (type != promoted_type)
1419 expr = cp_convert (promoted_type, expr);
1420 return expr;
1423 /* Take the address of an inline function without setting TREE_ADDRESSABLE
1424 or TREE_USED. */
1426 tree
1427 inline_conversion (tree exp)
1429 if (TREE_CODE (exp) == FUNCTION_DECL)
1430 exp = build1 (ADDR_EXPR, build_pointer_type (TREE_TYPE (exp)), exp);
1432 return exp;
1435 /* Returns nonzero iff exp is a STRING_CST or the result of applying
1436 decay_conversion to one. */
1439 string_conv_p (tree totype, tree exp, int warn)
1441 tree t;
1443 if (! flag_const_strings || TREE_CODE (totype) != POINTER_TYPE)
1444 return 0;
1446 t = TREE_TYPE (totype);
1447 if (!same_type_p (t, char_type_node)
1448 && !same_type_p (t, wchar_type_node))
1449 return 0;
1451 if (TREE_CODE (exp) == STRING_CST)
1453 /* Make sure that we don't try to convert between char and wchar_t. */
1454 if (!same_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (exp))), t))
1455 return 0;
1457 else
1459 /* Is this a string constant which has decayed to 'const char *'? */
1460 t = build_pointer_type (build_qualified_type (t, TYPE_QUAL_CONST));
1461 if (!same_type_p (TREE_TYPE (exp), t))
1462 return 0;
1463 STRIP_NOPS (exp);
1464 if (TREE_CODE (exp) != ADDR_EXPR
1465 || TREE_CODE (TREE_OPERAND (exp, 0)) != STRING_CST)
1466 return 0;
1469 /* This warning is not very useful, as it complains about printf. */
1470 if (warn && warn_write_strings)
1471 warning ("deprecated conversion from string constant to `%T'", totype);
1473 return 1;
1476 /* Given a COND_EXPR, MIN_EXPR, or MAX_EXPR in T, return it in a form that we
1477 can, for example, use as an lvalue. This code used to be in
1478 unary_complex_lvalue, but we needed it to deal with `a = (d == c) ? b : c'
1479 expressions, where we're dealing with aggregates. But now it's again only
1480 called from unary_complex_lvalue. The case (in particular) that led to
1481 this was with CODE == ADDR_EXPR, since it's not an lvalue when we'd
1482 get it there. */
1484 static tree
1485 rationalize_conditional_expr (enum tree_code code, tree t)
1487 /* For MIN_EXPR or MAX_EXPR, fold-const.c has arranged things so that
1488 the first operand is always the one to be used if both operands
1489 are equal, so we know what conditional expression this used to be. */
1490 if (TREE_CODE (t) == MIN_EXPR || TREE_CODE (t) == MAX_EXPR)
1492 return
1493 build_conditional_expr (build_x_binary_op ((TREE_CODE (t) == MIN_EXPR
1494 ? LE_EXPR : GE_EXPR),
1495 TREE_OPERAND (t, 0),
1496 TREE_OPERAND (t, 1),
1497 /*overloaded_p=*/NULL),
1498 build_unary_op (code, TREE_OPERAND (t, 0), 0),
1499 build_unary_op (code, TREE_OPERAND (t, 1), 0));
1502 return
1503 build_conditional_expr (TREE_OPERAND (t, 0),
1504 build_unary_op (code, TREE_OPERAND (t, 1), 0),
1505 build_unary_op (code, TREE_OPERAND (t, 2), 0));
1508 /* Given the TYPE of an anonymous union field inside T, return the
1509 FIELD_DECL for the field. If not found return NULL_TREE. Because
1510 anonymous unions can nest, we must also search all anonymous unions
1511 that are directly reachable. */
1513 static tree
1514 lookup_anon_field (tree t, tree type)
1516 tree field;
1518 for (field = TYPE_FIELDS (t); field; field = TREE_CHAIN (field))
1520 if (TREE_STATIC (field))
1521 continue;
1522 if (TREE_CODE (field) != FIELD_DECL || DECL_ARTIFICIAL (field))
1523 continue;
1525 /* If we find it directly, return the field. */
1526 if (DECL_NAME (field) == NULL_TREE
1527 && type == TYPE_MAIN_VARIANT (TREE_TYPE (field)))
1529 return field;
1532 /* Otherwise, it could be nested, search harder. */
1533 if (DECL_NAME (field) == NULL_TREE
1534 && ANON_AGGR_TYPE_P (TREE_TYPE (field)))
1536 tree subfield = lookup_anon_field (TREE_TYPE (field), type);
1537 if (subfield)
1538 return subfield;
1541 return NULL_TREE;
1544 /* Build an expression representing OBJECT.MEMBER. OBJECT is an
1545 expression; MEMBER is a DECL or baselink. If ACCESS_PATH is
1546 non-NULL, it indicates the path to the base used to name MEMBER.
1547 If PRESERVE_REFERENCE is true, the expression returned will have
1548 REFERENCE_TYPE if the MEMBER does. Otherwise, the expression
1549 returned will have the type referred to by the reference.
1551 This function does not perform access control; that is either done
1552 earlier by the parser when the name of MEMBER is resolved to MEMBER
1553 itself, or later when overload resolution selects one of the
1554 functions indicated by MEMBER. */
1556 tree
1557 build_class_member_access_expr (tree object, tree member,
1558 tree access_path, bool preserve_reference)
1560 tree object_type;
1561 tree member_scope;
1562 tree result = NULL_TREE;
1564 if (object == error_mark_node || member == error_mark_node)
1565 return error_mark_node;
1567 if (TREE_CODE (member) == PSEUDO_DTOR_EXPR)
1568 return member;
1570 my_friendly_assert (DECL_P (member) || BASELINK_P (member),
1571 20020801);
1573 /* [expr.ref]
1575 The type of the first expression shall be "class object" (of a
1576 complete type). */
1577 object_type = TREE_TYPE (object);
1578 if (!currently_open_class (object_type)
1579 && !complete_type_or_else (object_type, object))
1580 return error_mark_node;
1581 if (!CLASS_TYPE_P (object_type))
1583 error ("request for member `%D' in `%E', which is of non-class type `%T'",
1584 member, object, object_type);
1585 return error_mark_node;
1588 /* The standard does not seem to actually say that MEMBER must be a
1589 member of OBJECT_TYPE. However, that is clearly what is
1590 intended. */
1591 if (DECL_P (member))
1593 member_scope = DECL_CLASS_CONTEXT (member);
1594 mark_used (member);
1595 if (TREE_DEPRECATED (member))
1596 warn_deprecated_use (member);
1598 else
1599 member_scope = BINFO_TYPE (BASELINK_BINFO (member));
1600 /* If MEMBER is from an anonymous aggregate, MEMBER_SCOPE will
1601 presently be the anonymous union. Go outwards until we find a
1602 type related to OBJECT_TYPE. */
1603 while (ANON_AGGR_TYPE_P (member_scope)
1604 && !same_type_ignoring_top_level_qualifiers_p (member_scope,
1605 object_type))
1606 member_scope = TYPE_CONTEXT (member_scope);
1607 if (!member_scope || !DERIVED_FROM_P (member_scope, object_type))
1609 if (TREE_CODE (member) == FIELD_DECL)
1610 error ("invalid use of nonstatic data member '%E'", member);
1611 else
1612 error ("`%D' is not a member of `%T'", member, object_type);
1613 return error_mark_node;
1616 /* Transform `(a, b).x' into `(*(a, &b)).x', `(a ? b : c).x' into
1617 `(*(a ? &b : &c)).x', and so on. A COND_EXPR is only an lvalue
1618 in the frontend; only _DECLs and _REFs are lvalues in the backend. */
1620 tree temp = unary_complex_lvalue (ADDR_EXPR, object);
1621 if (temp)
1622 object = build_indirect_ref (temp, NULL);
1625 /* In [expr.ref], there is an explicit list of the valid choices for
1626 MEMBER. We check for each of those cases here. */
1627 if (TREE_CODE (member) == VAR_DECL)
1629 /* A static data member. */
1630 result = member;
1631 /* If OBJECT has side-effects, they are supposed to occur. */
1632 if (TREE_SIDE_EFFECTS (object))
1633 result = build (COMPOUND_EXPR, TREE_TYPE (result), object, result);
1635 else if (TREE_CODE (member) == FIELD_DECL)
1637 /* A non-static data member. */
1638 bool null_object_p;
1639 int type_quals;
1640 tree member_type;
1642 null_object_p = (TREE_CODE (object) == INDIRECT_REF
1643 && integer_zerop (TREE_OPERAND (object, 0)));
1645 /* Convert OBJECT to the type of MEMBER. */
1646 if (!same_type_p (TYPE_MAIN_VARIANT (object_type),
1647 TYPE_MAIN_VARIANT (member_scope)))
1649 tree binfo;
1650 base_kind kind;
1652 binfo = lookup_base (access_path ? access_path : object_type,
1653 member_scope, ba_ignore, &kind);
1654 if (binfo == error_mark_node)
1655 return error_mark_node;
1657 /* It is invalid to try to get to a virtual base of a
1658 NULL object. The most common cause is invalid use of
1659 offsetof macro. */
1660 if (null_object_p && kind == bk_via_virtual)
1662 error ("invalid access to non-static data member `%D' of NULL object",
1663 member);
1664 error ("(perhaps the `offsetof' macro was used incorrectly)");
1665 return error_mark_node;
1668 /* Convert to the base. */
1669 object = build_base_path (PLUS_EXPR, object, binfo,
1670 /*nonnull=*/1);
1671 /* If we found the base successfully then we should be able
1672 to convert to it successfully. */
1673 my_friendly_assert (object != error_mark_node,
1674 20020801);
1677 /* Complain about other invalid uses of offsetof, even though they will
1678 give the right answer. Note that we complain whether or not they
1679 actually used the offsetof macro, since there's no way to know at this
1680 point. So we just give a warning, instead of a pedwarn. */
1681 if (null_object_p && warn_invalid_offsetof
1682 && CLASSTYPE_NON_POD_P (object_type))
1684 warning ("invalid access to non-static data member `%D' of NULL object",
1685 member);
1686 warning ("(perhaps the `offsetof' macro was used incorrectly)");
1689 /* If MEMBER is from an anonymous aggregate, we have converted
1690 OBJECT so that it refers to the class containing the
1691 anonymous union. Generate a reference to the anonymous union
1692 itself, and recur to find MEMBER. */
1693 if (ANON_AGGR_TYPE_P (DECL_CONTEXT (member))
1694 /* When this code is called from build_field_call, the
1695 object already has the type of the anonymous union.
1696 That is because the COMPONENT_REF was already
1697 constructed, and was then disassembled before calling
1698 build_field_call. After the function-call code is
1699 cleaned up, this waste can be eliminated. */
1700 && (!same_type_ignoring_top_level_qualifiers_p
1701 (TREE_TYPE (object), DECL_CONTEXT (member))))
1703 tree anonymous_union;
1705 anonymous_union = lookup_anon_field (TREE_TYPE (object),
1706 DECL_CONTEXT (member));
1707 object = build_class_member_access_expr (object,
1708 anonymous_union,
1709 /*access_path=*/NULL_TREE,
1710 preserve_reference);
1713 /* Compute the type of the field, as described in [expr.ref]. */
1714 type_quals = TYPE_UNQUALIFIED;
1715 member_type = TREE_TYPE (member);
1716 if (TREE_CODE (member_type) != REFERENCE_TYPE)
1718 type_quals = (cp_type_quals (member_type)
1719 | cp_type_quals (object_type));
1721 /* A field is const (volatile) if the enclosing object, or the
1722 field itself, is const (volatile). But, a mutable field is
1723 not const, even within a const object. */
1724 if (DECL_MUTABLE_P (member))
1725 type_quals &= ~TYPE_QUAL_CONST;
1726 member_type = cp_build_qualified_type (member_type, type_quals);
1729 result = fold (build (COMPONENT_REF, member_type, object, member));
1731 /* Mark the expression const or volatile, as appropriate. Even
1732 though we've dealt with the type above, we still have to mark the
1733 expression itself. */
1734 if (type_quals & TYPE_QUAL_CONST)
1735 TREE_READONLY (result) = 1;
1736 else if (type_quals & TYPE_QUAL_VOLATILE)
1737 TREE_THIS_VOLATILE (result) = 1;
1739 else if (BASELINK_P (member))
1741 /* The member is a (possibly overloaded) member function. */
1742 tree functions;
1743 tree type;
1745 /* If the MEMBER is exactly one static member function, then we
1746 know the type of the expression. Otherwise, we must wait
1747 until overload resolution has been performed. */
1748 functions = BASELINK_FUNCTIONS (member);
1749 if (TREE_CODE (functions) == FUNCTION_DECL
1750 && DECL_STATIC_FUNCTION_P (functions))
1751 type = TREE_TYPE (functions);
1752 else
1753 type = unknown_type_node;
1754 /* Note that we do not convert OBJECT to the BASELINK_BINFO
1755 base. That will happen when the function is called. */
1756 result = build (COMPONENT_REF, type, object, member);
1758 else if (TREE_CODE (member) == CONST_DECL)
1760 /* The member is an enumerator. */
1761 result = member;
1762 /* If OBJECT has side-effects, they are supposed to occur. */
1763 if (TREE_SIDE_EFFECTS (object))
1764 result = build (COMPOUND_EXPR, TREE_TYPE (result),
1765 object, result);
1767 else
1769 error ("invalid use of `%D'", member);
1770 return error_mark_node;
1773 if (!preserve_reference)
1774 /* [expr.ref]
1776 If E2 is declared to have type "reference to T", then ... the
1777 type of E1.E2 is T. */
1778 result = convert_from_reference (result);
1780 return result;
1783 /* Return the destructor denoted by OBJECT.SCOPE::~DTOR_NAME, or, if
1784 SCOPE is NULL, by OBJECT.~DTOR_NAME. */
1786 static tree
1787 lookup_destructor (tree object, tree scope, tree dtor_name)
1789 tree object_type = TREE_TYPE (object);
1790 tree dtor_type = TREE_OPERAND (dtor_name, 0);
1791 tree expr;
1793 if (scope && !check_dtor_name (scope, dtor_name))
1795 error ("qualified type `%T' does not match destructor name `~%T'",
1796 scope, dtor_type);
1797 return error_mark_node;
1799 if (!DERIVED_FROM_P (dtor_type, TYPE_MAIN_VARIANT (object_type)))
1801 error ("the type being destroyed is `%T', but the destructor refers to `%T'",
1802 TYPE_MAIN_VARIANT (object_type), dtor_type);
1803 return error_mark_node;
1805 if (!TYPE_HAS_DESTRUCTOR (dtor_type))
1806 return build (PSEUDO_DTOR_EXPR, void_type_node, object, scope,
1807 dtor_type);
1808 expr = lookup_member (dtor_type, complete_dtor_identifier,
1809 /*protect=*/1, /*want_type=*/false);
1810 expr = (adjust_result_of_qualified_name_lookup
1811 (expr, dtor_type, object_type));
1812 return expr;
1815 /* This function is called by the parser to process a class member
1816 access expression of the form OBJECT.NAME. NAME is a node used by
1817 the parser to represent a name; it is not yet a DECL. It may,
1818 however, be a BASELINK where the BASELINK_FUNCTIONS is a
1819 TEMPLATE_ID_EXPR. Templates must be looked up by the parser, and
1820 there is no reason to do the lookup twice, so the parser keeps the
1821 BASELINK. */
1823 tree
1824 finish_class_member_access_expr (tree object, tree name)
1826 tree expr;
1827 tree object_type;
1828 tree member;
1829 tree access_path = NULL_TREE;
1830 tree orig_object = object;
1831 tree orig_name = name;
1833 if (object == error_mark_node || name == error_mark_node)
1834 return error_mark_node;
1836 object_type = TREE_TYPE (object);
1838 if (processing_template_decl)
1840 if (/* If OBJECT_TYPE is dependent, so is OBJECT.NAME. */
1841 dependent_type_p (object_type)
1842 /* If NAME is just an IDENTIFIER_NODE, then the expression
1843 is dependent. */
1844 || TREE_CODE (object) == IDENTIFIER_NODE
1845 /* If NAME is "f<args>", where either 'f' or 'args' is
1846 dependent, then the expression is dependent. */
1847 || (TREE_CODE (name) == TEMPLATE_ID_EXPR
1848 && dependent_template_id_p (TREE_OPERAND (name, 0),
1849 TREE_OPERAND (name, 1)))
1850 /* If NAME is "T::X" where "T" is dependent, then the
1851 expression is dependent. */
1852 || (TREE_CODE (name) == SCOPE_REF
1853 && TYPE_P (TREE_OPERAND (name, 0))
1854 && dependent_type_p (TREE_OPERAND (name, 0))))
1855 return build_min_nt (COMPONENT_REF, object, name);
1856 object = build_non_dependent_expr (object);
1859 if (TREE_CODE (object_type) == REFERENCE_TYPE)
1861 object = convert_from_reference (object);
1862 object_type = TREE_TYPE (object);
1865 /* [expr.ref]
1867 The type of the first expression shall be "class object" (of a
1868 complete type). */
1869 if (!currently_open_class (object_type)
1870 && !complete_type_or_else (object_type, object))
1871 return error_mark_node;
1872 if (!CLASS_TYPE_P (object_type))
1874 error ("request for member `%D' in `%E', which is of non-class type `%T'",
1875 name, object, object_type);
1876 return error_mark_node;
1879 if (BASELINK_P (name))
1881 /* A member function that has already been looked up. */
1882 my_friendly_assert ((TREE_CODE (BASELINK_FUNCTIONS (name))
1883 == TEMPLATE_ID_EXPR),
1884 20020805);
1885 member = name;
1887 else
1889 bool is_template_id = false;
1890 tree template_args = NULL_TREE;
1891 tree scope;
1893 if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
1895 is_template_id = true;
1896 template_args = TREE_OPERAND (name, 1);
1897 name = TREE_OPERAND (name, 0);
1899 if (TREE_CODE (name) == OVERLOAD)
1900 name = DECL_NAME (get_first_fn (name));
1901 else if (DECL_P (name))
1902 name = DECL_NAME (name);
1905 if (TREE_CODE (name) == SCOPE_REF)
1907 /* A qualified name. The qualifying class or namespace `S' has
1908 already been looked up; it is either a TYPE or a
1909 NAMESPACE_DECL. The member name is either an IDENTIFIER_NODE
1910 or a BIT_NOT_EXPR. */
1911 scope = TREE_OPERAND (name, 0);
1912 name = TREE_OPERAND (name, 1);
1913 my_friendly_assert ((CLASS_TYPE_P (scope)
1914 || TREE_CODE (scope) == NAMESPACE_DECL),
1915 20020804);
1916 my_friendly_assert ((TREE_CODE (name) == IDENTIFIER_NODE
1917 || TREE_CODE (name) == BIT_NOT_EXPR),
1918 20020804);
1920 /* If SCOPE is a namespace, then the qualified name does not
1921 name a member of OBJECT_TYPE. */
1922 if (TREE_CODE (scope) == NAMESPACE_DECL)
1924 error ("`%D::%D' is not a member of `%T'",
1925 scope, name, object_type);
1926 return error_mark_node;
1929 /* Find the base of OBJECT_TYPE corresponding to SCOPE. */
1930 access_path = lookup_base (object_type, scope, ba_check, NULL);
1931 if (access_path == error_mark_node)
1932 return error_mark_node;
1933 if (!access_path)
1935 error ("`%T' is not a base of `%T'", scope, object_type);
1936 return error_mark_node;
1939 else
1941 scope = NULL_TREE;
1942 access_path = object_type;
1945 if (TREE_CODE (name) == BIT_NOT_EXPR)
1946 member = lookup_destructor (object, scope, name);
1947 else
1949 /* Look up the member. */
1950 member = lookup_member (access_path, name, /*protect=*/1,
1951 /*want_type=*/false);
1952 if (member == NULL_TREE)
1954 error ("'%D' has no member named '%E'", object_type, name);
1955 return error_mark_node;
1957 if (member == error_mark_node)
1958 return error_mark_node;
1961 if (is_template_id)
1963 tree template = member;
1965 if (BASELINK_P (template))
1966 template = lookup_template_function (template, template_args);
1967 else
1969 error ("`%D' is not a member template function", name);
1970 return error_mark_node;
1975 if (TREE_DEPRECATED (member))
1976 warn_deprecated_use (member);
1978 expr = build_class_member_access_expr (object, member, access_path,
1979 /*preserve_reference=*/false);
1980 if (processing_template_decl && expr != error_mark_node)
1981 return build_min_non_dep (COMPONENT_REF, expr,
1982 orig_object, orig_name);
1983 return expr;
1986 /* Return an expression for the MEMBER_NAME field in the internal
1987 representation of PTRMEM, a pointer-to-member function. (Each
1988 pointer-to-member function type gets its own RECORD_TYPE so it is
1989 more convenient to access the fields by name than by FIELD_DECL.)
1990 This routine converts the NAME to a FIELD_DECL and then creates the
1991 node for the complete expression. */
1993 tree
1994 build_ptrmemfunc_access_expr (tree ptrmem, tree member_name)
1996 tree ptrmem_type;
1997 tree member;
1998 tree member_type;
2000 /* This code is a stripped down version of
2001 build_class_member_access_expr. It does not work to use that
2002 routine directly because it expects the object to be of class
2003 type. */
2004 ptrmem_type = TREE_TYPE (ptrmem);
2005 my_friendly_assert (TYPE_PTRMEMFUNC_P (ptrmem_type), 20020804);
2006 member = lookup_member (ptrmem_type, member_name, /*protect=*/0,
2007 /*want_type=*/false);
2008 member_type = cp_build_qualified_type (TREE_TYPE (member),
2009 cp_type_quals (ptrmem_type));
2010 return fold (build (COMPONENT_REF, member_type, ptrmem, member));
2013 /* Given an expression PTR for a pointer, return an expression
2014 for the value pointed to.
2015 ERRORSTRING is the name of the operator to appear in error messages.
2017 This function may need to overload OPERATOR_FNNAME.
2018 Must also handle REFERENCE_TYPEs for C++. */
2020 tree
2021 build_x_indirect_ref (tree expr, const char *errorstring)
2023 tree orig_expr = expr;
2024 tree rval;
2026 if (processing_template_decl)
2028 if (type_dependent_expression_p (expr))
2029 return build_min_nt (INDIRECT_REF, expr);
2030 expr = build_non_dependent_expr (expr);
2033 rval = build_new_op (INDIRECT_REF, LOOKUP_NORMAL, expr, NULL_TREE,
2034 NULL_TREE, /*overloaded_p=*/NULL);
2035 if (!rval)
2036 rval = build_indirect_ref (expr, errorstring);
2038 if (processing_template_decl && rval != error_mark_node)
2039 return build_min_non_dep (INDIRECT_REF, rval, orig_expr);
2040 else
2041 return rval;
2044 tree
2045 build_indirect_ref (tree ptr, const char *errorstring)
2047 tree pointer, type;
2049 if (ptr == error_mark_node)
2050 return error_mark_node;
2052 if (ptr == current_class_ptr)
2053 return current_class_ref;
2055 pointer = (TREE_CODE (TREE_TYPE (ptr)) == REFERENCE_TYPE
2056 ? ptr : decay_conversion (ptr));
2057 type = TREE_TYPE (pointer);
2059 if (TYPE_PTR_P (type) || TREE_CODE (type) == REFERENCE_TYPE)
2061 /* [expr.unary.op]
2063 If the type of the expression is "pointer to T," the type
2064 of the result is "T."
2066 We must use the canonical variant because certain parts of
2067 the back end, like fold, do pointer comparisons between
2068 types. */
2069 tree t = canonical_type_variant (TREE_TYPE (type));
2071 if (VOID_TYPE_P (t))
2073 /* A pointer to incomplete type (other than cv void) can be
2074 dereferenced [expr.unary.op]/1 */
2075 error ("`%T' is not a pointer-to-object type", type);
2076 return error_mark_node;
2078 else if (TREE_CODE (pointer) == ADDR_EXPR
2079 && same_type_p (t, TREE_TYPE (TREE_OPERAND (pointer, 0))))
2080 /* The POINTER was something like `&x'. We simplify `*&x' to
2081 `x'. */
2082 return TREE_OPERAND (pointer, 0);
2083 else
2085 tree ref = build1 (INDIRECT_REF, t, pointer);
2087 /* We *must* set TREE_READONLY when dereferencing a pointer to const,
2088 so that we get the proper error message if the result is used
2089 to assign to. Also, &* is supposed to be a no-op. */
2090 TREE_READONLY (ref) = CP_TYPE_CONST_P (t);
2091 TREE_THIS_VOLATILE (ref) = CP_TYPE_VOLATILE_P (t);
2092 TREE_SIDE_EFFECTS (ref)
2093 = (TREE_THIS_VOLATILE (ref) || TREE_SIDE_EFFECTS (pointer));
2094 return ref;
2097 /* `pointer' won't be an error_mark_node if we were given a
2098 pointer to member, so it's cool to check for this here. */
2099 else if (TYPE_PTR_TO_MEMBER_P (type))
2100 error ("invalid use of `%s' on pointer to member", errorstring);
2101 else if (pointer != error_mark_node)
2103 if (errorstring)
2104 error ("invalid type argument of `%s'", errorstring);
2105 else
2106 error ("invalid type argument");
2108 return error_mark_node;
2111 /* This handles expressions of the form "a[i]", which denotes
2112 an array reference.
2114 This is logically equivalent in C to *(a+i), but we may do it differently.
2115 If A is a variable or a member, we generate a primitive ARRAY_REF.
2116 This avoids forcing the array out of registers, and can work on
2117 arrays that are not lvalues (for example, members of structures returned
2118 by functions).
2120 If INDEX is of some user-defined type, it must be converted to
2121 integer type. Otherwise, to make a compatible PLUS_EXPR, it
2122 will inherit the type of the array, which will be some pointer type. */
2124 tree
2125 build_array_ref (tree array, tree idx)
2127 if (idx == 0)
2129 error ("subscript missing in array reference");
2130 return error_mark_node;
2133 if (TREE_TYPE (array) == error_mark_node
2134 || TREE_TYPE (idx) == error_mark_node)
2135 return error_mark_node;
2137 /* If ARRAY is a COMPOUND_EXPR or COND_EXPR, move our reference
2138 inside it. */
2139 switch (TREE_CODE (array))
2141 case COMPOUND_EXPR:
2143 tree value = build_array_ref (TREE_OPERAND (array, 1), idx);
2144 return build (COMPOUND_EXPR, TREE_TYPE (value),
2145 TREE_OPERAND (array, 0), value);
2148 case COND_EXPR:
2149 return build_conditional_expr
2150 (TREE_OPERAND (array, 0),
2151 build_array_ref (TREE_OPERAND (array, 1), idx),
2152 build_array_ref (TREE_OPERAND (array, 2), idx));
2154 default:
2155 break;
2158 if (TREE_CODE (TREE_TYPE (array)) == ARRAY_TYPE
2159 && TREE_CODE (array) != INDIRECT_REF)
2161 tree rval, type;
2163 /* Subscripting with type char is likely to lose
2164 on a machine where chars are signed.
2165 So warn on any machine, but optionally.
2166 Don't warn for unsigned char since that type is safe.
2167 Don't warn for signed char because anyone who uses that
2168 must have done so deliberately. */
2169 if (warn_char_subscripts
2170 && TYPE_MAIN_VARIANT (TREE_TYPE (idx)) == char_type_node)
2171 warning ("array subscript has type `char'");
2173 if (!INTEGRAL_OR_ENUMERATION_TYPE_P (TREE_TYPE (idx)))
2175 error ("array subscript is not an integer");
2176 return error_mark_node;
2179 /* Apply integral promotions *after* noticing character types.
2180 (It is unclear why we do these promotions -- the standard
2181 does not say that we should. In fact, the natual thing would
2182 seem to be to convert IDX to ptrdiff_t; we're performing
2183 pointer arithmetic.) */
2184 idx = perform_integral_promotions (idx);
2186 /* An array that is indexed by a non-constant
2187 cannot be stored in a register; we must be able to do
2188 address arithmetic on its address.
2189 Likewise an array of elements of variable size. */
2190 if (TREE_CODE (idx) != INTEGER_CST
2191 || (COMPLETE_TYPE_P (TREE_TYPE (TREE_TYPE (array)))
2192 && (TREE_CODE (TYPE_SIZE (TREE_TYPE (TREE_TYPE (array))))
2193 != INTEGER_CST)))
2195 if (!cxx_mark_addressable (array))
2196 return error_mark_node;
2199 /* An array that is indexed by a constant value which is not within
2200 the array bounds cannot be stored in a register either; because we
2201 would get a crash in store_bit_field/extract_bit_field when trying
2202 to access a non-existent part of the register. */
2203 if (TREE_CODE (idx) == INTEGER_CST
2204 && TYPE_DOMAIN (TREE_TYPE (array))
2205 && ! int_fits_type_p (idx, TYPE_DOMAIN (TREE_TYPE (array))))
2207 if (!cxx_mark_addressable (array))
2208 return error_mark_node;
2211 if (pedantic && !lvalue_p (array))
2212 pedwarn ("ISO C++ forbids subscripting non-lvalue array");
2214 /* Note in C++ it is valid to subscript a `register' array, since
2215 it is valid to take the address of something with that
2216 storage specification. */
2217 if (extra_warnings)
2219 tree foo = array;
2220 while (TREE_CODE (foo) == COMPONENT_REF)
2221 foo = TREE_OPERAND (foo, 0);
2222 if (TREE_CODE (foo) == VAR_DECL && DECL_REGISTER (foo))
2223 warning ("subscripting array declared `register'");
2226 type = TREE_TYPE (TREE_TYPE (array));
2227 rval = build (ARRAY_REF, type, array, idx);
2228 /* Array ref is const/volatile if the array elements are
2229 or if the array is.. */
2230 TREE_READONLY (rval)
2231 |= (CP_TYPE_CONST_P (type) | TREE_READONLY (array));
2232 TREE_SIDE_EFFECTS (rval)
2233 |= (CP_TYPE_VOLATILE_P (type) | TREE_SIDE_EFFECTS (array));
2234 TREE_THIS_VOLATILE (rval)
2235 |= (CP_TYPE_VOLATILE_P (type) | TREE_THIS_VOLATILE (array));
2236 return require_complete_type (fold (rval));
2240 tree ar = default_conversion (array);
2241 tree ind = default_conversion (idx);
2243 /* Put the integer in IND to simplify error checking. */
2244 if (TREE_CODE (TREE_TYPE (ar)) == INTEGER_TYPE)
2246 tree temp = ar;
2247 ar = ind;
2248 ind = temp;
2251 if (ar == error_mark_node)
2252 return ar;
2254 if (TREE_CODE (TREE_TYPE (ar)) != POINTER_TYPE)
2256 error ("subscripted value is neither array nor pointer");
2257 return error_mark_node;
2259 if (TREE_CODE (TREE_TYPE (ind)) != INTEGER_TYPE)
2261 error ("array subscript is not an integer");
2262 return error_mark_node;
2265 return build_indirect_ref (cp_build_binary_op (PLUS_EXPR, ar, ind),
2266 "array indexing");
2270 /* Resolve a pointer to member function. INSTANCE is the object
2271 instance to use, if the member points to a virtual member.
2273 This used to avoid checking for virtual functions if basetype
2274 has no virtual functions, according to an earlier ANSI draft.
2275 With the final ISO C++ rules, such an optimization is
2276 incorrect: A pointer to a derived member can be static_cast
2277 to pointer-to-base-member, as long as the dynamic object
2278 later has the right member. */
2280 tree
2281 get_member_function_from_ptrfunc (tree *instance_ptrptr, tree function)
2283 if (TREE_CODE (function) == OFFSET_REF)
2284 function = TREE_OPERAND (function, 1);
2286 if (TYPE_PTRMEMFUNC_P (TREE_TYPE (function)))
2288 tree idx, delta, e1, e2, e3, vtbl, basetype;
2289 tree fntype = TYPE_PTRMEMFUNC_FN_TYPE (TREE_TYPE (function));
2291 tree instance_ptr = *instance_ptrptr;
2292 tree instance_save_expr = 0;
2293 if (instance_ptr == error_mark_node)
2295 if (TREE_CODE (function) == PTRMEM_CST)
2297 /* Extracting the function address from a pmf is only
2298 allowed with -Wno-pmf-conversions. It only works for
2299 pmf constants. */
2300 e1 = build_addr_func (PTRMEM_CST_MEMBER (function));
2301 e1 = convert (fntype, e1);
2302 return e1;
2304 else
2306 error ("object missing in use of `%E'", function);
2307 return error_mark_node;
2311 if (TREE_SIDE_EFFECTS (instance_ptr))
2312 instance_ptr = instance_save_expr = save_expr (instance_ptr);
2314 if (TREE_SIDE_EFFECTS (function))
2315 function = save_expr (function);
2317 /* Start by extracting all the information from the PMF itself. */
2318 e3 = PFN_FROM_PTRMEMFUNC (function);
2319 delta = build_ptrmemfunc_access_expr (function, delta_identifier);
2320 idx = build1 (NOP_EXPR, vtable_index_type, e3);
2321 switch (TARGET_PTRMEMFUNC_VBIT_LOCATION)
2323 case ptrmemfunc_vbit_in_pfn:
2324 e1 = cp_build_binary_op (BIT_AND_EXPR, idx, integer_one_node);
2325 idx = cp_build_binary_op (MINUS_EXPR, idx, integer_one_node);
2326 break;
2328 case ptrmemfunc_vbit_in_delta:
2329 e1 = cp_build_binary_op (BIT_AND_EXPR, delta, integer_one_node);
2330 delta = cp_build_binary_op (RSHIFT_EXPR, delta, integer_one_node);
2331 break;
2333 default:
2334 abort ();
2337 /* Convert down to the right base before using the instance. First
2338 use the type... */
2339 basetype = TYPE_METHOD_BASETYPE (TREE_TYPE (fntype));
2340 basetype = lookup_base (TREE_TYPE (TREE_TYPE (instance_ptr)),
2341 basetype, ba_check, NULL);
2342 instance_ptr = build_base_path (PLUS_EXPR, instance_ptr, basetype, 1);
2343 if (instance_ptr == error_mark_node)
2344 return error_mark_node;
2345 /* ...and then the delta in the PMF. */
2346 instance_ptr = build (PLUS_EXPR, TREE_TYPE (instance_ptr),
2347 instance_ptr, delta);
2349 /* Hand back the adjusted 'this' argument to our caller. */
2350 *instance_ptrptr = instance_ptr;
2352 /* Next extract the vtable pointer from the object. */
2353 vtbl = build1 (NOP_EXPR, build_pointer_type (vtbl_ptr_type_node),
2354 instance_ptr);
2355 vtbl = build_indirect_ref (vtbl, NULL);
2357 /* Finally, extract the function pointer from the vtable. */
2358 e2 = fold (build (PLUS_EXPR, TREE_TYPE (vtbl), vtbl, idx));
2359 e2 = build_indirect_ref (e2, NULL);
2360 TREE_CONSTANT (e2) = 1;
2362 /* When using function descriptors, the address of the
2363 vtable entry is treated as a function pointer. */
2364 if (TARGET_VTABLE_USES_DESCRIPTORS)
2365 e2 = build1 (NOP_EXPR, TREE_TYPE (e2),
2366 build_unary_op (ADDR_EXPR, e2, /*noconvert=*/1));
2368 TREE_TYPE (e2) = TREE_TYPE (e3);
2369 e1 = build_conditional_expr (e1, e2, e3);
2371 /* Make sure this doesn't get evaluated first inside one of the
2372 branches of the COND_EXPR. */
2373 if (instance_save_expr)
2374 e1 = build (COMPOUND_EXPR, TREE_TYPE (e1),
2375 instance_save_expr, e1);
2377 function = e1;
2379 return function;
2382 tree
2383 build_function_call (tree function, tree params)
2385 tree fntype, fndecl;
2386 tree coerced_params;
2387 tree result;
2388 tree name = NULL_TREE;
2389 int is_method;
2390 tree original = function;
2392 /* build_c_cast puts on a NOP_EXPR to make the result not an lvalue.
2393 Strip such NOP_EXPRs, since FUNCTION is used in non-lvalue context. */
2394 if (TREE_CODE (function) == NOP_EXPR
2395 && TREE_TYPE (function) == TREE_TYPE (TREE_OPERAND (function, 0)))
2396 function = TREE_OPERAND (function, 0);
2398 if (TREE_CODE (function) == FUNCTION_DECL)
2400 name = DECL_NAME (function);
2402 mark_used (function);
2403 fndecl = function;
2405 /* Convert anything with function type to a pointer-to-function. */
2406 if (pedantic && DECL_MAIN_P (function))
2407 pedwarn ("ISO C++ forbids calling `::main' from within program");
2409 /* Differs from default_conversion by not setting TREE_ADDRESSABLE
2410 (because calling an inline function does not mean the function
2411 needs to be separately compiled). */
2413 if (DECL_INLINE (function))
2414 function = inline_conversion (function);
2415 else
2416 function = build_addr_func (function);
2418 else
2420 fndecl = NULL_TREE;
2422 function = build_addr_func (function);
2425 if (function == error_mark_node)
2426 return error_mark_node;
2428 fntype = TREE_TYPE (function);
2430 if (TYPE_PTRMEMFUNC_P (fntype))
2432 error ("must use .* or ->* to call pointer-to-member function in `%E (...)'",
2433 original);
2434 return error_mark_node;
2437 is_method = (TREE_CODE (fntype) == POINTER_TYPE
2438 && TREE_CODE (TREE_TYPE (fntype)) == METHOD_TYPE);
2440 if (!((TREE_CODE (fntype) == POINTER_TYPE
2441 && TREE_CODE (TREE_TYPE (fntype)) == FUNCTION_TYPE)
2442 || is_method
2443 || TREE_CODE (function) == TEMPLATE_ID_EXPR))
2445 error ("`%E' cannot be used as a function", original);
2446 return error_mark_node;
2449 /* fntype now gets the type of function pointed to. */
2450 fntype = TREE_TYPE (fntype);
2452 /* Convert the parameters to the types declared in the
2453 function prototype, or apply default promotions. */
2455 coerced_params = convert_arguments (TYPE_ARG_TYPES (fntype),
2456 params, fndecl, LOOKUP_NORMAL);
2457 if (coerced_params == error_mark_node)
2458 return error_mark_node;
2460 /* Check for errors in format strings. */
2462 if (warn_format)
2463 check_function_format (NULL, TYPE_ATTRIBUTES (fntype), coerced_params);
2465 /* Recognize certain built-in functions so we can make tree-codes
2466 other than CALL_EXPR. We do this when it enables fold-const.c
2467 to do something useful. */
2469 if (TREE_CODE (function) == ADDR_EXPR
2470 && TREE_CODE (TREE_OPERAND (function, 0)) == FUNCTION_DECL
2471 && DECL_BUILT_IN (TREE_OPERAND (function, 0)))
2473 result = expand_tree_builtin (TREE_OPERAND (function, 0),
2474 params, coerced_params);
2475 if (result)
2476 return result;
2479 return build_cxx_call (function, params, coerced_params);
2482 /* Convert the actual parameter expressions in the list VALUES
2483 to the types in the list TYPELIST.
2484 If parmdecls is exhausted, or when an element has NULL as its type,
2485 perform the default conversions.
2487 NAME is an IDENTIFIER_NODE or 0. It is used only for error messages.
2489 This is also where warnings about wrong number of args are generated.
2491 Return a list of expressions for the parameters as converted.
2493 Both VALUES and the returned value are chains of TREE_LIST nodes
2494 with the elements of the list in the TREE_VALUE slots of those nodes.
2496 In C++, unspecified trailing parameters can be filled in with their
2497 default arguments, if such were specified. Do so here. */
2499 tree
2500 convert_arguments (tree typelist, tree values, tree fndecl, int flags)
2502 tree typetail, valtail;
2503 tree result = NULL_TREE;
2504 const char *called_thing = 0;
2505 int i = 0;
2507 /* Argument passing is always copy-initialization. */
2508 flags |= LOOKUP_ONLYCONVERTING;
2510 if (fndecl)
2512 if (TREE_CODE (TREE_TYPE (fndecl)) == METHOD_TYPE)
2514 if (DECL_NAME (fndecl) == NULL_TREE
2515 || IDENTIFIER_HAS_TYPE_VALUE (DECL_NAME (fndecl)))
2516 called_thing = "constructor";
2517 else
2518 called_thing = "member function";
2520 else
2521 called_thing = "function";
2524 for (valtail = values, typetail = typelist;
2525 valtail;
2526 valtail = TREE_CHAIN (valtail), i++)
2528 tree type = typetail ? TREE_VALUE (typetail) : 0;
2529 tree val = TREE_VALUE (valtail);
2531 if (val == error_mark_node)
2532 return error_mark_node;
2534 if (type == void_type_node)
2536 if (fndecl)
2538 cp_error_at ("too many arguments to %s `%+#D'", called_thing,
2539 fndecl);
2540 error ("at this point in file");
2542 else
2543 error ("too many arguments to function");
2544 /* In case anybody wants to know if this argument
2545 list is valid. */
2546 if (result)
2547 TREE_TYPE (tree_last (result)) = error_mark_node;
2548 break;
2551 /* build_c_cast puts on a NOP_EXPR to make the result not an lvalue.
2552 Strip such NOP_EXPRs, since VAL is used in non-lvalue context. */
2553 if (TREE_CODE (val) == NOP_EXPR
2554 && TREE_TYPE (val) == TREE_TYPE (TREE_OPERAND (val, 0))
2555 && (type == 0 || TREE_CODE (type) != REFERENCE_TYPE))
2556 val = TREE_OPERAND (val, 0);
2558 if (type == 0 || TREE_CODE (type) != REFERENCE_TYPE)
2560 if (TREE_CODE (TREE_TYPE (val)) == ARRAY_TYPE
2561 || TREE_CODE (TREE_TYPE (val)) == FUNCTION_TYPE
2562 || TREE_CODE (TREE_TYPE (val)) == METHOD_TYPE)
2563 val = decay_conversion (val);
2566 if (val == error_mark_node)
2567 return error_mark_node;
2569 if (type != 0)
2571 /* Formal parm type is specified by a function prototype. */
2572 tree parmval;
2574 if (!COMPLETE_TYPE_P (complete_type (type)))
2576 if (fndecl)
2577 error ("parameter %P of `%D' has incomplete type `%T'",
2578 i, fndecl, type);
2579 else
2580 error ("parameter %P has incomplete type `%T'", i, type);
2581 parmval = error_mark_node;
2583 else
2585 parmval = convert_for_initialization
2586 (NULL_TREE, type, val, flags,
2587 "argument passing", fndecl, i);
2588 parmval = convert_for_arg_passing (type, parmval);
2591 if (parmval == error_mark_node)
2592 return error_mark_node;
2594 result = tree_cons (NULL_TREE, parmval, result);
2596 else
2598 if (TREE_CODE (TREE_TYPE (val)) == REFERENCE_TYPE)
2599 val = convert_from_reference (val);
2601 if (fndecl && DECL_BUILT_IN (fndecl)
2602 && DECL_FUNCTION_CODE (fndecl) == BUILT_IN_CONSTANT_P)
2603 /* Don't do ellipsis conversion for __built_in_constant_p
2604 as this will result in spurious warnings for non-POD
2605 types. */
2606 val = require_complete_type (val);
2607 else
2608 val = convert_arg_to_ellipsis (val);
2610 result = tree_cons (NULL_TREE, val, result);
2613 if (typetail)
2614 typetail = TREE_CHAIN (typetail);
2617 if (typetail != 0 && typetail != void_list_node)
2619 /* See if there are default arguments that can be used. */
2620 if (TREE_PURPOSE (typetail)
2621 && TREE_CODE (TREE_PURPOSE (typetail)) != DEFAULT_ARG)
2623 for (; typetail != void_list_node; ++i)
2625 tree parmval
2626 = convert_default_arg (TREE_VALUE (typetail),
2627 TREE_PURPOSE (typetail),
2628 fndecl, i);
2630 if (parmval == error_mark_node)
2631 return error_mark_node;
2633 result = tree_cons (0, parmval, result);
2634 typetail = TREE_CHAIN (typetail);
2635 /* ends with `...'. */
2636 if (typetail == NULL_TREE)
2637 break;
2640 else
2642 if (fndecl)
2644 cp_error_at ("too few arguments to %s `%+#D'",
2645 called_thing, fndecl);
2646 error ("at this point in file");
2648 else
2649 error ("too few arguments to function");
2650 return error_mark_list;
2654 return nreverse (result);
2657 /* Build a binary-operation expression, after performing default
2658 conversions on the operands. CODE is the kind of expression to build. */
2660 tree
2661 build_x_binary_op (enum tree_code code, tree arg1, tree arg2,
2662 bool *overloaded_p)
2664 tree orig_arg1;
2665 tree orig_arg2;
2666 tree expr;
2668 orig_arg1 = arg1;
2669 orig_arg2 = arg2;
2671 if (processing_template_decl)
2673 if (type_dependent_expression_p (arg1)
2674 || type_dependent_expression_p (arg2))
2675 return build_min_nt (code, arg1, arg2);
2676 arg1 = build_non_dependent_expr (arg1);
2677 arg2 = build_non_dependent_expr (arg2);
2680 if (code == DOTSTAR_EXPR)
2681 expr = build_m_component_ref (arg1, arg2);
2682 else
2683 expr = build_new_op (code, LOOKUP_NORMAL, arg1, arg2, NULL_TREE,
2684 overloaded_p);
2686 if (processing_template_decl && expr != error_mark_node)
2687 return build_min_non_dep (code, expr, orig_arg1, orig_arg2);
2689 return expr;
2692 /* Build a binary-operation expression without default conversions.
2693 CODE is the kind of expression to build.
2694 This function differs from `build' in several ways:
2695 the data type of the result is computed and recorded in it,
2696 warnings are generated if arg data types are invalid,
2697 special handling for addition and subtraction of pointers is known,
2698 and some optimization is done (operations on narrow ints
2699 are done in the narrower type when that gives the same result).
2700 Constant folding is also done before the result is returned.
2702 Note that the operands will never have enumeral types
2703 because either they have just had the default conversions performed
2704 or they have both just been converted to some other type in which
2705 the arithmetic is to be done.
2707 C++: must do special pointer arithmetic when implementing
2708 multiple inheritance, and deal with pointer to member functions. */
2710 tree
2711 build_binary_op (enum tree_code code, tree orig_op0, tree orig_op1,
2712 int convert_p ATTRIBUTE_UNUSED)
2714 tree op0, op1;
2715 enum tree_code code0, code1;
2716 tree type0, type1;
2718 /* Expression code to give to the expression when it is built.
2719 Normally this is CODE, which is what the caller asked for,
2720 but in some special cases we change it. */
2721 enum tree_code resultcode = code;
2723 /* Data type in which the computation is to be performed.
2724 In the simplest cases this is the common type of the arguments. */
2725 tree result_type = NULL;
2727 /* Nonzero means operands have already been type-converted
2728 in whatever way is necessary.
2729 Zero means they need to be converted to RESULT_TYPE. */
2730 int converted = 0;
2732 /* Nonzero means create the expression with this type, rather than
2733 RESULT_TYPE. */
2734 tree build_type = 0;
2736 /* Nonzero means after finally constructing the expression
2737 convert it to this type. */
2738 tree final_type = 0;
2740 /* Nonzero if this is an operation like MIN or MAX which can
2741 safely be computed in short if both args are promoted shorts.
2742 Also implies COMMON.
2743 -1 indicates a bitwise operation; this makes a difference
2744 in the exact conditions for when it is safe to do the operation
2745 in a narrower mode. */
2746 int shorten = 0;
2748 /* Nonzero if this is a comparison operation;
2749 if both args are promoted shorts, compare the original shorts.
2750 Also implies COMMON. */
2751 int short_compare = 0;
2753 /* Nonzero if this is a right-shift operation, which can be computed on the
2754 original short and then promoted if the operand is a promoted short. */
2755 int short_shift = 0;
2757 /* Nonzero means set RESULT_TYPE to the common type of the args. */
2758 int common = 0;
2760 /* Apply default conversions. */
2761 op0 = orig_op0;
2762 op1 = orig_op1;
2764 if (code == TRUTH_AND_EXPR || code == TRUTH_ANDIF_EXPR
2765 || code == TRUTH_OR_EXPR || code == TRUTH_ORIF_EXPR
2766 || code == TRUTH_XOR_EXPR)
2768 if (!really_overloaded_fn (op0))
2769 op0 = decay_conversion (op0);
2770 if (!really_overloaded_fn (op1))
2771 op1 = decay_conversion (op1);
2773 else
2775 if (!really_overloaded_fn (op0))
2776 op0 = default_conversion (op0);
2777 if (!really_overloaded_fn (op1))
2778 op1 = default_conversion (op1);
2781 /* Strip NON_LVALUE_EXPRs, etc., since we aren't using as an lvalue. */
2782 STRIP_TYPE_NOPS (op0);
2783 STRIP_TYPE_NOPS (op1);
2785 /* DTRT if one side is an overloaded function, but complain about it. */
2786 if (type_unknown_p (op0))
2788 tree t = instantiate_type (TREE_TYPE (op1), op0, tf_none);
2789 if (t != error_mark_node)
2791 pedwarn ("assuming cast to type `%T' from overloaded function",
2792 TREE_TYPE (t));
2793 op0 = t;
2796 if (type_unknown_p (op1))
2798 tree t = instantiate_type (TREE_TYPE (op0), op1, tf_none);
2799 if (t != error_mark_node)
2801 pedwarn ("assuming cast to type `%T' from overloaded function",
2802 TREE_TYPE (t));
2803 op1 = t;
2807 type0 = TREE_TYPE (op0);
2808 type1 = TREE_TYPE (op1);
2810 /* The expression codes of the data types of the arguments tell us
2811 whether the arguments are integers, floating, pointers, etc. */
2812 code0 = TREE_CODE (type0);
2813 code1 = TREE_CODE (type1);
2815 /* If an error was already reported for one of the arguments,
2816 avoid reporting another error. */
2818 if (code0 == ERROR_MARK || code1 == ERROR_MARK)
2819 return error_mark_node;
2821 switch (code)
2823 case PLUS_EXPR:
2824 /* Handle the pointer + int case. */
2825 if (code0 == POINTER_TYPE && code1 == INTEGER_TYPE)
2826 return cp_pointer_int_sum (PLUS_EXPR, op0, op1);
2827 else if (code1 == POINTER_TYPE && code0 == INTEGER_TYPE)
2828 return cp_pointer_int_sum (PLUS_EXPR, op1, op0);
2829 else
2830 common = 1;
2831 break;
2833 case MINUS_EXPR:
2834 /* Subtraction of two similar pointers.
2835 We must subtract them as integers, then divide by object size. */
2836 if (code0 == POINTER_TYPE && code1 == POINTER_TYPE
2837 && same_type_ignoring_top_level_qualifiers_p (TREE_TYPE (type0),
2838 TREE_TYPE (type1)))
2839 return pointer_diff (op0, op1, common_type (type0, type1));
2840 /* Handle pointer minus int. Just like pointer plus int. */
2841 else if (code0 == POINTER_TYPE && code1 == INTEGER_TYPE)
2842 return cp_pointer_int_sum (MINUS_EXPR, op0, op1);
2843 else
2844 common = 1;
2845 break;
2847 case MULT_EXPR:
2848 common = 1;
2849 break;
2851 case TRUNC_DIV_EXPR:
2852 case CEIL_DIV_EXPR:
2853 case FLOOR_DIV_EXPR:
2854 case ROUND_DIV_EXPR:
2855 case EXACT_DIV_EXPR:
2856 if ((code0 == INTEGER_TYPE || code0 == REAL_TYPE
2857 || code0 == COMPLEX_TYPE)
2858 && (code1 == INTEGER_TYPE || code1 == REAL_TYPE
2859 || code1 == COMPLEX_TYPE))
2861 if (TREE_CODE (op1) == INTEGER_CST && integer_zerop (op1))
2862 warning ("division by zero in `%E / 0'", op0);
2863 else if (TREE_CODE (op1) == REAL_CST && real_zerop (op1))
2864 warning ("division by zero in `%E / 0.'", op0);
2866 if (!(code0 == INTEGER_TYPE && code1 == INTEGER_TYPE))
2867 resultcode = RDIV_EXPR;
2868 else
2869 /* When dividing two signed integers, we have to promote to int.
2870 unless we divide by a constant != -1. Note that default
2871 conversion will have been performed on the operands at this
2872 point, so we have to dig out the original type to find out if
2873 it was unsigned. */
2874 shorten = ((TREE_CODE (op0) == NOP_EXPR
2875 && TREE_UNSIGNED (TREE_TYPE (TREE_OPERAND (op0, 0))))
2876 || (TREE_CODE (op1) == INTEGER_CST
2877 && ! integer_all_onesp (op1)));
2879 common = 1;
2881 break;
2883 case BIT_AND_EXPR:
2884 case BIT_IOR_EXPR:
2885 case BIT_XOR_EXPR:
2886 if (code0 == INTEGER_TYPE && code1 == INTEGER_TYPE)
2887 shorten = -1;
2888 break;
2890 case TRUNC_MOD_EXPR:
2891 case FLOOR_MOD_EXPR:
2892 if (code1 == INTEGER_TYPE && integer_zerop (op1))
2893 warning ("division by zero in `%E %% 0'", op0);
2894 else if (code1 == REAL_TYPE && real_zerop (op1))
2895 warning ("division by zero in `%E %% 0.'", op0);
2897 if (code0 == INTEGER_TYPE && code1 == INTEGER_TYPE)
2899 /* Although it would be tempting to shorten always here, that loses
2900 on some targets, since the modulo instruction is undefined if the
2901 quotient can't be represented in the computation mode. We shorten
2902 only if unsigned or if dividing by something we know != -1. */
2903 shorten = ((TREE_CODE (op0) == NOP_EXPR
2904 && TREE_UNSIGNED (TREE_TYPE (TREE_OPERAND (op0, 0))))
2905 || (TREE_CODE (op1) == INTEGER_CST
2906 && ! integer_all_onesp (op1)));
2907 common = 1;
2909 break;
2911 case TRUTH_ANDIF_EXPR:
2912 case TRUTH_ORIF_EXPR:
2913 case TRUTH_AND_EXPR:
2914 case TRUTH_OR_EXPR:
2915 result_type = boolean_type_node;
2916 break;
2918 /* Shift operations: result has same type as first operand;
2919 always convert second operand to int.
2920 Also set SHORT_SHIFT if shifting rightward. */
2922 case RSHIFT_EXPR:
2923 if (code0 == INTEGER_TYPE && code1 == INTEGER_TYPE)
2925 result_type = type0;
2926 if (TREE_CODE (op1) == INTEGER_CST)
2928 if (tree_int_cst_lt (op1, integer_zero_node))
2929 warning ("right shift count is negative");
2930 else
2932 if (! integer_zerop (op1))
2933 short_shift = 1;
2934 if (compare_tree_int (op1, TYPE_PRECISION (type0)) >= 0)
2935 warning ("right shift count >= width of type");
2938 /* Convert the shift-count to an integer, regardless of
2939 size of value being shifted. */
2940 if (TYPE_MAIN_VARIANT (TREE_TYPE (op1)) != integer_type_node)
2941 op1 = cp_convert (integer_type_node, op1);
2942 /* Avoid converting op1 to result_type later. */
2943 converted = 1;
2945 break;
2947 case LSHIFT_EXPR:
2948 if (code0 == INTEGER_TYPE && code1 == INTEGER_TYPE)
2950 result_type = type0;
2951 if (TREE_CODE (op1) == INTEGER_CST)
2953 if (tree_int_cst_lt (op1, integer_zero_node))
2954 warning ("left shift count is negative");
2955 else if (compare_tree_int (op1, TYPE_PRECISION (type0)) >= 0)
2956 warning ("left shift count >= width of type");
2958 /* Convert the shift-count to an integer, regardless of
2959 size of value being shifted. */
2960 if (TYPE_MAIN_VARIANT (TREE_TYPE (op1)) != integer_type_node)
2961 op1 = cp_convert (integer_type_node, op1);
2962 /* Avoid converting op1 to result_type later. */
2963 converted = 1;
2965 break;
2967 case RROTATE_EXPR:
2968 case LROTATE_EXPR:
2969 if (code0 == INTEGER_TYPE && code1 == INTEGER_TYPE)
2971 result_type = type0;
2972 if (TREE_CODE (op1) == INTEGER_CST)
2974 if (tree_int_cst_lt (op1, integer_zero_node))
2975 warning ("%s rotate count is negative",
2976 (code == LROTATE_EXPR) ? "left" : "right");
2977 else if (compare_tree_int (op1, TYPE_PRECISION (type0)) >= 0)
2978 warning ("%s rotate count >= width of type",
2979 (code == LROTATE_EXPR) ? "left" : "right");
2981 /* Convert the shift-count to an integer, regardless of
2982 size of value being shifted. */
2983 if (TYPE_MAIN_VARIANT (TREE_TYPE (op1)) != integer_type_node)
2984 op1 = cp_convert (integer_type_node, op1);
2986 break;
2988 case EQ_EXPR:
2989 case NE_EXPR:
2990 if (warn_float_equal && (code0 == REAL_TYPE || code1 == REAL_TYPE))
2991 warning ("comparing floating point with == or != is unsafe");
2993 build_type = boolean_type_node;
2994 if ((code0 == INTEGER_TYPE || code0 == REAL_TYPE
2995 || code0 == COMPLEX_TYPE)
2996 && (code1 == INTEGER_TYPE || code1 == REAL_TYPE
2997 || code1 == COMPLEX_TYPE))
2998 short_compare = 1;
2999 else if ((code0 == POINTER_TYPE && code1 == POINTER_TYPE)
3000 || (TYPE_PTRMEM_P (type0) && TYPE_PTRMEM_P (type1)))
3001 result_type = composite_pointer_type (type0, type1, op0, op1,
3002 "comparison");
3003 else if ((code0 == POINTER_TYPE || TYPE_PTRMEM_P (type0))
3004 && null_ptr_cst_p (op1))
3005 result_type = type0;
3006 else if ((code1 == POINTER_TYPE || TYPE_PTRMEM_P (type1))
3007 && null_ptr_cst_p (op0))
3008 result_type = type1;
3009 else if (code0 == POINTER_TYPE && code1 == INTEGER_TYPE)
3011 result_type = type0;
3012 error ("ISO C++ forbids comparison between pointer and integer");
3014 else if (code0 == INTEGER_TYPE && code1 == POINTER_TYPE)
3016 result_type = type1;
3017 error ("ISO C++ forbids comparison between pointer and integer");
3019 else if (TYPE_PTRMEMFUNC_P (type0) && null_ptr_cst_p (op1))
3021 op0 = build_ptrmemfunc_access_expr (op0, pfn_identifier);
3022 op1 = cp_convert (TREE_TYPE (op0), integer_zero_node);
3023 result_type = TREE_TYPE (op0);
3025 else if (TYPE_PTRMEMFUNC_P (type1) && null_ptr_cst_p (op0))
3026 return cp_build_binary_op (code, op1, op0);
3027 else if (TYPE_PTRMEMFUNC_P (type0) && TYPE_PTRMEMFUNC_P (type1)
3028 && same_type_p (type0, type1))
3030 /* E will be the final comparison. */
3031 tree e;
3032 /* E1 and E2 are for scratch. */
3033 tree e1;
3034 tree e2;
3035 tree pfn0;
3036 tree pfn1;
3037 tree delta0;
3038 tree delta1;
3040 if (TREE_SIDE_EFFECTS (op0))
3041 op0 = save_expr (op0);
3042 if (TREE_SIDE_EFFECTS (op1))
3043 op1 = save_expr (op1);
3045 /* We generate:
3047 (op0.pfn == op1.pfn
3048 && (!op0.pfn || op0.delta == op1.delta))
3050 The reason for the `!op0.pfn' bit is that a NULL
3051 pointer-to-member is any member with a zero PFN; the
3052 DELTA field is unspecified. */
3053 pfn0 = pfn_from_ptrmemfunc (op0);
3054 pfn1 = pfn_from_ptrmemfunc (op1);
3055 delta0 = build_ptrmemfunc_access_expr (op0,
3056 delta_identifier);
3057 delta1 = build_ptrmemfunc_access_expr (op1,
3058 delta_identifier);
3059 e1 = cp_build_binary_op (EQ_EXPR, delta0, delta1);
3060 e2 = cp_build_binary_op (EQ_EXPR,
3061 pfn0,
3062 cp_convert (TREE_TYPE (pfn0),
3063 integer_zero_node));
3064 e1 = cp_build_binary_op (TRUTH_ORIF_EXPR, e1, e2);
3065 e2 = build (EQ_EXPR, boolean_type_node, pfn0, pfn1);
3066 e = cp_build_binary_op (TRUTH_ANDIF_EXPR, e2, e1);
3067 if (code == EQ_EXPR)
3068 return e;
3069 return cp_build_binary_op (EQ_EXPR, e, integer_zero_node);
3071 else if ((TYPE_PTRMEMFUNC_P (type0)
3072 && same_type_p (TYPE_PTRMEMFUNC_FN_TYPE (type0), type1))
3073 || (TYPE_PTRMEMFUNC_P (type1)
3074 && same_type_p (TYPE_PTRMEMFUNC_FN_TYPE (type1), type0)))
3075 abort ();
3076 break;
3078 case MAX_EXPR:
3079 case MIN_EXPR:
3080 if ((code0 == INTEGER_TYPE || code0 == REAL_TYPE)
3081 && (code1 == INTEGER_TYPE || code1 == REAL_TYPE))
3082 shorten = 1;
3083 else if (code0 == POINTER_TYPE && code1 == POINTER_TYPE)
3084 result_type = composite_pointer_type (type0, type1, op0, op1,
3085 "comparison");
3086 break;
3088 case LE_EXPR:
3089 case GE_EXPR:
3090 case LT_EXPR:
3091 case GT_EXPR:
3092 build_type = boolean_type_node;
3093 if ((code0 == INTEGER_TYPE || code0 == REAL_TYPE)
3094 && (code1 == INTEGER_TYPE || code1 == REAL_TYPE))
3095 short_compare = 1;
3096 else if (code0 == POINTER_TYPE && code1 == POINTER_TYPE)
3097 result_type = composite_pointer_type (type0, type1, op0, op1,
3098 "comparison");
3099 else if (code0 == POINTER_TYPE && TREE_CODE (op1) == INTEGER_CST
3100 && integer_zerop (op1))
3101 result_type = type0;
3102 else if (code1 == POINTER_TYPE && TREE_CODE (op0) == INTEGER_CST
3103 && integer_zerop (op0))
3104 result_type = type1;
3105 else if (code0 == POINTER_TYPE && code1 == INTEGER_TYPE)
3107 result_type = type0;
3108 pedwarn ("ISO C++ forbids comparison between pointer and integer");
3110 else if (code0 == INTEGER_TYPE && code1 == POINTER_TYPE)
3112 result_type = type1;
3113 pedwarn ("ISO C++ forbids comparison between pointer and integer");
3115 break;
3117 case UNORDERED_EXPR:
3118 case ORDERED_EXPR:
3119 case UNLT_EXPR:
3120 case UNLE_EXPR:
3121 case UNGT_EXPR:
3122 case UNGE_EXPR:
3123 case UNEQ_EXPR:
3124 build_type = integer_type_node;
3125 if (code0 != REAL_TYPE || code1 != REAL_TYPE)
3127 error ("unordered comparison on non-floating point argument");
3128 return error_mark_node;
3130 common = 1;
3131 break;
3133 default:
3134 break;
3137 if ((code0 == INTEGER_TYPE || code0 == REAL_TYPE || code0 == COMPLEX_TYPE)
3139 (code1 == INTEGER_TYPE || code1 == REAL_TYPE || code1 == COMPLEX_TYPE))
3141 int none_complex = (code0 != COMPLEX_TYPE && code1 != COMPLEX_TYPE);
3143 if (shorten || common || short_compare)
3144 result_type = common_type (type0, type1);
3146 /* For certain operations (which identify themselves by shorten != 0)
3147 if both args were extended from the same smaller type,
3148 do the arithmetic in that type and then extend.
3150 shorten !=0 and !=1 indicates a bitwise operation.
3151 For them, this optimization is safe only if
3152 both args are zero-extended or both are sign-extended.
3153 Otherwise, we might change the result.
3154 Eg, (short)-1 | (unsigned short)-1 is (int)-1
3155 but calculated in (unsigned short) it would be (unsigned short)-1. */
3157 if (shorten && none_complex)
3159 int unsigned0, unsigned1;
3160 tree arg0 = get_narrower (op0, &unsigned0);
3161 tree arg1 = get_narrower (op1, &unsigned1);
3162 /* UNS is 1 if the operation to be done is an unsigned one. */
3163 int uns = TREE_UNSIGNED (result_type);
3164 tree type;
3166 final_type = result_type;
3168 /* Handle the case that OP0 does not *contain* a conversion
3169 but it *requires* conversion to FINAL_TYPE. */
3171 if (op0 == arg0 && TREE_TYPE (op0) != final_type)
3172 unsigned0 = TREE_UNSIGNED (TREE_TYPE (op0));
3173 if (op1 == arg1 && TREE_TYPE (op1) != final_type)
3174 unsigned1 = TREE_UNSIGNED (TREE_TYPE (op1));
3176 /* Now UNSIGNED0 is 1 if ARG0 zero-extends to FINAL_TYPE. */
3178 /* For bitwise operations, signedness of nominal type
3179 does not matter. Consider only how operands were extended. */
3180 if (shorten == -1)
3181 uns = unsigned0;
3183 /* Note that in all three cases below we refrain from optimizing
3184 an unsigned operation on sign-extended args.
3185 That would not be valid. */
3187 /* Both args variable: if both extended in same way
3188 from same width, do it in that width.
3189 Do it unsigned if args were zero-extended. */
3190 if ((TYPE_PRECISION (TREE_TYPE (arg0))
3191 < TYPE_PRECISION (result_type))
3192 && (TYPE_PRECISION (TREE_TYPE (arg1))
3193 == TYPE_PRECISION (TREE_TYPE (arg0)))
3194 && unsigned0 == unsigned1
3195 && (unsigned0 || !uns))
3196 result_type = c_common_signed_or_unsigned_type
3197 (unsigned0, common_type (TREE_TYPE (arg0), TREE_TYPE (arg1)));
3198 else if (TREE_CODE (arg0) == INTEGER_CST
3199 && (unsigned1 || !uns)
3200 && (TYPE_PRECISION (TREE_TYPE (arg1))
3201 < TYPE_PRECISION (result_type))
3202 && (type = c_common_signed_or_unsigned_type
3203 (unsigned1, TREE_TYPE (arg1)),
3204 int_fits_type_p (arg0, type)))
3205 result_type = type;
3206 else if (TREE_CODE (arg1) == INTEGER_CST
3207 && (unsigned0 || !uns)
3208 && (TYPE_PRECISION (TREE_TYPE (arg0))
3209 < TYPE_PRECISION (result_type))
3210 && (type = c_common_signed_or_unsigned_type
3211 (unsigned0, TREE_TYPE (arg0)),
3212 int_fits_type_p (arg1, type)))
3213 result_type = type;
3216 /* Shifts can be shortened if shifting right. */
3218 if (short_shift)
3220 int unsigned_arg;
3221 tree arg0 = get_narrower (op0, &unsigned_arg);
3223 final_type = result_type;
3225 if (arg0 == op0 && final_type == TREE_TYPE (op0))
3226 unsigned_arg = TREE_UNSIGNED (TREE_TYPE (op0));
3228 if (TYPE_PRECISION (TREE_TYPE (arg0)) < TYPE_PRECISION (result_type)
3229 /* We can shorten only if the shift count is less than the
3230 number of bits in the smaller type size. */
3231 && compare_tree_int (op1, TYPE_PRECISION (TREE_TYPE (arg0))) < 0
3232 /* If arg is sign-extended and then unsigned-shifted,
3233 we can simulate this with a signed shift in arg's type
3234 only if the extended result is at least twice as wide
3235 as the arg. Otherwise, the shift could use up all the
3236 ones made by sign-extension and bring in zeros.
3237 We can't optimize that case at all, but in most machines
3238 it never happens because available widths are 2**N. */
3239 && (!TREE_UNSIGNED (final_type)
3240 || unsigned_arg
3241 || (((unsigned) 2 * TYPE_PRECISION (TREE_TYPE (arg0)))
3242 <= TYPE_PRECISION (result_type))))
3244 /* Do an unsigned shift if the operand was zero-extended. */
3245 result_type
3246 = c_common_signed_or_unsigned_type (unsigned_arg,
3247 TREE_TYPE (arg0));
3248 /* Convert value-to-be-shifted to that type. */
3249 if (TREE_TYPE (op0) != result_type)
3250 op0 = cp_convert (result_type, op0);
3251 converted = 1;
3255 /* Comparison operations are shortened too but differently.
3256 They identify themselves by setting short_compare = 1. */
3258 if (short_compare)
3260 /* Don't write &op0, etc., because that would prevent op0
3261 from being kept in a register.
3262 Instead, make copies of the our local variables and
3263 pass the copies by reference, then copy them back afterward. */
3264 tree xop0 = op0, xop1 = op1, xresult_type = result_type;
3265 enum tree_code xresultcode = resultcode;
3266 tree val
3267 = shorten_compare (&xop0, &xop1, &xresult_type, &xresultcode);
3268 if (val != 0)
3269 return cp_convert (boolean_type_node, val);
3270 op0 = xop0, op1 = xop1;
3271 converted = 1;
3272 resultcode = xresultcode;
3275 if ((short_compare || code == MIN_EXPR || code == MAX_EXPR)
3276 && warn_sign_compare
3277 /* Do not warn until the template is instantiated; we cannot
3278 bound the ranges of the arguments until that point. */
3279 && !processing_template_decl)
3281 int op0_signed = ! TREE_UNSIGNED (TREE_TYPE (orig_op0));
3282 int op1_signed = ! TREE_UNSIGNED (TREE_TYPE (orig_op1));
3284 int unsignedp0, unsignedp1;
3285 tree primop0 = get_narrower (op0, &unsignedp0);
3286 tree primop1 = get_narrower (op1, &unsignedp1);
3288 /* Check for comparison of different enum types. */
3289 if (TREE_CODE (TREE_TYPE (orig_op0)) == ENUMERAL_TYPE
3290 && TREE_CODE (TREE_TYPE (orig_op1)) == ENUMERAL_TYPE
3291 && TYPE_MAIN_VARIANT (TREE_TYPE (orig_op0))
3292 != TYPE_MAIN_VARIANT (TREE_TYPE (orig_op1)))
3294 warning ("comparison between types `%#T' and `%#T'",
3295 TREE_TYPE (orig_op0), TREE_TYPE (orig_op1));
3298 /* Give warnings for comparisons between signed and unsigned
3299 quantities that may fail. */
3300 /* Do the checking based on the original operand trees, so that
3301 casts will be considered, but default promotions won't be. */
3303 /* Do not warn if the comparison is being done in a signed type,
3304 since the signed type will only be chosen if it can represent
3305 all the values of the unsigned type. */
3306 if (! TREE_UNSIGNED (result_type))
3307 /* OK */;
3308 /* Do not warn if both operands are unsigned. */
3309 else if (op0_signed == op1_signed)
3310 /* OK */;
3311 /* Do not warn if the signed quantity is an unsuffixed
3312 integer literal (or some static constant expression
3313 involving such literals or a conditional expression
3314 involving such literals) and it is non-negative. */
3315 else if ((op0_signed && tree_expr_nonnegative_p (orig_op0))
3316 || (op1_signed && tree_expr_nonnegative_p (orig_op1)))
3317 /* OK */;
3318 /* Do not warn if the comparison is an equality operation,
3319 the unsigned quantity is an integral constant and it does
3320 not use the most significant bit of result_type. */
3321 else if ((resultcode == EQ_EXPR || resultcode == NE_EXPR)
3322 && ((op0_signed && TREE_CODE (orig_op1) == INTEGER_CST
3323 && int_fits_type_p (orig_op1, c_common_signed_type
3324 (result_type)))
3325 || (op1_signed && TREE_CODE (orig_op0) == INTEGER_CST
3326 && int_fits_type_p (orig_op0, c_common_signed_type
3327 (result_type)))))
3328 /* OK */;
3329 else
3330 warning ("comparison between signed and unsigned integer expressions");
3332 /* Warn if two unsigned values are being compared in a size
3333 larger than their original size, and one (and only one) is the
3334 result of a `~' operator. This comparison will always fail.
3336 Also warn if one operand is a constant, and the constant does not
3337 have all bits set that are set in the ~ operand when it is
3338 extended. */
3340 if ((TREE_CODE (primop0) == BIT_NOT_EXPR)
3341 ^ (TREE_CODE (primop1) == BIT_NOT_EXPR))
3343 if (TREE_CODE (primop0) == BIT_NOT_EXPR)
3344 primop0 = get_narrower (TREE_OPERAND (op0, 0), &unsignedp0);
3345 if (TREE_CODE (primop1) == BIT_NOT_EXPR)
3346 primop1 = get_narrower (TREE_OPERAND (op1, 0), &unsignedp1);
3348 if (host_integerp (primop0, 0) || host_integerp (primop1, 0))
3350 tree primop;
3351 HOST_WIDE_INT constant, mask;
3352 int unsignedp;
3353 unsigned int bits;
3355 if (host_integerp (primop0, 0))
3357 primop = primop1;
3358 unsignedp = unsignedp1;
3359 constant = tree_low_cst (primop0, 0);
3361 else
3363 primop = primop0;
3364 unsignedp = unsignedp0;
3365 constant = tree_low_cst (primop1, 0);
3368 bits = TYPE_PRECISION (TREE_TYPE (primop));
3369 if (bits < TYPE_PRECISION (result_type)
3370 && bits < HOST_BITS_PER_LONG && unsignedp)
3372 mask = (~ (HOST_WIDE_INT) 0) << bits;
3373 if ((mask & constant) != mask)
3374 warning ("comparison of promoted ~unsigned with constant");
3377 else if (unsignedp0 && unsignedp1
3378 && (TYPE_PRECISION (TREE_TYPE (primop0))
3379 < TYPE_PRECISION (result_type))
3380 && (TYPE_PRECISION (TREE_TYPE (primop1))
3381 < TYPE_PRECISION (result_type)))
3382 warning ("comparison of promoted ~unsigned with unsigned");
3387 /* At this point, RESULT_TYPE must be nonzero to avoid an error message.
3388 If CONVERTED is zero, both args will be converted to type RESULT_TYPE.
3389 Then the expression will be built.
3390 It will be given type FINAL_TYPE if that is nonzero;
3391 otherwise, it will be given type RESULT_TYPE. */
3393 if (!result_type)
3395 error ("invalid operands of types `%T' and `%T' to binary `%O'",
3396 TREE_TYPE (orig_op0), TREE_TYPE (orig_op1), code);
3397 return error_mark_node;
3400 /* Issue warnings about peculiar, but valid, uses of NULL. */
3401 if (/* It's reasonable to use pointer values as operands of &&
3402 and ||, so NULL is no exception. */
3403 !(code == TRUTH_ANDIF_EXPR || code == TRUTH_ORIF_EXPR)
3404 && (/* If OP0 is NULL and OP1 is not a pointer, or vice versa. */
3405 (orig_op0 == null_node
3406 && TREE_CODE (TREE_TYPE (op1)) != POINTER_TYPE)
3407 /* Or vice versa. */
3408 || (orig_op1 == null_node
3409 && TREE_CODE (TREE_TYPE (op0)) != POINTER_TYPE)
3410 /* Or, both are NULL and the operation was not a comparison. */
3411 || (orig_op0 == null_node && orig_op1 == null_node
3412 && code != EQ_EXPR && code != NE_EXPR)))
3413 /* Some sort of arithmetic operation involving NULL was
3414 performed. Note that pointer-difference and pointer-addition
3415 have already been handled above, and so we don't end up here in
3416 that case. */
3417 warning ("NULL used in arithmetic");
3419 if (! converted)
3421 if (TREE_TYPE (op0) != result_type)
3422 op0 = cp_convert (result_type, op0);
3423 if (TREE_TYPE (op1) != result_type)
3424 op1 = cp_convert (result_type, op1);
3426 if (op0 == error_mark_node || op1 == error_mark_node)
3427 return error_mark_node;
3430 if (build_type == NULL_TREE)
3431 build_type = result_type;
3434 tree result = build (resultcode, build_type, op0, op1);
3435 tree folded;
3437 folded = fold (result);
3438 if (folded == result)
3439 TREE_CONSTANT (folded) = TREE_CONSTANT (op0) & TREE_CONSTANT (op1);
3440 if (final_type != 0)
3441 return cp_convert (final_type, folded);
3442 return folded;
3446 /* Return a tree for the sum or difference (RESULTCODE says which)
3447 of pointer PTROP and integer INTOP. */
3449 static tree
3450 cp_pointer_int_sum (enum tree_code resultcode, tree ptrop, tree intop)
3452 tree res_type = TREE_TYPE (ptrop);
3454 /* pointer_int_sum() uses size_in_bytes() on the TREE_TYPE(res_type)
3455 in certain circumstance (when it's valid to do so). So we need
3456 to make sure it's complete. We don't need to check here, if we
3457 can actually complete it at all, as those checks will be done in
3458 pointer_int_sum() anyway. */
3459 complete_type (TREE_TYPE (res_type));
3461 return pointer_int_sum (resultcode, ptrop, fold (intop));
3464 /* Return a tree for the difference of pointers OP0 and OP1.
3465 The resulting tree has type int. */
3467 static tree
3468 pointer_diff (tree op0, tree op1, tree ptrtype)
3470 tree result, folded;
3471 tree restype = ptrdiff_type_node;
3472 tree target_type = TREE_TYPE (ptrtype);
3474 if (!complete_type_or_else (target_type, NULL_TREE))
3475 return error_mark_node;
3477 if (pedantic || warn_pointer_arith)
3479 if (TREE_CODE (target_type) == VOID_TYPE)
3480 pedwarn ("ISO C++ forbids using pointer of type `void *' in subtraction");
3481 if (TREE_CODE (target_type) == FUNCTION_TYPE)
3482 pedwarn ("ISO C++ forbids using pointer to a function in subtraction");
3483 if (TREE_CODE (target_type) == METHOD_TYPE)
3484 pedwarn ("ISO C++ forbids using pointer to a method in subtraction");
3487 /* First do the subtraction as integers;
3488 then drop through to build the divide operator. */
3490 op0 = cp_build_binary_op (MINUS_EXPR,
3491 cp_convert (restype, op0),
3492 cp_convert (restype, op1));
3494 /* This generates an error if op1 is a pointer to an incomplete type. */
3495 if (!COMPLETE_TYPE_P (TREE_TYPE (TREE_TYPE (op1))))
3496 error ("invalid use of a pointer to an incomplete type in pointer arithmetic");
3498 op1 = (TYPE_PTROB_P (ptrtype)
3499 ? size_in_bytes (target_type)
3500 : integer_one_node);
3502 /* Do the division. */
3504 result = build (EXACT_DIV_EXPR, restype, op0, cp_convert (restype, op1));
3506 folded = fold (result);
3507 if (folded == result)
3508 TREE_CONSTANT (folded) = TREE_CONSTANT (op0) & TREE_CONSTANT (op1);
3509 return folded;
3512 /* Construct and perhaps optimize a tree representation
3513 for a unary operation. CODE, a tree_code, specifies the operation
3514 and XARG is the operand. */
3516 tree
3517 build_x_unary_op (enum tree_code code, tree xarg)
3519 tree orig_expr = xarg;
3520 tree exp;
3521 int ptrmem = 0;
3523 if (processing_template_decl)
3525 if (type_dependent_expression_p (xarg))
3526 return build_min_nt (code, xarg, NULL_TREE);
3527 xarg = build_non_dependent_expr (xarg);
3530 exp = NULL_TREE;
3532 /* & rec, on incomplete RECORD_TYPEs is the simple opr &, not an
3533 error message. */
3534 if (code == ADDR_EXPR
3535 && TREE_CODE (xarg) != TEMPLATE_ID_EXPR
3536 && ((IS_AGGR_TYPE_CODE (TREE_CODE (TREE_TYPE (xarg)))
3537 && !COMPLETE_TYPE_P (TREE_TYPE (xarg)))
3538 || (TREE_CODE (xarg) == OFFSET_REF)))
3539 /* Don't look for a function. */;
3540 else
3541 exp = build_new_op (code, LOOKUP_NORMAL, xarg, NULL_TREE, NULL_TREE,
3542 /*overloaded_p=*/NULL);
3543 if (!exp && code == ADDR_EXPR)
3545 /* A pointer to member-function can be formed only by saying
3546 &X::mf. */
3547 if (!flag_ms_extensions && TREE_CODE (TREE_TYPE (xarg)) == METHOD_TYPE
3548 && (TREE_CODE (xarg) != OFFSET_REF || !PTRMEM_OK_P (xarg)))
3550 if (TREE_CODE (xarg) != OFFSET_REF)
3552 error ("invalid use of '%E' to form a pointer-to-member-function. Use a qualified-id.",
3553 xarg);
3554 return error_mark_node;
3556 else
3558 error ("parenthesis around '%E' cannot be used to form a pointer-to-member-function",
3559 xarg);
3560 PTRMEM_OK_P (xarg) = 1;
3564 if (TREE_CODE (xarg) == OFFSET_REF)
3566 ptrmem = PTRMEM_OK_P (xarg);
3568 if (!ptrmem && !flag_ms_extensions
3569 && TREE_CODE (TREE_TYPE (TREE_OPERAND (xarg, 1))) == METHOD_TYPE)
3571 /* A single non-static member, make sure we don't allow a
3572 pointer-to-member. */
3573 xarg = build (OFFSET_REF, TREE_TYPE (xarg),
3574 TREE_OPERAND (xarg, 0),
3575 ovl_cons (TREE_OPERAND (xarg, 1), NULL_TREE));
3576 PTRMEM_OK_P (xarg) = ptrmem;
3579 else if (TREE_CODE (xarg) == TARGET_EXPR)
3580 warning ("taking address of temporary");
3581 exp = build_unary_op (ADDR_EXPR, xarg, 0);
3582 if (TREE_CODE (exp) == ADDR_EXPR)
3583 PTRMEM_OK_P (exp) = ptrmem;
3586 if (processing_template_decl && exp != error_mark_node)
3587 return build_min_non_dep (code, exp, orig_expr,
3588 /*For {PRE,POST}{INC,DEC}REMENT_EXPR*/NULL_TREE);
3589 return exp;
3592 /* Like c_common_truthvalue_conversion, but handle pointer-to-member
3593 constants, where a null value is represented by an INTEGER_CST of
3594 -1. */
3596 tree
3597 cp_truthvalue_conversion (tree expr)
3599 tree type = TREE_TYPE (expr);
3600 if (TYPE_PTRMEM_P (type))
3601 return build_binary_op (NE_EXPR, expr, integer_zero_node, 1);
3602 else
3603 return c_common_truthvalue_conversion (expr);
3606 /* Just like cp_truthvalue_conversion, but we want a CLEANUP_POINT_EXPR. */
3608 tree
3609 condition_conversion (tree expr)
3611 tree t;
3612 if (processing_template_decl)
3613 return expr;
3614 t = perform_implicit_conversion (boolean_type_node, expr);
3615 t = fold (build1 (CLEANUP_POINT_EXPR, boolean_type_node, t));
3616 return t;
3619 /* Return an ADDR_EXPR giving the address of T. This function
3620 attempts no optimizations or simplifications; it is a low-level
3621 primitive. */
3623 tree
3624 build_address (tree t)
3626 tree addr;
3628 if (error_operand_p (t) || !cxx_mark_addressable (t))
3629 return error_mark_node;
3631 addr = build1 (ADDR_EXPR, build_pointer_type (TREE_TYPE (t)), t);
3632 if (staticp (t))
3633 TREE_CONSTANT (addr) = 1;
3635 return addr;
3638 /* Return a NOP_EXPR converting EXPR to TYPE. */
3640 tree
3641 build_nop (tree type, tree expr)
3643 tree nop;
3645 if (type == error_mark_node || error_operand_p (expr))
3646 return expr;
3648 nop = build1 (NOP_EXPR, type, expr);
3649 if (TREE_CONSTANT (expr))
3650 TREE_CONSTANT (nop) = 1;
3652 return nop;
3655 /* C++: Must handle pointers to members.
3657 Perhaps type instantiation should be extended to handle conversion
3658 from aggregates to types we don't yet know we want? (Or are those
3659 cases typically errors which should be reported?)
3661 NOCONVERT nonzero suppresses the default promotions
3662 (such as from short to int). */
3664 tree
3665 build_unary_op (enum tree_code code, tree xarg, int noconvert)
3667 /* No default_conversion here. It causes trouble for ADDR_EXPR. */
3668 tree arg = xarg;
3669 tree argtype = 0;
3670 const char *errstring = NULL;
3671 tree val;
3673 if (arg == error_mark_node)
3674 return error_mark_node;
3676 switch (code)
3678 case CONVERT_EXPR:
3679 /* This is used for unary plus, because a CONVERT_EXPR
3680 is enough to prevent anybody from looking inside for
3681 associativity, but won't generate any code. */
3682 if (!(arg = build_expr_type_conversion
3683 (WANT_ARITH | WANT_ENUM | WANT_POINTER, arg, true)))
3684 errstring = "wrong type argument to unary plus";
3685 else
3687 if (!noconvert)
3688 arg = default_conversion (arg);
3689 arg = build1 (NON_LVALUE_EXPR, TREE_TYPE (arg), arg);
3690 TREE_CONSTANT (arg) = TREE_CONSTANT (TREE_OPERAND (arg, 0));
3692 break;
3694 case NEGATE_EXPR:
3695 if (!(arg = build_expr_type_conversion (WANT_ARITH | WANT_ENUM, arg, true)))
3696 errstring = "wrong type argument to unary minus";
3697 else if (!noconvert && CP_INTEGRAL_TYPE_P (TREE_TYPE (arg)))
3698 arg = perform_integral_promotions (arg);
3699 break;
3701 case BIT_NOT_EXPR:
3702 if (TREE_CODE (TREE_TYPE (arg)) == COMPLEX_TYPE)
3704 code = CONJ_EXPR;
3705 if (!noconvert)
3706 arg = default_conversion (arg);
3708 else if (!(arg = build_expr_type_conversion (WANT_INT | WANT_ENUM,
3709 arg, true)))
3710 errstring = "wrong type argument to bit-complement";
3711 else if (!noconvert)
3712 arg = perform_integral_promotions (arg);
3713 break;
3715 case ABS_EXPR:
3716 if (!(arg = build_expr_type_conversion (WANT_ARITH | WANT_ENUM, arg, true)))
3717 errstring = "wrong type argument to abs";
3718 else if (!noconvert)
3719 arg = default_conversion (arg);
3720 break;
3722 case CONJ_EXPR:
3723 /* Conjugating a real value is a no-op, but allow it anyway. */
3724 if (!(arg = build_expr_type_conversion (WANT_ARITH | WANT_ENUM, arg, true)))
3725 errstring = "wrong type argument to conjugation";
3726 else if (!noconvert)
3727 arg = default_conversion (arg);
3728 break;
3730 case TRUTH_NOT_EXPR:
3731 arg = perform_implicit_conversion (boolean_type_node, arg);
3732 val = invert_truthvalue (arg);
3733 if (arg != error_mark_node)
3734 return val;
3735 errstring = "in argument to unary !";
3736 break;
3738 case NOP_EXPR:
3739 break;
3741 case REALPART_EXPR:
3742 if (TREE_CODE (arg) == COMPLEX_CST)
3743 return TREE_REALPART (arg);
3744 else if (TREE_CODE (TREE_TYPE (arg)) == COMPLEX_TYPE)
3745 return fold (build1 (REALPART_EXPR, TREE_TYPE (TREE_TYPE (arg)), arg));
3746 else
3747 return arg;
3749 case IMAGPART_EXPR:
3750 if (TREE_CODE (arg) == COMPLEX_CST)
3751 return TREE_IMAGPART (arg);
3752 else if (TREE_CODE (TREE_TYPE (arg)) == COMPLEX_TYPE)
3753 return fold (build1 (IMAGPART_EXPR, TREE_TYPE (TREE_TYPE (arg)), arg));
3754 else
3755 return cp_convert (TREE_TYPE (arg), integer_zero_node);
3757 case PREINCREMENT_EXPR:
3758 case POSTINCREMENT_EXPR:
3759 case PREDECREMENT_EXPR:
3760 case POSTDECREMENT_EXPR:
3761 /* Handle complex lvalues (when permitted)
3762 by reduction to simpler cases. */
3764 val = unary_complex_lvalue (code, arg);
3765 if (val != 0)
3766 return val;
3768 /* Increment or decrement the real part of the value,
3769 and don't change the imaginary part. */
3770 if (TREE_CODE (TREE_TYPE (arg)) == COMPLEX_TYPE)
3772 tree real, imag;
3774 arg = stabilize_reference (arg);
3775 real = build_unary_op (REALPART_EXPR, arg, 1);
3776 imag = build_unary_op (IMAGPART_EXPR, arg, 1);
3777 return build (COMPLEX_EXPR, TREE_TYPE (arg),
3778 build_unary_op (code, real, 1), imag);
3781 /* Report invalid types. */
3783 if (!(arg = build_expr_type_conversion (WANT_ARITH | WANT_POINTER,
3784 arg, true)))
3786 if (code == PREINCREMENT_EXPR)
3787 errstring ="no pre-increment operator for type";
3788 else if (code == POSTINCREMENT_EXPR)
3789 errstring ="no post-increment operator for type";
3790 else if (code == PREDECREMENT_EXPR)
3791 errstring ="no pre-decrement operator for type";
3792 else
3793 errstring ="no post-decrement operator for type";
3794 break;
3797 /* Report something read-only. */
3799 if (CP_TYPE_CONST_P (TREE_TYPE (arg))
3800 || TREE_READONLY (arg))
3801 readonly_error (arg, ((code == PREINCREMENT_EXPR
3802 || code == POSTINCREMENT_EXPR)
3803 ? "increment" : "decrement"),
3807 tree inc;
3808 tree result_type = TREE_TYPE (arg);
3810 arg = get_unwidened (arg, 0);
3811 argtype = TREE_TYPE (arg);
3813 /* ARM $5.2.5 last annotation says this should be forbidden. */
3814 if (TREE_CODE (argtype) == ENUMERAL_TYPE)
3815 pedwarn ("ISO C++ forbids %sing an enum",
3816 (code == PREINCREMENT_EXPR || code == POSTINCREMENT_EXPR)
3817 ? "increment" : "decrement");
3819 /* Compute the increment. */
3821 if (TREE_CODE (argtype) == POINTER_TYPE)
3823 tree type = complete_type (TREE_TYPE (argtype));
3825 if (!COMPLETE_OR_VOID_TYPE_P (type))
3826 error ("cannot %s a pointer to incomplete type `%T'",
3827 ((code == PREINCREMENT_EXPR
3828 || code == POSTINCREMENT_EXPR)
3829 ? "increment" : "decrement"), TREE_TYPE (argtype));
3830 else if ((pedantic || warn_pointer_arith)
3831 && !TYPE_PTROB_P (argtype))
3832 pedwarn ("ISO C++ forbids %sing a pointer of type `%T'",
3833 ((code == PREINCREMENT_EXPR
3834 || code == POSTINCREMENT_EXPR)
3835 ? "increment" : "decrement"), argtype);
3836 inc = cxx_sizeof_nowarn (TREE_TYPE (argtype));
3838 else
3839 inc = integer_one_node;
3841 inc = cp_convert (argtype, inc);
3843 /* Handle incrementing a cast-expression. */
3845 switch (TREE_CODE (arg))
3847 case NOP_EXPR:
3848 case CONVERT_EXPR:
3849 case FLOAT_EXPR:
3850 case FIX_TRUNC_EXPR:
3851 case FIX_FLOOR_EXPR:
3852 case FIX_ROUND_EXPR:
3853 case FIX_CEIL_EXPR:
3855 tree incremented, modify, value, compound;
3856 if (! lvalue_p (arg) && pedantic)
3857 pedwarn ("cast to non-reference type used as lvalue");
3858 arg = stabilize_reference (arg);
3859 if (code == PREINCREMENT_EXPR || code == PREDECREMENT_EXPR)
3860 value = arg;
3861 else
3862 value = save_expr (arg);
3863 incremented = build (((code == PREINCREMENT_EXPR
3864 || code == POSTINCREMENT_EXPR)
3865 ? PLUS_EXPR : MINUS_EXPR),
3866 argtype, value, inc);
3868 modify = build_modify_expr (arg, NOP_EXPR, incremented);
3869 compound = build (COMPOUND_EXPR, TREE_TYPE (arg), modify, value);
3871 /* Eliminate warning about unused result of + or -. */
3872 TREE_NO_UNUSED_WARNING (compound) = 1;
3873 return compound;
3876 default:
3877 break;
3880 /* Complain about anything else that is not a true lvalue. */
3881 if (!lvalue_or_else (arg, ((code == PREINCREMENT_EXPR
3882 || code == POSTINCREMENT_EXPR)
3883 ? "increment" : "decrement")))
3884 return error_mark_node;
3886 /* Forbid using -- on `bool'. */
3887 if (TREE_TYPE (arg) == boolean_type_node)
3889 if (code == POSTDECREMENT_EXPR || code == PREDECREMENT_EXPR)
3891 error ("invalid use of `--' on bool variable `%D'", arg);
3892 return error_mark_node;
3894 val = boolean_increment (code, arg);
3896 else
3897 val = build (code, TREE_TYPE (arg), arg, inc);
3899 TREE_SIDE_EFFECTS (val) = 1;
3900 return cp_convert (result_type, val);
3903 case ADDR_EXPR:
3904 /* Note that this operation never does default_conversion
3905 regardless of NOCONVERT. */
3907 argtype = lvalue_type (arg);
3909 if (TREE_CODE (arg) == OFFSET_REF)
3910 goto offset_ref;
3912 if (TREE_CODE (argtype) == REFERENCE_TYPE)
3914 arg = build1
3915 (CONVERT_EXPR,
3916 build_pointer_type (TREE_TYPE (argtype)), arg);
3917 TREE_CONSTANT (arg) = TREE_CONSTANT (TREE_OPERAND (arg, 0));
3918 return arg;
3920 else if (pedantic && DECL_MAIN_P (arg))
3921 /* ARM $3.4 */
3922 pedwarn ("ISO C++ forbids taking address of function `::main'");
3924 /* Let &* cancel out to simplify resulting code. */
3925 if (TREE_CODE (arg) == INDIRECT_REF)
3927 /* We don't need to have `current_class_ptr' wrapped in a
3928 NON_LVALUE_EXPR node. */
3929 if (arg == current_class_ref)
3930 return current_class_ptr;
3932 arg = TREE_OPERAND (arg, 0);
3933 if (TREE_CODE (TREE_TYPE (arg)) == REFERENCE_TYPE)
3935 arg = build1
3936 (CONVERT_EXPR,
3937 build_pointer_type (TREE_TYPE (TREE_TYPE (arg))), arg);
3938 TREE_CONSTANT (arg) = TREE_CONSTANT (TREE_OPERAND (arg, 0));
3940 else if (lvalue_p (arg))
3941 /* Don't let this be an lvalue. */
3942 return non_lvalue (arg);
3943 return arg;
3946 /* For &x[y], return x+y. */
3947 if (TREE_CODE (arg) == ARRAY_REF)
3949 if (!cxx_mark_addressable (TREE_OPERAND (arg, 0)))
3950 return error_mark_node;
3951 return cp_build_binary_op (PLUS_EXPR, TREE_OPERAND (arg, 0),
3952 TREE_OPERAND (arg, 1));
3955 /* Uninstantiated types are all functions. Taking the
3956 address of a function is a no-op, so just return the
3957 argument. */
3959 if (TREE_CODE (arg) == IDENTIFIER_NODE
3960 && IDENTIFIER_OPNAME_P (arg))
3962 abort ();
3963 /* We don't know the type yet, so just work around the problem.
3964 We know that this will resolve to an lvalue. */
3965 return build1 (ADDR_EXPR, unknown_type_node, arg);
3968 if (TREE_CODE (arg) == COMPONENT_REF && type_unknown_p (arg)
3969 && !really_overloaded_fn (TREE_OPERAND (arg, 1)))
3971 /* They're trying to take the address of a unique non-static
3972 member function. This is ill-formed (except in MS-land),
3973 but let's try to DTRT.
3974 Note: We only handle unique functions here because we don't
3975 want to complain if there's a static overload; non-unique
3976 cases will be handled by instantiate_type. But we need to
3977 handle this case here to allow casts on the resulting PMF.
3978 We could defer this in non-MS mode, but it's easier to give
3979 a useful error here. */
3981 /* Inside constant member functions, the `this' pointer
3982 contains an extra const qualifier. TYPE_MAIN_VARIANT
3983 is used here to remove this const from the diagnostics
3984 and the created OFFSET_REF. */
3985 tree base = TYPE_MAIN_VARIANT (TREE_TYPE (TREE_OPERAND (arg, 0)));
3986 tree name = DECL_NAME (get_first_fn (TREE_OPERAND (arg, 1)));
3988 if (! flag_ms_extensions)
3990 if (current_class_type
3991 && TREE_OPERAND (arg, 0) == current_class_ref)
3992 /* An expression like &memfn. */
3993 pedwarn ("ISO C++ forbids taking the address of an unqualified"
3994 " or parenthesized non-static member function to form"
3995 " a pointer to member function. Say `&%T::%D'",
3996 base, name);
3997 else
3998 pedwarn ("ISO C++ forbids taking the address of a bound member"
3999 " function to form a pointer to member function."
4000 " Say `&%T::%D'",
4001 base, name);
4003 arg = build_offset_ref (base, name, /*address_p=*/true);
4006 offset_ref:
4007 if (type_unknown_p (arg))
4008 return build1 (ADDR_EXPR, unknown_type_node, arg);
4010 /* Handle complex lvalues (when permitted)
4011 by reduction to simpler cases. */
4012 val = unary_complex_lvalue (code, arg);
4013 if (val != 0)
4014 return val;
4016 switch (TREE_CODE (arg))
4018 case NOP_EXPR:
4019 case CONVERT_EXPR:
4020 case FLOAT_EXPR:
4021 case FIX_TRUNC_EXPR:
4022 case FIX_FLOOR_EXPR:
4023 case FIX_ROUND_EXPR:
4024 case FIX_CEIL_EXPR:
4025 if (! lvalue_p (arg) && pedantic)
4026 pedwarn ("ISO C++ forbids taking the address of a cast to a non-lvalue expression");
4027 break;
4029 case OVERLOAD:
4030 arg = OVL_CURRENT (arg);
4031 break;
4033 default:
4034 break;
4037 /* Allow the address of a constructor if all the elements
4038 are constant. */
4039 if (TREE_CODE (arg) == CONSTRUCTOR && TREE_HAS_CONSTRUCTOR (arg)
4040 && TREE_CONSTANT (arg))
4042 /* Anything not already handled and not a true memory reference
4043 is an error. */
4044 else if (TREE_CODE (argtype) != FUNCTION_TYPE
4045 && TREE_CODE (argtype) != METHOD_TYPE
4046 && !lvalue_or_else (arg, "unary `&'"))
4047 return error_mark_node;
4049 if (argtype != error_mark_node)
4050 argtype = build_pointer_type (argtype);
4053 tree addr;
4055 if (TREE_CODE (arg) != COMPONENT_REF)
4056 addr = build_address (arg);
4057 else if (TREE_CODE (TREE_OPERAND (arg, 1)) == BASELINK)
4059 tree fn = BASELINK_FUNCTIONS (TREE_OPERAND (arg, 1));
4061 /* We can only get here with a single static member
4062 function. */
4063 my_friendly_assert (TREE_CODE (fn) == FUNCTION_DECL
4064 && DECL_STATIC_FUNCTION_P (fn),
4065 20030906);
4066 mark_used (fn);
4067 addr = build_address (fn);
4068 if (TREE_SIDE_EFFECTS (TREE_OPERAND (arg, 0)))
4069 /* Do not lose object's side effects. */
4070 addr = build (COMPOUND_EXPR, TREE_TYPE (addr),
4071 TREE_OPERAND (arg, 0), addr);
4073 else if (DECL_C_BIT_FIELD (TREE_OPERAND (arg, 1)))
4075 error ("attempt to take address of bit-field structure member `%D'",
4076 TREE_OPERAND (arg, 1));
4077 return error_mark_node;
4079 else
4081 /* Unfortunately we cannot just build an address
4082 expression here, because we would not handle
4083 address-constant-expressions or offsetof correctly. */
4084 tree field = TREE_OPERAND (arg, 1);
4085 tree rval = build_unary_op (ADDR_EXPR, TREE_OPERAND (arg, 0), 0);
4086 tree binfo = lookup_base (TREE_TYPE (TREE_TYPE (rval)),
4087 decl_type_context (field),
4088 ba_check, NULL);
4090 rval = build_base_path (PLUS_EXPR, rval, binfo, 1);
4091 rval = build_nop (argtype, rval);
4092 addr = fold (build (PLUS_EXPR, argtype, rval,
4093 cp_convert (argtype, byte_position (field))));
4096 if (TREE_CODE (argtype) == POINTER_TYPE
4097 && TREE_CODE (TREE_TYPE (argtype)) == METHOD_TYPE)
4099 build_ptrmemfunc_type (argtype);
4100 addr = build_ptrmemfunc (argtype, addr, 0);
4103 return addr;
4106 default:
4107 break;
4110 if (!errstring)
4112 if (argtype == 0)
4113 argtype = TREE_TYPE (arg);
4114 return fold (build1 (code, argtype, arg));
4117 error ("%s", errstring);
4118 return error_mark_node;
4121 /* Apply unary lvalue-demanding operator CODE to the expression ARG
4122 for certain kinds of expressions which are not really lvalues
4123 but which we can accept as lvalues.
4125 If ARG is not a kind of expression we can handle, return zero. */
4127 tree
4128 unary_complex_lvalue (enum tree_code code, tree arg)
4130 /* Handle (a, b) used as an "lvalue". */
4131 if (TREE_CODE (arg) == COMPOUND_EXPR)
4133 tree real_result = build_unary_op (code, TREE_OPERAND (arg, 1), 0);
4134 return build (COMPOUND_EXPR, TREE_TYPE (real_result),
4135 TREE_OPERAND (arg, 0), real_result);
4138 /* Handle (a ? b : c) used as an "lvalue". */
4139 if (TREE_CODE (arg) == COND_EXPR
4140 || TREE_CODE (arg) == MIN_EXPR || TREE_CODE (arg) == MAX_EXPR)
4141 return rationalize_conditional_expr (code, arg);
4143 /* Handle (a = b), (++a), and (--a) used as an "lvalue". */
4144 if (TREE_CODE (arg) == MODIFY_EXPR
4145 || TREE_CODE (arg) == PREINCREMENT_EXPR
4146 || TREE_CODE (arg) == PREDECREMENT_EXPR)
4148 tree lvalue = TREE_OPERAND (arg, 0);
4149 if (TREE_SIDE_EFFECTS (lvalue))
4151 lvalue = stabilize_reference (lvalue);
4152 arg = build (TREE_CODE (arg), TREE_TYPE (arg),
4153 lvalue, TREE_OPERAND (arg, 1));
4155 return unary_complex_lvalue
4156 (code, build (COMPOUND_EXPR, TREE_TYPE (lvalue), arg, lvalue));
4159 if (code != ADDR_EXPR)
4160 return 0;
4162 /* Handle (a = b) used as an "lvalue" for `&'. */
4163 if (TREE_CODE (arg) == MODIFY_EXPR
4164 || TREE_CODE (arg) == INIT_EXPR)
4166 tree real_result = build_unary_op (code, TREE_OPERAND (arg, 0), 0);
4167 arg = build (COMPOUND_EXPR, TREE_TYPE (real_result), arg, real_result);
4168 TREE_NO_UNUSED_WARNING (arg) = 1;
4169 return arg;
4172 if (TREE_CODE (TREE_TYPE (arg)) == FUNCTION_TYPE
4173 || TREE_CODE (TREE_TYPE (arg)) == METHOD_TYPE
4174 || TREE_CODE (arg) == OFFSET_REF)
4176 tree t;
4178 my_friendly_assert (TREE_CODE (arg) != SCOPE_REF, 313);
4180 if (TREE_CODE (arg) != OFFSET_REF)
4181 return 0;
4183 t = TREE_OPERAND (arg, 1);
4185 /* Check all this code for right semantics. */
4186 if (TREE_CODE (t) == FUNCTION_DECL)
4188 if (DECL_DESTRUCTOR_P (t))
4189 error ("taking address of destructor");
4190 return build_unary_op (ADDR_EXPR, t, 0);
4192 if (TREE_CODE (t) == VAR_DECL)
4193 return build_unary_op (ADDR_EXPR, t, 0);
4194 else
4196 tree type;
4198 if (TREE_OPERAND (arg, 0)
4199 && ! is_dummy_object (TREE_OPERAND (arg, 0))
4200 && TREE_CODE (t) != FIELD_DECL)
4202 error ("taking address of bound pointer-to-member expression");
4203 return error_mark_node;
4205 if (!PTRMEM_OK_P (arg))
4206 return build_unary_op (code, arg, 0);
4208 if (TREE_CODE (TREE_TYPE (t)) == REFERENCE_TYPE)
4210 error ("cannot create pointer to reference member `%D'", t);
4211 return error_mark_node;
4214 type = build_ptrmem_type (DECL_FIELD_CONTEXT (t), TREE_TYPE (t));
4215 t = make_ptrmem_cst (type, TREE_OPERAND (arg, 1));
4216 return t;
4221 /* We permit compiler to make function calls returning
4222 objects of aggregate type look like lvalues. */
4224 tree targ = arg;
4226 if (TREE_CODE (targ) == SAVE_EXPR)
4227 targ = TREE_OPERAND (targ, 0);
4229 if (TREE_CODE (targ) == CALL_EXPR && IS_AGGR_TYPE (TREE_TYPE (targ)))
4231 if (TREE_CODE (arg) == SAVE_EXPR)
4232 targ = arg;
4233 else
4234 targ = build_cplus_new (TREE_TYPE (arg), arg);
4235 return build1 (ADDR_EXPR, build_pointer_type (TREE_TYPE (arg)), targ);
4238 if (TREE_CODE (arg) == SAVE_EXPR && TREE_CODE (targ) == INDIRECT_REF)
4239 return build (SAVE_EXPR, build_pointer_type (TREE_TYPE (arg)),
4240 TREE_OPERAND (targ, 0), current_function_decl, NULL);
4243 /* Don't let anything else be handled specially. */
4244 return 0;
4247 /* Mark EXP saying that we need to be able to take the
4248 address of it; it should not be allocated in a register.
4249 Value is true if successful.
4251 C++: we do not allow `current_class_ptr' to be addressable. */
4253 bool
4254 cxx_mark_addressable (tree exp)
4256 tree x = exp;
4258 while (1)
4259 switch (TREE_CODE (x))
4261 case ADDR_EXPR:
4262 case COMPONENT_REF:
4263 case ARRAY_REF:
4264 case REALPART_EXPR:
4265 case IMAGPART_EXPR:
4266 x = TREE_OPERAND (x, 0);
4267 break;
4269 case PARM_DECL:
4270 if (x == current_class_ptr)
4272 error ("cannot take the address of `this', which is an rvalue expression");
4273 TREE_ADDRESSABLE (x) = 1; /* so compiler doesn't die later. */
4274 return true;
4276 /* Fall through. */
4278 case VAR_DECL:
4279 /* Caller should not be trying to mark initialized
4280 constant fields addressable. */
4281 my_friendly_assert (DECL_LANG_SPECIFIC (x) == 0
4282 || DECL_IN_AGGR_P (x) == 0
4283 || TREE_STATIC (x)
4284 || DECL_EXTERNAL (x), 314);
4285 /* Fall through. */
4287 case CONST_DECL:
4288 case RESULT_DECL:
4289 if (DECL_REGISTER (x) && !TREE_ADDRESSABLE (x)
4290 && !DECL_ARTIFICIAL (x) && extra_warnings)
4291 warning ("address requested for `%D', which is declared `register'",
4293 TREE_ADDRESSABLE (x) = 1;
4294 put_var_into_stack (x, /*rescan=*/true);
4295 return true;
4297 case FUNCTION_DECL:
4298 TREE_ADDRESSABLE (x) = 1;
4299 TREE_ADDRESSABLE (DECL_ASSEMBLER_NAME (x)) = 1;
4300 return true;
4302 case CONSTRUCTOR:
4303 TREE_ADDRESSABLE (x) = 1;
4304 return true;
4306 case TARGET_EXPR:
4307 TREE_ADDRESSABLE (x) = 1;
4308 cxx_mark_addressable (TREE_OPERAND (x, 0));
4309 return true;
4311 default:
4312 return true;
4316 /* Build and return a conditional expression IFEXP ? OP1 : OP2. */
4318 tree
4319 build_x_conditional_expr (tree ifexp, tree op1, tree op2)
4321 tree orig_ifexp = ifexp;
4322 tree orig_op1 = op1;
4323 tree orig_op2 = op2;
4324 tree expr;
4326 if (processing_template_decl)
4328 /* The standard says that the expression is type-dependent if
4329 IFEXP is type-dependent, even though the eventual type of the
4330 expression doesn't dependent on IFEXP. */
4331 if (type_dependent_expression_p (ifexp)
4332 /* As a GNU extension, the middle operand may be omitted. */
4333 || (op1 && type_dependent_expression_p (op1))
4334 || type_dependent_expression_p (op2))
4335 return build_min_nt (COND_EXPR, ifexp, op1, op2);
4336 ifexp = build_non_dependent_expr (ifexp);
4337 if (op1)
4338 op1 = build_non_dependent_expr (op1);
4339 op2 = build_non_dependent_expr (op2);
4342 expr = build_conditional_expr (ifexp, op1, op2);
4343 if (processing_template_decl && expr != error_mark_node)
4344 return build_min_non_dep (COND_EXPR, expr,
4345 orig_ifexp, orig_op1, orig_op2);
4346 return expr;
4349 /* Given a list of expressions, return a compound expression
4350 that performs them all and returns the value of the last of them. */
4352 tree build_x_compound_expr_from_list (tree list, const char *msg)
4354 tree expr = TREE_VALUE (list);
4356 if (TREE_CHAIN (list))
4358 if (msg)
4359 pedwarn ("%s expression list treated as compound expression", msg);
4361 for (list = TREE_CHAIN (list); list; list = TREE_CHAIN (list))
4362 expr = build_x_compound_expr (expr, TREE_VALUE (list));
4365 return expr;
4368 /* Handle overloading of the ',' operator when needed. */
4370 tree
4371 build_x_compound_expr (tree op1, tree op2)
4373 tree result;
4374 tree orig_op1 = op1;
4375 tree orig_op2 = op2;
4377 if (processing_template_decl)
4379 if (type_dependent_expression_p (op1)
4380 || type_dependent_expression_p (op2))
4381 return build_min_nt (COMPOUND_EXPR, op1, op2);
4382 op1 = build_non_dependent_expr (op1);
4383 op2 = build_non_dependent_expr (op2);
4386 result = build_new_op (COMPOUND_EXPR, LOOKUP_NORMAL, op1, op2, NULL_TREE,
4387 /*overloaded_p=*/NULL);
4388 if (!result)
4389 result = build_compound_expr (op1, op2);
4391 if (processing_template_decl && result != error_mark_node)
4392 return build_min_non_dep (COMPOUND_EXPR, result, orig_op1, orig_op2);
4394 return result;
4397 /* Build a compound expression. */
4399 tree
4400 build_compound_expr (tree lhs, tree rhs)
4402 lhs = decl_constant_value (lhs);
4403 lhs = convert_to_void (lhs, "left-hand operand of comma");
4405 if (lhs == error_mark_node || rhs == error_mark_node)
4406 return error_mark_node;
4408 if (TREE_CODE (rhs) == TARGET_EXPR)
4410 /* If the rhs is a TARGET_EXPR, then build the compound
4411 expression inside the target_expr's initializer. This
4412 helps the compiler to eliminate unnecessary temporaries. */
4413 tree init = TREE_OPERAND (rhs, 1);
4415 init = build (COMPOUND_EXPR, TREE_TYPE (init), lhs, init);
4416 TREE_OPERAND (rhs, 1) = init;
4418 return rhs;
4421 return build (COMPOUND_EXPR, TREE_TYPE (rhs), lhs, rhs);
4424 /* Issue an error message if casting from SRC_TYPE to DEST_TYPE casts
4425 away constness. DESCRIPTION explains what operation is taking
4426 place. */
4428 static void
4429 check_for_casting_away_constness (tree src_type, tree dest_type,
4430 const char *description)
4432 if (casts_away_constness (src_type, dest_type))
4433 error ("%s from type `%T' to type `%T' casts away constness",
4434 description, src_type, dest_type);
4437 /* Return an expression representing static_cast<TYPE>(EXPR). */
4439 tree
4440 build_static_cast (tree type, tree expr)
4442 tree intype;
4443 tree result;
4445 if (type == error_mark_node || expr == error_mark_node)
4446 return error_mark_node;
4448 if (processing_template_decl)
4450 expr = build_min (STATIC_CAST_EXPR, type, expr);
4451 /* We don't know if it will or will not have side effects. */
4452 TREE_SIDE_EFFECTS (expr) = 1;
4453 return expr;
4456 /* build_c_cast puts on a NOP_EXPR to make the result not an lvalue.
4457 Strip such NOP_EXPRs if VALUE is being used in non-lvalue context. */
4458 if (TREE_CODE (type) != REFERENCE_TYPE
4459 && TREE_CODE (expr) == NOP_EXPR
4460 && TREE_TYPE (expr) == TREE_TYPE (TREE_OPERAND (expr, 0)))
4461 expr = TREE_OPERAND (expr, 0);
4463 intype = TREE_TYPE (expr);
4465 /* [expr.static.cast]
4467 An lvalue of type "cv1 B", where B is a class type, can be cast
4468 to type "reference to cv2 D", where D is a class derived (clause
4469 _class.derived_) from B, if a valid standard conversion from
4470 "pointer to D" to "pointer to B" exists (_conv.ptr_), cv2 is the
4471 same cv-qualification as, or greater cv-qualification than, cv1,
4472 and B is not a virtual base class of D. */
4473 /* We check this case before checking the validity of "TYPE t =
4474 EXPR;" below because for this case:
4476 struct B {};
4477 struct D : public B { D(const B&); };
4478 extern B& b;
4479 void f() { static_cast<const D&>(b); }
4481 we want to avoid constructing a new D. The standard is not
4482 completely clear about this issue, but our interpretation is
4483 consistent with other compilers. */
4484 if (TREE_CODE (type) == REFERENCE_TYPE
4485 && CLASS_TYPE_P (TREE_TYPE (type))
4486 && CLASS_TYPE_P (intype)
4487 && real_lvalue_p (expr)
4488 && DERIVED_FROM_P (intype, TREE_TYPE (type))
4489 && can_convert (build_pointer_type (TYPE_MAIN_VARIANT (intype)),
4490 build_pointer_type (TYPE_MAIN_VARIANT
4491 (TREE_TYPE (type))))
4492 && at_least_as_qualified_p (TREE_TYPE (type), intype))
4494 /* There is a standard conversion from "D*" to "B*" even if "B"
4495 is ambiguous or inaccessible. Therefore, we ask lookup_base
4496 to check these conditions. */
4497 tree base = lookup_base (TREE_TYPE (type), intype, ba_check, NULL);
4499 /* Convert from "B*" to "D*". This function will check that "B"
4500 is not a virtual base of "D". */
4501 expr = build_base_path (MINUS_EXPR, build_address (expr),
4502 base, /*nonnull=*/false);
4503 /* Convert the pointer to a reference -- but then remember that
4504 there are no expressions with reference type in C++. */
4505 return convert_from_reference (build_nop (type, expr));
4508 /* [expr.static.cast]
4510 An expression e can be explicitly converted to a type T using a
4511 static_cast of the form static_cast<T>(e) if the declaration T
4512 t(e);" is well-formed, for some invented temporary variable
4513 t. */
4514 result = perform_direct_initialization_if_possible (type, expr);
4515 if (result)
4516 return convert_from_reference (result);
4518 /* [expr.static.cast]
4520 Any expression can be explicitly converted to type cv void. */
4521 if (TREE_CODE (type) == VOID_TYPE)
4522 return convert_to_void (expr, /*implicit=*/NULL);
4524 /* [expr.static.cast]
4526 The inverse of any standard conversion sequence (clause _conv_),
4527 other than the lvalue-to-rvalue (_conv.lval_), array-to-pointer
4528 (_conv.array_), function-to-pointer (_conv.func_), and boolean
4529 (_conv.bool_) conversions, can be performed explicitly using
4530 static_cast subject to the restriction that the explicit
4531 conversion does not cast away constness (_expr.const.cast_), and
4532 the following additional rules for specific cases: */
4533 /* For reference, the conversions not excluded are: integral
4534 promotions, floating point promotion, integral conversions,
4535 floating point conversions, floating-integral conversions,
4536 pointer conversions, and pointer to member conversions. */
4537 if ((ARITHMETIC_TYPE_P (type) && ARITHMETIC_TYPE_P (intype))
4538 /* DR 128
4540 A value of integral _or enumeration_ type can be explicitly
4541 converted to an enumeration type. */
4542 || (INTEGRAL_OR_ENUMERATION_TYPE_P (type)
4543 && INTEGRAL_OR_ENUMERATION_TYPE_P (intype)))
4544 /* Really, build_c_cast should defer to this function rather
4545 than the other way around. */
4546 return build_c_cast (type, expr);
4548 if (TYPE_PTR_P (type) && TYPE_PTR_P (intype)
4549 && CLASS_TYPE_P (TREE_TYPE (type))
4550 && CLASS_TYPE_P (TREE_TYPE (intype))
4551 && can_convert (build_pointer_type (TYPE_MAIN_VARIANT
4552 (TREE_TYPE (intype))),
4553 build_pointer_type (TYPE_MAIN_VARIANT
4554 (TREE_TYPE (type)))))
4556 tree base;
4558 check_for_casting_away_constness (intype, type, "static_cast");
4559 base = lookup_base (TREE_TYPE (type), TREE_TYPE (intype), ba_check,
4560 NULL);
4561 return build_base_path (MINUS_EXPR, expr, base, /*nonnull=*/false);
4564 if ((TYPE_PTRMEM_P (type) && TYPE_PTRMEM_P (intype))
4565 || (TYPE_PTRMEMFUNC_P (type) && TYPE_PTRMEMFUNC_P (intype)))
4567 tree c1;
4568 tree c2;
4569 tree t1;
4570 tree t2;
4572 c1 = TYPE_PTRMEM_CLASS_TYPE (intype);
4573 c2 = TYPE_PTRMEM_CLASS_TYPE (type);
4575 if (TYPE_PTRMEM_P (type))
4577 t1 = (build_ptrmem_type
4578 (c1,
4579 TYPE_MAIN_VARIANT (TYPE_PTRMEM_POINTED_TO_TYPE (intype))));
4580 t2 = (build_ptrmem_type
4581 (c2,
4582 TYPE_MAIN_VARIANT (TYPE_PTRMEM_POINTED_TO_TYPE (type))));
4584 else
4586 t1 = intype;
4587 t2 = type;
4589 if (can_convert (t1, t2))
4591 check_for_casting_away_constness (intype, type, "static_cast");
4592 if (TYPE_PTRMEM_P (type))
4594 tree delta;
4596 if (TREE_CODE (expr) == PTRMEM_CST)
4597 expr = cplus_expand_constant (expr);
4598 delta = get_delta_difference (c1, c2, /*force=*/1);
4599 if (!integer_zerop (delta))
4600 expr = cp_build_binary_op (PLUS_EXPR,
4601 build_nop (ptrdiff_type_node, expr),
4602 delta);
4603 return build_nop (type, expr);
4605 else
4606 return build_ptrmemfunc (TYPE_PTRMEMFUNC_FN_TYPE (type), expr,
4607 /*force=*/1);
4611 /* [expr.static.cast]
4613 An rvalue of type "pointer to cv void" can be explicitly
4614 converted to a pointer to object type. A value of type pointer
4615 to object converted to "pointer to cv void" and back to the
4616 original pointer type will have its original value. */
4617 if (TREE_CODE (intype) == POINTER_TYPE
4618 && VOID_TYPE_P (TREE_TYPE (intype))
4619 && TYPE_PTROB_P (type))
4621 check_for_casting_away_constness (intype, type, "static_cast");
4622 return build_nop (type, expr);
4625 error ("invalid static_cast from type `%T' to type `%T'", intype, type);
4626 return error_mark_node;
4629 tree
4630 build_reinterpret_cast (tree type, tree expr)
4632 tree intype;
4634 if (type == error_mark_node || expr == error_mark_node)
4635 return error_mark_node;
4637 if (processing_template_decl)
4639 tree t = build_min (REINTERPRET_CAST_EXPR, type, expr);
4641 if (!TREE_SIDE_EFFECTS (t)
4642 && type_dependent_expression_p (expr))
4643 /* There might turn out to be side effects inside expr. */
4644 TREE_SIDE_EFFECTS (t) = 1;
4645 return t;
4648 if (TREE_CODE (type) != REFERENCE_TYPE)
4650 expr = decay_conversion (expr);
4652 /* build_c_cast puts on a NOP_EXPR to make the result not an lvalue.
4653 Strip such NOP_EXPRs if VALUE is being used in non-lvalue context. */
4654 if (TREE_CODE (expr) == NOP_EXPR
4655 && TREE_TYPE (expr) == TREE_TYPE (TREE_OPERAND (expr, 0)))
4656 expr = TREE_OPERAND (expr, 0);
4659 intype = TREE_TYPE (expr);
4661 if (TREE_CODE (type) == REFERENCE_TYPE)
4663 if (! real_lvalue_p (expr))
4665 error ("invalid reinterpret_cast of an rvalue expression of type `%T' to type `%T'", intype, type);
4666 return error_mark_node;
4668 expr = build_unary_op (ADDR_EXPR, expr, 0);
4669 if (expr != error_mark_node)
4670 expr = build_reinterpret_cast
4671 (build_pointer_type (TREE_TYPE (type)), expr);
4672 if (expr != error_mark_node)
4673 expr = build_indirect_ref (expr, 0);
4674 return expr;
4676 else if (same_type_ignoring_top_level_qualifiers_p (intype, type))
4677 return build_static_cast (type, expr);
4679 if (TYPE_PTR_P (type) && (TREE_CODE (intype) == INTEGER_TYPE
4680 || TREE_CODE (intype) == ENUMERAL_TYPE))
4681 /* OK */;
4682 else if (TREE_CODE (type) == INTEGER_TYPE && TYPE_PTR_P (intype))
4684 if (TYPE_PRECISION (type) < TYPE_PRECISION (intype))
4685 pedwarn ("reinterpret_cast from `%T' to `%T' loses precision",
4686 intype, type);
4688 else if ((TYPE_PTRFN_P (type) && TYPE_PTRFN_P (intype))
4689 || (TYPE_PTRMEMFUNC_P (type) && TYPE_PTRMEMFUNC_P (intype)))
4691 expr = decl_constant_value (expr);
4692 return fold (build1 (NOP_EXPR, type, expr));
4694 else if ((TYPE_PTRMEM_P (type) && TYPE_PTRMEM_P (intype))
4695 || (TYPE_PTROBV_P (type) && TYPE_PTROBV_P (intype)))
4697 check_for_casting_away_constness (intype, type, "reinterpret_cast");
4698 expr = decl_constant_value (expr);
4699 return fold (build1 (NOP_EXPR, type, expr));
4701 else if ((TYPE_PTRFN_P (type) && TYPE_PTROBV_P (intype))
4702 || (TYPE_PTRFN_P (intype) && TYPE_PTROBV_P (type)))
4704 pedwarn ("ISO C++ forbids casting between pointer-to-function and pointer-to-object");
4705 expr = decl_constant_value (expr);
4706 return fold (build1 (NOP_EXPR, type, expr));
4708 else
4710 error ("invalid reinterpret_cast from type `%T' to type `%T'",
4711 intype, type);
4712 return error_mark_node;
4715 return cp_convert (type, expr);
4718 tree
4719 build_const_cast (tree type, tree expr)
4721 tree intype;
4723 if (type == error_mark_node || expr == error_mark_node)
4724 return error_mark_node;
4726 if (processing_template_decl)
4728 tree t = build_min (CONST_CAST_EXPR, type, expr);
4730 if (!TREE_SIDE_EFFECTS (t)
4731 && type_dependent_expression_p (expr))
4732 /* There might turn out to be side effects inside expr. */
4733 TREE_SIDE_EFFECTS (t) = 1;
4734 return t;
4737 if (!POINTER_TYPE_P (type) && !TYPE_PTRMEM_P (type))
4738 error ("invalid use of const_cast with type `%T', which is not a pointer, reference, nor a pointer-to-data-member type", type);
4739 else if (TREE_CODE (TREE_TYPE (type)) == FUNCTION_TYPE)
4741 error ("invalid use of const_cast with type `%T', which is a pointer or reference to a function type", type);
4742 return error_mark_node;
4745 if (TREE_CODE (type) != REFERENCE_TYPE)
4747 expr = decay_conversion (expr);
4749 /* build_c_cast puts on a NOP_EXPR to make the result not an lvalue.
4750 Strip such NOP_EXPRs if VALUE is being used in non-lvalue context. */
4751 if (TREE_CODE (expr) == NOP_EXPR
4752 && TREE_TYPE (expr) == TREE_TYPE (TREE_OPERAND (expr, 0)))
4753 expr = TREE_OPERAND (expr, 0);
4756 intype = TREE_TYPE (expr);
4758 if (same_type_ignoring_top_level_qualifiers_p (intype, type))
4759 return build_static_cast (type, expr);
4760 else if (TREE_CODE (type) == REFERENCE_TYPE)
4762 if (! real_lvalue_p (expr))
4764 error ("invalid const_cast of an rvalue of type `%T' to type `%T'", intype, type);
4765 return error_mark_node;
4768 if (comp_ptr_ttypes_const (TREE_TYPE (type), intype))
4770 expr = build_unary_op (ADDR_EXPR, expr, 0);
4771 expr = build1 (NOP_EXPR, type, expr);
4772 return convert_from_reference (expr);
4775 else if (((TREE_CODE (type) == POINTER_TYPE
4776 && TREE_CODE (intype) == POINTER_TYPE)
4777 || (TYPE_PTRMEM_P (type) && TYPE_PTRMEM_P (intype)))
4778 && comp_ptr_ttypes_const (TREE_TYPE (type), TREE_TYPE (intype)))
4779 return cp_convert (type, expr);
4781 error ("invalid const_cast from type `%T' to type `%T'", intype, type);
4782 return error_mark_node;
4785 /* Build an expression representing a cast to type TYPE of expression EXPR.
4787 ALLOW_NONCONVERTING is true if we should allow non-converting constructors
4788 when doing the cast. */
4790 tree
4791 build_c_cast (tree type, tree expr)
4793 tree value = expr;
4794 tree otype;
4796 if (type == error_mark_node || expr == error_mark_node)
4797 return error_mark_node;
4799 if (processing_template_decl)
4801 tree t = build_min (CAST_EXPR, type,
4802 tree_cons (NULL_TREE, value, NULL_TREE));
4803 /* We don't know if it will or will not have side effects. */
4804 TREE_SIDE_EFFECTS (t) = 1;
4805 return t;
4808 /* build_c_cast puts on a NOP_EXPR to make the result not an lvalue.
4809 Strip such NOP_EXPRs if VALUE is being used in non-lvalue context. */
4810 if (TREE_CODE (type) != REFERENCE_TYPE
4811 && TREE_CODE (value) == NOP_EXPR
4812 && TREE_TYPE (value) == TREE_TYPE (TREE_OPERAND (value, 0)))
4813 value = TREE_OPERAND (value, 0);
4815 if (TREE_CODE (type) == ARRAY_TYPE)
4817 /* Allow casting from T1* to T2[] because Cfront allows it.
4818 NIHCL uses it. It is not valid ISO C++ however. */
4819 if (TREE_CODE (TREE_TYPE (expr)) == POINTER_TYPE)
4821 pedwarn ("ISO C++ forbids casting to an array type `%T'", type);
4822 type = build_pointer_type (TREE_TYPE (type));
4824 else
4826 error ("ISO C++ forbids casting to an array type `%T'", type);
4827 return error_mark_node;
4831 if (TREE_CODE (type) == FUNCTION_TYPE
4832 || TREE_CODE (type) == METHOD_TYPE)
4834 error ("invalid cast to function type `%T'", type);
4835 return error_mark_node;
4838 if (TREE_CODE (type) == VOID_TYPE)
4840 /* Conversion to void does not cause any of the normal function to
4841 * pointer, array to pointer and lvalue to rvalue decays. */
4843 value = convert_to_void (value, /*implicit=*/NULL);
4844 return value;
4847 if (!complete_type_or_else (type, NULL_TREE))
4848 return error_mark_node;
4850 /* Convert functions and arrays to pointers and
4851 convert references to their expanded types,
4852 but don't convert any other types. If, however, we are
4853 casting to a class type, there's no reason to do this: the
4854 cast will only succeed if there is a converting constructor,
4855 and the default conversions will be done at that point. In
4856 fact, doing the default conversion here is actually harmful
4857 in cases like this:
4859 typedef int A[2];
4860 struct S { S(const A&); };
4862 since we don't want the array-to-pointer conversion done. */
4863 if (!IS_AGGR_TYPE (type))
4865 if (TREE_CODE (TREE_TYPE (value)) == FUNCTION_TYPE
4866 || (TREE_CODE (TREE_TYPE (value)) == METHOD_TYPE
4867 /* Don't do the default conversion on a ->* expression. */
4868 && ! (TREE_CODE (type) == POINTER_TYPE
4869 && bound_pmf_p (value)))
4870 || TREE_CODE (TREE_TYPE (value)) == ARRAY_TYPE
4871 || TREE_CODE (TREE_TYPE (value)) == REFERENCE_TYPE)
4872 value = decay_conversion (value);
4874 else if (TREE_CODE (TREE_TYPE (value)) == REFERENCE_TYPE)
4875 /* However, even for class types, we still need to strip away
4876 the reference type, since the call to convert_force below
4877 does not expect the input expression to be of reference
4878 type. */
4879 value = convert_from_reference (value);
4881 otype = TREE_TYPE (value);
4883 /* Optionally warn about potentially worrisome casts. */
4885 if (warn_cast_qual
4886 && TREE_CODE (type) == POINTER_TYPE
4887 && TREE_CODE (otype) == POINTER_TYPE
4888 && !at_least_as_qualified_p (TREE_TYPE (type),
4889 TREE_TYPE (otype)))
4890 warning ("cast from `%T' to `%T' discards qualifiers from pointer target type",
4891 otype, type);
4893 if (TREE_CODE (type) == INTEGER_TYPE
4894 && TYPE_PTR_P (otype)
4895 && TYPE_PRECISION (type) != TYPE_PRECISION (otype))
4896 warning ("cast from pointer to integer of different size");
4898 if (TYPE_PTR_P (type)
4899 && TREE_CODE (otype) == INTEGER_TYPE
4900 && TYPE_PRECISION (type) != TYPE_PRECISION (otype)
4901 /* Don't warn about converting any constant. */
4902 && !TREE_CONSTANT (value))
4903 warning ("cast to pointer from integer of different size");
4905 if (TREE_CODE (type) == REFERENCE_TYPE)
4906 value = (convert_from_reference
4907 (convert_to_reference (type, value, CONV_C_CAST,
4908 LOOKUP_COMPLAIN, NULL_TREE)));
4909 else
4911 tree ovalue;
4913 value = decl_constant_value (value);
4915 ovalue = value;
4916 value = convert_force (type, value, CONV_C_CAST);
4918 /* Ignore any integer overflow caused by the cast. */
4919 if (TREE_CODE (value) == INTEGER_CST)
4921 TREE_OVERFLOW (value) = TREE_OVERFLOW (ovalue);
4923 if (TREE_CODE_CLASS (TREE_CODE (ovalue)) == 'c')
4924 TREE_CONSTANT_OVERFLOW (value) = TREE_CONSTANT_OVERFLOW (ovalue);
4928 /* Warn about possible alignment problems. Do this here when we will have
4929 instantiated any necessary template types. */
4930 if (STRICT_ALIGNMENT && warn_cast_align
4931 && TREE_CODE (type) == POINTER_TYPE
4932 && TREE_CODE (otype) == POINTER_TYPE
4933 && TREE_CODE (TREE_TYPE (otype)) != VOID_TYPE
4934 && TREE_CODE (TREE_TYPE (otype)) != FUNCTION_TYPE
4935 && COMPLETE_TYPE_P (TREE_TYPE (otype))
4936 && COMPLETE_TYPE_P (TREE_TYPE (type))
4937 && TYPE_ALIGN (TREE_TYPE (type)) > TYPE_ALIGN (TREE_TYPE (otype)))
4938 warning ("cast from `%T' to `%T' increases required alignment of target type",
4939 otype, type);
4941 /* Always produce some operator for an explicit cast,
4942 so we can tell (for -pedantic) that the cast is no lvalue. */
4943 if (TREE_CODE (type) != REFERENCE_TYPE && value == expr
4944 && real_lvalue_p (value))
4945 value = non_lvalue (value);
4947 return value;
4950 /* Build an assignment expression of lvalue LHS from value RHS.
4951 MODIFYCODE is the code for a binary operator that we use
4952 to combine the old value of LHS with RHS to get the new value.
4953 Or else MODIFYCODE is NOP_EXPR meaning do a simple assignment.
4955 C++: If MODIFYCODE is INIT_EXPR, then leave references unbashed. */
4957 tree
4958 build_modify_expr (tree lhs, enum tree_code modifycode, tree rhs)
4960 tree result;
4961 tree newrhs = rhs;
4962 tree lhstype = TREE_TYPE (lhs);
4963 tree olhstype = lhstype;
4964 tree olhs = NULL_TREE;
4966 /* Avoid duplicate error messages from operands that had errors. */
4967 if (lhs == error_mark_node || rhs == error_mark_node)
4968 return error_mark_node;
4970 /* Handle control structure constructs used as "lvalues". */
4971 switch (TREE_CODE (lhs))
4973 /* Handle --foo = 5; as these are valid constructs in C++. */
4974 case PREDECREMENT_EXPR:
4975 case PREINCREMENT_EXPR:
4976 if (TREE_SIDE_EFFECTS (TREE_OPERAND (lhs, 0)))
4977 lhs = build (TREE_CODE (lhs), TREE_TYPE (lhs),
4978 stabilize_reference (TREE_OPERAND (lhs, 0)),
4979 TREE_OPERAND (lhs, 1));
4980 return build (COMPOUND_EXPR, lhstype,
4981 lhs,
4982 build_modify_expr (TREE_OPERAND (lhs, 0),
4983 modifycode, rhs));
4985 /* Handle (a, b) used as an "lvalue". */
4986 case COMPOUND_EXPR:
4987 newrhs = build_modify_expr (TREE_OPERAND (lhs, 1),
4988 modifycode, rhs);
4989 if (newrhs == error_mark_node)
4990 return error_mark_node;
4991 return build (COMPOUND_EXPR, lhstype,
4992 TREE_OPERAND (lhs, 0), newrhs);
4994 case MODIFY_EXPR:
4995 if (TREE_SIDE_EFFECTS (TREE_OPERAND (lhs, 0)))
4996 lhs = build (TREE_CODE (lhs), TREE_TYPE (lhs),
4997 stabilize_reference (TREE_OPERAND (lhs, 0)),
4998 TREE_OPERAND (lhs, 1));
4999 newrhs = build_modify_expr (TREE_OPERAND (lhs, 0), modifycode, rhs);
5000 if (newrhs == error_mark_node)
5001 return error_mark_node;
5002 return build (COMPOUND_EXPR, lhstype, lhs, newrhs);
5004 /* Handle (a ? b : c) used as an "lvalue". */
5005 case COND_EXPR:
5007 /* Produce (a ? (b = rhs) : (c = rhs))
5008 except that the RHS goes through a save-expr
5009 so the code to compute it is only emitted once. */
5010 tree cond;
5011 tree preeval = NULL_TREE;
5013 rhs = stabilize_expr (rhs, &preeval);
5015 /* Check this here to avoid odd errors when trying to convert
5016 a throw to the type of the COND_EXPR. */
5017 if (!lvalue_or_else (lhs, "assignment"))
5018 return error_mark_node;
5020 cond = build_conditional_expr
5021 (TREE_OPERAND (lhs, 0),
5022 build_modify_expr (cp_convert (TREE_TYPE (lhs),
5023 TREE_OPERAND (lhs, 1)),
5024 modifycode, rhs),
5025 build_modify_expr (cp_convert (TREE_TYPE (lhs),
5026 TREE_OPERAND (lhs, 2)),
5027 modifycode, rhs));
5029 if (cond == error_mark_node)
5030 return cond;
5031 /* Make sure the code to compute the rhs comes out
5032 before the split. */
5033 return build (COMPOUND_EXPR, TREE_TYPE (lhs), preeval, cond);
5036 default:
5037 break;
5040 if (modifycode == INIT_EXPR)
5042 if (TREE_CODE (rhs) == CONSTRUCTOR)
5044 if (! same_type_p (TREE_TYPE (rhs), lhstype))
5045 /* Call convert to generate an error; see PR 11063. */
5046 rhs = convert (lhstype, rhs);
5047 result = build (INIT_EXPR, lhstype, lhs, rhs);
5048 TREE_SIDE_EFFECTS (result) = 1;
5049 return result;
5051 else if (! IS_AGGR_TYPE (lhstype))
5052 /* Do the default thing. */;
5053 else
5055 result = build_special_member_call (lhs, complete_ctor_identifier,
5056 build_tree_list (NULL_TREE, rhs),
5057 TYPE_BINFO (lhstype),
5058 LOOKUP_NORMAL);
5059 if (result == NULL_TREE)
5060 return error_mark_node;
5061 return result;
5064 else
5066 if (TREE_CODE (lhstype) == REFERENCE_TYPE)
5068 lhs = convert_from_reference (lhs);
5069 olhstype = lhstype = TREE_TYPE (lhs);
5071 lhs = require_complete_type (lhs);
5072 if (lhs == error_mark_node)
5073 return error_mark_node;
5075 if (modifycode == NOP_EXPR)
5077 /* `operator=' is not an inheritable operator. */
5078 if (! IS_AGGR_TYPE (lhstype))
5079 /* Do the default thing. */;
5080 else
5082 result = build_new_op (MODIFY_EXPR, LOOKUP_NORMAL,
5083 lhs, rhs, make_node (NOP_EXPR),
5084 /*overloaded_p=*/NULL);
5085 if (result == NULL_TREE)
5086 return error_mark_node;
5087 return result;
5089 lhstype = olhstype;
5091 else
5093 /* A binary op has been requested. Combine the old LHS
5094 value with the RHS producing the value we should actually
5095 store into the LHS. */
5097 my_friendly_assert (!PROMOTES_TO_AGGR_TYPE (lhstype, REFERENCE_TYPE),
5098 978652);
5099 lhs = stabilize_reference (lhs);
5100 newrhs = cp_build_binary_op (modifycode, lhs, rhs);
5101 if (newrhs == error_mark_node)
5103 error (" in evaluation of `%Q(%#T, %#T)'", modifycode,
5104 TREE_TYPE (lhs), TREE_TYPE (rhs));
5105 return error_mark_node;
5108 /* Now it looks like a plain assignment. */
5109 modifycode = NOP_EXPR;
5111 my_friendly_assert (TREE_CODE (lhstype) != REFERENCE_TYPE, 20011220);
5112 my_friendly_assert (TREE_CODE (TREE_TYPE (newrhs)) != REFERENCE_TYPE,
5113 20011220);
5116 /* The left-hand side must be an lvalue. */
5117 if (!lvalue_or_else (lhs, "assignment"))
5118 return error_mark_node;
5120 /* Warn about modifying something that is `const'. Don't warn if
5121 this is initialization. */
5122 if (modifycode != INIT_EXPR
5123 && (TREE_READONLY (lhs) || CP_TYPE_CONST_P (lhstype)
5124 /* Functions are not modifiable, even though they are
5125 lvalues. */
5126 || TREE_CODE (TREE_TYPE (lhs)) == FUNCTION_TYPE
5127 || TREE_CODE (TREE_TYPE (lhs)) == METHOD_TYPE
5128 /* If it's an aggregate and any field is const, then it is
5129 effectively const. */
5130 || (CLASS_TYPE_P (lhstype)
5131 && C_TYPE_FIELDS_READONLY (lhstype))))
5132 readonly_error (lhs, "assignment", 0);
5134 /* If storing into a structure or union member, it has probably been
5135 given type `int'. Compute the type that would go with the actual
5136 amount of storage the member occupies. */
5138 if (TREE_CODE (lhs) == COMPONENT_REF
5139 && (TREE_CODE (lhstype) == INTEGER_TYPE
5140 || TREE_CODE (lhstype) == REAL_TYPE
5141 || TREE_CODE (lhstype) == ENUMERAL_TYPE))
5143 lhstype = TREE_TYPE (get_unwidened (lhs, 0));
5145 /* If storing in a field that is in actuality a short or narrower
5146 than one, we must store in the field in its actual type. */
5148 if (lhstype != TREE_TYPE (lhs))
5150 /* Avoid warnings converting integral types back into enums for
5151 enum bit fields. */
5152 if (TREE_CODE (lhstype) == INTEGER_TYPE
5153 && TREE_CODE (olhstype) == ENUMERAL_TYPE)
5155 if (TREE_SIDE_EFFECTS (lhs))
5156 lhs = stabilize_reference (lhs);
5157 olhs = lhs;
5159 lhs = copy_node (lhs);
5160 TREE_TYPE (lhs) = lhstype;
5164 /* Convert new value to destination type. */
5166 if (TREE_CODE (lhstype) == ARRAY_TYPE)
5168 int from_array;
5170 if (!same_or_base_type_p (TYPE_MAIN_VARIANT (lhstype),
5171 TYPE_MAIN_VARIANT (TREE_TYPE (rhs))))
5173 error ("incompatible types in assignment of `%T' to `%T'",
5174 TREE_TYPE (rhs), lhstype);
5175 return error_mark_node;
5178 /* Allow array assignment in compiler-generated code. */
5179 if (! DECL_ARTIFICIAL (current_function_decl))
5180 pedwarn ("ISO C++ forbids assignment of arrays");
5182 from_array = TREE_CODE (TREE_TYPE (newrhs)) == ARRAY_TYPE
5183 ? 1 + (modifycode != INIT_EXPR): 0;
5184 return build_vec_init (lhs, NULL_TREE, newrhs, from_array);
5187 if (modifycode == INIT_EXPR)
5188 newrhs = convert_for_initialization (lhs, lhstype, newrhs, LOOKUP_NORMAL,
5189 "initialization", NULL_TREE, 0);
5190 else
5192 /* Avoid warnings on enum bit fields. */
5193 if (TREE_CODE (olhstype) == ENUMERAL_TYPE
5194 && TREE_CODE (lhstype) == INTEGER_TYPE)
5196 newrhs = convert_for_assignment (olhstype, newrhs, "assignment",
5197 NULL_TREE, 0);
5198 newrhs = convert_force (lhstype, newrhs, 0);
5200 else
5201 newrhs = convert_for_assignment (lhstype, newrhs, "assignment",
5202 NULL_TREE, 0);
5203 if (TREE_CODE (newrhs) == CALL_EXPR
5204 && TYPE_NEEDS_CONSTRUCTING (lhstype))
5205 newrhs = build_cplus_new (lhstype, newrhs);
5207 /* Can't initialize directly from a TARGET_EXPR, since that would
5208 cause the lhs to be constructed twice, and possibly result in
5209 accidental self-initialization. So we force the TARGET_EXPR to be
5210 expanded without a target. */
5211 if (TREE_CODE (newrhs) == TARGET_EXPR)
5212 newrhs = build (COMPOUND_EXPR, TREE_TYPE (newrhs), newrhs,
5213 TREE_OPERAND (newrhs, 0));
5216 if (newrhs == error_mark_node)
5217 return error_mark_node;
5219 result = build (modifycode == NOP_EXPR ? MODIFY_EXPR : INIT_EXPR,
5220 lhstype, lhs, newrhs);
5222 TREE_SIDE_EFFECTS (result) = 1;
5224 /* If we got the LHS in a different type for storing in,
5225 convert the result back to the nominal type of LHS
5226 so that the value we return always has the same type
5227 as the LHS argument. */
5229 if (olhstype == TREE_TYPE (result))
5230 return result;
5231 if (olhs)
5233 result = build (COMPOUND_EXPR, olhstype, result, olhs);
5234 TREE_NO_UNUSED_WARNING (result) = 1;
5235 return result;
5237 return convert_for_assignment (olhstype, result, "assignment",
5238 NULL_TREE, 0);
5241 tree
5242 build_x_modify_expr (tree lhs, enum tree_code modifycode, tree rhs)
5244 if (processing_template_decl)
5245 return build_min_nt (MODOP_EXPR, lhs,
5246 build_min_nt (modifycode, NULL_TREE, NULL_TREE), rhs);
5248 if (modifycode != NOP_EXPR)
5250 tree rval = build_new_op (MODIFY_EXPR, LOOKUP_NORMAL, lhs, rhs,
5251 make_node (modifycode),
5252 /*overloaded_p=*/NULL);
5253 if (rval)
5254 return rval;
5256 return build_modify_expr (lhs, modifycode, rhs);
5260 /* Get difference in deltas for different pointer to member function
5261 types. Returns an integer constant of type PTRDIFF_TYPE_NODE. If
5262 the conversion is invalid, the constant is zero. If FORCE is true,
5263 then allow reverse conversions as well.
5265 Note that the naming of FROM and TO is kind of backwards; the return
5266 value is what we add to a TO in order to get a FROM. They are named
5267 this way because we call this function to find out how to convert from
5268 a pointer to member of FROM to a pointer to member of TO. */
5270 static tree
5271 get_delta_difference (tree from, tree to, int force)
5273 tree binfo;
5274 tree virt_binfo;
5275 base_kind kind;
5277 binfo = lookup_base (to, from, ba_check, &kind);
5278 if (kind == bk_inaccessible || kind == bk_ambig)
5280 error (" in pointer to member function conversion");
5281 goto error;
5283 if (!binfo)
5285 if (!force)
5287 error_not_base_type (from, to);
5288 error (" in pointer to member conversion");
5289 goto error;
5291 binfo = lookup_base (from, to, ba_check, &kind);
5292 if (!binfo)
5293 goto error;
5294 virt_binfo = binfo_from_vbase (binfo);
5295 if (virt_binfo)
5297 /* This is a reinterpret cast, we choose to do nothing. */
5298 warning ("pointer to member cast via virtual base `%T'",
5299 BINFO_TYPE (virt_binfo));
5300 goto error;
5302 return convert_to_integer (ptrdiff_type_node,
5303 size_diffop (size_zero_node,
5304 BINFO_OFFSET (binfo)));
5307 virt_binfo = binfo_from_vbase (binfo);
5308 if (!virt_binfo)
5309 return convert_to_integer (ptrdiff_type_node, BINFO_OFFSET (binfo));
5311 /* This is a reinterpret cast, we choose to do nothing. */
5312 if (force)
5313 warning ("pointer to member cast via virtual base `%T'",
5314 BINFO_TYPE (virt_binfo));
5315 else
5316 error ("pointer to member conversion via virtual base `%T'",
5317 BINFO_TYPE (virt_binfo));
5319 error:
5320 return convert_to_integer(ptrdiff_type_node, integer_zero_node);
5323 /* Return a constructor for the pointer-to-member-function TYPE using
5324 the other components as specified. */
5326 tree
5327 build_ptrmemfunc1 (tree type, tree delta, tree pfn)
5329 tree u = NULL_TREE;
5330 tree delta_field;
5331 tree pfn_field;
5333 /* Pull the FIELD_DECLs out of the type. */
5334 pfn_field = TYPE_FIELDS (type);
5335 delta_field = TREE_CHAIN (pfn_field);
5337 /* Make sure DELTA has the type we want. */
5338 delta = convert_and_check (delta_type_node, delta);
5340 /* Finish creating the initializer. */
5341 u = tree_cons (pfn_field, pfn,
5342 build_tree_list (delta_field, delta));
5343 u = build_constructor (type, u);
5344 TREE_CONSTANT (u) = TREE_CONSTANT (pfn) && TREE_CONSTANT (delta);
5345 TREE_STATIC (u) = (TREE_CONSTANT (u)
5346 && (initializer_constant_valid_p (pfn, TREE_TYPE (pfn))
5347 != NULL_TREE)
5348 && (initializer_constant_valid_p (delta, TREE_TYPE (delta))
5349 != NULL_TREE));
5350 return u;
5353 /* Build a constructor for a pointer to member function. It can be
5354 used to initialize global variables, local variable, or used
5355 as a value in expressions. TYPE is the POINTER to METHOD_TYPE we
5356 want to be.
5358 If FORCE is nonzero, then force this conversion, even if
5359 we would rather not do it. Usually set when using an explicit
5360 cast.
5362 Return error_mark_node, if something goes wrong. */
5364 tree
5365 build_ptrmemfunc (tree type, tree pfn, int force)
5367 tree fn;
5368 tree pfn_type;
5369 tree to_type;
5371 if (error_operand_p (pfn))
5372 return error_mark_node;
5374 pfn_type = TREE_TYPE (pfn);
5375 to_type = build_ptrmemfunc_type (type);
5377 /* Handle multiple conversions of pointer to member functions. */
5378 if (TYPE_PTRMEMFUNC_P (pfn_type))
5380 tree delta = NULL_TREE;
5381 tree npfn = NULL_TREE;
5382 tree n;
5384 if (!force
5385 && !can_convert_arg (to_type, TREE_TYPE (pfn), pfn))
5386 error ("invalid conversion to type `%T' from type `%T'",
5387 to_type, pfn_type);
5389 n = get_delta_difference (TYPE_PTRMEMFUNC_OBJECT_TYPE (pfn_type),
5390 TYPE_PTRMEMFUNC_OBJECT_TYPE (to_type),
5391 force);
5393 /* We don't have to do any conversion to convert a
5394 pointer-to-member to its own type. But, we don't want to
5395 just return a PTRMEM_CST if there's an explicit cast; that
5396 cast should make the expression an invalid template argument. */
5397 if (TREE_CODE (pfn) != PTRMEM_CST)
5399 if (same_type_p (to_type, pfn_type))
5400 return pfn;
5401 else if (integer_zerop (n))
5402 return build_reinterpret_cast (to_type, pfn);
5405 if (TREE_SIDE_EFFECTS (pfn))
5406 pfn = save_expr (pfn);
5408 /* Obtain the function pointer and the current DELTA. */
5409 if (TREE_CODE (pfn) == PTRMEM_CST)
5410 expand_ptrmemfunc_cst (pfn, &delta, &npfn);
5411 else
5413 npfn = build_ptrmemfunc_access_expr (pfn, pfn_identifier);
5414 delta = build_ptrmemfunc_access_expr (pfn, delta_identifier);
5417 /* Just adjust the DELTA field. */
5418 my_friendly_assert (TREE_TYPE (delta) == ptrdiff_type_node, 20030727);
5419 if (TARGET_PTRMEMFUNC_VBIT_LOCATION == ptrmemfunc_vbit_in_delta)
5420 n = cp_build_binary_op (LSHIFT_EXPR, n, integer_one_node);
5421 delta = cp_build_binary_op (PLUS_EXPR, delta, n);
5422 return build_ptrmemfunc1 (to_type, delta, npfn);
5425 /* Handle null pointer to member function conversions. */
5426 if (integer_zerop (pfn))
5428 pfn = build_c_cast (type, integer_zero_node);
5429 return build_ptrmemfunc1 (to_type,
5430 integer_zero_node,
5431 pfn);
5434 if (type_unknown_p (pfn))
5435 return instantiate_type (type, pfn, tf_error | tf_warning);
5437 fn = TREE_OPERAND (pfn, 0);
5438 my_friendly_assert (TREE_CODE (fn) == FUNCTION_DECL, 0);
5439 return make_ptrmem_cst (to_type, fn);
5442 /* Return the DELTA, IDX, PFN, and DELTA2 values for the PTRMEM_CST
5443 given by CST.
5445 ??? There is no consistency as to the types returned for the above
5446 values. Some code acts as if it were a sizetype and some as if it were
5447 integer_type_node. */
5449 void
5450 expand_ptrmemfunc_cst (tree cst, tree *delta, tree *pfn)
5452 tree type = TREE_TYPE (cst);
5453 tree fn = PTRMEM_CST_MEMBER (cst);
5454 tree ptr_class, fn_class;
5456 my_friendly_assert (TREE_CODE (fn) == FUNCTION_DECL, 0);
5458 /* The class that the function belongs to. */
5459 fn_class = DECL_CONTEXT (fn);
5461 /* The class that we're creating a pointer to member of. */
5462 ptr_class = TYPE_PTRMEMFUNC_OBJECT_TYPE (type);
5464 /* First, calculate the adjustment to the function's class. */
5465 *delta = get_delta_difference (fn_class, ptr_class, /*force=*/0);
5467 if (!DECL_VIRTUAL_P (fn))
5468 *pfn = convert (TYPE_PTRMEMFUNC_FN_TYPE (type), build_addr_func (fn));
5469 else
5471 /* If we're dealing with a virtual function, we have to adjust 'this'
5472 again, to point to the base which provides the vtable entry for
5473 fn; the call will do the opposite adjustment. */
5474 tree orig_class = DECL_CONTEXT (fn);
5475 tree binfo = binfo_or_else (orig_class, fn_class);
5476 *delta = fold (build (PLUS_EXPR, TREE_TYPE (*delta),
5477 *delta, BINFO_OFFSET (binfo)));
5479 /* We set PFN to the vtable offset at which the function can be
5480 found, plus one (unless ptrmemfunc_vbit_in_delta, in which
5481 case delta is shifted left, and then incremented). */
5482 *pfn = DECL_VINDEX (fn);
5483 *pfn = fold (build (MULT_EXPR, integer_type_node, *pfn,
5484 TYPE_SIZE_UNIT (vtable_entry_type)));
5486 switch (TARGET_PTRMEMFUNC_VBIT_LOCATION)
5488 case ptrmemfunc_vbit_in_pfn:
5489 *pfn = fold (build (PLUS_EXPR, integer_type_node, *pfn,
5490 integer_one_node));
5491 break;
5493 case ptrmemfunc_vbit_in_delta:
5494 *delta = fold (build (LSHIFT_EXPR, TREE_TYPE (*delta),
5495 *delta, integer_one_node));
5496 *delta = fold (build (PLUS_EXPR, TREE_TYPE (*delta),
5497 *delta, integer_one_node));
5498 break;
5500 default:
5501 abort ();
5504 *pfn = fold (build1 (NOP_EXPR, TYPE_PTRMEMFUNC_FN_TYPE (type),
5505 *pfn));
5509 /* Return an expression for PFN from the pointer-to-member function
5510 given by T. */
5512 tree
5513 pfn_from_ptrmemfunc (tree t)
5515 if (TREE_CODE (t) == PTRMEM_CST)
5517 tree delta;
5518 tree pfn;
5520 expand_ptrmemfunc_cst (t, &delta, &pfn);
5521 if (pfn)
5522 return pfn;
5525 return build_ptrmemfunc_access_expr (t, pfn_identifier);
5528 /* Expression EXPR is about to be implicitly converted to TYPE. Warn
5529 if this is a potentially dangerous thing to do. Returns a possibly
5530 marked EXPR. */
5532 tree
5533 dubious_conversion_warnings (tree type, tree expr,
5534 const char *errtype, tree fndecl, int parmnum)
5536 type = non_reference (type);
5538 /* Issue warnings about peculiar, but valid, uses of NULL. */
5539 if (ARITHMETIC_TYPE_P (type) && expr == null_node)
5541 if (fndecl)
5542 warning ("passing NULL used for non-pointer %s %P of `%D'",
5543 errtype, parmnum, fndecl);
5544 else
5545 warning ("%s to non-pointer type `%T' from NULL", errtype, type);
5548 /* Warn about assigning a floating-point type to an integer type. */
5549 if (TREE_CODE (TREE_TYPE (expr)) == REAL_TYPE
5550 && TREE_CODE (type) == INTEGER_TYPE)
5552 if (fndecl)
5553 warning ("passing `%T' for %s %P of `%D'",
5554 TREE_TYPE (expr), errtype, parmnum, fndecl);
5555 else
5556 warning ("%s to `%T' from `%T'", errtype, type, TREE_TYPE (expr));
5558 /* And warn about assigning a negative value to an unsigned
5559 variable. */
5560 else if (TREE_UNSIGNED (type) && TREE_CODE (type) != BOOLEAN_TYPE)
5562 if (TREE_CODE (expr) == INTEGER_CST
5563 && TREE_NEGATED_INT (expr))
5565 if (fndecl)
5566 warning ("passing negative value `%E' for %s %P of `%D'",
5567 expr, errtype, parmnum, fndecl);
5568 else
5569 warning ("%s of negative value `%E' to `%T'",
5570 errtype, expr, type);
5573 overflow_warning (expr);
5575 if (TREE_CONSTANT (expr))
5576 expr = fold (expr);
5578 return expr;
5581 /* Convert value RHS to type TYPE as preparation for an assignment to
5582 an lvalue of type TYPE. ERRTYPE is a string to use in error
5583 messages: "assignment", "return", etc. If FNDECL is non-NULL, we
5584 are doing the conversion in order to pass the PARMNUMth argument of
5585 FNDECL. */
5587 static tree
5588 convert_for_assignment (tree type, tree rhs,
5589 const char *errtype, tree fndecl, int parmnum)
5591 tree rhstype;
5592 enum tree_code coder;
5594 /* Strip NON_LVALUE_EXPRs since we aren't using as an lvalue. */
5595 if (TREE_CODE (rhs) == NON_LVALUE_EXPR)
5596 rhs = TREE_OPERAND (rhs, 0);
5598 rhstype = TREE_TYPE (rhs);
5599 coder = TREE_CODE (rhstype);
5601 if (TREE_CODE (type) == VECTOR_TYPE && coder == VECTOR_TYPE
5602 && ((*targetm.vector_opaque_p) (type)
5603 || (*targetm.vector_opaque_p) (rhstype)))
5604 return convert (type, rhs);
5606 if (rhs == error_mark_node || rhstype == error_mark_node)
5607 return error_mark_node;
5608 if (TREE_CODE (rhs) == TREE_LIST && TREE_VALUE (rhs) == error_mark_node)
5609 return error_mark_node;
5611 /* The RHS of an assignment cannot have void type. */
5612 if (coder == VOID_TYPE)
5614 error ("void value not ignored as it ought to be");
5615 return error_mark_node;
5618 /* Simplify the RHS if possible. */
5619 if (TREE_CODE (rhs) == CONST_DECL)
5620 rhs = DECL_INITIAL (rhs);
5622 /* We do not use decl_constant_value here because of this case:
5624 const char* const s = "s";
5626 The conversion rules for a string literal are more lax than for a
5627 variable; in particular, a string literal can be converted to a
5628 "char *" but the variable "s" cannot be converted in the same
5629 way. If the conversion is allowed, the optimization should be
5630 performed while creating the converted expression. */
5632 /* [expr.ass]
5634 The expression is implicitly converted (clause _conv_) to the
5635 cv-unqualified type of the left operand.
5637 We allow bad conversions here because by the time we get to this point
5638 we are committed to doing the conversion. If we end up doing a bad
5639 conversion, convert_like will complain. */
5640 if (!can_convert_arg_bad (type, rhstype, rhs))
5642 /* When -Wno-pmf-conversions is use, we just silently allow
5643 conversions from pointers-to-members to plain pointers. If
5644 the conversion doesn't work, cp_convert will complain. */
5645 if (!warn_pmf2ptr
5646 && TYPE_PTR_P (type)
5647 && TYPE_PTRMEMFUNC_P (rhstype))
5648 rhs = cp_convert (strip_top_quals (type), rhs);
5649 else
5651 /* If the right-hand side has unknown type, then it is an
5652 overloaded function. Call instantiate_type to get error
5653 messages. */
5654 if (rhstype == unknown_type_node)
5655 instantiate_type (type, rhs, tf_error | tf_warning);
5656 else if (fndecl)
5657 error ("cannot convert `%T' to `%T' for argument `%P' to `%D'",
5658 rhstype, type, parmnum, fndecl);
5659 else
5660 error ("cannot convert `%T' to `%T' in %s", rhstype, type,
5661 errtype);
5662 return error_mark_node;
5665 return perform_implicit_conversion (strip_top_quals (type), rhs);
5668 /* Convert RHS to be of type TYPE.
5669 If EXP is nonzero, it is the target of the initialization.
5670 ERRTYPE is a string to use in error messages.
5672 Two major differences between the behavior of
5673 `convert_for_assignment' and `convert_for_initialization'
5674 are that references are bashed in the former, while
5675 copied in the latter, and aggregates are assigned in
5676 the former (operator=) while initialized in the
5677 latter (X(X&)).
5679 If using constructor make sure no conversion operator exists, if one does
5680 exist, an ambiguity exists.
5682 If flags doesn't include LOOKUP_COMPLAIN, don't complain about anything. */
5684 tree
5685 convert_for_initialization (tree exp, tree type, tree rhs, int flags,
5686 const char *errtype, tree fndecl, int parmnum)
5688 enum tree_code codel = TREE_CODE (type);
5689 tree rhstype;
5690 enum tree_code coder;
5692 /* build_c_cast puts on a NOP_EXPR to make the result not an lvalue.
5693 Strip such NOP_EXPRs, since RHS is used in non-lvalue context. */
5694 if (TREE_CODE (rhs) == NOP_EXPR
5695 && TREE_TYPE (rhs) == TREE_TYPE (TREE_OPERAND (rhs, 0))
5696 && codel != REFERENCE_TYPE)
5697 rhs = TREE_OPERAND (rhs, 0);
5699 if (rhs == error_mark_node
5700 || (TREE_CODE (rhs) == TREE_LIST && TREE_VALUE (rhs) == error_mark_node))
5701 return error_mark_node;
5703 if (TREE_CODE (TREE_TYPE (rhs)) == REFERENCE_TYPE)
5704 rhs = convert_from_reference (rhs);
5706 if ((TREE_CODE (TREE_TYPE (rhs)) == ARRAY_TYPE
5707 && TREE_CODE (type) != ARRAY_TYPE
5708 && (TREE_CODE (type) != REFERENCE_TYPE
5709 || TREE_CODE (TREE_TYPE (type)) != ARRAY_TYPE))
5710 || (TREE_CODE (TREE_TYPE (rhs)) == FUNCTION_TYPE
5711 && (TREE_CODE (type) != REFERENCE_TYPE
5712 || TREE_CODE (TREE_TYPE (type)) != FUNCTION_TYPE))
5713 || TREE_CODE (TREE_TYPE (rhs)) == METHOD_TYPE)
5714 rhs = decay_conversion (rhs);
5716 rhstype = TREE_TYPE (rhs);
5717 coder = TREE_CODE (rhstype);
5719 if (coder == ERROR_MARK)
5720 return error_mark_node;
5722 /* We accept references to incomplete types, so we can
5723 return here before checking if RHS is of complete type. */
5725 if (codel == REFERENCE_TYPE)
5727 /* This should eventually happen in convert_arguments. */
5728 int savew = 0, savee = 0;
5730 if (fndecl)
5731 savew = warningcount, savee = errorcount;
5732 rhs = initialize_reference (type, rhs, /*decl=*/NULL_TREE,
5733 /*cleanup=*/NULL);
5734 if (fndecl)
5736 if (warningcount > savew)
5737 cp_warning_at ("in passing argument %P of `%+D'", parmnum, fndecl);
5738 else if (errorcount > savee)
5739 cp_error_at ("in passing argument %P of `%+D'", parmnum, fndecl);
5741 return rhs;
5744 if (exp != 0)
5745 exp = require_complete_type (exp);
5746 if (exp == error_mark_node)
5747 return error_mark_node;
5749 rhstype = non_reference (rhstype);
5751 type = complete_type (type);
5753 if (IS_AGGR_TYPE (type))
5754 return ocp_convert (type, rhs, CONV_IMPLICIT|CONV_FORCE_TEMP, flags);
5756 return convert_for_assignment (type, rhs, errtype, fndecl, parmnum);
5759 /* Expand an ASM statement with operands, handling output operands
5760 that are not variables or INDIRECT_REFS by transforming such
5761 cases into cases that expand_asm_operands can handle.
5763 Arguments are same as for expand_asm_operands.
5765 We don't do default conversions on all inputs, because it can screw
5766 up operands that are expected to be in memory. */
5768 void
5769 c_expand_asm_operands (tree string, tree outputs, tree inputs, tree clobbers,
5770 int vol, location_t locus)
5772 int noutputs = list_length (outputs);
5773 int i;
5774 /* o[I] is the place that output number I should be written. */
5775 tree *o = alloca (noutputs * sizeof (tree));
5776 tree tail;
5778 /* Record the contents of OUTPUTS before it is modified. */
5779 for (i = 0, tail = outputs; tail; tail = TREE_CHAIN (tail), i++)
5780 o[i] = TREE_VALUE (tail);
5782 /* Generate the ASM_OPERANDS insn;
5783 store into the TREE_VALUEs of OUTPUTS some trees for
5784 where the values were actually stored. */
5785 expand_asm_operands (string, outputs, inputs, clobbers, vol, locus);
5787 /* Copy all the intermediate outputs into the specified outputs. */
5788 for (i = 0, tail = outputs; tail; tail = TREE_CHAIN (tail), i++)
5790 if (o[i] != TREE_VALUE (tail))
5792 expand_expr (build_modify_expr (o[i], NOP_EXPR, TREE_VALUE (tail)),
5793 const0_rtx, VOIDmode, EXPAND_NORMAL);
5794 free_temp_slots ();
5796 /* Restore the original value so that it's correct the next
5797 time we expand this function. */
5798 TREE_VALUE (tail) = o[i];
5800 /* Detect modification of read-only values.
5801 (Otherwise done by build_modify_expr.) */
5802 else
5804 tree type = TREE_TYPE (o[i]);
5805 if (type != error_mark_node
5806 && (CP_TYPE_CONST_P (type)
5807 || (CLASS_TYPE_P (type) && C_TYPE_FIELDS_READONLY (type))))
5808 readonly_error (o[i], "modification by `asm'", 1);
5812 /* Those MODIFY_EXPRs could do autoincrements. */
5813 emit_queue ();
5816 /* If RETVAL is the address of, or a reference to, a local variable or
5817 temporary give an appropriate warning. */
5819 static void
5820 maybe_warn_about_returning_address_of_local (tree retval)
5822 tree valtype = TREE_TYPE (DECL_RESULT (current_function_decl));
5823 tree whats_returned = retval;
5825 for (;;)
5827 if (TREE_CODE (whats_returned) == COMPOUND_EXPR)
5828 whats_returned = TREE_OPERAND (whats_returned, 1);
5829 else if (TREE_CODE (whats_returned) == CONVERT_EXPR
5830 || TREE_CODE (whats_returned) == NON_LVALUE_EXPR
5831 || TREE_CODE (whats_returned) == NOP_EXPR)
5832 whats_returned = TREE_OPERAND (whats_returned, 0);
5833 else
5834 break;
5837 if (TREE_CODE (whats_returned) != ADDR_EXPR)
5838 return;
5839 whats_returned = TREE_OPERAND (whats_returned, 0);
5841 if (TREE_CODE (valtype) == REFERENCE_TYPE)
5843 if (TREE_CODE (whats_returned) == AGGR_INIT_EXPR
5844 || TREE_CODE (whats_returned) == TARGET_EXPR)
5846 warning ("returning reference to temporary");
5847 return;
5849 if (TREE_CODE (whats_returned) == VAR_DECL
5850 && DECL_NAME (whats_returned)
5851 && TEMP_NAME_P (DECL_NAME (whats_returned)))
5853 warning ("reference to non-lvalue returned");
5854 return;
5858 if (DECL_P (whats_returned)
5859 && DECL_NAME (whats_returned)
5860 && DECL_FUNCTION_SCOPE_P (whats_returned)
5861 && !(TREE_STATIC (whats_returned)
5862 || TREE_PUBLIC (whats_returned)))
5864 if (TREE_CODE (valtype) == REFERENCE_TYPE)
5865 cp_warning_at ("reference to local variable `%D' returned",
5866 whats_returned);
5867 else
5868 cp_warning_at ("address of local variable `%D' returned",
5869 whats_returned);
5870 return;
5874 /* Check that returning RETVAL from the current function is valid.
5875 Return an expression explicitly showing all conversions required to
5876 change RETVAL into the function return type, and to assign it to
5877 the DECL_RESULT for the function. */
5879 tree
5880 check_return_expr (tree retval)
5882 tree result;
5883 /* The type actually returned by the function, after any
5884 promotions. */
5885 tree valtype;
5886 int fn_returns_value_p;
5888 /* A `volatile' function is one that isn't supposed to return, ever.
5889 (This is a G++ extension, used to get better code for functions
5890 that call the `volatile' function.) */
5891 if (TREE_THIS_VOLATILE (current_function_decl))
5892 warning ("function declared `noreturn' has a `return' statement");
5894 /* Check for various simple errors. */
5895 if (DECL_DESTRUCTOR_P (current_function_decl))
5897 if (retval)
5898 error ("returning a value from a destructor");
5899 return NULL_TREE;
5901 else if (DECL_CONSTRUCTOR_P (current_function_decl))
5903 if (in_function_try_handler)
5904 /* If a return statement appears in a handler of the
5905 function-try-block of a constructor, the program is ill-formed. */
5906 error ("cannot return from a handler of a function-try-block of a constructor");
5907 else if (retval)
5908 /* You can't return a value from a constructor. */
5909 error ("returning a value from a constructor");
5910 return NULL_TREE;
5913 if (processing_template_decl)
5915 current_function_returns_value = 1;
5916 return retval;
5919 /* When no explicit return-value is given in a function with a named
5920 return value, the named return value is used. */
5921 result = DECL_RESULT (current_function_decl);
5922 valtype = TREE_TYPE (result);
5923 my_friendly_assert (valtype != NULL_TREE, 19990924);
5924 fn_returns_value_p = !VOID_TYPE_P (valtype);
5925 if (!retval && DECL_NAME (result) && fn_returns_value_p)
5926 retval = result;
5928 /* Check for a return statement with no return value in a function
5929 that's supposed to return a value. */
5930 if (!retval && fn_returns_value_p)
5932 pedwarn ("return-statement with no value, in function returning '%T'",
5933 valtype);
5934 /* Clear this, so finish_function won't say that we reach the
5935 end of a non-void function (which we don't, we gave a
5936 return!). */
5937 current_function_returns_null = 0;
5939 /* Check for a return statement with a value in a function that
5940 isn't supposed to return a value. */
5941 else if (retval && !fn_returns_value_p)
5943 if (VOID_TYPE_P (TREE_TYPE (retval)))
5944 /* You can return a `void' value from a function of `void'
5945 type. In that case, we have to evaluate the expression for
5946 its side-effects. */
5947 finish_expr_stmt (retval);
5948 else
5949 pedwarn ("return-statement with a value, in function "
5950 "returning 'void'");
5952 current_function_returns_null = 1;
5954 /* There's really no value to return, after all. */
5955 return NULL_TREE;
5957 else if (!retval)
5958 /* Remember that this function can sometimes return without a
5959 value. */
5960 current_function_returns_null = 1;
5961 else
5962 /* Remember that this function did return a value. */
5963 current_function_returns_value = 1;
5965 /* Only operator new(...) throw(), can return NULL [expr.new/13]. */
5966 if ((DECL_OVERLOADED_OPERATOR_P (current_function_decl) == NEW_EXPR
5967 || DECL_OVERLOADED_OPERATOR_P (current_function_decl) == VEC_NEW_EXPR)
5968 && !TYPE_NOTHROW_P (TREE_TYPE (current_function_decl))
5969 && ! flag_check_new
5970 && null_ptr_cst_p (retval))
5971 warning ("`operator new' must not return NULL unless it is declared `throw()' (or -fcheck-new is in effect)");
5973 /* Effective C++ rule 15. See also start_function. */
5974 if (warn_ecpp
5975 && DECL_NAME (current_function_decl) == ansi_assopname(NOP_EXPR)
5976 && retval != current_class_ref)
5977 warning ("`operator=' should return a reference to `*this'");
5979 /* The fabled Named Return Value optimization, as per [class.copy]/15:
5981 [...] For a function with a class return type, if the expression
5982 in the return statement is the name of a local object, and the cv-
5983 unqualified type of the local object is the same as the function
5984 return type, an implementation is permitted to omit creating the tem-
5985 porary object to hold the function return value [...]
5987 So, if this is a value-returning function that always returns the same
5988 local variable, remember it.
5990 It might be nice to be more flexible, and choose the first suitable
5991 variable even if the function sometimes returns something else, but
5992 then we run the risk of clobbering the variable we chose if the other
5993 returned expression uses the chosen variable somehow. And people expect
5994 this restriction, anyway. (jason 2000-11-19)
5996 See finish_function, cxx_expand_function_start, and
5997 cp_copy_res_decl_for_inlining for other pieces of this
5998 optimization. */
6000 if (fn_returns_value_p && flag_elide_constructors)
6002 if (retval != NULL_TREE
6003 && (current_function_return_value == NULL_TREE
6004 || current_function_return_value == retval)
6005 && TREE_CODE (retval) == VAR_DECL
6006 && DECL_CONTEXT (retval) == current_function_decl
6007 && ! TREE_STATIC (retval)
6008 && (DECL_ALIGN (retval)
6009 >= DECL_ALIGN (DECL_RESULT (current_function_decl)))
6010 && same_type_p ((TYPE_MAIN_VARIANT
6011 (TREE_TYPE (retval))),
6012 (TYPE_MAIN_VARIANT
6013 (TREE_TYPE (TREE_TYPE (current_function_decl))))))
6014 current_function_return_value = retval;
6015 else
6016 current_function_return_value = error_mark_node;
6019 /* We don't need to do any conversions when there's nothing being
6020 returned. */
6021 if (!retval || retval == error_mark_node)
6022 return retval;
6024 /* Do any required conversions. */
6025 if (retval == result || DECL_CONSTRUCTOR_P (current_function_decl))
6026 /* No conversions are required. */
6028 else
6030 /* The type the function is declared to return. */
6031 tree functype = TREE_TYPE (TREE_TYPE (current_function_decl));
6033 /* First convert the value to the function's return type, then
6034 to the type of return value's location to handle the
6035 case that functype is smaller than the valtype. */
6036 retval = convert_for_initialization
6037 (NULL_TREE, functype, retval, LOOKUP_NORMAL|LOOKUP_ONLYCONVERTING,
6038 "return", NULL_TREE, 0);
6039 retval = convert (valtype, retval);
6041 /* If the conversion failed, treat this just like `return;'. */
6042 if (retval == error_mark_node)
6043 return retval;
6044 /* We can't initialize a register from a AGGR_INIT_EXPR. */
6045 else if (! current_function_returns_struct
6046 && TREE_CODE (retval) == TARGET_EXPR
6047 && TREE_CODE (TREE_OPERAND (retval, 1)) == AGGR_INIT_EXPR)
6048 retval = build (COMPOUND_EXPR, TREE_TYPE (retval), retval,
6049 TREE_OPERAND (retval, 0));
6050 else
6051 maybe_warn_about_returning_address_of_local (retval);
6054 /* Actually copy the value returned into the appropriate location. */
6055 if (retval && retval != result)
6056 retval = build (INIT_EXPR, TREE_TYPE (result), result, retval);
6058 return retval;
6062 /* Returns nonzero if the pointer-type FROM can be converted to the
6063 pointer-type TO via a qualification conversion. If CONSTP is -1,
6064 then we return nonzero if the pointers are similar, and the
6065 cv-qualification signature of FROM is a proper subset of that of TO.
6067 If CONSTP is positive, then all outer pointers have been
6068 const-qualified. */
6070 static int
6071 comp_ptr_ttypes_real (tree to, tree from, int constp)
6073 bool to_more_cv_qualified = false;
6075 for (; ; to = TREE_TYPE (to), from = TREE_TYPE (from))
6077 if (TREE_CODE (to) != TREE_CODE (from))
6078 return 0;
6080 if (TREE_CODE (from) == OFFSET_TYPE
6081 && !same_type_p (TYPE_OFFSET_BASETYPE (from),
6082 TYPE_OFFSET_BASETYPE (to)))
6083 return 0;
6085 /* Const and volatile mean something different for function types,
6086 so the usual checks are not appropriate. */
6087 if (TREE_CODE (to) != FUNCTION_TYPE && TREE_CODE (to) != METHOD_TYPE)
6089 if (!at_least_as_qualified_p (to, from))
6090 return 0;
6092 if (!at_least_as_qualified_p (from, to))
6094 if (constp == 0)
6095 return 0;
6096 to_more_cv_qualified = true;
6099 if (constp > 0)
6100 constp &= TYPE_READONLY (to);
6103 if (TREE_CODE (to) != POINTER_TYPE && !TYPE_PTRMEM_P (to))
6104 return ((constp >= 0 || to_more_cv_qualified)
6105 && same_type_ignoring_top_level_qualifiers_p (to, from));
6109 /* When comparing, say, char ** to char const **, this function takes
6110 the 'char *' and 'char const *'. Do not pass non-pointer/reference
6111 types to this function. */
6114 comp_ptr_ttypes (tree to, tree from)
6116 return comp_ptr_ttypes_real (to, from, 1);
6119 /* Returns 1 if to and from are (possibly multi-level) pointers to the same
6120 type or inheritance-related types, regardless of cv-quals. */
6123 ptr_reasonably_similar (tree to, tree from)
6125 for (; ; to = TREE_TYPE (to), from = TREE_TYPE (from))
6127 /* Any target type is similar enough to void. */
6128 if (TREE_CODE (to) == VOID_TYPE
6129 || TREE_CODE (from) == VOID_TYPE)
6130 return 1;
6132 if (TREE_CODE (to) != TREE_CODE (from))
6133 return 0;
6135 if (TREE_CODE (from) == OFFSET_TYPE
6136 && comptypes (TYPE_OFFSET_BASETYPE (to),
6137 TYPE_OFFSET_BASETYPE (from),
6138 COMPARE_BASE | COMPARE_DERIVED))
6139 continue;
6141 if (TREE_CODE (to) == INTEGER_TYPE
6142 && TYPE_PRECISION (to) == TYPE_PRECISION (from))
6143 return 1;
6145 if (TREE_CODE (to) == FUNCTION_TYPE)
6146 return 1;
6148 if (TREE_CODE (to) != POINTER_TYPE)
6149 return comptypes
6150 (TYPE_MAIN_VARIANT (to), TYPE_MAIN_VARIANT (from),
6151 COMPARE_BASE | COMPARE_DERIVED);
6155 /* Like comp_ptr_ttypes, for const_cast. */
6157 static int
6158 comp_ptr_ttypes_const (tree to, tree from)
6160 for (; ; to = TREE_TYPE (to), from = TREE_TYPE (from))
6162 if (TREE_CODE (to) != TREE_CODE (from))
6163 return 0;
6165 if (TREE_CODE (from) == OFFSET_TYPE
6166 && same_type_p (TYPE_OFFSET_BASETYPE (from),
6167 TYPE_OFFSET_BASETYPE (to)))
6168 continue;
6170 if (TREE_CODE (to) != POINTER_TYPE)
6171 return same_type_ignoring_top_level_qualifiers_p (to, from);
6175 /* Returns the type qualifiers for this type, including the qualifiers on the
6176 elements for an array type. */
6179 cp_type_quals (tree type)
6181 type = strip_array_types (type);
6182 if (type == error_mark_node)
6183 return TYPE_UNQUALIFIED;
6184 return TYPE_QUALS (type);
6187 /* Returns nonzero if the TYPE contains a mutable member. */
6189 bool
6190 cp_has_mutable_p (tree type)
6192 type = strip_array_types (type);
6194 return CLASS_TYPE_P (type) && CLASSTYPE_HAS_MUTABLE (type);
6197 /* Subroutine of casts_away_constness. Make T1 and T2 point at
6198 exemplar types such that casting T1 to T2 is casting away castness
6199 if and only if there is no implicit conversion from T1 to T2. */
6201 static void
6202 casts_away_constness_r (tree *t1, tree *t2)
6204 int quals1;
6205 int quals2;
6207 /* [expr.const.cast]
6209 For multi-level pointer to members and multi-level mixed pointers
6210 and pointers to members (conv.qual), the "member" aspect of a
6211 pointer to member level is ignored when determining if a const
6212 cv-qualifier has been cast away. */
6213 if (TYPE_PTRMEM_P (*t1))
6214 *t1 = build_pointer_type (TYPE_PTRMEM_POINTED_TO_TYPE (*t1));
6215 if (TYPE_PTRMEM_P (*t2))
6216 *t2 = build_pointer_type (TYPE_PTRMEM_POINTED_TO_TYPE (*t2));
6218 /* [expr.const.cast]
6220 For two pointer types:
6222 X1 is T1cv1,1 * ... cv1,N * where T1 is not a pointer type
6223 X2 is T2cv2,1 * ... cv2,M * where T2 is not a pointer type
6224 K is min(N,M)
6226 casting from X1 to X2 casts away constness if, for a non-pointer
6227 type T there does not exist an implicit conversion (clause
6228 _conv_) from:
6230 Tcv1,(N-K+1) * cv1,(N-K+2) * ... cv1,N *
6234 Tcv2,(M-K+1) * cv2,(M-K+2) * ... cv2,M *. */
6236 if (TREE_CODE (*t1) != POINTER_TYPE
6237 || TREE_CODE (*t2) != POINTER_TYPE)
6239 *t1 = cp_build_qualified_type (void_type_node,
6240 cp_type_quals (*t1));
6241 *t2 = cp_build_qualified_type (void_type_node,
6242 cp_type_quals (*t2));
6243 return;
6246 quals1 = cp_type_quals (*t1);
6247 quals2 = cp_type_quals (*t2);
6248 *t1 = TREE_TYPE (*t1);
6249 *t2 = TREE_TYPE (*t2);
6250 casts_away_constness_r (t1, t2);
6251 *t1 = build_pointer_type (*t1);
6252 *t2 = build_pointer_type (*t2);
6253 *t1 = cp_build_qualified_type (*t1, quals1);
6254 *t2 = cp_build_qualified_type (*t2, quals2);
6257 /* Returns nonzero if casting from TYPE1 to TYPE2 casts away
6258 constness. */
6260 static bool
6261 casts_away_constness (tree t1, tree t2)
6263 if (TREE_CODE (t2) == REFERENCE_TYPE)
6265 /* [expr.const.cast]
6267 Casting from an lvalue of type T1 to an lvalue of type T2
6268 using a reference cast casts away constness if a cast from an
6269 rvalue of type "pointer to T1" to the type "pointer to T2"
6270 casts away constness. */
6271 t1 = (TREE_CODE (t1) == REFERENCE_TYPE ? TREE_TYPE (t1) : t1);
6272 return casts_away_constness (build_pointer_type (t1),
6273 build_pointer_type (TREE_TYPE (t2)));
6276 if (TYPE_PTRMEM_P (t1) && TYPE_PTRMEM_P (t2))
6277 /* [expr.const.cast]
6279 Casting from an rvalue of type "pointer to data member of X
6280 of type T1" to the type "pointer to data member of Y of type
6281 T2" casts away constness if a cast from an rvalue of type
6282 "pointer to T1" to the type "pointer to T2" casts away
6283 constness. */
6284 return casts_away_constness
6285 (build_pointer_type (TYPE_PTRMEM_POINTED_TO_TYPE (t1)),
6286 build_pointer_type (TYPE_PTRMEM_POINTED_TO_TYPE (t2)));
6288 /* Casting away constness is only something that makes sense for
6289 pointer or reference types. */
6290 if (TREE_CODE (t1) != POINTER_TYPE
6291 || TREE_CODE (t2) != POINTER_TYPE)
6292 return false;
6294 /* Top-level qualifiers don't matter. */
6295 t1 = TYPE_MAIN_VARIANT (t1);
6296 t2 = TYPE_MAIN_VARIANT (t2);
6297 casts_away_constness_r (&t1, &t2);
6298 if (!can_convert (t2, t1))
6299 return true;
6301 return false;
6304 /* If T is a REFERENCE_TYPE return the type to which T refers.
6305 Otherwise, return T itself. */
6307 tree
6308 non_reference (tree t)
6310 if (TREE_CODE (t) == REFERENCE_TYPE)
6311 t = TREE_TYPE (t);
6312 return t;