Merge -r 127928:132243 from trunk
[official-gcc.git] / gcc / cp / typeck.c
blob9764ed369a2d68b4260d64b43c89ceb123cbd02c
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, 2005, 2006, 2007
4 Free Software Foundation, Inc.
5 Hacked by Michael Tiemann (tiemann@cygnus.com)
7 This file is part of GCC.
9 GCC is free software; you can redistribute it and/or modify
10 it under the terms of the GNU General Public License as published by
11 the Free Software Foundation; either version 3, or (at your option)
12 any later version.
14 GCC is distributed in the hope that it will be useful,
15 but WITHOUT ANY WARRANTY; without even the implied warranty of
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 GNU General Public License for more details.
19 You should have received a copy of the GNU General Public License
20 along with GCC; see the file COPYING3. If not see
21 <http://www.gnu.org/licenses/>. */
24 /* This file is part of the C++ front end.
25 It contains routines to build C++ expressions given their operands,
26 including computing the types of the result, C and C++ specific error
27 checks, and some optimization. */
29 #include "config.h"
30 #include "system.h"
31 #include "coretypes.h"
32 #include "tm.h"
33 #include "tree.h"
34 #include "rtl.h"
35 #include "expr.h"
36 #include "cp-tree.h"
37 #include "tm_p.h"
38 #include "flags.h"
39 #include "output.h"
40 #include "toplev.h"
41 #include "diagnostic.h"
42 #include "intl.h"
43 #include "target.h"
44 #include "convert.h"
45 #include "c-common.h"
46 #include "params.h"
48 static tree pfn_from_ptrmemfunc (tree);
49 static tree delta_from_ptrmemfunc (tree);
50 static tree convert_for_assignment (tree, tree, const char *, tree, int);
51 static tree cp_pointer_int_sum (enum tree_code, tree, tree);
52 static tree rationalize_conditional_expr (enum tree_code, tree);
53 static int comp_ptr_ttypes_real (tree, tree, int);
54 static bool comp_except_types (tree, tree, bool);
55 static bool comp_array_types (const_tree, const_tree, bool);
56 static tree pointer_diff (tree, tree, tree);
57 static tree get_delta_difference (tree, tree, bool, bool);
58 static void casts_away_constness_r (tree *, tree *);
59 static bool casts_away_constness (tree, tree);
60 static void maybe_warn_about_returning_address_of_local (tree);
61 static tree lookup_destructor (tree, tree, tree);
62 static int convert_arguments (int, tree *, tree, tree, tree, int);
64 /* Do `exp = require_complete_type (exp);' to make sure exp
65 does not have an incomplete type. (That includes void types.)
66 Returns the error_mark_node if the VALUE does not have
67 complete type when this function returns. */
69 tree
70 require_complete_type (tree value)
72 tree type;
74 if (processing_template_decl || value == error_mark_node)
75 return value;
77 if (TREE_CODE (value) == OVERLOAD)
78 type = unknown_type_node;
79 else
80 type = TREE_TYPE (value);
82 if (type == error_mark_node)
83 return error_mark_node;
85 /* First, detect a valid value with a complete type. */
86 if (COMPLETE_TYPE_P (type))
87 return value;
89 if (complete_type_or_else (type, value))
90 return value;
91 else
92 return error_mark_node;
95 /* Try to complete TYPE, if it is incomplete. For example, if TYPE is
96 a template instantiation, do the instantiation. Returns TYPE,
97 whether or not it could be completed, unless something goes
98 horribly wrong, in which case the error_mark_node is returned. */
100 tree
101 complete_type (tree type)
103 if (type == NULL_TREE)
104 /* Rather than crash, we return something sure to cause an error
105 at some point. */
106 return error_mark_node;
108 if (type == error_mark_node || COMPLETE_TYPE_P (type))
110 else if (TREE_CODE (type) == ARRAY_TYPE && TYPE_DOMAIN (type))
112 tree t = complete_type (TREE_TYPE (type));
113 unsigned int needs_constructing, has_nontrivial_dtor;
114 if (COMPLETE_TYPE_P (t) && !dependent_type_p (type))
115 layout_type (type);
116 needs_constructing
117 = TYPE_NEEDS_CONSTRUCTING (TYPE_MAIN_VARIANT (t));
118 has_nontrivial_dtor
119 = TYPE_HAS_NONTRIVIAL_DESTRUCTOR (TYPE_MAIN_VARIANT (t));
120 for (t = TYPE_MAIN_VARIANT (type); t; t = TYPE_NEXT_VARIANT (t))
122 TYPE_NEEDS_CONSTRUCTING (t) = needs_constructing;
123 TYPE_HAS_NONTRIVIAL_DESTRUCTOR (t) = has_nontrivial_dtor;
126 else if (CLASS_TYPE_P (type) && CLASSTYPE_TEMPLATE_INSTANTIATION (type))
127 instantiate_class_template (TYPE_MAIN_VARIANT (type));
129 return type;
132 /* Like complete_type, but issue an error if the TYPE cannot be completed.
133 VALUE is used for informative diagnostics.
134 Returns NULL_TREE if the type cannot be made complete. */
136 tree
137 complete_type_or_else (tree type, tree value)
139 type = complete_type (type);
140 if (type == error_mark_node)
141 /* We already issued an error. */
142 return NULL_TREE;
143 else if (!COMPLETE_TYPE_P (type))
145 cxx_incomplete_type_diagnostic (value, type, 0);
146 return NULL_TREE;
148 else
149 return type;
152 /* Return truthvalue of whether type of EXP is instantiated. */
155 type_unknown_p (const_tree exp)
157 return (TREE_CODE (exp) == TREE_LIST
158 || TREE_TYPE (exp) == unknown_type_node);
162 /* Return the common type of two parameter lists.
163 We assume that cp_comptypes has already been done and returned 1;
164 if that isn't so, this may crash.
166 As an optimization, free the space we allocate if the parameter
167 lists are already common. */
169 static tree
170 commonparms (tree p1, tree p2)
172 tree oldargs = p1, newargs, n;
173 int i, len;
174 int any_change = 0;
176 len = list_length (p1);
177 newargs = tree_last (p1);
179 if (newargs == void_list_node)
180 i = 1;
181 else
183 i = 0;
184 newargs = 0;
187 for (; i < len; i++)
188 newargs = tree_cons (NULL_TREE, NULL_TREE, newargs);
190 n = newargs;
192 for (i = 0; p1;
193 p1 = TREE_CHAIN (p1), p2 = TREE_CHAIN (p2), n = TREE_CHAIN (n), i++)
195 if (TREE_PURPOSE (p1) && !TREE_PURPOSE (p2))
197 TREE_PURPOSE (n) = TREE_PURPOSE (p1);
198 any_change = 1;
200 else if (! TREE_PURPOSE (p1))
202 if (TREE_PURPOSE (p2))
204 TREE_PURPOSE (n) = TREE_PURPOSE (p2);
205 any_change = 1;
208 else
210 if (1 != simple_cst_equal (TREE_PURPOSE (p1), TREE_PURPOSE (p2)))
211 any_change = 1;
212 TREE_PURPOSE (n) = TREE_PURPOSE (p2);
214 if (TREE_VALUE (p1) != TREE_VALUE (p2))
216 any_change = 1;
217 TREE_VALUE (n) = merge_types (TREE_VALUE (p1), TREE_VALUE (p2));
219 else
220 TREE_VALUE (n) = TREE_VALUE (p1);
222 if (! any_change)
223 return oldargs;
225 return newargs;
228 /* Given a type, perhaps copied for a typedef,
229 find the "original" version of it. */
230 static tree
231 original_type (tree t)
233 int quals = cp_type_quals (t);
234 while (t != error_mark_node
235 && TYPE_NAME (t) != NULL_TREE)
237 tree x = TYPE_NAME (t);
238 if (TREE_CODE (x) != TYPE_DECL)
239 break;
240 x = DECL_ORIGINAL_TYPE (x);
241 if (x == NULL_TREE)
242 break;
243 t = x;
245 return cp_build_qualified_type (t, quals);
248 /* T1 and T2 are arithmetic or enumeration types. Return the type
249 that will result from the "usual arithmetic conversions" on T1 and
250 T2 as described in [expr]. */
252 tree
253 type_after_usual_arithmetic_conversions (tree t1, tree t2)
255 enum tree_code code1 = TREE_CODE (t1);
256 enum tree_code code2 = TREE_CODE (t2);
257 tree attributes;
259 /* FIXME: Attributes. */
260 gcc_assert (ARITHMETIC_TYPE_P (t1)
261 || TREE_CODE (t1) == VECTOR_TYPE
262 || TREE_CODE (t1) == ENUMERAL_TYPE);
263 gcc_assert (ARITHMETIC_TYPE_P (t2)
264 || TREE_CODE (t2) == VECTOR_TYPE
265 || TREE_CODE (t2) == ENUMERAL_TYPE);
267 /* In what follows, we slightly generalize the rules given in [expr] so
268 as to deal with `long long' and `complex'. First, merge the
269 attributes. */
270 attributes = (*targetm.merge_type_attributes) (t1, t2);
272 /* If one type is complex, form the common type of the non-complex
273 components, then make that complex. Use T1 or T2 if it is the
274 required type. */
275 if (code1 == COMPLEX_TYPE || code2 == COMPLEX_TYPE)
277 tree subtype1 = code1 == COMPLEX_TYPE ? TREE_TYPE (t1) : t1;
278 tree subtype2 = code2 == COMPLEX_TYPE ? TREE_TYPE (t2) : t2;
279 tree subtype
280 = type_after_usual_arithmetic_conversions (subtype1, subtype2);
282 if (code1 == COMPLEX_TYPE && TREE_TYPE (t1) == subtype)
283 return build_type_attribute_variant (t1, attributes);
284 else if (code2 == COMPLEX_TYPE && TREE_TYPE (t2) == subtype)
285 return build_type_attribute_variant (t2, attributes);
286 else
287 return build_type_attribute_variant (build_complex_type (subtype),
288 attributes);
291 if (code1 == VECTOR_TYPE)
293 /* When we get here we should have two vectors of the same size.
294 Just prefer the unsigned one if present. */
295 if (TYPE_UNSIGNED (t1))
296 return build_type_attribute_variant (t1, attributes);
297 else
298 return build_type_attribute_variant (t2, attributes);
301 /* If only one is real, use it as the result. */
302 if (code1 == REAL_TYPE && code2 != REAL_TYPE)
303 return build_type_attribute_variant (t1, attributes);
304 if (code2 == REAL_TYPE && code1 != REAL_TYPE)
305 return build_type_attribute_variant (t2, attributes);
307 /* Perform the integral promotions. */
308 if (code1 != REAL_TYPE)
310 t1 = type_promotes_to (t1);
311 t2 = type_promotes_to (t2);
314 /* Both real or both integers; use the one with greater precision. */
315 if (TYPE_PRECISION (t1) > TYPE_PRECISION (t2))
316 return build_type_attribute_variant (t1, attributes);
317 else if (TYPE_PRECISION (t2) > TYPE_PRECISION (t1))
318 return build_type_attribute_variant (t2, attributes);
320 /* The types are the same; no need to do anything fancy. */
321 if (TYPE_MAIN_VARIANT (t1) == TYPE_MAIN_VARIANT (t2))
322 return build_type_attribute_variant (t1, attributes);
324 if (code1 != REAL_TYPE)
326 /* If one is unsigned long long, then convert the other to unsigned
327 long long. */
328 if (same_type_p (TYPE_MAIN_VARIANT (t1), long_long_unsigned_type_node)
329 || same_type_p (TYPE_MAIN_VARIANT (t2), long_long_unsigned_type_node))
330 return build_type_attribute_variant (long_long_unsigned_type_node,
331 attributes);
332 /* If one is a long long, and the other is an unsigned long, and
333 long long can represent all the values of an unsigned long, then
334 convert to a long long. Otherwise, convert to an unsigned long
335 long. Otherwise, if either operand is long long, convert the
336 other to long long.
338 Since we're here, we know the TYPE_PRECISION is the same;
339 therefore converting to long long cannot represent all the values
340 of an unsigned long, so we choose unsigned long long in that
341 case. */
342 if (same_type_p (TYPE_MAIN_VARIANT (t1), long_long_integer_type_node)
343 || same_type_p (TYPE_MAIN_VARIANT (t2), long_long_integer_type_node))
345 tree t = ((TYPE_UNSIGNED (t1) || TYPE_UNSIGNED (t2))
346 ? long_long_unsigned_type_node
347 : long_long_integer_type_node);
348 return build_type_attribute_variant (t, attributes);
351 /* Go through the same procedure, but for longs. */
352 if (same_type_p (TYPE_MAIN_VARIANT (t1), long_unsigned_type_node)
353 || same_type_p (TYPE_MAIN_VARIANT (t2), long_unsigned_type_node))
354 return build_type_attribute_variant (long_unsigned_type_node,
355 attributes);
356 if (same_type_p (TYPE_MAIN_VARIANT (t1), long_integer_type_node)
357 || same_type_p (TYPE_MAIN_VARIANT (t2), long_integer_type_node))
359 tree t = ((TYPE_UNSIGNED (t1) || TYPE_UNSIGNED (t2))
360 ? long_unsigned_type_node : long_integer_type_node);
361 return build_type_attribute_variant (t, attributes);
363 /* Otherwise prefer the unsigned one. */
364 if (TYPE_UNSIGNED (t1))
365 return build_type_attribute_variant (t1, attributes);
366 else
367 return build_type_attribute_variant (t2, attributes);
369 else
371 if (same_type_p (TYPE_MAIN_VARIANT (t1), long_double_type_node)
372 || same_type_p (TYPE_MAIN_VARIANT (t2), long_double_type_node))
373 return build_type_attribute_variant (long_double_type_node,
374 attributes);
375 if (same_type_p (TYPE_MAIN_VARIANT (t1), double_type_node)
376 || same_type_p (TYPE_MAIN_VARIANT (t2), double_type_node))
377 return build_type_attribute_variant (double_type_node,
378 attributes);
379 if (same_type_p (TYPE_MAIN_VARIANT (t1), float_type_node)
380 || same_type_p (TYPE_MAIN_VARIANT (t2), float_type_node))
381 return build_type_attribute_variant (float_type_node,
382 attributes);
384 /* Two floating-point types whose TYPE_MAIN_VARIANTs are none of
385 the standard C++ floating-point types. Logic earlier in this
386 function has already eliminated the possibility that
387 TYPE_PRECISION (t2) != TYPE_PRECISION (t1), so there's no
388 compelling reason to choose one or the other. */
389 return build_type_attribute_variant (t1, attributes);
393 /* Subroutine of composite_pointer_type to implement the recursive
394 case. See that function for documentation fo the parameters. */
396 static tree
397 composite_pointer_type_r (tree t1, tree t2, const char* location)
399 tree pointee1;
400 tree pointee2;
401 tree result_type;
402 tree attributes;
404 /* Determine the types pointed to by T1 and T2. */
405 if (TREE_CODE (t1) == POINTER_TYPE)
407 pointee1 = TREE_TYPE (t1);
408 pointee2 = TREE_TYPE (t2);
410 else
412 pointee1 = TYPE_PTRMEM_POINTED_TO_TYPE (t1);
413 pointee2 = TYPE_PTRMEM_POINTED_TO_TYPE (t2);
416 /* [expr.rel]
418 Otherwise, the composite pointer type is a pointer type
419 similar (_conv.qual_) to the type of one of the operands,
420 with a cv-qualification signature (_conv.qual_) that is the
421 union of the cv-qualification signatures of the operand
422 types. */
423 if (same_type_ignoring_top_level_qualifiers_p (pointee1, pointee2))
424 result_type = pointee1;
425 else if ((TREE_CODE (pointee1) == POINTER_TYPE
426 && TREE_CODE (pointee2) == POINTER_TYPE)
427 || (TYPE_PTR_TO_MEMBER_P (pointee1)
428 && TYPE_PTR_TO_MEMBER_P (pointee2)))
429 result_type = composite_pointer_type_r (pointee1, pointee2, location);
430 else
432 pedwarn ("%s between distinct pointer types %qT and %qT "
433 "lacks a cast",
434 location, t1, t2);
435 result_type = void_type_node;
437 result_type = cp_build_qualified_type (result_type,
438 (cp_type_quals (pointee1)
439 | cp_type_quals (pointee2)));
440 /* If the original types were pointers to members, so is the
441 result. */
442 if (TYPE_PTR_TO_MEMBER_P (t1))
444 if (!same_type_p (TYPE_PTRMEM_CLASS_TYPE (t1),
445 TYPE_PTRMEM_CLASS_TYPE (t2)))
446 pedwarn ("%s between distinct pointer types %qT and %qT "
447 "lacks a cast",
448 location, t1, t2);
449 result_type = build_ptrmem_type (TYPE_PTRMEM_CLASS_TYPE (t1),
450 result_type);
452 else
453 result_type = build_pointer_type (result_type);
455 /* Merge the attributes. */
456 attributes = (*targetm.merge_type_attributes) (t1, t2);
457 return build_type_attribute_variant (result_type, attributes);
460 /* Return the composite pointer type (see [expr.rel]) for T1 and T2.
461 ARG1 and ARG2 are the values with those types. The LOCATION is a
462 string describing the current location, in case an error occurs.
464 This routine also implements the computation of a common type for
465 pointers-to-members as per [expr.eq]. */
467 tree
468 composite_pointer_type (tree t1, tree t2, tree arg1, tree arg2,
469 const char* location)
471 tree class1;
472 tree class2;
474 /* [expr.rel]
476 If one operand is a null pointer constant, the composite pointer
477 type is the type of the other operand. */
478 if (null_ptr_cst_p (arg1))
479 return t2;
480 if (null_ptr_cst_p (arg2))
481 return t1;
483 /* We have:
485 [expr.rel]
487 If one of the operands has type "pointer to cv1 void*", then
488 the other has type "pointer to cv2T", and the composite pointer
489 type is "pointer to cv12 void", where cv12 is the union of cv1
490 and cv2.
492 If either type is a pointer to void, make sure it is T1. */
493 if (TREE_CODE (t2) == POINTER_TYPE && VOID_TYPE_P (TREE_TYPE (t2)))
495 tree t;
496 t = t1;
497 t1 = t2;
498 t2 = t;
501 /* Now, if T1 is a pointer to void, merge the qualifiers. */
502 if (TREE_CODE (t1) == POINTER_TYPE && VOID_TYPE_P (TREE_TYPE (t1)))
504 tree attributes;
505 tree result_type;
507 if (pedantic && TYPE_PTRFN_P (t2))
508 pedwarn ("ISO C++ forbids %s between pointer of type %<void *%> "
509 "and pointer-to-function", location);
510 result_type
511 = cp_build_qualified_type (void_type_node,
512 (cp_type_quals (TREE_TYPE (t1))
513 | cp_type_quals (TREE_TYPE (t2))));
514 result_type = build_pointer_type (result_type);
515 /* Merge the attributes. */
516 attributes = (*targetm.merge_type_attributes) (t1, t2);
517 return build_type_attribute_variant (result_type, attributes);
520 if (c_dialect_objc () && TREE_CODE (t1) == POINTER_TYPE
521 && TREE_CODE (t2) == POINTER_TYPE)
523 if (objc_compare_types (t1, t2, -3, NULL_TREE))
524 return t1;
527 /* [expr.eq] permits the application of a pointer conversion to
528 bring the pointers to a common type. */
529 if (TREE_CODE (t1) == POINTER_TYPE && TREE_CODE (t2) == POINTER_TYPE
530 && CLASS_TYPE_P (TREE_TYPE (t1))
531 && CLASS_TYPE_P (TREE_TYPE (t2))
532 && !same_type_ignoring_top_level_qualifiers_p (TREE_TYPE (t1),
533 TREE_TYPE (t2)))
535 class1 = TREE_TYPE (t1);
536 class2 = TREE_TYPE (t2);
538 if (DERIVED_FROM_P (class1, class2))
539 t2 = (build_pointer_type
540 (cp_build_qualified_type (class1, TYPE_QUALS (class2))));
541 else if (DERIVED_FROM_P (class2, class1))
542 t1 = (build_pointer_type
543 (cp_build_qualified_type (class2, TYPE_QUALS (class1))));
544 else
546 error ("%s between distinct pointer types %qT and %qT "
547 "lacks a cast", location, t1, t2);
548 return error_mark_node;
551 /* [expr.eq] permits the application of a pointer-to-member
552 conversion to change the class type of one of the types. */
553 else if (TYPE_PTR_TO_MEMBER_P (t1)
554 && !same_type_p (TYPE_PTRMEM_CLASS_TYPE (t1),
555 TYPE_PTRMEM_CLASS_TYPE (t2)))
557 class1 = TYPE_PTRMEM_CLASS_TYPE (t1);
558 class2 = TYPE_PTRMEM_CLASS_TYPE (t2);
560 if (DERIVED_FROM_P (class1, class2))
561 t1 = build_ptrmem_type (class2, TYPE_PTRMEM_POINTED_TO_TYPE (t1));
562 else if (DERIVED_FROM_P (class2, class1))
563 t2 = build_ptrmem_type (class1, TYPE_PTRMEM_POINTED_TO_TYPE (t2));
564 else
566 error ("%s between distinct pointer-to-member types %qT and %qT "
567 "lacks a cast", location, t1, t2);
568 return error_mark_node;
572 return composite_pointer_type_r (t1, t2, location);
575 /* Return the merged type of two types.
576 We assume that cp_comptypes has already been done and returned 1;
577 if that isn't so, this may crash.
579 This just combines attributes and default arguments; any other
580 differences would cause the two types to compare unalike. */
582 tree
583 merge_types (tree t1, tree t2)
585 enum tree_code code1;
586 enum tree_code code2;
587 tree attributes;
589 /* Save time if the two types are the same. */
590 if (t1 == t2)
591 return t1;
592 if (original_type (t1) == original_type (t2))
593 return t1;
595 /* If one type is nonsense, use the other. */
596 if (t1 == error_mark_node)
597 return t2;
598 if (t2 == error_mark_node)
599 return t1;
601 /* Merge the attributes. */
602 attributes = (*targetm.merge_type_attributes) (t1, t2);
604 if (TYPE_PTRMEMFUNC_P (t1))
605 t1 = TYPE_PTRMEMFUNC_FN_TYPE (t1);
606 if (TYPE_PTRMEMFUNC_P (t2))
607 t2 = TYPE_PTRMEMFUNC_FN_TYPE (t2);
609 code1 = TREE_CODE (t1);
610 code2 = TREE_CODE (t2);
612 switch (code1)
614 case POINTER_TYPE:
615 case REFERENCE_TYPE:
616 /* For two pointers, do this recursively on the target type. */
618 tree target = merge_types (TREE_TYPE (t1), TREE_TYPE (t2));
619 int quals = cp_type_quals (t1);
621 if (code1 == POINTER_TYPE)
622 t1 = build_pointer_type (target);
623 else
624 t1 = cp_build_reference_type (target, TYPE_REF_IS_RVALUE (t1));
625 t1 = build_type_attribute_variant (t1, attributes);
626 t1 = cp_build_qualified_type (t1, quals);
628 if (TREE_CODE (target) == METHOD_TYPE)
629 t1 = build_ptrmemfunc_type (t1);
631 return t1;
634 case OFFSET_TYPE:
636 int quals;
637 tree pointee;
638 quals = cp_type_quals (t1);
639 pointee = merge_types (TYPE_PTRMEM_POINTED_TO_TYPE (t1),
640 TYPE_PTRMEM_POINTED_TO_TYPE (t2));
641 t1 = build_ptrmem_type (TYPE_PTRMEM_CLASS_TYPE (t1),
642 pointee);
643 t1 = cp_build_qualified_type (t1, quals);
644 break;
647 case ARRAY_TYPE:
649 tree elt = merge_types (TREE_TYPE (t1), TREE_TYPE (t2));
650 /* Save space: see if the result is identical to one of the args. */
651 if (elt == TREE_TYPE (t1) && TYPE_DOMAIN (t1))
652 return build_type_attribute_variant (t1, attributes);
653 if (elt == TREE_TYPE (t2) && TYPE_DOMAIN (t2))
654 return build_type_attribute_variant (t2, attributes);
655 /* Merge the element types, and have a size if either arg has one. */
656 t1 = build_cplus_array_type
657 (elt, TYPE_DOMAIN (TYPE_DOMAIN (t1) ? t1 : t2));
658 break;
661 case FUNCTION_TYPE:
662 /* Function types: prefer the one that specified arg types.
663 If both do, merge the arg types. Also merge the return types. */
665 tree valtype = merge_types (TREE_TYPE (t1), TREE_TYPE (t2));
666 tree p1 = TYPE_ARG_TYPES (t1);
667 tree p2 = TYPE_ARG_TYPES (t2);
668 tree rval, raises;
670 /* Save space: see if the result is identical to one of the args. */
671 if (valtype == TREE_TYPE (t1) && ! p2)
672 return cp_build_type_attribute_variant (t1, attributes);
673 if (valtype == TREE_TYPE (t2) && ! p1)
674 return cp_build_type_attribute_variant (t2, attributes);
676 /* Simple way if one arg fails to specify argument types. */
677 if (p1 == NULL_TREE || TREE_VALUE (p1) == void_type_node)
679 rval = build_function_type (valtype, p2);
680 if ((raises = TYPE_RAISES_EXCEPTIONS (t2)))
681 rval = build_exception_variant (rval, raises);
682 return cp_build_type_attribute_variant (rval, attributes);
684 raises = TYPE_RAISES_EXCEPTIONS (t1);
685 if (p2 == NULL_TREE || TREE_VALUE (p2) == void_type_node)
687 rval = build_function_type (valtype, p1);
688 if (raises)
689 rval = build_exception_variant (rval, raises);
690 return cp_build_type_attribute_variant (rval, attributes);
693 rval = build_function_type (valtype, commonparms (p1, p2));
694 t1 = build_exception_variant (rval, raises);
695 break;
698 case METHOD_TYPE:
700 /* Get this value the long way, since TYPE_METHOD_BASETYPE
701 is just the main variant of this. */
702 tree basetype = TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (t2)));
703 tree raises = TYPE_RAISES_EXCEPTIONS (t1);
704 tree t3;
706 /* If this was a member function type, get back to the
707 original type of type member function (i.e., without
708 the class instance variable up front. */
709 t1 = build_function_type (TREE_TYPE (t1),
710 TREE_CHAIN (TYPE_ARG_TYPES (t1)));
711 t2 = build_function_type (TREE_TYPE (t2),
712 TREE_CHAIN (TYPE_ARG_TYPES (t2)));
713 t3 = merge_types (t1, t2);
714 t3 = build_method_type_directly (basetype, TREE_TYPE (t3),
715 TYPE_ARG_TYPES (t3));
716 t1 = build_exception_variant (t3, raises);
717 break;
720 case TYPENAME_TYPE:
721 /* There is no need to merge attributes into a TYPENAME_TYPE.
722 When the type is instantiated it will have whatever
723 attributes result from the instantiation. */
724 return t1;
726 default:;
729 if (attribute_list_equal (TYPE_ATTRIBUTES (t1), attributes))
730 return t1;
731 else if (attribute_list_equal (TYPE_ATTRIBUTES (t2), attributes))
732 return t2;
733 else
734 return cp_build_type_attribute_variant (t1, attributes);
737 /* Return the common type of two types.
738 We assume that cp_comptypes has already been done and returned 1;
739 if that isn't so, this may crash.
741 This is the type for the result of most arithmetic operations
742 if the operands have the given two types. */
744 tree
745 common_type (tree t1, tree t2)
747 enum tree_code code1;
748 enum tree_code code2;
750 /* If one type is nonsense, bail. */
751 if (t1 == error_mark_node || t2 == error_mark_node)
752 return error_mark_node;
754 code1 = TREE_CODE (t1);
755 code2 = TREE_CODE (t2);
757 if ((ARITHMETIC_TYPE_P (t1) || code1 == ENUMERAL_TYPE
758 || code1 == VECTOR_TYPE)
759 && (ARITHMETIC_TYPE_P (t2) || code2 == ENUMERAL_TYPE
760 || code2 == VECTOR_TYPE))
761 return type_after_usual_arithmetic_conversions (t1, t2);
763 else if ((TYPE_PTR_P (t1) && TYPE_PTR_P (t2))
764 || (TYPE_PTRMEM_P (t1) && TYPE_PTRMEM_P (t2))
765 || (TYPE_PTRMEMFUNC_P (t1) && TYPE_PTRMEMFUNC_P (t2)))
766 return composite_pointer_type (t1, t2, error_mark_node, error_mark_node,
767 "conversion");
768 else
769 gcc_unreachable ();
772 /* Compare two exception specifier types for exactness or subsetness, if
773 allowed. Returns false for mismatch, true for match (same, or
774 derived and !exact).
776 [except.spec] "If a class X ... objects of class X or any class publicly
777 and unambiguously derived from X. Similarly, if a pointer type Y * ...
778 exceptions of type Y * or that are pointers to any type publicly and
779 unambiguously derived from Y. Otherwise a function only allows exceptions
780 that have the same type ..."
781 This does not mention cv qualifiers and is different to what throw
782 [except.throw] and catch [except.catch] will do. They will ignore the
783 top level cv qualifiers, and allow qualifiers in the pointer to class
784 example.
786 We implement the letter of the standard. */
788 static bool
789 comp_except_types (tree a, tree b, bool exact)
791 if (same_type_p (a, b))
792 return true;
793 else if (!exact)
795 if (cp_type_quals (a) || cp_type_quals (b))
796 return false;
798 if (TREE_CODE (a) == POINTER_TYPE
799 && TREE_CODE (b) == POINTER_TYPE)
801 a = TREE_TYPE (a);
802 b = TREE_TYPE (b);
803 if (cp_type_quals (a) || cp_type_quals (b))
804 return false;
807 if (TREE_CODE (a) != RECORD_TYPE
808 || TREE_CODE (b) != RECORD_TYPE)
809 return false;
811 if (PUBLICLY_UNIQUELY_DERIVED_P (a, b))
812 return true;
814 return false;
817 /* Return true if TYPE1 and TYPE2 are equivalent exception specifiers.
818 If EXACT is false, T2 can be stricter than T1 (according to 15.4/7),
819 otherwise it must be exact. Exception lists are unordered, but
820 we've already filtered out duplicates. Most lists will be in order,
821 we should try to make use of that. */
823 bool
824 comp_except_specs (const_tree t1, const_tree t2, bool exact)
826 const_tree probe;
827 const_tree base;
828 int length = 0;
830 if (t1 == t2)
831 return true;
833 if (t1 == NULL_TREE) /* T1 is ... */
834 return t2 == NULL_TREE || !exact;
835 if (!TREE_VALUE (t1)) /* t1 is EMPTY */
836 return t2 != NULL_TREE && !TREE_VALUE (t2);
837 if (t2 == NULL_TREE) /* T2 is ... */
838 return false;
839 if (TREE_VALUE (t1) && !TREE_VALUE (t2)) /* T2 is EMPTY, T1 is not */
840 return !exact;
842 /* Neither set is ... or EMPTY, make sure each part of T2 is in T1.
843 Count how many we find, to determine exactness. For exact matching and
844 ordered T1, T2, this is an O(n) operation, otherwise its worst case is
845 O(nm). */
846 for (base = t1; t2 != NULL_TREE; t2 = TREE_CHAIN (t2))
848 for (probe = base; probe != NULL_TREE; probe = TREE_CHAIN (probe))
850 tree a = TREE_VALUE (probe);
851 tree b = TREE_VALUE (t2);
853 if (comp_except_types (a, b, exact))
855 if (probe == base && exact)
856 base = TREE_CHAIN (probe);
857 length++;
858 break;
861 if (probe == NULL_TREE)
862 return false;
864 return !exact || base == NULL_TREE || length == list_length (t1);
867 /* Compare the array types T1 and T2. ALLOW_REDECLARATION is true if
868 [] can match [size]. */
870 static bool
871 comp_array_types (const_tree t1, const_tree t2, bool allow_redeclaration)
873 tree d1;
874 tree d2;
875 tree max1, max2;
877 if (t1 == t2)
878 return true;
880 /* The type of the array elements must be the same. */
881 if (!same_type_p (TREE_TYPE (t1), TREE_TYPE (t2)))
882 return false;
884 d1 = TYPE_DOMAIN (t1);
885 d2 = TYPE_DOMAIN (t2);
887 if (d1 == d2)
888 return true;
890 /* If one of the arrays is dimensionless, and the other has a
891 dimension, they are of different types. However, it is valid to
892 write:
894 extern int a[];
895 int a[3];
897 by [basic.link]:
899 declarations for an array object can specify
900 array types that differ by the presence or absence of a major
901 array bound (_dcl.array_). */
902 if (!d1 || !d2)
903 return allow_redeclaration;
905 /* Check that the dimensions are the same. */
907 if (!cp_tree_equal (TYPE_MIN_VALUE (d1), TYPE_MIN_VALUE (d2)))
908 return false;
909 max1 = TYPE_MAX_VALUE (d1);
910 max2 = TYPE_MAX_VALUE (d2);
911 if (processing_template_decl && !abi_version_at_least (2)
912 && !value_dependent_expression_p (max1)
913 && !value_dependent_expression_p (max2))
915 /* With abi-1 we do not fold non-dependent array bounds, (and
916 consequently mangle them incorrectly). We must therefore
917 fold them here, to verify the domains have the same
918 value. */
919 max1 = fold (max1);
920 max2 = fold (max2);
923 if (!cp_tree_equal (max1, max2))
924 return false;
926 return true;
929 /* Subroutine in cp_comptypes. */
931 static bool
932 structural_comptypes (tree t1, tree t2, int strict)
934 if (t1 == t2)
935 return true;
937 /* Suppress errors caused by previously reported errors. */
938 if (t1 == error_mark_node || t2 == error_mark_node)
939 return false;
941 gcc_assert (TYPE_P (t1) && TYPE_P (t2));
943 /* TYPENAME_TYPEs should be resolved if the qualifying scope is the
944 current instantiation. */
945 if (TREE_CODE (t1) == TYPENAME_TYPE)
946 t1 = resolve_typename_type (t1, /*only_current_p=*/true);
948 if (TREE_CODE (t2) == TYPENAME_TYPE)
949 t2 = resolve_typename_type (t2, /*only_current_p=*/true);
951 if (TYPE_PTRMEMFUNC_P (t1))
952 t1 = TYPE_PTRMEMFUNC_FN_TYPE (t1);
953 if (TYPE_PTRMEMFUNC_P (t2))
954 t2 = TYPE_PTRMEMFUNC_FN_TYPE (t2);
956 /* Different classes of types can't be compatible. */
957 if (TREE_CODE (t1) != TREE_CODE (t2))
958 return false;
960 /* Qualifiers must match. For array types, we will check when we
961 recur on the array element types. */
962 if (TREE_CODE (t1) != ARRAY_TYPE
963 && TYPE_QUALS (t1) != TYPE_QUALS (t2))
964 return false;
966 /* Allow for two different type nodes which have essentially the same
967 definition. Note that we already checked for equality of the type
968 qualifiers (just above). */
970 if (TREE_CODE (t1) != ARRAY_TYPE
971 && TYPE_MAIN_VARIANT (t1) == TYPE_MAIN_VARIANT (t2))
972 return true;
974 if (TYPE_FOR_JAVA (t1) != TYPE_FOR_JAVA (t2))
975 return false;
977 /* Compare the types. Break out if they could be the same. */
978 switch (TREE_CODE (t1))
980 case VOID_TYPE:
981 case BOOLEAN_TYPE:
982 /* All void and bool types are the same. */
983 break;
985 case INTEGER_TYPE:
986 case FIXED_POINT_TYPE:
987 case REAL_TYPE:
988 /* With these nodes, we can't determine type equivalence by
989 looking at what is stored in the nodes themselves, because
990 two nodes might have different TYPE_MAIN_VARIANTs but still
991 represent the same type. For example, wchar_t and int could
992 have the same properties (TYPE_PRECISION, TYPE_MIN_VALUE,
993 TYPE_MAX_VALUE, etc.), but have different TYPE_MAIN_VARIANTs
994 and are distinct types. On the other hand, int and the
995 following typedef
997 typedef int INT __attribute((may_alias));
999 have identical properties, different TYPE_MAIN_VARIANTs, but
1000 represent the same type. The canonical type system keeps
1001 track of equivalence in this case, so we fall back on it. */
1002 return TYPE_CANONICAL (t1) == TYPE_CANONICAL (t2);
1004 case TEMPLATE_TEMPLATE_PARM:
1005 case BOUND_TEMPLATE_TEMPLATE_PARM:
1006 if (TEMPLATE_TYPE_IDX (t1) != TEMPLATE_TYPE_IDX (t2)
1007 || TEMPLATE_TYPE_LEVEL (t1) != TEMPLATE_TYPE_LEVEL (t2)
1008 || (TEMPLATE_TYPE_PARAMETER_PACK (t1)
1009 != TEMPLATE_TYPE_PARAMETER_PACK (t2)))
1010 return false;
1011 if (!comp_template_parms
1012 (DECL_TEMPLATE_PARMS (TEMPLATE_TEMPLATE_PARM_TEMPLATE_DECL (t1)),
1013 DECL_TEMPLATE_PARMS (TEMPLATE_TEMPLATE_PARM_TEMPLATE_DECL (t2))))
1014 return false;
1015 if (TREE_CODE (t1) == TEMPLATE_TEMPLATE_PARM)
1016 break;
1017 /* Don't check inheritance. */
1018 strict = COMPARE_STRICT;
1019 /* Fall through. */
1021 case RECORD_TYPE:
1022 case UNION_TYPE:
1023 if (TYPE_TEMPLATE_INFO (t1) && TYPE_TEMPLATE_INFO (t2)
1024 && (TYPE_TI_TEMPLATE (t1) == TYPE_TI_TEMPLATE (t2)
1025 || TREE_CODE (t1) == BOUND_TEMPLATE_TEMPLATE_PARM)
1026 && comp_template_args (TYPE_TI_ARGS (t1), TYPE_TI_ARGS (t2)))
1027 break;
1029 if ((strict & COMPARE_BASE) && DERIVED_FROM_P (t1, t2))
1030 break;
1031 else if ((strict & COMPARE_DERIVED) && DERIVED_FROM_P (t2, t1))
1032 break;
1034 return false;
1036 case OFFSET_TYPE:
1037 if (!cp_comptypes (TYPE_OFFSET_BASETYPE (t1), TYPE_OFFSET_BASETYPE (t2),
1038 strict & ~COMPARE_REDECLARATION))
1039 return false;
1040 if (!same_type_p (TREE_TYPE (t1), TREE_TYPE (t2)))
1041 return false;
1042 break;
1044 case REFERENCE_TYPE:
1045 if (TYPE_REF_IS_RVALUE (t1) != TYPE_REF_IS_RVALUE (t2))
1046 return false;
1047 /* fall through to checks for pointer types */
1049 case POINTER_TYPE:
1050 if (TYPE_MODE (t1) != TYPE_MODE (t2)
1051 || TYPE_REF_CAN_ALIAS_ALL (t1) != TYPE_REF_CAN_ALIAS_ALL (t2)
1052 || !same_type_p (TREE_TYPE (t1), TREE_TYPE (t2)))
1053 return false;
1054 break;
1056 case METHOD_TYPE:
1057 case FUNCTION_TYPE:
1058 if (!same_type_p (TREE_TYPE (t1), TREE_TYPE (t2)))
1059 return false;
1060 if (!compparms (TYPE_ARG_TYPES (t1), TYPE_ARG_TYPES (t2)))
1061 return false;
1062 break;
1064 case ARRAY_TYPE:
1065 /* Target types must match incl. qualifiers. */
1066 if (!comp_array_types (t1, t2, !!(strict & COMPARE_REDECLARATION)))
1067 return false;
1068 break;
1070 case TEMPLATE_TYPE_PARM:
1071 if (TEMPLATE_TYPE_IDX (t1) != TEMPLATE_TYPE_IDX (t2)
1072 || TEMPLATE_TYPE_LEVEL (t1) != TEMPLATE_TYPE_LEVEL (t2)
1073 || (TEMPLATE_TYPE_PARAMETER_PACK (t1)
1074 != TEMPLATE_TYPE_PARAMETER_PACK (t2)))
1075 return false;
1076 break;
1078 case TYPENAME_TYPE:
1079 if (!cp_tree_equal (TYPENAME_TYPE_FULLNAME (t1),
1080 TYPENAME_TYPE_FULLNAME (t2)))
1081 return false;
1082 if (!same_type_p (TYPE_CONTEXT (t1), TYPE_CONTEXT (t2)))
1083 return false;
1084 break;
1086 case UNBOUND_CLASS_TEMPLATE:
1087 if (!cp_tree_equal (TYPE_IDENTIFIER (t1), TYPE_IDENTIFIER (t2)))
1088 return false;
1089 if (!same_type_p (TYPE_CONTEXT (t1), TYPE_CONTEXT (t2)))
1090 return false;
1091 break;
1093 case COMPLEX_TYPE:
1094 if (!same_type_p (TREE_TYPE (t1), TREE_TYPE (t2)))
1095 return false;
1096 break;
1098 case VECTOR_TYPE:
1099 if (TYPE_VECTOR_SUBPARTS (t1) != TYPE_VECTOR_SUBPARTS (t2)
1100 || !same_type_p (TREE_TYPE (t1), TREE_TYPE (t2)))
1101 return false;
1102 break;
1104 case TYPE_PACK_EXPANSION:
1105 return same_type_p (PACK_EXPANSION_PATTERN (t1),
1106 PACK_EXPANSION_PATTERN (t2));
1108 case DECLTYPE_TYPE:
1109 if (DECLTYPE_TYPE_ID_EXPR_OR_MEMBER_ACCESS_P (t1)
1110 != DECLTYPE_TYPE_ID_EXPR_OR_MEMBER_ACCESS_P (t2)
1111 || !cp_tree_equal (DECLTYPE_TYPE_EXPR (t1),
1112 DECLTYPE_TYPE_EXPR (t2)))
1113 return false;
1114 break;
1116 default:
1117 return false;
1120 /* If we get here, we know that from a target independent POV the
1121 types are the same. Make sure the target attributes are also
1122 the same. */
1123 return targetm.comp_type_attributes (t1, t2);
1126 extern int comptypes (tree, tree);
1128 /* Type comparison function that matches the signature of comptypes
1129 from c-tree.h, which is used by the C front end and some of the
1130 C/C++ common bits. */
1132 comptypes (tree t1, tree t2)
1134 return cp_comptypes (t1, t2, COMPARE_STRICT);
1137 /* Return true if T1 and T2 are related as allowed by STRICT. STRICT
1138 is a bitwise-or of the COMPARE_* flags. */
1140 bool
1141 cp_comptypes (tree t1, tree t2, int strict)
1143 if (strict == COMPARE_STRICT)
1145 if (t1 == t2)
1146 return true;
1148 if (t1 == error_mark_node || t2 == error_mark_node)
1149 return false;
1151 if (TYPE_STRUCTURAL_EQUALITY_P (t1) || TYPE_STRUCTURAL_EQUALITY_P (t2))
1152 /* At least one of the types requires structural equality, so
1153 perform a deep check. */
1154 return structural_comptypes (t1, t2, strict);
1156 #ifdef ENABLE_CHECKING
1157 if (USE_CANONICAL_TYPES)
1159 bool result = structural_comptypes (t1, t2, strict);
1161 if (result && TYPE_CANONICAL (t1) != TYPE_CANONICAL (t2))
1162 /* The two types are structurally equivalent, but their
1163 canonical types were different. This is a failure of the
1164 canonical type propagation code.*/
1165 internal_error
1166 ("canonical types differ for identical types %T and %T",
1167 t1, t2);
1168 else if (!result && TYPE_CANONICAL (t1) == TYPE_CANONICAL (t2))
1169 /* Two types are structurally different, but the canonical
1170 types are the same. This means we were over-eager in
1171 assigning canonical types. */
1172 internal_error
1173 ("same canonical type node for different types %T and %T",
1174 t1, t2);
1176 return result;
1178 #else
1179 if (USE_CANONICAL_TYPES)
1180 return TYPE_CANONICAL (t1) == TYPE_CANONICAL (t2);
1181 #endif
1182 else
1183 return structural_comptypes (t1, t2, strict);
1185 else if (strict == COMPARE_STRUCTURAL)
1186 return structural_comptypes (t1, t2, COMPARE_STRICT);
1187 else
1188 return structural_comptypes (t1, t2, strict);
1191 /* Returns 1 if TYPE1 is at least as qualified as TYPE2. */
1193 bool
1194 at_least_as_qualified_p (const_tree type1, const_tree type2)
1196 int q1 = cp_type_quals (type1);
1197 int q2 = cp_type_quals (type2);
1199 /* All qualifiers for TYPE2 must also appear in TYPE1. */
1200 return (q1 & q2) == q2;
1203 /* Returns 1 if TYPE1 is more cv-qualified than TYPE2, -1 if TYPE2 is
1204 more cv-qualified that TYPE1, and 0 otherwise. */
1207 comp_cv_qualification (const_tree type1, const_tree type2)
1209 int q1 = cp_type_quals (type1);
1210 int q2 = cp_type_quals (type2);
1212 if (q1 == q2)
1213 return 0;
1215 if ((q1 & q2) == q2)
1216 return 1;
1217 else if ((q1 & q2) == q1)
1218 return -1;
1220 return 0;
1223 /* Returns 1 if the cv-qualification signature of TYPE1 is a proper
1224 subset of the cv-qualification signature of TYPE2, and the types
1225 are similar. Returns -1 if the other way 'round, and 0 otherwise. */
1228 comp_cv_qual_signature (tree type1, tree type2)
1230 if (comp_ptr_ttypes_real (type2, type1, -1))
1231 return 1;
1232 else if (comp_ptr_ttypes_real (type1, type2, -1))
1233 return -1;
1234 else
1235 return 0;
1238 /* Subroutines of `cp_comptypes'. */
1240 /* Return true if two parameter type lists PARMS1 and PARMS2 are
1241 equivalent in the sense that functions with those parameter types
1242 can have equivalent types. The two lists must be equivalent,
1243 element by element. */
1245 bool
1246 compparms (const_tree parms1, const_tree parms2)
1248 const_tree t1, t2;
1250 /* An unspecified parmlist matches any specified parmlist
1251 whose argument types don't need default promotions. */
1253 for (t1 = parms1, t2 = parms2;
1254 t1 || t2;
1255 t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2))
1257 /* If one parmlist is shorter than the other,
1258 they fail to match. */
1259 if (!t1 || !t2)
1260 return false;
1261 if (!same_type_p (TREE_VALUE (t1), TREE_VALUE (t2)))
1262 return false;
1264 return true;
1268 /* Process a sizeof or alignof expression where the operand is a
1269 type. */
1271 tree
1272 cxx_sizeof_or_alignof_type (tree type, enum tree_code op, bool complain)
1274 tree value;
1275 bool dependent_p;
1277 gcc_assert (op == SIZEOF_EXPR || op == ALIGNOF_EXPR);
1278 if (type == error_mark_node)
1279 return error_mark_node;
1281 type = non_reference (type);
1282 if (TREE_CODE (type) == METHOD_TYPE)
1284 if (complain && (pedantic || warn_pointer_arith))
1285 pedwarn ("invalid application of %qs to a member function",
1286 operator_name_info[(int) op].name);
1287 value = size_one_node;
1290 dependent_p = dependent_type_p (type);
1291 if (!dependent_p)
1292 complete_type (type);
1293 if (dependent_p
1294 /* VLA types will have a non-constant size. In the body of an
1295 uninstantiated template, we don't need to try to compute the
1296 value, because the sizeof expression is not an integral
1297 constant expression in that case. And, if we do try to
1298 compute the value, we'll likely end up with SAVE_EXPRs, which
1299 the template substitution machinery does not expect to see. */
1300 || (processing_template_decl
1301 && COMPLETE_TYPE_P (type)
1302 && TREE_CODE (TYPE_SIZE (type)) != INTEGER_CST))
1304 value = build_min (op, size_type_node, type);
1305 TREE_READONLY (value) = 1;
1306 return value;
1309 return c_sizeof_or_alignof_type (complete_type (type),
1310 op == SIZEOF_EXPR,
1311 complain);
1314 /* Process a sizeof expression where the operand is an expression. */
1316 static tree
1317 cxx_sizeof_expr (tree e)
1319 if (e == error_mark_node)
1320 return error_mark_node;
1322 if (processing_template_decl)
1324 e = build_min (SIZEOF_EXPR, size_type_node, e);
1325 TREE_SIDE_EFFECTS (e) = 0;
1326 TREE_READONLY (e) = 1;
1328 return e;
1331 if (TREE_CODE (e) == COMPONENT_REF
1332 && TREE_CODE (TREE_OPERAND (e, 1)) == FIELD_DECL
1333 && DECL_C_BIT_FIELD (TREE_OPERAND (e, 1)))
1335 error ("invalid application of %<sizeof%> to a bit-field");
1336 e = char_type_node;
1338 else if (is_overloaded_fn (e))
1340 pedwarn ("ISO C++ forbids applying %<sizeof%> to an expression of "
1341 "function type");
1342 e = char_type_node;
1344 else if (type_unknown_p (e))
1346 cxx_incomplete_type_error (e, TREE_TYPE (e));
1347 e = char_type_node;
1349 else
1350 e = TREE_TYPE (e);
1352 return cxx_sizeof_or_alignof_type (e, SIZEOF_EXPR, true);
1355 /* Implement the __alignof keyword: Return the minimum required
1356 alignment of E, measured in bytes. For VAR_DECL's and
1357 FIELD_DECL's return DECL_ALIGN (which can be set from an
1358 "aligned" __attribute__ specification). */
1360 static tree
1361 cxx_alignof_expr (tree e)
1363 tree t;
1365 if (e == error_mark_node)
1366 return error_mark_node;
1368 if (processing_template_decl)
1370 e = build_min (ALIGNOF_EXPR, size_type_node, e);
1371 TREE_SIDE_EFFECTS (e) = 0;
1372 TREE_READONLY (e) = 1;
1374 return e;
1377 if (TREE_CODE (e) == VAR_DECL)
1378 t = size_int (DECL_ALIGN_UNIT (e));
1379 else if (TREE_CODE (e) == COMPONENT_REF
1380 && TREE_CODE (TREE_OPERAND (e, 1)) == FIELD_DECL
1381 && DECL_C_BIT_FIELD (TREE_OPERAND (e, 1)))
1383 error ("invalid application of %<__alignof%> to a bit-field");
1384 t = size_one_node;
1386 else if (TREE_CODE (e) == COMPONENT_REF
1387 && TREE_CODE (TREE_OPERAND (e, 1)) == FIELD_DECL)
1388 t = size_int (DECL_ALIGN_UNIT (TREE_OPERAND (e, 1)));
1389 else if (is_overloaded_fn (e))
1391 pedwarn ("ISO C++ forbids applying %<__alignof%> to an expression of "
1392 "function type");
1393 if (TREE_CODE (e) == FUNCTION_DECL)
1394 t = size_int (DECL_ALIGN_UNIT (e));
1395 else
1396 t = size_one_node;
1398 else if (type_unknown_p (e))
1400 cxx_incomplete_type_error (e, TREE_TYPE (e));
1401 t = size_one_node;
1403 else
1404 return cxx_sizeof_or_alignof_type (TREE_TYPE (e), ALIGNOF_EXPR, true);
1406 return fold_convert (size_type_node, t);
1409 /* Process a sizeof or alignof expression E with code OP where the operand
1410 is an expression. */
1412 tree
1413 cxx_sizeof_or_alignof_expr (tree e, enum tree_code op)
1415 if (op == SIZEOF_EXPR)
1416 return cxx_sizeof_expr (e);
1417 else
1418 return cxx_alignof_expr (e);
1421 /* EXPR is being used in a context that is not a function call.
1422 Enforce:
1424 [expr.ref]
1426 The expression can be used only as the left-hand operand of a
1427 member function call.
1429 [expr.mptr.operator]
1431 If the result of .* or ->* is a function, then that result can be
1432 used only as the operand for the function call operator ().
1434 by issuing an error message if appropriate. Returns true iff EXPR
1435 violates these rules. */
1437 bool
1438 invalid_nonstatic_memfn_p (const_tree expr)
1440 if (TREE_CODE (TREE_TYPE (expr)) == METHOD_TYPE)
1442 error ("invalid use of non-static member function");
1443 return true;
1445 return false;
1448 /* If EXP is a reference to a bitfield, and the type of EXP does not
1449 match the declared type of the bitfield, return the declared type
1450 of the bitfield. Otherwise, return NULL_TREE. */
1452 tree
1453 is_bitfield_expr_with_lowered_type (const_tree exp)
1455 switch (TREE_CODE (exp))
1457 case COND_EXPR:
1458 if (!is_bitfield_expr_with_lowered_type (TREE_OPERAND (exp, 1)
1459 ? TREE_OPERAND (exp, 1)
1460 : TREE_OPERAND (exp, 0)))
1461 return NULL_TREE;
1462 return is_bitfield_expr_with_lowered_type (TREE_OPERAND (exp, 2));
1464 case COMPOUND_EXPR:
1465 return is_bitfield_expr_with_lowered_type (TREE_OPERAND (exp, 1));
1467 case MODIFY_EXPR:
1468 case SAVE_EXPR:
1469 return is_bitfield_expr_with_lowered_type (TREE_OPERAND (exp, 0));
1471 case COMPONENT_REF:
1473 tree field;
1475 field = TREE_OPERAND (exp, 1);
1476 if (TREE_CODE (field) != FIELD_DECL || !DECL_C_BIT_FIELD (field))
1477 return NULL_TREE;
1478 if (same_type_ignoring_top_level_qualifiers_p
1479 (TREE_TYPE (exp), DECL_BIT_FIELD_TYPE (field)))
1480 return NULL_TREE;
1481 return DECL_BIT_FIELD_TYPE (field);
1484 case NOP_EXPR:
1485 case CONVERT_EXPR:
1486 if (TYPE_MAIN_VARIANT (TREE_TYPE (TREE_OPERAND (exp, 0)))
1487 == TYPE_MAIN_VARIANT (TREE_TYPE (exp)))
1488 return is_bitfield_expr_with_lowered_type (TREE_OPERAND (exp, 0));
1489 /* Fallthrough. */
1491 default:
1492 return NULL_TREE;
1496 /* Like is_bitfield_with_lowered_type, except that if EXP is not a
1497 bitfield with a lowered type, the type of EXP is returned, rather
1498 than NULL_TREE. */
1500 tree
1501 unlowered_expr_type (const_tree exp)
1503 tree type;
1505 type = is_bitfield_expr_with_lowered_type (exp);
1506 if (!type)
1507 type = TREE_TYPE (exp);
1509 return type;
1512 /* Perform the conversions in [expr] that apply when an lvalue appears
1513 in an rvalue context: the lvalue-to-rvalue, array-to-pointer, and
1514 function-to-pointer conversions. In addition, manifest constants
1515 are replaced by their values, and bitfield references are converted
1516 to their declared types.
1518 Although the returned value is being used as an rvalue, this
1519 function does not wrap the returned expression in a
1520 NON_LVALUE_EXPR; the caller is expected to be mindful of the fact
1521 that the return value is no longer an lvalue. */
1523 tree
1524 decay_conversion (tree exp)
1526 tree type;
1527 enum tree_code code;
1529 type = TREE_TYPE (exp);
1530 if (type == error_mark_node)
1531 return error_mark_node;
1533 if (type_unknown_p (exp))
1535 cxx_incomplete_type_error (exp, TREE_TYPE (exp));
1536 return error_mark_node;
1539 exp = decl_constant_value (exp);
1540 if (error_operand_p (exp))
1541 return error_mark_node;
1543 /* build_c_cast puts on a NOP_EXPR to make the result not an lvalue.
1544 Leave such NOP_EXPRs, since RHS is being used in non-lvalue context. */
1545 code = TREE_CODE (type);
1546 if (code == VOID_TYPE)
1548 error ("void value not ignored as it ought to be");
1549 return error_mark_node;
1551 if (invalid_nonstatic_memfn_p (exp))
1552 return error_mark_node;
1553 if (code == FUNCTION_TYPE || is_overloaded_fn (exp))
1554 return build_unary_op (ADDR_EXPR, exp, 0);
1555 if (code == ARRAY_TYPE)
1557 tree adr;
1558 tree ptrtype;
1560 if (TREE_CODE (exp) == INDIRECT_REF)
1561 return build_nop (build_pointer_type (TREE_TYPE (type)),
1562 TREE_OPERAND (exp, 0));
1564 if (TREE_CODE (exp) == COMPOUND_EXPR)
1566 tree op1 = decay_conversion (TREE_OPERAND (exp, 1));
1567 return build2 (COMPOUND_EXPR, TREE_TYPE (op1),
1568 TREE_OPERAND (exp, 0), op1);
1571 if (!lvalue_p (exp)
1572 && ! (TREE_CODE (exp) == CONSTRUCTOR && TREE_STATIC (exp)))
1574 error ("invalid use of non-lvalue array");
1575 return error_mark_node;
1578 ptrtype = build_pointer_type (TREE_TYPE (type));
1580 if (TREE_CODE (exp) == VAR_DECL)
1582 if (!cxx_mark_addressable (exp))
1583 return error_mark_node;
1584 adr = build_nop (ptrtype, build_address (exp));
1585 return adr;
1587 /* This way is better for a COMPONENT_REF since it can
1588 simplify the offset for a component. */
1589 adr = build_unary_op (ADDR_EXPR, exp, 1);
1590 return cp_convert (ptrtype, adr);
1593 /* If a bitfield is used in a context where integral promotion
1594 applies, then the caller is expected to have used
1595 default_conversion. That function promotes bitfields correctly
1596 before calling this function. At this point, if we have a
1597 bitfield referenced, we may assume that is not subject to
1598 promotion, and that, therefore, the type of the resulting rvalue
1599 is the declared type of the bitfield. */
1600 exp = convert_bitfield_to_declared_type (exp);
1602 /* We do not call rvalue() here because we do not want to wrap EXP
1603 in a NON_LVALUE_EXPR. */
1605 /* [basic.lval]
1607 Non-class rvalues always have cv-unqualified types. */
1608 type = TREE_TYPE (exp);
1609 if (!CLASS_TYPE_P (type) && cp_type_quals (type))
1610 exp = build_nop (TYPE_MAIN_VARIANT (type), exp);
1612 return exp;
1615 /* Perform prepatory conversions, as part of the "usual arithmetic
1616 conversions". In particular, as per [expr]:
1618 Whenever an lvalue expression appears as an operand of an
1619 operator that expects the rvalue for that operand, the
1620 lvalue-to-rvalue, array-to-pointer, or function-to-pointer
1621 standard conversions are applied to convert the expression to an
1622 rvalue.
1624 In addition, we perform integral promotions here, as those are
1625 applied to both operands to a binary operator before determining
1626 what additional conversions should apply. */
1628 tree
1629 default_conversion (tree exp)
1631 /* Perform the integral promotions first so that bitfield
1632 expressions (which may promote to "int", even if the bitfield is
1633 declared "unsigned") are promoted correctly. */
1634 if (INTEGRAL_OR_ENUMERATION_TYPE_P (TREE_TYPE (exp)))
1635 exp = perform_integral_promotions (exp);
1636 /* Perform the other conversions. */
1637 exp = decay_conversion (exp);
1639 return exp;
1642 /* EXPR is an expression with an integral or enumeration type.
1643 Perform the integral promotions in [conv.prom], and return the
1644 converted value. */
1646 tree
1647 perform_integral_promotions (tree expr)
1649 tree type;
1650 tree promoted_type;
1652 /* [conv.prom]
1654 If the bitfield has an enumerated type, it is treated as any
1655 other value of that type for promotion purposes. */
1656 type = is_bitfield_expr_with_lowered_type (expr);
1657 if (!type || TREE_CODE (type) != ENUMERAL_TYPE)
1658 type = TREE_TYPE (expr);
1659 gcc_assert (INTEGRAL_OR_ENUMERATION_TYPE_P (type));
1660 promoted_type = type_promotes_to (type);
1661 if (type != promoted_type)
1662 expr = cp_convert (promoted_type, expr);
1663 return expr;
1666 /* Take the address of an inline function without setting TREE_ADDRESSABLE
1667 or TREE_USED. */
1669 tree
1670 inline_conversion (tree exp)
1672 if (TREE_CODE (exp) == FUNCTION_DECL)
1673 exp = build1 (ADDR_EXPR, build_pointer_type (TREE_TYPE (exp)), exp);
1675 return exp;
1678 /* Returns nonzero iff exp is a STRING_CST or the result of applying
1679 decay_conversion to one. */
1682 string_conv_p (const_tree totype, const_tree exp, int warn)
1684 tree t;
1686 if (TREE_CODE (totype) != POINTER_TYPE)
1687 return 0;
1689 t = TREE_TYPE (totype);
1690 if (!same_type_p (t, char_type_node)
1691 && !same_type_p (t, wchar_type_node))
1692 return 0;
1694 if (TREE_CODE (exp) == STRING_CST)
1696 /* Make sure that we don't try to convert between char and wchar_t. */
1697 if (!same_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (exp))), t))
1698 return 0;
1700 else
1702 /* Is this a string constant which has decayed to 'const char *'? */
1703 t = build_pointer_type (build_qualified_type (t, TYPE_QUAL_CONST));
1704 if (!same_type_p (TREE_TYPE (exp), t))
1705 return 0;
1706 STRIP_NOPS (exp);
1707 if (TREE_CODE (exp) != ADDR_EXPR
1708 || TREE_CODE (TREE_OPERAND (exp, 0)) != STRING_CST)
1709 return 0;
1712 /* This warning is not very useful, as it complains about printf. */
1713 if (warn)
1714 warning (OPT_Wwrite_strings,
1715 "deprecated conversion from string constant to %qT",
1716 totype);
1718 return 1;
1721 /* Given a COND_EXPR, MIN_EXPR, or MAX_EXPR in T, return it in a form that we
1722 can, for example, use as an lvalue. This code used to be in
1723 unary_complex_lvalue, but we needed it to deal with `a = (d == c) ? b : c'
1724 expressions, where we're dealing with aggregates. But now it's again only
1725 called from unary_complex_lvalue. The case (in particular) that led to
1726 this was with CODE == ADDR_EXPR, since it's not an lvalue when we'd
1727 get it there. */
1729 static tree
1730 rationalize_conditional_expr (enum tree_code code, tree t)
1732 /* For MIN_EXPR or MAX_EXPR, fold-const.c has arranged things so that
1733 the first operand is always the one to be used if both operands
1734 are equal, so we know what conditional expression this used to be. */
1735 if (TREE_CODE (t) == MIN_EXPR || TREE_CODE (t) == MAX_EXPR)
1737 tree op0 = TREE_OPERAND (t, 0);
1738 tree op1 = TREE_OPERAND (t, 1);
1740 /* The following code is incorrect if either operand side-effects. */
1741 gcc_assert (!TREE_SIDE_EFFECTS (op0)
1742 && !TREE_SIDE_EFFECTS (op1));
1743 return
1744 build_conditional_expr (build_x_binary_op ((TREE_CODE (t) == MIN_EXPR
1745 ? LE_EXPR : GE_EXPR),
1746 op0, TREE_CODE (op0),
1747 op1, TREE_CODE (op1),
1748 /*overloaded_p=*/NULL),
1749 build_unary_op (code, op0, 0),
1750 build_unary_op (code, op1, 0));
1753 return
1754 build_conditional_expr (TREE_OPERAND (t, 0),
1755 build_unary_op (code, TREE_OPERAND (t, 1), 0),
1756 build_unary_op (code, TREE_OPERAND (t, 2), 0));
1759 /* Given the TYPE of an anonymous union field inside T, return the
1760 FIELD_DECL for the field. If not found return NULL_TREE. Because
1761 anonymous unions can nest, we must also search all anonymous unions
1762 that are directly reachable. */
1764 tree
1765 lookup_anon_field (tree t, tree type)
1767 tree field;
1769 for (field = TYPE_FIELDS (t); field; field = TREE_CHAIN (field))
1771 if (TREE_STATIC (field))
1772 continue;
1773 if (TREE_CODE (field) != FIELD_DECL || DECL_ARTIFICIAL (field))
1774 continue;
1776 /* If we find it directly, return the field. */
1777 if (DECL_NAME (field) == NULL_TREE
1778 && type == TYPE_MAIN_VARIANT (TREE_TYPE (field)))
1780 return field;
1783 /* Otherwise, it could be nested, search harder. */
1784 if (DECL_NAME (field) == NULL_TREE
1785 && ANON_AGGR_TYPE_P (TREE_TYPE (field)))
1787 tree subfield = lookup_anon_field (TREE_TYPE (field), type);
1788 if (subfield)
1789 return subfield;
1792 return NULL_TREE;
1795 /* Build an expression representing OBJECT.MEMBER. OBJECT is an
1796 expression; MEMBER is a DECL or baselink. If ACCESS_PATH is
1797 non-NULL, it indicates the path to the base used to name MEMBER.
1798 If PRESERVE_REFERENCE is true, the expression returned will have
1799 REFERENCE_TYPE if the MEMBER does. Otherwise, the expression
1800 returned will have the type referred to by the reference.
1802 This function does not perform access control; that is either done
1803 earlier by the parser when the name of MEMBER is resolved to MEMBER
1804 itself, or later when overload resolution selects one of the
1805 functions indicated by MEMBER. */
1807 tree
1808 build_class_member_access_expr (tree object, tree member,
1809 tree access_path, bool preserve_reference)
1811 tree object_type;
1812 tree member_scope;
1813 tree result = NULL_TREE;
1815 if (error_operand_p (object) || error_operand_p (member))
1816 return error_mark_node;
1818 gcc_assert (DECL_P (member) || BASELINK_P (member));
1820 /* [expr.ref]
1822 The type of the first expression shall be "class object" (of a
1823 complete type). */
1824 object_type = TREE_TYPE (object);
1825 if (!currently_open_class (object_type)
1826 && !complete_type_or_else (object_type, object))
1827 return error_mark_node;
1828 if (!CLASS_TYPE_P (object_type))
1830 error ("request for member %qD in %qE, which is of non-class type %qT",
1831 member, object, object_type);
1832 return error_mark_node;
1835 /* The standard does not seem to actually say that MEMBER must be a
1836 member of OBJECT_TYPE. However, that is clearly what is
1837 intended. */
1838 if (DECL_P (member))
1840 member_scope = DECL_CLASS_CONTEXT (member);
1841 mark_used (member);
1842 if (TREE_DEPRECATED (member))
1843 warn_deprecated_use (member);
1845 else
1846 member_scope = BINFO_TYPE (BASELINK_ACCESS_BINFO (member));
1847 /* If MEMBER is from an anonymous aggregate, MEMBER_SCOPE will
1848 presently be the anonymous union. Go outwards until we find a
1849 type related to OBJECT_TYPE. */
1850 while (ANON_AGGR_TYPE_P (member_scope)
1851 && !same_type_ignoring_top_level_qualifiers_p (member_scope,
1852 object_type))
1853 member_scope = TYPE_CONTEXT (member_scope);
1854 if (!member_scope || !DERIVED_FROM_P (member_scope, object_type))
1856 if (TREE_CODE (member) == FIELD_DECL)
1857 error ("invalid use of nonstatic data member %qE", member);
1858 else
1859 error ("%qD is not a member of %qT", member, object_type);
1860 return error_mark_node;
1863 /* Transform `(a, b).x' into `(*(a, &b)).x', `(a ? b : c).x' into
1864 `(*(a ? &b : &c)).x', and so on. A COND_EXPR is only an lvalue
1865 in the front end; only _DECLs and _REFs are lvalues in the back end. */
1867 tree temp = unary_complex_lvalue (ADDR_EXPR, object);
1868 if (temp)
1869 object = build_indirect_ref (temp, NULL);
1872 /* In [expr.ref], there is an explicit list of the valid choices for
1873 MEMBER. We check for each of those cases here. */
1874 if (TREE_CODE (member) == VAR_DECL)
1876 /* A static data member. */
1877 result = member;
1878 /* If OBJECT has side-effects, they are supposed to occur. */
1879 if (TREE_SIDE_EFFECTS (object))
1880 result = build2 (COMPOUND_EXPR, TREE_TYPE (result), object, result);
1882 else if (TREE_CODE (member) == FIELD_DECL)
1884 /* A non-static data member. */
1885 bool null_object_p;
1886 int type_quals;
1887 tree member_type;
1889 null_object_p = (TREE_CODE (object) == INDIRECT_REF
1890 && integer_zerop (TREE_OPERAND (object, 0)));
1892 /* Convert OBJECT to the type of MEMBER. */
1893 if (!same_type_p (TYPE_MAIN_VARIANT (object_type),
1894 TYPE_MAIN_VARIANT (member_scope)))
1896 tree binfo;
1897 base_kind kind;
1899 binfo = lookup_base (access_path ? access_path : object_type,
1900 member_scope, ba_unique, &kind);
1901 if (binfo == error_mark_node)
1902 return error_mark_node;
1904 /* It is invalid to try to get to a virtual base of a
1905 NULL object. The most common cause is invalid use of
1906 offsetof macro. */
1907 if (null_object_p && kind == bk_via_virtual)
1909 error ("invalid access to non-static data member %qD of "
1910 "NULL object",
1911 member);
1912 error ("(perhaps the %<offsetof%> macro was used incorrectly)");
1913 return error_mark_node;
1916 /* Convert to the base. */
1917 object = build_base_path (PLUS_EXPR, object, binfo,
1918 /*nonnull=*/1);
1919 /* If we found the base successfully then we should be able
1920 to convert to it successfully. */
1921 gcc_assert (object != error_mark_node);
1924 /* Complain about other invalid uses of offsetof, even though they will
1925 give the right answer. Note that we complain whether or not they
1926 actually used the offsetof macro, since there's no way to know at this
1927 point. So we just give a warning, instead of a pedwarn. */
1928 /* Do not produce this warning for base class field references, because
1929 we know for a fact that didn't come from offsetof. This does occur
1930 in various testsuite cases where a null object is passed where a
1931 vtable access is required. */
1932 if (null_object_p && warn_invalid_offsetof
1933 && CLASSTYPE_NON_POD_P (object_type)
1934 && !DECL_FIELD_IS_BASE (member)
1935 && !skip_evaluation)
1937 warning (0, "invalid access to non-static data member %qD of NULL object",
1938 member);
1939 warning (0, "(perhaps the %<offsetof%> macro was used incorrectly)");
1942 /* If MEMBER is from an anonymous aggregate, we have converted
1943 OBJECT so that it refers to the class containing the
1944 anonymous union. Generate a reference to the anonymous union
1945 itself, and recur to find MEMBER. */
1946 if (ANON_AGGR_TYPE_P (DECL_CONTEXT (member))
1947 /* When this code is called from build_field_call, the
1948 object already has the type of the anonymous union.
1949 That is because the COMPONENT_REF was already
1950 constructed, and was then disassembled before calling
1951 build_field_call. After the function-call code is
1952 cleaned up, this waste can be eliminated. */
1953 && (!same_type_ignoring_top_level_qualifiers_p
1954 (TREE_TYPE (object), DECL_CONTEXT (member))))
1956 tree anonymous_union;
1958 anonymous_union = lookup_anon_field (TREE_TYPE (object),
1959 DECL_CONTEXT (member));
1960 object = build_class_member_access_expr (object,
1961 anonymous_union,
1962 /*access_path=*/NULL_TREE,
1963 preserve_reference);
1966 /* Compute the type of the field, as described in [expr.ref]. */
1967 type_quals = TYPE_UNQUALIFIED;
1968 member_type = TREE_TYPE (member);
1969 if (TREE_CODE (member_type) != REFERENCE_TYPE)
1971 type_quals = (cp_type_quals (member_type)
1972 | cp_type_quals (object_type));
1974 /* A field is const (volatile) if the enclosing object, or the
1975 field itself, is const (volatile). But, a mutable field is
1976 not const, even within a const object. */
1977 if (DECL_MUTABLE_P (member))
1978 type_quals &= ~TYPE_QUAL_CONST;
1979 member_type = cp_build_qualified_type (member_type, type_quals);
1982 result = build3 (COMPONENT_REF, member_type, object, member,
1983 NULL_TREE);
1984 result = fold_if_not_in_template (result);
1986 /* Mark the expression const or volatile, as appropriate. Even
1987 though we've dealt with the type above, we still have to mark the
1988 expression itself. */
1989 if (type_quals & TYPE_QUAL_CONST)
1990 TREE_READONLY (result) = 1;
1991 if (type_quals & TYPE_QUAL_VOLATILE)
1992 TREE_THIS_VOLATILE (result) = 1;
1994 else if (BASELINK_P (member))
1996 /* The member is a (possibly overloaded) member function. */
1997 tree functions;
1998 tree type;
2000 /* If the MEMBER is exactly one static member function, then we
2001 know the type of the expression. Otherwise, we must wait
2002 until overload resolution has been performed. */
2003 functions = BASELINK_FUNCTIONS (member);
2004 if (TREE_CODE (functions) == FUNCTION_DECL
2005 && DECL_STATIC_FUNCTION_P (functions))
2006 type = TREE_TYPE (functions);
2007 else
2008 type = unknown_type_node;
2009 /* Note that we do not convert OBJECT to the BASELINK_BINFO
2010 base. That will happen when the function is called. */
2011 result = build3 (COMPONENT_REF, type, object, member, NULL_TREE);
2013 else if (TREE_CODE (member) == CONST_DECL)
2015 /* The member is an enumerator. */
2016 result = member;
2017 /* If OBJECT has side-effects, they are supposed to occur. */
2018 if (TREE_SIDE_EFFECTS (object))
2019 result = build2 (COMPOUND_EXPR, TREE_TYPE (result),
2020 object, result);
2022 else
2024 error ("invalid use of %qD", member);
2025 return error_mark_node;
2028 if (!preserve_reference)
2029 /* [expr.ref]
2031 If E2 is declared to have type "reference to T", then ... the
2032 type of E1.E2 is T. */
2033 result = convert_from_reference (result);
2035 return result;
2038 /* Return the destructor denoted by OBJECT.SCOPE::~DTOR_NAME, or, if
2039 SCOPE is NULL, by OBJECT.~DTOR_NAME. */
2041 static tree
2042 lookup_destructor (tree object, tree scope, tree dtor_name)
2044 tree object_type = TREE_TYPE (object);
2045 tree dtor_type = TREE_OPERAND (dtor_name, 0);
2046 tree expr;
2048 if (scope && !check_dtor_name (scope, dtor_type))
2050 error ("qualified type %qT does not match destructor name ~%qT",
2051 scope, dtor_type);
2052 return error_mark_node;
2054 if (!DERIVED_FROM_P (dtor_type, TYPE_MAIN_VARIANT (object_type)))
2056 error ("the type being destroyed is %qT, but the destructor refers to %qT",
2057 TYPE_MAIN_VARIANT (object_type), dtor_type);
2058 return error_mark_node;
2060 expr = lookup_member (dtor_type, complete_dtor_identifier,
2061 /*protect=*/1, /*want_type=*/false);
2062 expr = (adjust_result_of_qualified_name_lookup
2063 (expr, dtor_type, object_type));
2064 return expr;
2067 /* An expression of the form "A::template B" has been resolved to
2068 DECL. Issue a diagnostic if B is not a template or template
2069 specialization. */
2071 void
2072 check_template_keyword (tree decl)
2074 /* The standard says:
2076 [temp.names]
2078 If a name prefixed by the keyword template is not a member
2079 template, the program is ill-formed.
2081 DR 228 removed the restriction that the template be a member
2082 template.
2084 DR 96, if accepted would add the further restriction that explicit
2085 template arguments must be provided if the template keyword is
2086 used, but, as of 2005-10-16, that DR is still in "drafting". If
2087 this DR is accepted, then the semantic checks here can be
2088 simplified, as the entity named must in fact be a template
2089 specialization, rather than, as at present, a set of overloaded
2090 functions containing at least one template function. */
2091 if (TREE_CODE (decl) != TEMPLATE_DECL
2092 && TREE_CODE (decl) != TEMPLATE_ID_EXPR)
2094 if (!is_overloaded_fn (decl))
2095 pedwarn ("%qD is not a template", decl);
2096 else
2098 tree fns;
2099 fns = decl;
2100 if (BASELINK_P (fns))
2101 fns = BASELINK_FUNCTIONS (fns);
2102 while (fns)
2104 tree fn = OVL_CURRENT (fns);
2105 if (TREE_CODE (fn) == TEMPLATE_DECL
2106 || TREE_CODE (fn) == TEMPLATE_ID_EXPR)
2107 break;
2108 if (TREE_CODE (fn) == FUNCTION_DECL
2109 && DECL_USE_TEMPLATE (fn)
2110 && PRIMARY_TEMPLATE_P (DECL_TI_TEMPLATE (fn)))
2111 break;
2112 fns = OVL_NEXT (fns);
2114 if (!fns)
2115 pedwarn ("%qD is not a template", decl);
2120 /* This function is called by the parser to process a class member
2121 access expression of the form OBJECT.NAME. NAME is a node used by
2122 the parser to represent a name; it is not yet a DECL. It may,
2123 however, be a BASELINK where the BASELINK_FUNCTIONS is a
2124 TEMPLATE_ID_EXPR. Templates must be looked up by the parser, and
2125 there is no reason to do the lookup twice, so the parser keeps the
2126 BASELINK. TEMPLATE_P is true iff NAME was explicitly declared to
2127 be a template via the use of the "A::template B" syntax. */
2129 tree
2130 finish_class_member_access_expr (tree object, tree name, bool template_p)
2132 tree expr;
2133 tree object_type;
2134 tree member;
2135 tree access_path = NULL_TREE;
2136 tree orig_object = object;
2137 tree orig_name = name;
2139 if (object == error_mark_node || name == error_mark_node)
2140 return error_mark_node;
2142 /* If OBJECT is an ObjC class instance, we must obey ObjC access rules. */
2143 if (!objc_is_public (object, name))
2144 return error_mark_node;
2146 object_type = TREE_TYPE (object);
2148 if (processing_template_decl)
2150 if (/* If OBJECT_TYPE is dependent, so is OBJECT.NAME. */
2151 dependent_type_p (object_type)
2152 /* If NAME is just an IDENTIFIER_NODE, then the expression
2153 is dependent. */
2154 || TREE_CODE (object) == IDENTIFIER_NODE
2155 /* If NAME is "f<args>", where either 'f' or 'args' is
2156 dependent, then the expression is dependent. */
2157 || (TREE_CODE (name) == TEMPLATE_ID_EXPR
2158 && dependent_template_id_p (TREE_OPERAND (name, 0),
2159 TREE_OPERAND (name, 1)))
2160 /* If NAME is "T::X" where "T" is dependent, then the
2161 expression is dependent. */
2162 || (TREE_CODE (name) == SCOPE_REF
2163 && TYPE_P (TREE_OPERAND (name, 0))
2164 && dependent_type_p (TREE_OPERAND (name, 0))))
2165 return build_min_nt (COMPONENT_REF, object, name, NULL_TREE);
2166 object = build_non_dependent_expr (object);
2169 /* [expr.ref]
2171 The type of the first expression shall be "class object" (of a
2172 complete type). */
2173 if (!currently_open_class (object_type)
2174 && !complete_type_or_else (object_type, object))
2175 return error_mark_node;
2176 if (!CLASS_TYPE_P (object_type))
2178 error ("request for member %qD in %qE, which is of non-class type %qT",
2179 name, object, object_type);
2180 return error_mark_node;
2183 if (BASELINK_P (name))
2184 /* A member function that has already been looked up. */
2185 member = name;
2186 else
2188 bool is_template_id = false;
2189 tree template_args = NULL_TREE;
2190 tree scope;
2192 if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
2194 is_template_id = true;
2195 template_args = TREE_OPERAND (name, 1);
2196 name = TREE_OPERAND (name, 0);
2198 if (TREE_CODE (name) == OVERLOAD)
2199 name = DECL_NAME (get_first_fn (name));
2200 else if (DECL_P (name))
2201 name = DECL_NAME (name);
2204 if (TREE_CODE (name) == SCOPE_REF)
2206 /* A qualified name. The qualifying class or namespace `S'
2207 has already been looked up; it is either a TYPE or a
2208 NAMESPACE_DECL. */
2209 scope = TREE_OPERAND (name, 0);
2210 name = TREE_OPERAND (name, 1);
2212 /* If SCOPE is a namespace, then the qualified name does not
2213 name a member of OBJECT_TYPE. */
2214 if (TREE_CODE (scope) == NAMESPACE_DECL)
2216 error ("%<%D::%D%> is not a member of %qT",
2217 scope, name, object_type);
2218 return error_mark_node;
2221 gcc_assert (CLASS_TYPE_P (scope));
2222 gcc_assert (TREE_CODE (name) == IDENTIFIER_NODE
2223 || TREE_CODE (name) == BIT_NOT_EXPR);
2225 /* Find the base of OBJECT_TYPE corresponding to SCOPE. */
2226 access_path = lookup_base (object_type, scope, ba_check, NULL);
2227 if (access_path == error_mark_node)
2228 return error_mark_node;
2229 if (!access_path)
2231 error ("%qT is not a base of %qT", scope, object_type);
2232 return error_mark_node;
2235 else
2237 scope = NULL_TREE;
2238 access_path = object_type;
2241 if (TREE_CODE (name) == BIT_NOT_EXPR)
2242 member = lookup_destructor (object, scope, name);
2243 else
2245 /* Look up the member. */
2246 member = lookup_member (access_path, name, /*protect=*/1,
2247 /*want_type=*/false);
2248 if (member == NULL_TREE)
2250 error ("%qD has no member named %qE", object_type, name);
2251 return error_mark_node;
2253 if (member == error_mark_node)
2254 return error_mark_node;
2257 if (is_template_id)
2259 tree template = member;
2261 if (BASELINK_P (template))
2262 template = lookup_template_function (template, template_args);
2263 else
2265 error ("%qD is not a member template function", name);
2266 return error_mark_node;
2271 if (TREE_DEPRECATED (member))
2272 warn_deprecated_use (member);
2274 if (template_p)
2275 check_template_keyword (member);
2277 expr = build_class_member_access_expr (object, member, access_path,
2278 /*preserve_reference=*/false);
2279 if (processing_template_decl && expr != error_mark_node)
2281 if (BASELINK_P (member))
2283 if (TREE_CODE (orig_name) == SCOPE_REF)
2284 BASELINK_QUALIFIED_P (member) = 1;
2285 orig_name = member;
2287 return build_min_non_dep (COMPONENT_REF, expr,
2288 orig_object, orig_name,
2289 NULL_TREE);
2292 return expr;
2295 /* Return an expression for the MEMBER_NAME field in the internal
2296 representation of PTRMEM, a pointer-to-member function. (Each
2297 pointer-to-member function type gets its own RECORD_TYPE so it is
2298 more convenient to access the fields by name than by FIELD_DECL.)
2299 This routine converts the NAME to a FIELD_DECL and then creates the
2300 node for the complete expression. */
2302 tree
2303 build_ptrmemfunc_access_expr (tree ptrmem, tree member_name)
2305 tree ptrmem_type;
2306 tree member;
2307 tree member_type;
2309 /* This code is a stripped down version of
2310 build_class_member_access_expr. It does not work to use that
2311 routine directly because it expects the object to be of class
2312 type. */
2313 ptrmem_type = TREE_TYPE (ptrmem);
2314 gcc_assert (TYPE_PTRMEMFUNC_P (ptrmem_type));
2315 member = lookup_member (ptrmem_type, member_name, /*protect=*/0,
2316 /*want_type=*/false);
2317 member_type = cp_build_qualified_type (TREE_TYPE (member),
2318 cp_type_quals (ptrmem_type));
2319 return fold_build3 (COMPONENT_REF, member_type,
2320 ptrmem, member, NULL_TREE);
2323 /* Given an expression PTR for a pointer, return an expression
2324 for the value pointed to.
2325 ERRORSTRING is the name of the operator to appear in error messages.
2327 This function may need to overload OPERATOR_FNNAME.
2328 Must also handle REFERENCE_TYPEs for C++. */
2330 tree
2331 build_x_indirect_ref (tree expr, const char *errorstring)
2333 tree orig_expr = expr;
2334 tree rval;
2336 if (processing_template_decl)
2338 if (type_dependent_expression_p (expr))
2339 return build_min_nt (INDIRECT_REF, expr);
2340 expr = build_non_dependent_expr (expr);
2343 rval = build_new_op (INDIRECT_REF, LOOKUP_NORMAL, expr, NULL_TREE,
2344 NULL_TREE, /*overloaded_p=*/NULL);
2345 if (!rval)
2346 rval = build_indirect_ref (expr, errorstring);
2348 if (processing_template_decl && rval != error_mark_node)
2349 return build_min_non_dep (INDIRECT_REF, rval, orig_expr);
2350 else
2351 return rval;
2354 tree
2355 build_indirect_ref (tree ptr, const char *errorstring)
2357 tree pointer, type;
2359 if (ptr == error_mark_node)
2360 return error_mark_node;
2362 if (ptr == current_class_ptr)
2363 return current_class_ref;
2365 pointer = (TREE_CODE (TREE_TYPE (ptr)) == REFERENCE_TYPE
2366 ? ptr : decay_conversion (ptr));
2367 type = TREE_TYPE (pointer);
2369 if (POINTER_TYPE_P (type))
2371 /* [expr.unary.op]
2373 If the type of the expression is "pointer to T," the type
2374 of the result is "T."
2376 We must use the canonical variant because certain parts of
2377 the back end, like fold, do pointer comparisons between
2378 types. */
2379 tree t = canonical_type_variant (TREE_TYPE (type));
2381 if (TREE_CODE (ptr) == CONVERT_EXPR
2382 || TREE_CODE (ptr) == NOP_EXPR
2383 || TREE_CODE (ptr) == VIEW_CONVERT_EXPR)
2385 /* If a warning is issued, mark it to avoid duplicates from
2386 the backend. This only needs to be done at
2387 warn_strict_aliasing > 2. */
2388 if (warn_strict_aliasing > 2)
2389 if (strict_aliasing_warning (TREE_TYPE (TREE_OPERAND (ptr, 0)),
2390 type, TREE_OPERAND (ptr, 0)))
2391 TREE_NO_WARNING (ptr) = 1;
2394 if (VOID_TYPE_P (t))
2396 /* A pointer to incomplete type (other than cv void) can be
2397 dereferenced [expr.unary.op]/1 */
2398 error ("%qT is not a pointer-to-object type", type);
2399 return error_mark_node;
2401 else if (TREE_CODE (pointer) == ADDR_EXPR
2402 && same_type_p (t, TREE_TYPE (TREE_OPERAND (pointer, 0))))
2403 /* The POINTER was something like `&x'. We simplify `*&x' to
2404 `x'. */
2405 return TREE_OPERAND (pointer, 0);
2406 else
2408 tree ref = build1 (INDIRECT_REF, t, pointer);
2410 /* We *must* set TREE_READONLY when dereferencing a pointer to const,
2411 so that we get the proper error message if the result is used
2412 to assign to. Also, &* is supposed to be a no-op. */
2413 TREE_READONLY (ref) = CP_TYPE_CONST_P (t);
2414 TREE_THIS_VOLATILE (ref) = CP_TYPE_VOLATILE_P (t);
2415 TREE_SIDE_EFFECTS (ref)
2416 = (TREE_THIS_VOLATILE (ref) || TREE_SIDE_EFFECTS (pointer));
2417 return ref;
2420 /* `pointer' won't be an error_mark_node if we were given a
2421 pointer to member, so it's cool to check for this here. */
2422 else if (TYPE_PTR_TO_MEMBER_P (type))
2423 error ("invalid use of %qs on pointer to member", errorstring);
2424 else if (pointer != error_mark_node)
2426 if (errorstring)
2427 error ("invalid type argument of %qs", errorstring);
2428 else
2429 error ("invalid type argument");
2431 return error_mark_node;
2434 /* This handles expressions of the form "a[i]", which denotes
2435 an array reference.
2437 This is logically equivalent in C to *(a+i), but we may do it differently.
2438 If A is a variable or a member, we generate a primitive ARRAY_REF.
2439 This avoids forcing the array out of registers, and can work on
2440 arrays that are not lvalues (for example, members of structures returned
2441 by functions).
2443 If INDEX is of some user-defined type, it must be converted to
2444 integer type. Otherwise, to make a compatible PLUS_EXPR, it
2445 will inherit the type of the array, which will be some pointer type. */
2447 tree
2448 build_array_ref (tree array, tree idx)
2450 if (idx == 0)
2452 error ("subscript missing in array reference");
2453 return error_mark_node;
2456 if (TREE_TYPE (array) == error_mark_node
2457 || TREE_TYPE (idx) == error_mark_node)
2458 return error_mark_node;
2460 /* If ARRAY is a COMPOUND_EXPR or COND_EXPR, move our reference
2461 inside it. */
2462 switch (TREE_CODE (array))
2464 case COMPOUND_EXPR:
2466 tree value = build_array_ref (TREE_OPERAND (array, 1), idx);
2467 return build2 (COMPOUND_EXPR, TREE_TYPE (value),
2468 TREE_OPERAND (array, 0), value);
2471 case COND_EXPR:
2472 return build_conditional_expr
2473 (TREE_OPERAND (array, 0),
2474 build_array_ref (TREE_OPERAND (array, 1), idx),
2475 build_array_ref (TREE_OPERAND (array, 2), idx));
2477 default:
2478 break;
2481 if (TREE_CODE (TREE_TYPE (array)) == ARRAY_TYPE)
2483 tree rval, type;
2485 warn_array_subscript_with_type_char (idx);
2487 if (!INTEGRAL_OR_ENUMERATION_TYPE_P (TREE_TYPE (idx)))
2489 error ("array subscript is not an integer");
2490 return error_mark_node;
2493 /* Apply integral promotions *after* noticing character types.
2494 (It is unclear why we do these promotions -- the standard
2495 does not say that we should. In fact, the natural thing would
2496 seem to be to convert IDX to ptrdiff_t; we're performing
2497 pointer arithmetic.) */
2498 idx = perform_integral_promotions (idx);
2500 /* An array that is indexed by a non-constant
2501 cannot be stored in a register; we must be able to do
2502 address arithmetic on its address.
2503 Likewise an array of elements of variable size. */
2504 if (TREE_CODE (idx) != INTEGER_CST
2505 || (COMPLETE_TYPE_P (TREE_TYPE (TREE_TYPE (array)))
2506 && (TREE_CODE (TYPE_SIZE (TREE_TYPE (TREE_TYPE (array))))
2507 != INTEGER_CST)))
2509 if (!cxx_mark_addressable (array))
2510 return error_mark_node;
2513 /* An array that is indexed by a constant value which is not within
2514 the array bounds cannot be stored in a register either; because we
2515 would get a crash in store_bit_field/extract_bit_field when trying
2516 to access a non-existent part of the register. */
2517 if (TREE_CODE (idx) == INTEGER_CST
2518 && TYPE_DOMAIN (TREE_TYPE (array))
2519 && ! int_fits_type_p (idx, TYPE_DOMAIN (TREE_TYPE (array))))
2521 if (!cxx_mark_addressable (array))
2522 return error_mark_node;
2525 if (pedantic && !lvalue_p (array))
2526 pedwarn ("ISO C++ forbids subscripting non-lvalue array");
2528 /* Note in C++ it is valid to subscript a `register' array, since
2529 it is valid to take the address of something with that
2530 storage specification. */
2531 if (extra_warnings)
2533 tree foo = array;
2534 while (TREE_CODE (foo) == COMPONENT_REF)
2535 foo = TREE_OPERAND (foo, 0);
2536 if (TREE_CODE (foo) == VAR_DECL && DECL_REGISTER (foo))
2537 warning (OPT_Wextra, "subscripting array declared %<register%>");
2540 type = TREE_TYPE (TREE_TYPE (array));
2541 rval = build4 (ARRAY_REF, type, array, idx, NULL_TREE, NULL_TREE);
2542 /* Array ref is const/volatile if the array elements are
2543 or if the array is.. */
2544 TREE_READONLY (rval)
2545 |= (CP_TYPE_CONST_P (type) | TREE_READONLY (array));
2546 TREE_SIDE_EFFECTS (rval)
2547 |= (CP_TYPE_VOLATILE_P (type) | TREE_SIDE_EFFECTS (array));
2548 TREE_THIS_VOLATILE (rval)
2549 |= (CP_TYPE_VOLATILE_P (type) | TREE_THIS_VOLATILE (array));
2550 return require_complete_type (fold_if_not_in_template (rval));
2554 tree ar = default_conversion (array);
2555 tree ind = default_conversion (idx);
2557 /* Put the integer in IND to simplify error checking. */
2558 if (TREE_CODE (TREE_TYPE (ar)) == INTEGER_TYPE)
2560 tree temp = ar;
2561 ar = ind;
2562 ind = temp;
2565 if (ar == error_mark_node)
2566 return ar;
2568 if (TREE_CODE (TREE_TYPE (ar)) != POINTER_TYPE)
2570 error ("subscripted value is neither array nor pointer");
2571 return error_mark_node;
2573 if (TREE_CODE (TREE_TYPE (ind)) != INTEGER_TYPE)
2575 error ("array subscript is not an integer");
2576 return error_mark_node;
2579 warn_array_subscript_with_type_char (idx);
2581 return build_indirect_ref (cp_build_binary_op (PLUS_EXPR, ar, ind),
2582 "array indexing");
2586 /* Resolve a pointer to member function. INSTANCE is the object
2587 instance to use, if the member points to a virtual member.
2589 This used to avoid checking for virtual functions if basetype
2590 has no virtual functions, according to an earlier ANSI draft.
2591 With the final ISO C++ rules, such an optimization is
2592 incorrect: A pointer to a derived member can be static_cast
2593 to pointer-to-base-member, as long as the dynamic object
2594 later has the right member. */
2596 tree
2597 get_member_function_from_ptrfunc (tree *instance_ptrptr, tree function)
2599 if (TREE_CODE (function) == OFFSET_REF)
2600 function = TREE_OPERAND (function, 1);
2602 if (TYPE_PTRMEMFUNC_P (TREE_TYPE (function)))
2604 tree idx, delta, e1, e2, e3, vtbl, basetype;
2605 tree fntype = TYPE_PTRMEMFUNC_FN_TYPE (TREE_TYPE (function));
2607 tree instance_ptr = *instance_ptrptr;
2608 tree instance_save_expr = 0;
2609 if (instance_ptr == error_mark_node)
2611 if (TREE_CODE (function) == PTRMEM_CST)
2613 /* Extracting the function address from a pmf is only
2614 allowed with -Wno-pmf-conversions. It only works for
2615 pmf constants. */
2616 e1 = build_addr_func (PTRMEM_CST_MEMBER (function));
2617 e1 = convert (fntype, e1);
2618 return e1;
2620 else
2622 error ("object missing in use of %qE", function);
2623 return error_mark_node;
2627 if (TREE_SIDE_EFFECTS (instance_ptr))
2628 instance_ptr = instance_save_expr = save_expr (instance_ptr);
2630 if (TREE_SIDE_EFFECTS (function))
2631 function = save_expr (function);
2633 /* Start by extracting all the information from the PMF itself. */
2634 e3 = pfn_from_ptrmemfunc (function);
2635 delta = delta_from_ptrmemfunc (function);
2636 idx = build1 (NOP_EXPR, vtable_index_type, e3);
2637 switch (TARGET_PTRMEMFUNC_VBIT_LOCATION)
2639 case ptrmemfunc_vbit_in_pfn:
2640 e1 = cp_build_binary_op (BIT_AND_EXPR, idx, integer_one_node);
2641 idx = cp_build_binary_op (MINUS_EXPR, idx, integer_one_node);
2642 break;
2644 case ptrmemfunc_vbit_in_delta:
2645 e1 = cp_build_binary_op (BIT_AND_EXPR, delta, integer_one_node);
2646 delta = cp_build_binary_op (RSHIFT_EXPR, delta, integer_one_node);
2647 break;
2649 default:
2650 gcc_unreachable ();
2653 /* Convert down to the right base before using the instance. A
2654 special case is that in a pointer to member of class C, C may
2655 be incomplete. In that case, the function will of course be
2656 a member of C, and no conversion is required. In fact,
2657 lookup_base will fail in that case, because incomplete
2658 classes do not have BINFOs. */
2659 basetype = TYPE_METHOD_BASETYPE (TREE_TYPE (fntype));
2660 if (!same_type_ignoring_top_level_qualifiers_p
2661 (basetype, TREE_TYPE (TREE_TYPE (instance_ptr))))
2663 basetype = lookup_base (TREE_TYPE (TREE_TYPE (instance_ptr)),
2664 basetype, ba_check, NULL);
2665 instance_ptr = build_base_path (PLUS_EXPR, instance_ptr, basetype,
2667 if (instance_ptr == error_mark_node)
2668 return error_mark_node;
2670 /* ...and then the delta in the PMF. */
2671 instance_ptr = build2 (POINTER_PLUS_EXPR, TREE_TYPE (instance_ptr),
2672 instance_ptr, fold_convert (sizetype, delta));
2674 /* Hand back the adjusted 'this' argument to our caller. */
2675 *instance_ptrptr = instance_ptr;
2677 /* Next extract the vtable pointer from the object. */
2678 vtbl = build1 (NOP_EXPR, build_pointer_type (vtbl_ptr_type_node),
2679 instance_ptr);
2680 vtbl = build_indirect_ref (vtbl, NULL);
2682 /* Finally, extract the function pointer from the vtable. */
2683 e2 = fold_build2 (POINTER_PLUS_EXPR, TREE_TYPE (vtbl), vtbl,
2684 fold_convert (sizetype, idx));
2685 e2 = build_indirect_ref (e2, NULL);
2686 TREE_CONSTANT (e2) = 1;
2687 TREE_INVARIANT (e2) = 1;
2689 /* When using function descriptors, the address of the
2690 vtable entry is treated as a function pointer. */
2691 if (TARGET_VTABLE_USES_DESCRIPTORS)
2692 e2 = build1 (NOP_EXPR, TREE_TYPE (e2),
2693 build_unary_op (ADDR_EXPR, e2, /*noconvert=*/1));
2695 e2 = fold_convert (TREE_TYPE (e3), e2);
2696 e1 = build_conditional_expr (e1, e2, e3);
2698 /* Make sure this doesn't get evaluated first inside one of the
2699 branches of the COND_EXPR. */
2700 if (instance_save_expr)
2701 e1 = build2 (COMPOUND_EXPR, TREE_TYPE (e1),
2702 instance_save_expr, e1);
2704 function = e1;
2706 return function;
2709 tree
2710 build_function_call (tree function, tree params)
2712 tree fntype, fndecl;
2713 tree name = NULL_TREE;
2714 int is_method;
2715 tree original = function;
2716 int nargs, parm_types_len;
2717 tree *argarray;
2718 tree parm_types;
2720 /* For Objective-C, convert any calls via a cast to OBJC_TYPE_REF
2721 expressions, like those used for ObjC messenger dispatches. */
2722 function = objc_rewrite_function_call (function, params);
2724 /* build_c_cast puts on a NOP_EXPR to make the result not an lvalue.
2725 Strip such NOP_EXPRs, since FUNCTION is used in non-lvalue context. */
2726 if (TREE_CODE (function) == NOP_EXPR
2727 && TREE_TYPE (function) == TREE_TYPE (TREE_OPERAND (function, 0)))
2728 function = TREE_OPERAND (function, 0);
2730 if (TREE_CODE (function) == FUNCTION_DECL)
2732 name = DECL_NAME (function);
2734 mark_used (function);
2735 fndecl = function;
2737 /* Convert anything with function type to a pointer-to-function. */
2738 if (pedantic && DECL_MAIN_P (function))
2739 pedwarn ("ISO C++ forbids calling %<::main%> from within program");
2741 /* Differs from default_conversion by not setting TREE_ADDRESSABLE
2742 (because calling an inline function does not mean the function
2743 needs to be separately compiled). */
2745 if (DECL_INLINE (function))
2746 function = inline_conversion (function);
2747 else
2748 function = build_addr_func (function);
2750 else
2752 fndecl = NULL_TREE;
2754 function = build_addr_func (function);
2757 if (function == error_mark_node)
2758 return error_mark_node;
2760 fntype = TREE_TYPE (function);
2762 if (TYPE_PTRMEMFUNC_P (fntype))
2764 error ("must use %<.*%> or %<->*%> to call pointer-to-member "
2765 "function in %<%E (...)%>",
2766 original);
2767 return error_mark_node;
2770 is_method = (TREE_CODE (fntype) == POINTER_TYPE
2771 && TREE_CODE (TREE_TYPE (fntype)) == METHOD_TYPE);
2773 if (!((TREE_CODE (fntype) == POINTER_TYPE
2774 && TREE_CODE (TREE_TYPE (fntype)) == FUNCTION_TYPE)
2775 || is_method
2776 || TREE_CODE (function) == TEMPLATE_ID_EXPR))
2778 error ("%qE cannot be used as a function", original);
2779 return error_mark_node;
2782 /* fntype now gets the type of function pointed to. */
2783 fntype = TREE_TYPE (fntype);
2784 parm_types = TYPE_ARG_TYPES (fntype);
2786 /* Allocate storage for converted arguments. */
2787 parm_types_len = list_length (parm_types);
2788 nargs = list_length (params);
2789 if (parm_types_len > nargs)
2790 nargs = parm_types_len;
2791 argarray = (tree *) alloca (nargs * sizeof (tree));
2793 /* Convert the parameters to the types declared in the
2794 function prototype, or apply default promotions. */
2795 nargs = convert_arguments (nargs, argarray, parm_types,
2796 params, fndecl, LOOKUP_NORMAL);
2797 if (nargs < 0)
2798 return error_mark_node;
2800 /* Check for errors in format strings and inappropriately
2801 null parameters. */
2803 check_function_arguments (TYPE_ATTRIBUTES (fntype), nargs, argarray,
2804 parm_types);
2806 return build_cxx_call (function, nargs, argarray);
2809 /* Convert the actual parameter expressions in the list VALUES
2810 to the types in the list TYPELIST.
2811 If parmdecls is exhausted, or when an element has NULL as its type,
2812 perform the default conversions.
2814 Store the converted arguments in ARGARRAY. NARGS is the size of this array.
2816 NAME is an IDENTIFIER_NODE or 0. It is used only for error messages.
2818 This is also where warnings about wrong number of args are generated.
2820 Returns the actual number of arguments processed (which might be less
2821 than NARGS), or -1 on error.
2823 VALUES is a chain of TREE_LIST nodes with the elements of the list
2824 in the TREE_VALUE slots of those nodes.
2826 In C++, unspecified trailing parameters can be filled in with their
2827 default arguments, if such were specified. Do so here. */
2829 static int
2830 convert_arguments (int nargs, tree *argarray,
2831 tree typelist, tree values, tree fndecl, int flags)
2833 tree typetail, valtail;
2834 const char *called_thing = 0;
2835 int i = 0;
2837 /* Argument passing is always copy-initialization. */
2838 flags |= LOOKUP_ONLYCONVERTING;
2840 if (fndecl)
2842 if (TREE_CODE (TREE_TYPE (fndecl)) == METHOD_TYPE)
2844 if (DECL_NAME (fndecl) == NULL_TREE
2845 || IDENTIFIER_HAS_TYPE_VALUE (DECL_NAME (fndecl)))
2846 called_thing = "constructor";
2847 else
2848 called_thing = "member function";
2850 else
2851 called_thing = "function";
2854 for (valtail = values, typetail = typelist;
2855 valtail;
2856 valtail = TREE_CHAIN (valtail), i++)
2858 tree type = typetail ? TREE_VALUE (typetail) : 0;
2859 tree val = TREE_VALUE (valtail);
2861 if (val == error_mark_node || type == error_mark_node)
2862 return -1;
2864 if (type == void_type_node)
2866 if (fndecl)
2868 error ("too many arguments to %s %q+#D", called_thing, fndecl);
2869 error ("at this point in file");
2871 else
2872 error ("too many arguments to function");
2873 return i;
2876 /* build_c_cast puts on a NOP_EXPR to make the result not an lvalue.
2877 Strip such NOP_EXPRs, since VAL is used in non-lvalue context. */
2878 if (TREE_CODE (val) == NOP_EXPR
2879 && TREE_TYPE (val) == TREE_TYPE (TREE_OPERAND (val, 0))
2880 && (type == 0 || TREE_CODE (type) != REFERENCE_TYPE))
2881 val = TREE_OPERAND (val, 0);
2883 if (type == 0 || TREE_CODE (type) != REFERENCE_TYPE)
2885 if (TREE_CODE (TREE_TYPE (val)) == ARRAY_TYPE
2886 || TREE_CODE (TREE_TYPE (val)) == FUNCTION_TYPE
2887 || TREE_CODE (TREE_TYPE (val)) == METHOD_TYPE)
2888 val = decay_conversion (val);
2891 if (val == error_mark_node)
2892 return -1;
2894 if (type != 0)
2896 /* Formal parm type is specified by a function prototype. */
2897 tree parmval;
2899 if (!COMPLETE_TYPE_P (complete_type (type)))
2901 if (fndecl)
2902 error ("parameter %P of %qD has incomplete type %qT",
2903 i, fndecl, type);
2904 else
2905 error ("parameter %P has incomplete type %qT", i, type);
2906 parmval = error_mark_node;
2908 else
2910 parmval = convert_for_initialization
2911 (NULL_TREE, type, val, flags,
2912 "argument passing", fndecl, i);
2913 parmval = convert_for_arg_passing (type, parmval);
2916 if (parmval == error_mark_node)
2917 return -1;
2919 argarray[i] = parmval;
2921 else
2923 if (fndecl && DECL_BUILT_IN (fndecl)
2924 && DECL_FUNCTION_CODE (fndecl) == BUILT_IN_CONSTANT_P)
2925 /* Don't do ellipsis conversion for __built_in_constant_p
2926 as this will result in spurious warnings for non-POD
2927 types. */
2928 val = require_complete_type (val);
2929 else
2930 val = convert_arg_to_ellipsis (val);
2932 argarray[i] = val;
2935 if (typetail)
2936 typetail = TREE_CHAIN (typetail);
2939 if (typetail != 0 && typetail != void_list_node)
2941 /* See if there are default arguments that can be used. Because
2942 we hold default arguments in the FUNCTION_TYPE (which is so
2943 wrong), we can see default parameters here from deduced
2944 contexts (and via typeof) for indirect function calls.
2945 Fortunately we know whether we have a function decl to
2946 provide default arguments in a language conformant
2947 manner. */
2948 if (fndecl && TREE_PURPOSE (typetail)
2949 && TREE_CODE (TREE_PURPOSE (typetail)) != DEFAULT_ARG)
2951 for (; typetail != void_list_node; ++i)
2953 tree parmval
2954 = convert_default_arg (TREE_VALUE (typetail),
2955 TREE_PURPOSE (typetail),
2956 fndecl, i);
2958 if (parmval == error_mark_node)
2959 return -1;
2961 argarray[i] = parmval;
2962 typetail = TREE_CHAIN (typetail);
2963 /* ends with `...'. */
2964 if (typetail == NULL_TREE)
2965 break;
2968 else
2970 if (fndecl)
2972 error ("too few arguments to %s %q+#D", called_thing, fndecl);
2973 error ("at this point in file");
2975 else
2976 error ("too few arguments to function");
2977 return -1;
2981 gcc_assert (i <= nargs);
2982 return i;
2985 /* Build a binary-operation expression, after performing default
2986 conversions on the operands. CODE is the kind of expression to
2987 build. ARG1 and ARG2 are the arguments. ARG1_CODE and ARG2_CODE
2988 are the tree codes which correspond to ARG1 and ARG2 when issuing
2989 warnings about possibly misplaced parentheses. They may differ
2990 from the TREE_CODE of ARG1 and ARG2 if the parser has done constant
2991 folding (e.g., if the parser sees "a | 1 + 1", it may call this
2992 routine with ARG2 being an INTEGER_CST and ARG2_CODE == PLUS_EXPR).
2993 To avoid issuing any parentheses warnings, pass ARG1_CODE and/or
2994 ARG2_CODE as ERROR_MARK. */
2996 tree
2997 build_x_binary_op (enum tree_code code, tree arg1, enum tree_code arg1_code,
2998 tree arg2, enum tree_code arg2_code, bool *overloaded_p)
3000 tree orig_arg1;
3001 tree orig_arg2;
3002 tree expr;
3004 orig_arg1 = arg1;
3005 orig_arg2 = arg2;
3007 if (processing_template_decl)
3009 if (type_dependent_expression_p (arg1)
3010 || type_dependent_expression_p (arg2))
3011 return build_min_nt (code, arg1, arg2);
3012 arg1 = build_non_dependent_expr (arg1);
3013 arg2 = build_non_dependent_expr (arg2);
3016 if (code == DOTSTAR_EXPR)
3017 expr = build_m_component_ref (arg1, arg2);
3018 else
3019 expr = build_new_op (code, LOOKUP_NORMAL, arg1, arg2, NULL_TREE,
3020 overloaded_p);
3022 /* Check for cases such as x+y<<z which users are likely to
3023 misinterpret. But don't warn about obj << x + y, since that is a
3024 common idiom for I/O. */
3025 if (warn_parentheses
3026 && !processing_template_decl
3027 && !error_operand_p (arg1)
3028 && !error_operand_p (arg2)
3029 && (code != LSHIFT_EXPR
3030 || !CLASS_TYPE_P (TREE_TYPE (arg1))))
3031 warn_about_parentheses (code, arg1_code, arg2_code);
3033 if (processing_template_decl && expr != error_mark_node)
3034 return build_min_non_dep (code, expr, orig_arg1, orig_arg2);
3036 return expr;
3039 /* Build a binary-operation expression without default conversions.
3040 CODE is the kind of expression to build.
3041 This function differs from `build' in several ways:
3042 the data type of the result is computed and recorded in it,
3043 warnings are generated if arg data types are invalid,
3044 special handling for addition and subtraction of pointers is known,
3045 and some optimization is done (operations on narrow ints
3046 are done in the narrower type when that gives the same result).
3047 Constant folding is also done before the result is returned.
3049 Note that the operands will never have enumeral types
3050 because either they have just had the default conversions performed
3051 or they have both just been converted to some other type in which
3052 the arithmetic is to be done.
3054 C++: must do special pointer arithmetic when implementing
3055 multiple inheritance, and deal with pointer to member functions. */
3057 tree
3058 build_binary_op (enum tree_code code, tree orig_op0, tree orig_op1,
3059 int convert_p ATTRIBUTE_UNUSED)
3061 tree op0, op1;
3062 enum tree_code code0, code1;
3063 tree type0, type1;
3064 const char *invalid_op_diag;
3066 /* Expression code to give to the expression when it is built.
3067 Normally this is CODE, which is what the caller asked for,
3068 but in some special cases we change it. */
3069 enum tree_code resultcode = code;
3071 /* Data type in which the computation is to be performed.
3072 In the simplest cases this is the common type of the arguments. */
3073 tree result_type = NULL;
3075 /* Nonzero means operands have already been type-converted
3076 in whatever way is necessary.
3077 Zero means they need to be converted to RESULT_TYPE. */
3078 int converted = 0;
3080 /* Nonzero means create the expression with this type, rather than
3081 RESULT_TYPE. */
3082 tree build_type = 0;
3084 /* Nonzero means after finally constructing the expression
3085 convert it to this type. */
3086 tree final_type = 0;
3088 tree result;
3090 /* Nonzero if this is an operation like MIN or MAX which can
3091 safely be computed in short if both args are promoted shorts.
3092 Also implies COMMON.
3093 -1 indicates a bitwise operation; this makes a difference
3094 in the exact conditions for when it is safe to do the operation
3095 in a narrower mode. */
3096 int shorten = 0;
3098 /* Nonzero if this is a comparison operation;
3099 if both args are promoted shorts, compare the original shorts.
3100 Also implies COMMON. */
3101 int short_compare = 0;
3103 /* Nonzero means set RESULT_TYPE to the common type of the args. */
3104 int common = 0;
3106 /* True if both operands have arithmetic type. */
3107 bool arithmetic_types_p;
3109 /* Apply default conversions. */
3110 op0 = orig_op0;
3111 op1 = orig_op1;
3113 if (code == TRUTH_AND_EXPR || code == TRUTH_ANDIF_EXPR
3114 || code == TRUTH_OR_EXPR || code == TRUTH_ORIF_EXPR
3115 || code == TRUTH_XOR_EXPR)
3117 if (!really_overloaded_fn (op0))
3118 op0 = decay_conversion (op0);
3119 if (!really_overloaded_fn (op1))
3120 op1 = decay_conversion (op1);
3122 else
3124 if (!really_overloaded_fn (op0))
3125 op0 = default_conversion (op0);
3126 if (!really_overloaded_fn (op1))
3127 op1 = default_conversion (op1);
3130 /* Strip NON_LVALUE_EXPRs, etc., since we aren't using as an lvalue. */
3131 STRIP_TYPE_NOPS (op0);
3132 STRIP_TYPE_NOPS (op1);
3134 /* DTRT if one side is an overloaded function, but complain about it. */
3135 if (type_unknown_p (op0))
3137 tree t = instantiate_type (TREE_TYPE (op1), op0, tf_none);
3138 if (t != error_mark_node)
3140 pedwarn ("assuming cast to type %qT from overloaded function",
3141 TREE_TYPE (t));
3142 op0 = t;
3145 if (type_unknown_p (op1))
3147 tree t = instantiate_type (TREE_TYPE (op0), op1, tf_none);
3148 if (t != error_mark_node)
3150 pedwarn ("assuming cast to type %qT from overloaded function",
3151 TREE_TYPE (t));
3152 op1 = t;
3156 type0 = TREE_TYPE (op0);
3157 type1 = TREE_TYPE (op1);
3159 /* The expression codes of the data types of the arguments tell us
3160 whether the arguments are integers, floating, pointers, etc. */
3161 code0 = TREE_CODE (type0);
3162 code1 = TREE_CODE (type1);
3164 /* If an error was already reported for one of the arguments,
3165 avoid reporting another error. */
3167 if (code0 == ERROR_MARK || code1 == ERROR_MARK)
3168 return error_mark_node;
3170 if ((invalid_op_diag
3171 = targetm.invalid_binary_op (code, type0, type1)))
3173 error (invalid_op_diag);
3174 return error_mark_node;
3177 switch (code)
3179 case MINUS_EXPR:
3180 /* Subtraction of two similar pointers.
3181 We must subtract them as integers, then divide by object size. */
3182 if (code0 == POINTER_TYPE && code1 == POINTER_TYPE
3183 && same_type_ignoring_top_level_qualifiers_p (TREE_TYPE (type0),
3184 TREE_TYPE (type1)))
3185 return pointer_diff (op0, op1, common_type (type0, type1));
3186 /* In all other cases except pointer - int, the usual arithmetic
3187 rules aply. */
3188 else if (!(code0 == POINTER_TYPE && code1 == INTEGER_TYPE))
3190 common = 1;
3191 break;
3193 /* The pointer - int case is just like pointer + int; fall
3194 through. */
3195 case PLUS_EXPR:
3196 if ((code0 == POINTER_TYPE || code1 == POINTER_TYPE)
3197 && (code0 == INTEGER_TYPE || code1 == INTEGER_TYPE))
3199 tree ptr_operand;
3200 tree int_operand;
3201 ptr_operand = ((code0 == POINTER_TYPE) ? op0 : op1);
3202 int_operand = ((code0 == INTEGER_TYPE) ? op0 : op1);
3203 if (processing_template_decl)
3205 result_type = TREE_TYPE (ptr_operand);
3206 break;
3208 return cp_pointer_int_sum (code,
3209 ptr_operand,
3210 int_operand);
3212 common = 1;
3213 break;
3215 case MULT_EXPR:
3216 common = 1;
3217 break;
3219 case TRUNC_DIV_EXPR:
3220 case CEIL_DIV_EXPR:
3221 case FLOOR_DIV_EXPR:
3222 case ROUND_DIV_EXPR:
3223 case EXACT_DIV_EXPR:
3224 if ((code0 == INTEGER_TYPE || code0 == REAL_TYPE
3225 || code0 == COMPLEX_TYPE || code0 == VECTOR_TYPE)
3226 && (code1 == INTEGER_TYPE || code1 == REAL_TYPE
3227 || code1 == COMPLEX_TYPE || code1 == VECTOR_TYPE))
3229 enum tree_code tcode0 = code0, tcode1 = code1;
3231 warn_for_div_by_zero (op1);
3233 if (tcode0 == COMPLEX_TYPE || tcode0 == VECTOR_TYPE)
3234 tcode0 = TREE_CODE (TREE_TYPE (TREE_TYPE (op0)));
3235 if (tcode1 == COMPLEX_TYPE || tcode1 == VECTOR_TYPE)
3236 tcode1 = TREE_CODE (TREE_TYPE (TREE_TYPE (op1)));
3238 if (!(tcode0 == INTEGER_TYPE && tcode1 == INTEGER_TYPE))
3239 resultcode = RDIV_EXPR;
3240 else
3241 /* When dividing two signed integers, we have to promote to int.
3242 unless we divide by a constant != -1. Note that default
3243 conversion will have been performed on the operands at this
3244 point, so we have to dig out the original type to find out if
3245 it was unsigned. */
3246 shorten = ((TREE_CODE (op0) == NOP_EXPR
3247 && TYPE_UNSIGNED (TREE_TYPE (TREE_OPERAND (op0, 0))))
3248 || (TREE_CODE (op1) == INTEGER_CST
3249 && ! integer_all_onesp (op1)));
3251 common = 1;
3253 break;
3255 case BIT_AND_EXPR:
3256 case BIT_IOR_EXPR:
3257 case BIT_XOR_EXPR:
3258 if ((code0 == INTEGER_TYPE && code1 == INTEGER_TYPE)
3259 || (code0 == VECTOR_TYPE && code1 == VECTOR_TYPE
3260 && !VECTOR_FLOAT_TYPE_P (type0)
3261 && !VECTOR_FLOAT_TYPE_P (type1)))
3262 shorten = -1;
3263 break;
3265 case TRUNC_MOD_EXPR:
3266 case FLOOR_MOD_EXPR:
3267 warn_for_div_by_zero (op1);
3269 if (code0 == INTEGER_TYPE && code1 == INTEGER_TYPE)
3271 /* Although it would be tempting to shorten always here, that loses
3272 on some targets, since the modulo instruction is undefined if the
3273 quotient can't be represented in the computation mode. We shorten
3274 only if unsigned or if dividing by something we know != -1. */
3275 shorten = ((TREE_CODE (op0) == NOP_EXPR
3276 && TYPE_UNSIGNED (TREE_TYPE (TREE_OPERAND (op0, 0))))
3277 || (TREE_CODE (op1) == INTEGER_CST
3278 && ! integer_all_onesp (op1)));
3279 common = 1;
3281 break;
3283 case TRUTH_ANDIF_EXPR:
3284 case TRUTH_ORIF_EXPR:
3285 case TRUTH_AND_EXPR:
3286 case TRUTH_OR_EXPR:
3287 result_type = boolean_type_node;
3288 break;
3290 /* Shift operations: result has same type as first operand;
3291 always convert second operand to int.
3292 Also set SHORT_SHIFT if shifting rightward. */
3294 case RSHIFT_EXPR:
3295 if (code0 == INTEGER_TYPE && code1 == INTEGER_TYPE)
3297 result_type = type0;
3298 if (TREE_CODE (op1) == INTEGER_CST)
3300 if (tree_int_cst_lt (op1, integer_zero_node))
3301 warning (0, "right shift count is negative");
3302 else
3304 if (compare_tree_int (op1, TYPE_PRECISION (type0)) >= 0)
3305 warning (0, "right shift count >= width of type");
3308 /* Convert the shift-count to an integer, regardless of
3309 size of value being shifted. */
3310 if (TYPE_MAIN_VARIANT (TREE_TYPE (op1)) != integer_type_node)
3311 op1 = cp_convert (integer_type_node, op1);
3312 /* Avoid converting op1 to result_type later. */
3313 converted = 1;
3315 break;
3317 case LSHIFT_EXPR:
3318 if (code0 == INTEGER_TYPE && code1 == INTEGER_TYPE)
3320 result_type = type0;
3321 if (TREE_CODE (op1) == INTEGER_CST)
3323 if (tree_int_cst_lt (op1, integer_zero_node))
3324 warning (0, "left shift count is negative");
3325 else if (compare_tree_int (op1, TYPE_PRECISION (type0)) >= 0)
3326 warning (0, "left shift count >= width of type");
3328 /* Convert the shift-count to an integer, regardless of
3329 size of value being shifted. */
3330 if (TYPE_MAIN_VARIANT (TREE_TYPE (op1)) != integer_type_node)
3331 op1 = cp_convert (integer_type_node, op1);
3332 /* Avoid converting op1 to result_type later. */
3333 converted = 1;
3335 break;
3337 case RROTATE_EXPR:
3338 case LROTATE_EXPR:
3339 if (code0 == INTEGER_TYPE && code1 == INTEGER_TYPE)
3341 result_type = type0;
3342 if (TREE_CODE (op1) == INTEGER_CST)
3344 if (tree_int_cst_lt (op1, integer_zero_node))
3345 warning (0, (code == LROTATE_EXPR)
3346 ? G_("left rotate count is negative")
3347 : G_("right rotate count is negative"));
3348 else if (compare_tree_int (op1, TYPE_PRECISION (type0)) >= 0)
3349 warning (0, (code == LROTATE_EXPR)
3350 ? G_("left rotate count >= width of type")
3351 : G_("right rotate count >= width of type"));
3353 /* Convert the shift-count to an integer, regardless of
3354 size of value being shifted. */
3355 if (TYPE_MAIN_VARIANT (TREE_TYPE (op1)) != integer_type_node)
3356 op1 = cp_convert (integer_type_node, op1);
3358 break;
3360 case EQ_EXPR:
3361 case NE_EXPR:
3362 if (code0 == REAL_TYPE || code1 == REAL_TYPE)
3363 warning (OPT_Wfloat_equal,
3364 "comparing floating point with == or != is unsafe");
3365 if ((TREE_CODE (orig_op0) == STRING_CST && !integer_zerop (op1))
3366 || (TREE_CODE (orig_op1) == STRING_CST && !integer_zerop (op0)))
3367 warning (OPT_Waddress, "comparison with string literal results in unspecified behaviour");
3369 build_type = boolean_type_node;
3370 if ((code0 == INTEGER_TYPE || code0 == REAL_TYPE
3371 || code0 == COMPLEX_TYPE)
3372 && (code1 == INTEGER_TYPE || code1 == REAL_TYPE
3373 || code1 == COMPLEX_TYPE))
3374 short_compare = 1;
3375 else if ((code0 == POINTER_TYPE && code1 == POINTER_TYPE)
3376 || (TYPE_PTRMEM_P (type0) && TYPE_PTRMEM_P (type1)))
3377 result_type = composite_pointer_type (type0, type1, op0, op1,
3378 "comparison");
3379 else if ((code0 == POINTER_TYPE || TYPE_PTRMEM_P (type0))
3380 && null_ptr_cst_p (op1))
3382 if (TREE_CODE (op0) == ADDR_EXPR
3383 && decl_with_nonnull_addr_p (TREE_OPERAND (op0, 0)))
3384 warning (OPT_Waddress, "the address of %qD will never be NULL",
3385 TREE_OPERAND (op0, 0));
3386 result_type = type0;
3388 else if ((code1 == POINTER_TYPE || TYPE_PTRMEM_P (type1))
3389 && null_ptr_cst_p (op0))
3391 if (TREE_CODE (op1) == ADDR_EXPR
3392 && decl_with_nonnull_addr_p (TREE_OPERAND (op1, 0)))
3393 warning (OPT_Waddress, "the address of %qD will never be NULL",
3394 TREE_OPERAND (op1, 0));
3395 result_type = type1;
3397 else if (code0 == POINTER_TYPE && code1 == INTEGER_TYPE)
3399 result_type = type0;
3400 pedwarn ("ISO C++ forbids comparison between pointer and integer");
3402 else if (code0 == INTEGER_TYPE && code1 == POINTER_TYPE)
3404 result_type = type1;
3405 pedwarn ("ISO C++ forbids comparison between pointer and integer");
3407 else if (TYPE_PTRMEMFUNC_P (type0) && null_ptr_cst_p (op1))
3409 if (TARGET_PTRMEMFUNC_VBIT_LOCATION
3410 == ptrmemfunc_vbit_in_delta)
3412 tree pfn0 = pfn_from_ptrmemfunc (op0);
3413 tree delta0 = delta_from_ptrmemfunc (op0);
3414 tree e1 = cp_build_binary_op (EQ_EXPR,
3415 pfn0,
3416 fold_convert (TREE_TYPE (pfn0),
3417 integer_zero_node));
3418 tree e2 = cp_build_binary_op (BIT_AND_EXPR,
3419 delta0,
3420 integer_one_node);
3421 e2 = cp_build_binary_op (EQ_EXPR, e2, integer_zero_node);
3422 op0 = cp_build_binary_op (TRUTH_ANDIF_EXPR, e1, e2);
3423 op1 = cp_convert (TREE_TYPE (op0), integer_one_node);
3425 else
3427 op0 = build_ptrmemfunc_access_expr (op0, pfn_identifier);
3428 op1 = cp_convert (TREE_TYPE (op0), integer_zero_node);
3430 result_type = TREE_TYPE (op0);
3432 else if (TYPE_PTRMEMFUNC_P (type1) && null_ptr_cst_p (op0))
3433 return cp_build_binary_op (code, op1, op0);
3434 else if (TYPE_PTRMEMFUNC_P (type0) && TYPE_PTRMEMFUNC_P (type1))
3436 tree type;
3437 /* E will be the final comparison. */
3438 tree e;
3439 /* E1 and E2 are for scratch. */
3440 tree e1;
3441 tree e2;
3442 tree pfn0;
3443 tree pfn1;
3444 tree delta0;
3445 tree delta1;
3447 type = composite_pointer_type (type0, type1, op0, op1, "comparison");
3449 if (!same_type_p (TREE_TYPE (op0), type))
3450 op0 = cp_convert_and_check (type, op0);
3451 if (!same_type_p (TREE_TYPE (op1), type))
3452 op1 = cp_convert_and_check (type, op1);
3454 if (op0 == error_mark_node || op1 == error_mark_node)
3455 return error_mark_node;
3457 if (TREE_SIDE_EFFECTS (op0))
3458 op0 = save_expr (op0);
3459 if (TREE_SIDE_EFFECTS (op1))
3460 op1 = save_expr (op1);
3462 pfn0 = pfn_from_ptrmemfunc (op0);
3463 pfn1 = pfn_from_ptrmemfunc (op1);
3464 delta0 = delta_from_ptrmemfunc (op0);
3465 delta1 = delta_from_ptrmemfunc (op1);
3466 if (TARGET_PTRMEMFUNC_VBIT_LOCATION
3467 == ptrmemfunc_vbit_in_delta)
3469 /* We generate:
3471 (op0.pfn == op1.pfn
3472 && ((op0.delta == op1.delta)
3473 || (!op0.pfn && op0.delta & 1 == 0
3474 && op1.delta & 1 == 0))
3476 The reason for the `!op0.pfn' bit is that a NULL
3477 pointer-to-member is any member with a zero PFN and
3478 LSB of the DELTA field is 0. */
3480 e1 = cp_build_binary_op (BIT_AND_EXPR,
3481 delta0,
3482 integer_one_node);
3483 e1 = cp_build_binary_op (EQ_EXPR, e1, integer_zero_node);
3484 e2 = cp_build_binary_op (BIT_AND_EXPR,
3485 delta1,
3486 integer_one_node);
3487 e2 = cp_build_binary_op (EQ_EXPR, e2, integer_zero_node);
3488 e1 = cp_build_binary_op (TRUTH_ANDIF_EXPR, e2, e1);
3489 e2 = cp_build_binary_op (EQ_EXPR,
3490 pfn0,
3491 fold_convert (TREE_TYPE (pfn0),
3492 integer_zero_node));
3493 e2 = cp_build_binary_op (TRUTH_ANDIF_EXPR, e2, e1);
3494 e1 = cp_build_binary_op (EQ_EXPR, delta0, delta1);
3495 e1 = cp_build_binary_op (TRUTH_ORIF_EXPR, e1, e2);
3497 else
3499 /* We generate:
3501 (op0.pfn == op1.pfn
3502 && (!op0.pfn || op0.delta == op1.delta))
3504 The reason for the `!op0.pfn' bit is that a NULL
3505 pointer-to-member is any member with a zero PFN; the
3506 DELTA field is unspecified. */
3508 e1 = cp_build_binary_op (EQ_EXPR, delta0, delta1);
3509 e2 = cp_build_binary_op (EQ_EXPR,
3510 pfn0,
3511 fold_convert (TREE_TYPE (pfn0),
3512 integer_zero_node));
3513 e1 = cp_build_binary_op (TRUTH_ORIF_EXPR, e1, e2);
3515 e2 = build2 (EQ_EXPR, boolean_type_node, pfn0, pfn1);
3516 e = cp_build_binary_op (TRUTH_ANDIF_EXPR, e2, e1);
3517 if (code == EQ_EXPR)
3518 return e;
3519 return cp_build_binary_op (EQ_EXPR, e, integer_zero_node);
3521 else
3523 gcc_assert (!TYPE_PTRMEMFUNC_P (type0)
3524 || !same_type_p (TYPE_PTRMEMFUNC_FN_TYPE (type0),
3525 type1));
3526 gcc_assert (!TYPE_PTRMEMFUNC_P (type1)
3527 || !same_type_p (TYPE_PTRMEMFUNC_FN_TYPE (type1),
3528 type0));
3531 break;
3533 case MAX_EXPR:
3534 case MIN_EXPR:
3535 if ((code0 == INTEGER_TYPE || code0 == REAL_TYPE)
3536 && (code1 == INTEGER_TYPE || code1 == REAL_TYPE))
3537 shorten = 1;
3538 else if (code0 == POINTER_TYPE && code1 == POINTER_TYPE)
3539 result_type = composite_pointer_type (type0, type1, op0, op1,
3540 "comparison");
3541 break;
3543 case LE_EXPR:
3544 case GE_EXPR:
3545 case LT_EXPR:
3546 case GT_EXPR:
3547 if (TREE_CODE (orig_op0) == STRING_CST
3548 || TREE_CODE (orig_op1) == STRING_CST)
3549 warning (OPT_Waddress, "comparison with string literal results in unspecified behaviour");
3551 build_type = boolean_type_node;
3552 if ((code0 == INTEGER_TYPE || code0 == REAL_TYPE)
3553 && (code1 == INTEGER_TYPE || code1 == REAL_TYPE))
3554 short_compare = 1;
3555 else if (code0 == POINTER_TYPE && code1 == POINTER_TYPE)
3556 result_type = composite_pointer_type (type0, type1, op0, op1,
3557 "comparison");
3558 else if (code0 == POINTER_TYPE && TREE_CODE (op1) == INTEGER_CST
3559 && integer_zerop (op1))
3560 result_type = type0;
3561 else if (code1 == POINTER_TYPE && TREE_CODE (op0) == INTEGER_CST
3562 && integer_zerop (op0))
3563 result_type = type1;
3564 else if (code0 == POINTER_TYPE && code1 == INTEGER_TYPE)
3566 result_type = type0;
3567 pedwarn ("ISO C++ forbids comparison between pointer and integer");
3569 else if (code0 == INTEGER_TYPE && code1 == POINTER_TYPE)
3571 result_type = type1;
3572 pedwarn ("ISO C++ forbids comparison between pointer and integer");
3574 break;
3576 case UNORDERED_EXPR:
3577 case ORDERED_EXPR:
3578 case UNLT_EXPR:
3579 case UNLE_EXPR:
3580 case UNGT_EXPR:
3581 case UNGE_EXPR:
3582 case UNEQ_EXPR:
3583 build_type = integer_type_node;
3584 if (code0 != REAL_TYPE || code1 != REAL_TYPE)
3586 error ("unordered comparison on non-floating point argument");
3587 return error_mark_node;
3589 common = 1;
3590 break;
3592 default:
3593 break;
3596 if (((code0 == INTEGER_TYPE || code0 == REAL_TYPE || code0 == COMPLEX_TYPE)
3597 && (code1 == INTEGER_TYPE || code1 == REAL_TYPE
3598 || code1 == COMPLEX_TYPE)))
3599 arithmetic_types_p = 1;
3600 else
3602 arithmetic_types_p = 0;
3603 /* Vector arithmetic is only allowed when both sides are vectors. */
3604 if (code0 == VECTOR_TYPE && code1 == VECTOR_TYPE)
3606 if (!tree_int_cst_equal (TYPE_SIZE (type0), TYPE_SIZE (type1))
3607 || !same_scalar_type_ignoring_signedness (TREE_TYPE (type0),
3608 TREE_TYPE (type1)))
3610 binary_op_error (code, type0, type1);
3611 return error_mark_node;
3613 arithmetic_types_p = 1;
3616 /* Determine the RESULT_TYPE, if it is not already known. */
3617 if (!result_type
3618 && arithmetic_types_p
3619 && (shorten || common || short_compare))
3620 result_type = common_type (type0, type1);
3622 if (!result_type)
3624 error ("invalid operands of types %qT and %qT to binary %qO",
3625 TREE_TYPE (orig_op0), TREE_TYPE (orig_op1), code);
3626 return error_mark_node;
3629 /* If we're in a template, the only thing we need to know is the
3630 RESULT_TYPE. */
3631 if (processing_template_decl)
3633 /* Since the middle-end checks the type when doing a build2, we
3634 need to build the tree in pieces. This built tree will never
3635 get out of the front-end as we replace it when instantiating
3636 the template. */
3637 tree tmp = build2 (resultcode,
3638 build_type ? build_type : result_type,
3639 NULL_TREE, op1);
3640 TREE_OPERAND (tmp, 0) = op0;
3641 return tmp;
3644 if (arithmetic_types_p)
3646 int none_complex = (code0 != COMPLEX_TYPE && code1 != COMPLEX_TYPE);
3648 /* For certain operations (which identify themselves by shorten != 0)
3649 if both args were extended from the same smaller type,
3650 do the arithmetic in that type and then extend.
3652 shorten !=0 and !=1 indicates a bitwise operation.
3653 For them, this optimization is safe only if
3654 both args are zero-extended or both are sign-extended.
3655 Otherwise, we might change the result.
3656 Eg, (short)-1 | (unsigned short)-1 is (int)-1
3657 but calculated in (unsigned short) it would be (unsigned short)-1. */
3659 if (shorten && none_complex)
3661 int unsigned0, unsigned1;
3662 tree arg0 = get_narrower (op0, &unsigned0);
3663 tree arg1 = get_narrower (op1, &unsigned1);
3664 /* UNS is 1 if the operation to be done is an unsigned one. */
3665 int uns = TYPE_UNSIGNED (result_type);
3666 tree type;
3668 final_type = result_type;
3670 /* Handle the case that OP0 does not *contain* a conversion
3671 but it *requires* conversion to FINAL_TYPE. */
3673 if (op0 == arg0 && TREE_TYPE (op0) != final_type)
3674 unsigned0 = TYPE_UNSIGNED (TREE_TYPE (op0));
3675 if (op1 == arg1 && TREE_TYPE (op1) != final_type)
3676 unsigned1 = TYPE_UNSIGNED (TREE_TYPE (op1));
3678 /* Now UNSIGNED0 is 1 if ARG0 zero-extends to FINAL_TYPE. */
3680 /* For bitwise operations, signedness of nominal type
3681 does not matter. Consider only how operands were extended. */
3682 if (shorten == -1)
3683 uns = unsigned0;
3685 /* Note that in all three cases below we refrain from optimizing
3686 an unsigned operation on sign-extended args.
3687 That would not be valid. */
3689 /* Both args variable: if both extended in same way
3690 from same width, do it in that width.
3691 Do it unsigned if args were zero-extended. */
3692 if ((TYPE_PRECISION (TREE_TYPE (arg0))
3693 < TYPE_PRECISION (result_type))
3694 && (TYPE_PRECISION (TREE_TYPE (arg1))
3695 == TYPE_PRECISION (TREE_TYPE (arg0)))
3696 && unsigned0 == unsigned1
3697 && (unsigned0 || !uns))
3698 result_type = c_common_signed_or_unsigned_type
3699 (unsigned0, common_type (TREE_TYPE (arg0), TREE_TYPE (arg1)));
3700 else if (TREE_CODE (arg0) == INTEGER_CST
3701 && (unsigned1 || !uns)
3702 && (TYPE_PRECISION (TREE_TYPE (arg1))
3703 < TYPE_PRECISION (result_type))
3704 && (type = c_common_signed_or_unsigned_type
3705 (unsigned1, TREE_TYPE (arg1)),
3706 int_fits_type_p (arg0, type)))
3707 result_type = type;
3708 else if (TREE_CODE (arg1) == INTEGER_CST
3709 && (unsigned0 || !uns)
3710 && (TYPE_PRECISION (TREE_TYPE (arg0))
3711 < TYPE_PRECISION (result_type))
3712 && (type = c_common_signed_or_unsigned_type
3713 (unsigned0, TREE_TYPE (arg0)),
3714 int_fits_type_p (arg1, type)))
3715 result_type = type;
3718 /* Comparison operations are shortened too but differently.
3719 They identify themselves by setting short_compare = 1. */
3721 if (short_compare)
3723 /* Don't write &op0, etc., because that would prevent op0
3724 from being kept in a register.
3725 Instead, make copies of the our local variables and
3726 pass the copies by reference, then copy them back afterward. */
3727 tree xop0 = op0, xop1 = op1, xresult_type = result_type;
3728 enum tree_code xresultcode = resultcode;
3729 tree val
3730 = shorten_compare (&xop0, &xop1, &xresult_type, &xresultcode);
3731 if (val != 0)
3732 return cp_convert (boolean_type_node, val);
3733 op0 = xop0, op1 = xop1;
3734 converted = 1;
3735 resultcode = xresultcode;
3738 if ((short_compare || code == MIN_EXPR || code == MAX_EXPR)
3739 && warn_sign_compare
3740 /* Do not warn until the template is instantiated; we cannot
3741 bound the ranges of the arguments until that point. */
3742 && !processing_template_decl)
3744 int op0_signed = !TYPE_UNSIGNED (TREE_TYPE (orig_op0));
3745 int op1_signed = !TYPE_UNSIGNED (TREE_TYPE (orig_op1));
3747 int unsignedp0, unsignedp1;
3748 tree primop0 = get_narrower (op0, &unsignedp0);
3749 tree primop1 = get_narrower (op1, &unsignedp1);
3751 /* Check for comparison of different enum types. */
3752 if (TREE_CODE (TREE_TYPE (orig_op0)) == ENUMERAL_TYPE
3753 && TREE_CODE (TREE_TYPE (orig_op1)) == ENUMERAL_TYPE
3754 && TYPE_MAIN_VARIANT (TREE_TYPE (orig_op0))
3755 != TYPE_MAIN_VARIANT (TREE_TYPE (orig_op1)))
3757 warning (OPT_Wsign_compare, "comparison between types %q#T and %q#T",
3758 TREE_TYPE (orig_op0), TREE_TYPE (orig_op1));
3761 /* Give warnings for comparisons between signed and unsigned
3762 quantities that may fail. */
3763 /* Do the checking based on the original operand trees, so that
3764 casts will be considered, but default promotions won't be. */
3766 /* Do not warn if the comparison is being done in a signed type,
3767 since the signed type will only be chosen if it can represent
3768 all the values of the unsigned type. */
3769 if (!TYPE_UNSIGNED (result_type))
3770 /* OK */;
3771 /* Do not warn if both operands are unsigned. */
3772 else if (op0_signed == op1_signed)
3773 /* OK */;
3774 /* Do not warn if the signed quantity is an unsuffixed
3775 integer literal (or some static constant expression
3776 involving such literals or a conditional expression
3777 involving such literals) and it is non-negative. */
3778 else if ((op0_signed && tree_expr_nonnegative_p (orig_op0))
3779 || (op1_signed && tree_expr_nonnegative_p (orig_op1)))
3780 /* OK */;
3781 /* Do not warn if the comparison is an equality operation,
3782 the unsigned quantity is an integral constant and it does
3783 not use the most significant bit of result_type. */
3784 else if ((resultcode == EQ_EXPR || resultcode == NE_EXPR)
3785 && ((op0_signed && TREE_CODE (orig_op1) == INTEGER_CST
3786 && int_fits_type_p (orig_op1, c_common_signed_type
3787 (result_type)))
3788 || (op1_signed && TREE_CODE (orig_op0) == INTEGER_CST
3789 && int_fits_type_p (orig_op0, c_common_signed_type
3790 (result_type)))))
3791 /* OK */;
3792 else
3793 warning (OPT_Wsign_compare,
3794 "comparison between signed and unsigned integer expressions");
3796 /* Warn if two unsigned values are being compared in a size
3797 larger than their original size, and one (and only one) is the
3798 result of a `~' operator. This comparison will always fail.
3800 Also warn if one operand is a constant, and the constant does not
3801 have all bits set that are set in the ~ operand when it is
3802 extended. */
3804 if ((TREE_CODE (primop0) == BIT_NOT_EXPR)
3805 ^ (TREE_CODE (primop1) == BIT_NOT_EXPR))
3807 if (TREE_CODE (primop0) == BIT_NOT_EXPR)
3808 primop0 = get_narrower (TREE_OPERAND (op0, 0), &unsignedp0);
3809 if (TREE_CODE (primop1) == BIT_NOT_EXPR)
3810 primop1 = get_narrower (TREE_OPERAND (op1, 0), &unsignedp1);
3812 if (host_integerp (primop0, 0) || host_integerp (primop1, 0))
3814 tree primop;
3815 HOST_WIDE_INT constant, mask;
3816 int unsignedp;
3817 unsigned int bits;
3819 if (host_integerp (primop0, 0))
3821 primop = primop1;
3822 unsignedp = unsignedp1;
3823 constant = tree_low_cst (primop0, 0);
3825 else
3827 primop = primop0;
3828 unsignedp = unsignedp0;
3829 constant = tree_low_cst (primop1, 0);
3832 bits = TYPE_PRECISION (TREE_TYPE (primop));
3833 if (bits < TYPE_PRECISION (result_type)
3834 && bits < HOST_BITS_PER_LONG && unsignedp)
3836 mask = (~ (HOST_WIDE_INT) 0) << bits;
3837 if ((mask & constant) != mask)
3838 warning (OPT_Wsign_compare, "comparison of promoted ~unsigned with constant");
3841 else if (unsignedp0 && unsignedp1
3842 && (TYPE_PRECISION (TREE_TYPE (primop0))
3843 < TYPE_PRECISION (result_type))
3844 && (TYPE_PRECISION (TREE_TYPE (primop1))
3845 < TYPE_PRECISION (result_type)))
3846 warning (OPT_Wsign_compare, "comparison of promoted ~unsigned with unsigned");
3851 /* Issue warnings about peculiar, but valid, uses of NULL. */
3852 if ((orig_op0 == null_node || orig_op1 == null_node)
3853 /* It's reasonable to use pointer values as operands of &&
3854 and ||, so NULL is no exception. */
3855 && code != TRUTH_ANDIF_EXPR && code != TRUTH_ORIF_EXPR
3856 && ( /* Both are NULL (or 0) and the operation was not a comparison. */
3857 (null_ptr_cst_p (orig_op0) && null_ptr_cst_p (orig_op1)
3858 && code != EQ_EXPR && code != NE_EXPR)
3859 /* Or if one of OP0 or OP1 is neither a pointer nor NULL. */
3860 || (!null_ptr_cst_p (orig_op0) && TREE_CODE (TREE_TYPE (op0)) != POINTER_TYPE)
3861 || (!null_ptr_cst_p (orig_op1) && TREE_CODE (TREE_TYPE (op1)) != POINTER_TYPE)))
3862 /* Some sort of arithmetic operation involving NULL was
3863 performed. Note that pointer-difference and pointer-addition
3864 have already been handled above, and so we don't end up here in
3865 that case. */
3866 warning (OPT_Wpointer_arith, "NULL used in arithmetic");
3869 /* If CONVERTED is zero, both args will be converted to type RESULT_TYPE.
3870 Then the expression will be built.
3871 It will be given type FINAL_TYPE if that is nonzero;
3872 otherwise, it will be given type RESULT_TYPE. */
3873 if (! converted)
3875 if (TREE_TYPE (op0) != result_type)
3876 op0 = cp_convert_and_check (result_type, op0);
3877 if (TREE_TYPE (op1) != result_type)
3878 op1 = cp_convert_and_check (result_type, op1);
3880 if (op0 == error_mark_node || op1 == error_mark_node)
3881 return error_mark_node;
3884 if (build_type == NULL_TREE)
3885 build_type = result_type;
3887 result = build2 (resultcode, build_type, op0, op1);
3888 result = fold_if_not_in_template (result);
3889 if (final_type != 0)
3890 result = cp_convert (final_type, result);
3892 if (TREE_OVERFLOW_P (result)
3893 && !TREE_OVERFLOW_P (op0)
3894 && !TREE_OVERFLOW_P (op1))
3895 overflow_warning (result);
3897 return result;
3900 /* Return a tree for the sum or difference (RESULTCODE says which)
3901 of pointer PTROP and integer INTOP. */
3903 static tree
3904 cp_pointer_int_sum (enum tree_code resultcode, tree ptrop, tree intop)
3906 tree res_type = TREE_TYPE (ptrop);
3908 /* pointer_int_sum() uses size_in_bytes() on the TREE_TYPE(res_type)
3909 in certain circumstance (when it's valid to do so). So we need
3910 to make sure it's complete. We don't need to check here, if we
3911 can actually complete it at all, as those checks will be done in
3912 pointer_int_sum() anyway. */
3913 complete_type (TREE_TYPE (res_type));
3915 return pointer_int_sum (resultcode, ptrop,
3916 fold_if_not_in_template (intop));
3919 /* Return a tree for the difference of pointers OP0 and OP1.
3920 The resulting tree has type int. */
3922 static tree
3923 pointer_diff (tree op0, tree op1, tree ptrtype)
3925 tree result;
3926 tree restype = ptrdiff_type_node;
3927 tree target_type = TREE_TYPE (ptrtype);
3929 if (!complete_type_or_else (target_type, NULL_TREE))
3930 return error_mark_node;
3932 if (pedantic || warn_pointer_arith)
3934 if (TREE_CODE (target_type) == VOID_TYPE)
3935 pedwarn ("ISO C++ forbids using pointer of type %<void *%> in subtraction");
3936 if (TREE_CODE (target_type) == FUNCTION_TYPE)
3937 pedwarn ("ISO C++ forbids using pointer to a function in subtraction");
3938 if (TREE_CODE (target_type) == METHOD_TYPE)
3939 pedwarn ("ISO C++ forbids using pointer to a method in subtraction");
3942 /* First do the subtraction as integers;
3943 then drop through to build the divide operator. */
3945 op0 = cp_build_binary_op (MINUS_EXPR,
3946 cp_convert (restype, op0),
3947 cp_convert (restype, op1));
3949 /* This generates an error if op1 is a pointer to an incomplete type. */
3950 if (!COMPLETE_TYPE_P (TREE_TYPE (TREE_TYPE (op1))))
3951 error ("invalid use of a pointer to an incomplete type in pointer arithmetic");
3953 op1 = (TYPE_PTROB_P (ptrtype)
3954 ? size_in_bytes (target_type)
3955 : integer_one_node);
3957 /* Do the division. */
3959 result = build2 (EXACT_DIV_EXPR, restype, op0, cp_convert (restype, op1));
3960 return fold_if_not_in_template (result);
3963 /* Construct and perhaps optimize a tree representation
3964 for a unary operation. CODE, a tree_code, specifies the operation
3965 and XARG is the operand. */
3967 tree
3968 build_x_unary_op (enum tree_code code, tree xarg)
3970 tree orig_expr = xarg;
3971 tree exp;
3972 int ptrmem = 0;
3974 if (processing_template_decl)
3976 if (type_dependent_expression_p (xarg))
3977 return build_min_nt (code, xarg, NULL_TREE);
3979 xarg = build_non_dependent_expr (xarg);
3982 exp = NULL_TREE;
3984 /* [expr.unary.op] says:
3986 The address of an object of incomplete type can be taken.
3988 (And is just the ordinary address operator, not an overloaded
3989 "operator &".) However, if the type is a template
3990 specialization, we must complete the type at this point so that
3991 an overloaded "operator &" will be available if required. */
3992 if (code == ADDR_EXPR
3993 && TREE_CODE (xarg) != TEMPLATE_ID_EXPR
3994 && ((CLASS_TYPE_P (TREE_TYPE (xarg))
3995 && !COMPLETE_TYPE_P (complete_type (TREE_TYPE (xarg))))
3996 || (TREE_CODE (xarg) == OFFSET_REF)))
3997 /* Don't look for a function. */;
3998 else
3999 exp = build_new_op (code, LOOKUP_NORMAL, xarg, NULL_TREE, NULL_TREE,
4000 /*overloaded_p=*/NULL);
4001 if (!exp && code == ADDR_EXPR)
4003 /* A pointer to member-function can be formed only by saying
4004 &X::mf. */
4005 if (!flag_ms_extensions && TREE_CODE (TREE_TYPE (xarg)) == METHOD_TYPE
4006 && (TREE_CODE (xarg) != OFFSET_REF || !PTRMEM_OK_P (xarg)))
4008 if (TREE_CODE (xarg) != OFFSET_REF
4009 || !TYPE_P (TREE_OPERAND (xarg, 0)))
4011 error ("invalid use of %qE to form a pointer-to-member-function",
4012 xarg);
4013 if (TREE_CODE (xarg) != OFFSET_REF)
4014 inform (" a qualified-id is required");
4015 return error_mark_node;
4017 else
4019 error ("parentheses around %qE cannot be used to form a"
4020 " pointer-to-member-function",
4021 xarg);
4022 PTRMEM_OK_P (xarg) = 1;
4026 if (TREE_CODE (xarg) == OFFSET_REF)
4028 ptrmem = PTRMEM_OK_P (xarg);
4030 if (!ptrmem && !flag_ms_extensions
4031 && TREE_CODE (TREE_TYPE (TREE_OPERAND (xarg, 1))) == METHOD_TYPE)
4033 /* A single non-static member, make sure we don't allow a
4034 pointer-to-member. */
4035 xarg = build2 (OFFSET_REF, TREE_TYPE (xarg),
4036 TREE_OPERAND (xarg, 0),
4037 ovl_cons (TREE_OPERAND (xarg, 1), NULL_TREE));
4038 PTRMEM_OK_P (xarg) = ptrmem;
4041 else if (TREE_CODE (xarg) == TARGET_EXPR)
4042 warning (0, "taking address of temporary");
4043 exp = build_unary_op (ADDR_EXPR, xarg, 0);
4046 if (processing_template_decl && exp != error_mark_node)
4047 exp = build_min_non_dep (code, exp, orig_expr,
4048 /*For {PRE,POST}{INC,DEC}REMENT_EXPR*/NULL_TREE);
4049 if (TREE_CODE (exp) == ADDR_EXPR)
4050 PTRMEM_OK_P (exp) = ptrmem;
4051 return exp;
4054 /* Like c_common_truthvalue_conversion, but handle pointer-to-member
4055 constants, where a null value is represented by an INTEGER_CST of
4056 -1. */
4058 tree
4059 cp_truthvalue_conversion (tree expr)
4061 tree type = TREE_TYPE (expr);
4062 if (TYPE_PTRMEM_P (type))
4063 return build_binary_op (NE_EXPR, expr, integer_zero_node, 1);
4064 else
4065 return c_common_truthvalue_conversion (expr);
4068 /* Just like cp_truthvalue_conversion, but we want a CLEANUP_POINT_EXPR. */
4070 tree
4071 condition_conversion (tree expr)
4073 tree t;
4074 if (processing_template_decl)
4075 return expr;
4076 t = perform_implicit_conversion (boolean_type_node, expr);
4077 t = fold_build_cleanup_point_expr (boolean_type_node, t);
4078 return t;
4081 /* Return an ADDR_EXPR giving the address of T. This function
4082 attempts no optimizations or simplifications; it is a low-level
4083 primitive. */
4085 tree
4086 build_address (tree t)
4088 tree addr;
4090 if (error_operand_p (t) || !cxx_mark_addressable (t))
4091 return error_mark_node;
4093 addr = build1 (ADDR_EXPR, build_pointer_type (TREE_TYPE (t)), t);
4095 return addr;
4098 /* Return a NOP_EXPR converting EXPR to TYPE. */
4100 tree
4101 build_nop (tree type, tree expr)
4103 if (type == error_mark_node || error_operand_p (expr))
4104 return expr;
4105 return build1 (NOP_EXPR, type, expr);
4108 /* C++: Must handle pointers to members.
4110 Perhaps type instantiation should be extended to handle conversion
4111 from aggregates to types we don't yet know we want? (Or are those
4112 cases typically errors which should be reported?)
4114 NOCONVERT nonzero suppresses the default promotions
4115 (such as from short to int). */
4117 tree
4118 build_unary_op (enum tree_code code, tree xarg, int noconvert)
4120 /* No default_conversion here. It causes trouble for ADDR_EXPR. */
4121 tree arg = xarg;
4122 tree argtype = 0;
4123 const char *errstring = NULL;
4124 tree val;
4125 const char *invalid_op_diag;
4127 if (arg == error_mark_node)
4128 return error_mark_node;
4130 if ((invalid_op_diag
4131 = targetm.invalid_unary_op ((code == UNARY_PLUS_EXPR
4132 ? CONVERT_EXPR
4133 : code),
4134 TREE_TYPE (xarg))))
4136 error (invalid_op_diag);
4137 return error_mark_node;
4140 switch (code)
4142 case UNARY_PLUS_EXPR:
4143 case NEGATE_EXPR:
4145 int flags = WANT_ARITH | WANT_ENUM;
4146 /* Unary plus (but not unary minus) is allowed on pointers. */
4147 if (code == UNARY_PLUS_EXPR)
4148 flags |= WANT_POINTER;
4149 arg = build_expr_type_conversion (flags, arg, true);
4150 if (!arg)
4151 errstring = (code == NEGATE_EXPR
4152 ? "wrong type argument to unary minus"
4153 : "wrong type argument to unary plus");
4154 else
4156 if (!noconvert && CP_INTEGRAL_TYPE_P (TREE_TYPE (arg)))
4157 arg = perform_integral_promotions (arg);
4159 /* Make sure the result is not an lvalue: a unary plus or minus
4160 expression is always a rvalue. */
4161 arg = rvalue (arg);
4164 break;
4166 case BIT_NOT_EXPR:
4167 if (TREE_CODE (TREE_TYPE (arg)) == COMPLEX_TYPE)
4169 code = CONJ_EXPR;
4170 if (!noconvert)
4171 arg = default_conversion (arg);
4173 else if (!(arg = build_expr_type_conversion (WANT_INT | WANT_ENUM
4174 | WANT_VECTOR,
4175 arg, true)))
4176 errstring = "wrong type argument to bit-complement";
4177 else if (!noconvert && CP_INTEGRAL_TYPE_P (TREE_TYPE (arg)))
4178 arg = perform_integral_promotions (arg);
4179 break;
4181 case ABS_EXPR:
4182 if (!(arg = build_expr_type_conversion (WANT_ARITH | WANT_ENUM, arg, true)))
4183 errstring = "wrong type argument to abs";
4184 else if (!noconvert)
4185 arg = default_conversion (arg);
4186 break;
4188 case CONJ_EXPR:
4189 /* Conjugating a real value is a no-op, but allow it anyway. */
4190 if (!(arg = build_expr_type_conversion (WANT_ARITH | WANT_ENUM, arg, true)))
4191 errstring = "wrong type argument to conjugation";
4192 else if (!noconvert)
4193 arg = default_conversion (arg);
4194 break;
4196 case TRUTH_NOT_EXPR:
4197 arg = perform_implicit_conversion (boolean_type_node, arg);
4198 val = invert_truthvalue (arg);
4199 if (arg != error_mark_node)
4200 return val;
4201 errstring = "in argument to unary !";
4202 break;
4204 case NOP_EXPR:
4205 break;
4207 case REALPART_EXPR:
4208 if (TREE_CODE (arg) == COMPLEX_CST)
4209 return TREE_REALPART (arg);
4210 else if (TREE_CODE (TREE_TYPE (arg)) == COMPLEX_TYPE)
4212 arg = build1 (REALPART_EXPR, TREE_TYPE (TREE_TYPE (arg)), arg);
4213 return fold_if_not_in_template (arg);
4215 else
4216 return arg;
4218 case IMAGPART_EXPR:
4219 if (TREE_CODE (arg) == COMPLEX_CST)
4220 return TREE_IMAGPART (arg);
4221 else if (TREE_CODE (TREE_TYPE (arg)) == COMPLEX_TYPE)
4223 arg = build1 (IMAGPART_EXPR, TREE_TYPE (TREE_TYPE (arg)), arg);
4224 return fold_if_not_in_template (arg);
4226 else
4227 return cp_convert (TREE_TYPE (arg), integer_zero_node);
4229 case PREINCREMENT_EXPR:
4230 case POSTINCREMENT_EXPR:
4231 case PREDECREMENT_EXPR:
4232 case POSTDECREMENT_EXPR:
4233 /* Handle complex lvalues (when permitted)
4234 by reduction to simpler cases. */
4236 val = unary_complex_lvalue (code, arg);
4237 if (val != 0)
4238 return val;
4240 /* Increment or decrement the real part of the value,
4241 and don't change the imaginary part. */
4242 if (TREE_CODE (TREE_TYPE (arg)) == COMPLEX_TYPE)
4244 tree real, imag;
4246 arg = stabilize_reference (arg);
4247 real = build_unary_op (REALPART_EXPR, arg, 1);
4248 imag = build_unary_op (IMAGPART_EXPR, arg, 1);
4249 real = build_unary_op (code, real, 1);
4250 if (real == error_mark_node || imag == error_mark_node)
4251 return error_mark_node;
4252 return build2 (COMPLEX_EXPR, TREE_TYPE (arg),
4253 real, imag);
4256 /* Report invalid types. */
4258 if (!(arg = build_expr_type_conversion (WANT_ARITH | WANT_POINTER,
4259 arg, true)))
4261 if (code == PREINCREMENT_EXPR)
4262 errstring ="no pre-increment operator for type";
4263 else if (code == POSTINCREMENT_EXPR)
4264 errstring ="no post-increment operator for type";
4265 else if (code == PREDECREMENT_EXPR)
4266 errstring ="no pre-decrement operator for type";
4267 else
4268 errstring ="no post-decrement operator for type";
4269 break;
4271 else if (arg == error_mark_node)
4272 return error_mark_node;
4274 /* Report something read-only. */
4276 if (CP_TYPE_CONST_P (TREE_TYPE (arg))
4277 || TREE_READONLY (arg))
4278 readonly_error (arg, ((code == PREINCREMENT_EXPR
4279 || code == POSTINCREMENT_EXPR)
4280 ? "increment" : "decrement"));
4283 tree inc;
4284 tree declared_type;
4285 tree result_type = TREE_TYPE (arg);
4287 declared_type = unlowered_expr_type (arg);
4289 arg = get_unwidened (arg, 0);
4290 argtype = TREE_TYPE (arg);
4292 /* ARM $5.2.5 last annotation says this should be forbidden. */
4293 if (TREE_CODE (argtype) == ENUMERAL_TYPE)
4294 pedwarn ((code == PREINCREMENT_EXPR || code == POSTINCREMENT_EXPR)
4295 ? G_("ISO C++ forbids incrementing an enum")
4296 : G_("ISO C++ forbids decrementing an enum"));
4298 /* Compute the increment. */
4300 if (TREE_CODE (argtype) == POINTER_TYPE)
4302 tree type = complete_type (TREE_TYPE (argtype));
4304 if (!COMPLETE_OR_VOID_TYPE_P (type))
4305 error (((code == PREINCREMENT_EXPR
4306 || code == POSTINCREMENT_EXPR))
4307 ? G_("cannot increment a pointer to incomplete type %qT")
4308 : G_("cannot decrement a pointer to incomplete type %qT"),
4309 TREE_TYPE (argtype));
4310 else if ((pedantic || warn_pointer_arith)
4311 && !TYPE_PTROB_P (argtype))
4312 pedwarn ((code == PREINCREMENT_EXPR
4313 || code == POSTINCREMENT_EXPR)
4314 ? G_("ISO C++ forbids incrementing a pointer of type %qT")
4315 : G_("ISO C++ forbids decrementing a pointer of type %qT"),
4316 argtype);
4317 inc = cxx_sizeof_nowarn (TREE_TYPE (argtype));
4319 else
4320 inc = integer_one_node;
4322 inc = cp_convert (argtype, inc);
4324 /* Complain about anything else that is not a true lvalue. */
4325 if (!lvalue_or_else (arg, ((code == PREINCREMENT_EXPR
4326 || code == POSTINCREMENT_EXPR)
4327 ? lv_increment : lv_decrement)))
4328 return error_mark_node;
4330 /* Forbid using -- on `bool'. */
4331 if (same_type_p (declared_type, boolean_type_node))
4333 if (code == POSTDECREMENT_EXPR || code == PREDECREMENT_EXPR)
4335 error ("invalid use of Boolean expression as operand "
4336 "to %<operator--%>");
4337 return error_mark_node;
4339 val = boolean_increment (code, arg);
4341 else
4342 val = build2 (code, TREE_TYPE (arg), arg, inc);
4344 TREE_SIDE_EFFECTS (val) = 1;
4345 return cp_convert (result_type, val);
4348 case ADDR_EXPR:
4349 /* Note that this operation never does default_conversion
4350 regardless of NOCONVERT. */
4352 argtype = lvalue_type (arg);
4354 if (TREE_CODE (arg) == OFFSET_REF)
4355 goto offset_ref;
4357 if (TREE_CODE (argtype) == REFERENCE_TYPE)
4359 tree type = build_pointer_type (TREE_TYPE (argtype));
4360 arg = build1 (CONVERT_EXPR, type, arg);
4361 return arg;
4363 else if (pedantic && DECL_MAIN_P (arg))
4364 /* ARM $3.4 */
4365 pedwarn ("ISO C++ forbids taking address of function %<::main%>");
4367 /* Let &* cancel out to simplify resulting code. */
4368 if (TREE_CODE (arg) == INDIRECT_REF)
4370 /* We don't need to have `current_class_ptr' wrapped in a
4371 NON_LVALUE_EXPR node. */
4372 if (arg == current_class_ref)
4373 return current_class_ptr;
4375 arg = TREE_OPERAND (arg, 0);
4376 if (TREE_CODE (TREE_TYPE (arg)) == REFERENCE_TYPE)
4378 tree type = build_pointer_type (TREE_TYPE (TREE_TYPE (arg)));
4379 arg = build1 (CONVERT_EXPR, type, arg);
4381 else
4382 /* Don't let this be an lvalue. */
4383 arg = rvalue (arg);
4384 return arg;
4387 /* Uninstantiated types are all functions. Taking the
4388 address of a function is a no-op, so just return the
4389 argument. */
4391 gcc_assert (TREE_CODE (arg) != IDENTIFIER_NODE
4392 || !IDENTIFIER_OPNAME_P (arg));
4394 if (TREE_CODE (arg) == COMPONENT_REF && type_unknown_p (arg)
4395 && !really_overloaded_fn (TREE_OPERAND (arg, 1)))
4397 /* They're trying to take the address of a unique non-static
4398 member function. This is ill-formed (except in MS-land),
4399 but let's try to DTRT.
4400 Note: We only handle unique functions here because we don't
4401 want to complain if there's a static overload; non-unique
4402 cases will be handled by instantiate_type. But we need to
4403 handle this case here to allow casts on the resulting PMF.
4404 We could defer this in non-MS mode, but it's easier to give
4405 a useful error here. */
4407 /* Inside constant member functions, the `this' pointer
4408 contains an extra const qualifier. TYPE_MAIN_VARIANT
4409 is used here to remove this const from the diagnostics
4410 and the created OFFSET_REF. */
4411 tree base = TYPE_MAIN_VARIANT (TREE_TYPE (TREE_OPERAND (arg, 0)));
4412 tree fn = get_first_fn (TREE_OPERAND (arg, 1));
4413 mark_used (fn);
4415 if (! flag_ms_extensions)
4417 tree name = DECL_NAME (fn);
4418 if (current_class_type
4419 && TREE_OPERAND (arg, 0) == current_class_ref)
4420 /* An expression like &memfn. */
4421 pedwarn ("ISO C++ forbids taking the address of an unqualified"
4422 " or parenthesized non-static member function to form"
4423 " a pointer to member function. Say %<&%T::%D%>",
4424 base, name);
4425 else
4426 pedwarn ("ISO C++ forbids taking the address of a bound member"
4427 " function to form a pointer to member function."
4428 " Say %<&%T::%D%>",
4429 base, name);
4431 arg = build_offset_ref (base, fn, /*address_p=*/true);
4434 offset_ref:
4435 if (type_unknown_p (arg))
4436 return build1 (ADDR_EXPR, unknown_type_node, arg);
4438 /* Handle complex lvalues (when permitted)
4439 by reduction to simpler cases. */
4440 val = unary_complex_lvalue (code, arg);
4441 if (val != 0)
4442 return val;
4444 switch (TREE_CODE (arg))
4446 case NOP_EXPR:
4447 case CONVERT_EXPR:
4448 case FLOAT_EXPR:
4449 case FIX_TRUNC_EXPR:
4450 if (! lvalue_p (arg) && pedantic)
4451 pedwarn ("ISO C++ forbids taking the address of a cast to a non-lvalue expression");
4452 break;
4454 case BASELINK:
4455 arg = BASELINK_FUNCTIONS (arg);
4456 /* Fall through. */
4458 case OVERLOAD:
4459 arg = OVL_CURRENT (arg);
4460 break;
4462 case OFFSET_REF:
4463 /* Turn a reference to a non-static data member into a
4464 pointer-to-member. */
4466 tree type;
4467 tree t;
4469 if (!PTRMEM_OK_P (arg))
4470 return build_unary_op (code, arg, 0);
4472 t = TREE_OPERAND (arg, 1);
4473 if (TREE_CODE (TREE_TYPE (t)) == REFERENCE_TYPE)
4475 error ("cannot create pointer to reference member %qD", t);
4476 return error_mark_node;
4479 type = build_ptrmem_type (context_for_name_lookup (t),
4480 TREE_TYPE (t));
4481 t = make_ptrmem_cst (type, TREE_OPERAND (arg, 1));
4482 return t;
4485 default:
4486 break;
4489 /* Anything not already handled and not a true memory reference
4490 is an error. */
4491 if (TREE_CODE (argtype) != FUNCTION_TYPE
4492 && TREE_CODE (argtype) != METHOD_TYPE
4493 && TREE_CODE (arg) != OFFSET_REF
4494 && !lvalue_or_else (arg, lv_addressof))
4495 return error_mark_node;
4497 if (argtype != error_mark_node)
4498 argtype = build_pointer_type (argtype);
4500 /* In a template, we are processing a non-dependent expression
4501 so we can just form an ADDR_EXPR with the correct type. */
4502 if (processing_template_decl)
4504 val = build_address (arg);
4505 if (TREE_CODE (arg) == OFFSET_REF)
4506 PTRMEM_OK_P (val) = PTRMEM_OK_P (arg);
4507 return val;
4510 if (TREE_CODE (arg) != COMPONENT_REF)
4512 val = build_address (arg);
4513 if (TREE_CODE (arg) == OFFSET_REF)
4514 PTRMEM_OK_P (val) = PTRMEM_OK_P (arg);
4516 else if (TREE_CODE (TREE_OPERAND (arg, 1)) == BASELINK)
4518 tree fn = BASELINK_FUNCTIONS (TREE_OPERAND (arg, 1));
4520 /* We can only get here with a single static member
4521 function. */
4522 gcc_assert (TREE_CODE (fn) == FUNCTION_DECL
4523 && DECL_STATIC_FUNCTION_P (fn));
4524 mark_used (fn);
4525 val = build_address (fn);
4526 if (TREE_SIDE_EFFECTS (TREE_OPERAND (arg, 0)))
4527 /* Do not lose object's side effects. */
4528 val = build2 (COMPOUND_EXPR, TREE_TYPE (val),
4529 TREE_OPERAND (arg, 0), val);
4531 else if (DECL_C_BIT_FIELD (TREE_OPERAND (arg, 1)))
4533 error ("attempt to take address of bit-field structure member %qD",
4534 TREE_OPERAND (arg, 1));
4535 return error_mark_node;
4537 else
4539 tree object = TREE_OPERAND (arg, 0);
4540 tree field = TREE_OPERAND (arg, 1);
4541 gcc_assert (same_type_ignoring_top_level_qualifiers_p
4542 (TREE_TYPE (object), decl_type_context (field)));
4543 val = build_address (arg);
4546 if (TREE_CODE (argtype) == POINTER_TYPE
4547 && TREE_CODE (TREE_TYPE (argtype)) == METHOD_TYPE)
4549 build_ptrmemfunc_type (argtype);
4550 val = build_ptrmemfunc (argtype, val, 0,
4551 /*c_cast_p=*/false);
4554 return val;
4556 default:
4557 break;
4560 if (!errstring)
4562 if (argtype == 0)
4563 argtype = TREE_TYPE (arg);
4564 return fold_if_not_in_template (build1 (code, argtype, arg));
4567 error ("%s", errstring);
4568 return error_mark_node;
4571 /* Apply unary lvalue-demanding operator CODE to the expression ARG
4572 for certain kinds of expressions which are not really lvalues
4573 but which we can accept as lvalues.
4575 If ARG is not a kind of expression we can handle, return
4576 NULL_TREE. */
4578 tree
4579 unary_complex_lvalue (enum tree_code code, tree arg)
4581 /* Inside a template, making these kinds of adjustments is
4582 pointless; we are only concerned with the type of the
4583 expression. */
4584 if (processing_template_decl)
4585 return NULL_TREE;
4587 /* Handle (a, b) used as an "lvalue". */
4588 if (TREE_CODE (arg) == COMPOUND_EXPR)
4590 tree real_result = build_unary_op (code, TREE_OPERAND (arg, 1), 0);
4591 return build2 (COMPOUND_EXPR, TREE_TYPE (real_result),
4592 TREE_OPERAND (arg, 0), real_result);
4595 /* Handle (a ? b : c) used as an "lvalue". */
4596 if (TREE_CODE (arg) == COND_EXPR
4597 || TREE_CODE (arg) == MIN_EXPR || TREE_CODE (arg) == MAX_EXPR)
4598 return rationalize_conditional_expr (code, arg);
4600 /* Handle (a = b), (++a), and (--a) used as an "lvalue". */
4601 if (TREE_CODE (arg) == MODIFY_EXPR
4602 || TREE_CODE (arg) == PREINCREMENT_EXPR
4603 || TREE_CODE (arg) == PREDECREMENT_EXPR)
4605 tree lvalue = TREE_OPERAND (arg, 0);
4606 if (TREE_SIDE_EFFECTS (lvalue))
4608 lvalue = stabilize_reference (lvalue);
4609 arg = build2 (TREE_CODE (arg), TREE_TYPE (arg),
4610 lvalue, TREE_OPERAND (arg, 1));
4612 return unary_complex_lvalue
4613 (code, build2 (COMPOUND_EXPR, TREE_TYPE (lvalue), arg, lvalue));
4616 if (code != ADDR_EXPR)
4617 return NULL_TREE;
4619 /* Handle (a = b) used as an "lvalue" for `&'. */
4620 if (TREE_CODE (arg) == MODIFY_EXPR
4621 || TREE_CODE (arg) == INIT_EXPR)
4623 tree real_result = build_unary_op (code, TREE_OPERAND (arg, 0), 0);
4624 arg = build2 (COMPOUND_EXPR, TREE_TYPE (real_result),
4625 arg, real_result);
4626 TREE_NO_WARNING (arg) = 1;
4627 return arg;
4630 if (TREE_CODE (TREE_TYPE (arg)) == FUNCTION_TYPE
4631 || TREE_CODE (TREE_TYPE (arg)) == METHOD_TYPE
4632 || TREE_CODE (arg) == OFFSET_REF)
4633 return NULL_TREE;
4635 /* We permit compiler to make function calls returning
4636 objects of aggregate type look like lvalues. */
4638 tree targ = arg;
4640 if (TREE_CODE (targ) == SAVE_EXPR)
4641 targ = TREE_OPERAND (targ, 0);
4643 if (TREE_CODE (targ) == CALL_EXPR && IS_AGGR_TYPE (TREE_TYPE (targ)))
4645 if (TREE_CODE (arg) == SAVE_EXPR)
4646 targ = arg;
4647 else
4648 targ = build_cplus_new (TREE_TYPE (arg), arg);
4649 return build1 (ADDR_EXPR, build_pointer_type (TREE_TYPE (arg)), targ);
4652 if (TREE_CODE (arg) == SAVE_EXPR && TREE_CODE (targ) == INDIRECT_REF)
4653 return build3 (SAVE_EXPR, build_pointer_type (TREE_TYPE (arg)),
4654 TREE_OPERAND (targ, 0), current_function_decl, NULL);
4657 /* Don't let anything else be handled specially. */
4658 return NULL_TREE;
4661 /* Mark EXP saying that we need to be able to take the
4662 address of it; it should not be allocated in a register.
4663 Value is true if successful.
4665 C++: we do not allow `current_class_ptr' to be addressable. */
4667 bool
4668 cxx_mark_addressable (tree exp)
4670 tree x = exp;
4672 while (1)
4673 switch (TREE_CODE (x))
4675 case ADDR_EXPR:
4676 case COMPONENT_REF:
4677 case ARRAY_REF:
4678 case REALPART_EXPR:
4679 case IMAGPART_EXPR:
4680 x = TREE_OPERAND (x, 0);
4681 break;
4683 case PARM_DECL:
4684 if (x == current_class_ptr)
4686 error ("cannot take the address of %<this%>, which is an rvalue expression");
4687 TREE_ADDRESSABLE (x) = 1; /* so compiler doesn't die later. */
4688 return true;
4690 /* Fall through. */
4692 case VAR_DECL:
4693 /* Caller should not be trying to mark initialized
4694 constant fields addressable. */
4695 gcc_assert (DECL_LANG_SPECIFIC (x) == 0
4696 || DECL_IN_AGGR_P (x) == 0
4697 || TREE_STATIC (x)
4698 || DECL_EXTERNAL (x));
4699 /* Fall through. */
4701 case CONST_DECL:
4702 case RESULT_DECL:
4703 if (DECL_REGISTER (x) && !TREE_ADDRESSABLE (x)
4704 && !DECL_ARTIFICIAL (x))
4706 if (TREE_CODE (x) == VAR_DECL && DECL_HARD_REGISTER (x))
4708 error
4709 ("address of explicit register variable %qD requested", x);
4710 return false;
4712 else if (extra_warnings)
4713 warning
4714 (OPT_Wextra, "address requested for %qD, which is declared %<register%>", x);
4716 TREE_ADDRESSABLE (x) = 1;
4717 return true;
4719 case FUNCTION_DECL:
4720 TREE_ADDRESSABLE (x) = 1;
4721 return true;
4723 case CONSTRUCTOR:
4724 TREE_ADDRESSABLE (x) = 1;
4725 return true;
4727 case TARGET_EXPR:
4728 TREE_ADDRESSABLE (x) = 1;
4729 cxx_mark_addressable (TREE_OPERAND (x, 0));
4730 return true;
4732 default:
4733 return true;
4737 /* Build and return a conditional expression IFEXP ? OP1 : OP2. */
4739 tree
4740 build_x_conditional_expr (tree ifexp, tree op1, tree op2)
4742 tree orig_ifexp = ifexp;
4743 tree orig_op1 = op1;
4744 tree orig_op2 = op2;
4745 tree expr;
4747 if (processing_template_decl)
4749 /* The standard says that the expression is type-dependent if
4750 IFEXP is type-dependent, even though the eventual type of the
4751 expression doesn't dependent on IFEXP. */
4752 if (type_dependent_expression_p (ifexp)
4753 /* As a GNU extension, the middle operand may be omitted. */
4754 || (op1 && type_dependent_expression_p (op1))
4755 || type_dependent_expression_p (op2))
4756 return build_min_nt (COND_EXPR, ifexp, op1, op2);
4757 ifexp = build_non_dependent_expr (ifexp);
4758 if (op1)
4759 op1 = build_non_dependent_expr (op1);
4760 op2 = build_non_dependent_expr (op2);
4763 expr = build_conditional_expr (ifexp, op1, op2);
4764 if (processing_template_decl && expr != error_mark_node)
4765 return build_min_non_dep (COND_EXPR, expr,
4766 orig_ifexp, orig_op1, orig_op2);
4767 return expr;
4770 /* Given a list of expressions, return a compound expression
4771 that performs them all and returns the value of the last of them. */
4773 tree build_x_compound_expr_from_list (tree list, const char *msg)
4775 tree expr = TREE_VALUE (list);
4777 if (TREE_CHAIN (list))
4779 if (msg)
4780 pedwarn ("%s expression list treated as compound expression", msg);
4782 for (list = TREE_CHAIN (list); list; list = TREE_CHAIN (list))
4783 expr = build_x_compound_expr (expr, TREE_VALUE (list));
4786 return expr;
4789 /* Handle overloading of the ',' operator when needed. */
4791 tree
4792 build_x_compound_expr (tree op1, tree op2)
4794 tree result;
4795 tree orig_op1 = op1;
4796 tree orig_op2 = op2;
4798 if (processing_template_decl)
4800 if (type_dependent_expression_p (op1)
4801 || type_dependent_expression_p (op2))
4802 return build_min_nt (COMPOUND_EXPR, op1, op2);
4803 op1 = build_non_dependent_expr (op1);
4804 op2 = build_non_dependent_expr (op2);
4807 result = build_new_op (COMPOUND_EXPR, LOOKUP_NORMAL, op1, op2, NULL_TREE,
4808 /*overloaded_p=*/NULL);
4809 if (!result)
4810 result = build_compound_expr (op1, op2);
4812 if (processing_template_decl && result != error_mark_node)
4813 return build_min_non_dep (COMPOUND_EXPR, result, orig_op1, orig_op2);
4815 return result;
4818 /* Build a compound expression. */
4820 tree
4821 build_compound_expr (tree lhs, tree rhs)
4823 lhs = convert_to_void (lhs, "left-hand operand of comma");
4825 if (lhs == error_mark_node || rhs == error_mark_node)
4826 return error_mark_node;
4828 if (TREE_CODE (rhs) == TARGET_EXPR)
4830 /* If the rhs is a TARGET_EXPR, then build the compound
4831 expression inside the target_expr's initializer. This
4832 helps the compiler to eliminate unnecessary temporaries. */
4833 tree init = TREE_OPERAND (rhs, 1);
4835 init = build2 (COMPOUND_EXPR, TREE_TYPE (init), lhs, init);
4836 TREE_OPERAND (rhs, 1) = init;
4838 return rhs;
4841 return build2 (COMPOUND_EXPR, TREE_TYPE (rhs), lhs, rhs);
4844 /* Issue a diagnostic message if casting from SRC_TYPE to DEST_TYPE
4845 casts away constness. DIAG_FN gives the function to call if we
4846 need to issue a diagnostic; if it is NULL, no diagnostic will be
4847 issued. DESCRIPTION explains what operation is taking place. */
4849 static void
4850 check_for_casting_away_constness (tree src_type, tree dest_type,
4851 void (*diag_fn)(const char *, ...) ATTRIBUTE_GCC_CXXDIAG(1,2),
4852 const char *description)
4854 if (diag_fn && casts_away_constness (src_type, dest_type))
4855 diag_fn ("%s from type %qT to type %qT casts away constness",
4856 description, src_type, dest_type);
4859 /* Convert EXPR (an expression with pointer-to-member type) to TYPE
4860 (another pointer-to-member type in the same hierarchy) and return
4861 the converted expression. If ALLOW_INVERSE_P is permitted, a
4862 pointer-to-derived may be converted to pointer-to-base; otherwise,
4863 only the other direction is permitted. If C_CAST_P is true, this
4864 conversion is taking place as part of a C-style cast. */
4866 tree
4867 convert_ptrmem (tree type, tree expr, bool allow_inverse_p,
4868 bool c_cast_p)
4870 if (TYPE_PTRMEM_P (type))
4872 tree delta;
4874 if (TREE_CODE (expr) == PTRMEM_CST)
4875 expr = cplus_expand_constant (expr);
4876 delta = get_delta_difference (TYPE_PTRMEM_CLASS_TYPE (TREE_TYPE (expr)),
4877 TYPE_PTRMEM_CLASS_TYPE (type),
4878 allow_inverse_p,
4879 c_cast_p);
4880 if (!integer_zerop (delta))
4882 tree cond, op1, op2;
4884 cond = cp_build_binary_op (EQ_EXPR,
4885 expr,
4886 build_int_cst (TREE_TYPE (expr), -1));
4887 op1 = build_nop (ptrdiff_type_node, expr);
4888 op2 = cp_build_binary_op (PLUS_EXPR, op1, delta);
4890 expr = fold_build3 (COND_EXPR, ptrdiff_type_node, cond, op1, op2);
4894 return build_nop (type, expr);
4896 else
4897 return build_ptrmemfunc (TYPE_PTRMEMFUNC_FN_TYPE (type), expr,
4898 allow_inverse_p, c_cast_p);
4901 /* If EXPR is an INTEGER_CST and ORIG is an arithmetic constant, return
4902 a version of EXPR that has TREE_OVERFLOW set if it is set in ORIG.
4903 Otherwise, return EXPR unchanged. */
4905 static tree
4906 ignore_overflows (tree expr, tree orig)
4908 if (TREE_CODE (expr) == INTEGER_CST
4909 && CONSTANT_CLASS_P (orig)
4910 && TREE_CODE (orig) != STRING_CST
4911 && TREE_OVERFLOW (expr) != TREE_OVERFLOW (orig))
4913 if (!TREE_OVERFLOW (orig))
4914 /* Ensure constant sharing. */
4915 expr = build_int_cst_wide (TREE_TYPE (expr),
4916 TREE_INT_CST_LOW (expr),
4917 TREE_INT_CST_HIGH (expr));
4918 else
4920 /* Avoid clobbering a shared constant. */
4921 expr = copy_node (expr);
4922 TREE_OVERFLOW (expr) = TREE_OVERFLOW (orig);
4925 return expr;
4928 /* Perform a static_cast from EXPR to TYPE. When C_CAST_P is true,
4929 this static_cast is being attempted as one of the possible casts
4930 allowed by a C-style cast. (In that case, accessibility of base
4931 classes is not considered, and it is OK to cast away
4932 constness.) Return the result of the cast. *VALID_P is set to
4933 indicate whether or not the cast was valid. */
4935 static tree
4936 build_static_cast_1 (tree type, tree expr, bool c_cast_p,
4937 bool *valid_p)
4939 tree intype;
4940 tree result;
4941 tree orig;
4942 void (*diag_fn)(const char*, ...) ATTRIBUTE_GCC_CXXDIAG(1,2);
4943 const char *desc;
4945 /* Assume the cast is valid. */
4946 *valid_p = true;
4948 intype = TREE_TYPE (expr);
4950 /* Save casted types in the function's used types hash table. */
4951 used_types_insert (type);
4953 /* Determine what to do when casting away constness. */
4954 if (c_cast_p)
4956 /* C-style casts are allowed to cast away constness. With
4957 WARN_CAST_QUAL, we still want to issue a warning. */
4958 diag_fn = warn_cast_qual ? warning0 : NULL;
4959 desc = "cast";
4961 else
4963 /* A static_cast may not cast away constness. */
4964 diag_fn = error;
4965 desc = "static_cast";
4968 /* [expr.static.cast]
4970 An lvalue of type "cv1 B", where B is a class type, can be cast
4971 to type "reference to cv2 D", where D is a class derived (clause
4972 _class.derived_) from B, if a valid standard conversion from
4973 "pointer to D" to "pointer to B" exists (_conv.ptr_), cv2 is the
4974 same cv-qualification as, or greater cv-qualification than, cv1,
4975 and B is not a virtual base class of D. */
4976 /* We check this case before checking the validity of "TYPE t =
4977 EXPR;" below because for this case:
4979 struct B {};
4980 struct D : public B { D(const B&); };
4981 extern B& b;
4982 void f() { static_cast<const D&>(b); }
4984 we want to avoid constructing a new D. The standard is not
4985 completely clear about this issue, but our interpretation is
4986 consistent with other compilers. */
4987 if (TREE_CODE (type) == REFERENCE_TYPE
4988 && CLASS_TYPE_P (TREE_TYPE (type))
4989 && CLASS_TYPE_P (intype)
4990 && real_lvalue_p (expr)
4991 && DERIVED_FROM_P (intype, TREE_TYPE (type))
4992 && can_convert (build_pointer_type (TYPE_MAIN_VARIANT (intype)),
4993 build_pointer_type (TYPE_MAIN_VARIANT
4994 (TREE_TYPE (type))))
4995 && (c_cast_p
4996 || at_least_as_qualified_p (TREE_TYPE (type), intype)))
4998 tree base;
5000 /* There is a standard conversion from "D*" to "B*" even if "B"
5001 is ambiguous or inaccessible. If this is really a
5002 static_cast, then we check both for inaccessibility and
5003 ambiguity. However, if this is a static_cast being performed
5004 because the user wrote a C-style cast, then accessibility is
5005 not considered. */
5006 base = lookup_base (TREE_TYPE (type), intype,
5007 c_cast_p ? ba_unique : ba_check,
5008 NULL);
5010 /* Convert from "B*" to "D*". This function will check that "B"
5011 is not a virtual base of "D". */
5012 expr = build_base_path (MINUS_EXPR, build_address (expr),
5013 base, /*nonnull=*/false);
5014 /* Convert the pointer to a reference -- but then remember that
5015 there are no expressions with reference type in C++. */
5016 return convert_from_reference (build_nop (type, expr));
5019 orig = expr;
5021 /* [expr.static.cast]
5023 An expression e can be explicitly converted to a type T using a
5024 static_cast of the form static_cast<T>(e) if the declaration T
5025 t(e);" is well-formed, for some invented temporary variable
5026 t. */
5027 result = perform_direct_initialization_if_possible (type, expr,
5028 c_cast_p);
5029 if (result)
5031 result = convert_from_reference (result);
5033 /* Ignore any integer overflow caused by the cast. */
5034 result = ignore_overflows (result, orig);
5036 /* [expr.static.cast]
5038 If T is a reference type, the result is an lvalue; otherwise,
5039 the result is an rvalue. */
5040 if (TREE_CODE (type) != REFERENCE_TYPE)
5041 result = rvalue (result);
5042 return result;
5045 /* [expr.static.cast]
5047 Any expression can be explicitly converted to type cv void. */
5048 if (TREE_CODE (type) == VOID_TYPE)
5049 return convert_to_void (expr, /*implicit=*/NULL);
5051 /* [expr.static.cast]
5053 The inverse of any standard conversion sequence (clause _conv_),
5054 other than the lvalue-to-rvalue (_conv.lval_), array-to-pointer
5055 (_conv.array_), function-to-pointer (_conv.func_), and boolean
5056 (_conv.bool_) conversions, can be performed explicitly using
5057 static_cast subject to the restriction that the explicit
5058 conversion does not cast away constness (_expr.const.cast_), and
5059 the following additional rules for specific cases: */
5060 /* For reference, the conversions not excluded are: integral
5061 promotions, floating point promotion, integral conversions,
5062 floating point conversions, floating-integral conversions,
5063 pointer conversions, and pointer to member conversions. */
5064 /* DR 128
5066 A value of integral _or enumeration_ type can be explicitly
5067 converted to an enumeration type. */
5068 /* The effect of all that is that any conversion between any two
5069 types which are integral, floating, or enumeration types can be
5070 performed. */
5071 if ((INTEGRAL_TYPE_P (type) || SCALAR_FLOAT_TYPE_P (type))
5072 && (INTEGRAL_TYPE_P (intype) || SCALAR_FLOAT_TYPE_P (intype)))
5074 expr = ocp_convert (type, expr, CONV_C_CAST, LOOKUP_NORMAL);
5076 /* Ignore any integer overflow caused by the cast. */
5077 expr = ignore_overflows (expr, orig);
5078 return expr;
5081 if (TYPE_PTR_P (type) && TYPE_PTR_P (intype)
5082 && CLASS_TYPE_P (TREE_TYPE (type))
5083 && CLASS_TYPE_P (TREE_TYPE (intype))
5084 && can_convert (build_pointer_type (TYPE_MAIN_VARIANT
5085 (TREE_TYPE (intype))),
5086 build_pointer_type (TYPE_MAIN_VARIANT
5087 (TREE_TYPE (type)))))
5089 tree base;
5091 if (!c_cast_p)
5092 check_for_casting_away_constness (intype, type, diag_fn, desc);
5093 base = lookup_base (TREE_TYPE (type), TREE_TYPE (intype),
5094 c_cast_p ? ba_unique : ba_check,
5095 NULL);
5096 return build_base_path (MINUS_EXPR, expr, base, /*nonnull=*/false);
5099 if ((TYPE_PTRMEM_P (type) && TYPE_PTRMEM_P (intype))
5100 || (TYPE_PTRMEMFUNC_P (type) && TYPE_PTRMEMFUNC_P (intype)))
5102 tree c1;
5103 tree c2;
5104 tree t1;
5105 tree t2;
5107 c1 = TYPE_PTRMEM_CLASS_TYPE (intype);
5108 c2 = TYPE_PTRMEM_CLASS_TYPE (type);
5110 if (TYPE_PTRMEM_P (type))
5112 t1 = (build_ptrmem_type
5113 (c1,
5114 TYPE_MAIN_VARIANT (TYPE_PTRMEM_POINTED_TO_TYPE (intype))));
5115 t2 = (build_ptrmem_type
5116 (c2,
5117 TYPE_MAIN_VARIANT (TYPE_PTRMEM_POINTED_TO_TYPE (type))));
5119 else
5121 t1 = intype;
5122 t2 = type;
5124 if (can_convert (t1, t2) || can_convert (t2, t1))
5126 if (!c_cast_p)
5127 check_for_casting_away_constness (intype, type, diag_fn,
5128 desc);
5129 return convert_ptrmem (type, expr, /*allow_inverse_p=*/1,
5130 c_cast_p);
5134 /* [expr.static.cast]
5136 An rvalue of type "pointer to cv void" can be explicitly
5137 converted to a pointer to object type. A value of type pointer
5138 to object converted to "pointer to cv void" and back to the
5139 original pointer type will have its original value. */
5140 if (TREE_CODE (intype) == POINTER_TYPE
5141 && VOID_TYPE_P (TREE_TYPE (intype))
5142 && TYPE_PTROB_P (type))
5144 if (!c_cast_p)
5145 check_for_casting_away_constness (intype, type, diag_fn, desc);
5146 return build_nop (type, expr);
5149 *valid_p = false;
5150 return error_mark_node;
5153 /* Return an expression representing static_cast<TYPE>(EXPR). */
5155 tree
5156 build_static_cast (tree type, tree expr)
5158 tree result;
5159 bool valid_p;
5161 if (type == error_mark_node || expr == error_mark_node)
5162 return error_mark_node;
5164 if (processing_template_decl)
5166 expr = build_min (STATIC_CAST_EXPR, type, expr);
5167 /* We don't know if it will or will not have side effects. */
5168 TREE_SIDE_EFFECTS (expr) = 1;
5169 return convert_from_reference (expr);
5172 /* build_c_cast puts on a NOP_EXPR to make the result not an lvalue.
5173 Strip such NOP_EXPRs if VALUE is being used in non-lvalue context. */
5174 if (TREE_CODE (type) != REFERENCE_TYPE
5175 && TREE_CODE (expr) == NOP_EXPR
5176 && TREE_TYPE (expr) == TREE_TYPE (TREE_OPERAND (expr, 0)))
5177 expr = TREE_OPERAND (expr, 0);
5179 result = build_static_cast_1 (type, expr, /*c_cast_p=*/false, &valid_p);
5180 if (valid_p)
5181 return result;
5183 error ("invalid static_cast from type %qT to type %qT",
5184 TREE_TYPE (expr), type);
5185 return error_mark_node;
5188 /* EXPR is an expression with member function or pointer-to-member
5189 function type. TYPE is a pointer type. Converting EXPR to TYPE is
5190 not permitted by ISO C++, but we accept it in some modes. If we
5191 are not in one of those modes, issue a diagnostic. Return the
5192 converted expression. */
5194 tree
5195 convert_member_func_to_ptr (tree type, tree expr)
5197 tree intype;
5198 tree decl;
5200 intype = TREE_TYPE (expr);
5201 gcc_assert (TYPE_PTRMEMFUNC_P (intype)
5202 || TREE_CODE (intype) == METHOD_TYPE);
5204 if (pedantic || warn_pmf2ptr)
5205 pedwarn ("converting from %qT to %qT", intype, type);
5207 if (TREE_CODE (intype) == METHOD_TYPE)
5208 expr = build_addr_func (expr);
5209 else if (TREE_CODE (expr) == PTRMEM_CST)
5210 expr = build_address (PTRMEM_CST_MEMBER (expr));
5211 else
5213 decl = maybe_dummy_object (TYPE_PTRMEM_CLASS_TYPE (intype), 0);
5214 decl = build_address (decl);
5215 expr = get_member_function_from_ptrfunc (&decl, expr);
5218 return build_nop (type, expr);
5221 /* Return a representation for a reinterpret_cast from EXPR to TYPE.
5222 If C_CAST_P is true, this reinterpret cast is being done as part of
5223 a C-style cast. If VALID_P is non-NULL, *VALID_P is set to
5224 indicate whether or not reinterpret_cast was valid. */
5226 static tree
5227 build_reinterpret_cast_1 (tree type, tree expr, bool c_cast_p,
5228 bool *valid_p)
5230 tree intype;
5232 /* Assume the cast is invalid. */
5233 if (valid_p)
5234 *valid_p = true;
5236 if (type == error_mark_node || error_operand_p (expr))
5237 return error_mark_node;
5239 intype = TREE_TYPE (expr);
5241 /* Save casted types in the function's used types hash table. */
5242 used_types_insert (type);
5244 /* [expr.reinterpret.cast]
5245 An lvalue expression of type T1 can be cast to the type
5246 "reference to T2" if an expression of type "pointer to T1" can be
5247 explicitly converted to the type "pointer to T2" using a
5248 reinterpret_cast. */
5249 if (TREE_CODE (type) == REFERENCE_TYPE)
5251 if (! real_lvalue_p (expr))
5253 error ("invalid cast of an rvalue expression of type "
5254 "%qT to type %qT",
5255 intype, type);
5256 return error_mark_node;
5259 /* Warn about a reinterpret_cast from "A*" to "B&" if "A" and
5260 "B" are related class types; the reinterpret_cast does not
5261 adjust the pointer. */
5262 if (TYPE_PTR_P (intype)
5263 && (cp_comptypes (TREE_TYPE (intype), TREE_TYPE (type),
5264 COMPARE_BASE | COMPARE_DERIVED)))
5265 warning (0, "casting %qT to %qT does not dereference pointer",
5266 intype, type);
5268 expr = build_unary_op (ADDR_EXPR, expr, 0);
5269 if (expr != error_mark_node)
5270 expr = build_reinterpret_cast_1
5271 (build_pointer_type (TREE_TYPE (type)), expr, c_cast_p,
5272 valid_p);
5273 if (expr != error_mark_node)
5274 expr = build_indirect_ref (expr, 0);
5275 return expr;
5278 /* As a G++ extension, we consider conversions from member
5279 functions, and pointers to member functions to
5280 pointer-to-function and pointer-to-void types. If
5281 -Wno-pmf-conversions has not been specified,
5282 convert_member_func_to_ptr will issue an error message. */
5283 if ((TYPE_PTRMEMFUNC_P (intype)
5284 || TREE_CODE (intype) == METHOD_TYPE)
5285 && TYPE_PTR_P (type)
5286 && (TREE_CODE (TREE_TYPE (type)) == FUNCTION_TYPE
5287 || VOID_TYPE_P (TREE_TYPE (type))))
5288 return convert_member_func_to_ptr (type, expr);
5290 /* If the cast is not to a reference type, the lvalue-to-rvalue,
5291 array-to-pointer, and function-to-pointer conversions are
5292 performed. */
5293 expr = decay_conversion (expr);
5295 /* build_c_cast puts on a NOP_EXPR to make the result not an lvalue.
5296 Strip such NOP_EXPRs if VALUE is being used in non-lvalue context. */
5297 if (TREE_CODE (expr) == NOP_EXPR
5298 && TREE_TYPE (expr) == TREE_TYPE (TREE_OPERAND (expr, 0)))
5299 expr = TREE_OPERAND (expr, 0);
5301 if (error_operand_p (expr))
5302 return error_mark_node;
5304 intype = TREE_TYPE (expr);
5306 /* [expr.reinterpret.cast]
5307 A pointer can be converted to any integral type large enough to
5308 hold it. */
5309 if (CP_INTEGRAL_TYPE_P (type) && TYPE_PTR_P (intype))
5311 if (TYPE_PRECISION (type) < TYPE_PRECISION (intype))
5312 pedwarn ("cast from %qT to %qT loses precision",
5313 intype, type);
5315 /* [expr.reinterpret.cast]
5316 A value of integral or enumeration type can be explicitly
5317 converted to a pointer. */
5318 else if (TYPE_PTR_P (type) && INTEGRAL_OR_ENUMERATION_TYPE_P (intype))
5319 /* OK */
5321 else if ((TYPE_PTRFN_P (type) && TYPE_PTRFN_P (intype))
5322 || (TYPE_PTRMEMFUNC_P (type) && TYPE_PTRMEMFUNC_P (intype)))
5323 return fold_if_not_in_template (build_nop (type, expr));
5324 else if ((TYPE_PTRMEM_P (type) && TYPE_PTRMEM_P (intype))
5325 || (TYPE_PTROBV_P (type) && TYPE_PTROBV_P (intype)))
5327 tree sexpr = expr;
5329 if (!c_cast_p)
5330 check_for_casting_away_constness (intype, type, error,
5331 "reinterpret_cast");
5332 /* Warn about possible alignment problems. */
5333 if (STRICT_ALIGNMENT && warn_cast_align
5334 && !VOID_TYPE_P (type)
5335 && TREE_CODE (TREE_TYPE (intype)) != FUNCTION_TYPE
5336 && COMPLETE_TYPE_P (TREE_TYPE (type))
5337 && COMPLETE_TYPE_P (TREE_TYPE (intype))
5338 && TYPE_ALIGN (TREE_TYPE (type)) > TYPE_ALIGN (TREE_TYPE (intype)))
5339 warning (0, "cast from %qT to %qT increases required alignment of "
5340 "target type",
5341 intype, type);
5343 /* We need to strip nops here, because the front end likes to
5344 create (int *)&a for array-to-pointer decay, instead of &a[0]. */
5345 STRIP_NOPS (sexpr);
5346 if (warn_strict_aliasing <= 2)
5347 strict_aliasing_warning (intype, type, sexpr);
5349 return fold_if_not_in_template (build_nop (type, expr));
5351 else if ((TYPE_PTRFN_P (type) && TYPE_PTROBV_P (intype))
5352 || (TYPE_PTRFN_P (intype) && TYPE_PTROBV_P (type)))
5354 if (pedantic)
5355 /* Only issue a warning, as we have always supported this
5356 where possible, and it is necessary in some cases. DR 195
5357 addresses this issue, but as of 2004/10/26 is still in
5358 drafting. */
5359 warning (0, "ISO C++ forbids casting between pointer-to-function and pointer-to-object");
5360 return fold_if_not_in_template (build_nop (type, expr));
5362 else if (TREE_CODE (type) == VECTOR_TYPE)
5363 return fold_if_not_in_template (convert_to_vector (type, expr));
5364 else if (TREE_CODE (intype) == VECTOR_TYPE && INTEGRAL_TYPE_P (type))
5365 return fold_if_not_in_template (convert_to_integer (type, expr));
5366 else
5368 if (valid_p)
5369 *valid_p = false;
5370 error ("invalid cast from type %qT to type %qT", intype, type);
5371 return error_mark_node;
5374 return cp_convert (type, expr);
5377 tree
5378 build_reinterpret_cast (tree type, tree expr)
5380 if (type == error_mark_node || expr == error_mark_node)
5381 return error_mark_node;
5383 if (processing_template_decl)
5385 tree t = build_min (REINTERPRET_CAST_EXPR, type, expr);
5387 if (!TREE_SIDE_EFFECTS (t)
5388 && type_dependent_expression_p (expr))
5389 /* There might turn out to be side effects inside expr. */
5390 TREE_SIDE_EFFECTS (t) = 1;
5391 return convert_from_reference (t);
5394 return build_reinterpret_cast_1 (type, expr, /*c_cast_p=*/false,
5395 /*valid_p=*/NULL);
5398 /* Perform a const_cast from EXPR to TYPE. If the cast is valid,
5399 return an appropriate expression. Otherwise, return
5400 error_mark_node. If the cast is not valid, and COMPLAIN is true,
5401 then a diagnostic will be issued. If VALID_P is non-NULL, we are
5402 performing a C-style cast, its value upon return will indicate
5403 whether or not the conversion succeeded. */
5405 static tree
5406 build_const_cast_1 (tree dst_type, tree expr, bool complain,
5407 bool *valid_p)
5409 tree src_type;
5410 tree reference_type;
5412 /* Callers are responsible for handling error_mark_node as a
5413 destination type. */
5414 gcc_assert (dst_type != error_mark_node);
5415 /* In a template, callers should be building syntactic
5416 representations of casts, not using this machinery. */
5417 gcc_assert (!processing_template_decl);
5419 /* Assume the conversion is invalid. */
5420 if (valid_p)
5421 *valid_p = false;
5423 if (!POINTER_TYPE_P (dst_type) && !TYPE_PTRMEM_P (dst_type))
5425 if (complain)
5426 error ("invalid use of const_cast with type %qT, "
5427 "which is not a pointer, "
5428 "reference, nor a pointer-to-data-member type", dst_type);
5429 return error_mark_node;
5432 if (TREE_CODE (TREE_TYPE (dst_type)) == FUNCTION_TYPE)
5434 if (complain)
5435 error ("invalid use of const_cast with type %qT, which is a pointer "
5436 "or reference to a function type", dst_type);
5437 return error_mark_node;
5440 /* Save casted types in the function's used types hash table. */
5441 used_types_insert (dst_type);
5443 src_type = TREE_TYPE (expr);
5444 /* Expressions do not really have reference types. */
5445 if (TREE_CODE (src_type) == REFERENCE_TYPE)
5446 src_type = TREE_TYPE (src_type);
5448 /* [expr.const.cast]
5450 An lvalue of type T1 can be explicitly converted to an lvalue of
5451 type T2 using the cast const_cast<T2&> (where T1 and T2 are object
5452 types) if a pointer to T1 can be explicitly converted to the type
5453 pointer to T2 using a const_cast. */
5454 if (TREE_CODE (dst_type) == REFERENCE_TYPE)
5456 reference_type = dst_type;
5457 if (! real_lvalue_p (expr))
5459 if (complain)
5460 error ("invalid const_cast of an rvalue of type %qT to type %qT",
5461 src_type, dst_type);
5462 return error_mark_node;
5464 dst_type = build_pointer_type (TREE_TYPE (dst_type));
5465 src_type = build_pointer_type (src_type);
5467 else
5469 reference_type = NULL_TREE;
5470 /* If the destination type is not a reference type, the
5471 lvalue-to-rvalue, array-to-pointer, and function-to-pointer
5472 conversions are performed. */
5473 src_type = type_decays_to (src_type);
5474 if (src_type == error_mark_node)
5475 return error_mark_node;
5478 if ((TYPE_PTR_P (src_type) || TYPE_PTRMEM_P (src_type))
5479 && comp_ptr_ttypes_const (dst_type, src_type))
5481 if (valid_p)
5483 *valid_p = true;
5484 /* This cast is actually a C-style cast. Issue a warning if
5485 the user is making a potentially unsafe cast. */
5486 if (warn_cast_qual)
5487 check_for_casting_away_constness (src_type, dst_type,
5488 warning0,
5489 "cast");
5491 if (reference_type)
5493 expr = build_unary_op (ADDR_EXPR, expr, 0);
5494 expr = build_nop (reference_type, expr);
5495 return convert_from_reference (expr);
5497 else
5499 expr = decay_conversion (expr);
5500 /* build_c_cast puts on a NOP_EXPR to make the result not an
5501 lvalue. Strip such NOP_EXPRs if VALUE is being used in
5502 non-lvalue context. */
5503 if (TREE_CODE (expr) == NOP_EXPR
5504 && TREE_TYPE (expr) == TREE_TYPE (TREE_OPERAND (expr, 0)))
5505 expr = TREE_OPERAND (expr, 0);
5506 return build_nop (dst_type, expr);
5510 if (complain)
5511 error ("invalid const_cast from type %qT to type %qT",
5512 src_type, dst_type);
5513 return error_mark_node;
5516 tree
5517 build_const_cast (tree type, tree expr)
5519 if (type == error_mark_node || error_operand_p (expr))
5520 return error_mark_node;
5522 if (processing_template_decl)
5524 tree t = build_min (CONST_CAST_EXPR, type, expr);
5526 if (!TREE_SIDE_EFFECTS (t)
5527 && type_dependent_expression_p (expr))
5528 /* There might turn out to be side effects inside expr. */
5529 TREE_SIDE_EFFECTS (t) = 1;
5530 return convert_from_reference (t);
5533 return build_const_cast_1 (type, expr, /*complain=*/true,
5534 /*valid_p=*/NULL);
5537 /* Build an expression representing an explicit C-style cast to type
5538 TYPE of expression EXPR. */
5540 tree
5541 build_c_cast (tree type, tree expr)
5543 tree value = expr;
5544 tree result;
5545 bool valid_p;
5547 if (type == error_mark_node || error_operand_p (expr))
5548 return error_mark_node;
5550 if (processing_template_decl)
5552 tree t = build_min (CAST_EXPR, type,
5553 tree_cons (NULL_TREE, value, NULL_TREE));
5554 /* We don't know if it will or will not have side effects. */
5555 TREE_SIDE_EFFECTS (t) = 1;
5556 return convert_from_reference (t);
5559 /* Casts to a (pointer to a) specific ObjC class (or 'id' or
5560 'Class') should always be retained, because this information aids
5561 in method lookup. */
5562 if (objc_is_object_ptr (type)
5563 && objc_is_object_ptr (TREE_TYPE (expr)))
5564 return build_nop (type, expr);
5566 /* build_c_cast puts on a NOP_EXPR to make the result not an lvalue.
5567 Strip such NOP_EXPRs if VALUE is being used in non-lvalue context. */
5568 if (TREE_CODE (type) != REFERENCE_TYPE
5569 && TREE_CODE (value) == NOP_EXPR
5570 && TREE_TYPE (value) == TREE_TYPE (TREE_OPERAND (value, 0)))
5571 value = TREE_OPERAND (value, 0);
5573 if (TREE_CODE (type) == ARRAY_TYPE)
5575 /* Allow casting from T1* to T2[] because Cfront allows it.
5576 NIHCL uses it. It is not valid ISO C++ however. */
5577 if (TREE_CODE (TREE_TYPE (expr)) == POINTER_TYPE)
5579 pedwarn ("ISO C++ forbids casting to an array type %qT", type);
5580 type = build_pointer_type (TREE_TYPE (type));
5582 else
5584 error ("ISO C++ forbids casting to an array type %qT", type);
5585 return error_mark_node;
5589 if (TREE_CODE (type) == FUNCTION_TYPE
5590 || TREE_CODE (type) == METHOD_TYPE)
5592 error ("invalid cast to function type %qT", type);
5593 return error_mark_node;
5596 /* A C-style cast can be a const_cast. */
5597 result = build_const_cast_1 (type, value, /*complain=*/false,
5598 &valid_p);
5599 if (valid_p)
5600 return result;
5602 /* Or a static cast. */
5603 result = build_static_cast_1 (type, value, /*c_cast_p=*/true,
5604 &valid_p);
5605 /* Or a reinterpret_cast. */
5606 if (!valid_p)
5607 result = build_reinterpret_cast_1 (type, value, /*c_cast_p=*/true,
5608 &valid_p);
5609 /* The static_cast or reinterpret_cast may be followed by a
5610 const_cast. */
5611 if (valid_p
5612 /* A valid cast may result in errors if, for example, a
5613 conversion to am ambiguous base class is required. */
5614 && !error_operand_p (result))
5616 tree result_type;
5618 /* Non-class rvalues always have cv-unqualified type. */
5619 if (!CLASS_TYPE_P (type))
5620 type = TYPE_MAIN_VARIANT (type);
5621 result_type = TREE_TYPE (result);
5622 if (!CLASS_TYPE_P (result_type))
5623 result_type = TYPE_MAIN_VARIANT (result_type);
5624 /* If the type of RESULT does not match TYPE, perform a
5625 const_cast to make it match. If the static_cast or
5626 reinterpret_cast succeeded, we will differ by at most
5627 cv-qualification, so the follow-on const_cast is guaranteed
5628 to succeed. */
5629 if (!same_type_p (non_reference (type), non_reference (result_type)))
5631 result = build_const_cast_1 (type, result, false, &valid_p);
5632 gcc_assert (valid_p);
5634 return result;
5637 return error_mark_node;
5640 /* Build an assignment expression of lvalue LHS from value RHS.
5641 MODIFYCODE is the code for a binary operator that we use
5642 to combine the old value of LHS with RHS to get the new value.
5643 Or else MODIFYCODE is NOP_EXPR meaning do a simple assignment.
5645 C++: If MODIFYCODE is INIT_EXPR, then leave references unbashed. */
5647 tree
5648 build_modify_expr (tree lhs, enum tree_code modifycode, tree rhs)
5650 tree result;
5651 tree newrhs = rhs;
5652 tree lhstype = TREE_TYPE (lhs);
5653 tree olhstype = lhstype;
5654 tree olhs = NULL_TREE;
5655 bool plain_assign = (modifycode == NOP_EXPR);
5657 /* Avoid duplicate error messages from operands that had errors. */
5658 if (error_operand_p (lhs) || error_operand_p (rhs))
5659 return error_mark_node;
5661 /* Handle control structure constructs used as "lvalues". */
5662 switch (TREE_CODE (lhs))
5664 /* Handle --foo = 5; as these are valid constructs in C++. */
5665 case PREDECREMENT_EXPR:
5666 case PREINCREMENT_EXPR:
5667 if (TREE_SIDE_EFFECTS (TREE_OPERAND (lhs, 0)))
5668 lhs = build2 (TREE_CODE (lhs), TREE_TYPE (lhs),
5669 stabilize_reference (TREE_OPERAND (lhs, 0)),
5670 TREE_OPERAND (lhs, 1));
5671 return build2 (COMPOUND_EXPR, lhstype,
5672 lhs,
5673 build_modify_expr (TREE_OPERAND (lhs, 0),
5674 modifycode, rhs));
5676 /* Handle (a, b) used as an "lvalue". */
5677 case COMPOUND_EXPR:
5678 newrhs = build_modify_expr (TREE_OPERAND (lhs, 1),
5679 modifycode, rhs);
5680 if (newrhs == error_mark_node)
5681 return error_mark_node;
5682 return build2 (COMPOUND_EXPR, lhstype,
5683 TREE_OPERAND (lhs, 0), newrhs);
5685 case MODIFY_EXPR:
5686 if (TREE_SIDE_EFFECTS (TREE_OPERAND (lhs, 0)))
5687 lhs = build2 (TREE_CODE (lhs), TREE_TYPE (lhs),
5688 stabilize_reference (TREE_OPERAND (lhs, 0)),
5689 TREE_OPERAND (lhs, 1));
5690 newrhs = build_modify_expr (TREE_OPERAND (lhs, 0), modifycode, rhs);
5691 if (newrhs == error_mark_node)
5692 return error_mark_node;
5693 return build2 (COMPOUND_EXPR, lhstype, lhs, newrhs);
5695 case MIN_EXPR:
5696 case MAX_EXPR:
5697 /* MIN_EXPR and MAX_EXPR are currently only permitted as lvalues,
5698 when neither operand has side-effects. */
5699 if (!lvalue_or_else (lhs, lv_assign))
5700 return error_mark_node;
5702 gcc_assert (!TREE_SIDE_EFFECTS (TREE_OPERAND (lhs, 0))
5703 && !TREE_SIDE_EFFECTS (TREE_OPERAND (lhs, 1)));
5705 lhs = build3 (COND_EXPR, TREE_TYPE (lhs),
5706 build2 (TREE_CODE (lhs) == MIN_EXPR ? LE_EXPR : GE_EXPR,
5707 boolean_type_node,
5708 TREE_OPERAND (lhs, 0),
5709 TREE_OPERAND (lhs, 1)),
5710 TREE_OPERAND (lhs, 0),
5711 TREE_OPERAND (lhs, 1));
5712 /* Fall through. */
5714 /* Handle (a ? b : c) used as an "lvalue". */
5715 case COND_EXPR:
5717 /* Produce (a ? (b = rhs) : (c = rhs))
5718 except that the RHS goes through a save-expr
5719 so the code to compute it is only emitted once. */
5720 tree cond;
5721 tree preeval = NULL_TREE;
5723 if (VOID_TYPE_P (TREE_TYPE (rhs)))
5725 error ("void value not ignored as it ought to be");
5726 return error_mark_node;
5729 rhs = stabilize_expr (rhs, &preeval);
5731 /* Check this here to avoid odd errors when trying to convert
5732 a throw to the type of the COND_EXPR. */
5733 if (!lvalue_or_else (lhs, lv_assign))
5734 return error_mark_node;
5736 cond = build_conditional_expr
5737 (TREE_OPERAND (lhs, 0),
5738 build_modify_expr (TREE_OPERAND (lhs, 1),
5739 modifycode, rhs),
5740 build_modify_expr (TREE_OPERAND (lhs, 2),
5741 modifycode, rhs));
5743 if (cond == error_mark_node)
5744 return cond;
5745 /* Make sure the code to compute the rhs comes out
5746 before the split. */
5747 if (preeval)
5748 cond = build2 (COMPOUND_EXPR, TREE_TYPE (lhs), preeval, cond);
5749 return cond;
5752 default:
5753 break;
5756 if (modifycode == INIT_EXPR)
5758 if (TREE_CODE (rhs) == CONSTRUCTOR)
5760 if (! same_type_p (TREE_TYPE (rhs), lhstype))
5761 /* Call convert to generate an error; see PR 11063. */
5762 rhs = convert (lhstype, rhs);
5763 result = build2 (INIT_EXPR, lhstype, lhs, rhs);
5764 TREE_SIDE_EFFECTS (result) = 1;
5765 return result;
5767 else if (! IS_AGGR_TYPE (lhstype))
5768 /* Do the default thing. */;
5769 else
5771 result = build_special_member_call (lhs, complete_ctor_identifier,
5772 build_tree_list (NULL_TREE, rhs),
5773 lhstype, LOOKUP_NORMAL);
5774 if (result == NULL_TREE)
5775 return error_mark_node;
5776 return result;
5779 else
5781 lhs = require_complete_type (lhs);
5782 if (lhs == error_mark_node)
5783 return error_mark_node;
5785 if (modifycode == NOP_EXPR)
5787 /* `operator=' is not an inheritable operator. */
5788 if (! IS_AGGR_TYPE (lhstype))
5789 /* Do the default thing. */;
5790 else
5792 result = build_new_op (MODIFY_EXPR, LOOKUP_NORMAL,
5793 lhs, rhs, make_node (NOP_EXPR),
5794 /*overloaded_p=*/NULL);
5795 if (result == NULL_TREE)
5796 return error_mark_node;
5797 return result;
5799 lhstype = olhstype;
5801 else
5803 /* A binary op has been requested. Combine the old LHS
5804 value with the RHS producing the value we should actually
5805 store into the LHS. */
5807 gcc_assert (!PROMOTES_TO_AGGR_TYPE (lhstype, REFERENCE_TYPE));
5808 lhs = stabilize_reference (lhs);
5809 newrhs = cp_build_binary_op (modifycode, lhs, rhs);
5810 if (newrhs == error_mark_node)
5812 error (" in evaluation of %<%Q(%#T, %#T)%>", modifycode,
5813 TREE_TYPE (lhs), TREE_TYPE (rhs));
5814 return error_mark_node;
5817 /* Now it looks like a plain assignment. */
5818 modifycode = NOP_EXPR;
5820 gcc_assert (TREE_CODE (lhstype) != REFERENCE_TYPE);
5821 gcc_assert (TREE_CODE (TREE_TYPE (newrhs)) != REFERENCE_TYPE);
5824 /* The left-hand side must be an lvalue. */
5825 if (!lvalue_or_else (lhs, lv_assign))
5826 return error_mark_node;
5828 /* Warn about modifying something that is `const'. Don't warn if
5829 this is initialization. */
5830 if (modifycode != INIT_EXPR
5831 && (TREE_READONLY (lhs) || CP_TYPE_CONST_P (lhstype)
5832 /* Functions are not modifiable, even though they are
5833 lvalues. */
5834 || TREE_CODE (TREE_TYPE (lhs)) == FUNCTION_TYPE
5835 || TREE_CODE (TREE_TYPE (lhs)) == METHOD_TYPE
5836 /* If it's an aggregate and any field is const, then it is
5837 effectively const. */
5838 || (CLASS_TYPE_P (lhstype)
5839 && C_TYPE_FIELDS_READONLY (lhstype))))
5840 readonly_error (lhs, "assignment");
5842 /* If storing into a structure or union member, it has probably been
5843 given type `int'. Compute the type that would go with the actual
5844 amount of storage the member occupies. */
5846 if (TREE_CODE (lhs) == COMPONENT_REF
5847 && (TREE_CODE (lhstype) == INTEGER_TYPE
5848 || TREE_CODE (lhstype) == REAL_TYPE
5849 || TREE_CODE (lhstype) == ENUMERAL_TYPE))
5851 lhstype = TREE_TYPE (get_unwidened (lhs, 0));
5853 /* If storing in a field that is in actuality a short or narrower
5854 than one, we must store in the field in its actual type. */
5856 if (lhstype != TREE_TYPE (lhs))
5858 /* Avoid warnings converting integral types back into enums for
5859 enum bit fields. */
5860 if (TREE_CODE (lhstype) == INTEGER_TYPE
5861 && TREE_CODE (olhstype) == ENUMERAL_TYPE)
5863 if (TREE_SIDE_EFFECTS (lhs))
5864 lhs = stabilize_reference (lhs);
5865 olhs = lhs;
5867 lhs = copy_node (lhs);
5868 TREE_TYPE (lhs) = lhstype;
5872 /* Convert new value to destination type. */
5874 if (TREE_CODE (lhstype) == ARRAY_TYPE)
5876 int from_array;
5878 if (!same_or_base_type_p (TYPE_MAIN_VARIANT (lhstype),
5879 TYPE_MAIN_VARIANT (TREE_TYPE (rhs))))
5881 error ("incompatible types in assignment of %qT to %qT",
5882 TREE_TYPE (rhs), lhstype);
5883 return error_mark_node;
5886 /* Allow array assignment in compiler-generated code. */
5887 if (! DECL_ARTIFICIAL (current_function_decl))
5889 /* This routine is used for both initialization and assignment.
5890 Make sure the diagnostic message differentiates the context. */
5891 if (modifycode == INIT_EXPR)
5892 error ("array used as initializer");
5893 else
5894 error ("invalid array assignment");
5895 return error_mark_node;
5898 from_array = TREE_CODE (TREE_TYPE (newrhs)) == ARRAY_TYPE
5899 ? 1 + (modifycode != INIT_EXPR): 0;
5900 return build_vec_init (lhs, NULL_TREE, newrhs,
5901 /*explicit_default_init_p=*/false,
5902 from_array);
5905 if (modifycode == INIT_EXPR)
5906 newrhs = convert_for_initialization (lhs, lhstype, newrhs, LOOKUP_NORMAL,
5907 "initialization", NULL_TREE, 0);
5908 else
5910 /* Avoid warnings on enum bit fields. */
5911 if (TREE_CODE (olhstype) == ENUMERAL_TYPE
5912 && TREE_CODE (lhstype) == INTEGER_TYPE)
5914 newrhs = convert_for_assignment (olhstype, newrhs, "assignment",
5915 NULL_TREE, 0);
5916 newrhs = convert_force (lhstype, newrhs, 0);
5918 else
5919 newrhs = convert_for_assignment (lhstype, newrhs, "assignment",
5920 NULL_TREE, 0);
5921 if (TREE_CODE (newrhs) == CALL_EXPR
5922 && TYPE_NEEDS_CONSTRUCTING (lhstype))
5923 newrhs = build_cplus_new (lhstype, newrhs);
5925 /* Can't initialize directly from a TARGET_EXPR, since that would
5926 cause the lhs to be constructed twice, and possibly result in
5927 accidental self-initialization. So we force the TARGET_EXPR to be
5928 expanded without a target. */
5929 if (TREE_CODE (newrhs) == TARGET_EXPR)
5930 newrhs = build2 (COMPOUND_EXPR, TREE_TYPE (newrhs), newrhs,
5931 TREE_OPERAND (newrhs, 0));
5934 if (newrhs == error_mark_node)
5935 return error_mark_node;
5937 if (c_dialect_objc () && flag_objc_gc)
5939 result = objc_generate_write_barrier (lhs, modifycode, newrhs);
5941 if (result)
5942 return result;
5945 result = build2 (modifycode == NOP_EXPR ? MODIFY_EXPR : INIT_EXPR,
5946 lhstype, lhs, newrhs);
5948 TREE_SIDE_EFFECTS (result) = 1;
5949 if (!plain_assign)
5950 TREE_NO_WARNING (result) = 1;
5952 /* If we got the LHS in a different type for storing in,
5953 convert the result back to the nominal type of LHS
5954 so that the value we return always has the same type
5955 as the LHS argument. */
5957 if (olhstype == TREE_TYPE (result))
5958 return result;
5959 if (olhs)
5961 result = build2 (COMPOUND_EXPR, olhstype, result, olhs);
5962 TREE_NO_WARNING (result) = 1;
5963 return result;
5965 return convert_for_assignment (olhstype, result, "assignment",
5966 NULL_TREE, 0);
5969 tree
5970 build_x_modify_expr (tree lhs, enum tree_code modifycode, tree rhs)
5972 if (processing_template_decl)
5973 return build_min_nt (MODOP_EXPR, lhs,
5974 build_min_nt (modifycode, NULL_TREE, NULL_TREE), rhs);
5976 if (modifycode != NOP_EXPR)
5978 tree rval = build_new_op (MODIFY_EXPR, LOOKUP_NORMAL, lhs, rhs,
5979 make_node (modifycode),
5980 /*overloaded_p=*/NULL);
5981 if (rval)
5983 TREE_NO_WARNING (rval) = 1;
5984 return rval;
5987 return build_modify_expr (lhs, modifycode, rhs);
5990 /* Helper function for get_delta_difference which assumes FROM is a base
5991 class of TO. Returns a delta for the conversion of pointer-to-member
5992 of FROM to pointer-to-member of TO. If the conversion is invalid,
5993 returns zero. If FROM is not a base class of TO, returns NULL_TREE.
5994 If C_CAST_P is true, this conversion is taking place as part of a C-style
5995 cast. */
5997 static tree
5998 get_delta_difference_1 (tree from, tree to, bool c_cast_p)
6000 tree binfo;
6001 base_kind kind;
6003 binfo = lookup_base (to, from, c_cast_p ? ba_unique : ba_check, &kind);
6004 if (kind == bk_inaccessible || kind == bk_ambig)
6006 error (" in pointer to member function conversion");
6007 return size_zero_node;
6009 else if (binfo)
6011 if (kind != bk_via_virtual)
6012 return BINFO_OFFSET (binfo);
6013 else
6014 /* FROM is a virtual base class of TO. Issue an error or warning
6015 depending on whether or not this is a reinterpret cast. */
6017 error ("pointer to member conversion via virtual base %qT",
6018 BINFO_TYPE (binfo_from_vbase (binfo)));
6020 return size_zero_node;
6023 else
6024 return NULL_TREE;
6027 /* Get difference in deltas for different pointer to member function
6028 types. Returns an integer constant of type PTRDIFF_TYPE_NODE. If
6029 the conversion is invalid, the constant is zero. If
6030 ALLOW_INVERSE_P is true, then allow reverse conversions as well.
6031 If C_CAST_P is true this conversion is taking place as part of a
6032 C-style cast.
6034 Note that the naming of FROM and TO is kind of backwards; the return
6035 value is what we add to a TO in order to get a FROM. They are named
6036 this way because we call this function to find out how to convert from
6037 a pointer to member of FROM to a pointer to member of TO. */
6039 static tree
6040 get_delta_difference (tree from, tree to,
6041 bool allow_inverse_p,
6042 bool c_cast_p)
6044 tree result;
6046 if (same_type_ignoring_top_level_qualifiers_p (from, to))
6047 /* Pointer to member of incomplete class is permitted*/
6048 result = size_zero_node;
6049 else
6050 result = get_delta_difference_1 (from, to, c_cast_p);
6052 if (!result)
6054 if (!allow_inverse_p)
6056 error_not_base_type (from, to);
6057 error (" in pointer to member conversion");
6058 result = size_zero_node;
6060 else
6062 result = get_delta_difference_1 (to, from, c_cast_p);
6064 if (result)
6065 result = size_diffop (size_zero_node, result);
6066 else
6068 error_not_base_type (from, to);
6069 error (" in pointer to member conversion");
6070 result = size_zero_node;
6075 return fold_if_not_in_template (convert_to_integer (ptrdiff_type_node,
6076 result));
6079 /* Return a constructor for the pointer-to-member-function TYPE using
6080 the other components as specified. */
6082 tree
6083 build_ptrmemfunc1 (tree type, tree delta, tree pfn)
6085 tree u = NULL_TREE;
6086 tree delta_field;
6087 tree pfn_field;
6088 VEC(constructor_elt, gc) *v;
6090 /* Pull the FIELD_DECLs out of the type. */
6091 pfn_field = TYPE_FIELDS (type);
6092 delta_field = TREE_CHAIN (pfn_field);
6094 /* Make sure DELTA has the type we want. */
6095 delta = convert_and_check (delta_type_node, delta);
6097 /* Convert to the correct target type if necessary. */
6098 pfn = fold_convert (TREE_TYPE (pfn_field), pfn);
6100 /* Finish creating the initializer. */
6101 v = VEC_alloc(constructor_elt, gc, 2);
6102 CONSTRUCTOR_APPEND_ELT(v, pfn_field, pfn);
6103 CONSTRUCTOR_APPEND_ELT(v, delta_field, delta);
6104 u = build_constructor (type, v);
6105 TREE_CONSTANT (u) = TREE_CONSTANT (pfn) & TREE_CONSTANT (delta);
6106 TREE_INVARIANT (u) = TREE_INVARIANT (pfn) & TREE_INVARIANT (delta);
6107 TREE_STATIC (u) = (TREE_CONSTANT (u)
6108 && (initializer_constant_valid_p (pfn, TREE_TYPE (pfn))
6109 != NULL_TREE)
6110 && (initializer_constant_valid_p (delta, TREE_TYPE (delta))
6111 != NULL_TREE));
6112 return u;
6115 /* Build a constructor for a pointer to member function. It can be
6116 used to initialize global variables, local variable, or used
6117 as a value in expressions. TYPE is the POINTER to METHOD_TYPE we
6118 want to be.
6120 If FORCE is nonzero, then force this conversion, even if
6121 we would rather not do it. Usually set when using an explicit
6122 cast. A C-style cast is being processed iff C_CAST_P is true.
6124 Return error_mark_node, if something goes wrong. */
6126 tree
6127 build_ptrmemfunc (tree type, tree pfn, int force, bool c_cast_p)
6129 tree fn;
6130 tree pfn_type;
6131 tree to_type;
6133 if (error_operand_p (pfn))
6134 return error_mark_node;
6136 pfn_type = TREE_TYPE (pfn);
6137 to_type = build_ptrmemfunc_type (type);
6139 /* Handle multiple conversions of pointer to member functions. */
6140 if (TYPE_PTRMEMFUNC_P (pfn_type))
6142 tree delta = NULL_TREE;
6143 tree npfn = NULL_TREE;
6144 tree n;
6146 if (!force
6147 && !can_convert_arg (to_type, TREE_TYPE (pfn), pfn, LOOKUP_NORMAL))
6148 error ("invalid conversion to type %qT from type %qT",
6149 to_type, pfn_type);
6151 n = get_delta_difference (TYPE_PTRMEMFUNC_OBJECT_TYPE (pfn_type),
6152 TYPE_PTRMEMFUNC_OBJECT_TYPE (to_type),
6153 force,
6154 c_cast_p);
6156 /* We don't have to do any conversion to convert a
6157 pointer-to-member to its own type. But, we don't want to
6158 just return a PTRMEM_CST if there's an explicit cast; that
6159 cast should make the expression an invalid template argument. */
6160 if (TREE_CODE (pfn) != PTRMEM_CST)
6162 if (same_type_p (to_type, pfn_type))
6163 return pfn;
6164 else if (integer_zerop (n))
6165 return build_reinterpret_cast (to_type, pfn);
6168 if (TREE_SIDE_EFFECTS (pfn))
6169 pfn = save_expr (pfn);
6171 /* Obtain the function pointer and the current DELTA. */
6172 if (TREE_CODE (pfn) == PTRMEM_CST)
6173 expand_ptrmemfunc_cst (pfn, &delta, &npfn);
6174 else
6176 npfn = build_ptrmemfunc_access_expr (pfn, pfn_identifier);
6177 delta = build_ptrmemfunc_access_expr (pfn, delta_identifier);
6180 /* Just adjust the DELTA field. */
6181 gcc_assert (same_type_ignoring_top_level_qualifiers_p
6182 (TREE_TYPE (delta), ptrdiff_type_node));
6183 if (TARGET_PTRMEMFUNC_VBIT_LOCATION == ptrmemfunc_vbit_in_delta)
6184 n = cp_build_binary_op (LSHIFT_EXPR, n, integer_one_node);
6185 delta = cp_build_binary_op (PLUS_EXPR, delta, n);
6186 return build_ptrmemfunc1 (to_type, delta, npfn);
6189 /* Handle null pointer to member function conversions. */
6190 if (integer_zerop (pfn))
6192 pfn = build_c_cast (type, integer_zero_node);
6193 return build_ptrmemfunc1 (to_type,
6194 integer_zero_node,
6195 pfn);
6198 if (type_unknown_p (pfn))
6199 return instantiate_type (type, pfn, tf_warning_or_error);
6201 fn = TREE_OPERAND (pfn, 0);
6202 gcc_assert (TREE_CODE (fn) == FUNCTION_DECL
6203 /* In a template, we will have preserved the
6204 OFFSET_REF. */
6205 || (processing_template_decl && TREE_CODE (fn) == OFFSET_REF));
6206 return make_ptrmem_cst (to_type, fn);
6209 /* Return the DELTA, IDX, PFN, and DELTA2 values for the PTRMEM_CST
6210 given by CST.
6212 ??? There is no consistency as to the types returned for the above
6213 values. Some code acts as if it were a sizetype and some as if it were
6214 integer_type_node. */
6216 void
6217 expand_ptrmemfunc_cst (tree cst, tree *delta, tree *pfn)
6219 tree type = TREE_TYPE (cst);
6220 tree fn = PTRMEM_CST_MEMBER (cst);
6221 tree ptr_class, fn_class;
6223 gcc_assert (TREE_CODE (fn) == FUNCTION_DECL);
6225 /* The class that the function belongs to. */
6226 fn_class = DECL_CONTEXT (fn);
6228 /* The class that we're creating a pointer to member of. */
6229 ptr_class = TYPE_PTRMEMFUNC_OBJECT_TYPE (type);
6231 /* First, calculate the adjustment to the function's class. */
6232 *delta = get_delta_difference (fn_class, ptr_class, /*force=*/0,
6233 /*c_cast_p=*/0);
6235 if (!DECL_VIRTUAL_P (fn))
6236 *pfn = convert (TYPE_PTRMEMFUNC_FN_TYPE (type), build_addr_func (fn));
6237 else
6239 /* If we're dealing with a virtual function, we have to adjust 'this'
6240 again, to point to the base which provides the vtable entry for
6241 fn; the call will do the opposite adjustment. */
6242 tree orig_class = DECL_CONTEXT (fn);
6243 tree binfo = binfo_or_else (orig_class, fn_class);
6244 *delta = build2 (PLUS_EXPR, TREE_TYPE (*delta),
6245 *delta, BINFO_OFFSET (binfo));
6246 *delta = fold_if_not_in_template (*delta);
6248 /* We set PFN to the vtable offset at which the function can be
6249 found, plus one (unless ptrmemfunc_vbit_in_delta, in which
6250 case delta is shifted left, and then incremented). */
6251 *pfn = DECL_VINDEX (fn);
6252 *pfn = build2 (MULT_EXPR, integer_type_node, *pfn,
6253 TYPE_SIZE_UNIT (vtable_entry_type));
6254 *pfn = fold_if_not_in_template (*pfn);
6256 switch (TARGET_PTRMEMFUNC_VBIT_LOCATION)
6258 case ptrmemfunc_vbit_in_pfn:
6259 *pfn = build2 (PLUS_EXPR, integer_type_node, *pfn,
6260 integer_one_node);
6261 *pfn = fold_if_not_in_template (*pfn);
6262 break;
6264 case ptrmemfunc_vbit_in_delta:
6265 *delta = build2 (LSHIFT_EXPR, TREE_TYPE (*delta),
6266 *delta, integer_one_node);
6267 *delta = fold_if_not_in_template (*delta);
6268 *delta = build2 (PLUS_EXPR, TREE_TYPE (*delta),
6269 *delta, integer_one_node);
6270 *delta = fold_if_not_in_template (*delta);
6271 break;
6273 default:
6274 gcc_unreachable ();
6277 *pfn = build_nop (TYPE_PTRMEMFUNC_FN_TYPE (type), *pfn);
6278 *pfn = fold_if_not_in_template (*pfn);
6282 /* Return an expression for PFN from the pointer-to-member function
6283 given by T. */
6285 static tree
6286 pfn_from_ptrmemfunc (tree t)
6288 if (TREE_CODE (t) == PTRMEM_CST)
6290 tree delta;
6291 tree pfn;
6293 expand_ptrmemfunc_cst (t, &delta, &pfn);
6294 if (pfn)
6295 return pfn;
6298 return build_ptrmemfunc_access_expr (t, pfn_identifier);
6301 /* Return an expression for DELTA from the pointer-to-member function
6302 given by T. */
6304 static tree
6305 delta_from_ptrmemfunc (tree t)
6307 if (TREE_CODE (t) == PTRMEM_CST)
6309 tree delta;
6310 tree pfn;
6312 expand_ptrmemfunc_cst (t, &delta, &pfn);
6313 if (delta)
6314 return delta;
6317 return build_ptrmemfunc_access_expr (t, delta_identifier);
6320 /* Convert value RHS to type TYPE as preparation for an assignment to
6321 an lvalue of type TYPE. ERRTYPE is a string to use in error
6322 messages: "assignment", "return", etc. If FNDECL is non-NULL, we
6323 are doing the conversion in order to pass the PARMNUMth argument of
6324 FNDECL. */
6326 static tree
6327 convert_for_assignment (tree type, tree rhs,
6328 const char *errtype, tree fndecl, int parmnum)
6330 tree rhstype;
6331 enum tree_code coder;
6333 /* Strip NON_LVALUE_EXPRs since we aren't using as an lvalue. */
6334 if (TREE_CODE (rhs) == NON_LVALUE_EXPR)
6335 rhs = TREE_OPERAND (rhs, 0);
6337 rhstype = TREE_TYPE (rhs);
6338 coder = TREE_CODE (rhstype);
6340 if (TREE_CODE (type) == VECTOR_TYPE && coder == VECTOR_TYPE
6341 && vector_types_convertible_p (type, rhstype, true))
6342 return convert (type, rhs);
6344 if (rhs == error_mark_node || rhstype == error_mark_node)
6345 return error_mark_node;
6346 if (TREE_CODE (rhs) == TREE_LIST && TREE_VALUE (rhs) == error_mark_node)
6347 return error_mark_node;
6349 /* The RHS of an assignment cannot have void type. */
6350 if (coder == VOID_TYPE)
6352 error ("void value not ignored as it ought to be");
6353 return error_mark_node;
6356 /* Simplify the RHS if possible. */
6357 if (TREE_CODE (rhs) == CONST_DECL)
6358 rhs = DECL_INITIAL (rhs);
6360 if (c_dialect_objc ())
6362 int parmno;
6363 tree rname = fndecl;
6365 if (!strcmp (errtype, "assignment"))
6366 parmno = -1;
6367 else if (!strcmp (errtype, "initialization"))
6368 parmno = -2;
6369 else
6371 tree selector = objc_message_selector ();
6373 parmno = parmnum;
6375 if (selector && parmno > 1)
6377 rname = selector;
6378 parmno -= 1;
6382 if (objc_compare_types (type, rhstype, parmno, rname))
6383 return convert (type, rhs);
6386 /* [expr.ass]
6388 The expression is implicitly converted (clause _conv_) to the
6389 cv-unqualified type of the left operand.
6391 We allow bad conversions here because by the time we get to this point
6392 we are committed to doing the conversion. If we end up doing a bad
6393 conversion, convert_like will complain. */
6394 if (!can_convert_arg_bad (type, rhstype, rhs))
6396 /* When -Wno-pmf-conversions is use, we just silently allow
6397 conversions from pointers-to-members to plain pointers. If
6398 the conversion doesn't work, cp_convert will complain. */
6399 if (!warn_pmf2ptr
6400 && TYPE_PTR_P (type)
6401 && TYPE_PTRMEMFUNC_P (rhstype))
6402 rhs = cp_convert (strip_top_quals (type), rhs);
6403 else
6405 /* If the right-hand side has unknown type, then it is an
6406 overloaded function. Call instantiate_type to get error
6407 messages. */
6408 if (rhstype == unknown_type_node)
6409 instantiate_type (type, rhs, tf_warning_or_error);
6410 else if (fndecl)
6411 error ("cannot convert %qT to %qT for argument %qP to %qD",
6412 rhstype, type, parmnum, fndecl);
6413 else
6414 error ("cannot convert %qT to %qT in %s", rhstype, type, errtype);
6415 return error_mark_node;
6418 if (warn_missing_format_attribute)
6420 const enum tree_code codel = TREE_CODE (type);
6421 if ((codel == POINTER_TYPE || codel == REFERENCE_TYPE)
6422 && coder == codel
6423 && check_missing_format_attribute (type, rhstype))
6424 warning (OPT_Wmissing_format_attribute,
6425 "%s might be a candidate for a format attribute",
6426 errtype);
6429 /* If -Wparentheses, warn about a = b = c when a has type bool and b
6430 does not. */
6431 if (warn_parentheses
6432 && type == boolean_type_node
6433 && TREE_CODE (rhs) == MODIFY_EXPR
6434 && !TREE_NO_WARNING (rhs)
6435 && TREE_TYPE (rhs) != boolean_type_node)
6437 warning (OPT_Wparentheses,
6438 "suggest parentheses around assignment used as truth value");
6439 TREE_NO_WARNING (rhs) = 1;
6442 return perform_implicit_conversion (strip_top_quals (type), rhs);
6445 /* Convert RHS to be of type TYPE.
6446 If EXP is nonzero, it is the target of the initialization.
6447 ERRTYPE is a string to use in error messages.
6449 Two major differences between the behavior of
6450 `convert_for_assignment' and `convert_for_initialization'
6451 are that references are bashed in the former, while
6452 copied in the latter, and aggregates are assigned in
6453 the former (operator=) while initialized in the
6454 latter (X(X&)).
6456 If using constructor make sure no conversion operator exists, if one does
6457 exist, an ambiguity exists.
6459 If flags doesn't include LOOKUP_COMPLAIN, don't complain about anything. */
6461 tree
6462 convert_for_initialization (tree exp, tree type, tree rhs, int flags,
6463 const char *errtype, tree fndecl, int parmnum)
6465 enum tree_code codel = TREE_CODE (type);
6466 tree rhstype;
6467 enum tree_code coder;
6469 /* build_c_cast puts on a NOP_EXPR to make the result not an lvalue.
6470 Strip such NOP_EXPRs, since RHS is used in non-lvalue context. */
6471 if (TREE_CODE (rhs) == NOP_EXPR
6472 && TREE_TYPE (rhs) == TREE_TYPE (TREE_OPERAND (rhs, 0))
6473 && codel != REFERENCE_TYPE)
6474 rhs = TREE_OPERAND (rhs, 0);
6476 if (type == error_mark_node
6477 || rhs == error_mark_node
6478 || (TREE_CODE (rhs) == TREE_LIST && TREE_VALUE (rhs) == error_mark_node))
6479 return error_mark_node;
6481 if ((TREE_CODE (TREE_TYPE (rhs)) == ARRAY_TYPE
6482 && TREE_CODE (type) != ARRAY_TYPE
6483 && (TREE_CODE (type) != REFERENCE_TYPE
6484 || TREE_CODE (TREE_TYPE (type)) != ARRAY_TYPE))
6485 || (TREE_CODE (TREE_TYPE (rhs)) == FUNCTION_TYPE
6486 && (TREE_CODE (type) != REFERENCE_TYPE
6487 || TREE_CODE (TREE_TYPE (type)) != FUNCTION_TYPE))
6488 || TREE_CODE (TREE_TYPE (rhs)) == METHOD_TYPE)
6489 rhs = decay_conversion (rhs);
6491 rhstype = TREE_TYPE (rhs);
6492 coder = TREE_CODE (rhstype);
6494 if (coder == ERROR_MARK)
6495 return error_mark_node;
6497 /* We accept references to incomplete types, so we can
6498 return here before checking if RHS is of complete type. */
6500 if (codel == REFERENCE_TYPE)
6502 /* This should eventually happen in convert_arguments. */
6503 int savew = 0, savee = 0;
6505 if (fndecl)
6506 savew = warningcount, savee = errorcount;
6507 rhs = initialize_reference (type, rhs, /*decl=*/NULL_TREE,
6508 /*cleanup=*/NULL);
6509 if (fndecl)
6511 if (warningcount > savew)
6512 warning (0, "in passing argument %P of %q+D", parmnum, fndecl);
6513 else if (errorcount > savee)
6514 error ("in passing argument %P of %q+D", parmnum, fndecl);
6516 return rhs;
6519 if (exp != 0)
6520 exp = require_complete_type (exp);
6521 if (exp == error_mark_node)
6522 return error_mark_node;
6524 rhstype = non_reference (rhstype);
6526 type = complete_type (type);
6528 if (IS_AGGR_TYPE (type))
6529 return ocp_convert (type, rhs, CONV_IMPLICIT|CONV_FORCE_TEMP, flags);
6531 return convert_for_assignment (type, rhs, errtype, fndecl, parmnum);
6534 /* If RETVAL is the address of, or a reference to, a local variable or
6535 temporary give an appropriate warning. */
6537 static void
6538 maybe_warn_about_returning_address_of_local (tree retval)
6540 tree valtype = TREE_TYPE (DECL_RESULT (current_function_decl));
6541 tree whats_returned = retval;
6543 for (;;)
6545 if (TREE_CODE (whats_returned) == COMPOUND_EXPR)
6546 whats_returned = TREE_OPERAND (whats_returned, 1);
6547 else if (TREE_CODE (whats_returned) == CONVERT_EXPR
6548 || TREE_CODE (whats_returned) == NON_LVALUE_EXPR
6549 || TREE_CODE (whats_returned) == NOP_EXPR)
6550 whats_returned = TREE_OPERAND (whats_returned, 0);
6551 else
6552 break;
6555 if (TREE_CODE (whats_returned) != ADDR_EXPR)
6556 return;
6557 whats_returned = TREE_OPERAND (whats_returned, 0);
6559 if (TREE_CODE (valtype) == REFERENCE_TYPE)
6561 if (TREE_CODE (whats_returned) == AGGR_INIT_EXPR
6562 || TREE_CODE (whats_returned) == TARGET_EXPR)
6564 warning (0, "returning reference to temporary");
6565 return;
6567 if (TREE_CODE (whats_returned) == VAR_DECL
6568 && DECL_NAME (whats_returned)
6569 && TEMP_NAME_P (DECL_NAME (whats_returned)))
6571 warning (0, "reference to non-lvalue returned");
6572 return;
6576 while (TREE_CODE (whats_returned) == COMPONENT_REF
6577 || TREE_CODE (whats_returned) == ARRAY_REF)
6578 whats_returned = TREE_OPERAND (whats_returned, 0);
6580 if (DECL_P (whats_returned)
6581 && DECL_NAME (whats_returned)
6582 && DECL_FUNCTION_SCOPE_P (whats_returned)
6583 && !(TREE_STATIC (whats_returned)
6584 || TREE_PUBLIC (whats_returned)))
6586 if (TREE_CODE (valtype) == REFERENCE_TYPE)
6587 warning (0, "reference to local variable %q+D returned",
6588 whats_returned);
6589 else
6590 warning (0, "address of local variable %q+D returned",
6591 whats_returned);
6592 return;
6596 /* Check that returning RETVAL from the current function is valid.
6597 Return an expression explicitly showing all conversions required to
6598 change RETVAL into the function return type, and to assign it to
6599 the DECL_RESULT for the function. Set *NO_WARNING to true if
6600 code reaches end of non-void function warning shouldn't be issued
6601 on this RETURN_EXPR. */
6603 tree
6604 check_return_expr (tree retval, bool *no_warning)
6606 tree result;
6607 /* The type actually returned by the function, after any
6608 promotions. */
6609 tree valtype;
6610 int fn_returns_value_p;
6611 bool named_return_value_okay_p;
6613 *no_warning = false;
6615 /* A `volatile' function is one that isn't supposed to return, ever.
6616 (This is a G++ extension, used to get better code for functions
6617 that call the `volatile' function.) */
6618 if (TREE_THIS_VOLATILE (current_function_decl))
6619 warning (0, "function declared %<noreturn%> has a %<return%> statement");
6621 /* Check for various simple errors. */
6622 if (DECL_DESTRUCTOR_P (current_function_decl))
6624 if (retval)
6625 error ("returning a value from a destructor");
6626 return NULL_TREE;
6628 else if (DECL_CONSTRUCTOR_P (current_function_decl))
6630 if (in_function_try_handler)
6631 /* If a return statement appears in a handler of the
6632 function-try-block of a constructor, the program is ill-formed. */
6633 error ("cannot return from a handler of a function-try-block of a constructor");
6634 else if (retval)
6635 /* You can't return a value from a constructor. */
6636 error ("returning a value from a constructor");
6637 return NULL_TREE;
6640 if (processing_template_decl)
6642 current_function_returns_value = 1;
6643 if (check_for_bare_parameter_packs (retval))
6644 retval = error_mark_node;
6645 return retval;
6648 /* When no explicit return-value is given in a function with a named
6649 return value, the named return value is used. */
6650 result = DECL_RESULT (current_function_decl);
6651 valtype = TREE_TYPE (result);
6652 gcc_assert (valtype != NULL_TREE);
6653 fn_returns_value_p = !VOID_TYPE_P (valtype);
6654 if (!retval && DECL_NAME (result) && fn_returns_value_p)
6655 retval = result;
6657 /* Check for a return statement with no return value in a function
6658 that's supposed to return a value. */
6659 if (!retval && fn_returns_value_p)
6661 pedwarn ("return-statement with no value, in function returning %qT",
6662 valtype);
6663 /* Clear this, so finish_function won't say that we reach the
6664 end of a non-void function (which we don't, we gave a
6665 return!). */
6666 current_function_returns_null = 0;
6667 /* And signal caller that TREE_NO_WARNING should be set on the
6668 RETURN_EXPR to avoid control reaches end of non-void function
6669 warnings in tree-cfg.c. */
6670 *no_warning = true;
6672 /* Check for a return statement with a value in a function that
6673 isn't supposed to return a value. */
6674 else if (retval && !fn_returns_value_p)
6676 if (VOID_TYPE_P (TREE_TYPE (retval)))
6677 /* You can return a `void' value from a function of `void'
6678 type. In that case, we have to evaluate the expression for
6679 its side-effects. */
6680 finish_expr_stmt (retval);
6681 else
6682 pedwarn ("return-statement with a value, in function "
6683 "returning 'void'");
6685 current_function_returns_null = 1;
6687 /* There's really no value to return, after all. */
6688 return NULL_TREE;
6690 else if (!retval)
6691 /* Remember that this function can sometimes return without a
6692 value. */
6693 current_function_returns_null = 1;
6694 else
6695 /* Remember that this function did return a value. */
6696 current_function_returns_value = 1;
6698 /* Check for erroneous operands -- but after giving ourselves a
6699 chance to provide an error about returning a value from a void
6700 function. */
6701 if (error_operand_p (retval))
6703 current_function_return_value = error_mark_node;
6704 return error_mark_node;
6707 /* Only operator new(...) throw(), can return NULL [expr.new/13]. */
6708 if ((DECL_OVERLOADED_OPERATOR_P (current_function_decl) == NEW_EXPR
6709 || DECL_OVERLOADED_OPERATOR_P (current_function_decl) == VEC_NEW_EXPR)
6710 && !TYPE_NOTHROW_P (TREE_TYPE (current_function_decl))
6711 && ! flag_check_new
6712 && retval && null_ptr_cst_p (retval))
6713 warning (0, "%<operator new%> must not return NULL unless it is "
6714 "declared %<throw()%> (or -fcheck-new is in effect)");
6716 /* Effective C++ rule 15. See also start_function. */
6717 if (warn_ecpp
6718 && DECL_NAME (current_function_decl) == ansi_assopname(NOP_EXPR))
6720 bool warn = true;
6722 /* The function return type must be a reference to the current
6723 class. */
6724 if (TREE_CODE (valtype) == REFERENCE_TYPE
6725 && same_type_ignoring_top_level_qualifiers_p
6726 (TREE_TYPE (valtype), TREE_TYPE (current_class_ref)))
6728 /* Returning '*this' is obviously OK. */
6729 if (retval == current_class_ref)
6730 warn = false;
6731 /* If we are calling a function whose return type is the same of
6732 the current class reference, it is ok. */
6733 else if (TREE_CODE (retval) == INDIRECT_REF
6734 && TREE_CODE (TREE_OPERAND (retval, 0)) == CALL_EXPR)
6735 warn = false;
6738 if (warn)
6739 warning (OPT_Weffc__, "%<operator=%> should return a reference to %<*this%>");
6742 /* The fabled Named Return Value optimization, as per [class.copy]/15:
6744 [...] For a function with a class return type, if the expression
6745 in the return statement is the name of a local object, and the cv-
6746 unqualified type of the local object is the same as the function
6747 return type, an implementation is permitted to omit creating the tem-
6748 porary object to hold the function return value [...]
6750 So, if this is a value-returning function that always returns the same
6751 local variable, remember it.
6753 It might be nice to be more flexible, and choose the first suitable
6754 variable even if the function sometimes returns something else, but
6755 then we run the risk of clobbering the variable we chose if the other
6756 returned expression uses the chosen variable somehow. And people expect
6757 this restriction, anyway. (jason 2000-11-19)
6759 See finish_function and finalize_nrv for the rest of this optimization. */
6761 named_return_value_okay_p =
6762 (retval != NULL_TREE
6763 /* Must be a local, automatic variable. */
6764 && TREE_CODE (retval) == VAR_DECL
6765 && DECL_CONTEXT (retval) == current_function_decl
6766 && ! TREE_STATIC (retval)
6767 && ! DECL_ANON_UNION_VAR_P (retval)
6768 && (DECL_ALIGN (retval)
6769 >= DECL_ALIGN (DECL_RESULT (current_function_decl)))
6770 /* The cv-unqualified type of the returned value must be the
6771 same as the cv-unqualified return type of the
6772 function. */
6773 && same_type_p ((TYPE_MAIN_VARIANT (TREE_TYPE (retval))),
6774 (TYPE_MAIN_VARIANT
6775 (TREE_TYPE (TREE_TYPE (current_function_decl)))))
6776 /* And the returned value must be non-volatile. */
6777 && ! TYPE_VOLATILE (TREE_TYPE (retval)));
6779 if (fn_returns_value_p && flag_elide_constructors)
6781 if (named_return_value_okay_p
6782 && (current_function_return_value == NULL_TREE
6783 || current_function_return_value == retval))
6784 current_function_return_value = retval;
6785 else
6786 current_function_return_value = error_mark_node;
6789 /* We don't need to do any conversions when there's nothing being
6790 returned. */
6791 if (!retval)
6792 return NULL_TREE;
6794 /* Do any required conversions. */
6795 if (retval == result || DECL_CONSTRUCTOR_P (current_function_decl))
6796 /* No conversions are required. */
6798 else
6800 /* The type the function is declared to return. */
6801 tree functype = TREE_TYPE (TREE_TYPE (current_function_decl));
6802 int flags = LOOKUP_NORMAL | LOOKUP_ONLYCONVERTING;
6804 /* The functype's return type will have been set to void, if it
6805 was an incomplete type. Just treat this as 'return;' */
6806 if (VOID_TYPE_P (functype))
6807 return error_mark_node;
6809 /* Under C++0x [12.8/16 class.copy], a returned lvalue is sometimes
6810 treated as an rvalue for the purposes of overload resolution to
6811 favor move constructors over copy constructors. */
6812 if ((cxx_dialect != cxx98)
6813 && named_return_value_okay_p
6814 /* The variable must not have the `volatile' qualifier. */
6815 && !(cp_type_quals (TREE_TYPE (retval)) & TYPE_QUAL_VOLATILE)
6816 /* The return type must be a class type. */
6817 && CLASS_TYPE_P (TREE_TYPE (TREE_TYPE (current_function_decl))))
6818 flags = flags | LOOKUP_PREFER_RVALUE;
6820 /* First convert the value to the function's return type, then
6821 to the type of return value's location to handle the
6822 case that functype is smaller than the valtype. */
6823 retval = convert_for_initialization
6824 (NULL_TREE, functype, retval, flags, "return", NULL_TREE, 0);
6825 retval = convert (valtype, retval);
6827 /* If the conversion failed, treat this just like `return;'. */
6828 if (retval == error_mark_node)
6829 return retval;
6830 /* We can't initialize a register from a AGGR_INIT_EXPR. */
6831 else if (! current_function_returns_struct
6832 && TREE_CODE (retval) == TARGET_EXPR
6833 && TREE_CODE (TREE_OPERAND (retval, 1)) == AGGR_INIT_EXPR)
6834 retval = build2 (COMPOUND_EXPR, TREE_TYPE (retval), retval,
6835 TREE_OPERAND (retval, 0));
6836 else
6837 maybe_warn_about_returning_address_of_local (retval);
6840 /* Actually copy the value returned into the appropriate location. */
6841 if (retval && retval != result)
6842 retval = build2 (INIT_EXPR, TREE_TYPE (result), result, retval);
6844 return retval;
6848 /* Returns nonzero if the pointer-type FROM can be converted to the
6849 pointer-type TO via a qualification conversion. If CONSTP is -1,
6850 then we return nonzero if the pointers are similar, and the
6851 cv-qualification signature of FROM is a proper subset of that of TO.
6853 If CONSTP is positive, then all outer pointers have been
6854 const-qualified. */
6856 static int
6857 comp_ptr_ttypes_real (tree to, tree from, int constp)
6859 bool to_more_cv_qualified = false;
6861 for (; ; to = TREE_TYPE (to), from = TREE_TYPE (from))
6863 if (TREE_CODE (to) != TREE_CODE (from))
6864 return 0;
6866 if (TREE_CODE (from) == OFFSET_TYPE
6867 && !same_type_p (TYPE_OFFSET_BASETYPE (from),
6868 TYPE_OFFSET_BASETYPE (to)))
6869 return 0;
6871 /* Const and volatile mean something different for function types,
6872 so the usual checks are not appropriate. */
6873 if (TREE_CODE (to) != FUNCTION_TYPE && TREE_CODE (to) != METHOD_TYPE)
6875 /* In Objective-C++, some types may have been 'volatilized' by
6876 the compiler for EH; when comparing them here, the volatile
6877 qualification must be ignored. */
6878 bool objc_quals_match = objc_type_quals_match (to, from);
6880 if (!at_least_as_qualified_p (to, from) && !objc_quals_match)
6881 return 0;
6883 if (!at_least_as_qualified_p (from, to) && !objc_quals_match)
6885 if (constp == 0)
6886 return 0;
6887 to_more_cv_qualified = true;
6890 if (constp > 0)
6891 constp &= TYPE_READONLY (to);
6894 if (TREE_CODE (to) != POINTER_TYPE && !TYPE_PTRMEM_P (to))
6895 return ((constp >= 0 || to_more_cv_qualified)
6896 && same_type_ignoring_top_level_qualifiers_p (to, from));
6900 /* When comparing, say, char ** to char const **, this function takes
6901 the 'char *' and 'char const *'. Do not pass non-pointer/reference
6902 types to this function. */
6905 comp_ptr_ttypes (tree to, tree from)
6907 return comp_ptr_ttypes_real (to, from, 1);
6910 /* Returns 1 if to and from are (possibly multi-level) pointers to the same
6911 type or inheritance-related types, regardless of cv-quals. */
6914 ptr_reasonably_similar (const_tree to, const_tree from)
6916 for (; ; to = TREE_TYPE (to), from = TREE_TYPE (from))
6918 /* Any target type is similar enough to void. */
6919 if (TREE_CODE (to) == VOID_TYPE
6920 || TREE_CODE (from) == VOID_TYPE)
6921 return 1;
6923 if (TREE_CODE (to) != TREE_CODE (from))
6924 return 0;
6926 if (TREE_CODE (from) == OFFSET_TYPE
6927 && cp_comptypes (TYPE_OFFSET_BASETYPE (to),
6928 TYPE_OFFSET_BASETYPE (from),
6929 COMPARE_BASE | COMPARE_DERIVED))
6930 continue;
6932 if (TREE_CODE (to) == VECTOR_TYPE
6933 && vector_types_convertible_p (to, from, false))
6934 return 1;
6936 if (TREE_CODE (to) == INTEGER_TYPE
6937 && TYPE_PRECISION (to) == TYPE_PRECISION (from))
6938 return 1;
6940 if (TREE_CODE (to) == FUNCTION_TYPE)
6941 return 1;
6943 if (TREE_CODE (to) != POINTER_TYPE)
6944 return cp_comptypes
6945 (TYPE_MAIN_VARIANT (to), TYPE_MAIN_VARIANT (from),
6946 COMPARE_BASE | COMPARE_DERIVED);
6950 /* Return true if TO and FROM (both of which are POINTER_TYPEs or
6951 pointer-to-member types) are the same, ignoring cv-qualification at
6952 all levels. */
6954 bool
6955 comp_ptr_ttypes_const (tree to, tree from)
6957 for (; ; to = TREE_TYPE (to), from = TREE_TYPE (from))
6959 if (TREE_CODE (to) != TREE_CODE (from))
6960 return false;
6962 if (TREE_CODE (from) == OFFSET_TYPE
6963 && same_type_p (TYPE_OFFSET_BASETYPE (from),
6964 TYPE_OFFSET_BASETYPE (to)))
6965 continue;
6967 if (TREE_CODE (to) != POINTER_TYPE)
6968 return same_type_ignoring_top_level_qualifiers_p (to, from);
6972 /* Returns the type qualifiers for this type, including the qualifiers on the
6973 elements for an array type. */
6976 cp_type_quals (const_tree type)
6978 /* This CONST_CAST is okay because strip_array_types returns it's
6979 argument unmodified and we assign it to a const_tree. */
6980 type = strip_array_types (CONST_CAST_TREE(type));
6981 if (type == error_mark_node)
6982 return TYPE_UNQUALIFIED;
6983 return TYPE_QUALS (type);
6986 /* Returns nonzero if the TYPE is const from a C++ perspective: look inside
6987 arrays. */
6989 bool
6990 cp_type_readonly (const_tree type)
6992 /* This CONST_CAST is okay because strip_array_types returns it's
6993 argument unmodified and we assign it to a const_tree. */
6994 type = strip_array_types (CONST_CAST_TREE(type));
6995 return TYPE_READONLY (type);
6998 /* Returns nonzero if the TYPE contains a mutable member. */
7000 bool
7001 cp_has_mutable_p (const_tree type)
7003 /* This CONST_CAST is okay because strip_array_types returns it's
7004 argument unmodified and we assign it to a const_tree. */
7005 type = strip_array_types (CONST_CAST_TREE(type));
7007 return CLASS_TYPE_P (type) && CLASSTYPE_HAS_MUTABLE (type);
7010 /* Set TREE_READONLY and TREE_VOLATILE on DECL as indicated by the
7011 TYPE_QUALS. For a VAR_DECL, this may be an optimistic
7012 approximation. In particular, consider:
7014 int f();
7015 struct S { int i; };
7016 const S s = { f(); }
7018 Here, we will make "s" as TREE_READONLY (because it is declared
7019 "const") -- only to reverse ourselves upon seeing that the
7020 initializer is non-constant. */
7022 void
7023 cp_apply_type_quals_to_decl (int type_quals, tree decl)
7025 tree type = TREE_TYPE (decl);
7027 if (type == error_mark_node)
7028 return;
7030 if (TREE_CODE (type) == FUNCTION_TYPE
7031 && type_quals != TYPE_UNQUALIFIED)
7033 /* This was an error in C++98 (cv-qualifiers cannot be added to
7034 a function type), but DR 295 makes the code well-formed by
7035 dropping the extra qualifiers. */
7036 if (pedantic)
7038 tree bad_type = build_qualified_type (type, type_quals);
7039 pedwarn ("ignoring %qV qualifiers added to function type %qT",
7040 bad_type, type);
7043 TREE_TYPE (decl) = TYPE_MAIN_VARIANT (type);
7044 return;
7047 /* Avoid setting TREE_READONLY incorrectly. */
7048 if (/* If the object has a constructor, the constructor may modify
7049 the object. */
7050 TYPE_NEEDS_CONSTRUCTING (type)
7051 /* If the type isn't complete, we don't know yet if it will need
7052 constructing. */
7053 || !COMPLETE_TYPE_P (type)
7054 /* If the type has a mutable component, that component might be
7055 modified. */
7056 || TYPE_HAS_MUTABLE_P (type))
7057 type_quals &= ~TYPE_QUAL_CONST;
7059 c_apply_type_quals_to_decl (type_quals, decl);
7062 /* Subroutine of casts_away_constness. Make T1 and T2 point at
7063 exemplar types such that casting T1 to T2 is casting away constness
7064 if and only if there is no implicit conversion from T1 to T2. */
7066 static void
7067 casts_away_constness_r (tree *t1, tree *t2)
7069 int quals1;
7070 int quals2;
7072 /* [expr.const.cast]
7074 For multi-level pointer to members and multi-level mixed pointers
7075 and pointers to members (conv.qual), the "member" aspect of a
7076 pointer to member level is ignored when determining if a const
7077 cv-qualifier has been cast away. */
7078 /* [expr.const.cast]
7080 For two pointer types:
7082 X1 is T1cv1,1 * ... cv1,N * where T1 is not a pointer type
7083 X2 is T2cv2,1 * ... cv2,M * where T2 is not a pointer type
7084 K is min(N,M)
7086 casting from X1 to X2 casts away constness if, for a non-pointer
7087 type T there does not exist an implicit conversion (clause
7088 _conv_) from:
7090 Tcv1,(N-K+1) * cv1,(N-K+2) * ... cv1,N *
7094 Tcv2,(M-K+1) * cv2,(M-K+2) * ... cv2,M *. */
7095 if ((!TYPE_PTR_P (*t1) && !TYPE_PTRMEM_P (*t1))
7096 || (!TYPE_PTR_P (*t2) && !TYPE_PTRMEM_P (*t2)))
7098 *t1 = cp_build_qualified_type (void_type_node,
7099 cp_type_quals (*t1));
7100 *t2 = cp_build_qualified_type (void_type_node,
7101 cp_type_quals (*t2));
7102 return;
7105 quals1 = cp_type_quals (*t1);
7106 quals2 = cp_type_quals (*t2);
7108 if (TYPE_PTRMEM_P (*t1))
7109 *t1 = TYPE_PTRMEM_POINTED_TO_TYPE (*t1);
7110 else
7111 *t1 = TREE_TYPE (*t1);
7112 if (TYPE_PTRMEM_P (*t2))
7113 *t2 = TYPE_PTRMEM_POINTED_TO_TYPE (*t2);
7114 else
7115 *t2 = TREE_TYPE (*t2);
7117 casts_away_constness_r (t1, t2);
7118 *t1 = build_pointer_type (*t1);
7119 *t2 = build_pointer_type (*t2);
7120 *t1 = cp_build_qualified_type (*t1, quals1);
7121 *t2 = cp_build_qualified_type (*t2, quals2);
7124 /* Returns nonzero if casting from TYPE1 to TYPE2 casts away
7125 constness. */
7127 static bool
7128 casts_away_constness (tree t1, tree t2)
7130 if (TREE_CODE (t2) == REFERENCE_TYPE)
7132 /* [expr.const.cast]
7134 Casting from an lvalue of type T1 to an lvalue of type T2
7135 using a reference cast casts away constness if a cast from an
7136 rvalue of type "pointer to T1" to the type "pointer to T2"
7137 casts away constness. */
7138 t1 = (TREE_CODE (t1) == REFERENCE_TYPE ? TREE_TYPE (t1) : t1);
7139 return casts_away_constness (build_pointer_type (t1),
7140 build_pointer_type (TREE_TYPE (t2)));
7143 if (TYPE_PTRMEM_P (t1) && TYPE_PTRMEM_P (t2))
7144 /* [expr.const.cast]
7146 Casting from an rvalue of type "pointer to data member of X
7147 of type T1" to the type "pointer to data member of Y of type
7148 T2" casts away constness if a cast from an rvalue of type
7149 "pointer to T1" to the type "pointer to T2" casts away
7150 constness. */
7151 return casts_away_constness
7152 (build_pointer_type (TYPE_PTRMEM_POINTED_TO_TYPE (t1)),
7153 build_pointer_type (TYPE_PTRMEM_POINTED_TO_TYPE (t2)));
7155 /* Casting away constness is only something that makes sense for
7156 pointer or reference types. */
7157 if (TREE_CODE (t1) != POINTER_TYPE
7158 || TREE_CODE (t2) != POINTER_TYPE)
7159 return false;
7161 /* Top-level qualifiers don't matter. */
7162 t1 = TYPE_MAIN_VARIANT (t1);
7163 t2 = TYPE_MAIN_VARIANT (t2);
7164 casts_away_constness_r (&t1, &t2);
7165 if (!can_convert (t2, t1))
7166 return true;
7168 return false;
7171 /* If T is a REFERENCE_TYPE return the type to which T refers.
7172 Otherwise, return T itself. */
7174 tree
7175 non_reference (tree t)
7177 if (TREE_CODE (t) == REFERENCE_TYPE)
7178 t = TREE_TYPE (t);
7179 return t;
7183 /* Return nonzero if REF is an lvalue valid for this language;
7184 otherwise, print an error message and return zero. USE says
7185 how the lvalue is being used and so selects the error message. */
7188 lvalue_or_else (const_tree ref, enum lvalue_use use)
7190 int win = lvalue_p (ref);
7192 if (!win)
7193 lvalue_error (use);
7195 return win;