]> CyberLeo.Net >> Repos - FreeBSD/releng/10.2.git/blob - contrib/gcc/cp/typeck.c
- Copy stable/10@285827 to releng/10.2 in preparation for 10.2-RC1
[FreeBSD/releng/10.2.git] / contrib / gcc / cp / typeck.c
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 Free Software Foundation, Inc.
4    Hacked by Michael Tiemann (tiemann@cygnus.com)
5
6 This file is part of GCC.
7
8 GCC is free software; you can redistribute it and/or modify
9 it under the terms of the GNU General Public License as published by
10 the Free Software Foundation; either version 2, or (at your option)
11 any later version.
12
13 GCC is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16 GNU General Public License for more details.
17
18 You should have received a copy of the GNU General Public License
19 along with GCC; see the file COPYING.  If not, write to
20 the Free Software Foundation, 51 Franklin Street, Fifth Floor,
21 Boston, MA 02110-1301, USA.  */
22
23
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.  */
28
29 #include "config.h"
30 #include "system.h"
31 #include "coretypes.h"
32 #include "tm.h"
33 #include "tree.h"
34 #include "rtl.h"
35 #include "expr.h"
36 #include "cp-tree.h"
37 #include "tm_p.h"
38 #include "flags.h"
39 #include "output.h"
40 #include "toplev.h"
41 #include "diagnostic.h"
42 #include "target.h"
43 #include "convert.h"
44 #include "c-common.h"
45
46 static tree pfn_from_ptrmemfunc (tree);
47 static tree convert_for_assignment (tree, tree, const char *, tree, int);
48 static tree cp_pointer_int_sum (enum tree_code, tree, tree);
49 static tree rationalize_conditional_expr (enum tree_code, tree);
50 static int comp_ptr_ttypes_real (tree, tree, int);
51 static bool comp_except_types (tree, tree, bool);
52 static bool comp_array_types (tree, tree, bool);
53 static tree common_base_type (tree, tree);
54 static tree pointer_diff (tree, tree, tree);
55 static tree get_delta_difference (tree, tree, bool, bool);
56 static void casts_away_constness_r (tree *, tree *);
57 static bool casts_away_constness (tree, tree);
58 static void maybe_warn_about_returning_address_of_local (tree);
59 static tree lookup_destructor (tree, tree, tree);
60 /* APPLE LOCAL radar 6087117 */
61 static tree convert_arguments (tree, tree, tree, int, int);
62
63 /* Do `exp = require_complete_type (exp);' to make sure exp
64    does not have an incomplete type.  (That includes void types.)
65    Returns the error_mark_node if the VALUE does not have
66    complete type when this function returns.  */
67
68 tree
69 require_complete_type (tree value)
70 {
71   tree type;
72
73   if (processing_template_decl || value == error_mark_node)
74     return value;
75
76   if (TREE_CODE (value) == OVERLOAD)
77     type = unknown_type_node;
78   else
79     type = TREE_TYPE (value);
80
81   if (type == error_mark_node)
82     return error_mark_node;
83
84   /* First, detect a valid value with a complete type.  */
85   if (COMPLETE_TYPE_P (type))
86     return value;
87
88   if (complete_type_or_else (type, value))
89     return value;
90   else
91     return error_mark_node;
92 }
93
94 /* Try to complete TYPE, if it is incomplete.  For example, if TYPE is
95    a template instantiation, do the instantiation.  Returns TYPE,
96    whether or not it could be completed, unless something goes
97    horribly wrong, in which case the error_mark_node is returned.  */
98
99 tree
100 complete_type (tree type)
101 {
102   if (type == NULL_TREE)
103     /* Rather than crash, we return something sure to cause an error
104        at some point.  */
105     return error_mark_node;
106
107   if (type == error_mark_node || COMPLETE_TYPE_P (type))
108     ;
109   else if (TREE_CODE (type) == ARRAY_TYPE && TYPE_DOMAIN (type))
110     {
111       tree t = complete_type (TREE_TYPE (type));
112       unsigned int needs_constructing, has_nontrivial_dtor;
113       if (COMPLETE_TYPE_P (t) && !dependent_type_p (type))
114         layout_type (type);
115       needs_constructing
116         = TYPE_NEEDS_CONSTRUCTING (TYPE_MAIN_VARIANT (t));
117       has_nontrivial_dtor
118         = TYPE_HAS_NONTRIVIAL_DESTRUCTOR (TYPE_MAIN_VARIANT (t));
119       for (t = TYPE_MAIN_VARIANT (type); t; t = TYPE_NEXT_VARIANT (t))
120         {
121           TYPE_NEEDS_CONSTRUCTING (t) = needs_constructing;
122           TYPE_HAS_NONTRIVIAL_DESTRUCTOR (t) = has_nontrivial_dtor;
123         }
124     }
125   else if (CLASS_TYPE_P (type) && CLASSTYPE_TEMPLATE_INSTANTIATION (type))
126     instantiate_class_template (TYPE_MAIN_VARIANT (type));
127
128   return type;
129 }
130
131 /* Like complete_type, but issue an error if the TYPE cannot be completed.
132    VALUE is used for informative diagnostics.
133    Returns NULL_TREE if the type cannot be made complete.  */
134
135 tree
136 complete_type_or_else (tree type, tree value)
137 {
138   type = complete_type (type);
139   if (type == error_mark_node)
140     /* We already issued an error.  */
141     return NULL_TREE;
142   else if (!COMPLETE_TYPE_P (type))
143     {
144       cxx_incomplete_type_diagnostic (value, type, 0);
145       return NULL_TREE;
146     }
147   else
148     return type;
149 }
150
151 /* Return truthvalue of whether type of EXP is instantiated.  */
152
153 int
154 type_unknown_p (tree exp)
155 {
156   return (TREE_CODE (exp) == TREE_LIST
157           || TREE_TYPE (exp) == unknown_type_node);
158 }
159
160 \f
161 /* Return the common type of two parameter lists.
162    We assume that comptypes has already been done and returned 1;
163    if that isn't so, this may crash.
164
165    As an optimization, free the space we allocate if the parameter
166    lists are already common.  */
167
168 static tree
169 commonparms (tree p1, tree p2)
170 {
171   tree oldargs = p1, newargs, n;
172   int i, len;
173   int any_change = 0;
174
175   len = list_length (p1);
176   newargs = tree_last (p1);
177
178   if (newargs == void_list_node)
179     i = 1;
180   else
181     {
182       i = 0;
183       newargs = 0;
184     }
185
186   for (; i < len; i++)
187     newargs = tree_cons (NULL_TREE, NULL_TREE, newargs);
188
189   n = newargs;
190
191   for (i = 0; p1;
192        p1 = TREE_CHAIN (p1), p2 = TREE_CHAIN (p2), n = TREE_CHAIN (n), i++)
193     {
194       if (TREE_PURPOSE (p1) && !TREE_PURPOSE (p2))
195         {
196           TREE_PURPOSE (n) = TREE_PURPOSE (p1);
197           any_change = 1;
198         }
199       else if (! TREE_PURPOSE (p1))
200         {
201           if (TREE_PURPOSE (p2))
202             {
203               TREE_PURPOSE (n) = TREE_PURPOSE (p2);
204               any_change = 1;
205             }
206         }
207       else
208         {
209           if (1 != simple_cst_equal (TREE_PURPOSE (p1), TREE_PURPOSE (p2)))
210             any_change = 1;
211           TREE_PURPOSE (n) = TREE_PURPOSE (p2);
212         }
213       if (TREE_VALUE (p1) != TREE_VALUE (p2))
214         {
215           any_change = 1;
216           TREE_VALUE (n) = merge_types (TREE_VALUE (p1), TREE_VALUE (p2));
217         }
218       else
219         TREE_VALUE (n) = TREE_VALUE (p1);
220     }
221   if (! any_change)
222     return oldargs;
223
224   return newargs;
225 }
226
227 /* Given a type, perhaps copied for a typedef,
228    find the "original" version of it.  */
229 static tree
230 original_type (tree t)
231 {
232   int quals = cp_type_quals (t);
233   while (t != error_mark_node
234          && TYPE_NAME (t) != NULL_TREE)
235     {
236       tree x = TYPE_NAME (t);
237       if (TREE_CODE (x) != TYPE_DECL)
238         break;
239       x = DECL_ORIGINAL_TYPE (x);
240       if (x == NULL_TREE)
241         break;
242       t = x;
243     }
244   return cp_build_qualified_type (t, quals);
245 }
246
247 /* T1 and T2 are arithmetic or enumeration types.  Return the type
248    that will result from the "usual arithmetic conversions" on T1 and
249    T2 as described in [expr].  */
250
251 tree
252 type_after_usual_arithmetic_conversions (tree t1, tree t2)
253 {
254   enum tree_code code1 = TREE_CODE (t1);
255   enum tree_code code2 = TREE_CODE (t2);
256   tree attributes;
257
258   /* FIXME: Attributes.  */
259   gcc_assert (ARITHMETIC_TYPE_P (t1)
260               || TREE_CODE (t1) == VECTOR_TYPE
261               || TREE_CODE (t1) == ENUMERAL_TYPE);
262   gcc_assert (ARITHMETIC_TYPE_P (t2)
263               || TREE_CODE (t2) == VECTOR_TYPE
264               || TREE_CODE (t2) == ENUMERAL_TYPE);
265
266   /* In what follows, we slightly generalize the rules given in [expr] so
267      as to deal with `long long' and `complex'.  First, merge the
268      attributes.  */
269   attributes = (*targetm.merge_type_attributes) (t1, t2);
270
271   /* If one type is complex, form the common type of the non-complex
272      components, then make that complex.  Use T1 or T2 if it is the
273      required type.  */
274   if (code1 == COMPLEX_TYPE || code2 == COMPLEX_TYPE)
275     {
276       tree subtype1 = code1 == COMPLEX_TYPE ? TREE_TYPE (t1) : t1;
277       tree subtype2 = code2 == COMPLEX_TYPE ? TREE_TYPE (t2) : t2;
278       tree subtype
279         = type_after_usual_arithmetic_conversions (subtype1, subtype2);
280
281       if (code1 == COMPLEX_TYPE && TREE_TYPE (t1) == subtype)
282         return build_type_attribute_variant (t1, attributes);
283       else if (code2 == COMPLEX_TYPE && TREE_TYPE (t2) == subtype)
284         return build_type_attribute_variant (t2, attributes);
285       else
286         return build_type_attribute_variant (build_complex_type (subtype),
287                                              attributes);
288     }
289
290   if (code1 == VECTOR_TYPE)
291     {
292       /* When we get here we should have two vectors of the same size.
293          Just prefer the unsigned one if present.  */
294       if (TYPE_UNSIGNED (t1))
295         return build_type_attribute_variant (t1, attributes);
296       else
297         return build_type_attribute_variant (t2, attributes);
298     }
299
300   /* If only one is real, use it as the result.  */
301   if (code1 == REAL_TYPE && code2 != REAL_TYPE)
302     return build_type_attribute_variant (t1, attributes);
303   if (code2 == REAL_TYPE && code1 != REAL_TYPE)
304     return build_type_attribute_variant (t2, attributes);
305
306   /* Perform the integral promotions.  */
307   if (code1 != REAL_TYPE)
308     {
309       t1 = type_promotes_to (t1);
310       t2 = type_promotes_to (t2);
311     }
312
313   /* Both real or both integers; use the one with greater precision.  */
314   if (TYPE_PRECISION (t1) > TYPE_PRECISION (t2))
315     return build_type_attribute_variant (t1, attributes);
316   else if (TYPE_PRECISION (t2) > TYPE_PRECISION (t1))
317     return build_type_attribute_variant (t2, attributes);
318
319   /* The types are the same; no need to do anything fancy.  */
320   if (TYPE_MAIN_VARIANT (t1) == TYPE_MAIN_VARIANT (t2))
321     return build_type_attribute_variant (t1, attributes);
322
323   if (code1 != REAL_TYPE)
324     {
325       /* If one is a sizetype, use it so size_binop doesn't blow up.  */
326       if (TYPE_IS_SIZETYPE (t1) > TYPE_IS_SIZETYPE (t2))
327         return build_type_attribute_variant (t1, attributes);
328       if (TYPE_IS_SIZETYPE (t2) > TYPE_IS_SIZETYPE (t1))
329         return build_type_attribute_variant (t2, attributes);
330
331       /* If one is unsigned long long, then convert the other to unsigned
332          long long.  */
333       if (same_type_p (TYPE_MAIN_VARIANT (t1), long_long_unsigned_type_node)
334           || same_type_p (TYPE_MAIN_VARIANT (t2), long_long_unsigned_type_node))
335         return build_type_attribute_variant (long_long_unsigned_type_node,
336                                              attributes);
337       /* If one is a long long, and the other is an unsigned long, and
338          long long can represent all the values of an unsigned long, then
339          convert to a long long.  Otherwise, convert to an unsigned long
340          long.  Otherwise, if either operand is long long, convert the
341          other to long long.
342
343          Since we're here, we know the TYPE_PRECISION is the same;
344          therefore converting to long long cannot represent all the values
345          of an unsigned long, so we choose unsigned long long in that
346          case.  */
347       if (same_type_p (TYPE_MAIN_VARIANT (t1), long_long_integer_type_node)
348           || same_type_p (TYPE_MAIN_VARIANT (t2), long_long_integer_type_node))
349         {
350           tree t = ((TYPE_UNSIGNED (t1) || TYPE_UNSIGNED (t2))
351                     ? long_long_unsigned_type_node
352                     : long_long_integer_type_node);
353           return build_type_attribute_variant (t, attributes);
354         }
355
356       /* Go through the same procedure, but for longs.  */
357       if (same_type_p (TYPE_MAIN_VARIANT (t1), long_unsigned_type_node)
358           || same_type_p (TYPE_MAIN_VARIANT (t2), long_unsigned_type_node))
359         return build_type_attribute_variant (long_unsigned_type_node,
360                                              attributes);
361       if (same_type_p (TYPE_MAIN_VARIANT (t1), long_integer_type_node)
362           || same_type_p (TYPE_MAIN_VARIANT (t2), long_integer_type_node))
363         {
364           tree t = ((TYPE_UNSIGNED (t1) || TYPE_UNSIGNED (t2))
365                     ? long_unsigned_type_node : long_integer_type_node);
366           return build_type_attribute_variant (t, attributes);
367         }
368       /* Otherwise prefer the unsigned one.  */
369       if (TYPE_UNSIGNED (t1))
370         return build_type_attribute_variant (t1, attributes);
371       else
372         return build_type_attribute_variant (t2, attributes);
373     }
374   else
375     {
376       if (same_type_p (TYPE_MAIN_VARIANT (t1), long_double_type_node)
377           || same_type_p (TYPE_MAIN_VARIANT (t2), long_double_type_node))
378         return build_type_attribute_variant (long_double_type_node,
379                                              attributes);
380       if (same_type_p (TYPE_MAIN_VARIANT (t1), double_type_node)
381           || same_type_p (TYPE_MAIN_VARIANT (t2), double_type_node))
382         return build_type_attribute_variant (double_type_node,
383                                              attributes);
384       if (same_type_p (TYPE_MAIN_VARIANT (t1), float_type_node)
385           || same_type_p (TYPE_MAIN_VARIANT (t2), float_type_node))
386         return build_type_attribute_variant (float_type_node,
387                                              attributes);
388
389       /* Two floating-point types whose TYPE_MAIN_VARIANTs are none of
390          the standard C++ floating-point types.  Logic earlier in this
391          function has already eliminated the possibility that
392          TYPE_PRECISION (t2) != TYPE_PRECISION (t1), so there's no
393          compelling reason to choose one or the other.  */
394       return build_type_attribute_variant (t1, attributes);
395     }
396 }
397
398 /* Subroutine of composite_pointer_type to implement the recursive
399    case.  See that function for documentation fo the parameters.  */
400
401 static tree
402 composite_pointer_type_r (tree t1, tree t2, const char* location)
403 {
404   tree pointee1;
405   tree pointee2;
406   tree result_type;
407   tree attributes;
408
409   /* Determine the types pointed to by T1 and T2.  */
410   /* APPLE LOCAL blocks 6040305 */
411   if (TREE_CODE (t1) == POINTER_TYPE || TREE_CODE (t1) == BLOCK_POINTER_TYPE)
412     {
413       pointee1 = TREE_TYPE (t1);
414       pointee2 = TREE_TYPE (t2);
415     }
416   else
417     {
418       pointee1 = TYPE_PTRMEM_POINTED_TO_TYPE (t1);
419       pointee2 = TYPE_PTRMEM_POINTED_TO_TYPE (t2);
420     }
421
422   /* [expr.rel]
423
424      Otherwise, the composite pointer type is a pointer type
425      similar (_conv.qual_) to the type of one of the operands,
426      with a cv-qualification signature (_conv.qual_) that is the
427      union of the cv-qualification signatures of the operand
428      types.  */
429   if (same_type_ignoring_top_level_qualifiers_p (pointee1, pointee2))
430     result_type = pointee1;
431   else if ((TREE_CODE (pointee1) == POINTER_TYPE
432             && TREE_CODE (pointee2) == POINTER_TYPE)
433            || (TYPE_PTR_TO_MEMBER_P (pointee1)
434                && TYPE_PTR_TO_MEMBER_P (pointee2)))
435     result_type = composite_pointer_type_r (pointee1, pointee2, location);
436   else
437     {
438       pedwarn ("%s between distinct pointer types %qT and %qT "
439                "lacks a cast",
440                location, t1, t2);
441       result_type = void_type_node;
442     }
443   result_type = cp_build_qualified_type (result_type,
444                                          (cp_type_quals (pointee1)
445                                           | cp_type_quals (pointee2)));
446   /* If the original types were pointers to members, so is the
447      result.  */
448   if (TYPE_PTR_TO_MEMBER_P (t1))
449     {
450       if (!same_type_p (TYPE_PTRMEM_CLASS_TYPE (t1),
451                         TYPE_PTRMEM_CLASS_TYPE (t2)))
452         pedwarn ("%s between distinct pointer types %qT and %qT "
453                  "lacks a cast",
454                  location, t1, t2);
455       result_type = build_ptrmem_type (TYPE_PTRMEM_CLASS_TYPE (t1),
456                                        result_type);
457     }
458   /* APPLE LOCAL begin blocks 6065211 */
459   else if (TREE_CODE (t1) == BLOCK_POINTER_TYPE
460      && result_type != void_type_node)
461     result_type = build_block_pointer_type (result_type);
462   else
463     result_type = build_pointer_type (result_type);
464   /* APPLE LOCAL end blocks 6065211 */
465
466   /* Merge the attributes.  */
467   attributes = (*targetm.merge_type_attributes) (t1, t2);
468   return build_type_attribute_variant (result_type, attributes);
469 }
470
471 /* Return the composite pointer type (see [expr.rel]) for T1 and T2.
472    ARG1 and ARG2 are the values with those types.  The LOCATION is a
473    string describing the current location, in case an error occurs.
474
475    This routine also implements the computation of a common type for
476    pointers-to-members as per [expr.eq].  */
477
478 tree
479 composite_pointer_type (tree t1, tree t2, tree arg1, tree arg2,
480                         const char* location)
481 {
482   tree class1;
483   tree class2;
484
485   /* [expr.rel]
486
487      If one operand is a null pointer constant, the composite pointer
488      type is the type of the other operand.  */
489   if (null_ptr_cst_p (arg1))
490     return t2;
491   if (null_ptr_cst_p (arg2))
492     return t1;
493
494   /* We have:
495
496        [expr.rel]
497
498        If one of the operands has type "pointer to cv1 void*", then
499        the other has type "pointer to cv2T", and the composite pointer
500        type is "pointer to cv12 void", where cv12 is the union of cv1
501        and cv2.
502
503     If either type is a pointer to void, make sure it is T1.  */
504   if (TREE_CODE (t2) == POINTER_TYPE && VOID_TYPE_P (TREE_TYPE (t2)))
505     {
506       tree t;
507       t = t1;
508       t1 = t2;
509       t2 = t;
510     }
511
512   /* Now, if T1 is a pointer to void, merge the qualifiers.  */
513   if (TREE_CODE (t1) == POINTER_TYPE && VOID_TYPE_P (TREE_TYPE (t1)))
514     {
515       tree attributes;
516       tree result_type;
517
518       if (pedantic && TYPE_PTRFN_P (t2))
519         pedwarn ("ISO C++ forbids %s between pointer of type %<void *%> "
520                  "and pointer-to-function", location);
521       result_type
522         = cp_build_qualified_type (void_type_node,
523                                    (cp_type_quals (TREE_TYPE (t1))
524                                     | cp_type_quals (TREE_TYPE (t2))));
525       result_type = build_pointer_type (result_type);
526       /* Merge the attributes.  */
527       attributes = (*targetm.merge_type_attributes) (t1, t2);
528       return build_type_attribute_variant (result_type, attributes);
529     }
530
531   if (c_dialect_objc () && TREE_CODE (t1) == POINTER_TYPE
532       && TREE_CODE (t2) == POINTER_TYPE)
533     {
534       /* APPLE LOCAL radar 4229905 - radar 6231433 */
535       if (objc_have_common_type (t1, t2, -3, NULL_TREE, location))
536       /* APPLE LOCAL 4154928 */
537         return objc_common_type (t1, t2);
538     }
539
540   /* [expr.eq] permits the application of a pointer conversion to
541      bring the pointers to a common type.  */
542   if (TREE_CODE (t1) == POINTER_TYPE && TREE_CODE (t2) == POINTER_TYPE
543       && CLASS_TYPE_P (TREE_TYPE (t1))
544       && CLASS_TYPE_P (TREE_TYPE (t2))
545       && !same_type_ignoring_top_level_qualifiers_p (TREE_TYPE (t1),
546                                                      TREE_TYPE (t2)))
547     {
548       class1 = TREE_TYPE (t1);
549       class2 = TREE_TYPE (t2);
550
551       if (DERIVED_FROM_P (class1, class2))
552         t2 = (build_pointer_type
553               (cp_build_qualified_type (class1, TYPE_QUALS (class2))));
554       else if (DERIVED_FROM_P (class2, class1))
555         t1 = (build_pointer_type
556               (cp_build_qualified_type (class2, TYPE_QUALS (class1))));
557       else
558         {
559           error ("%s between distinct pointer types %qT and %qT "
560                  "lacks a cast", location, t1, t2);
561           return error_mark_node;
562         }
563     }
564   /* [expr.eq] permits the application of a pointer-to-member
565      conversion to change the class type of one of the types.  */
566   else if (TYPE_PTR_TO_MEMBER_P (t1)
567            && !same_type_p (TYPE_PTRMEM_CLASS_TYPE (t1),
568                             TYPE_PTRMEM_CLASS_TYPE (t2)))
569     {
570       class1 = TYPE_PTRMEM_CLASS_TYPE (t1);
571       class2 = TYPE_PTRMEM_CLASS_TYPE (t2);
572
573       if (DERIVED_FROM_P (class1, class2))
574         t1 = build_ptrmem_type (class2, TYPE_PTRMEM_POINTED_TO_TYPE (t1));
575       else if (DERIVED_FROM_P (class2, class1))
576         t2 = build_ptrmem_type (class1, TYPE_PTRMEM_POINTED_TO_TYPE (t2));
577       else
578         {
579           error ("%s between distinct pointer-to-member types %qT and %qT "
580                  "lacks a cast", location, t1, t2);
581           return error_mark_node;
582         }
583     }
584   /* APPLE LOCAL begin blocks 6065211 */
585   else if (TREE_CODE (t1) != TREE_CODE (t2))
586     {
587       error ("%s between distinct pointer types %qT and %qT "
588              "lacks a cast", location, t1, t2);
589       return error_mark_node;
590     }
591   /* APPLE LOCAL end blocks 6065211 */
592
593   return composite_pointer_type_r (t1, t2, location);
594 }
595
596 /* Return the merged type of two types.
597    We assume that comptypes has already been done and returned 1;
598    if that isn't so, this may crash.
599
600    This just combines attributes and default arguments; any other
601    differences would cause the two types to compare unalike.  */
602
603 tree
604 merge_types (tree t1, tree t2)
605 {
606   enum tree_code code1;
607   enum tree_code code2;
608   tree attributes;
609
610   /* Save time if the two types are the same.  */
611   if (t1 == t2)
612     return t1;
613   if (original_type (t1) == original_type (t2))
614     return t1;
615
616   /* If one type is nonsense, use the other.  */
617   if (t1 == error_mark_node)
618     return t2;
619   if (t2 == error_mark_node)
620     return t1;
621
622   /* Merge the attributes.  */
623   attributes = (*targetm.merge_type_attributes) (t1, t2);
624
625   if (TYPE_PTRMEMFUNC_P (t1))
626     t1 = TYPE_PTRMEMFUNC_FN_TYPE (t1);
627   if (TYPE_PTRMEMFUNC_P (t2))
628     t2 = TYPE_PTRMEMFUNC_FN_TYPE (t2);
629
630   code1 = TREE_CODE (t1);
631   code2 = TREE_CODE (t2);
632
633   switch (code1)
634     {
635     case POINTER_TYPE:
636     case REFERENCE_TYPE:
637       /* For two pointers, do this recursively on the target type.  */
638       {
639         tree target = merge_types (TREE_TYPE (t1), TREE_TYPE (t2));
640         int quals = cp_type_quals (t1);
641
642         if (code1 == POINTER_TYPE)
643           t1 = build_pointer_type (target);
644         else
645           t1 = build_reference_type (target);
646         t1 = build_type_attribute_variant (t1, attributes);
647         t1 = cp_build_qualified_type (t1, quals);
648
649         if (TREE_CODE (target) == METHOD_TYPE)
650           t1 = build_ptrmemfunc_type (t1);
651
652         return t1;
653       }
654
655     case OFFSET_TYPE:
656       {
657         int quals;
658         tree pointee;
659         quals = cp_type_quals (t1);
660         pointee = merge_types (TYPE_PTRMEM_POINTED_TO_TYPE (t1),
661                                TYPE_PTRMEM_POINTED_TO_TYPE (t2));
662         t1 = build_ptrmem_type (TYPE_PTRMEM_CLASS_TYPE (t1),
663                                 pointee);
664         t1 = cp_build_qualified_type (t1, quals);
665         break;
666       }
667
668     case ARRAY_TYPE:
669       {
670         tree elt = merge_types (TREE_TYPE (t1), TREE_TYPE (t2));
671         /* Save space: see if the result is identical to one of the args.  */
672         if (elt == TREE_TYPE (t1) && TYPE_DOMAIN (t1))
673           return build_type_attribute_variant (t1, attributes);
674         if (elt == TREE_TYPE (t2) && TYPE_DOMAIN (t2))
675           return build_type_attribute_variant (t2, attributes);
676         /* Merge the element types, and have a size if either arg has one.  */
677         t1 = build_cplus_array_type
678           (elt, TYPE_DOMAIN (TYPE_DOMAIN (t1) ? t1 : t2));
679         break;
680       }
681
682     case FUNCTION_TYPE:
683       /* Function types: prefer the one that specified arg types.
684          If both do, merge the arg types.  Also merge the return types.  */
685       {
686         tree valtype = merge_types (TREE_TYPE (t1), TREE_TYPE (t2));
687         tree p1 = TYPE_ARG_TYPES (t1);
688         tree p2 = TYPE_ARG_TYPES (t2);
689         tree rval, raises;
690
691         /* Save space: see if the result is identical to one of the args.  */
692         if (valtype == TREE_TYPE (t1) && ! p2)
693           return cp_build_type_attribute_variant (t1, attributes);
694         if (valtype == TREE_TYPE (t2) && ! p1)
695           return cp_build_type_attribute_variant (t2, attributes);
696
697         /* Simple way if one arg fails to specify argument types.  */
698         if (p1 == NULL_TREE || TREE_VALUE (p1) == void_type_node)
699           {
700             rval = build_function_type (valtype, p2);
701             if ((raises = TYPE_RAISES_EXCEPTIONS (t2)))
702               rval = build_exception_variant (rval, raises);
703             return cp_build_type_attribute_variant (rval, attributes);
704           }
705         raises = TYPE_RAISES_EXCEPTIONS (t1);
706         if (p2 == NULL_TREE || TREE_VALUE (p2) == void_type_node)
707           {
708             rval = build_function_type (valtype, p1);
709             if (raises)
710               rval = build_exception_variant (rval, raises);
711             return cp_build_type_attribute_variant (rval, attributes);
712           }
713
714         rval = build_function_type (valtype, commonparms (p1, p2));
715         t1 = build_exception_variant (rval, raises);
716         break;
717       }
718
719     case METHOD_TYPE:
720       {
721         /* Get this value the long way, since TYPE_METHOD_BASETYPE
722            is just the main variant of this.  */
723         tree basetype = TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (t2)));
724         tree raises = TYPE_RAISES_EXCEPTIONS (t1);
725         tree t3;
726
727         /* If this was a member function type, get back to the
728            original type of type member function (i.e., without
729            the class instance variable up front.  */
730         t1 = build_function_type (TREE_TYPE (t1),
731                                   TREE_CHAIN (TYPE_ARG_TYPES (t1)));
732         t2 = build_function_type (TREE_TYPE (t2),
733                                   TREE_CHAIN (TYPE_ARG_TYPES (t2)));
734         t3 = merge_types (t1, t2);
735         t3 = build_method_type_directly (basetype, TREE_TYPE (t3),
736                                          TYPE_ARG_TYPES (t3));
737         t1 = build_exception_variant (t3, raises);
738         break;
739       }
740
741     case TYPENAME_TYPE:
742       /* There is no need to merge attributes into a TYPENAME_TYPE.
743          When the type is instantiated it will have whatever
744          attributes result from the instantiation.  */
745       return t1;
746
747     default:;
748     }
749
750   if (attribute_list_equal (TYPE_ATTRIBUTES (t1), attributes))
751     return t1;
752   else if (attribute_list_equal (TYPE_ATTRIBUTES (t2), attributes))
753     return t2;
754   else
755     return cp_build_type_attribute_variant (t1, attributes);
756 }
757
758 /* Return the common type of two types.
759    We assume that comptypes has already been done and returned 1;
760    if that isn't so, this may crash.
761
762    This is the type for the result of most arithmetic operations
763    if the operands have the given two types.  */
764
765 tree
766 common_type (tree t1, tree t2)
767 {
768   enum tree_code code1;
769   enum tree_code code2;
770
771   /* If one type is nonsense, bail.  */
772   if (t1 == error_mark_node || t2 == error_mark_node)
773     return error_mark_node;
774
775   code1 = TREE_CODE (t1);
776   code2 = TREE_CODE (t2);
777
778   if ((ARITHMETIC_TYPE_P (t1) || code1 == ENUMERAL_TYPE
779        || code1 == VECTOR_TYPE)
780       && (ARITHMETIC_TYPE_P (t2) || code2 == ENUMERAL_TYPE
781           || code2 == VECTOR_TYPE))
782     return type_after_usual_arithmetic_conversions (t1, t2);
783
784   else if ((TYPE_PTR_P (t1) && TYPE_PTR_P (t2))
785            || (TYPE_PTRMEM_P (t1) && TYPE_PTRMEM_P (t2))
786            || (TYPE_PTRMEMFUNC_P (t1) && TYPE_PTRMEMFUNC_P (t2)))
787     return composite_pointer_type (t1, t2, error_mark_node, error_mark_node,
788                                    "conversion");
789   else
790     gcc_unreachable ();
791 }
792 \f
793 /* Compare two exception specifier types for exactness or subsetness, if
794    allowed. Returns false for mismatch, true for match (same, or
795    derived and !exact).
796
797    [except.spec] "If a class X ... objects of class X or any class publicly
798    and unambiguously derived from X. Similarly, if a pointer type Y * ...
799    exceptions of type Y * or that are pointers to any type publicly and
800    unambiguously derived from Y. Otherwise a function only allows exceptions
801    that have the same type ..."
802    This does not mention cv qualifiers and is different to what throw
803    [except.throw] and catch [except.catch] will do. They will ignore the
804    top level cv qualifiers, and allow qualifiers in the pointer to class
805    example.
806
807    We implement the letter of the standard.  */
808
809 static bool
810 comp_except_types (tree a, tree b, bool exact)
811 {
812   if (same_type_p (a, b))
813     return true;
814   else if (!exact)
815     {
816       if (cp_type_quals (a) || cp_type_quals (b))
817         return false;
818
819       if (TREE_CODE (a) == POINTER_TYPE
820           && TREE_CODE (b) == POINTER_TYPE)
821         {
822           a = TREE_TYPE (a);
823           b = TREE_TYPE (b);
824           if (cp_type_quals (a) || cp_type_quals (b))
825             return false;
826         }
827
828       if (TREE_CODE (a) != RECORD_TYPE
829           || TREE_CODE (b) != RECORD_TYPE)
830         return false;
831
832       if (PUBLICLY_UNIQUELY_DERIVED_P (a, b))
833         return true;
834     }
835   return false;
836 }
837
838 /* Return true if TYPE1 and TYPE2 are equivalent exception specifiers.
839    If EXACT is false, T2 can be stricter than T1 (according to 15.4/7),
840    otherwise it must be exact. Exception lists are unordered, but
841    we've already filtered out duplicates. Most lists will be in order,
842    we should try to make use of that.  */
843
844 bool
845 comp_except_specs (tree t1, tree t2, bool exact)
846 {
847   tree probe;
848   tree base;
849   int  length = 0;
850
851   if (t1 == t2)
852     return true;
853
854   if (t1 == NULL_TREE)                     /* T1 is ...  */
855     return t2 == NULL_TREE || !exact;
856   if (!TREE_VALUE (t1))                    /* t1 is EMPTY */
857     return t2 != NULL_TREE && !TREE_VALUE (t2);
858   if (t2 == NULL_TREE)                     /* T2 is ...  */
859     return false;
860   if (TREE_VALUE (t1) && !TREE_VALUE (t2)) /* T2 is EMPTY, T1 is not */
861     return !exact;
862
863   /* Neither set is ... or EMPTY, make sure each part of T2 is in T1.
864      Count how many we find, to determine exactness. For exact matching and
865      ordered T1, T2, this is an O(n) operation, otherwise its worst case is
866      O(nm).  */
867   for (base = t1; t2 != NULL_TREE; t2 = TREE_CHAIN (t2))
868     {
869       for (probe = base; probe != NULL_TREE; probe = TREE_CHAIN (probe))
870         {
871           tree a = TREE_VALUE (probe);
872           tree b = TREE_VALUE (t2);
873
874           if (comp_except_types (a, b, exact))
875             {
876               if (probe == base && exact)
877                 base = TREE_CHAIN (probe);
878               length++;
879               break;
880             }
881         }
882       if (probe == NULL_TREE)
883         return false;
884     }
885   return !exact || base == NULL_TREE || length == list_length (t1);
886 }
887
888 /* Compare the array types T1 and T2.  ALLOW_REDECLARATION is true if
889    [] can match [size].  */
890
891 static bool
892 comp_array_types (tree t1, tree t2, bool allow_redeclaration)
893 {
894   tree d1;
895   tree d2;
896   tree max1, max2;
897
898   if (t1 == t2)
899     return true;
900
901   /* The type of the array elements must be the same.  */
902   if (!same_type_p (TREE_TYPE (t1), TREE_TYPE (t2)))
903     return false;
904
905   d1 = TYPE_DOMAIN (t1);
906   d2 = TYPE_DOMAIN (t2);
907
908   if (d1 == d2)
909     return true;
910
911   /* If one of the arrays is dimensionless, and the other has a
912      dimension, they are of different types.  However, it is valid to
913      write:
914
915        extern int a[];
916        int a[3];
917
918      by [basic.link]:
919
920        declarations for an array object can specify
921        array types that differ by the presence or absence of a major
922        array bound (_dcl.array_).  */
923   if (!d1 || !d2)
924     return allow_redeclaration;
925
926   /* Check that the dimensions are the same.  */
927
928   if (!cp_tree_equal (TYPE_MIN_VALUE (d1), TYPE_MIN_VALUE (d2)))
929     return false;
930   max1 = TYPE_MAX_VALUE (d1);
931   max2 = TYPE_MAX_VALUE (d2);
932   if (processing_template_decl && !abi_version_at_least (2)
933       && !value_dependent_expression_p (max1)
934       && !value_dependent_expression_p (max2))
935     {
936       /* With abi-1 we do not fold non-dependent array bounds, (and
937          consequently mangle them incorrectly).  We must therefore
938          fold them here, to verify the domains have the same
939          value.  */
940       max1 = fold (max1);
941       max2 = fold (max2);
942     }
943
944   if (!cp_tree_equal (max1, max2))
945     return false;
946
947   return true;
948 }
949
950 /* Return true if T1 and T2 are related as allowed by STRICT.  STRICT
951    is a bitwise-or of the COMPARE_* flags.  */
952
953 bool
954 comptypes (tree t1, tree t2, int strict)
955 {
956   if (t1 == t2)
957     return true;
958
959   /* Suppress errors caused by previously reported errors.  */
960   if (t1 == error_mark_node || t2 == error_mark_node)
961     return false;
962
963   gcc_assert (TYPE_P (t1) && TYPE_P (t2));
964
965   /* TYPENAME_TYPEs should be resolved if the qualifying scope is the
966      current instantiation.  */
967   if (TREE_CODE (t1) == TYPENAME_TYPE)
968     {
969       tree resolved = resolve_typename_type (t1, /*only_current_p=*/true);
970
971       if (resolved != error_mark_node)
972         t1 = resolved;
973     }
974
975   if (TREE_CODE (t2) == TYPENAME_TYPE)
976     {
977       tree resolved = resolve_typename_type (t2, /*only_current_p=*/true);
978
979       if (resolved != error_mark_node)
980         t2 = resolved;
981     }
982
983   /* If either type is the internal version of sizetype, use the
984      language version.  */
985   if (TREE_CODE (t1) == INTEGER_TYPE && TYPE_IS_SIZETYPE (t1)
986       && TYPE_ORIG_SIZE_TYPE (t1))
987     t1 = TYPE_ORIG_SIZE_TYPE (t1);
988
989   if (TREE_CODE (t2) == INTEGER_TYPE && TYPE_IS_SIZETYPE (t2)
990       && TYPE_ORIG_SIZE_TYPE (t2))
991     t2 = TYPE_ORIG_SIZE_TYPE (t2);
992
993   if (TYPE_PTRMEMFUNC_P (t1))
994     t1 = TYPE_PTRMEMFUNC_FN_TYPE (t1);
995   if (TYPE_PTRMEMFUNC_P (t2))
996     t2 = TYPE_PTRMEMFUNC_FN_TYPE (t2);
997
998   /* Different classes of types can't be compatible.  */
999   if (TREE_CODE (t1) != TREE_CODE (t2))
1000     return false;
1001
1002   /* Qualifiers must match.  For array types, we will check when we
1003      recur on the array element types.  */
1004   if (TREE_CODE (t1) != ARRAY_TYPE
1005       && TYPE_QUALS (t1) != TYPE_QUALS (t2))
1006     return false;
1007   if (TYPE_FOR_JAVA (t1) != TYPE_FOR_JAVA (t2))
1008     return false;
1009
1010   /* Allow for two different type nodes which have essentially the same
1011      definition.  Note that we already checked for equality of the type
1012      qualifiers (just above).  */
1013
1014   if (TREE_CODE (t1) != ARRAY_TYPE
1015       && TYPE_MAIN_VARIANT (t1) == TYPE_MAIN_VARIANT (t2))
1016     return true;
1017
1018   /* Compare the types.  Break out if they could be the same.  */
1019   switch (TREE_CODE (t1))
1020     {
1021     case TEMPLATE_TEMPLATE_PARM:
1022     case BOUND_TEMPLATE_TEMPLATE_PARM:
1023       if (TEMPLATE_TYPE_IDX (t1) != TEMPLATE_TYPE_IDX (t2)
1024           || TEMPLATE_TYPE_LEVEL (t1) != TEMPLATE_TYPE_LEVEL (t2))
1025         return false;
1026       if (!comp_template_parms
1027           (DECL_TEMPLATE_PARMS (TEMPLATE_TEMPLATE_PARM_TEMPLATE_DECL (t1)),
1028            DECL_TEMPLATE_PARMS (TEMPLATE_TEMPLATE_PARM_TEMPLATE_DECL (t2))))
1029         return false;
1030       if (TREE_CODE (t1) == TEMPLATE_TEMPLATE_PARM)
1031         break;
1032       /* Don't check inheritance.  */
1033       strict = COMPARE_STRICT;
1034       /* Fall through.  */
1035
1036     case RECORD_TYPE:
1037     case UNION_TYPE:
1038       if (TYPE_TEMPLATE_INFO (t1) && TYPE_TEMPLATE_INFO (t2)
1039           && (TYPE_TI_TEMPLATE (t1) == TYPE_TI_TEMPLATE (t2)
1040               || TREE_CODE (t1) == BOUND_TEMPLATE_TEMPLATE_PARM)
1041           && comp_template_args (TYPE_TI_ARGS (t1), TYPE_TI_ARGS (t2)))
1042         break;
1043
1044       if ((strict & COMPARE_BASE) && DERIVED_FROM_P (t1, t2))
1045         break;
1046       else if ((strict & COMPARE_DERIVED) && DERIVED_FROM_P (t2, t1))
1047         break;
1048
1049       return false;
1050
1051     case OFFSET_TYPE:
1052       if (!comptypes (TYPE_OFFSET_BASETYPE (t1), TYPE_OFFSET_BASETYPE (t2),
1053                       strict & ~COMPARE_REDECLARATION))
1054         return false;
1055       if (!same_type_p (TREE_TYPE (t1), TREE_TYPE (t2)))
1056         return false;
1057       break;
1058
1059       /* APPLE LOCAL begin blocks 6040305 */
1060       case BLOCK_POINTER_TYPE:
1061          if (TREE_CODE (t2) == BLOCK_POINTER_TYPE)
1062          {
1063            tree pt1 = TREE_TYPE (t1);
1064            tree pt2 = TREE_TYPE (t2);
1065            if (!same_type_ignoring_top_level_qualifiers_p (TREE_TYPE (pt1),
1066                                                           TREE_TYPE (pt2)))
1067              return false;
1068            if (!compparms (TYPE_ARG_TYPES (pt1), TYPE_ARG_TYPES (pt2)))
1069              return false;
1070            break;
1071          }
1072          /* APPLE LOCAL end blocks 6040305 */
1073
1074     case POINTER_TYPE:
1075     case REFERENCE_TYPE:
1076       if (TYPE_MODE (t1) != TYPE_MODE (t2)
1077           || TYPE_REF_CAN_ALIAS_ALL (t1) != TYPE_REF_CAN_ALIAS_ALL (t2)
1078           || !same_type_p (TREE_TYPE (t1), TREE_TYPE (t2)))
1079         return false;
1080       break;
1081
1082     case METHOD_TYPE:
1083     case FUNCTION_TYPE:
1084       if (!same_type_p (TREE_TYPE (t1), TREE_TYPE (t2)))
1085         return false;
1086       if (!compparms (TYPE_ARG_TYPES (t1), TYPE_ARG_TYPES (t2)))
1087         return false;
1088       break;
1089
1090     case ARRAY_TYPE:
1091       /* Target types must match incl. qualifiers.  */
1092       if (!comp_array_types (t1, t2, !!(strict & COMPARE_REDECLARATION)))
1093         return false;
1094       break;
1095
1096     case TEMPLATE_TYPE_PARM:
1097       if (TEMPLATE_TYPE_IDX (t1) != TEMPLATE_TYPE_IDX (t2)
1098           || TEMPLATE_TYPE_LEVEL (t1) != TEMPLATE_TYPE_LEVEL (t2))
1099         return false;
1100       break;
1101
1102     case TYPENAME_TYPE:
1103       if (!cp_tree_equal (TYPENAME_TYPE_FULLNAME (t1),
1104                           TYPENAME_TYPE_FULLNAME (t2)))
1105         return false;
1106       if (!same_type_p (TYPE_CONTEXT (t1), TYPE_CONTEXT (t2)))
1107         return false;
1108       break;
1109
1110     case UNBOUND_CLASS_TEMPLATE:
1111       if (!cp_tree_equal (TYPE_IDENTIFIER (t1), TYPE_IDENTIFIER (t2)))
1112         return false;
1113       if (!same_type_p (TYPE_CONTEXT (t1), TYPE_CONTEXT (t2)))
1114         return false;
1115       break;
1116
1117     case COMPLEX_TYPE:
1118       if (!same_type_p (TREE_TYPE (t1), TREE_TYPE (t2)))
1119         return false;
1120       break;
1121
1122     case VECTOR_TYPE:
1123       if (TYPE_VECTOR_SUBPARTS (t1) != TYPE_VECTOR_SUBPARTS (t2)
1124           || !same_type_p (TREE_TYPE (t1), TREE_TYPE (t2)))
1125         return false;
1126       break;
1127
1128     default:
1129       return false;
1130     }
1131
1132   /* If we get here, we know that from a target independent POV the
1133      types are the same.  Make sure the target attributes are also
1134      the same.  */
1135   return targetm.comp_type_attributes (t1, t2);
1136 }
1137
1138 /* Returns 1 if TYPE1 is at least as qualified as TYPE2.  */
1139
1140 bool
1141 at_least_as_qualified_p (tree type1, tree type2)
1142 {
1143   int q1 = cp_type_quals (type1);
1144   int q2 = cp_type_quals (type2);
1145
1146   /* All qualifiers for TYPE2 must also appear in TYPE1.  */
1147   return (q1 & q2) == q2;
1148 }
1149
1150 /* Returns 1 if TYPE1 is more cv-qualified than TYPE2, -1 if TYPE2 is
1151    more cv-qualified that TYPE1, and 0 otherwise.  */
1152
1153 int
1154 comp_cv_qualification (tree type1, tree type2)
1155 {
1156   int q1 = cp_type_quals (type1);
1157   int q2 = cp_type_quals (type2);
1158
1159   if (q1 == q2)
1160     return 0;
1161
1162   if ((q1 & q2) == q2)
1163     return 1;
1164   else if ((q1 & q2) == q1)
1165     return -1;
1166
1167   return 0;
1168 }
1169
1170 /* Returns 1 if the cv-qualification signature of TYPE1 is a proper
1171    subset of the cv-qualification signature of TYPE2, and the types
1172    are similar.  Returns -1 if the other way 'round, and 0 otherwise.  */
1173
1174 int
1175 comp_cv_qual_signature (tree type1, tree type2)
1176 {
1177   if (comp_ptr_ttypes_real (type2, type1, -1))
1178     return 1;
1179   else if (comp_ptr_ttypes_real (type1, type2, -1))
1180     return -1;
1181   else
1182     return 0;
1183 }
1184
1185 /* If two types share a common base type, return that basetype.
1186    If there is not a unique most-derived base type, this function
1187    returns ERROR_MARK_NODE.  */
1188
1189 static tree
1190 common_base_type (tree tt1, tree tt2)
1191 {
1192   tree best = NULL_TREE;
1193   int i;
1194
1195   /* If one is a baseclass of another, that's good enough.  */
1196   if (UNIQUELY_DERIVED_FROM_P (tt1, tt2))
1197     return tt1;
1198   if (UNIQUELY_DERIVED_FROM_P (tt2, tt1))
1199     return tt2;
1200
1201   /* Otherwise, try to find a unique baseclass of TT1
1202      that is shared by TT2, and follow that down.  */
1203   for (i = BINFO_N_BASE_BINFOS (TYPE_BINFO (tt1))-1; i >= 0; i--)
1204     {
1205       tree basetype = BINFO_TYPE (BINFO_BASE_BINFO (TYPE_BINFO (tt1), i));
1206       tree trial = common_base_type (basetype, tt2);
1207
1208       if (trial)
1209         {
1210           if (trial == error_mark_node)
1211             return trial;
1212           if (best == NULL_TREE)
1213             best = trial;
1214           else if (best != trial)
1215             return error_mark_node;
1216         }
1217     }
1218
1219   /* Same for TT2.  */
1220   for (i = BINFO_N_BASE_BINFOS (TYPE_BINFO (tt2))-1; i >= 0; i--)
1221     {
1222       tree basetype = BINFO_TYPE (BINFO_BASE_BINFO (TYPE_BINFO (tt2), i));
1223       tree trial = common_base_type (tt1, basetype);
1224
1225       if (trial)
1226         {
1227           if (trial == error_mark_node)
1228             return trial;
1229           if (best == NULL_TREE)
1230             best = trial;
1231           else if (best != trial)
1232             return error_mark_node;
1233         }
1234     }
1235   return best;
1236 }
1237 \f
1238 /* Subroutines of `comptypes'.  */
1239
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.  */
1244
1245 bool
1246 compparms (tree parms1, tree parms2)
1247 {
1248   tree t1, t2;
1249
1250   /* An unspecified parmlist matches any specified parmlist
1251      whose argument types don't need default promotions.  */
1252
1253   for (t1 = parms1, t2 = parms2;
1254        t1 || t2;
1255        t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2))
1256     {
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;
1263     }
1264   return true;
1265 }
1266
1267 \f
1268 /* Process a sizeof or alignof expression where the operand is a
1269    type.  */
1270
1271 tree
1272 cxx_sizeof_or_alignof_type (tree type, enum tree_code op, bool complain)
1273 {
1274   tree value;
1275   bool dependent_p;
1276
1277   gcc_assert (op == SIZEOF_EXPR || op == ALIGNOF_EXPR);
1278   if (type == error_mark_node)
1279     return error_mark_node;
1280
1281   type = non_reference (type);
1282   if (TREE_CODE (type) == METHOD_TYPE)
1283     {
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;
1288     }
1289
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))
1303     {
1304       value = build_min (op, size_type_node, type);
1305       TREE_READONLY (value) = 1;
1306       return value;
1307     }
1308
1309   return c_sizeof_or_alignof_type (complete_type (type),
1310                                    op == SIZEOF_EXPR,
1311                                    complain);
1312 }
1313
1314 /* Process a sizeof expression where the operand is an expression.  */
1315
1316 static tree
1317 cxx_sizeof_expr (tree e)
1318 {
1319   if (e == error_mark_node)
1320     return error_mark_node;
1321
1322   if (processing_template_decl)
1323     {
1324       e = build_min (SIZEOF_EXPR, size_type_node, e);
1325       TREE_SIDE_EFFECTS (e) = 0;
1326       TREE_READONLY (e) = 1;
1327
1328       return e;
1329     }
1330
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)))
1334     {
1335       error ("invalid application of %<sizeof%> to a bit-field");
1336       e = char_type_node;
1337     }
1338   else if (is_overloaded_fn (e))
1339     {
1340       pedwarn ("ISO C++ forbids applying %<sizeof%> to an expression of "
1341                "function type");
1342       e = char_type_node;
1343     }
1344   else if (type_unknown_p (e))
1345     {
1346       cxx_incomplete_type_error (e, TREE_TYPE (e));
1347       e = char_type_node;
1348     }
1349   else
1350     e = TREE_TYPE (e);
1351
1352   return cxx_sizeof_or_alignof_type (e, SIZEOF_EXPR, true);
1353 }
1354
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).  */
1359
1360 static tree
1361 cxx_alignof_expr (tree e)
1362 {
1363   tree t;
1364
1365   if (e == error_mark_node)
1366     return error_mark_node;
1367
1368   if (processing_template_decl)
1369     {
1370       e = build_min (ALIGNOF_EXPR, size_type_node, e);
1371       TREE_SIDE_EFFECTS (e) = 0;
1372       TREE_READONLY (e) = 1;
1373
1374       return e;
1375     }
1376
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)))
1382     {
1383       error ("invalid application of %<__alignof%> to a bit-field");
1384       t = size_one_node;
1385     }
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))
1390     {
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;
1397     }
1398   else if (type_unknown_p (e))
1399     {
1400       cxx_incomplete_type_error (e, TREE_TYPE (e));
1401       t = size_one_node;
1402     }
1403   else
1404     return cxx_sizeof_or_alignof_type (TREE_TYPE (e), ALIGNOF_EXPR, true);
1405
1406   return fold_convert (size_type_node, t);
1407 }
1408
1409 /* Process a sizeof or alignof expression E with code OP where the operand
1410    is an expression.  */
1411
1412 tree
1413 cxx_sizeof_or_alignof_expr (tree e, enum tree_code op)
1414 {
1415   if (op == SIZEOF_EXPR)
1416     return cxx_sizeof_expr (e);
1417   else
1418     return cxx_alignof_expr (e);
1419 }
1420 \f
1421 /* EXPR is being used in a context that is not a function call.
1422    Enforce:
1423
1424      [expr.ref]
1425
1426      The expression can be used only as the left-hand operand of a
1427      member function call.
1428
1429      [expr.mptr.operator]
1430
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 ().
1433
1434    by issuing an error message if appropriate.  Returns true iff EXPR
1435    violates these rules.  */
1436
1437 bool
1438 invalid_nonstatic_memfn_p (tree expr)
1439 {
1440   if (TREE_CODE (TREE_TYPE (expr)) == METHOD_TYPE)
1441     {
1442       error ("invalid use of non-static member function");
1443       return true;
1444     }
1445   return false;
1446 }
1447
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.  */
1451
1452 tree
1453 is_bitfield_expr_with_lowered_type (tree exp)
1454 {
1455   switch (TREE_CODE (exp))
1456     {
1457     case COND_EXPR:
1458       if (!is_bitfield_expr_with_lowered_type (TREE_OPERAND (exp, 1)))
1459         return NULL_TREE;
1460       return is_bitfield_expr_with_lowered_type (TREE_OPERAND (exp, 2));
1461
1462     case COMPOUND_EXPR:
1463       return is_bitfield_expr_with_lowered_type (TREE_OPERAND (exp, 1));
1464
1465     case MODIFY_EXPR:
1466     case SAVE_EXPR:
1467       return is_bitfield_expr_with_lowered_type (TREE_OPERAND (exp, 0));
1468
1469     case COMPONENT_REF:
1470       {
1471         tree field;
1472         
1473         field = TREE_OPERAND (exp, 1);
1474         if (TREE_CODE (field) != FIELD_DECL || !DECL_C_BIT_FIELD (field))
1475           return NULL_TREE;
1476         if (same_type_ignoring_top_level_qualifiers_p
1477             (TREE_TYPE (exp), DECL_BIT_FIELD_TYPE (field)))
1478           return NULL_TREE;
1479         return DECL_BIT_FIELD_TYPE (field);
1480       }
1481
1482     default:
1483       return NULL_TREE;
1484     }
1485 }
1486
1487 /* Like is_bitfield_with_lowered_type, except that if EXP is not a
1488    bitfield with a lowered type, the type of EXP is returned, rather
1489    than NULL_TREE.  */
1490
1491 tree
1492 unlowered_expr_type (tree exp)
1493 {
1494   tree type;
1495
1496   type = is_bitfield_expr_with_lowered_type (exp);
1497   if (!type)
1498     type = TREE_TYPE (exp);
1499
1500   return type;
1501 }
1502
1503 /* Perform the conversions in [expr] that apply when an lvalue appears
1504    in an rvalue context: the lvalue-to-rvalue, array-to-pointer, and
1505    function-to-pointer conversions.  In addition, manifest constants
1506    are replaced by their values, and bitfield references are converted
1507    to their declared types.
1508
1509    Although the returned value is being used as an rvalue, this
1510    function does not wrap the returned expression in a
1511    NON_LVALUE_EXPR; the caller is expected to be mindful of the fact
1512    that the return value is no longer an lvalue.  */
1513
1514 tree
1515 decay_conversion (tree exp)
1516 {
1517   tree type;
1518   enum tree_code code;
1519
1520   type = TREE_TYPE (exp);
1521   if (type == error_mark_node)
1522     return error_mark_node;
1523
1524   if (type_unknown_p (exp))
1525     {
1526       cxx_incomplete_type_error (exp, TREE_TYPE (exp));
1527       return error_mark_node;
1528     }
1529
1530   exp = decl_constant_value (exp);
1531   if (error_operand_p (exp))
1532     return error_mark_node;
1533
1534   /* build_c_cast puts on a NOP_EXPR to make the result not an lvalue.
1535      Leave such NOP_EXPRs, since RHS is being used in non-lvalue context.  */
1536   code = TREE_CODE (type);
1537   if (code == VOID_TYPE)
1538     {
1539       error ("void value not ignored as it ought to be");
1540       return error_mark_node;
1541     }
1542   if (invalid_nonstatic_memfn_p (exp))
1543     return error_mark_node;
1544   if (code == FUNCTION_TYPE || is_overloaded_fn (exp))
1545     return build_unary_op (ADDR_EXPR, exp, 0);
1546   if (code == ARRAY_TYPE)
1547     {
1548       tree adr;
1549       tree ptrtype;
1550
1551       if (TREE_CODE (exp) == INDIRECT_REF)
1552         return build_nop (build_pointer_type (TREE_TYPE (type)),
1553                           TREE_OPERAND (exp, 0));
1554
1555       if (TREE_CODE (exp) == COMPOUND_EXPR)
1556         {
1557           tree op1 = decay_conversion (TREE_OPERAND (exp, 1));
1558           return build2 (COMPOUND_EXPR, TREE_TYPE (op1),
1559                          TREE_OPERAND (exp, 0), op1);
1560         }
1561
1562       if (!lvalue_p (exp)
1563           && ! (TREE_CODE (exp) == CONSTRUCTOR && TREE_STATIC (exp)))
1564         {
1565           error ("invalid use of non-lvalue array");
1566           return error_mark_node;
1567         }
1568
1569       ptrtype = build_pointer_type (TREE_TYPE (type));
1570
1571       if (TREE_CODE (exp) == VAR_DECL)
1572         {
1573           if (!cxx_mark_addressable (exp))
1574             return error_mark_node;
1575           adr = build_nop (ptrtype, build_address (exp));
1576           return adr;
1577         }
1578       /* This way is better for a COMPONENT_REF since it can
1579          simplify the offset for a component.  */
1580       adr = build_unary_op (ADDR_EXPR, exp, 1);
1581       return cp_convert (ptrtype, adr);
1582     }
1583
1584   /* If a bitfield is used in a context where integral promotion
1585      applies, then the caller is expected to have used
1586      default_conversion.  That function promotes bitfields correctly
1587      before calling this function.  At this point, if we have a
1588      bitfield referenced, we may assume that is not subject to
1589      promotion, and that, therefore, the type of the resulting rvalue
1590      is the declared type of the bitfield.  */
1591   exp = convert_bitfield_to_declared_type (exp);
1592
1593   /* We do not call rvalue() here because we do not want to wrap EXP
1594      in a NON_LVALUE_EXPR.  */
1595
1596   /* [basic.lval]
1597
1598      Non-class rvalues always have cv-unqualified types.  */
1599   type = TREE_TYPE (exp);
1600   if (!CLASS_TYPE_P (type) && cp_type_quals (type))
1601     exp = build_nop (TYPE_MAIN_VARIANT (type), exp);
1602
1603   return exp;
1604 }
1605
1606 /* Perform prepatory conversions, as part of the "usual arithmetic
1607    conversions".  In particular, as per [expr]:
1608
1609      Whenever an lvalue expression appears as an operand of an
1610      operator that expects the rvalue for that operand, the
1611      lvalue-to-rvalue, array-to-pointer, or function-to-pointer
1612      standard conversions are applied to convert the expression to an
1613      rvalue.
1614
1615    In addition, we perform integral promotions here, as those are
1616    applied to both operands to a binary operator before determining
1617    what additional conversions should apply.  */
1618
1619 tree
1620 default_conversion (tree exp)
1621 {
1622   /* Perform the integral promotions first so that bitfield
1623      expressions (which may promote to "int", even if the bitfield is
1624      declared "unsigned") are promoted correctly.  */
1625   if (INTEGRAL_OR_ENUMERATION_TYPE_P (TREE_TYPE (exp)))
1626     exp = perform_integral_promotions (exp);
1627   /* Perform the other conversions.  */
1628   exp = decay_conversion (exp);
1629
1630   return exp;
1631 }
1632
1633 /* EXPR is an expression with an integral or enumeration type.
1634    Perform the integral promotions in [conv.prom], and return the
1635    converted value.  */
1636
1637 tree
1638 perform_integral_promotions (tree expr)
1639 {
1640   tree type;
1641   tree promoted_type;
1642
1643   /* [conv.prom]
1644
1645      If the bitfield has an enumerated type, it is treated as any
1646      other value of that type for promotion purposes.  */
1647   type = is_bitfield_expr_with_lowered_type (expr);
1648   if (!type || TREE_CODE (type) != ENUMERAL_TYPE)
1649     type = TREE_TYPE (expr);
1650   gcc_assert (INTEGRAL_OR_ENUMERATION_TYPE_P (type));
1651   promoted_type = type_promotes_to (type);
1652   if (type != promoted_type)
1653     expr = cp_convert (promoted_type, expr);
1654   return expr;
1655 }
1656
1657 /* Take the address of an inline function without setting TREE_ADDRESSABLE
1658    or TREE_USED.  */
1659
1660 tree
1661 inline_conversion (tree exp)
1662 {
1663   if (TREE_CODE (exp) == FUNCTION_DECL)
1664     exp = build1 (ADDR_EXPR, build_pointer_type (TREE_TYPE (exp)), exp);
1665
1666   return exp;
1667 }
1668
1669 /* Returns nonzero iff exp is a STRING_CST or the result of applying
1670    decay_conversion to one.  */
1671
1672 int
1673 string_conv_p (tree totype, tree exp, int warn)
1674 {
1675   tree t;
1676
1677   if (TREE_CODE (totype) != POINTER_TYPE)
1678     return 0;
1679
1680   t = TREE_TYPE (totype);
1681   if (!same_type_p (t, char_type_node)
1682       && !same_type_p (t, wchar_type_node))
1683     return 0;
1684
1685   if (TREE_CODE (exp) == STRING_CST)
1686     {
1687       /* Make sure that we don't try to convert between char and wchar_t.  */
1688       if (!same_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (exp))), t))
1689         return 0;
1690     }
1691   else
1692     {
1693       /* Is this a string constant which has decayed to 'const char *'?  */
1694       t = build_pointer_type (build_qualified_type (t, TYPE_QUAL_CONST));
1695       if (!same_type_p (TREE_TYPE (exp), t))
1696         return 0;
1697       STRIP_NOPS (exp);
1698       if (TREE_CODE (exp) != ADDR_EXPR
1699           || TREE_CODE (TREE_OPERAND (exp, 0)) != STRING_CST)
1700         return 0;
1701     }
1702
1703   /* This warning is not very useful, as it complains about printf.  */
1704   if (warn)
1705     warning (OPT_Wwrite_strings,
1706              "deprecated conversion from string constant to %qT",
1707              totype);
1708
1709   return 1;
1710 }
1711
1712 /* Given a COND_EXPR, MIN_EXPR, or MAX_EXPR in T, return it in a form that we
1713    can, for example, use as an lvalue.  This code used to be in
1714    unary_complex_lvalue, but we needed it to deal with `a = (d == c) ? b : c'
1715    expressions, where we're dealing with aggregates.  But now it's again only
1716    called from unary_complex_lvalue.  The case (in particular) that led to
1717    this was with CODE == ADDR_EXPR, since it's not an lvalue when we'd
1718    get it there.  */
1719
1720 static tree
1721 rationalize_conditional_expr (enum tree_code code, tree t)
1722 {
1723   /* For MIN_EXPR or MAX_EXPR, fold-const.c has arranged things so that
1724      the first operand is always the one to be used if both operands
1725      are equal, so we know what conditional expression this used to be.  */
1726   if (TREE_CODE (t) == MIN_EXPR || TREE_CODE (t) == MAX_EXPR)
1727     {
1728       tree op0 = TREE_OPERAND (t, 0);
1729       tree op1 = TREE_OPERAND (t, 1);
1730
1731       /* The following code is incorrect if either operand side-effects.  */
1732       gcc_assert (!TREE_SIDE_EFFECTS (op0)
1733                   && !TREE_SIDE_EFFECTS (op1));
1734       return
1735         build_conditional_expr (build_x_binary_op ((TREE_CODE (t) == MIN_EXPR
1736                                                     ? LE_EXPR : GE_EXPR),
1737                                                    op0, TREE_CODE (op0),
1738                                                    op1, TREE_CODE (op1),
1739                                                    /*overloaded_p=*/NULL),
1740                             build_unary_op (code, op0, 0),
1741                             build_unary_op (code, op1, 0));
1742     }
1743
1744   return
1745     build_conditional_expr (TREE_OPERAND (t, 0),
1746                             build_unary_op (code, TREE_OPERAND (t, 1), 0),
1747                             build_unary_op (code, TREE_OPERAND (t, 2), 0));
1748 }
1749
1750 /* Given the TYPE of an anonymous union field inside T, return the
1751    FIELD_DECL for the field.  If not found return NULL_TREE.  Because
1752    anonymous unions can nest, we must also search all anonymous unions
1753    that are directly reachable.  */
1754
1755 tree
1756 lookup_anon_field (tree t, tree type)
1757 {
1758   tree field;
1759
1760   for (field = TYPE_FIELDS (t); field; field = TREE_CHAIN (field))
1761     {
1762       if (TREE_STATIC (field))
1763         continue;
1764       if (TREE_CODE (field) != FIELD_DECL || DECL_ARTIFICIAL (field))
1765         continue;
1766
1767       /* If we find it directly, return the field.  */
1768       if (DECL_NAME (field) == NULL_TREE
1769           && type == TYPE_MAIN_VARIANT (TREE_TYPE (field)))
1770         {
1771           return field;
1772         }
1773
1774       /* Otherwise, it could be nested, search harder.  */
1775       if (DECL_NAME (field) == NULL_TREE
1776           && ANON_AGGR_TYPE_P (TREE_TYPE (field)))
1777         {
1778           tree subfield = lookup_anon_field (TREE_TYPE (field), type);
1779           if (subfield)
1780             return subfield;
1781         }
1782     }
1783   return NULL_TREE;
1784 }
1785
1786 /* Build an expression representing OBJECT.MEMBER.  OBJECT is an
1787    expression; MEMBER is a DECL or baselink.  If ACCESS_PATH is
1788    non-NULL, it indicates the path to the base used to name MEMBER.
1789    If PRESERVE_REFERENCE is true, the expression returned will have
1790    REFERENCE_TYPE if the MEMBER does.  Otherwise, the expression
1791    returned will have the type referred to by the reference.
1792
1793    This function does not perform access control; that is either done
1794    earlier by the parser when the name of MEMBER is resolved to MEMBER
1795    itself, or later when overload resolution selects one of the
1796    functions indicated by MEMBER.  */
1797
1798 tree
1799 build_class_member_access_expr (tree object, tree member,
1800                                 tree access_path, bool preserve_reference)
1801 {
1802   tree object_type;
1803   tree member_scope;
1804   tree result = NULL_TREE;
1805
1806   if (error_operand_p (object) || error_operand_p (member))
1807     return error_mark_node;
1808
1809   gcc_assert (DECL_P (member) || BASELINK_P (member));
1810
1811   /* [expr.ref]
1812
1813      The type of the first expression shall be "class object" (of a
1814      complete type).  */
1815   object_type = TREE_TYPE (object);
1816   if (!currently_open_class (object_type)
1817       && !complete_type_or_else (object_type, object))
1818     return error_mark_node;
1819   if (!CLASS_TYPE_P (object_type))
1820     {
1821       error ("request for member %qD in %qE, which is of non-class type %qT",
1822              member, object, object_type);
1823       return error_mark_node;
1824     }
1825
1826   /* The standard does not seem to actually say that MEMBER must be a
1827      member of OBJECT_TYPE.  However, that is clearly what is
1828      intended.  */
1829   if (DECL_P (member))
1830     {
1831       member_scope = DECL_CLASS_CONTEXT (member);
1832       mark_used (member);
1833       if (TREE_DEPRECATED (member))
1834         warn_deprecated_use (member);
1835     }
1836   else
1837     member_scope = BINFO_TYPE (BASELINK_BINFO (member));
1838   /* If MEMBER is from an anonymous aggregate, MEMBER_SCOPE will
1839      presently be the anonymous union.  Go outwards until we find a
1840      type related to OBJECT_TYPE.  */
1841   while (ANON_AGGR_TYPE_P (member_scope)
1842          && !same_type_ignoring_top_level_qualifiers_p (member_scope,
1843                                                         object_type))
1844     member_scope = TYPE_CONTEXT (member_scope);
1845   if (!member_scope || !DERIVED_FROM_P (member_scope, object_type))
1846     {
1847       if (TREE_CODE (member) == FIELD_DECL)
1848         error ("invalid use of nonstatic data member %qE", member);
1849       else
1850         error ("%qD is not a member of %qT", member, object_type);
1851       return error_mark_node;
1852     }
1853
1854   /* Transform `(a, b).x' into `(*(a, &b)).x', `(a ? b : c).x' into
1855      `(*(a ?  &b : &c)).x', and so on.  A COND_EXPR is only an lvalue
1856      in the frontend; only _DECLs and _REFs are lvalues in the backend.  */
1857   {
1858     tree temp = unary_complex_lvalue (ADDR_EXPR, object);
1859     if (temp)
1860       object = build_indirect_ref (temp, NULL);
1861   }
1862
1863   /* In [expr.ref], there is an explicit list of the valid choices for
1864      MEMBER.  We check for each of those cases here.  */
1865   if (TREE_CODE (member) == VAR_DECL)
1866     {
1867       /* A static data member.  */
1868       result = member;
1869       /* If OBJECT has side-effects, they are supposed to occur.  */
1870       if (TREE_SIDE_EFFECTS (object))
1871         result = build2 (COMPOUND_EXPR, TREE_TYPE (result), object, result);
1872     }
1873   else if (TREE_CODE (member) == FIELD_DECL)
1874     {
1875       /* A non-static data member.  */
1876       bool null_object_p;
1877       int type_quals;
1878       tree member_type;
1879
1880       null_object_p = (TREE_CODE (object) == INDIRECT_REF
1881                        && integer_zerop (TREE_OPERAND (object, 0)));
1882
1883       /* Convert OBJECT to the type of MEMBER.  */
1884       if (!same_type_p (TYPE_MAIN_VARIANT (object_type),
1885                         TYPE_MAIN_VARIANT (member_scope)))
1886         {
1887           tree binfo;
1888           base_kind kind;
1889
1890           binfo = lookup_base (access_path ? access_path : object_type,
1891                                member_scope, ba_unique,  &kind);
1892           if (binfo == error_mark_node)
1893             return error_mark_node;
1894
1895           /* It is invalid to try to get to a virtual base of a
1896              NULL object.  The most common cause is invalid use of
1897              offsetof macro.  */
1898           if (null_object_p && kind == bk_via_virtual)
1899             {
1900               error ("invalid access to non-static data member %qD of "
1901                      "NULL object",
1902                      member);
1903               error ("(perhaps the %<offsetof%> macro was used incorrectly)");
1904               return error_mark_node;
1905             }
1906
1907           /* Convert to the base.  */
1908           object = build_base_path (PLUS_EXPR, object, binfo,
1909                                     /*nonnull=*/1);
1910           /* If we found the base successfully then we should be able
1911              to convert to it successfully.  */
1912           gcc_assert (object != error_mark_node);
1913         }
1914
1915       /* Complain about other invalid uses of offsetof, even though they will
1916          give the right answer.  Note that we complain whether or not they
1917          actually used the offsetof macro, since there's no way to know at this
1918          point.  So we just give a warning, instead of a pedwarn.  */
1919       /* Do not produce this warning for base class field references, because
1920          we know for a fact that didn't come from offsetof.  This does occur
1921          in various testsuite cases where a null object is passed where a
1922          vtable access is required.  */
1923       if (null_object_p && warn_invalid_offsetof
1924           && CLASSTYPE_NON_POD_P (object_type)
1925           && !DECL_FIELD_IS_BASE (member)
1926           && !skip_evaluation)
1927         {
1928           warning (0, "invalid access to non-static data member %qD of NULL object",
1929                    member);
1930           warning (0, "(perhaps the %<offsetof%> macro was used incorrectly)");
1931         }
1932
1933       /* If MEMBER is from an anonymous aggregate, we have converted
1934          OBJECT so that it refers to the class containing the
1935          anonymous union.  Generate a reference to the anonymous union
1936          itself, and recur to find MEMBER.  */
1937       if (ANON_AGGR_TYPE_P (DECL_CONTEXT (member))
1938           /* When this code is called from build_field_call, the
1939              object already has the type of the anonymous union.
1940              That is because the COMPONENT_REF was already
1941              constructed, and was then disassembled before calling
1942              build_field_call.  After the function-call code is
1943              cleaned up, this waste can be eliminated.  */
1944           && (!same_type_ignoring_top_level_qualifiers_p
1945               (TREE_TYPE (object), DECL_CONTEXT (member))))
1946         {
1947           tree anonymous_union;
1948
1949           anonymous_union = lookup_anon_field (TREE_TYPE (object),
1950                                                DECL_CONTEXT (member));
1951           object = build_class_member_access_expr (object,
1952                                                    anonymous_union,
1953                                                    /*access_path=*/NULL_TREE,
1954                                                    preserve_reference);
1955         }
1956
1957       /* Compute the type of the field, as described in [expr.ref].  */
1958       type_quals = TYPE_UNQUALIFIED;
1959       member_type = TREE_TYPE (member);
1960       if (TREE_CODE (member_type) != REFERENCE_TYPE)
1961         {
1962           type_quals = (cp_type_quals (member_type)
1963                         | cp_type_quals (object_type));
1964
1965           /* A field is const (volatile) if the enclosing object, or the
1966              field itself, is const (volatile).  But, a mutable field is
1967              not const, even within a const object.  */
1968           if (DECL_MUTABLE_P (member))
1969             type_quals &= ~TYPE_QUAL_CONST;
1970           member_type = cp_build_qualified_type (member_type, type_quals);
1971         }
1972
1973       result = build3 (COMPONENT_REF, member_type, object, member,
1974                        NULL_TREE);
1975       result = fold_if_not_in_template (result);
1976
1977       /* Mark the expression const or volatile, as appropriate.  Even
1978          though we've dealt with the type above, we still have to mark the
1979          expression itself.  */
1980       if (type_quals & TYPE_QUAL_CONST)
1981         TREE_READONLY (result) = 1;
1982       if (type_quals & TYPE_QUAL_VOLATILE)
1983         TREE_THIS_VOLATILE (result) = 1;
1984     }
1985   else if (BASELINK_P (member))
1986     {
1987       /* The member is a (possibly overloaded) member function.  */
1988       tree functions;
1989       tree type;
1990
1991       /* If the MEMBER is exactly one static member function, then we
1992          know the type of the expression.  Otherwise, we must wait
1993          until overload resolution has been performed.  */
1994       functions = BASELINK_FUNCTIONS (member);
1995       if (TREE_CODE (functions) == FUNCTION_DECL
1996           && DECL_STATIC_FUNCTION_P (functions))
1997         type = TREE_TYPE (functions);
1998       else
1999         type = unknown_type_node;
2000       /* Note that we do not convert OBJECT to the BASELINK_BINFO
2001          base.  That will happen when the function is called.  */
2002       result = build3 (COMPONENT_REF, type, object, member, NULL_TREE);
2003     }
2004   else if (TREE_CODE (member) == CONST_DECL)
2005     {
2006       /* The member is an enumerator.  */
2007       result = member;
2008       /* If OBJECT has side-effects, they are supposed to occur.  */
2009       if (TREE_SIDE_EFFECTS (object))
2010         result = build2 (COMPOUND_EXPR, TREE_TYPE (result),
2011                          object, result);
2012     }
2013   else
2014     {
2015       error ("invalid use of %qD", member);
2016       return error_mark_node;
2017     }
2018
2019   if (!preserve_reference)
2020     /* [expr.ref]
2021
2022        If E2 is declared to have type "reference to T", then ... the
2023        type of E1.E2 is T.  */
2024     result = convert_from_reference (result);
2025
2026   return result;
2027 }
2028
2029 /* Return the destructor denoted by OBJECT.SCOPE::~DTOR_NAME, or, if
2030    SCOPE is NULL, by OBJECT.~DTOR_NAME.  */
2031
2032 static tree
2033 lookup_destructor (tree object, tree scope, tree dtor_name)
2034 {
2035   tree object_type = TREE_TYPE (object);
2036   tree dtor_type = TREE_OPERAND (dtor_name, 0);
2037   tree expr;
2038
2039   if (scope && !check_dtor_name (scope, dtor_type))
2040     {
2041       error ("qualified type %qT does not match destructor name ~%qT",
2042              scope, dtor_type);
2043       return error_mark_node;
2044     }
2045   if (!DERIVED_FROM_P (dtor_type, TYPE_MAIN_VARIANT (object_type)))
2046     {
2047       error ("the type being destroyed is %qT, but the destructor refers to %qT",
2048              TYPE_MAIN_VARIANT (object_type), dtor_type);
2049       return error_mark_node;
2050     }
2051   expr = lookup_member (dtor_type, complete_dtor_identifier,
2052                         /*protect=*/1, /*want_type=*/false);
2053   expr = (adjust_result_of_qualified_name_lookup
2054           (expr, dtor_type, object_type));
2055   return expr;
2056 }
2057
2058 /* An expression of the form "A::template B" has been resolved to
2059    DECL.  Issue a diagnostic if B is not a template or template
2060    specialization.  */
2061
2062 void
2063 check_template_keyword (tree decl)
2064 {
2065   /* The standard says:
2066
2067       [temp.names]
2068
2069       If a name prefixed by the keyword template is not a member
2070       template, the program is ill-formed.
2071
2072      DR 228 removed the restriction that the template be a member
2073      template.
2074
2075      DR 96, if accepted would add the further restriction that explicit
2076      template arguments must be provided if the template keyword is
2077      used, but, as of 2005-10-16, that DR is still in "drafting".  If
2078      this DR is accepted, then the semantic checks here can be
2079      simplified, as the entity named must in fact be a template
2080      specialization, rather than, as at present, a set of overloaded
2081      functions containing at least one template function.  */
2082   if (TREE_CODE (decl) != TEMPLATE_DECL
2083       && TREE_CODE (decl) != TEMPLATE_ID_EXPR)
2084     {
2085       if (!is_overloaded_fn (decl))
2086         pedwarn ("%qD is not a template", decl);
2087       else
2088         {
2089           tree fns;
2090           fns = decl;
2091           if (BASELINK_P (fns))
2092             fns = BASELINK_FUNCTIONS (fns);
2093           while (fns)
2094             {
2095               tree fn = OVL_CURRENT (fns);
2096               if (TREE_CODE (fn) == TEMPLATE_DECL
2097                   || TREE_CODE (fn) == TEMPLATE_ID_EXPR)
2098                 break;
2099               if (TREE_CODE (fn) == FUNCTION_DECL
2100                   && DECL_USE_TEMPLATE (fn)
2101                   && PRIMARY_TEMPLATE_P (DECL_TI_TEMPLATE (fn)))
2102                 break;
2103               fns = OVL_NEXT (fns);
2104             }
2105           if (!fns)
2106             pedwarn ("%qD is not a template", decl);
2107         }
2108     }
2109 }
2110
2111 /* This function is called by the parser to process a class member
2112    access expression of the form OBJECT.NAME.  NAME is a node used by
2113    the parser to represent a name; it is not yet a DECL.  It may,
2114    however, be a BASELINK where the BASELINK_FUNCTIONS is a
2115    TEMPLATE_ID_EXPR.  Templates must be looked up by the parser, and
2116    there is no reason to do the lookup twice, so the parser keeps the
2117    BASELINK.  TEMPLATE_P is true iff NAME was explicitly declared to
2118    be a template via the use of the "A::template B" syntax.  */
2119
2120 tree
2121 finish_class_member_access_expr (tree object, tree name, bool template_p)
2122 {
2123   tree expr;
2124   tree object_type;
2125   tree member;
2126   tree access_path = NULL_TREE;
2127   tree orig_object = object;
2128   tree orig_name = name;
2129
2130   if (object == error_mark_node || name == error_mark_node)
2131     return error_mark_node;
2132
2133   /* If OBJECT is an ObjC class instance, we must obey ObjC access rules.  */
2134   if (!objc_is_public (object, name))
2135     return error_mark_node;
2136
2137   object_type = TREE_TYPE (object);
2138
2139   if (processing_template_decl)
2140     {
2141       if (/* If OBJECT_TYPE is dependent, so is OBJECT.NAME.  */
2142           dependent_type_p (object_type)
2143           /* If NAME is just an IDENTIFIER_NODE, then the expression
2144              is dependent.  */
2145           || TREE_CODE (object) == IDENTIFIER_NODE
2146           /* If NAME is "f<args>", where either 'f' or 'args' is
2147              dependent, then the expression is dependent.  */
2148           || (TREE_CODE (name) == TEMPLATE_ID_EXPR
2149               && dependent_template_id_p (TREE_OPERAND (name, 0),
2150                                           TREE_OPERAND (name, 1)))
2151           /* If NAME is "T::X" where "T" is dependent, then the
2152              expression is dependent.  */
2153           || (TREE_CODE (name) == SCOPE_REF
2154               && TYPE_P (TREE_OPERAND (name, 0))
2155               && dependent_type_p (TREE_OPERAND (name, 0))))
2156         return build_min_nt (COMPONENT_REF, object, name, NULL_TREE);
2157       object = build_non_dependent_expr (object);
2158     }
2159
2160   /* [expr.ref]
2161
2162      The type of the first expression shall be "class object" (of a
2163      complete type).  */
2164   if (!currently_open_class (object_type)
2165       && !complete_type_or_else (object_type, object))
2166     return error_mark_node;
2167   if (!CLASS_TYPE_P (object_type))
2168     {
2169       error ("request for member %qD in %qE, which is of non-class type %qT",
2170              name, object, object_type);
2171       return error_mark_node;
2172     }
2173
2174   if (BASELINK_P (name))
2175     /* A member function that has already been looked up.  */
2176     member = name;
2177   else
2178     {
2179       bool is_template_id = false;
2180       tree template_args = NULL_TREE;
2181       tree scope;
2182
2183       if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
2184         {
2185           is_template_id = true;
2186           template_args = TREE_OPERAND (name, 1);
2187           name = TREE_OPERAND (name, 0);
2188
2189           if (TREE_CODE (name) == OVERLOAD)
2190             name = DECL_NAME (get_first_fn (name));
2191           else if (DECL_P (name))
2192             name = DECL_NAME (name);
2193         }
2194
2195       if (TREE_CODE (name) == SCOPE_REF)
2196         {
2197           /* A qualified name.  The qualifying class or namespace `S'
2198              has already been looked up; it is either a TYPE or a
2199              NAMESPACE_DECL.  */
2200           scope = TREE_OPERAND (name, 0);
2201           name = TREE_OPERAND (name, 1);
2202
2203           /* If SCOPE is a namespace, then the qualified name does not
2204              name a member of OBJECT_TYPE.  */
2205           if (TREE_CODE (scope) == NAMESPACE_DECL)
2206             {
2207               error ("%<%D::%D%> is not a member of %qT",
2208                      scope, name, object_type);
2209               return error_mark_node;
2210             }
2211
2212           gcc_assert (CLASS_TYPE_P (scope));
2213           gcc_assert (TREE_CODE (name) == IDENTIFIER_NODE
2214                       || TREE_CODE (name) == BIT_NOT_EXPR);
2215
2216           /* Find the base of OBJECT_TYPE corresponding to SCOPE.  */
2217           access_path = lookup_base (object_type, scope, ba_check, NULL);
2218           if (access_path == error_mark_node)
2219             return error_mark_node;
2220           if (!access_path)
2221             {
2222               error ("%qT is not a base of %qT", scope, object_type);
2223               return error_mark_node;
2224             }
2225         }
2226       else
2227         {
2228           scope = NULL_TREE;
2229           access_path = object_type;
2230         }
2231
2232       if (TREE_CODE (name) == BIT_NOT_EXPR)
2233         member = lookup_destructor (object, scope, name);
2234       else
2235         {
2236           /* Look up the member.  */
2237           member = lookup_member (access_path, name, /*protect=*/1,
2238                                   /*want_type=*/false);
2239           if (member == NULL_TREE)
2240             {
2241               error ("%qD has no member named %qE", object_type, name);
2242               return error_mark_node;
2243             }
2244           if (member == error_mark_node)
2245             return error_mark_node;
2246         }
2247
2248       if (is_template_id)
2249         {
2250           tree template = member;
2251
2252           if (BASELINK_P (template))
2253             template = lookup_template_function (template, template_args);
2254           else
2255             {
2256               error ("%qD is not a member template function", name);
2257               return error_mark_node;
2258             }
2259         }
2260     }
2261
2262   if (TREE_DEPRECATED (member))
2263     warn_deprecated_use (member);
2264
2265   if (template_p)
2266     check_template_keyword (member);
2267
2268   expr = build_class_member_access_expr (object, member, access_path,
2269                                          /*preserve_reference=*/false);
2270   if (processing_template_decl && expr != error_mark_node)
2271     {
2272       if (BASELINK_P (member))
2273         {
2274           if (TREE_CODE (orig_name) == SCOPE_REF)
2275             BASELINK_QUALIFIED_P (member) = 1;
2276           orig_name = member;
2277         }
2278       return build_min_non_dep (COMPONENT_REF, expr,
2279                                 orig_object, orig_name,
2280                                 NULL_TREE);
2281     }
2282
2283   return expr;
2284 }
2285
2286 /* Return an expression for the MEMBER_NAME field in the internal
2287    representation of PTRMEM, a pointer-to-member function.  (Each
2288    pointer-to-member function type gets its own RECORD_TYPE so it is
2289    more convenient to access the fields by name than by FIELD_DECL.)
2290    This routine converts the NAME to a FIELD_DECL and then creates the
2291    node for the complete expression.  */
2292
2293 tree
2294 build_ptrmemfunc_access_expr (tree ptrmem, tree member_name)
2295 {
2296   tree ptrmem_type;
2297   tree member;
2298   tree member_type;
2299
2300   /* This code is a stripped down version of
2301      build_class_member_access_expr.  It does not work to use that
2302      routine directly because it expects the object to be of class
2303      type.  */
2304   ptrmem_type = TREE_TYPE (ptrmem);
2305   gcc_assert (TYPE_PTRMEMFUNC_P (ptrmem_type));
2306   member = lookup_member (ptrmem_type, member_name, /*protect=*/0,
2307                           /*want_type=*/false);
2308   member_type = cp_build_qualified_type (TREE_TYPE (member),
2309                                          cp_type_quals (ptrmem_type));
2310   return fold_build3 (COMPONENT_REF, member_type,
2311                       ptrmem, member, NULL_TREE);
2312 }
2313
2314 /* Given an expression PTR for a pointer, return an expression
2315    for the value pointed to.
2316    ERRORSTRING is the name of the operator to appear in error messages.
2317
2318    This function may need to overload OPERATOR_FNNAME.
2319    Must also handle REFERENCE_TYPEs for C++.  */
2320
2321 tree
2322 build_x_indirect_ref (tree expr, const char *errorstring)
2323 {
2324   tree orig_expr = expr;
2325   tree rval;
2326
2327   if (processing_template_decl)
2328     {
2329       if (type_dependent_expression_p (expr))
2330         return build_min_nt (INDIRECT_REF, expr);
2331       expr = build_non_dependent_expr (expr);
2332     }
2333
2334   rval = build_new_op (INDIRECT_REF, LOOKUP_NORMAL, expr, NULL_TREE,
2335                        NULL_TREE, /*overloaded_p=*/NULL);
2336   if (!rval)
2337     rval = build_indirect_ref (expr, errorstring);
2338
2339   if (processing_template_decl && rval != error_mark_node)
2340     return build_min_non_dep (INDIRECT_REF, rval, orig_expr);
2341   else
2342     return rval;
2343 }
2344
2345 tree
2346 build_indirect_ref (tree ptr, const char *errorstring)
2347 {
2348   tree pointer, type;
2349
2350   if (ptr == error_mark_node)
2351     return error_mark_node;
2352
2353   if (ptr == current_class_ptr)
2354     return current_class_ref;
2355
2356   pointer = (TREE_CODE (TREE_TYPE (ptr)) == REFERENCE_TYPE
2357              ? ptr : decay_conversion (ptr));
2358   type = TREE_TYPE (pointer);
2359
2360   if (POINTER_TYPE_P (type))
2361     {
2362       /* [expr.unary.op]
2363
2364          If the type of the expression is "pointer to T," the type
2365          of  the  result  is  "T."
2366
2367          We must use the canonical variant because certain parts of
2368          the back end, like fold, do pointer comparisons between
2369          types.  */
2370       tree t = canonical_type_variant (TREE_TYPE (type));
2371
2372       if (TREE_CODE (ptr) == CONVERT_EXPR
2373           || TREE_CODE (ptr) == NOP_EXPR
2374           || TREE_CODE (ptr) == VIEW_CONVERT_EXPR)
2375         {
2376           /* If a warning is issued, mark it to avoid duplicates from
2377              the backend.  This only needs to be done at
2378              warn_strict_aliasing > 2.  */
2379           if (warn_strict_aliasing > 2)
2380             if (strict_aliasing_warning (TREE_TYPE (TREE_OPERAND (ptr, 0)),
2381                                          type, TREE_OPERAND (ptr, 0)))
2382               TREE_NO_WARNING (ptr) = 1;
2383         }
2384
2385       if (VOID_TYPE_P (t))
2386         {
2387           /* A pointer to incomplete type (other than cv void) can be
2388              dereferenced [expr.unary.op]/1  */
2389           error ("%qT is not a pointer-to-object type", type);
2390           return error_mark_node;
2391         }
2392       else if (TREE_CODE (pointer) == ADDR_EXPR
2393                && same_type_p (t, TREE_TYPE (TREE_OPERAND (pointer, 0))))
2394         /* The POINTER was something like `&x'.  We simplify `*&x' to
2395            `x'.  */
2396         return TREE_OPERAND (pointer, 0);
2397       else
2398         {
2399           tree ref = build1 (INDIRECT_REF, t, pointer);
2400
2401           /* We *must* set TREE_READONLY when dereferencing a pointer to const,
2402              so that we get the proper error message if the result is used
2403              to assign to.  Also, &* is supposed to be a no-op.  */
2404           TREE_READONLY (ref) = CP_TYPE_CONST_P (t);
2405           TREE_THIS_VOLATILE (ref) = CP_TYPE_VOLATILE_P (t);
2406           TREE_SIDE_EFFECTS (ref)
2407             = (TREE_THIS_VOLATILE (ref) || TREE_SIDE_EFFECTS (pointer));
2408           return ref;
2409         }
2410     }
2411   /* `pointer' won't be an error_mark_node if we were given a
2412      pointer to member, so it's cool to check for this here.  */
2413   else if (TYPE_PTR_TO_MEMBER_P (type))
2414     error ("invalid use of %qs on pointer to member", errorstring);
2415   else if (pointer != error_mark_node)
2416     {
2417       if (errorstring)
2418         error ("invalid type argument of %qs", errorstring);
2419       else
2420         error ("invalid type argument");
2421     }
2422   return error_mark_node;
2423 }
2424
2425 /* This handles expressions of the form "a[i]", which denotes
2426    an array reference.
2427
2428    This is logically equivalent in C to *(a+i), but we may do it differently.
2429    If A is a variable or a member, we generate a primitive ARRAY_REF.
2430    This avoids forcing the array out of registers, and can work on
2431    arrays that are not lvalues (for example, members of structures returned
2432    by functions).
2433
2434    If INDEX is of some user-defined type, it must be converted to
2435    integer type.  Otherwise, to make a compatible PLUS_EXPR, it
2436    will inherit the type of the array, which will be some pointer type.  */
2437
2438 tree
2439 build_array_ref (tree array, tree idx)
2440 {
2441   if (idx == 0)
2442     {
2443       error ("subscript missing in array reference");
2444       return error_mark_node;
2445     }
2446
2447   if (TREE_TYPE (array) == error_mark_node
2448       || TREE_TYPE (idx) == error_mark_node)
2449     return error_mark_node;
2450
2451   /* If ARRAY is a COMPOUND_EXPR or COND_EXPR, move our reference
2452      inside it.  */
2453   switch (TREE_CODE (array))
2454     {
2455     case COMPOUND_EXPR:
2456       {
2457         tree value = build_array_ref (TREE_OPERAND (array, 1), idx);
2458         return build2 (COMPOUND_EXPR, TREE_TYPE (value),
2459                        TREE_OPERAND (array, 0), value);
2460       }
2461
2462     case COND_EXPR:
2463       return build_conditional_expr
2464         (TREE_OPERAND (array, 0),
2465          build_array_ref (TREE_OPERAND (array, 1), idx),
2466          build_array_ref (TREE_OPERAND (array, 2), idx));
2467
2468     default:
2469       break;
2470     }
2471
2472   if (TREE_CODE (TREE_TYPE (array)) == ARRAY_TYPE)
2473     {
2474       tree rval, type;
2475
2476       warn_array_subscript_with_type_char (idx);
2477
2478       if (!INTEGRAL_OR_ENUMERATION_TYPE_P (TREE_TYPE (idx)))
2479         {
2480           error ("array subscript is not an integer");
2481           return error_mark_node;
2482         }
2483
2484       /* Apply integral promotions *after* noticing character types.
2485          (It is unclear why we do these promotions -- the standard
2486          does not say that we should.  In fact, the natural thing would
2487          seem to be to convert IDX to ptrdiff_t; we're performing
2488          pointer arithmetic.)  */
2489       idx = perform_integral_promotions (idx);
2490
2491       /* An array that is indexed by a non-constant
2492          cannot be stored in a register; we must be able to do
2493          address arithmetic on its address.
2494          Likewise an array of elements of variable size.  */
2495       if (TREE_CODE (idx) != INTEGER_CST
2496           || (COMPLETE_TYPE_P (TREE_TYPE (TREE_TYPE (array)))
2497               && (TREE_CODE (TYPE_SIZE (TREE_TYPE (TREE_TYPE (array))))
2498                   != INTEGER_CST)))
2499         {
2500           if (!cxx_mark_addressable (array))
2501             return error_mark_node;
2502         }
2503
2504       /* An array that is indexed by a constant value which is not within
2505          the array bounds cannot be stored in a register either; because we
2506          would get a crash in store_bit_field/extract_bit_field when trying
2507          to access a non-existent part of the register.  */
2508       if (TREE_CODE (idx) == INTEGER_CST
2509           && TYPE_DOMAIN (TREE_TYPE (array))
2510           && ! int_fits_type_p (idx, TYPE_DOMAIN (TREE_TYPE (array))))
2511         {
2512           if (!cxx_mark_addressable (array))
2513             return error_mark_node;
2514         }
2515
2516       if (pedantic && !lvalue_p (array))
2517         pedwarn ("ISO C++ forbids subscripting non-lvalue array");
2518
2519       /* Note in C++ it is valid to subscript a `register' array, since
2520          it is valid to take the address of something with that
2521          storage specification.  */
2522       if (extra_warnings)
2523         {
2524           tree foo = array;
2525           while (TREE_CODE (foo) == COMPONENT_REF)
2526             foo = TREE_OPERAND (foo, 0);
2527           if (TREE_CODE (foo) == VAR_DECL && DECL_REGISTER (foo))
2528             warning (OPT_Wextra, "subscripting array declared %<register%>");
2529         }
2530
2531       type = TREE_TYPE (TREE_TYPE (array));
2532       rval = build4 (ARRAY_REF, type, array, idx, NULL_TREE, NULL_TREE);
2533       /* Array ref is const/volatile if the array elements are
2534          or if the array is..  */
2535       TREE_READONLY (rval)
2536         |= (CP_TYPE_CONST_P (type) | TREE_READONLY (array));
2537       TREE_SIDE_EFFECTS (rval)
2538         |= (CP_TYPE_VOLATILE_P (type) | TREE_SIDE_EFFECTS (array));
2539       TREE_THIS_VOLATILE (rval)
2540         |= (CP_TYPE_VOLATILE_P (type) | TREE_THIS_VOLATILE (array));
2541       return require_complete_type (fold_if_not_in_template (rval));
2542     }
2543
2544   {
2545     tree ar = default_conversion (array);
2546     tree ind = default_conversion (idx);
2547
2548     /* Put the integer in IND to simplify error checking.  */
2549     if (TREE_CODE (TREE_TYPE (ar)) == INTEGER_TYPE)
2550       {
2551         tree temp = ar;
2552         ar = ind;
2553         ind = temp;
2554       }
2555
2556     if (ar == error_mark_node)
2557       return ar;
2558
2559     if (TREE_CODE (TREE_TYPE (ar)) != POINTER_TYPE)
2560       {
2561         error ("subscripted value is neither array nor pointer");
2562         return error_mark_node;
2563       }
2564     if (TREE_CODE (TREE_TYPE (ind)) != INTEGER_TYPE)
2565       {
2566         error ("array subscript is not an integer");
2567         return error_mark_node;
2568       }
2569
2570     return build_indirect_ref (cp_build_binary_op (PLUS_EXPR, ar, ind),
2571                                "array indexing");
2572   }
2573 }
2574 \f
2575 /* Resolve a pointer to member function.  INSTANCE is the object
2576    instance to use, if the member points to a virtual member.
2577
2578    This used to avoid checking for virtual functions if basetype
2579    has no virtual functions, according to an earlier ANSI draft.
2580    With the final ISO C++ rules, such an optimization is
2581    incorrect: A pointer to a derived member can be static_cast
2582    to pointer-to-base-member, as long as the dynamic object
2583    later has the right member.  */
2584
2585 tree
2586 get_member_function_from_ptrfunc (tree *instance_ptrptr, tree function)
2587 {
2588   if (TREE_CODE (function) == OFFSET_REF)
2589     function = TREE_OPERAND (function, 1);
2590
2591   if (TYPE_PTRMEMFUNC_P (TREE_TYPE (function)))
2592     {
2593       tree idx, delta, e1, e2, e3, vtbl, basetype;
2594       tree fntype = TYPE_PTRMEMFUNC_FN_TYPE (TREE_TYPE (function));
2595
2596       tree instance_ptr = *instance_ptrptr;
2597       tree instance_save_expr = 0;
2598       if (instance_ptr == error_mark_node)
2599         {
2600           if (TREE_CODE (function) == PTRMEM_CST)
2601             {
2602               /* Extracting the function address from a pmf is only
2603                  allowed with -Wno-pmf-conversions. It only works for
2604                  pmf constants.  */
2605               e1 = build_addr_func (PTRMEM_CST_MEMBER (function));
2606               e1 = convert (fntype, e1);
2607               return e1;
2608             }
2609           else
2610             {
2611               error ("object missing in use of %qE", function);
2612               return error_mark_node;
2613             }
2614         }
2615
2616       if (TREE_SIDE_EFFECTS (instance_ptr))
2617         instance_ptr = instance_save_expr = save_expr (instance_ptr);
2618
2619       if (TREE_SIDE_EFFECTS (function))
2620         function = save_expr (function);
2621
2622       /* Start by extracting all the information from the PMF itself.  */
2623       e3 = pfn_from_ptrmemfunc (function);
2624       delta = build_ptrmemfunc_access_expr (function, delta_identifier);
2625       idx = build1 (NOP_EXPR, vtable_index_type, e3);
2626       switch (TARGET_PTRMEMFUNC_VBIT_LOCATION)
2627         {
2628         case ptrmemfunc_vbit_in_pfn:
2629           e1 = cp_build_binary_op (BIT_AND_EXPR, idx, integer_one_node);
2630           idx = cp_build_binary_op (MINUS_EXPR, idx, integer_one_node);
2631           break;
2632
2633         case ptrmemfunc_vbit_in_delta:
2634           e1 = cp_build_binary_op (BIT_AND_EXPR, delta, integer_one_node);
2635           delta = cp_build_binary_op (RSHIFT_EXPR, delta, integer_one_node);
2636           break;
2637
2638         default:
2639           gcc_unreachable ();
2640         }
2641
2642       /* Convert down to the right base before using the instance.  A
2643          special case is that in a pointer to member of class C, C may
2644          be incomplete.  In that case, the function will of course be
2645          a member of C, and no conversion is required.  In fact,
2646          lookup_base will fail in that case, because incomplete
2647          classes do not have BINFOs.  */
2648       basetype = TYPE_METHOD_BASETYPE (TREE_TYPE (fntype));
2649       if (!same_type_ignoring_top_level_qualifiers_p
2650           (basetype, TREE_TYPE (TREE_TYPE (instance_ptr))))
2651         {
2652           basetype = lookup_base (TREE_TYPE (TREE_TYPE (instance_ptr)),
2653                                   basetype, ba_check, NULL);
2654           instance_ptr = build_base_path (PLUS_EXPR, instance_ptr, basetype,
2655                                           1);
2656           if (instance_ptr == error_mark_node)
2657             return error_mark_node;
2658         }
2659       /* ...and then the delta in the PMF.  */
2660       instance_ptr = build2 (PLUS_EXPR, TREE_TYPE (instance_ptr),
2661                              instance_ptr, delta);
2662
2663       /* Hand back the adjusted 'this' argument to our caller.  */
2664       *instance_ptrptr = instance_ptr;
2665
2666       /* Next extract the vtable pointer from the object.  */
2667       vtbl = build1 (NOP_EXPR, build_pointer_type (vtbl_ptr_type_node),
2668                      instance_ptr);
2669       vtbl = build_indirect_ref (vtbl, NULL);
2670
2671       /* Finally, extract the function pointer from the vtable.  */
2672       e2 = fold_build2 (PLUS_EXPR, TREE_TYPE (vtbl), vtbl, idx);
2673       e2 = build_indirect_ref (e2, NULL);
2674       TREE_CONSTANT (e2) = 1;
2675       TREE_INVARIANT (e2) = 1;
2676
2677       /* When using function descriptors, the address of the
2678          vtable entry is treated as a function pointer.  */
2679       if (TARGET_VTABLE_USES_DESCRIPTORS)
2680         e2 = build1 (NOP_EXPR, TREE_TYPE (e2),
2681                      build_unary_op (ADDR_EXPR, e2, /*noconvert=*/1));
2682
2683       TREE_TYPE (e2) = TREE_TYPE (e3);
2684       e1 = build_conditional_expr (e1, e2, e3);
2685
2686       /* Make sure this doesn't get evaluated first inside one of the
2687          branches of the COND_EXPR.  */
2688       if (instance_save_expr)
2689         e1 = build2 (COMPOUND_EXPR, TREE_TYPE (e1),
2690                      instance_save_expr, e1);
2691
2692       function = e1;
2693     }
2694   return function;
2695 }
2696
2697 /* APPLE LOCAL begin blocks 6040305 (cm) */
2698 /* APPLE LOCAL begin radar 5847213 - radar 6329245 */
2699 /**
2700  build_block_call - Routine to build a block call; as in:
2701   ((double(*)(void *, int))(BLOCK_PTR_EXP->__FuncPtr))(I, 42);
2702  FNTYPE is the original function type derived from the syntax.
2703  BLOCK_PTR_EXP is the block pointer variable.
2704  PARAMS is the parameter list.
2705 */
2706 static tree
2707 build_block_call (tree fntype, tree block_ptr_exp, tree params)
2708 {
2709   tree function_ptr_exp;
2710   tree typelist;
2711   tree result;
2712   /* APPLE LOCAL radar 6396238 */
2713   bool block_ptr_exp_side_effect = TREE_SIDE_EFFECTS (block_ptr_exp);
2714   
2715   /* First convert it to 'void *'. */
2716   block_ptr_exp = convert (ptr_type_node, block_ptr_exp);
2717   gcc_assert (generic_block_literal_struct_type);
2718   block_ptr_exp = convert (build_pointer_type (generic_block_literal_struct_type),
2719                             block_ptr_exp);
2720   if (block_ptr_exp_side_effect)
2721     block_ptr_exp = save_expr (block_ptr_exp);
2722
2723   /* BLOCK_PTR_VAR->__FuncPtr */
2724   function_ptr_exp =
2725     finish_class_member_access_expr (build_indirect_ref (block_ptr_exp, "->"),
2726                                              get_identifier ("__FuncPtr"), false);
2727   gcc_assert (function_ptr_exp);
2728   
2729   /* Build: result_type(*)(void *, function-arg-type-list) */
2730   typelist = TYPE_ARG_TYPES (fntype);
2731   typelist = tree_cons (NULL_TREE, ptr_type_node, typelist);
2732   fntype = build_function_type (TREE_TYPE (fntype), typelist);
2733   function_ptr_exp = convert (build_pointer_type (fntype), function_ptr_exp);
2734   params = tree_cons (NULL_TREE, block_ptr_exp, params);
2735   result = build3 (CALL_EXPR, TREE_TYPE (fntype),
2736                    function_ptr_exp, params, NULL_TREE);
2737   /* FIXME: should do more from build_cxx_call */
2738   result = convert_from_reference (result);
2739   return result;
2740 }
2741 /* APPLE LOCAL end radar 5847213 - radar 6329245 */
2742 /* APPLE LOCAL end blocks 6040305 (cm) */
2743
2744 tree
2745 build_function_call (tree function, tree params)
2746 {
2747   tree fntype, fndecl;
2748   tree coerced_params;
2749   tree name = NULL_TREE;
2750   int is_method;
2751   tree original = function;
2752
2753   /* For Objective-C, convert any calls via a cast to OBJC_TYPE_REF
2754      expressions, like those used for ObjC messenger dispatches.  */
2755   function = objc_rewrite_function_call (function, params);
2756
2757   /* build_c_cast puts on a NOP_EXPR to make the result not an lvalue.
2758      Strip such NOP_EXPRs, since FUNCTION is used in non-lvalue context.  */
2759   if (TREE_CODE (function) == NOP_EXPR
2760       && TREE_TYPE (function) == TREE_TYPE (TREE_OPERAND (function, 0)))
2761     function = TREE_OPERAND (function, 0);
2762
2763   if (TREE_CODE (function) == FUNCTION_DECL)
2764     {
2765       name = DECL_NAME (function);
2766
2767       mark_used (function);
2768       fndecl = function;
2769
2770       /* Convert anything with function type to a pointer-to-function.  */
2771       if (pedantic && DECL_MAIN_P (function))
2772         pedwarn ("ISO C++ forbids calling %<::main%> from within program");
2773
2774       /* Differs from default_conversion by not setting TREE_ADDRESSABLE
2775          (because calling an inline function does not mean the function
2776          needs to be separately compiled).  */
2777
2778       if (DECL_INLINE (function))
2779         function = inline_conversion (function);
2780       else
2781         function = build_addr_func (function);
2782     }
2783   else
2784     {
2785       fndecl = NULL_TREE;
2786
2787       function = build_addr_func (function);
2788     }
2789
2790   if (function == error_mark_node)
2791     return error_mark_node;
2792
2793   fntype = TREE_TYPE (function);
2794
2795   if (TYPE_PTRMEMFUNC_P (fntype))
2796     {
2797       error ("must use %<.*%> or %<->*%> to call pointer-to-member "
2798              "function in %<%E (...)%>",
2799              original);
2800       return error_mark_node;
2801     }
2802
2803   is_method = (TREE_CODE (fntype) == POINTER_TYPE
2804                && TREE_CODE (TREE_TYPE (fntype)) == METHOD_TYPE);
2805
2806   /* APPLE LOCAL blocks 6040305 */
2807   if (!(((TREE_CODE (fntype) == POINTER_TYPE || TREE_CODE (fntype) == BLOCK_POINTER_TYPE)
2808          && TREE_CODE (TREE_TYPE (fntype)) == FUNCTION_TYPE)
2809         || is_method
2810         || TREE_CODE (function) == TEMPLATE_ID_EXPR))
2811     {
2812       error ("%qE cannot be used as a function", original);
2813       return error_mark_node;
2814     }
2815
2816   /* fntype now gets the type of function pointed to.  */
2817   fntype = TREE_TYPE (fntype);
2818
2819   /* Convert the parameters to the types declared in the
2820      function prototype, or apply default promotions.  */
2821
2822   /* APPLE LOCAL begin radar 6087117 */
2823   coerced_params = convert_arguments (TYPE_ARG_TYPES (fntype),
2824                                       params, fndecl, LOOKUP_NORMAL,
2825                                       (TREE_CODE (TREE_TYPE (function)) == BLOCK_POINTER_TYPE));
2826   /* APPLE LOCAL end radar 6087117 */
2827   if (coerced_params == error_mark_node)
2828     return error_mark_node;
2829
2830   /* Check for errors in format strings and inappropriately
2831      null parameters.  */
2832
2833   check_function_arguments (TYPE_ATTRIBUTES (fntype), coerced_params,
2834                             TYPE_ARG_TYPES (fntype));
2835   /* APPLE LOCAL begin blocks 6040305 */
2836   if (TREE_CODE (TREE_TYPE (function)) == BLOCK_POINTER_TYPE)
2837     return build_block_call (fntype, function, coerced_params);
2838   /* APPLE LOCAL end blocks 6040305 */
2839
2840   return build_cxx_call (function, coerced_params);
2841 }
2842
2843 /* Convert the actual parameter expressions in the list VALUES
2844    to the types in the list TYPELIST.
2845    If parmdecls is exhausted, or when an element has NULL as its type,
2846    perform the default conversions.
2847
2848    NAME is an IDENTIFIER_NODE or 0.  It is used only for error messages.
2849
2850    This is also where warnings about wrong number of args are generated.
2851
2852    Return a list of expressions for the parameters as converted.
2853
2854    Both VALUES and the returned value are chains of TREE_LIST nodes
2855    with the elements of the list in the TREE_VALUE slots of those nodes.
2856
2857    In C++, unspecified trailing parameters can be filled in with their
2858    default arguments, if such were specified.  Do so here.  */
2859
2860 static tree
2861 /* APPLE LOCAL radar 6087117 */
2862 convert_arguments (tree typelist, tree values, tree fndecl, int flags, int block_call)
2863 {
2864   tree typetail, valtail;
2865   tree result = NULL_TREE;
2866   const char *called_thing = 0;
2867   int i = 0;
2868
2869   /* Argument passing is always copy-initialization.  */
2870   flags |= LOOKUP_ONLYCONVERTING;
2871
2872   if (fndecl)
2873     {
2874       if (TREE_CODE (TREE_TYPE (fndecl)) == METHOD_TYPE)
2875         {
2876           if (DECL_NAME (fndecl) == NULL_TREE
2877               || IDENTIFIER_HAS_TYPE_VALUE (DECL_NAME (fndecl)))
2878             called_thing = "constructor";
2879           else
2880             called_thing = "member function";
2881         }
2882       else
2883         called_thing = "function";
2884     }
2885
2886   for (valtail = values, typetail = typelist;
2887        valtail;
2888        valtail = TREE_CHAIN (valtail), i++)
2889     {
2890       tree type = typetail ? TREE_VALUE (typetail) : 0;
2891       tree val = TREE_VALUE (valtail);
2892
2893       if (val == error_mark_node || type == error_mark_node)
2894         return error_mark_node;
2895
2896       if (type == void_type_node)
2897         {
2898           if (fndecl)
2899             {
2900               error ("too many arguments to %s %q+#D", called_thing, fndecl);
2901               error ("at this point in file");
2902             }
2903           else
2904             /* APPLE LOCAL radar 6087117 */
2905             error ("too many arguments to %s", (block_call ? "block call" : "function"));
2906           /* In case anybody wants to know if this argument
2907              list is valid.  */
2908           if (result)
2909             TREE_TYPE (tree_last (result)) = error_mark_node;
2910           break;
2911         }
2912
2913       /* build_c_cast puts on a NOP_EXPR to make the result not an lvalue.
2914          Strip such NOP_EXPRs, since VAL is used in non-lvalue context.  */
2915       if (TREE_CODE (val) == NOP_EXPR
2916           && TREE_TYPE (val) == TREE_TYPE (TREE_OPERAND (val, 0))
2917           && (type == 0 || TREE_CODE (type) != REFERENCE_TYPE))
2918         val = TREE_OPERAND (val, 0);
2919
2920       if (type == 0 || TREE_CODE (type) != REFERENCE_TYPE)
2921         {
2922           if (TREE_CODE (TREE_TYPE (val)) == ARRAY_TYPE
2923               || TREE_CODE (TREE_TYPE (val)) == FUNCTION_TYPE
2924               || TREE_CODE (TREE_TYPE (val)) == METHOD_TYPE)
2925             val = decay_conversion (val);
2926         }
2927
2928       if (val == error_mark_node)
2929         return error_mark_node;
2930
2931       if (type != 0)
2932         {
2933           /* Formal parm type is specified by a function prototype.  */
2934           tree parmval;
2935
2936           if (!COMPLETE_TYPE_P (complete_type (type)))
2937             {
2938               if (fndecl)
2939                 error ("parameter %P of %qD has incomplete type %qT",
2940                        i, fndecl, type);
2941               else
2942                 error ("parameter %P has incomplete type %qT", i, type);
2943               parmval = error_mark_node;
2944             }
2945           else
2946             {
2947               parmval = convert_for_initialization
2948                 (NULL_TREE, type, val, flags,
2949                  "argument passing", fndecl, i);
2950               parmval = convert_for_arg_passing (type, parmval);
2951             }
2952
2953           if (parmval == error_mark_node)
2954             return error_mark_node;
2955
2956           result = tree_cons (NULL_TREE, parmval, result);
2957         }
2958       else
2959         {
2960           if (fndecl && DECL_BUILT_IN (fndecl)
2961               && DECL_FUNCTION_CODE (fndecl) == BUILT_IN_CONSTANT_P)
2962             /* Don't do ellipsis conversion for __built_in_constant_p
2963                as this will result in spurious warnings for non-POD
2964                types.  */
2965             val = require_complete_type (val);
2966           else
2967             val = convert_arg_to_ellipsis (val);
2968
2969           result = tree_cons (NULL_TREE, val, result);
2970         }
2971
2972       if (typetail)
2973         typetail = TREE_CHAIN (typetail);
2974     }
2975
2976   if (typetail != 0 && typetail != void_list_node)
2977     {
2978       /* See if there are default arguments that can be used.  */
2979       if (TREE_PURPOSE (typetail)
2980           && TREE_CODE (TREE_PURPOSE (typetail)) != DEFAULT_ARG)
2981         {
2982           for (; typetail != void_list_node; ++i)
2983             {
2984               tree parmval
2985                 = convert_default_arg (TREE_VALUE (typetail),
2986                                        TREE_PURPOSE (typetail),
2987                                        fndecl, i);
2988
2989               if (parmval == error_mark_node)
2990                 return error_mark_node;
2991
2992               result = tree_cons (0, parmval, result);
2993               typetail = TREE_CHAIN (typetail);
2994               /* ends with `...'.  */
2995               if (typetail == NULL_TREE)
2996                 break;
2997             }
2998         }
2999       else
3000         {
3001           if (fndecl)
3002             {
3003               error ("too few arguments to %s %q+#D", called_thing, fndecl);
3004               error ("at this point in file");
3005             }
3006           else
3007             /* APPLE LOCAL radar 6087117 */
3008             error ("too few arguments to %s", (block_call ? "block call" : "function"));
3009           return error_mark_node;
3010         }
3011     }
3012
3013   return nreverse (result);
3014 }
3015 \f
3016 /* Build a binary-operation expression, after performing default
3017    conversions on the operands.  CODE is the kind of expression to build.  */
3018
3019 tree
3020 build_x_binary_op (enum tree_code code, tree arg1, enum tree_code arg1_code,
3021                    tree arg2, enum tree_code arg2_code, bool *overloaded_p)
3022 {
3023   tree orig_arg1;
3024   tree orig_arg2;
3025   tree expr;
3026
3027   orig_arg1 = arg1;
3028   orig_arg2 = arg2;
3029
3030   if (processing_template_decl)
3031     {
3032       if (type_dependent_expression_p (arg1)
3033           || type_dependent_expression_p (arg2))
3034         return build_min_nt (code, arg1, arg2);
3035       arg1 = build_non_dependent_expr (arg1);
3036       arg2 = build_non_dependent_expr (arg2);
3037     }
3038
3039   if (code == DOTSTAR_EXPR)
3040     expr = build_m_component_ref (arg1, arg2);
3041   else
3042     expr = build_new_op (code, LOOKUP_NORMAL, arg1, arg2, NULL_TREE,
3043                          overloaded_p);
3044
3045   /* Check for cases such as x+y<<z which users are likely to
3046      misinterpret.  But don't warn about obj << x + y, since that is a
3047      common idiom for I/O.  */
3048   if (warn_parentheses
3049       && !processing_template_decl
3050       && !error_operand_p (arg1)
3051       && !error_operand_p (arg2)
3052       && (code != LSHIFT_EXPR
3053           || !IS_AGGR_TYPE (TREE_TYPE (arg1))))
3054     warn_about_parentheses (code, arg1_code, arg2_code);
3055
3056   if (processing_template_decl && expr != error_mark_node)
3057     return build_min_non_dep (code, expr, orig_arg1, orig_arg2);
3058
3059   return expr;
3060 }
3061
3062 /* Build a binary-operation expression without default conversions.
3063    CODE is the kind of expression to build.
3064    This function differs from `build' in several ways:
3065    the data type of the result is computed and recorded in it,
3066    warnings are generated if arg data types are invalid,
3067    special handling for addition and subtraction of pointers is known,
3068    and some optimization is done (operations on narrow ints
3069    are done in the narrower type when that gives the same result).
3070    Constant folding is also done before the result is returned.
3071
3072    Note that the operands will never have enumeral types
3073    because either they have just had the default conversions performed
3074    or they have both just been converted to some other type in which
3075    the arithmetic is to be done.
3076
3077    C++: must do special pointer arithmetic when implementing
3078    multiple inheritance, and deal with pointer to member functions.  */
3079
3080 tree
3081 build_binary_op (enum tree_code code, tree orig_op0, tree orig_op1,
3082                  int convert_p ATTRIBUTE_UNUSED)
3083 {
3084   tree op0, op1;
3085   enum tree_code code0, code1;
3086   tree type0, type1;
3087   const char *invalid_op_diag;
3088
3089   /* Expression code to give to the expression when it is built.
3090      Normally this is CODE, which is what the caller asked for,
3091      but in some special cases we change it.  */
3092   enum tree_code resultcode = code;
3093
3094   /* Data type in which the computation is to be performed.
3095      In the simplest cases this is the common type of the arguments.  */
3096   tree result_type = NULL;
3097
3098   /* Nonzero means operands have already been type-converted
3099      in whatever way is necessary.
3100      Zero means they need to be converted to RESULT_TYPE.  */
3101   int converted = 0;
3102
3103   /* Nonzero means create the expression with this type, rather than
3104      RESULT_TYPE.  */
3105   tree build_type = 0;
3106
3107   /* Nonzero means after finally constructing the expression
3108      convert it to this type.  */
3109   tree final_type = 0;
3110
3111   tree result;
3112
3113   /* Nonzero if this is an operation like MIN or MAX which can
3114      safely be computed in short if both args are promoted shorts.
3115      Also implies COMMON.
3116      -1 indicates a bitwise operation; this makes a difference
3117      in the exact conditions for when it is safe to do the operation
3118      in a narrower mode.  */
3119   int shorten = 0;
3120
3121   /* Nonzero if this is a comparison operation;
3122      if both args are promoted shorts, compare the original shorts.
3123      Also implies COMMON.  */
3124   int short_compare = 0;
3125
3126   /* Nonzero if this is a right-shift operation, which can be computed on the
3127      original short and then promoted if the operand is a promoted short.  */
3128   int short_shift = 0;
3129
3130   /* Nonzero means set RESULT_TYPE to the common type of the args.  */
3131   int common = 0;
3132
3133   /* True if both operands have arithmetic type.  */
3134   bool arithmetic_types_p;
3135
3136   /* Apply default conversions.  */
3137   op0 = orig_op0;
3138   op1 = orig_op1;
3139
3140   if (code == TRUTH_AND_EXPR || code == TRUTH_ANDIF_EXPR
3141       || code == TRUTH_OR_EXPR || code == TRUTH_ORIF_EXPR
3142       || code == TRUTH_XOR_EXPR)
3143     {
3144       if (!really_overloaded_fn (op0))
3145         op0 = decay_conversion (op0);
3146       if (!really_overloaded_fn (op1))
3147         op1 = decay_conversion (op1);
3148     }
3149   else
3150     {
3151       if (!really_overloaded_fn (op0))
3152         op0 = default_conversion (op0);
3153       if (!really_overloaded_fn (op1))
3154         op1 = default_conversion (op1);
3155     }
3156
3157   /* Strip NON_LVALUE_EXPRs, etc., since we aren't using as an lvalue.  */
3158   STRIP_TYPE_NOPS (op0);
3159   STRIP_TYPE_NOPS (op1);
3160
3161   /* DTRT if one side is an overloaded function, but complain about it.  */
3162   if (type_unknown_p (op0))
3163     {
3164       tree t = instantiate_type (TREE_TYPE (op1), op0, tf_none);
3165       if (t != error_mark_node)
3166         {
3167           pedwarn ("assuming cast to type %qT from overloaded function",
3168                    TREE_TYPE (t));
3169           op0 = t;
3170         }
3171     }
3172   if (type_unknown_p (op1))
3173     {
3174       tree t = instantiate_type (TREE_TYPE (op0), op1, tf_none);
3175       if (t != error_mark_node)
3176         {
3177           pedwarn ("assuming cast to type %qT from overloaded function",
3178                    TREE_TYPE (t));
3179           op1 = t;
3180         }
3181     }
3182
3183   type0 = TREE_TYPE (op0);
3184   type1 = TREE_TYPE (op1);
3185
3186   /* The expression codes of the data types of the arguments tell us
3187      whether the arguments are integers, floating, pointers, etc.  */
3188   code0 = TREE_CODE (type0);
3189   code1 = TREE_CODE (type1);
3190
3191   /* If an error was already reported for one of the arguments,
3192      avoid reporting another error.  */
3193
3194   if (code0 == ERROR_MARK || code1 == ERROR_MARK)
3195     return error_mark_node;
3196
3197   if ((invalid_op_diag
3198        = targetm.invalid_binary_op (code, type0, type1)))
3199     {
3200       error (invalid_op_diag, "");
3201       return error_mark_node;
3202     }
3203
3204   switch (code)
3205     {
3206     case MINUS_EXPR:
3207       /* Subtraction of two similar pointers.
3208          We must subtract them as integers, then divide by object size.  */
3209       if (code0 == POINTER_TYPE && code1 == POINTER_TYPE
3210           && same_type_ignoring_top_level_qualifiers_p (TREE_TYPE (type0),
3211                                                         TREE_TYPE (type1)))
3212         return pointer_diff (op0, op1, common_type (type0, type1));
3213       /* In all other cases except pointer - int, the usual arithmetic
3214          rules aply.  */
3215       else if (!(code0 == POINTER_TYPE && code1 == INTEGER_TYPE))
3216         {
3217           common = 1;
3218           break;
3219         }
3220       /* The pointer - int case is just like pointer + int; fall
3221          through.  */
3222     case PLUS_EXPR:
3223       if ((code0 == POINTER_TYPE || code1 == POINTER_TYPE)
3224           && (code0 == INTEGER_TYPE || code1 == INTEGER_TYPE))
3225         {
3226           tree ptr_operand;
3227           tree int_operand;
3228           ptr_operand = ((code0 == POINTER_TYPE) ? op0 : op1);
3229           int_operand = ((code0 == INTEGER_TYPE) ? op0 : op1);
3230           if (processing_template_decl)
3231             {
3232               result_type = TREE_TYPE (ptr_operand);
3233               break;
3234             }
3235           return cp_pointer_int_sum (code,
3236                                      ptr_operand, 
3237                                      int_operand);
3238         }
3239       common = 1;
3240       break;
3241
3242     case MULT_EXPR:
3243       common = 1;
3244       break;
3245
3246     case TRUNC_DIV_EXPR:
3247     case CEIL_DIV_EXPR:
3248     case FLOOR_DIV_EXPR:
3249     case ROUND_DIV_EXPR:
3250     case EXACT_DIV_EXPR:
3251       if ((code0 == INTEGER_TYPE || code0 == REAL_TYPE
3252            || code0 == COMPLEX_TYPE || code0 == VECTOR_TYPE)
3253           && (code1 == INTEGER_TYPE || code1 == REAL_TYPE
3254               || code1 == COMPLEX_TYPE || code1 == VECTOR_TYPE))
3255         {
3256           enum tree_code tcode0 = code0, tcode1 = code1;
3257
3258           if (TREE_CODE (op1) == INTEGER_CST && integer_zerop (op1))
3259             warning (OPT_Wdiv_by_zero, "division by zero in %<%E / 0%>", op0);
3260           else if (TREE_CODE (op1) == REAL_CST && real_zerop (op1))
3261             warning (OPT_Wdiv_by_zero, "division by zero in %<%E / 0.%>", op0);
3262
3263           if (tcode0 == COMPLEX_TYPE || tcode0 == VECTOR_TYPE)
3264             tcode0 = TREE_CODE (TREE_TYPE (TREE_TYPE (op0)));
3265           if (tcode1 == COMPLEX_TYPE || tcode1 == VECTOR_TYPE)
3266             tcode1 = TREE_CODE (TREE_TYPE (TREE_TYPE (op1)));
3267
3268           if (!(tcode0 == INTEGER_TYPE && tcode1 == INTEGER_TYPE))
3269             resultcode = RDIV_EXPR;
3270           else
3271             /* When dividing two signed integers, we have to promote to int.
3272                unless we divide by a constant != -1.  Note that default
3273                conversion will have been performed on the operands at this
3274                point, so we have to dig out the original type to find out if
3275                it was unsigned.  */
3276             shorten = ((TREE_CODE (op0) == NOP_EXPR
3277                         && TYPE_UNSIGNED (TREE_TYPE (TREE_OPERAND (op0, 0))))
3278                        || (TREE_CODE (op1) == INTEGER_CST
3279                            && ! integer_all_onesp (op1)));
3280
3281           common = 1;
3282         }
3283       break;
3284
3285     case BIT_AND_EXPR:
3286     case BIT_IOR_EXPR:
3287     case BIT_XOR_EXPR:
3288       if ((code0 == INTEGER_TYPE && code1 == INTEGER_TYPE)
3289           || (code0 == VECTOR_TYPE && code1 == VECTOR_TYPE))
3290         shorten = -1;
3291       break;
3292
3293     case TRUNC_MOD_EXPR:
3294     case FLOOR_MOD_EXPR:
3295       if (code1 == INTEGER_TYPE && integer_zerop (op1))
3296         warning (OPT_Wdiv_by_zero, "division by zero in %<%E %% 0%>", op0);
3297       else if (code1 == REAL_TYPE && real_zerop (op1))
3298         warning (OPT_Wdiv_by_zero, "division by zero in %<%E %% 0.%>", op0);
3299
3300       if (code0 == INTEGER_TYPE && code1 == INTEGER_TYPE)
3301         {
3302           /* Although it would be tempting to shorten always here, that loses
3303              on some targets, since the modulo instruction is undefined if the
3304              quotient can't be represented in the computation mode.  We shorten
3305              only if unsigned or if dividing by something we know != -1.  */
3306           shorten = ((TREE_CODE (op0) == NOP_EXPR
3307                       && TYPE_UNSIGNED (TREE_TYPE (TREE_OPERAND (op0, 0))))
3308                      || (TREE_CODE (op1) == INTEGER_CST
3309                          && ! integer_all_onesp (op1)));
3310           common = 1;
3311         }
3312       break;
3313
3314     case TRUTH_ANDIF_EXPR:
3315     case TRUTH_ORIF_EXPR:
3316     case TRUTH_AND_EXPR:
3317     case TRUTH_OR_EXPR:
3318       result_type = boolean_type_node;
3319       break;
3320
3321       /* Shift operations: result has same type as first operand;
3322          always convert second operand to int.
3323          Also set SHORT_SHIFT if shifting rightward.  */
3324
3325     case RSHIFT_EXPR:
3326       if (code0 == INTEGER_TYPE && code1 == INTEGER_TYPE)
3327         {
3328           result_type = type0;
3329           if (TREE_CODE (op1) == INTEGER_CST)
3330             {
3331               if (tree_int_cst_lt (op1, integer_zero_node))
3332                 warning (0, "right shift count is negative");
3333               else
3334                 {
3335                   if (! integer_zerop (op1))
3336                     short_shift = 1;
3337                   if (compare_tree_int (op1, TYPE_PRECISION (type0)) >= 0)
3338                     warning (0, "right shift count >= width of type");
3339                 }
3340             }
3341           /* Convert the shift-count to an integer, regardless of
3342              size of value being shifted.  */
3343           if (TYPE_MAIN_VARIANT (TREE_TYPE (op1)) != integer_type_node)
3344             op1 = cp_convert (integer_type_node, op1);
3345           /* Avoid converting op1 to result_type later.  */
3346           converted = 1;
3347         }
3348       break;
3349
3350     case LSHIFT_EXPR:
3351       if (code0 == INTEGER_TYPE && code1 == INTEGER_TYPE)
3352         {
3353           result_type = type0;
3354           if (TREE_CODE (op1) == INTEGER_CST)
3355             {
3356               if (tree_int_cst_lt (op1, integer_zero_node))
3357                 warning (0, "left shift count is negative");
3358               else if (compare_tree_int (op1, TYPE_PRECISION (type0)) >= 0)
3359                 warning (0, "left shift count >= width of type");
3360             }
3361           /* Convert the shift-count to an integer, regardless of
3362              size of value being shifted.  */
3363           if (TYPE_MAIN_VARIANT (TREE_TYPE (op1)) != integer_type_node)
3364             op1 = cp_convert (integer_type_node, op1);
3365           /* Avoid converting op1 to result_type later.  */
3366           converted = 1;
3367         }
3368       break;
3369
3370     case RROTATE_EXPR:
3371     case LROTATE_EXPR:
3372       if (code0 == INTEGER_TYPE && code1 == INTEGER_TYPE)
3373         {
3374           result_type = type0;
3375           if (TREE_CODE (op1) == INTEGER_CST)
3376             {
3377               if (tree_int_cst_lt (op1, integer_zero_node))
3378                 warning (0, "%s rotate count is negative",
3379                          (code == LROTATE_EXPR) ? "left" : "right");
3380               else if (compare_tree_int (op1, TYPE_PRECISION (type0)) >= 0)
3381                 warning (0, "%s rotate count >= width of type",
3382                          (code == LROTATE_EXPR) ? "left" : "right");
3383             }
3384           /* Convert the shift-count to an integer, regardless of
3385              size of value being shifted.  */
3386           if (TYPE_MAIN_VARIANT (TREE_TYPE (op1)) != integer_type_node)
3387             op1 = cp_convert (integer_type_node, op1);
3388         }
3389       break;
3390
3391     case EQ_EXPR:
3392     case NE_EXPR:
3393       if (code0 == REAL_TYPE || code1 == REAL_TYPE)
3394         warning (OPT_Wfloat_equal,
3395                  "comparing floating point with == or != is unsafe");
3396       if ((TREE_CODE (orig_op0) == STRING_CST && !integer_zerop (op1))
3397           || (TREE_CODE (orig_op1) == STRING_CST && !integer_zerop (op0)))
3398         warning (OPT_Waddress, 
3399                  "comparison with string literal results in unspecified behaviour");
3400
3401       build_type = boolean_type_node;
3402       if ((code0 == INTEGER_TYPE || code0 == REAL_TYPE
3403            || code0 == COMPLEX_TYPE)
3404           && (code1 == INTEGER_TYPE || code1 == REAL_TYPE
3405               || code1 == COMPLEX_TYPE))
3406         short_compare = 1;
3407       /* APPLE LOCAL begin blocks 6040305 */
3408       else if (((code0 == POINTER_TYPE || code0 == BLOCK_POINTER_TYPE)
3409       && (code1 == POINTER_TYPE || code1 == BLOCK_POINTER_TYPE))
3410                || (TYPE_PTRMEM_P (type0) && TYPE_PTRMEM_P (type1)))
3411       /* APPLE LOCAL end blocks 6040305 */
3412         result_type = composite_pointer_type (type0, type1, op0, op1,
3413                                               "comparison");
3414       /* APPLE LOCAL blocks 6040305 (cl) */
3415       else if ((code0 == POINTER_TYPE || code0 == BLOCK_POINTER_TYPE || TYPE_PTRMEM_P (type0))
3416                && null_ptr_cst_p (op1))
3417         result_type = type0;
3418       /* APPLE LOCAL blocks 6040305 (cl) */
3419       else if ((code1 == POINTER_TYPE || code1 == BLOCK_POINTER_TYPE || TYPE_PTRMEM_P (type1))
3420                && null_ptr_cst_p (op0))
3421         result_type = type1;
3422       /* APPLE LOCAL blocks 6040305 (cl) */
3423       else if ((code0 == POINTER_TYPE || code0 == BLOCK_POINTER_TYPE) && code1 == INTEGER_TYPE)
3424         {
3425           result_type = type0;
3426           error ("ISO C++ forbids comparison between pointer and integer");
3427         }
3428       /* APPLE LOCAL blocks 6040305 (cl) */
3429       else if (code0 == INTEGER_TYPE && (code1 == POINTER_TYPE || code1 == BLOCK_POINTER_TYPE))
3430         {
3431           result_type = type1;
3432           error ("ISO C++ forbids comparison between pointer and integer");
3433         }
3434       else if (TYPE_PTRMEMFUNC_P (type0) && null_ptr_cst_p (op1))
3435         {
3436           op0 = build_ptrmemfunc_access_expr (op0, pfn_identifier);
3437           op1 = cp_convert (TREE_TYPE (op0), integer_zero_node);
3438           result_type = TREE_TYPE (op0);
3439         }
3440       else if (TYPE_PTRMEMFUNC_P (type1) && null_ptr_cst_p (op0))
3441         return cp_build_binary_op (code, op1, op0);
3442       else if (TYPE_PTRMEMFUNC_P (type0) && TYPE_PTRMEMFUNC_P (type1)
3443                && same_type_p (type0, type1))
3444         {
3445           /* E will be the final comparison.  */
3446           tree e;
3447           /* E1 and E2 are for scratch.  */
3448           tree e1;
3449           tree e2;
3450           tree pfn0;
3451           tree pfn1;
3452           tree delta0;
3453           tree delta1;
3454
3455           if (TREE_SIDE_EFFECTS (op0))
3456             op0 = save_expr (op0);
3457           if (TREE_SIDE_EFFECTS (op1))
3458             op1 = save_expr (op1);
3459
3460           /* We generate:
3461
3462              (op0.pfn == op1.pfn
3463               && (!op0.pfn || op0.delta == op1.delta))
3464
3465              The reason for the `!op0.pfn' bit is that a NULL
3466              pointer-to-member is any member with a zero PFN; the
3467              DELTA field is unspecified.  */
3468           pfn0 = pfn_from_ptrmemfunc (op0);
3469           pfn1 = pfn_from_ptrmemfunc (op1);
3470           delta0 = build_ptrmemfunc_access_expr (op0,
3471                                                  delta_identifier);
3472           delta1 = build_ptrmemfunc_access_expr (op1,
3473                                                  delta_identifier);
3474           e1 = cp_build_binary_op (EQ_EXPR, delta0, delta1);
3475           e2 = cp_build_binary_op (EQ_EXPR,
3476                                    pfn0,
3477                                    cp_convert (TREE_TYPE (pfn0),
3478                                                integer_zero_node));
3479           e1 = cp_build_binary_op (TRUTH_ORIF_EXPR, e1, e2);
3480           e2 = build2 (EQ_EXPR, boolean_type_node, pfn0, pfn1);
3481           e = cp_build_binary_op (TRUTH_ANDIF_EXPR, e2, e1);
3482           if (code == EQ_EXPR)
3483             return e;
3484           return cp_build_binary_op (EQ_EXPR, e, integer_zero_node);
3485         }
3486       else
3487         {
3488           gcc_assert (!TYPE_PTRMEMFUNC_P (type0)
3489                       || !same_type_p (TYPE_PTRMEMFUNC_FN_TYPE (type0),
3490                                        type1));
3491           gcc_assert (!TYPE_PTRMEMFUNC_P (type1)
3492                       || !same_type_p (TYPE_PTRMEMFUNC_FN_TYPE (type1),
3493                                        type0));
3494         }
3495
3496       break;
3497
3498     case MAX_EXPR:
3499     case MIN_EXPR:
3500       if ((code0 == INTEGER_TYPE || code0 == REAL_TYPE)
3501            && (code1 == INTEGER_TYPE || code1 == REAL_TYPE))
3502         shorten = 1;
3503       else if (code0 == POINTER_TYPE && code1 == POINTER_TYPE)
3504         result_type = composite_pointer_type (type0, type1, op0, op1,
3505                                               "comparison");
3506       break;
3507
3508     case LE_EXPR:
3509     case GE_EXPR:
3510     case LT_EXPR:
3511     case GT_EXPR:
3512       if (TREE_CODE (orig_op0) == STRING_CST
3513           || TREE_CODE (orig_op1) == STRING_CST)
3514         warning (OPT_Waddress, 
3515                  "comparison with string literal results in unspecified behaviour");
3516
3517       build_type = boolean_type_node;
3518       if ((code0 == INTEGER_TYPE || code0 == REAL_TYPE)
3519            && (code1 == INTEGER_TYPE || code1 == REAL_TYPE))
3520         short_compare = 1;
3521       else if (code0 == POINTER_TYPE && code1 == POINTER_TYPE)
3522         result_type = composite_pointer_type (type0, type1, op0, op1,
3523                                               "comparison");
3524       else if (code0 == POINTER_TYPE && TREE_CODE (op1) == INTEGER_CST
3525                && integer_zerop (op1))
3526         result_type = type0;
3527       else if (code1 == POINTER_TYPE && TREE_CODE (op0) == INTEGER_CST
3528                && integer_zerop (op0))
3529         result_type = type1;
3530       else if (code0 == POINTER_TYPE && code1 == INTEGER_TYPE)
3531         {
3532           result_type = type0;
3533           pedwarn ("ISO C++ forbids comparison between pointer and integer");
3534         }
3535       else if (code0 == INTEGER_TYPE && code1 == POINTER_TYPE)
3536         {
3537           result_type = type1;
3538           pedwarn ("ISO C++ forbids comparison between pointer and integer");
3539         }
3540       break;
3541
3542     case UNORDERED_EXPR:
3543     case ORDERED_EXPR:
3544     case UNLT_EXPR:
3545     case UNLE_EXPR:
3546     case UNGT_EXPR:
3547     case UNGE_EXPR:
3548     case UNEQ_EXPR:
3549       build_type = integer_type_node;
3550       if (code0 != REAL_TYPE || code1 != REAL_TYPE)
3551         {
3552           error ("unordered comparison on non-floating point argument");
3553           return error_mark_node;
3554         }
3555       common = 1;
3556       break;
3557
3558     default:
3559       break;
3560     }
3561
3562   if (((code0 == INTEGER_TYPE || code0 == REAL_TYPE || code0 == COMPLEX_TYPE)
3563        && (code1 == INTEGER_TYPE || code1 == REAL_TYPE
3564            || code1 == COMPLEX_TYPE)))
3565     arithmetic_types_p = 1;
3566   else
3567     {
3568       arithmetic_types_p = 0;
3569       /* Vector arithmetic is only allowed when both sides are vectors.  */
3570       if (code0 == VECTOR_TYPE && code1 == VECTOR_TYPE)
3571         {
3572           if (!tree_int_cst_equal (TYPE_SIZE (type0), TYPE_SIZE (type1))
3573               || !same_scalar_type_ignoring_signedness (TREE_TYPE (type0),
3574                                                         TREE_TYPE (type1)))
3575             {
3576               binary_op_error (code, type0, type1);
3577               return error_mark_node;
3578             }
3579           arithmetic_types_p = 1;
3580         }
3581     }
3582   /* Determine the RESULT_TYPE, if it is not already known.  */
3583   if (!result_type
3584       && arithmetic_types_p
3585       && (shorten || common || short_compare))
3586     result_type = common_type (type0, type1);
3587
3588   if (!result_type)
3589     {
3590       error ("invalid operands of types %qT and %qT to binary %qO",
3591              TREE_TYPE (orig_op0), TREE_TYPE (orig_op1), code);
3592       return error_mark_node;
3593     }
3594
3595   /* If we're in a template, the only thing we need to know is the
3596      RESULT_TYPE.  */
3597   if (processing_template_decl)
3598     return build2 (resultcode,
3599                    build_type ? build_type : result_type,
3600                    op0, op1);
3601
3602   if (arithmetic_types_p)
3603     {
3604       int none_complex = (code0 != COMPLEX_TYPE && code1 != COMPLEX_TYPE);
3605
3606       /* For certain operations (which identify themselves by shorten != 0)
3607          if both args were extended from the same smaller type,
3608          do the arithmetic in that type and then extend.
3609
3610          shorten !=0 and !=1 indicates a bitwise operation.
3611          For them, this optimization is safe only if
3612          both args are zero-extended or both are sign-extended.
3613          Otherwise, we might change the result.
3614          Eg, (short)-1 | (unsigned short)-1 is (int)-1
3615          but calculated in (unsigned short) it would be (unsigned short)-1.  */
3616
3617       if (shorten && none_complex)
3618         {
3619           int unsigned0, unsigned1;
3620           tree arg0 = get_narrower (op0, &unsigned0);
3621           tree arg1 = get_narrower (op1, &unsigned1);
3622           /* UNS is 1 if the operation to be done is an unsigned one.  */
3623           int uns = TYPE_UNSIGNED (result_type);
3624           tree type;
3625
3626           final_type = result_type;
3627
3628           /* Handle the case that OP0 does not *contain* a conversion
3629              but it *requires* conversion to FINAL_TYPE.  */
3630
3631           if (op0 == arg0 && TREE_TYPE (op0) != final_type)
3632             unsigned0 = TYPE_UNSIGNED (TREE_TYPE (op0));
3633           if (op1 == arg1 && TREE_TYPE (op1) != final_type)
3634             unsigned1 = TYPE_UNSIGNED (TREE_TYPE (op1));
3635
3636           /* Now UNSIGNED0 is 1 if ARG0 zero-extends to FINAL_TYPE.  */
3637
3638           /* For bitwise operations, signedness of nominal type
3639              does not matter.  Consider only how operands were extended.  */
3640           if (shorten == -1)
3641             uns = unsigned0;
3642
3643           /* Note that in all three cases below we refrain from optimizing
3644              an unsigned operation on sign-extended args.
3645              That would not be valid.  */
3646
3647           /* Both args variable: if both extended in same way
3648              from same width, do it in that width.
3649              Do it unsigned if args were zero-extended.  */
3650           if ((TYPE_PRECISION (TREE_TYPE (arg0))
3651                < TYPE_PRECISION (result_type))
3652               && (TYPE_PRECISION (TREE_TYPE (arg1))
3653                   == TYPE_PRECISION (TREE_TYPE (arg0)))
3654               && unsigned0 == unsigned1
3655               && (unsigned0 || !uns))
3656             result_type = c_common_signed_or_unsigned_type
3657               (unsigned0, common_type (TREE_TYPE (arg0), TREE_TYPE (arg1)));
3658           else if (TREE_CODE (arg0) == INTEGER_CST
3659                    && (unsigned1 || !uns)
3660                    && (TYPE_PRECISION (TREE_TYPE (arg1))
3661                        < TYPE_PRECISION (result_type))
3662                    && (type = c_common_signed_or_unsigned_type
3663                        (unsigned1, TREE_TYPE (arg1)),
3664                        int_fits_type_p (arg0, type)))
3665             result_type = type;
3666           else if (TREE_CODE (arg1) == INTEGER_CST
3667                    && (unsigned0 || !uns)
3668                    && (TYPE_PRECISION (TREE_TYPE (arg0))
3669                        < TYPE_PRECISION (result_type))
3670                    && (type = c_common_signed_or_unsigned_type
3671                        (unsigned0, TREE_TYPE (arg0)),
3672                        int_fits_type_p (arg1, type)))
3673             result_type = type;
3674         }
3675
3676       /* Shifts can be shortened if shifting right.  */
3677
3678       if (short_shift)
3679         {
3680           int unsigned_arg;
3681           tree arg0 = get_narrower (op0, &unsigned_arg);
3682
3683           final_type = result_type;
3684
3685           if (arg0 == op0 && final_type == TREE_TYPE (op0))
3686             unsigned_arg = TYPE_UNSIGNED (TREE_TYPE (op0));
3687
3688           if (TYPE_PRECISION (TREE_TYPE (arg0)) < TYPE_PRECISION (result_type)
3689               /* We can shorten only if the shift count is less than the
3690                  number of bits in the smaller type size.  */
3691               && compare_tree_int (op1, TYPE_PRECISION (TREE_TYPE (arg0))) < 0
3692               /* If arg is sign-extended and then unsigned-shifted,
3693                  we can simulate this with a signed shift in arg's type
3694                  only if the extended result is at least twice as wide
3695                  as the arg.  Otherwise, the shift could use up all the
3696                  ones made by sign-extension and bring in zeros.
3697                  We can't optimize that case at all, but in most machines
3698                  it never happens because available widths are 2**N.  */
3699               && (!TYPE_UNSIGNED (final_type)
3700                   || unsigned_arg
3701                   || (((unsigned) 2 * TYPE_PRECISION (TREE_TYPE (arg0)))
3702                       <= TYPE_PRECISION (result_type))))
3703             {
3704               /* Do an unsigned shift if the operand was zero-extended.  */
3705               result_type
3706                 = c_common_signed_or_unsigned_type (unsigned_arg,
3707                                                     TREE_TYPE (arg0));
3708               /* Convert value-to-be-shifted to that type.  */
3709               if (TREE_TYPE (op0) != result_type)
3710                 op0 = cp_convert (result_type, op0);
3711               converted = 1;
3712             }
3713         }
3714
3715       /* Comparison operations are shortened too but differently.
3716          They identify themselves by setting short_compare = 1.  */
3717
3718       if (short_compare)
3719         {
3720           /* Don't write &op0, etc., because that would prevent op0
3721              from being kept in a register.
3722              Instead, make copies of the our local variables and
3723              pass the copies by reference, then copy them back afterward.  */
3724           tree xop0 = op0, xop1 = op1, xresult_type = result_type;
3725           enum tree_code xresultcode = resultcode;
3726           tree val
3727             = shorten_compare (&xop0, &xop1, &xresult_type, &xresultcode);
3728           if (val != 0)
3729             return cp_convert (boolean_type_node, val);
3730           op0 = xop0, op1 = xop1;
3731           converted = 1;
3732           resultcode = xresultcode;
3733         }
3734
3735       if ((short_compare || code == MIN_EXPR || code == MAX_EXPR)
3736           && warn_sign_compare
3737           /* Do not warn until the template is instantiated; we cannot
3738              bound the ranges of the arguments until that point.  */
3739           && !processing_template_decl)
3740         {
3741           int op0_signed = !TYPE_UNSIGNED (TREE_TYPE (orig_op0));
3742           int op1_signed = !TYPE_UNSIGNED (TREE_TYPE (orig_op1));
3743
3744           int unsignedp0, unsignedp1;
3745           tree primop0 = get_narrower (op0, &unsignedp0);
3746           tree primop1 = get_narrower (op1, &unsignedp1);
3747
3748           /* Check for comparison of different enum types.  */
3749           if (TREE_CODE (TREE_TYPE (orig_op0)) == ENUMERAL_TYPE
3750               && TREE_CODE (TREE_TYPE (orig_op1)) == ENUMERAL_TYPE
3751               && TYPE_MAIN_VARIANT (TREE_TYPE (orig_op0))
3752                  != TYPE_MAIN_VARIANT (TREE_TYPE (orig_op1)))
3753             {
3754               warning (0, "comparison between types %q#T and %q#T",
3755                        TREE_TYPE (orig_op0), TREE_TYPE (orig_op1));
3756             }
3757
3758           /* Give warnings for comparisons between signed and unsigned
3759              quantities that may fail.  */
3760           /* Do the checking based on the original operand trees, so that
3761              casts will be considered, but default promotions won't be.  */
3762
3763           /* Do not warn if the comparison is being done in a signed type,
3764              since the signed type will only be chosen if it can represent
3765              all the values of the unsigned type.  */
3766           if (!TYPE_UNSIGNED (result_type))
3767             /* OK */;
3768           /* Do not warn if both operands are unsigned.  */
3769           else if (op0_signed == op1_signed)
3770             /* OK */;
3771           /* Do not warn if the signed quantity is an unsuffixed
3772              integer literal (or some static constant expression
3773              involving such literals or a conditional expression
3774              involving such literals) and it is non-negative.  */
3775           else if ((op0_signed && tree_expr_nonnegative_p (orig_op0))
3776                    || (op1_signed && tree_expr_nonnegative_p (orig_op1)))
3777             /* OK */;
3778           /* Do not warn if the comparison is an equality operation,
3779              the unsigned quantity is an integral constant and it does
3780              not use the most significant bit of result_type.  */
3781           else if ((resultcode == EQ_EXPR || resultcode == NE_EXPR)
3782                    && ((op0_signed && TREE_CODE (orig_op1) == INTEGER_CST
3783                         && int_fits_type_p (orig_op1, c_common_signed_type
3784                                             (result_type)))
3785                         || (op1_signed && TREE_CODE (orig_op0) == INTEGER_CST
3786                             && int_fits_type_p (orig_op0, c_common_signed_type
3787                                                 (result_type)))))
3788             /* OK */;
3789           else
3790             warning (0, "comparison between signed and unsigned integer expressions");
3791
3792           /* Warn if two unsigned values are being compared in a size
3793              larger than their original size, and one (and only one) is the
3794              result of a `~' operator.  This comparison will always fail.
3795
3796              Also warn if one operand is a constant, and the constant does not
3797              have all bits set that are set in the ~ operand when it is
3798              extended.  */
3799
3800           if ((TREE_CODE (primop0) == BIT_NOT_EXPR)
3801               ^ (TREE_CODE (primop1) == BIT_NOT_EXPR))
3802             {
3803               if (TREE_CODE (primop0) == BIT_NOT_EXPR)
3804                 primop0 = get_narrower (TREE_OPERAND (op0, 0), &unsignedp0);
3805               if (TREE_CODE (primop1) == BIT_NOT_EXPR)
3806                 primop1 = get_narrower (TREE_OPERAND (op1, 0), &unsignedp1);
3807
3808               if (host_integerp (primop0, 0) || host_integerp (primop1, 0))
3809                 {
3810                   tree primop;
3811                   HOST_WIDE_INT constant, mask;
3812                   int unsignedp;
3813                   unsigned int bits;
3814
3815                   if (host_integerp (primop0, 0))
3816                     {
3817                       primop = primop1;
3818                       unsignedp = unsignedp1;
3819                       constant = tree_low_cst (primop0, 0);
3820                     }
3821                   else
3822                     {
3823                       primop = primop0;
3824                       unsignedp = unsignedp0;
3825                       constant = tree_low_cst (primop1, 0);
3826                     }
3827
3828                   bits = TYPE_PRECISION (TREE_TYPE (primop));
3829                   if (bits < TYPE_PRECISION (result_type)
3830                       && bits < HOST_BITS_PER_LONG && unsignedp)
3831                     {
3832                       mask = (~ (HOST_WIDE_INT) 0) << bits;
3833                       if ((mask & constant) != mask)
3834                         warning (0, "comparison of promoted ~unsigned with constant");
3835                     }
3836                 }
3837               else if (unsignedp0 && unsignedp1
3838                        && (TYPE_PRECISION (TREE_TYPE (primop0))
3839                            < TYPE_PRECISION (result_type))
3840                        && (TYPE_PRECISION (TREE_TYPE (primop1))
3841                            < TYPE_PRECISION (result_type)))
3842                 warning (0, "comparison of promoted ~unsigned with unsigned");
3843             }
3844         }
3845     }
3846
3847   /* If CONVERTED is zero, both args will be converted to type RESULT_TYPE.
3848      Then the expression will be built.
3849      It will be given type FINAL_TYPE if that is nonzero;
3850      otherwise, it will be given type RESULT_TYPE.  */
3851
3852   /* Issue warnings about peculiar, but valid, uses of NULL.  */
3853   if (/* 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       && (/* If OP0 is NULL and OP1 is not a pointer, or vice versa.  */
3857           (orig_op0 == null_node
3858            && TREE_CODE (TREE_TYPE (op1)) != POINTER_TYPE)
3859           /* Or vice versa.  */
3860           || (orig_op1 == null_node
3861               && TREE_CODE (TREE_TYPE (op0)) != POINTER_TYPE)
3862           /* Or, both are NULL and the operation was not a comparison.  */
3863           || (orig_op0 == null_node && orig_op1 == null_node
3864               && code != EQ_EXPR && code != NE_EXPR)))
3865     /* Some sort of arithmetic operation involving NULL was
3866        performed.  Note that pointer-difference and pointer-addition
3867        have already been handled above, and so we don't end up here in
3868        that case.  */
3869     warning (0, "NULL used in arithmetic");
3870
3871   if (! converted)
3872     {
3873       if (TREE_TYPE (op0) != result_type)
3874         op0 = cp_convert (result_type, op0);
3875       if (TREE_TYPE (op1) != result_type)
3876         op1 = cp_convert (result_type, op1);
3877
3878       if (op0 == error_mark_node || op1 == error_mark_node)
3879         return error_mark_node;
3880     }
3881
3882   if (build_type == NULL_TREE)
3883     build_type = result_type;
3884
3885   result = build2 (resultcode, build_type, op0, op1);
3886   result = fold_if_not_in_template (result);
3887   if (final_type != 0)
3888     result = cp_convert (final_type, result);
3889
3890   if (TREE_OVERFLOW_P (result) 
3891       && !TREE_OVERFLOW_P (op0) 
3892       && !TREE_OVERFLOW_P (op1))
3893     overflow_warning (result);
3894
3895   return result;
3896 }
3897 \f
3898 /* Return a tree for the sum or difference (RESULTCODE says which)
3899    of pointer PTROP and integer INTOP.  */
3900
3901 static tree
3902 cp_pointer_int_sum (enum tree_code resultcode, tree ptrop, tree intop)
3903 {
3904   tree res_type = TREE_TYPE (ptrop);
3905
3906   /* pointer_int_sum() uses size_in_bytes() on the TREE_TYPE(res_type)
3907      in certain circumstance (when it's valid to do so).  So we need
3908      to make sure it's complete.  We don't need to check here, if we
3909      can actually complete it at all, as those checks will be done in
3910      pointer_int_sum() anyway.  */
3911   complete_type (TREE_TYPE (res_type));
3912
3913   return pointer_int_sum (resultcode, ptrop,
3914                           fold_if_not_in_template (intop));
3915 }
3916
3917 /* Return a tree for the difference of pointers OP0 and OP1.
3918    The resulting tree has type int.  */
3919
3920 static tree
3921 pointer_diff (tree op0, tree op1, tree ptrtype)
3922 {
3923   tree result;
3924   tree restype = ptrdiff_type_node;
3925   tree target_type = TREE_TYPE (ptrtype);
3926
3927   if (!complete_type_or_else (target_type, NULL_TREE))
3928     return error_mark_node;
3929
3930   if (pedantic || warn_pointer_arith)
3931     {
3932       if (TREE_CODE (target_type) == VOID_TYPE)
3933         pedwarn ("ISO C++ forbids using pointer of type %<void *%> in subtraction");
3934       if (TREE_CODE (target_type) == FUNCTION_TYPE)
3935         pedwarn ("ISO C++ forbids using pointer to a function in subtraction");
3936       if (TREE_CODE (target_type) == METHOD_TYPE)
3937         pedwarn ("ISO C++ forbids using pointer to a method in subtraction");
3938     }
3939
3940   /* First do the subtraction as integers;
3941      then drop through to build the divide operator.  */
3942
3943   op0 = cp_build_binary_op (MINUS_EXPR,
3944                             cp_convert (restype, op0),
3945                             cp_convert (restype, op1));
3946
3947   /* This generates an error if op1 is a pointer to an incomplete type.  */
3948   if (!COMPLETE_TYPE_P (TREE_TYPE (TREE_TYPE (op1))))
3949     error ("invalid use of a pointer to an incomplete type in pointer arithmetic");
3950
3951   op1 = (TYPE_PTROB_P (ptrtype)
3952          ? size_in_bytes (target_type)
3953          : integer_one_node);
3954
3955   /* Do the division.  */
3956
3957   result = build2 (EXACT_DIV_EXPR, restype, op0, cp_convert (restype, op1));
3958   return fold_if_not_in_template (result);
3959 }
3960 \f
3961 /* Construct and perhaps optimize a tree representation
3962    for a unary operation.  CODE, a tree_code, specifies the operation
3963    and XARG is the operand.  */
3964
3965 tree
3966 build_x_unary_op (enum tree_code code, tree xarg)
3967 {
3968   tree orig_expr = xarg;
3969   tree exp;
3970   int ptrmem = 0;
3971
3972   if (processing_template_decl)
3973     {
3974       if (type_dependent_expression_p (xarg))
3975         return build_min_nt (code, xarg, NULL_TREE);
3976
3977       xarg = build_non_dependent_expr (xarg);
3978     }
3979
3980   exp = NULL_TREE;
3981
3982   /* [expr.unary.op] says:
3983
3984        The address of an object of incomplete type can be taken.
3985
3986      (And is just the ordinary address operator, not an overloaded
3987      "operator &".)  However, if the type is a template
3988      specialization, we must complete the type at this point so that
3989      an overloaded "operator &" will be available if required.  */
3990   if (code == ADDR_EXPR
3991       && TREE_CODE (xarg) != TEMPLATE_ID_EXPR
3992       && ((CLASS_TYPE_P (TREE_TYPE (xarg))
3993            && !COMPLETE_TYPE_P (complete_type (TREE_TYPE (xarg))))
3994           || (TREE_CODE (xarg) == OFFSET_REF)))
3995     /* Don't look for a function.  */;
3996   else
3997     exp = build_new_op (code, LOOKUP_NORMAL, xarg, NULL_TREE, NULL_TREE,
3998                         /*overloaded_p=*/NULL);
3999   if (!exp && code == ADDR_EXPR)
4000     {
4001       /*  A pointer to member-function can be formed only by saying
4002           &X::mf.  */
4003       if (!flag_ms_extensions && TREE_CODE (TREE_TYPE (xarg)) == METHOD_TYPE
4004           && (TREE_CODE (xarg) != OFFSET_REF || !PTRMEM_OK_P (xarg)))
4005         {
4006           if (TREE_CODE (xarg) != OFFSET_REF
4007               || !TYPE_P (TREE_OPERAND (xarg, 0)))
4008             {
4009               error ("invalid use of %qE to form a pointer-to-member-function",
4010                      xarg);
4011               if (TREE_CODE (xarg) != OFFSET_REF)
4012                 inform ("  a qualified-id is required");
4013               return error_mark_node;
4014             }
4015           else
4016             {
4017               error ("parentheses around %qE cannot be used to form a"
4018                      " pointer-to-member-function",
4019                      xarg);
4020               PTRMEM_OK_P (xarg) = 1;
4021             }
4022         }
4023
4024       if (TREE_CODE (xarg) == OFFSET_REF)
4025         {
4026           ptrmem = PTRMEM_OK_P (xarg);
4027
4028           if (!ptrmem && !flag_ms_extensions
4029               && TREE_CODE (TREE_TYPE (TREE_OPERAND (xarg, 1))) == METHOD_TYPE)
4030             {
4031               /* A single non-static member, make sure we don't allow a
4032                  pointer-to-member.  */
4033               xarg = build2 (OFFSET_REF, TREE_TYPE (xarg),
4034                              TREE_OPERAND (xarg, 0),
4035                              ovl_cons (TREE_OPERAND (xarg, 1), NULL_TREE));
4036               PTRMEM_OK_P (xarg) = ptrmem;
4037             }
4038         }
4039       else if (TREE_CODE (xarg) == TARGET_EXPR)
4040         warning (0, "taking address of temporary");
4041       exp = build_unary_op (ADDR_EXPR, xarg, 0);
4042     }
4043
4044   if (processing_template_decl && exp != error_mark_node)
4045     exp = build_min_non_dep (code, exp, orig_expr,
4046                              /*For {PRE,POST}{INC,DEC}REMENT_EXPR*/NULL_TREE);
4047   if (TREE_CODE (exp) == ADDR_EXPR)
4048     PTRMEM_OK_P (exp) = ptrmem;
4049   return exp;
4050 }
4051
4052 /* Like c_common_truthvalue_conversion, but handle pointer-to-member
4053    constants, where a null value is represented by an INTEGER_CST of
4054    -1.  */
4055
4056 tree
4057 cp_truthvalue_conversion (tree expr)
4058 {
4059   tree type = TREE_TYPE (expr);
4060   if (TYPE_PTRMEM_P (type))
4061     return build_binary_op (NE_EXPR, expr, integer_zero_node, 1);
4062   else
4063     return c_common_truthvalue_conversion (expr);
4064 }
4065
4066 /* Just like cp_truthvalue_conversion, but we want a CLEANUP_POINT_EXPR.  */
4067
4068 tree
4069 condition_conversion (tree expr)
4070 {
4071   tree t;
4072   if (processing_template_decl)
4073     return expr;
4074   t = perform_implicit_conversion (boolean_type_node, expr);
4075   t = fold_build_cleanup_point_expr (boolean_type_node, t);
4076   return t;
4077 }
4078
4079 /* Return an ADDR_EXPR giving the address of T.  This function
4080    attempts no optimizations or simplifications; it is a low-level
4081    primitive.  */
4082
4083 tree
4084 build_address (tree t)
4085 {
4086   tree addr;
4087
4088   if (error_operand_p (t) || !cxx_mark_addressable (t))
4089     return error_mark_node;
4090
4091   addr = build1 (ADDR_EXPR, build_pointer_type (TREE_TYPE (t)), t);
4092
4093   return addr;
4094 }
4095
4096 /* Return a NOP_EXPR converting EXPR to TYPE.  */
4097
4098 tree
4099 build_nop (tree type, tree expr)
4100 {
4101   if (type == error_mark_node || error_operand_p (expr))
4102     return expr;
4103   return build1 (NOP_EXPR, type, expr);
4104 }
4105
4106 /* C++: Must handle pointers to members.
4107
4108    Perhaps type instantiation should be extended to handle conversion
4109    from aggregates to types we don't yet know we want?  (Or are those
4110    cases typically errors which should be reported?)
4111
4112    NOCONVERT nonzero suppresses the default promotions
4113    (such as from short to int).  */
4114
4115 tree
4116 build_unary_op (enum tree_code code, tree xarg, int noconvert)
4117 {
4118   /* No default_conversion here.  It causes trouble for ADDR_EXPR.  */
4119   tree arg = xarg;
4120   tree argtype = 0;
4121   const char *errstring = NULL;
4122   tree val;
4123   const char *invalid_op_diag;
4124
4125   if (arg == error_mark_node)
4126     return error_mark_node;
4127
4128   if ((invalid_op_diag
4129        = targetm.invalid_unary_op ((code == UNARY_PLUS_EXPR
4130                                     ? CONVERT_EXPR
4131                                     : code),
4132                                    TREE_TYPE (xarg))))
4133     {
4134       error (invalid_op_diag, "");
4135       return error_mark_node;
4136     }
4137
4138   switch (code)
4139     {
4140     case UNARY_PLUS_EXPR:
4141     case NEGATE_EXPR:
4142       {
4143         int flags = WANT_ARITH | WANT_ENUM;
4144         /* Unary plus (but not unary minus) is allowed on pointers.  */
4145         if (code == UNARY_PLUS_EXPR)
4146           flags |= WANT_POINTER;
4147         arg = build_expr_type_conversion (flags, arg, true);
4148         if (!arg)
4149           errstring = (code == NEGATE_EXPR
4150                        ? "wrong type argument to unary minus"
4151                        : "wrong type argument to unary plus");
4152         else
4153           {
4154             if (!noconvert && CP_INTEGRAL_TYPE_P (TREE_TYPE (arg)))
4155               arg = perform_integral_promotions (arg);
4156
4157             /* Make sure the result is not an lvalue: a unary plus or minus
4158                expression is always a rvalue.  */
4159             arg = rvalue (arg);
4160           }
4161       }
4162       break;
4163
4164     case BIT_NOT_EXPR:
4165       if (TREE_CODE (TREE_TYPE (arg)) == COMPLEX_TYPE)
4166         {
4167           code = CONJ_EXPR;
4168           if (!noconvert)
4169             arg = default_conversion (arg);
4170         }
4171       else if (!(arg = build_expr_type_conversion (WANT_INT | WANT_ENUM
4172                                                    | WANT_VECTOR,
4173                                                    arg, true)))
4174         errstring = "wrong type argument to bit-complement";
4175       else if (!noconvert && CP_INTEGRAL_TYPE_P (TREE_TYPE (arg)))
4176         arg = perform_integral_promotions (arg);
4177       break;
4178
4179     case ABS_EXPR:
4180       if (!(arg = build_expr_type_conversion (WANT_ARITH | WANT_ENUM, arg, true)))
4181         errstring = "wrong type argument to abs";
4182       else if (!noconvert)
4183         arg = default_conversion (arg);
4184       break;
4185
4186     case CONJ_EXPR:
4187       /* Conjugating a real value is a no-op, but allow it anyway.  */
4188       if (!(arg = build_expr_type_conversion (WANT_ARITH | WANT_ENUM, arg, true)))
4189         errstring = "wrong type argument to conjugation";
4190       else if (!noconvert)
4191         arg = default_conversion (arg);
4192       break;
4193
4194     case TRUTH_NOT_EXPR:
4195       arg = perform_implicit_conversion (boolean_type_node, arg);
4196       val = invert_truthvalue (arg);
4197       if (arg != error_mark_node)
4198         return val;
4199       errstring = "in argument to unary !";
4200       break;
4201
4202     case NOP_EXPR:
4203       break;
4204
4205     case REALPART_EXPR:
4206       if (TREE_CODE (arg) == COMPLEX_CST)
4207         return TREE_REALPART (arg);
4208       else if (TREE_CODE (TREE_TYPE (arg)) == COMPLEX_TYPE)
4209         {
4210           arg = build1 (REALPART_EXPR, TREE_TYPE (TREE_TYPE (arg)), arg);
4211           return fold_if_not_in_template (arg);
4212         }
4213       else
4214         return arg;
4215
4216     case IMAGPART_EXPR:
4217       if (TREE_CODE (arg) == COMPLEX_CST)
4218         return TREE_IMAGPART (arg);
4219       else if (TREE_CODE (TREE_TYPE (arg)) == COMPLEX_TYPE)
4220         {
4221           arg = build1 (IMAGPART_EXPR, TREE_TYPE (TREE_TYPE (arg)), arg);
4222           return fold_if_not_in_template (arg);
4223         }
4224       else
4225         return cp_convert (TREE_TYPE (arg), integer_zero_node);
4226
4227     case PREINCREMENT_EXPR:
4228     case POSTINCREMENT_EXPR:
4229     case PREDECREMENT_EXPR:
4230     case POSTDECREMENT_EXPR:
4231       /* Handle complex lvalues (when permitted)
4232          by reduction to simpler cases.  */
4233
4234       val = unary_complex_lvalue (code, arg);
4235       if (val != 0)
4236         return val;
4237
4238       /* Increment or decrement the real part of the value,
4239          and don't change the imaginary part.  */
4240       if (TREE_CODE (TREE_TYPE (arg)) == COMPLEX_TYPE)
4241         {
4242           tree real, imag;
4243
4244           arg = stabilize_reference (arg);
4245           real = build_unary_op (REALPART_EXPR, arg, 1);
4246           imag = build_unary_op (IMAGPART_EXPR, arg, 1);
4247           return build2 (COMPLEX_EXPR, TREE_TYPE (arg),
4248                          build_unary_op (code, real, 1), imag);
4249         }
4250
4251       /* Report invalid types.  */
4252
4253       if (!(arg = build_expr_type_conversion (WANT_ARITH | WANT_POINTER,
4254                                               arg, true)))
4255         {
4256           if (code == PREINCREMENT_EXPR)
4257             errstring ="no pre-increment operator for type";
4258           else if (code == POSTINCREMENT_EXPR)
4259             errstring ="no post-increment operator for type";
4260           else if (code == PREDECREMENT_EXPR)
4261             errstring ="no pre-decrement operator for type";
4262           else
4263             errstring ="no post-decrement operator for type";
4264           break;
4265         }
4266
4267       /* Report something read-only.  */
4268
4269       if (CP_TYPE_CONST_P (TREE_TYPE (arg))
4270           || TREE_READONLY (arg))
4271         readonly_error (arg, ((code == PREINCREMENT_EXPR
4272                                || code == POSTINCREMENT_EXPR)
4273                               ? "increment" : "decrement"),
4274                         0);
4275
4276       {
4277         tree inc;
4278         tree declared_type;
4279         tree result_type = TREE_TYPE (arg);
4280
4281         declared_type = unlowered_expr_type (arg);
4282
4283         arg = get_unwidened (arg, 0);
4284         argtype = TREE_TYPE (arg);
4285
4286         /* ARM $5.2.5 last annotation says this should be forbidden.  */
4287         if (TREE_CODE (argtype) == ENUMERAL_TYPE)
4288           pedwarn ("ISO C++ forbids %sing an enum",
4289                    (code == PREINCREMENT_EXPR || code == POSTINCREMENT_EXPR)
4290                    ? "increment" : "decrement");
4291
4292         /* Compute the increment.  */
4293
4294         if (TREE_CODE (argtype) == POINTER_TYPE)
4295           {
4296             tree type = complete_type (TREE_TYPE (argtype));
4297
4298             if (!COMPLETE_OR_VOID_TYPE_P (type))
4299               error ("cannot %s a pointer to incomplete type %qT",
4300                      ((code == PREINCREMENT_EXPR
4301                        || code == POSTINCREMENT_EXPR)
4302                       ? "increment" : "decrement"), TREE_TYPE (argtype));
4303             else if ((pedantic || warn_pointer_arith)
4304                      && !TYPE_PTROB_P (argtype))
4305               pedwarn ("ISO C++ forbids %sing a pointer of type %qT",
4306                        ((code == PREINCREMENT_EXPR
4307                          || code == POSTINCREMENT_EXPR)
4308                         ? "increment" : "decrement"), argtype);
4309             inc = cxx_sizeof_nowarn (TREE_TYPE (argtype));
4310           }
4311         else
4312           inc = integer_one_node;
4313
4314         inc = cp_convert (argtype, inc);
4315
4316         /* Handle incrementing a cast-expression.  */
4317
4318         switch (TREE_CODE (arg))
4319           {
4320           case NOP_EXPR:
4321           case CONVERT_EXPR:
4322           case FLOAT_EXPR:
4323           case FIX_TRUNC_EXPR:
4324           case FIX_FLOOR_EXPR:
4325           case FIX_ROUND_EXPR:
4326           case FIX_CEIL_EXPR:
4327             {
4328               tree incremented, modify, value, compound;
4329               if (! lvalue_p (arg) && pedantic)
4330                 pedwarn ("cast to non-reference type used as lvalue");
4331               arg = stabilize_reference (arg);
4332               if (code == PREINCREMENT_EXPR || code == PREDECREMENT_EXPR)
4333                 value = arg;
4334               else
4335                 value = save_expr (arg);
4336               incremented = build2 (((code == PREINCREMENT_EXPR
4337                                       || code == POSTINCREMENT_EXPR)
4338                                      ? PLUS_EXPR : MINUS_EXPR),
4339                                     argtype, value, inc);
4340
4341               modify = build_modify_expr (arg, NOP_EXPR, incremented);
4342               compound = build2 (COMPOUND_EXPR, TREE_TYPE (arg),
4343                                  modify, value);
4344
4345               /* Eliminate warning about unused result of + or -.  */
4346               TREE_NO_WARNING (compound) = 1;
4347               return compound;
4348             }
4349
4350           default:
4351             break;
4352           }
4353
4354         /* Complain about anything else that is not a true lvalue.  */
4355         if (!lvalue_or_else (arg, ((code == PREINCREMENT_EXPR
4356                                     || code == POSTINCREMENT_EXPR)
4357                                    ? lv_increment : lv_decrement)))
4358           return error_mark_node;
4359
4360         /* Forbid using -- on `bool'.  */
4361         if (same_type_p (declared_type, boolean_type_node))
4362           {
4363             if (code == POSTDECREMENT_EXPR || code == PREDECREMENT_EXPR)
4364               {
4365                 error ("invalid use of %<--%> on bool variable %qD", arg);
4366                 return error_mark_node;
4367               }
4368             val = boolean_increment (code, arg);
4369           }
4370         else
4371           val = build2 (code, TREE_TYPE (arg), arg, inc);
4372
4373         TREE_SIDE_EFFECTS (val) = 1;
4374         return cp_convert (result_type, val);
4375       }
4376
4377     case ADDR_EXPR:
4378       /* Note that this operation never does default_conversion
4379          regardless of NOCONVERT.  */
4380
4381       argtype = lvalue_type (arg);
4382
4383       if (TREE_CODE (arg) == OFFSET_REF)
4384         goto offset_ref;
4385
4386       if (TREE_CODE (argtype) == REFERENCE_TYPE)
4387         {
4388           tree type = build_pointer_type (TREE_TYPE (argtype));
4389           arg = build1 (CONVERT_EXPR, type, arg);
4390           return arg;
4391         }
4392       else if (pedantic && DECL_MAIN_P (arg))
4393         /* ARM $3.4 */
4394         pedwarn ("ISO C++ forbids taking address of function %<::main%>");
4395
4396       /* Let &* cancel out to simplify resulting code.  */
4397       if (TREE_CODE (arg) == INDIRECT_REF)
4398         {
4399           /* We don't need to have `current_class_ptr' wrapped in a
4400              NON_LVALUE_EXPR node.  */
4401           if (arg == current_class_ref)
4402             return current_class_ptr;
4403
4404           arg = TREE_OPERAND (arg, 0);
4405           if (TREE_CODE (TREE_TYPE (arg)) == REFERENCE_TYPE)
4406             {
4407               tree type = build_pointer_type (TREE_TYPE (TREE_TYPE (arg)));
4408               arg = build1 (CONVERT_EXPR, type, arg);
4409             }
4410           else
4411             /* Don't let this be an lvalue.  */
4412             arg = rvalue (arg);
4413           return arg;
4414         }
4415
4416       /* Uninstantiated types are all functions.  Taking the
4417          address of a function is a no-op, so just return the
4418          argument.  */
4419
4420       gcc_assert (TREE_CODE (arg) != IDENTIFIER_NODE
4421                   || !IDENTIFIER_OPNAME_P (arg));
4422
4423       if (TREE_CODE (arg) == COMPONENT_REF && type_unknown_p (arg)
4424           && !really_overloaded_fn (TREE_OPERAND (arg, 1)))
4425         {
4426           /* They're trying to take the address of a unique non-static
4427              member function.  This is ill-formed (except in MS-land),
4428              but let's try to DTRT.
4429              Note: We only handle unique functions here because we don't
4430              want to complain if there's a static overload; non-unique
4431              cases will be handled by instantiate_type.  But we need to
4432              handle this case here to allow casts on the resulting PMF.
4433              We could defer this in non-MS mode, but it's easier to give
4434              a useful error here.  */
4435
4436           /* Inside constant member functions, the `this' pointer
4437              contains an extra const qualifier.  TYPE_MAIN_VARIANT
4438              is used here to remove this const from the diagnostics
4439              and the created OFFSET_REF.  */
4440           tree base = TYPE_MAIN_VARIANT (TREE_TYPE (TREE_OPERAND (arg, 0)));
4441           tree fn = get_first_fn (TREE_OPERAND (arg, 1));
4442           mark_used (fn);
4443
4444           if (! flag_ms_extensions)
4445             {
4446               tree name = DECL_NAME (fn);
4447               if (current_class_type
4448                   && TREE_OPERAND (arg, 0) == current_class_ref)
4449                 /* An expression like &memfn.  */
4450                 pedwarn ("ISO C++ forbids taking the address of an unqualified"
4451                          " or parenthesized non-static member function to form"
4452                          " a pointer to member function.  Say %<&%T::%D%>",
4453                          base, name);
4454               else
4455                 pedwarn ("ISO C++ forbids taking the address of a bound member"
4456                          " function to form a pointer to member function."
4457                          "  Say %<&%T::%D%>",
4458                          base, name);
4459             }
4460           arg = build_offset_ref (base, fn, /*address_p=*/true);
4461         }
4462
4463     offset_ref:
4464       if (type_unknown_p (arg))
4465         return build1 (ADDR_EXPR, unknown_type_node, arg);
4466
4467       /* Handle complex lvalues (when permitted)
4468          by reduction to simpler cases.  */
4469       val = unary_complex_lvalue (code, arg);
4470       if (val != 0)
4471         return val;
4472
4473       switch (TREE_CODE (arg))
4474         {
4475         case NOP_EXPR:
4476         case CONVERT_EXPR:
4477         case FLOAT_EXPR:
4478         case FIX_TRUNC_EXPR:
4479         case FIX_FLOOR_EXPR:
4480         case FIX_ROUND_EXPR:
4481         case FIX_CEIL_EXPR:
4482           if (! lvalue_p (arg) && pedantic)
4483             pedwarn ("ISO C++ forbids taking the address of a cast to a non-lvalue expression");
4484           break;
4485
4486         case BASELINK:
4487           arg = BASELINK_FUNCTIONS (arg);
4488           /* Fall through.  */
4489
4490         case OVERLOAD:
4491           arg = OVL_CURRENT (arg);
4492           break;
4493
4494         case OFFSET_REF:
4495           /* Turn a reference to a non-static data member into a
4496              pointer-to-member.  */
4497           {
4498             tree type;
4499             tree t;
4500
4501             if (!PTRMEM_OK_P (arg))
4502               return build_unary_op (code, arg, 0);
4503
4504             t = TREE_OPERAND (arg, 1);
4505             if (TREE_CODE (TREE_TYPE (t)) == REFERENCE_TYPE)
4506               {
4507                 error ("cannot create pointer to reference member %qD", t);
4508                 return error_mark_node;
4509               }
4510
4511             type = build_ptrmem_type (context_for_name_lookup (t),
4512                                       TREE_TYPE (t));
4513             t = make_ptrmem_cst (type, TREE_OPERAND (arg, 1));
4514             return t;
4515           }
4516
4517         default:
4518           break;
4519         }
4520
4521       /* Anything not already handled and not a true memory reference
4522          is an error.  */
4523       if (TREE_CODE (argtype) != FUNCTION_TYPE
4524           && TREE_CODE (argtype) != METHOD_TYPE
4525           && TREE_CODE (arg) != OFFSET_REF
4526           && !lvalue_or_else (arg, lv_addressof))
4527         return error_mark_node;
4528
4529       if (argtype != error_mark_node)
4530         argtype = build_pointer_type (argtype);
4531
4532       /* In a template, we are processing a non-dependent expression
4533          so we can just form an ADDR_EXPR with the correct type.  */
4534       if (processing_template_decl)
4535         {
4536           val = build_address (arg);
4537           if (TREE_CODE (arg) == OFFSET_REF)
4538             PTRMEM_OK_P (val) = PTRMEM_OK_P (arg);
4539           return val;
4540         }
4541
4542       if (TREE_CODE (arg) != COMPONENT_REF)
4543         {
4544           val = build_address (arg);
4545           if (TREE_CODE (arg) == OFFSET_REF)
4546             PTRMEM_OK_P (val) = PTRMEM_OK_P (arg);
4547         }
4548       else if (TREE_CODE (TREE_OPERAND (arg, 1)) == BASELINK)
4549         {
4550           tree fn = BASELINK_FUNCTIONS (TREE_OPERAND (arg, 1));
4551
4552           /* We can only get here with a single static member
4553              function.  */
4554           gcc_assert (TREE_CODE (fn) == FUNCTION_DECL
4555                       && DECL_STATIC_FUNCTION_P (fn));
4556           mark_used (fn);
4557           val = build_address (fn);
4558           if (TREE_SIDE_EFFECTS (TREE_OPERAND (arg, 0)))
4559             /* Do not lose object's side effects.  */
4560             val = build2 (COMPOUND_EXPR, TREE_TYPE (val),
4561                           TREE_OPERAND (arg, 0), val);
4562         }
4563       else if (DECL_C_BIT_FIELD (TREE_OPERAND (arg, 1)))
4564         {
4565           error ("attempt to take address of bit-field structure member %qD",
4566                  TREE_OPERAND (arg, 1));
4567           return error_mark_node;
4568         }
4569       else
4570         {
4571           tree object = TREE_OPERAND (arg, 0);
4572           tree field = TREE_OPERAND (arg, 1);
4573           gcc_assert (same_type_ignoring_top_level_qualifiers_p
4574                       (TREE_TYPE (object), decl_type_context (field)));
4575           val = build_address (arg);
4576         }
4577
4578       if (TREE_CODE (argtype) == POINTER_TYPE
4579           && TREE_CODE (TREE_TYPE (argtype)) == METHOD_TYPE)
4580         {
4581           build_ptrmemfunc_type (argtype);
4582           val = build_ptrmemfunc (argtype, val, 0,
4583                                   /*c_cast_p=*/false);
4584         }
4585
4586       return val;
4587
4588     default:
4589       break;
4590     }
4591
4592   if (!errstring)
4593     {
4594       if (argtype == 0)
4595         argtype = TREE_TYPE (arg);
4596       return fold_if_not_in_template (build1 (code, argtype, arg));
4597     }
4598
4599   error ("%s", errstring);
4600   return error_mark_node;
4601 }
4602
4603 /* Apply unary lvalue-demanding operator CODE to the expression ARG
4604    for certain kinds of expressions which are not really lvalues
4605    but which we can accept as lvalues.
4606
4607    If ARG is not a kind of expression we can handle, return
4608    NULL_TREE.  */
4609
4610 tree
4611 unary_complex_lvalue (enum tree_code code, tree arg)
4612 {
4613   /* Inside a template, making these kinds of adjustments is
4614      pointless; we are only concerned with the type of the
4615      expression.  */
4616   if (processing_template_decl)
4617     return NULL_TREE;
4618
4619   /* Handle (a, b) used as an "lvalue".  */
4620   if (TREE_CODE (arg) == COMPOUND_EXPR)
4621     {
4622       tree real_result = build_unary_op (code, TREE_OPERAND (arg, 1), 0);
4623       return build2 (COMPOUND_EXPR, TREE_TYPE (real_result),
4624                      TREE_OPERAND (arg, 0), real_result);
4625     }
4626
4627   /* Handle (a ? b : c) used as an "lvalue".  */
4628   if (TREE_CODE (arg) == COND_EXPR
4629       || TREE_CODE (arg) == MIN_EXPR || TREE_CODE (arg) == MAX_EXPR)
4630     return rationalize_conditional_expr (code, arg);
4631
4632   /* Handle (a = b), (++a), and (--a) used as an "lvalue".  */
4633   if (TREE_CODE (arg) == MODIFY_EXPR
4634       || TREE_CODE (arg) == PREINCREMENT_EXPR
4635       || TREE_CODE (arg) == PREDECREMENT_EXPR)
4636     {
4637       tree lvalue = TREE_OPERAND (arg, 0);
4638       if (TREE_SIDE_EFFECTS (lvalue))
4639         {
4640           lvalue = stabilize_reference (lvalue);
4641           arg = build2 (TREE_CODE (arg), TREE_TYPE (arg),
4642                         lvalue, TREE_OPERAND (arg, 1));
4643         }
4644       return unary_complex_lvalue
4645         (code, build2 (COMPOUND_EXPR, TREE_TYPE (lvalue), arg, lvalue));
4646     }
4647
4648   if (code != ADDR_EXPR)
4649     return NULL_TREE;
4650
4651   /* Handle (a = b) used as an "lvalue" for `&'.  */
4652   if (TREE_CODE (arg) == MODIFY_EXPR
4653       || TREE_CODE (arg) == INIT_EXPR)
4654     {
4655       tree real_result = build_unary_op (code, TREE_OPERAND (arg, 0), 0);
4656       arg = build2 (COMPOUND_EXPR, TREE_TYPE (real_result),
4657                     arg, real_result);
4658       TREE_NO_WARNING (arg) = 1;
4659       return arg;
4660     }
4661
4662   if (TREE_CODE (TREE_TYPE (arg)) == FUNCTION_TYPE
4663       || TREE_CODE (TREE_TYPE (arg)) == METHOD_TYPE
4664       || TREE_CODE (arg) == OFFSET_REF)
4665     return NULL_TREE;
4666
4667   /* We permit compiler to make function calls returning
4668      objects of aggregate type look like lvalues.  */
4669   {
4670     tree targ = arg;
4671
4672     if (TREE_CODE (targ) == SAVE_EXPR)
4673       targ = TREE_OPERAND (targ, 0);
4674
4675     if (TREE_CODE (targ) == CALL_EXPR && IS_AGGR_TYPE (TREE_TYPE (targ)))
4676       {
4677         if (TREE_CODE (arg) == SAVE_EXPR)
4678           targ = arg;
4679         else
4680           targ = build_cplus_new (TREE_TYPE (arg), arg);
4681         return build1 (ADDR_EXPR, build_pointer_type (TREE_TYPE (arg)), targ);
4682       }
4683
4684     if (TREE_CODE (arg) == SAVE_EXPR && TREE_CODE (targ) == INDIRECT_REF)
4685       return build3 (SAVE_EXPR, build_pointer_type (TREE_TYPE (arg)),
4686                      TREE_OPERAND (targ, 0), current_function_decl, NULL);
4687   }
4688
4689   /* Don't let anything else be handled specially.  */
4690   return NULL_TREE;
4691 }
4692 \f
4693 /* Mark EXP saying that we need to be able to take the
4694    address of it; it should not be allocated in a register.
4695    Value is true if successful.
4696
4697    C++: we do not allow `current_class_ptr' to be addressable.  */
4698
4699 bool
4700 cxx_mark_addressable (tree exp)
4701 {
4702   tree x = exp;
4703
4704   while (1)
4705     switch (TREE_CODE (x))
4706       {
4707       case ADDR_EXPR:
4708       case COMPONENT_REF:
4709       case ARRAY_REF:
4710       case REALPART_EXPR:
4711       case IMAGPART_EXPR:
4712         x = TREE_OPERAND (x, 0);
4713         break;
4714
4715       case PARM_DECL:
4716         if (x == current_class_ptr)
4717           {
4718             error ("cannot take the address of %<this%>, which is an rvalue expression");
4719             TREE_ADDRESSABLE (x) = 1; /* so compiler doesn't die later.  */
4720             return true;
4721           }
4722         /* Fall through.  */
4723
4724       case VAR_DECL:
4725         /* Caller should not be trying to mark initialized
4726            constant fields addressable.  */
4727         gcc_assert (DECL_LANG_SPECIFIC (x) == 0
4728                     || DECL_IN_AGGR_P (x) == 0
4729                     || TREE_STATIC (x)
4730                     || DECL_EXTERNAL (x));
4731         /* Fall through.  */
4732
4733       case CONST_DECL:
4734       case RESULT_DECL:
4735         if (DECL_REGISTER (x) && !TREE_ADDRESSABLE (x)
4736             && !DECL_ARTIFICIAL (x))
4737           {
4738             if (TREE_CODE (x) == VAR_DECL && DECL_HARD_REGISTER (x))
4739               {
4740                 error
4741                   ("address of explicit register variable %qD requested", x);
4742                 return false;
4743               }
4744             else if (extra_warnings)
4745               warning
4746                 (OPT_Wextra, "address requested for %qD, which is declared %<register%>", x);
4747           }
4748         TREE_ADDRESSABLE (x) = 1;
4749         return true;
4750
4751       case FUNCTION_DECL:
4752         TREE_ADDRESSABLE (x) = 1;
4753         return true;
4754
4755       case CONSTRUCTOR:
4756         TREE_ADDRESSABLE (x) = 1;
4757         return true;
4758
4759       case TARGET_EXPR:
4760         TREE_ADDRESSABLE (x) = 1;
4761         cxx_mark_addressable (TREE_OPERAND (x, 0));
4762         return true;
4763
4764       default:
4765         return true;
4766     }
4767 }
4768 \f
4769 /* Build and return a conditional expression IFEXP ? OP1 : OP2.  */
4770
4771 tree
4772 build_x_conditional_expr (tree ifexp, tree op1, tree op2)
4773 {
4774   tree orig_ifexp = ifexp;
4775   tree orig_op1 = op1;
4776   tree orig_op2 = op2;
4777   tree expr;
4778
4779   if (processing_template_decl)
4780     {
4781       /* The standard says that the expression is type-dependent if
4782          IFEXP is type-dependent, even though the eventual type of the
4783          expression doesn't dependent on IFEXP.  */
4784       if (type_dependent_expression_p (ifexp)
4785           /* As a GNU extension, the middle operand may be omitted.  */
4786           || (op1 && type_dependent_expression_p (op1))
4787           || type_dependent_expression_p (op2))
4788         return build_min_nt (COND_EXPR, ifexp, op1, op2);
4789       ifexp = build_non_dependent_expr (ifexp);
4790       if (op1)
4791         op1 = build_non_dependent_expr (op1);
4792       op2 = build_non_dependent_expr (op2);
4793     }
4794
4795   expr = build_conditional_expr (ifexp, op1, op2);
4796   if (processing_template_decl && expr != error_mark_node)
4797     return build_min_non_dep (COND_EXPR, expr,
4798                               orig_ifexp, orig_op1, orig_op2);
4799   return expr;
4800 }
4801 \f
4802 /* Given a list of expressions, return a compound expression
4803    that performs them all and returns the value of the last of them.  */
4804
4805 tree build_x_compound_expr_from_list (tree list, const char *msg)
4806 {
4807   tree expr = TREE_VALUE (list);
4808
4809   if (TREE_CHAIN (list))
4810     {
4811       if (msg)
4812         pedwarn ("%s expression list treated as compound expression", msg);
4813
4814       for (list = TREE_CHAIN (list); list; list = TREE_CHAIN (list))
4815         expr = build_x_compound_expr (expr, TREE_VALUE (list));
4816     }
4817
4818   return expr;
4819 }
4820
4821 /* Handle overloading of the ',' operator when needed.  */
4822
4823 tree
4824 build_x_compound_expr (tree op1, tree op2)
4825 {
4826   tree result;
4827   tree orig_op1 = op1;
4828   tree orig_op2 = op2;
4829
4830   if (processing_template_decl)
4831     {
4832       if (type_dependent_expression_p (op1)
4833           || type_dependent_expression_p (op2))
4834         return build_min_nt (COMPOUND_EXPR, op1, op2);
4835       op1 = build_non_dependent_expr (op1);
4836       op2 = build_non_dependent_expr (op2);
4837     }
4838
4839   result = build_new_op (COMPOUND_EXPR, LOOKUP_NORMAL, op1, op2, NULL_TREE,
4840                          /*overloaded_p=*/NULL);
4841   if (!result)
4842     result = build_compound_expr (op1, op2);
4843
4844   if (processing_template_decl && result != error_mark_node)
4845     return build_min_non_dep (COMPOUND_EXPR, result, orig_op1, orig_op2);
4846
4847   return result;
4848 }
4849
4850 /* Build a compound expression.  */
4851
4852 tree
4853 build_compound_expr (tree lhs, tree rhs)
4854 {
4855   lhs = convert_to_void (lhs, "left-hand operand of comma");
4856
4857   if (lhs == error_mark_node || rhs == error_mark_node)
4858     return error_mark_node;
4859
4860   if (TREE_CODE (rhs) == TARGET_EXPR)
4861     {
4862       /* If the rhs is a TARGET_EXPR, then build the compound
4863          expression inside the target_expr's initializer. This
4864          helps the compiler to eliminate unnecessary temporaries.  */
4865       tree init = TREE_OPERAND (rhs, 1);
4866
4867       init = build2 (COMPOUND_EXPR, TREE_TYPE (init), lhs, init);
4868       TREE_OPERAND (rhs, 1) = init;
4869
4870       return rhs;
4871     }
4872
4873   return build2 (COMPOUND_EXPR, TREE_TYPE (rhs), lhs, rhs);
4874 }
4875
4876 /* Issue a diagnostic message if casting from SRC_TYPE to DEST_TYPE
4877    casts away constness.  DIAG_FN gives the function to call if we
4878    need to issue a diagnostic; if it is NULL, no diagnostic will be
4879    issued.  DESCRIPTION explains what operation is taking place.  */
4880
4881 static void
4882 check_for_casting_away_constness (tree src_type, tree dest_type,
4883                                   void (*diag_fn)(const char *, ...) ATTRIBUTE_GCC_CXXDIAG(1,2),
4884                                   const char *description)
4885 {
4886   if (diag_fn && casts_away_constness (src_type, dest_type))
4887     diag_fn ("%s from type %qT to type %qT casts away constness",
4888              description, src_type, dest_type);
4889 }
4890
4891 /* Convert EXPR (an expression with pointer-to-member type) to TYPE
4892    (another pointer-to-member type in the same hierarchy) and return
4893    the converted expression.  If ALLOW_INVERSE_P is permitted, a
4894    pointer-to-derived may be converted to pointer-to-base; otherwise,
4895    only the other direction is permitted.  If C_CAST_P is true, this
4896    conversion is taking place as part of a C-style cast.  */
4897
4898 tree
4899 convert_ptrmem (tree type, tree expr, bool allow_inverse_p,
4900                 bool c_cast_p)
4901 {
4902   if (TYPE_PTRMEM_P (type))
4903     {
4904       tree delta;
4905
4906       if (TREE_CODE (expr) == PTRMEM_CST)
4907         expr = cplus_expand_constant (expr);
4908       delta = get_delta_difference (TYPE_PTRMEM_CLASS_TYPE (TREE_TYPE (expr)),
4909                                     TYPE_PTRMEM_CLASS_TYPE (type),
4910                                     allow_inverse_p,
4911                                     c_cast_p);
4912       if (!integer_zerop (delta))
4913         expr = cp_build_binary_op (PLUS_EXPR,
4914                                    build_nop (ptrdiff_type_node, expr),
4915                                    delta);
4916       return build_nop (type, expr);
4917     }
4918   else
4919     return build_ptrmemfunc (TYPE_PTRMEMFUNC_FN_TYPE (type), expr,
4920                              allow_inverse_p, c_cast_p);
4921 }
4922
4923 /* If EXPR is an INTEGER_CST and ORIG is an arithmetic constant, return
4924    a version of EXPR that has TREE_OVERFLOW and/or TREE_CONSTANT_OVERFLOW
4925    set iff they are set in ORIG.  Otherwise, return EXPR unchanged.  */
4926
4927 static tree
4928 ignore_overflows (tree expr, tree orig)
4929 {
4930   if (TREE_CODE (expr) == INTEGER_CST
4931       && CONSTANT_CLASS_P (orig)
4932       && TREE_CODE (orig) != STRING_CST
4933       && (TREE_OVERFLOW (expr) != TREE_OVERFLOW (orig)
4934           || TREE_CONSTANT_OVERFLOW (expr)
4935              != TREE_CONSTANT_OVERFLOW (orig)))
4936     {
4937       if (!TREE_OVERFLOW (orig) && !TREE_CONSTANT_OVERFLOW (orig))
4938         /* Ensure constant sharing.  */
4939         expr = build_int_cst_wide (TREE_TYPE (expr),
4940                                    TREE_INT_CST_LOW (expr),
4941                                    TREE_INT_CST_HIGH (expr));
4942       else
4943         {
4944           /* Avoid clobbering a shared constant.  */
4945           expr = copy_node (expr);
4946           TREE_OVERFLOW (expr) = TREE_OVERFLOW (orig);
4947           TREE_CONSTANT_OVERFLOW (expr)
4948             = TREE_CONSTANT_OVERFLOW (orig);
4949         }
4950     }
4951   return expr;
4952 }
4953
4954 /* Perform a static_cast from EXPR to TYPE.  When C_CAST_P is true,
4955    this static_cast is being attempted as one of the possible casts
4956    allowed by a C-style cast.  (In that case, accessibility of base
4957    classes is not considered, and it is OK to cast away
4958    constness.)  Return the result of the cast.  *VALID_P is set to
4959    indicate whether or not the cast was valid.  */
4960
4961 static tree
4962 build_static_cast_1 (tree type, tree expr, bool c_cast_p,
4963                      bool *valid_p)
4964 {
4965   tree intype;
4966   tree result;
4967   tree orig;
4968   void (*diag_fn)(const char*, ...) ATTRIBUTE_GCC_CXXDIAG(1,2);
4969   const char *desc;
4970
4971   /* Assume the cast is valid.  */
4972   *valid_p = true;
4973
4974   intype = TREE_TYPE (expr);
4975
4976   /* Save casted types in the function's used types hash table.  */
4977   used_types_insert (type);
4978
4979   /* Determine what to do when casting away constness.  */
4980   if (c_cast_p)
4981     {
4982       /* C-style casts are allowed to cast away constness.  With
4983          WARN_CAST_QUAL, we still want to issue a warning.  */
4984       diag_fn = warn_cast_qual ? warning0 : NULL;
4985       desc = "cast";
4986     }
4987   else
4988     {
4989       /* A static_cast may not cast away constness.  */
4990       diag_fn = error;
4991       desc = "static_cast";
4992     }
4993
4994   /* [expr.static.cast]
4995
4996      An lvalue of type "cv1 B", where B is a class type, can be cast
4997      to type "reference to cv2 D", where D is a class derived (clause
4998      _class.derived_) from B, if a valid standard conversion from
4999      "pointer to D" to "pointer to B" exists (_conv.ptr_), cv2 is the
5000      same cv-qualification as, or greater cv-qualification than, cv1,
5001      and B is not a virtual base class of D.  */
5002   /* We check this case before checking the validity of "TYPE t =
5003      EXPR;" below because for this case:
5004
5005        struct B {};
5006        struct D : public B { D(const B&); };
5007        extern B& b;
5008        void f() { static_cast<const D&>(b); }
5009
5010      we want to avoid constructing a new D.  The standard is not
5011      completely clear about this issue, but our interpretation is
5012      consistent with other compilers.  */
5013   if (TREE_CODE (type) == REFERENCE_TYPE
5014       && CLASS_TYPE_P (TREE_TYPE (type))
5015       && CLASS_TYPE_P (intype)
5016       && real_lvalue_p (expr)
5017       && DERIVED_FROM_P (intype, TREE_TYPE (type))
5018       && can_convert (build_pointer_type (TYPE_MAIN_VARIANT (intype)),
5019                       build_pointer_type (TYPE_MAIN_VARIANT
5020                                           (TREE_TYPE (type))))
5021       && (c_cast_p
5022           || at_least_as_qualified_p (TREE_TYPE (type), intype)))
5023     {
5024       tree base;
5025
5026       /* There is a standard conversion from "D*" to "B*" even if "B"
5027          is ambiguous or inaccessible.  If this is really a
5028          static_cast, then we check both for inaccessibility and
5029          ambiguity.  However, if this is a static_cast being performed
5030          because the user wrote a C-style cast, then accessibility is
5031          not considered.  */
5032       base = lookup_base (TREE_TYPE (type), intype,
5033                           c_cast_p ? ba_unique : ba_check,
5034                           NULL);
5035
5036       /* Convert from "B*" to "D*".  This function will check that "B"
5037          is not a virtual base of "D".  */
5038       expr = build_base_path (MINUS_EXPR, build_address (expr),
5039                               base, /*nonnull=*/false);
5040       /* Convert the pointer to a reference -- but then remember that
5041          there are no expressions with reference type in C++.  */
5042       return convert_from_reference (build_nop (type, expr));
5043     }
5044
5045   orig = expr;
5046
5047   /* [expr.static.cast]
5048
5049      An expression e can be explicitly converted to a type T using a
5050      static_cast of the form static_cast<T>(e) if the declaration T
5051      t(e);" is well-formed, for some invented temporary variable
5052      t.  */
5053   result = perform_direct_initialization_if_possible (type, expr,
5054                                                       c_cast_p);
5055   if (result)
5056     {
5057       result = convert_from_reference (result);
5058
5059       /* Ignore any integer overflow caused by the cast.  */
5060       result = ignore_overflows (result, orig);
5061
5062       /* [expr.static.cast]
5063
5064          If T is a reference type, the result is an lvalue; otherwise,
5065          the result is an rvalue.  */
5066       if (TREE_CODE (type) != REFERENCE_TYPE)
5067         result = rvalue (result);
5068       return result;
5069     }
5070
5071   /* [expr.static.cast]
5072
5073      Any expression can be explicitly converted to type cv void.  */
5074   if (TREE_CODE (type) == VOID_TYPE)
5075     return convert_to_void (expr, /*implicit=*/NULL);
5076
5077   /* [expr.static.cast]
5078
5079      The inverse of any standard conversion sequence (clause _conv_),
5080      other than the lvalue-to-rvalue (_conv.lval_), array-to-pointer
5081      (_conv.array_), function-to-pointer (_conv.func_), and boolean
5082      (_conv.bool_) conversions, can be performed explicitly using
5083      static_cast subject to the restriction that the explicit
5084      conversion does not cast away constness (_expr.const.cast_), and
5085      the following additional rules for specific cases:  */
5086   /* For reference, the conversions not excluded are: integral
5087      promotions, floating point promotion, integral conversions,
5088      floating point conversions, floating-integral conversions,
5089      pointer conversions, and pointer to member conversions.  */
5090   /* DR 128
5091
5092      A value of integral _or enumeration_ type can be explicitly
5093      converted to an enumeration type.  */
5094   /* The effect of all that is that any conversion between any two
5095      types which are integral, floating, or enumeration types can be
5096      performed.  */
5097   if ((INTEGRAL_TYPE_P (type) || SCALAR_FLOAT_TYPE_P (type))
5098       && (INTEGRAL_TYPE_P (intype) || SCALAR_FLOAT_TYPE_P (intype)))
5099     {
5100       expr = ocp_convert (type, expr, CONV_C_CAST, LOOKUP_NORMAL);
5101
5102       /* Ignore any integer overflow caused by the cast.  */
5103       expr = ignore_overflows (expr, orig);
5104       return expr;
5105     }
5106
5107   if (TYPE_PTR_P (type) && TYPE_PTR_P (intype)
5108       && CLASS_TYPE_P (TREE_TYPE (type))
5109       && CLASS_TYPE_P (TREE_TYPE (intype))
5110       && can_convert (build_pointer_type (TYPE_MAIN_VARIANT
5111                                           (TREE_TYPE (intype))),
5112                       build_pointer_type (TYPE_MAIN_VARIANT
5113                                           (TREE_TYPE (type)))))
5114     {
5115       tree base;
5116
5117       if (!c_cast_p)
5118         check_for_casting_away_constness (intype, type, diag_fn, desc);
5119       base = lookup_base (TREE_TYPE (type), TREE_TYPE (intype),
5120                           c_cast_p ? ba_unique : ba_check,
5121                           NULL);
5122       return build_base_path (MINUS_EXPR, expr, base, /*nonnull=*/false);
5123     }
5124
5125   if ((TYPE_PTRMEM_P (type) && TYPE_PTRMEM_P (intype))
5126       || (TYPE_PTRMEMFUNC_P (type) && TYPE_PTRMEMFUNC_P (intype)))
5127     {
5128       tree c1;
5129       tree c2;
5130       tree t1;
5131       tree t2;
5132
5133       c1 = TYPE_PTRMEM_CLASS_TYPE (intype);
5134       c2 = TYPE_PTRMEM_CLASS_TYPE (type);
5135
5136       if (TYPE_PTRMEM_P (type))
5137         {
5138           t1 = (build_ptrmem_type
5139                 (c1,
5140                  TYPE_MAIN_VARIANT (TYPE_PTRMEM_POINTED_TO_TYPE (intype))));
5141           t2 = (build_ptrmem_type
5142                 (c2,
5143                  TYPE_MAIN_VARIANT (TYPE_PTRMEM_POINTED_TO_TYPE (type))));
5144         }
5145       else
5146         {
5147           t1 = intype;
5148           t2 = type;
5149         }
5150       if (can_convert (t1, t2))
5151         {
5152           if (!c_cast_p)
5153             check_for_casting_away_constness (intype, type, diag_fn,
5154                                               desc);
5155           return convert_ptrmem (type, expr, /*allow_inverse_p=*/1,
5156                                  c_cast_p);
5157         }
5158     }
5159
5160   /* [expr.static.cast]
5161
5162      An rvalue of type "pointer to cv void" can be explicitly
5163      converted to a pointer to object type.  A value of type pointer
5164      to object converted to "pointer to cv void" and back to the
5165      original pointer type will have its original value.  */
5166   if (TREE_CODE (intype) == POINTER_TYPE
5167       && VOID_TYPE_P (TREE_TYPE (intype))
5168       && TYPE_PTROB_P (type))
5169     {
5170       if (!c_cast_p)
5171         check_for_casting_away_constness (intype, type, diag_fn, desc);
5172       return build_nop (type, expr);
5173     }
5174
5175   *valid_p = false;
5176   return error_mark_node;
5177 }
5178
5179 /* Return an expression representing static_cast<TYPE>(EXPR).  */
5180
5181 tree
5182 build_static_cast (tree type, tree expr)
5183 {
5184   tree result;
5185   bool valid_p;
5186
5187   if (type == error_mark_node || expr == error_mark_node)
5188     return error_mark_node;
5189
5190   if (processing_template_decl)
5191     {
5192       expr = build_min (STATIC_CAST_EXPR, type, expr);
5193       /* We don't know if it will or will not have side effects.  */
5194       TREE_SIDE_EFFECTS (expr) = 1;
5195       return convert_from_reference (expr);
5196     }
5197
5198   /* build_c_cast puts on a NOP_EXPR to make the result not an lvalue.
5199      Strip such NOP_EXPRs if VALUE is being used in non-lvalue context.  */
5200   if (TREE_CODE (type) != REFERENCE_TYPE
5201       && TREE_CODE (expr) == NOP_EXPR
5202       && TREE_TYPE (expr) == TREE_TYPE (TREE_OPERAND (expr, 0)))
5203     expr = TREE_OPERAND (expr, 0);
5204
5205   result = build_static_cast_1 (type, expr, /*c_cast_p=*/false, &valid_p);
5206   if (valid_p)
5207     return result;
5208
5209   error ("invalid static_cast from type %qT to type %qT",
5210          TREE_TYPE (expr), type);
5211   return error_mark_node;
5212 }
5213
5214 /* EXPR is an expression with member function or pointer-to-member
5215    function type.  TYPE is a pointer type.  Converting EXPR to TYPE is
5216    not permitted by ISO C++, but we accept it in some modes.  If we
5217    are not in one of those modes, issue a diagnostic.  Return the
5218    converted expression.  */
5219
5220 tree
5221 convert_member_func_to_ptr (tree type, tree expr)
5222 {
5223   tree intype;
5224   tree decl;
5225
5226   intype = TREE_TYPE (expr);
5227   gcc_assert (TYPE_PTRMEMFUNC_P (intype)
5228               || TREE_CODE (intype) == METHOD_TYPE);
5229
5230   if (pedantic || warn_pmf2ptr)
5231     pedwarn ("converting from %qT to %qT", intype, type);
5232
5233   if (TREE_CODE (intype) == METHOD_TYPE)
5234     expr = build_addr_func (expr);
5235   else if (TREE_CODE (expr) == PTRMEM_CST)
5236     expr = build_address (PTRMEM_CST_MEMBER (expr));
5237   else
5238     {
5239       decl = maybe_dummy_object (TYPE_PTRMEM_CLASS_TYPE (intype), 0);
5240       decl = build_address (decl);
5241       expr = get_member_function_from_ptrfunc (&decl, expr);
5242     }
5243
5244   return build_nop (type, expr);
5245 }
5246
5247 /* Return a representation for a reinterpret_cast from EXPR to TYPE.
5248    If C_CAST_P is true, this reinterpret cast is being done as part of
5249    a C-style cast.  If VALID_P is non-NULL, *VALID_P is set to
5250    indicate whether or not reinterpret_cast was valid.  */
5251
5252 static tree
5253 build_reinterpret_cast_1 (tree type, tree expr, bool c_cast_p,
5254                           bool *valid_p)
5255 {
5256   tree intype;
5257
5258   /* Assume the cast is invalid.  */
5259   if (valid_p)
5260     *valid_p = true;
5261
5262   if (type == error_mark_node || error_operand_p (expr))
5263     return error_mark_node;
5264
5265   intype = TREE_TYPE (expr);
5266
5267   /* Save casted types in the function's used types hash table.  */
5268   used_types_insert (type);
5269
5270   /* [expr.reinterpret.cast]
5271      An lvalue expression of type T1 can be cast to the type
5272      "reference to T2" if an expression of type "pointer to T1" can be
5273      explicitly converted to the type "pointer to T2" using a
5274      reinterpret_cast.  */
5275   if (TREE_CODE (type) == REFERENCE_TYPE)
5276     {
5277       if (! real_lvalue_p (expr))
5278         {
5279           error ("invalid cast of an rvalue expression of type "
5280                  "%qT to type %qT",
5281                  intype, type);
5282           return error_mark_node;
5283         }
5284
5285       /* Warn about a reinterpret_cast from "A*" to "B&" if "A" and
5286          "B" are related class types; the reinterpret_cast does not
5287          adjust the pointer.  */
5288       if (TYPE_PTR_P (intype)
5289           && (comptypes (TREE_TYPE (intype), TREE_TYPE (type),
5290                          COMPARE_BASE | COMPARE_DERIVED)))
5291         warning (0, "casting %qT to %qT does not dereference pointer",
5292                  intype, type);
5293
5294       expr = build_unary_op (ADDR_EXPR, expr, 0);
5295       if (expr != error_mark_node)
5296         expr = build_reinterpret_cast_1
5297           (build_pointer_type (TREE_TYPE (type)), expr, c_cast_p,
5298            valid_p);
5299       if (expr != error_mark_node)
5300         expr = build_indirect_ref (expr, 0);
5301       return expr;
5302     }
5303
5304   /* As a G++ extension, we consider conversions from member
5305      functions, and pointers to member functions to
5306      pointer-to-function and pointer-to-void types.  If
5307      -Wno-pmf-conversions has not been specified,
5308      convert_member_func_to_ptr will issue an error message.  */
5309   if ((TYPE_PTRMEMFUNC_P (intype)
5310        || TREE_CODE (intype) == METHOD_TYPE)
5311       && TYPE_PTR_P (type)
5312       && (TREE_CODE (TREE_TYPE (type)) == FUNCTION_TYPE
5313           || VOID_TYPE_P (TREE_TYPE (type))))
5314     return convert_member_func_to_ptr (type, expr);
5315
5316   /* If the cast is not to a reference type, the lvalue-to-rvalue,
5317      array-to-pointer, and function-to-pointer conversions are
5318      performed.  */
5319   expr = decay_conversion (expr);
5320
5321   /* build_c_cast puts on a NOP_EXPR to make the result not an lvalue.
5322      Strip such NOP_EXPRs if VALUE is being used in non-lvalue context.  */
5323   if (TREE_CODE (expr) == NOP_EXPR
5324       && TREE_TYPE (expr) == TREE_TYPE (TREE_OPERAND (expr, 0)))
5325     expr = TREE_OPERAND (expr, 0);
5326
5327   if (error_operand_p (expr))
5328     return error_mark_node;
5329
5330   intype = TREE_TYPE (expr);
5331
5332   /* [expr.reinterpret.cast]
5333      A pointer can be converted to any integral type large enough to
5334      hold it.  */
5335   if (CP_INTEGRAL_TYPE_P (type) && TYPE_PTR_P (intype))
5336     {
5337       if (TYPE_PRECISION (type) < TYPE_PRECISION (intype))
5338         pedwarn ("cast from %qT to %qT loses precision",
5339                  intype, type);
5340     }
5341   /* [expr.reinterpret.cast]
5342      A value of integral or enumeration type can be explicitly
5343      converted to a pointer.  */
5344   else if (TYPE_PTR_P (type) && INTEGRAL_OR_ENUMERATION_TYPE_P (intype))
5345     /* OK */
5346     ;
5347   /* APPLE LOCAL begin blocks 6040305 (ck) */
5348   else if (TREE_CODE (type) == INTEGER_TYPE && TREE_CODE (intype) == BLOCK_POINTER_TYPE)
5349     {
5350       if (TYPE_PRECISION (type) < TYPE_PRECISION (intype))
5351         pedwarn ("cast from %qT to %qT loses precision",
5352                  intype, type);
5353     }
5354   else if (TREE_CODE (type) == BLOCK_POINTER_TYPE && TREE_CODE (intype) == INTEGER_TYPE)
5355     /* OK */
5356     ;
5357   else if (TREE_CODE (type) == BLOCK_POINTER_TYPE && TREE_CODE (intype) == BLOCK_POINTER_TYPE)
5358     /* OK */
5359     ;
5360   else if (TREE_CODE (intype) == BLOCK_POINTER_TYPE
5361            && (objc_is_id (type)
5362                || (TREE_CODE (type) == POINTER_TYPE && VOID_TYPE_P (TREE_TYPE (type)))))
5363     /* OK */
5364     ;
5365   else if (TREE_CODE (type) == BLOCK_POINTER_TYPE
5366            && TREE_CODE (intype) == POINTER_TYPE
5367            && (objc_is_id (intype) || VOID_TYPE_P (TREE_TYPE (intype))))
5368     /* OK */
5369     ;
5370   /* APPLE LOCAL end blocks 6040305 (ck) */
5371   else if ((TYPE_PTRFN_P (type) && TYPE_PTRFN_P (intype))
5372            || (TYPE_PTRMEMFUNC_P (type) && TYPE_PTRMEMFUNC_P (intype)))
5373     return fold_if_not_in_template (build_nop (type, expr));
5374   else if ((TYPE_PTRMEM_P (type) && TYPE_PTRMEM_P (intype))
5375            || (TYPE_PTROBV_P (type) && TYPE_PTROBV_P (intype)))
5376     {
5377       tree sexpr = expr;
5378
5379       if (!c_cast_p)
5380         check_for_casting_away_constness (intype, type, error,
5381                                           "reinterpret_cast");
5382       /* Warn about possible alignment problems.  */
5383       if (STRICT_ALIGNMENT && warn_cast_align
5384           && !VOID_TYPE_P (type)
5385           && TREE_CODE (TREE_TYPE (intype)) != FUNCTION_TYPE
5386           && COMPLETE_TYPE_P (TREE_TYPE (type))
5387           && COMPLETE_TYPE_P (TREE_TYPE (intype))
5388           && TYPE_ALIGN (TREE_TYPE (type)) > TYPE_ALIGN (TREE_TYPE (intype)))
5389         warning (0, "cast from %qT to %qT increases required alignment of "
5390                  "target type",
5391                  intype, type);
5392
5393       /* We need to strip nops here, because the frontend likes to
5394          create (int *)&a for array-to-pointer decay, instead of &a[0].  */
5395       STRIP_NOPS (sexpr);
5396       if (warn_strict_aliasing <= 2)
5397         strict_aliasing_warning (intype, type, sexpr);
5398
5399       return fold_if_not_in_template (build_nop (type, expr));
5400     }
5401   else if ((TYPE_PTRFN_P (type) && TYPE_PTROBV_P (intype))
5402            || (TYPE_PTRFN_P (intype) && TYPE_PTROBV_P (type)))
5403     {
5404       if (pedantic)
5405         /* Only issue a warning, as we have always supported this
5406            where possible, and it is necessary in some cases.  DR 195
5407            addresses this issue, but as of 2004/10/26 is still in
5408            drafting.  */
5409         warning (0, "ISO C++ forbids casting between pointer-to-function and pointer-to-object");
5410       return fold_if_not_in_template (build_nop (type, expr));
5411     }
5412   else if (TREE_CODE (type) == VECTOR_TYPE)
5413     return fold_if_not_in_template (convert_to_vector (type, expr));
5414   else if (TREE_CODE (intype) == VECTOR_TYPE && INTEGRAL_TYPE_P (type))
5415     return fold_if_not_in_template (convert_to_integer (type, expr));
5416   else
5417     {
5418       if (valid_p)
5419         *valid_p = false;
5420       error ("invalid cast from type %qT to type %qT", intype, type);
5421       return error_mark_node;
5422     }
5423
5424   /* APPLE LOCAL begin don't sign-extend pointers cast to integers */
5425   if (TREE_CODE (type) == INTEGER_TYPE
5426       && TREE_CODE (intype) == POINTER_TYPE
5427       && TYPE_PRECISION (type) > TYPE_PRECISION (intype)
5428       && TYPE_UNSIGNED (type))
5429     expr = cp_convert (c_common_type_for_size (POINTER_SIZE, 1), expr);
5430   /* APPLE LOCAL end don't sign-extend pointers cast to integers */
5431
5432   return cp_convert (type, expr);
5433 }
5434
5435 tree
5436 build_reinterpret_cast (tree type, tree expr)
5437 {
5438   if (type == error_mark_node || expr == error_mark_node)
5439     return error_mark_node;
5440
5441   if (processing_template_decl)
5442     {
5443       tree t = build_min (REINTERPRET_CAST_EXPR, type, expr);
5444
5445       if (!TREE_SIDE_EFFECTS (t)
5446           && type_dependent_expression_p (expr))
5447         /* There might turn out to be side effects inside expr.  */
5448         TREE_SIDE_EFFECTS (t) = 1;
5449       return convert_from_reference (t);
5450     }
5451
5452   return build_reinterpret_cast_1 (type, expr, /*c_cast_p=*/false,
5453                                    /*valid_p=*/NULL);
5454 }
5455
5456 /* Perform a const_cast from EXPR to TYPE.  If the cast is valid,
5457    return an appropriate expression.  Otherwise, return
5458    error_mark_node.  If the cast is not valid, and COMPLAIN is true,
5459    then a diagnostic will be issued.  If VALID_P is non-NULL, we are
5460    performing a C-style cast, its value upon return will indicate
5461    whether or not the conversion succeeded.  */
5462
5463 static tree
5464 build_const_cast_1 (tree dst_type, tree expr, bool complain,
5465                     bool *valid_p)
5466 {
5467   tree src_type;
5468   tree reference_type;
5469
5470   /* Callers are responsible for handling error_mark_node as a
5471      destination type.  */
5472   gcc_assert (dst_type != error_mark_node);
5473   /* In a template, callers should be building syntactic
5474      representations of casts, not using this machinery.  */
5475   gcc_assert (!processing_template_decl);
5476
5477   /* Assume the conversion is invalid.  */
5478   if (valid_p)
5479     *valid_p = false;
5480
5481   if (!POINTER_TYPE_P (dst_type) && !TYPE_PTRMEM_P (dst_type))
5482     {
5483       if (complain)
5484         error ("invalid use of const_cast with type %qT, "
5485                "which is not a pointer, "
5486                "reference, nor a pointer-to-data-member type", dst_type);
5487       return error_mark_node;
5488     }
5489
5490   if (TREE_CODE (TREE_TYPE (dst_type)) == FUNCTION_TYPE)
5491     {
5492       if (complain)
5493         error ("invalid use of const_cast with type %qT, which is a pointer "
5494                "or reference to a function type", dst_type);
5495       return error_mark_node;
5496     }
5497
5498   /* Save casted types in the function's used types hash table.  */
5499   used_types_insert (dst_type);
5500
5501   src_type = TREE_TYPE (expr);
5502   /* Expressions do not really have reference types.  */
5503   if (TREE_CODE (src_type) == REFERENCE_TYPE)
5504     src_type = TREE_TYPE (src_type);
5505
5506   /* [expr.const.cast]
5507
5508      An lvalue of type T1 can be explicitly converted to an lvalue of
5509      type T2 using the cast const_cast<T2&> (where T1 and T2 are object
5510      types) if a pointer to T1 can be explicitly converted to the type
5511      pointer to T2 using a const_cast.  */
5512   if (TREE_CODE (dst_type) == REFERENCE_TYPE)
5513     {
5514       reference_type = dst_type;
5515       if (! real_lvalue_p (expr))
5516         {
5517           if (complain)
5518             error ("invalid const_cast of an rvalue of type %qT to type %qT",
5519                    src_type, dst_type);
5520           return error_mark_node;
5521         }
5522       dst_type = build_pointer_type (TREE_TYPE (dst_type));
5523       src_type = build_pointer_type (src_type);
5524     }
5525   else
5526     {
5527       reference_type = NULL_TREE;
5528       /* If the destination type is not a reference type, the
5529          lvalue-to-rvalue, array-to-pointer, and function-to-pointer
5530          conversions are performed.  */
5531       src_type = type_decays_to (src_type);
5532       if (src_type == error_mark_node)
5533         return error_mark_node;
5534     }
5535
5536   if ((TYPE_PTR_P (src_type) || TYPE_PTRMEM_P (src_type))
5537       && comp_ptr_ttypes_const (dst_type, src_type))
5538     {
5539       if (valid_p)
5540         {
5541           *valid_p = true;
5542           /* This cast is actually a C-style cast.  Issue a warning if
5543              the user is making a potentially unsafe cast.  */
5544           if (warn_cast_qual)
5545             check_for_casting_away_constness (src_type, dst_type,
5546                                               warning0,
5547                                               "cast");
5548         }
5549       if (reference_type)
5550         {
5551           expr = build_unary_op (ADDR_EXPR, expr, 0);
5552           expr = build_nop (reference_type, expr);
5553           return convert_from_reference (expr);
5554         }
5555       else
5556         {
5557           expr = decay_conversion (expr);
5558           /* build_c_cast puts on a NOP_EXPR to make the result not an
5559              lvalue.  Strip such NOP_EXPRs if VALUE is being used in
5560              non-lvalue context.  */
5561           if (TREE_CODE (expr) == NOP_EXPR
5562               && TREE_TYPE (expr) == TREE_TYPE (TREE_OPERAND (expr, 0)))
5563             expr = TREE_OPERAND (expr, 0);
5564           return build_nop (dst_type, expr);
5565         }
5566     }
5567
5568   if (complain)
5569     error ("invalid const_cast from type %qT to type %qT",
5570            src_type, dst_type);
5571   return error_mark_node;
5572 }
5573
5574 tree
5575 build_const_cast (tree type, tree expr)
5576 {
5577   if (type == error_mark_node || error_operand_p (expr))
5578     return error_mark_node;
5579
5580   if (processing_template_decl)
5581     {
5582       tree t = build_min (CONST_CAST_EXPR, type, expr);
5583
5584       if (!TREE_SIDE_EFFECTS (t)
5585           && type_dependent_expression_p (expr))
5586         /* There might turn out to be side effects inside expr.  */
5587         TREE_SIDE_EFFECTS (t) = 1;
5588       return convert_from_reference (t);
5589     }
5590
5591   return build_const_cast_1 (type, expr, /*complain=*/true,
5592                              /*valid_p=*/NULL);
5593 }
5594
5595 /* Build an expression representing an explicit C-style cast to type
5596    TYPE of expression EXPR.  */
5597
5598 tree
5599 build_c_cast (tree type, tree expr)
5600 {
5601   tree value = expr;
5602   tree result;
5603   bool valid_p;
5604
5605   if (type == error_mark_node || error_operand_p (expr))
5606     return error_mark_node;
5607
5608   if (processing_template_decl)
5609     {
5610       tree t = build_min (CAST_EXPR, type,
5611                           tree_cons (NULL_TREE, value, NULL_TREE));
5612       /* We don't know if it will or will not have side effects.  */
5613       TREE_SIDE_EFFECTS (t) = 1;
5614       return convert_from_reference (t);
5615     }
5616
5617   /* Casts to a (pointer to a) specific ObjC class (or 'id' or
5618      'Class') should always be retained, because this information aids
5619      in method lookup.  */
5620   if (objc_is_object_ptr (type)
5621       && objc_is_object_ptr (TREE_TYPE (expr)))
5622     return build_nop (type, expr);
5623
5624   /* build_c_cast puts on a NOP_EXPR to make the result not an lvalue.
5625      Strip such NOP_EXPRs if VALUE is being used in non-lvalue context.  */
5626   if (TREE_CODE (type) != REFERENCE_TYPE
5627       && TREE_CODE (value) == NOP_EXPR
5628       && TREE_TYPE (value) == TREE_TYPE (TREE_OPERAND (value, 0)))
5629     value = TREE_OPERAND (value, 0);
5630
5631   if (TREE_CODE (type) == ARRAY_TYPE)
5632     {
5633       /* Allow casting from T1* to T2[] because Cfront allows it.
5634          NIHCL uses it. It is not valid ISO C++ however.  */
5635       if (TREE_CODE (TREE_TYPE (expr)) == POINTER_TYPE)
5636         {
5637           pedwarn ("ISO C++ forbids casting to an array type %qT", type);
5638           type = build_pointer_type (TREE_TYPE (type));
5639         }
5640       else
5641         {
5642           error ("ISO C++ forbids casting to an array type %qT", type);
5643           return error_mark_node;
5644         }
5645     }
5646
5647   if (TREE_CODE (type) == FUNCTION_TYPE
5648       || TREE_CODE (type) == METHOD_TYPE)
5649     {
5650       error ("invalid cast to function type %qT", type);
5651       return error_mark_node;
5652     }
5653
5654   /* A C-style cast can be a const_cast.  */
5655   result = build_const_cast_1 (type, value, /*complain=*/false,
5656                                &valid_p);
5657   if (valid_p)
5658     return result;
5659
5660   /* Or a static cast.  */
5661   result = build_static_cast_1 (type, value, /*c_cast_p=*/true,
5662                                 &valid_p);
5663   /* Or a reinterpret_cast.  */
5664   if (!valid_p)
5665     result = build_reinterpret_cast_1 (type, value, /*c_cast_p=*/true,
5666                                        &valid_p);
5667   /* The static_cast or reinterpret_cast may be followed by a
5668      const_cast.  */
5669   if (valid_p
5670       /* A valid cast may result in errors if, for example, a
5671          conversion to am ambiguous base class is required.  */
5672       && !error_operand_p (result))
5673     {
5674       tree result_type;
5675
5676       /* Non-class rvalues always have cv-unqualified type.  */
5677       if (!CLASS_TYPE_P (type))
5678         type = TYPE_MAIN_VARIANT (type);
5679       result_type = TREE_TYPE (result);
5680       if (!CLASS_TYPE_P (result_type))
5681         result_type = TYPE_MAIN_VARIANT (result_type);
5682       /* If the type of RESULT does not match TYPE, perform a
5683          const_cast to make it match.  If the static_cast or
5684          reinterpret_cast succeeded, we will differ by at most
5685          cv-qualification, so the follow-on const_cast is guaranteed
5686          to succeed.  */
5687       if (!same_type_p (non_reference (type), non_reference (result_type)))
5688         {
5689           result = build_const_cast_1 (type, result, false, &valid_p);
5690           gcc_assert (valid_p);
5691         }
5692       return result;
5693     }
5694
5695   return error_mark_node;
5696 }
5697 \f
5698 /* Build an assignment expression of lvalue LHS from value RHS.
5699    MODIFYCODE is the code for a binary operator that we use
5700    to combine the old value of LHS with RHS to get the new value.
5701    Or else MODIFYCODE is NOP_EXPR meaning do a simple assignment.
5702
5703    C++: If MODIFYCODE is INIT_EXPR, then leave references unbashed.  */
5704
5705 tree
5706 build_modify_expr (tree lhs, enum tree_code modifycode, tree rhs)
5707 {
5708   tree result;
5709   tree newrhs = rhs;
5710   tree lhstype = TREE_TYPE (lhs);
5711   tree olhstype = lhstype;
5712   tree olhs = NULL_TREE;
5713   bool plain_assign = (modifycode == NOP_EXPR);
5714
5715   /* Avoid duplicate error messages from operands that had errors.  */
5716   if (error_operand_p (lhs) || error_operand_p (rhs))
5717     return error_mark_node;
5718
5719   /* Handle control structure constructs used as "lvalues".  */
5720   switch (TREE_CODE (lhs))
5721     {
5722       /* Handle --foo = 5; as these are valid constructs in C++.  */
5723     case PREDECREMENT_EXPR:
5724     case PREINCREMENT_EXPR:
5725       if (TREE_SIDE_EFFECTS (TREE_OPERAND (lhs, 0)))
5726         lhs = build2 (TREE_CODE (lhs), TREE_TYPE (lhs),
5727                       stabilize_reference (TREE_OPERAND (lhs, 0)),
5728                       TREE_OPERAND (lhs, 1));
5729       return build2 (COMPOUND_EXPR, lhstype,
5730                      lhs,
5731                      build_modify_expr (TREE_OPERAND (lhs, 0),
5732                                         modifycode, rhs));
5733
5734       /* Handle (a, b) used as an "lvalue".  */
5735     case COMPOUND_EXPR:
5736       newrhs = build_modify_expr (TREE_OPERAND (lhs, 1),
5737                                   modifycode, rhs);
5738       if (newrhs == error_mark_node)
5739         return error_mark_node;
5740       return build2 (COMPOUND_EXPR, lhstype,
5741                      TREE_OPERAND (lhs, 0), newrhs);
5742
5743     case MODIFY_EXPR:
5744       if (TREE_SIDE_EFFECTS (TREE_OPERAND (lhs, 0)))
5745         lhs = build2 (TREE_CODE (lhs), TREE_TYPE (lhs),
5746                       stabilize_reference (TREE_OPERAND (lhs, 0)),
5747                       TREE_OPERAND (lhs, 1));
5748       newrhs = build_modify_expr (TREE_OPERAND (lhs, 0), modifycode, rhs);
5749       if (newrhs == error_mark_node)
5750         return error_mark_node;
5751       return build2 (COMPOUND_EXPR, lhstype, lhs, newrhs);
5752
5753     case MIN_EXPR:
5754     case MAX_EXPR:
5755       /* MIN_EXPR and MAX_EXPR are currently only permitted as lvalues,
5756          when neither operand has side-effects.  */
5757       if (!lvalue_or_else (lhs, lv_assign))
5758         return error_mark_node;
5759
5760       gcc_assert (!TREE_SIDE_EFFECTS (TREE_OPERAND (lhs, 0))
5761                   && !TREE_SIDE_EFFECTS (TREE_OPERAND (lhs, 1)));
5762
5763       lhs = build3 (COND_EXPR, TREE_TYPE (lhs),
5764                     build2 (TREE_CODE (lhs) == MIN_EXPR ? LE_EXPR : GE_EXPR,
5765                             boolean_type_node,
5766                             TREE_OPERAND (lhs, 0),
5767                             TREE_OPERAND (lhs, 1)),
5768                     TREE_OPERAND (lhs, 0),
5769                     TREE_OPERAND (lhs, 1));
5770       /* Fall through.  */
5771
5772       /* Handle (a ? b : c) used as an "lvalue".  */
5773     case COND_EXPR:
5774       {
5775         /* Produce (a ? (b = rhs) : (c = rhs))
5776            except that the RHS goes through a save-expr
5777            so the code to compute it is only emitted once.  */
5778         tree cond;
5779         tree preeval = NULL_TREE;
5780
5781         if (VOID_TYPE_P (TREE_TYPE (rhs)))
5782           {
5783             error ("void value not ignored as it ought to be");
5784             return error_mark_node;
5785           }
5786
5787         rhs = stabilize_expr (rhs, &preeval);
5788
5789         /* Check this here to avoid odd errors when trying to convert
5790            a throw to the type of the COND_EXPR.  */
5791         if (!lvalue_or_else (lhs, lv_assign))
5792           return error_mark_node;
5793
5794         cond = build_conditional_expr
5795           (TREE_OPERAND (lhs, 0),
5796            build_modify_expr (TREE_OPERAND (lhs, 1),
5797                               modifycode, rhs),
5798            build_modify_expr (TREE_OPERAND (lhs, 2),
5799                               modifycode, rhs));
5800
5801         if (cond == error_mark_node)
5802           return cond;
5803         /* Make sure the code to compute the rhs comes out
5804            before the split.  */
5805         if (preeval)
5806           cond = build2 (COMPOUND_EXPR, TREE_TYPE (lhs), preeval, cond);
5807         return cond;
5808       }
5809
5810     default:
5811       break;
5812     }
5813
5814   if (modifycode == INIT_EXPR)
5815     {
5816       if (TREE_CODE (rhs) == CONSTRUCTOR)
5817         {
5818           if (! same_type_p (TREE_TYPE (rhs), lhstype))
5819             /* Call convert to generate an error; see PR 11063.  */
5820             rhs = convert (lhstype, rhs);
5821           result = build2 (INIT_EXPR, lhstype, lhs, rhs);
5822           TREE_SIDE_EFFECTS (result) = 1;
5823           return result;
5824         }
5825       else if (! IS_AGGR_TYPE (lhstype))
5826         /* Do the default thing.  */;
5827       else
5828         {
5829           result = build_special_member_call (lhs, complete_ctor_identifier,
5830                                               build_tree_list (NULL_TREE, rhs),
5831                                               lhstype, LOOKUP_NORMAL);
5832           if (result == NULL_TREE)
5833             return error_mark_node;
5834           return result;
5835         }
5836     }
5837   else
5838     {
5839       lhs = require_complete_type (lhs);
5840       if (lhs == error_mark_node)
5841         return error_mark_node;
5842
5843       if (modifycode == NOP_EXPR)
5844         {
5845           /* `operator=' is not an inheritable operator.  */
5846           if (! IS_AGGR_TYPE (lhstype))
5847             /* Do the default thing.  */;
5848           else
5849             {
5850               result = build_new_op (MODIFY_EXPR, LOOKUP_NORMAL,
5851                                      lhs, rhs, make_node (NOP_EXPR),
5852                                      /*overloaded_p=*/NULL);
5853               if (result == NULL_TREE)
5854                 return error_mark_node;
5855               return result;
5856             }
5857           /* APPLE LOCAL end C* property (Radar 4436866) */
5858           /* `operator=' is not an inheritable operator.  */
5859           if (! IS_AGGR_TYPE (lhstype))
5860             /* Do the default thing.  */;
5861           else
5862             {
5863               result = build_new_op (MODIFY_EXPR, LOOKUP_NORMAL,
5864                                      lhs, rhs, make_node (NOP_EXPR),
5865                                      /*overloaded_p=*/NULL);
5866               if (result == NULL_TREE)
5867                 return error_mark_node;
5868               return result;
5869             }
5870           lhstype = olhstype;
5871         }
5872       else
5873         {
5874           /* A binary op has been requested.  Combine the old LHS
5875              value with the RHS producing the value we should actually
5876              store into the LHS.  */
5877
5878           gcc_assert (!PROMOTES_TO_AGGR_TYPE (lhstype, REFERENCE_TYPE));
5879           lhs = stabilize_reference (lhs);
5880           newrhs = cp_build_binary_op (modifycode, lhs, rhs);
5881           if (newrhs == error_mark_node)
5882             {
5883               error ("  in evaluation of %<%Q(%#T, %#T)%>", modifycode,
5884                      TREE_TYPE (lhs), TREE_TYPE (rhs));
5885               return error_mark_node;
5886             }
5887
5888           /* Now it looks like a plain assignment.  */
5889           modifycode = NOP_EXPR;
5890           lhstype = olhstype;
5891         }
5892       gcc_assert (TREE_CODE (lhstype) != REFERENCE_TYPE);
5893       gcc_assert (TREE_CODE (TREE_TYPE (newrhs)) != REFERENCE_TYPE);
5894     }
5895
5896   /* The left-hand side must be an lvalue.  */
5897   if (!lvalue_or_else (lhs, lv_assign))
5898     return error_mark_node;
5899
5900   /* Warn about modifying something that is `const'.  Don't warn if
5901      this is initialization.  */
5902   if (modifycode != INIT_EXPR
5903       && (TREE_READONLY (lhs) || CP_TYPE_CONST_P (lhstype)
5904           /* Functions are not modifiable, even though they are
5905              lvalues.  */
5906           || TREE_CODE (TREE_TYPE (lhs)) == FUNCTION_TYPE
5907           || TREE_CODE (TREE_TYPE (lhs)) == METHOD_TYPE
5908           /* If it's an aggregate and any field is const, then it is
5909              effectively const.  */
5910           || (CLASS_TYPE_P (lhstype)
5911               && C_TYPE_FIELDS_READONLY (lhstype))))
5912     readonly_error (lhs, "assignment", 0);
5913
5914   /* If storing into a structure or union member, it has probably been
5915      given type `int'.  Compute the type that would go with the actual
5916      amount of storage the member occupies.  */
5917
5918   if (TREE_CODE (lhs) == COMPONENT_REF
5919       && (TREE_CODE (lhstype) == INTEGER_TYPE
5920           || TREE_CODE (lhstype) == REAL_TYPE
5921           || TREE_CODE (lhstype) == ENUMERAL_TYPE))
5922     {
5923       lhstype = TREE_TYPE (get_unwidened (lhs, 0));
5924
5925       /* If storing in a field that is in actuality a short or narrower
5926          than one, we must store in the field in its actual type.  */
5927
5928       if (lhstype != TREE_TYPE (lhs))
5929         {
5930           /* Avoid warnings converting integral types back into enums for
5931              enum bit fields.  */
5932           if (TREE_CODE (lhstype) == INTEGER_TYPE
5933               && TREE_CODE (olhstype) == ENUMERAL_TYPE)
5934             {
5935               if (TREE_SIDE_EFFECTS (lhs))
5936                 lhs = stabilize_reference (lhs);
5937               olhs = lhs;
5938             }
5939           lhs = copy_node (lhs);
5940           TREE_TYPE (lhs) = lhstype;
5941         }
5942     }
5943
5944   /* Convert new value to destination type.  */
5945
5946   if (TREE_CODE (lhstype) == ARRAY_TYPE)
5947     {
5948       int from_array;
5949
5950       if (!same_or_base_type_p (TYPE_MAIN_VARIANT (lhstype),
5951                                 TYPE_MAIN_VARIANT (TREE_TYPE (rhs))))
5952         {
5953           error ("incompatible types in assignment of %qT to %qT",
5954                  TREE_TYPE (rhs), lhstype);
5955           return error_mark_node;
5956         }
5957
5958       /* Allow array assignment in compiler-generated code.  */
5959       if (! DECL_ARTIFICIAL (current_function_decl))
5960         {
5961           /* This routine is used for both initialization and assignment.
5962              Make sure the diagnostic message differentiates the context.  */
5963           if (modifycode == INIT_EXPR)
5964             error ("array used as initializer");
5965           else
5966             error ("invalid array assignment");
5967           return error_mark_node;
5968         }
5969
5970       from_array = TREE_CODE (TREE_TYPE (newrhs)) == ARRAY_TYPE
5971                    ? 1 + (modifycode != INIT_EXPR): 0;
5972       return build_vec_init (lhs, NULL_TREE, newrhs,
5973                              /*explicit_default_init_p=*/false,
5974                              from_array);
5975     }
5976
5977   if (modifycode == INIT_EXPR)
5978     newrhs = convert_for_initialization (lhs, lhstype, newrhs, LOOKUP_NORMAL,
5979                                          "initialization", NULL_TREE, 0);
5980   else
5981     {
5982       /* Avoid warnings on enum bit fields.  */
5983       if (TREE_CODE (olhstype) == ENUMERAL_TYPE
5984           && TREE_CODE (lhstype) == INTEGER_TYPE)
5985         {
5986           newrhs = convert_for_assignment (olhstype, newrhs, "assignment",
5987                                            NULL_TREE, 0);
5988           newrhs = convert_force (lhstype, newrhs, 0);
5989         }
5990       else
5991         newrhs = convert_for_assignment (lhstype, newrhs, "assignment",
5992                                          NULL_TREE, 0);
5993       if (TREE_CODE (newrhs) == CALL_EXPR
5994           && TYPE_NEEDS_CONSTRUCTING (lhstype))
5995         newrhs = build_cplus_new (lhstype, newrhs);
5996
5997       /* Can't initialize directly from a TARGET_EXPR, since that would
5998          cause the lhs to be constructed twice, and possibly result in
5999          accidental self-initialization.  So we force the TARGET_EXPR to be
6000          expanded without a target.  */
6001       if (TREE_CODE (newrhs) == TARGET_EXPR)
6002         newrhs = build2 (COMPOUND_EXPR, TREE_TYPE (newrhs), newrhs,
6003                          TREE_OPERAND (newrhs, 0));
6004     }
6005
6006   if (newrhs == error_mark_node)
6007     return error_mark_node;
6008
6009   if (c_dialect_objc () && flag_objc_gc)
6010     {
6011       result = objc_generate_write_barrier (lhs, modifycode, newrhs);
6012
6013       if (result)
6014         return result;
6015     }
6016
6017   result = build2 (modifycode == NOP_EXPR ? MODIFY_EXPR : INIT_EXPR,
6018                    lhstype, lhs, newrhs);
6019
6020   TREE_SIDE_EFFECTS (result) = 1;
6021   if (!plain_assign)
6022     TREE_NO_WARNING (result) = 1;
6023
6024   /* If we got the LHS in a different type for storing in,
6025      convert the result back to the nominal type of LHS
6026      so that the value we return always has the same type
6027      as the LHS argument.  */
6028
6029   if (olhstype == TREE_TYPE (result))
6030     return result;
6031   if (olhs)
6032     {
6033       result = build2 (COMPOUND_EXPR, olhstype, result, olhs);
6034       TREE_NO_WARNING (result) = 1;
6035       return result;
6036     }
6037   return convert_for_assignment (olhstype, result, "assignment",
6038                                  NULL_TREE, 0);
6039 }
6040
6041 tree
6042 build_x_modify_expr (tree lhs, enum tree_code modifycode, tree rhs)
6043 {
6044   /* APPLE LOCAL __block assign sequence point 6639533 */
6045   bool insert_sequence_point = false;
6046
6047   if (processing_template_decl)
6048     return build_min_nt (MODOP_EXPR, lhs,
6049                          build_min_nt (modifycode, NULL_TREE, NULL_TREE), rhs);
6050
6051   /* APPLE LOCAL begin __block assign sequence point 6639533 */
6052   /* For byref = x;, we have to transform this into ({ typeof(x) x' =
6053      x; byref = x`; )} to ensure there is a sequence point before the
6054      evaluation of the byref, inorder to ensure that the access
6055      expression for byref doesn't start running before x is evaluated,
6056      as it will access the __forwarding pointer and that must be done
6057      after x is evaluated.  */
6058   /* First we check to see if lhs is a byref...  byrefs look like:
6059         __Block_byref_X.__forwarding->x  */
6060   if (TREE_CODE (lhs) == COMPONENT_REF)
6061     {
6062       tree inner = TREE_OPERAND (lhs, 0);
6063       /* now check for -> */
6064       if (TREE_CODE (inner) == INDIRECT_REF)
6065         {
6066           inner = TREE_OPERAND (inner, 0);
6067           if (TREE_CODE (inner) == COMPONENT_REF)
6068             {
6069               inner = TREE_OPERAND (inner, 0);
6070               if (TREE_CODE (inner) == VAR_DECL
6071                   && COPYABLE_BYREF_LOCAL_VAR (inner))
6072                 {
6073                   tree old_rhs = rhs;
6074                   /* then we save the rhs.  */
6075                   rhs = save_expr (rhs);
6076                   if (rhs != old_rhs)
6077                     /* And arrange for the sequence point to be inserted.  */
6078                     insert_sequence_point = true;
6079                 }
6080             }
6081         }
6082     }
6083   /* APPLE LOCAL end __block assign sequence point 6639533 */
6084
6085   if (modifycode != NOP_EXPR)
6086     {
6087       tree rval = build_new_op (MODIFY_EXPR, LOOKUP_NORMAL, lhs, rhs,
6088                                 make_node (modifycode),
6089                                 /*overloaded_p=*/NULL);
6090       if (rval)
6091         {
6092           /* APPLE LOCAL begin __block assign sequence point 6639533 */
6093           if (insert_sequence_point)
6094             rval = build2 (COMPOUND_EXPR, TREE_TYPE (rval), rhs, rval);
6095           /* APPLE LOCAL end __block assign sequence point 6639533 */
6096           TREE_NO_WARNING (rval) = 1;
6097           return rval;
6098         }
6099     }
6100   lhs = build_modify_expr (lhs, modifycode, rhs);
6101   /* APPLE LOCAL begin __block assign sequence point 6639533 */
6102   if (insert_sequence_point)
6103     lhs = build2 (COMPOUND_EXPR, TREE_TYPE (lhs), rhs, lhs);
6104   /* APPLE LOCAL end __block assign sequence point 6639533 */
6105   return lhs;
6106 }
6107
6108 \f
6109 /* Get difference in deltas for different pointer to member function
6110    types.  Returns an integer constant of type PTRDIFF_TYPE_NODE.  If
6111    the conversion is invalid, the constant is zero.  If
6112    ALLOW_INVERSE_P is true, then allow reverse conversions as well.
6113    If C_CAST_P is true this conversion is taking place as part of a
6114    C-style cast.
6115
6116    Note that the naming of FROM and TO is kind of backwards; the return
6117    value is what we add to a TO in order to get a FROM.  They are named
6118    this way because we call this function to find out how to convert from
6119    a pointer to member of FROM to a pointer to member of TO.  */
6120
6121 static tree
6122 get_delta_difference (tree from, tree to,
6123                       bool allow_inverse_p,
6124                       bool c_cast_p)
6125 {
6126   tree binfo;
6127   base_kind kind;
6128   tree result;
6129
6130   /* Assume no conversion is required.  */
6131   result = integer_zero_node;
6132   binfo = lookup_base (to, from, c_cast_p ? ba_unique : ba_check, &kind);
6133   if (kind == bk_inaccessible || kind == bk_ambig)
6134     error ("   in pointer to member function conversion");
6135   else if (binfo)
6136     {
6137       if (kind != bk_via_virtual)
6138         result = BINFO_OFFSET (binfo);
6139       else
6140         {
6141           tree virt_binfo = binfo_from_vbase (binfo);
6142
6143           /* This is a reinterpret cast, we choose to do nothing.  */
6144           if (allow_inverse_p)
6145             warning (0, "pointer to member cast via virtual base %qT",
6146                      BINFO_TYPE (virt_binfo));
6147           else
6148             error ("pointer to member conversion via virtual base %qT",
6149                    BINFO_TYPE (virt_binfo));
6150         }
6151     }
6152   else if (same_type_ignoring_top_level_qualifiers_p (from, to))
6153     /* Pointer to member of incomplete class is permitted*/;
6154   else if (!allow_inverse_p)
6155     {
6156       error_not_base_type (from, to);
6157       error ("   in pointer to member conversion");
6158     }
6159   else
6160     {
6161       binfo = lookup_base (from, to, c_cast_p ? ba_unique : ba_check, &kind);
6162       if (binfo)
6163         {
6164           if (kind != bk_via_virtual)
6165             result = size_diffop (size_zero_node, BINFO_OFFSET (binfo));
6166           else
6167             {
6168               /* This is a reinterpret cast, we choose to do nothing.  */
6169               tree virt_binfo = binfo_from_vbase (binfo);
6170
6171               warning (0, "pointer to member cast via virtual base %qT",
6172                        BINFO_TYPE (virt_binfo));
6173             }
6174         }
6175     }
6176
6177   return fold_if_not_in_template (convert_to_integer (ptrdiff_type_node,
6178                                                       result));
6179 }
6180
6181 /* Return a constructor for the pointer-to-member-function TYPE using
6182    the other components as specified.  */
6183
6184 tree
6185 build_ptrmemfunc1 (tree type, tree delta, tree pfn)
6186 {
6187   tree u = NULL_TREE;
6188   tree delta_field;
6189   tree pfn_field;
6190   VEC(constructor_elt, gc) *v;
6191
6192   /* Pull the FIELD_DECLs out of the type.  */
6193   pfn_field = TYPE_FIELDS (type);
6194   delta_field = TREE_CHAIN (pfn_field);
6195
6196   /* Make sure DELTA has the type we want.  */
6197   delta = convert_and_check (delta_type_node, delta);
6198
6199   /* Finish creating the initializer.  */
6200   v = VEC_alloc(constructor_elt, gc, 2);
6201   CONSTRUCTOR_APPEND_ELT(v, pfn_field, pfn);
6202   CONSTRUCTOR_APPEND_ELT(v, delta_field, delta);
6203   u = build_constructor (type, v);
6204   TREE_CONSTANT (u) = TREE_CONSTANT (pfn) & TREE_CONSTANT (delta);
6205   TREE_INVARIANT (u) = TREE_INVARIANT (pfn) & TREE_INVARIANT (delta);
6206   TREE_STATIC (u) = (TREE_CONSTANT (u)
6207                      && (initializer_constant_valid_p (pfn, TREE_TYPE (pfn))
6208                          != NULL_TREE)
6209                      && (initializer_constant_valid_p (delta, TREE_TYPE (delta))
6210                          != NULL_TREE));
6211   return u;
6212 }
6213
6214 /* Build a constructor for a pointer to member function.  It can be
6215    used to initialize global variables, local variable, or used
6216    as a value in expressions.  TYPE is the POINTER to METHOD_TYPE we
6217    want to be.
6218
6219    If FORCE is nonzero, then force this conversion, even if
6220    we would rather not do it.  Usually set when using an explicit
6221    cast.  A C-style cast is being processed iff C_CAST_P is true.
6222
6223    Return error_mark_node, if something goes wrong.  */
6224
6225 tree
6226 build_ptrmemfunc (tree type, tree pfn, int force, bool c_cast_p)
6227 {
6228   tree fn;
6229   tree pfn_type;
6230   tree to_type;
6231
6232   if (error_operand_p (pfn))
6233     return error_mark_node;
6234
6235   pfn_type = TREE_TYPE (pfn);
6236   to_type = build_ptrmemfunc_type (type);
6237
6238   /* Handle multiple conversions of pointer to member functions.  */
6239   if (TYPE_PTRMEMFUNC_P (pfn_type))
6240     {
6241       tree delta = NULL_TREE;
6242       tree npfn = NULL_TREE;
6243       tree n;
6244
6245       if (!force
6246           && !can_convert_arg (to_type, TREE_TYPE (pfn), pfn, LOOKUP_NORMAL))
6247         error ("invalid conversion to type %qT from type %qT",
6248                to_type, pfn_type);
6249
6250       n = get_delta_difference (TYPE_PTRMEMFUNC_OBJECT_TYPE (pfn_type),
6251                                 TYPE_PTRMEMFUNC_OBJECT_TYPE (to_type),
6252                                 force,
6253                                 c_cast_p);
6254
6255       /* We don't have to do any conversion to convert a
6256          pointer-to-member to its own type.  But, we don't want to
6257          just return a PTRMEM_CST if there's an explicit cast; that
6258          cast should make the expression an invalid template argument.  */
6259       if (TREE_CODE (pfn) != PTRMEM_CST)
6260         {
6261           if (same_type_p (to_type, pfn_type))
6262             return pfn;
6263           else if (integer_zerop (n))
6264             return build_reinterpret_cast (to_type, pfn);
6265         }
6266
6267       if (TREE_SIDE_EFFECTS (pfn))
6268         pfn = save_expr (pfn);
6269
6270       /* Obtain the function pointer and the current DELTA.  */
6271       if (TREE_CODE (pfn) == PTRMEM_CST)
6272         expand_ptrmemfunc_cst (pfn, &delta, &npfn);
6273       else
6274         {
6275           npfn = build_ptrmemfunc_access_expr (pfn, pfn_identifier);
6276           delta = build_ptrmemfunc_access_expr (pfn, delta_identifier);
6277         }
6278
6279       /* Just adjust the DELTA field.  */
6280       gcc_assert  (same_type_ignoring_top_level_qualifiers_p
6281                    (TREE_TYPE (delta), ptrdiff_type_node));
6282       if (TARGET_PTRMEMFUNC_VBIT_LOCATION == ptrmemfunc_vbit_in_delta)
6283         n = cp_build_binary_op (LSHIFT_EXPR, n, integer_one_node);
6284       delta = cp_build_binary_op (PLUS_EXPR, delta, n);
6285       return build_ptrmemfunc1 (to_type, delta, npfn);
6286     }
6287
6288   /* Handle null pointer to member function conversions.  */
6289   if (integer_zerop (pfn))
6290     {
6291       pfn = build_c_cast (type, integer_zero_node);
6292       return build_ptrmemfunc1 (to_type,
6293                                 integer_zero_node,
6294                                 pfn);
6295     }
6296
6297   if (type_unknown_p (pfn))
6298     return instantiate_type (type, pfn, tf_warning_or_error);
6299
6300   fn = TREE_OPERAND (pfn, 0);
6301   gcc_assert (TREE_CODE (fn) == FUNCTION_DECL
6302               /* In a template, we will have preserved the
6303                  OFFSET_REF.  */
6304               || (processing_template_decl && TREE_CODE (fn) == OFFSET_REF));
6305   return make_ptrmem_cst (to_type, fn);
6306 }
6307
6308 /* Return the DELTA, IDX, PFN, and DELTA2 values for the PTRMEM_CST
6309    given by CST.
6310
6311    ??? There is no consistency as to the types returned for the above
6312    values.  Some code acts as if it were a sizetype and some as if it were
6313    integer_type_node.  */
6314
6315 void
6316 expand_ptrmemfunc_cst (tree cst, tree *delta, tree *pfn)
6317 {
6318   tree type = TREE_TYPE (cst);
6319   tree fn = PTRMEM_CST_MEMBER (cst);
6320   tree ptr_class, fn_class;
6321
6322   gcc_assert (TREE_CODE (fn) == FUNCTION_DECL);
6323
6324   /* The class that the function belongs to.  */
6325   fn_class = DECL_CONTEXT (fn);
6326
6327   /* The class that we're creating a pointer to member of.  */
6328   ptr_class = TYPE_PTRMEMFUNC_OBJECT_TYPE (type);
6329
6330   /* First, calculate the adjustment to the function's class.  */
6331   *delta = get_delta_difference (fn_class, ptr_class, /*force=*/0,
6332                                  /*c_cast_p=*/0);
6333
6334   if (!DECL_VIRTUAL_P (fn))
6335     *pfn = convert (TYPE_PTRMEMFUNC_FN_TYPE (type), build_addr_func (fn));
6336   else
6337     {
6338       /* If we're dealing with a virtual function, we have to adjust 'this'
6339          again, to point to the base which provides the vtable entry for
6340          fn; the call will do the opposite adjustment.  */
6341       tree orig_class = DECL_CONTEXT (fn);
6342       tree binfo = binfo_or_else (orig_class, fn_class);
6343       *delta = build2 (PLUS_EXPR, TREE_TYPE (*delta),
6344                        *delta, BINFO_OFFSET (binfo));
6345       *delta = fold_if_not_in_template (*delta);
6346
6347       /* We set PFN to the vtable offset at which the function can be
6348          found, plus one (unless ptrmemfunc_vbit_in_delta, in which
6349          case delta is shifted left, and then incremented).  */
6350       *pfn = DECL_VINDEX (fn);
6351       *pfn = build2 (MULT_EXPR, integer_type_node, *pfn,
6352                      TYPE_SIZE_UNIT (vtable_entry_type));
6353       *pfn = fold_if_not_in_template (*pfn);
6354
6355       switch (TARGET_PTRMEMFUNC_VBIT_LOCATION)
6356         {
6357         case ptrmemfunc_vbit_in_pfn:
6358           *pfn = build2 (PLUS_EXPR, integer_type_node, *pfn,
6359                          integer_one_node);
6360           *pfn = fold_if_not_in_template (*pfn);
6361           break;
6362
6363         case ptrmemfunc_vbit_in_delta:
6364           *delta = build2 (LSHIFT_EXPR, TREE_TYPE (*delta),
6365                            *delta, integer_one_node);
6366           *delta = fold_if_not_in_template (*delta);
6367           *delta = build2 (PLUS_EXPR, TREE_TYPE (*delta),
6368                            *delta, integer_one_node);
6369           *delta = fold_if_not_in_template (*delta);
6370           break;
6371
6372         default:
6373           gcc_unreachable ();
6374         }
6375
6376       *pfn = build_nop (TYPE_PTRMEMFUNC_FN_TYPE (type), *pfn);
6377       *pfn = fold_if_not_in_template (*pfn);
6378     }
6379 }
6380
6381 /* Return an expression for PFN from the pointer-to-member function
6382    given by T.  */
6383
6384 static tree
6385 pfn_from_ptrmemfunc (tree t)
6386 {
6387   if (TREE_CODE (t) == PTRMEM_CST)
6388     {
6389       tree delta;
6390       tree pfn;
6391
6392       expand_ptrmemfunc_cst (t, &delta, &pfn);
6393       if (pfn)
6394         return pfn;
6395     }
6396
6397   return build_ptrmemfunc_access_expr (t, pfn_identifier);
6398 }
6399
6400 /* Convert value RHS to type TYPE as preparation for an assignment to
6401    an lvalue of type TYPE.  ERRTYPE is a string to use in error
6402    messages: "assignment", "return", etc.  If FNDECL is non-NULL, we
6403    are doing the conversion in order to pass the PARMNUMth argument of
6404    FNDECL.  */
6405
6406 static tree
6407 convert_for_assignment (tree type, tree rhs,
6408                         const char *errtype, tree fndecl, int parmnum)
6409 {
6410   tree rhstype;
6411   enum tree_code coder;
6412   /* APPLE LOCAL radar 4874632 */
6413   tree new_rhs = NULL_TREE;
6414
6415   /* Strip NON_LVALUE_EXPRs since we aren't using as an lvalue.  */
6416   if (TREE_CODE (rhs) == NON_LVALUE_EXPR)
6417     rhs = TREE_OPERAND (rhs, 0);
6418
6419   rhstype = TREE_TYPE (rhs);
6420   coder = TREE_CODE (rhstype);
6421
6422   if (TREE_CODE (type) == VECTOR_TYPE && coder == VECTOR_TYPE
6423       && vector_types_convertible_p (type, rhstype, true))
6424     return convert (type, rhs);
6425
6426   if (rhs == error_mark_node || rhstype == error_mark_node)
6427     return error_mark_node;
6428   if (TREE_CODE (rhs) == TREE_LIST && TREE_VALUE (rhs) == error_mark_node)
6429     return error_mark_node;
6430
6431   /* The RHS of an assignment cannot have void type.  */
6432   if (coder == VOID_TYPE)
6433     {
6434       error ("void value not ignored as it ought to be");
6435       return error_mark_node;
6436     }
6437
6438   /* Simplify the RHS if possible.  */
6439   if (TREE_CODE (rhs) == CONST_DECL)
6440     rhs = DECL_INITIAL (rhs);
6441
6442   if (c_dialect_objc ())
6443     {
6444       int parmno;
6445       tree rname = fndecl;
6446
6447       if (!strcmp (errtype, "assignment"))
6448         parmno = -1;
6449       else if (!strcmp (errtype, "initialization"))
6450         parmno = -2;
6451       else
6452         {
6453           tree selector = objc_message_selector ();
6454
6455           parmno = parmnum;
6456
6457           if (selector && parmno > 1)
6458             {
6459               rname = selector;
6460               parmno -= 1;
6461             }
6462         }
6463
6464       /* APPLE LOCAL file radar 6231433 */
6465       if (objc_compare_types (type, rhstype, parmno, rname, "comparison"))
6466         /* APPLE LOCAL radar 4874632 */
6467         new_rhs = convert (type, rhs);
6468     }
6469
6470   /* [expr.ass]
6471
6472      The expression is implicitly converted (clause _conv_) to the
6473      cv-unqualified type of the left operand.
6474
6475      We allow bad conversions here because by the time we get to this point
6476      we are committed to doing the conversion.  If we end up doing a bad
6477      conversion, convert_like will complain.  */
6478   if (!can_convert_arg_bad (type, rhstype, rhs))
6479     {
6480       /* When -Wno-pmf-conversions is use, we just silently allow
6481          conversions from pointers-to-members to plain pointers.  If
6482          the conversion doesn't work, cp_convert will complain.  */
6483       if (!warn_pmf2ptr
6484           && TYPE_PTR_P (type)
6485           && TYPE_PTRMEMFUNC_P (rhstype))
6486         rhs = cp_convert (strip_top_quals (type), rhs);
6487       else
6488         {
6489           /* If the right-hand side has unknown type, then it is an
6490              overloaded function.  Call instantiate_type to get error
6491              messages.  */
6492           if (rhstype == unknown_type_node)
6493             instantiate_type (type, rhs, tf_warning_or_error);
6494           else if (fndecl)
6495             error ("cannot convert %qT to %qT for argument %qP to %qD",
6496                    rhstype, type, parmnum, fndecl);
6497           else
6498             error ("cannot convert %qT to %qT in %s", rhstype, type, errtype);
6499           return error_mark_node;
6500         }
6501     }
6502   if (warn_missing_format_attribute)
6503     {
6504       const enum tree_code codel = TREE_CODE (type);
6505       if ((codel == POINTER_TYPE || codel == REFERENCE_TYPE)
6506           && coder == codel
6507           && check_missing_format_attribute (type, rhstype))
6508         warning (OPT_Wmissing_format_attribute,
6509                  "%s might be a candidate for a format attribute",
6510                  errtype);
6511     }
6512
6513   /* If -Wparentheses, warn about a = b = c when a has type bool and b
6514      does not.  */
6515   if (warn_parentheses
6516       && type == boolean_type_node
6517       && TREE_CODE (rhs) == MODIFY_EXPR
6518       && !TREE_NO_WARNING (rhs)
6519       && TREE_TYPE (rhs) != boolean_type_node)
6520     {
6521       warning (OPT_Wparentheses,
6522                "suggest parentheses around assignment used as truth value");
6523       TREE_NO_WARNING (rhs) = 1;
6524     }
6525
6526   return perform_implicit_conversion (strip_top_quals (type), rhs);
6527 }
6528
6529 /* Convert RHS to be of type TYPE.
6530    If EXP is nonzero, it is the target of the initialization.
6531    ERRTYPE is a string to use in error messages.
6532
6533    Two major differences between the behavior of
6534    `convert_for_assignment' and `convert_for_initialization'
6535    are that references are bashed in the former, while
6536    copied in the latter, and aggregates are assigned in
6537    the former (operator=) while initialized in the
6538    latter (X(X&)).
6539
6540    If using constructor make sure no conversion operator exists, if one does
6541    exist, an ambiguity exists.
6542
6543    If flags doesn't include LOOKUP_COMPLAIN, don't complain about anything.  */
6544
6545 tree
6546 convert_for_initialization (tree exp, tree type, tree rhs, int flags,
6547                             const char *errtype, tree fndecl, int parmnum)
6548 {
6549   enum tree_code codel = TREE_CODE (type);
6550   tree rhstype;
6551   enum tree_code coder;
6552
6553   /* build_c_cast puts on a NOP_EXPR to make the result not an lvalue.
6554      Strip such NOP_EXPRs, since RHS is used in non-lvalue context.  */
6555   if (TREE_CODE (rhs) == NOP_EXPR
6556       && TREE_TYPE (rhs) == TREE_TYPE (TREE_OPERAND (rhs, 0))
6557       && codel != REFERENCE_TYPE)
6558     rhs = TREE_OPERAND (rhs, 0);
6559
6560   if (type == error_mark_node
6561       || rhs == error_mark_node
6562       || (TREE_CODE (rhs) == TREE_LIST && TREE_VALUE (rhs) == error_mark_node))
6563     return error_mark_node;
6564
6565   if ((TREE_CODE (TREE_TYPE (rhs)) == ARRAY_TYPE
6566        && TREE_CODE (type) != ARRAY_TYPE
6567        && (TREE_CODE (type) != REFERENCE_TYPE
6568            || TREE_CODE (TREE_TYPE (type)) != ARRAY_TYPE))
6569       || (TREE_CODE (TREE_TYPE (rhs)) == FUNCTION_TYPE
6570           && (TREE_CODE (type) != REFERENCE_TYPE
6571               || TREE_CODE (TREE_TYPE (type)) != FUNCTION_TYPE))
6572       || TREE_CODE (TREE_TYPE (rhs)) == METHOD_TYPE)
6573     rhs = decay_conversion (rhs);
6574
6575   rhstype = TREE_TYPE (rhs);
6576   coder = TREE_CODE (rhstype);
6577
6578   if (coder == ERROR_MARK)
6579     return error_mark_node;
6580
6581   /* We accept references to incomplete types, so we can
6582      return here before checking if RHS is of complete type.  */
6583
6584   if (codel == REFERENCE_TYPE)
6585     {
6586       /* This should eventually happen in convert_arguments.  */
6587       int savew = 0, savee = 0;
6588
6589       if (fndecl)
6590         savew = warningcount, savee = errorcount;
6591       rhs = initialize_reference (type, rhs, /*decl=*/NULL_TREE,
6592                                   /*cleanup=*/NULL);
6593       if (fndecl)
6594         {
6595           if (warningcount > savew)
6596             warning (0, "in passing argument %P of %q+D", parmnum, fndecl);
6597           else if (errorcount > savee)
6598             error ("in passing argument %P of %q+D", parmnum, fndecl);
6599         }
6600       return rhs;
6601     }
6602
6603   if (exp != 0)
6604     exp = require_complete_type (exp);
6605   if (exp == error_mark_node)
6606     return error_mark_node;
6607
6608   rhstype = non_reference (rhstype);
6609
6610   type = complete_type (type);
6611
6612   if (IS_AGGR_TYPE (type))
6613     return ocp_convert (type, rhs, CONV_IMPLICIT|CONV_FORCE_TEMP, flags);
6614
6615   return convert_for_assignment (type, rhs, errtype, fndecl, parmnum);
6616 }
6617 \f
6618 /* If RETVAL is the address of, or a reference to, a local variable or
6619    temporary give an appropriate warning.  */
6620
6621 static void
6622 maybe_warn_about_returning_address_of_local (tree retval)
6623 {
6624   tree valtype = TREE_TYPE (DECL_RESULT (current_function_decl));
6625   tree whats_returned = retval;
6626
6627   for (;;)
6628     {
6629       if (TREE_CODE (whats_returned) == COMPOUND_EXPR)
6630         whats_returned = TREE_OPERAND (whats_returned, 1);
6631       else if (TREE_CODE (whats_returned) == CONVERT_EXPR
6632                || TREE_CODE (whats_returned) == NON_LVALUE_EXPR
6633                || TREE_CODE (whats_returned) == NOP_EXPR)
6634         whats_returned = TREE_OPERAND (whats_returned, 0);
6635       else
6636         break;
6637     }
6638
6639   if (TREE_CODE (whats_returned) != ADDR_EXPR)
6640     return;
6641   whats_returned = TREE_OPERAND (whats_returned, 0);
6642
6643   if (TREE_CODE (valtype) == REFERENCE_TYPE)
6644     {
6645       if (TREE_CODE (whats_returned) == AGGR_INIT_EXPR
6646           || TREE_CODE (whats_returned) == TARGET_EXPR)
6647         {
6648           warning (0, "returning reference to temporary");
6649           return;
6650         }
6651       if (TREE_CODE (whats_returned) == VAR_DECL
6652           && DECL_NAME (whats_returned)
6653           && TEMP_NAME_P (DECL_NAME (whats_returned)))
6654         {
6655           warning (0, "reference to non-lvalue returned");
6656           return;
6657         }
6658     }
6659
6660   while (TREE_CODE (whats_returned) == COMPONENT_REF
6661          || TREE_CODE (whats_returned) == ARRAY_REF)
6662     whats_returned = TREE_OPERAND (whats_returned, 0);
6663
6664   if (DECL_P (whats_returned)
6665       && DECL_NAME (whats_returned)
6666       && DECL_FUNCTION_SCOPE_P (whats_returned)
6667       && !(TREE_STATIC (whats_returned)
6668            || TREE_PUBLIC (whats_returned)))
6669     {
6670       if (TREE_CODE (valtype) == REFERENCE_TYPE)
6671         warning (0, "reference to local variable %q+D returned",
6672                  whats_returned);
6673       /* APPLE LOCAL begin blocks 6040305 (cn) */
6674       else if (TREE_CODE (valtype) == BLOCK_POINTER_TYPE)
6675         error ("returning block that lives on the local stack");
6676       /* APPLE LOCAL end blocks 6040305 (cn) */
6677       else
6678         warning (0, "address of local variable %q+D returned",
6679                  whats_returned);
6680       return;
6681     }
6682 }
6683
6684 /* APPLE LOCAL begin blocks 6040305 (cm) */
6685 static bool
6686 types_are_block_compatible (tree t1, tree t2)
6687 {
6688   return comptypes (t1, t2, COMPARE_STRICT);
6689 }
6690 /* APPLE LOCAL end blocks 6040305 (cm) */
6691
6692 /* Check that returning RETVAL from the current function is valid.
6693    Return an expression explicitly showing all conversions required to
6694    change RETVAL into the function return type, and to assign it to
6695    the DECL_RESULT for the function.  Set *NO_WARNING to true if
6696    code reaches end of non-void function warning shouldn't be issued
6697    on this RETURN_EXPR.  */
6698
6699 tree
6700 check_return_expr (tree retval, bool *no_warning)
6701 {
6702   tree result;
6703   /* The type actually returned by the function, after any
6704      promotions.  */
6705   tree valtype;
6706   int fn_returns_value_p;
6707
6708   *no_warning = false;
6709
6710   /* A `volatile' function is one that isn't supposed to return, ever.
6711      (This is a G++ extension, used to get better code for functions
6712      that call the `volatile' function.)  */
6713   if (TREE_THIS_VOLATILE (current_function_decl))
6714     warning (0, "function declared %<noreturn%> has a %<return%> statement");
6715
6716   /* Check for various simple errors.  */
6717   if (DECL_DESTRUCTOR_P (current_function_decl))
6718     {
6719       if (retval)
6720         error ("returning a value from a destructor");
6721       return NULL_TREE;
6722     }
6723   else if (DECL_CONSTRUCTOR_P (current_function_decl))
6724     {
6725       if (in_function_try_handler)
6726         /* If a return statement appears in a handler of the
6727            function-try-block of a constructor, the program is ill-formed.  */
6728         error ("cannot return from a handler of a function-try-block of a constructor");
6729       else if (retval)
6730         /* You can't return a value from a constructor.  */
6731         error ("returning a value from a constructor");
6732       return NULL_TREE;
6733     }
6734
6735   /* APPLE LOCAL begin blocks 6040305 (cm) */
6736   /* APPLE LOCAL radar 6185344 */
6737   if (cur_block && !cur_block->block_has_return_type)
6738     {
6739       /* If this is the first return we've seen in the block, infer the type of
6740    the block from it. */
6741       if (cur_block->return_type == NULL_TREE)
6742   {
6743     if (retval)
6744       {
6745          tree restype;
6746          retval = decay_conversion (retval);
6747          restype = TYPE_MAIN_VARIANT (TREE_TYPE (retval));
6748          TREE_TYPE (current_function_decl)
6749       = build_function_type (restype,
6750                        TYPE_ARG_TYPES (TREE_TYPE (current_function_decl)));
6751          TREE_TYPE (DECL_RESULT (current_function_decl)) = restype;
6752          relayout_decl (DECL_RESULT (current_function_decl));
6753          cur_block->return_type = restype;
6754       }
6755     else
6756       cur_block->return_type = void_type_node;
6757   }
6758
6759       /* Verify that this result type matches the previous one.  We
6760    are pickier with blocks than for normal functions because
6761    this is a new feature and we set the rules. */
6762       if (TREE_CODE (cur_block->return_type) == VOID_TYPE)
6763   {
6764     if (retval)
6765       {
6766          error ("void block should not return a value");
6767          return error_mark_node;
6768       }
6769   }
6770       else if (!retval)
6771   {
6772     error ("non-void block should return a value");
6773     return error_mark_node;
6774   }
6775
6776       if (retval)
6777   {
6778     /* We have a non-void block with an expression, continue checking.  */
6779     valtype = TREE_TYPE (retval);
6780
6781     /* For now, restrict multiple return statements in a block to have 
6782         strict compatible types only. */
6783     if (!types_are_block_compatible (cur_block->return_type, valtype))
6784       {
6785          error ("incompatible type returning %qT, expected %qT",
6786             valtype, cur_block->return_type);
6787          return error_mark_node;
6788       }
6789   }
6790     }
6791   /* APPLE LOCAL end blocks 6040305 (cm) */
6792
6793   if (processing_template_decl)
6794     {
6795       current_function_returns_value = 1;
6796       return retval;
6797     }
6798
6799   /* When no explicit return-value is given in a function with a named
6800      return value, the named return value is used.  */
6801   result = DECL_RESULT (current_function_decl);
6802   valtype = TREE_TYPE (result);
6803   gcc_assert (valtype != NULL_TREE);
6804   fn_returns_value_p = !VOID_TYPE_P (valtype);
6805   if (!retval && DECL_NAME (result) && fn_returns_value_p)
6806     retval = result;
6807
6808   /* Check for a return statement with no return value in a function
6809      that's supposed to return a value.  */
6810   if (!retval && fn_returns_value_p)
6811     {
6812       pedwarn ("return-statement with no value, in function returning %qT",
6813                valtype);
6814       /* Clear this, so finish_function won't say that we reach the
6815          end of a non-void function (which we don't, we gave a
6816          return!).  */
6817       current_function_returns_null = 0;
6818       /* And signal caller that TREE_NO_WARNING should be set on the
6819          RETURN_EXPR to avoid control reaches end of non-void function
6820          warnings in tree-cfg.c.  */
6821       *no_warning = true;
6822     }
6823   /* Check for a return statement with a value in a function that
6824      isn't supposed to return a value.  */
6825   else if (retval && !fn_returns_value_p)
6826     {
6827       if (VOID_TYPE_P (TREE_TYPE (retval)))
6828         /* You can return a `void' value from a function of `void'
6829            type.  In that case, we have to evaluate the expression for
6830            its side-effects.  */
6831           finish_expr_stmt (retval);
6832       else
6833         pedwarn ("return-statement with a value, in function "
6834                  "returning 'void'");
6835
6836       current_function_returns_null = 1;
6837
6838       /* There's really no value to return, after all.  */
6839       return NULL_TREE;
6840     }
6841   else if (!retval)
6842     /* Remember that this function can sometimes return without a
6843        value.  */
6844     current_function_returns_null = 1;
6845   else
6846     /* Remember that this function did return a value.  */
6847     current_function_returns_value = 1;
6848
6849   /* Check for erroneous operands -- but after giving ourselves a
6850      chance to provide an error about returning a value from a void
6851      function.  */
6852   if (error_operand_p (retval))
6853     {
6854       current_function_return_value = error_mark_node;
6855       return error_mark_node;
6856     }
6857
6858   /* Only operator new(...) throw(), can return NULL [expr.new/13].  */
6859   if ((DECL_OVERLOADED_OPERATOR_P (current_function_decl) == NEW_EXPR
6860        || DECL_OVERLOADED_OPERATOR_P (current_function_decl) == VEC_NEW_EXPR)
6861       && !TYPE_NOTHROW_P (TREE_TYPE (current_function_decl))
6862       && ! flag_check_new
6863       && null_ptr_cst_p (retval))
6864     warning (0, "%<operator new%> must not return NULL unless it is "
6865              "declared %<throw()%> (or -fcheck-new is in effect)");
6866
6867   /* Effective C++ rule 15.  See also start_function.  */
6868   if (warn_ecpp
6869       && DECL_NAME (current_function_decl) == ansi_assopname(NOP_EXPR))
6870     {
6871       bool warn = true;
6872
6873       /* The function return type must be a reference to the current
6874         class.  */
6875       if (TREE_CODE (valtype) == REFERENCE_TYPE
6876           && same_type_ignoring_top_level_qualifiers_p
6877               (TREE_TYPE (valtype), TREE_TYPE (current_class_ref)))
6878         {
6879           /* Returning '*this' is obviously OK.  */
6880           if (retval == current_class_ref)
6881             warn = false;
6882           /* If we are calling a function whose return type is the same of
6883              the current class reference, it is ok.  */
6884           else if (TREE_CODE (retval) == INDIRECT_REF
6885                    && TREE_CODE (TREE_OPERAND (retval, 0)) == CALL_EXPR)
6886             warn = false;
6887         }
6888
6889       if (warn)
6890         warning (OPT_Weffc__, "%<operator=%> should return a reference to %<*this%>");
6891     }
6892
6893   /* The fabled Named Return Value optimization, as per [class.copy]/15:
6894
6895      [...]      For  a function with a class return type, if the expression
6896      in the return statement is the name of a local  object,  and  the  cv-
6897      unqualified  type  of  the  local  object  is the same as the function
6898      return type, an implementation is permitted to omit creating the  tem-
6899      porary  object  to  hold  the function return value [...]
6900
6901      So, if this is a value-returning function that always returns the same
6902      local variable, remember it.
6903
6904      It might be nice to be more flexible, and choose the first suitable
6905      variable even if the function sometimes returns something else, but
6906      then we run the risk of clobbering the variable we chose if the other
6907      returned expression uses the chosen variable somehow.  And people expect
6908      this restriction, anyway.  (jason 2000-11-19)
6909
6910      See finish_function and finalize_nrv for the rest of this optimization.  */
6911
6912   if (fn_returns_value_p && flag_elide_constructors)
6913     {
6914       if (retval != NULL_TREE
6915           && (current_function_return_value == NULL_TREE
6916               || current_function_return_value == retval)
6917           && TREE_CODE (retval) == VAR_DECL
6918           && DECL_CONTEXT (retval) == current_function_decl
6919           && ! TREE_STATIC (retval)
6920           && ! DECL_ANON_UNION_VAR_P (retval)
6921           && (DECL_ALIGN (retval)
6922               >= DECL_ALIGN (DECL_RESULT (current_function_decl)))
6923           && same_type_p ((TYPE_MAIN_VARIANT
6924                            (TREE_TYPE (retval))),
6925                           (TYPE_MAIN_VARIANT
6926                            (TREE_TYPE (TREE_TYPE (current_function_decl))))))
6927         current_function_return_value = retval;
6928       else
6929         current_function_return_value = error_mark_node;
6930     }
6931
6932   /* We don't need to do any conversions when there's nothing being
6933      returned.  */
6934   if (!retval)
6935     return NULL_TREE;
6936
6937   /* Do any required conversions.  */
6938   if (retval == result || DECL_CONSTRUCTOR_P (current_function_decl))
6939     /* No conversions are required.  */
6940     ;
6941   else
6942     {
6943       /* The type the function is declared to return.  */
6944       tree functype = TREE_TYPE (TREE_TYPE (current_function_decl));
6945
6946       /* The functype's return type will have been set to void, if it
6947          was an incomplete type.  Just treat this as 'return;' */
6948       if (VOID_TYPE_P (functype))
6949         return error_mark_node;
6950
6951       /* First convert the value to the function's return type, then
6952          to the type of return value's location to handle the
6953          case that functype is smaller than the valtype.  */
6954       retval = convert_for_initialization
6955         (NULL_TREE, functype, retval, LOOKUP_NORMAL|LOOKUP_ONLYCONVERTING,
6956          "return", NULL_TREE, 0);
6957       retval = convert (valtype, retval);
6958
6959       /* If the conversion failed, treat this just like `return;'.  */
6960       if (retval == error_mark_node)
6961         return retval;
6962       /* We can't initialize a register from a AGGR_INIT_EXPR.  */
6963       else if (! current_function_returns_struct
6964                && TREE_CODE (retval) == TARGET_EXPR
6965                && TREE_CODE (TREE_OPERAND (retval, 1)) == AGGR_INIT_EXPR)
6966         retval = build2 (COMPOUND_EXPR, TREE_TYPE (retval), retval,
6967                          TREE_OPERAND (retval, 0));
6968       else
6969         maybe_warn_about_returning_address_of_local (retval);
6970     }
6971
6972   /* Actually copy the value returned into the appropriate location.  */
6973   if (retval && retval != result)
6974     retval = build2 (INIT_EXPR, TREE_TYPE (result), result, retval);
6975
6976   return retval;
6977 }
6978
6979 \f
6980 /* Returns nonzero if the pointer-type FROM can be converted to the
6981    pointer-type TO via a qualification conversion.  If CONSTP is -1,
6982    then we return nonzero if the pointers are similar, and the
6983    cv-qualification signature of FROM is a proper subset of that of TO.
6984
6985    If CONSTP is positive, then all outer pointers have been
6986    const-qualified.  */
6987
6988 static int
6989 comp_ptr_ttypes_real (tree to, tree from, int constp)
6990 {
6991   bool to_more_cv_qualified = false;
6992
6993   for (; ; to = TREE_TYPE (to), from = TREE_TYPE (from))
6994     {
6995       if (TREE_CODE (to) != TREE_CODE (from))
6996         return 0;
6997
6998       if (TREE_CODE (from) == OFFSET_TYPE
6999           && !same_type_p (TYPE_OFFSET_BASETYPE (from),
7000                            TYPE_OFFSET_BASETYPE (to)))
7001         return 0;
7002
7003       /* Const and volatile mean something different for function types,
7004          so the usual checks are not appropriate.  */
7005       if (TREE_CODE (to) != FUNCTION_TYPE && TREE_CODE (to) != METHOD_TYPE)
7006         {
7007           /* In Objective-C++, some types may have been 'volatilized' by
7008              the compiler for EH; when comparing them here, the volatile
7009              qualification must be ignored.  */
7010           bool objc_quals_match = objc_type_quals_match (to, from);
7011
7012           if (!at_least_as_qualified_p (to, from) && !objc_quals_match)
7013             return 0;
7014
7015           if (!at_least_as_qualified_p (from, to) && !objc_quals_match)
7016             {
7017               if (constp == 0)
7018                 return 0;
7019               to_more_cv_qualified = true;
7020             }
7021
7022           if (constp > 0)
7023             constp &= TYPE_READONLY (to);
7024         }
7025
7026       if (TREE_CODE (to) != POINTER_TYPE && !TYPE_PTRMEM_P (to))
7027         return ((constp >= 0 || to_more_cv_qualified)
7028                 && same_type_ignoring_top_level_qualifiers_p (to, from));
7029     }
7030 }
7031
7032 /* When comparing, say, char ** to char const **, this function takes
7033    the 'char *' and 'char const *'.  Do not pass non-pointer/reference
7034    types to this function.  */
7035
7036 int
7037 comp_ptr_ttypes (tree to, tree from)
7038 {
7039   return comp_ptr_ttypes_real (to, from, 1);
7040 }
7041
7042 /* Returns 1 if to and from are (possibly multi-level) pointers to the same
7043    type or inheritance-related types, regardless of cv-quals.  */
7044
7045 int
7046 ptr_reasonably_similar (tree to, tree from)
7047 {
7048   for (; ; to = TREE_TYPE (to), from = TREE_TYPE (from))
7049     {
7050       /* Any target type is similar enough to void.  */
7051       if (TREE_CODE (to) == VOID_TYPE
7052           || TREE_CODE (from) == VOID_TYPE)
7053         return 1;
7054
7055       if (TREE_CODE (to) != TREE_CODE (from))
7056         return 0;
7057
7058       if (TREE_CODE (from) == OFFSET_TYPE
7059           && comptypes (TYPE_OFFSET_BASETYPE (to),
7060                         TYPE_OFFSET_BASETYPE (from),
7061                         COMPARE_BASE | COMPARE_DERIVED))
7062         continue;
7063
7064       if (TREE_CODE (to) == VECTOR_TYPE
7065           && vector_types_convertible_p (to, from, false))
7066         return 1;
7067
7068       if (TREE_CODE (to) == INTEGER_TYPE
7069           && TYPE_PRECISION (to) == TYPE_PRECISION (from))
7070         return 1;
7071
7072       if (TREE_CODE (to) == FUNCTION_TYPE)
7073         return 1;
7074
7075       if (TREE_CODE (to) != POINTER_TYPE)
7076         return comptypes
7077           (TYPE_MAIN_VARIANT (to), TYPE_MAIN_VARIANT (from),
7078            COMPARE_BASE | COMPARE_DERIVED);
7079     }
7080 }
7081
7082 /* Return true if TO and FROM (both of which are POINTER_TYPEs or
7083    pointer-to-member types) are the same, ignoring cv-qualification at
7084    all levels.  */
7085
7086 bool
7087 comp_ptr_ttypes_const (tree to, tree from)
7088 {
7089   for (; ; to = TREE_TYPE (to), from = TREE_TYPE (from))
7090     {
7091       if (TREE_CODE (to) != TREE_CODE (from))
7092         return false;
7093
7094       if (TREE_CODE (from) == OFFSET_TYPE
7095           && same_type_p (TYPE_OFFSET_BASETYPE (from),
7096                           TYPE_OFFSET_BASETYPE (to)))
7097           continue;
7098
7099       if (TREE_CODE (to) != POINTER_TYPE)
7100         return same_type_ignoring_top_level_qualifiers_p (to, from);
7101     }
7102 }
7103
7104 /* Returns the type qualifiers for this type, including the qualifiers on the
7105    elements for an array type.  */
7106
7107 int
7108 cp_type_quals (tree type)
7109 {
7110   type = strip_array_types (type);
7111   if (type == error_mark_node)
7112     return TYPE_UNQUALIFIED;
7113   return TYPE_QUALS (type);
7114 }
7115
7116 /* Returns nonzero if the TYPE is const from a C++ perspective: look inside
7117    arrays.  */
7118
7119 bool
7120 cp_type_readonly (tree type)
7121 {
7122   type = strip_array_types (type);
7123   return TYPE_READONLY (type);
7124 }
7125
7126 /* Returns nonzero if the TYPE contains a mutable member.  */
7127
7128 bool
7129 cp_has_mutable_p (tree type)
7130 {
7131   type = strip_array_types (type);
7132
7133   return CLASS_TYPE_P (type) && CLASSTYPE_HAS_MUTABLE (type);
7134 }
7135
7136 /* Apply the TYPE_QUALS to the new DECL.  */
7137 void
7138 cp_apply_type_quals_to_decl (int type_quals, tree decl)
7139 {
7140   tree type = TREE_TYPE (decl);
7141
7142   if (type == error_mark_node)
7143     return;
7144
7145   if (TREE_CODE (type) == FUNCTION_TYPE
7146       && type_quals != TYPE_UNQUALIFIED)
7147     {
7148       /* This was an error in C++98 (cv-qualifiers cannot be added to
7149          a function type), but DR 295 makes the code well-formed by
7150          dropping the extra qualifiers. */
7151       if (pedantic)
7152         {
7153           tree bad_type = build_qualified_type (type, type_quals);
7154           pedwarn ("ignoring %qV qualifiers added to function type %qT",
7155                    bad_type, type);
7156         }
7157
7158       TREE_TYPE (decl) = TYPE_MAIN_VARIANT (type);
7159       return;
7160     }
7161
7162   /* Avoid setting TREE_READONLY incorrectly.  */
7163   if (/* If the object has a constructor, the constructor may modify
7164          the object.  */
7165       TYPE_NEEDS_CONSTRUCTING (type)
7166       /* If the type isn't complete, we don't know yet if it will need
7167          constructing.  */
7168       || !COMPLETE_TYPE_P (type)
7169       /* If the type has a mutable component, that component might be
7170          modified.  */
7171       || TYPE_HAS_MUTABLE_P (type))
7172     type_quals &= ~TYPE_QUAL_CONST;
7173
7174   c_apply_type_quals_to_decl (type_quals, decl);
7175 }
7176
7177 /* Subroutine of casts_away_constness.  Make T1 and T2 point at
7178    exemplar types such that casting T1 to T2 is casting away constness
7179    if and only if there is no implicit conversion from T1 to T2.  */
7180
7181 static void
7182 casts_away_constness_r (tree *t1, tree *t2)
7183 {
7184   int quals1;
7185   int quals2;
7186
7187   /* [expr.const.cast]
7188
7189      For multi-level pointer to members and multi-level mixed pointers
7190      and pointers to members (conv.qual), the "member" aspect of a
7191      pointer to member level is ignored when determining if a const
7192      cv-qualifier has been cast away.  */
7193   /* [expr.const.cast]
7194
7195      For  two  pointer types:
7196
7197             X1 is T1cv1,1 * ... cv1,N *   where T1 is not a pointer type
7198             X2 is T2cv2,1 * ... cv2,M *   where T2 is not a pointer type
7199             K is min(N,M)
7200
7201      casting from X1 to X2 casts away constness if, for a non-pointer
7202      type T there does not exist an implicit conversion (clause
7203      _conv_) from:
7204
7205             Tcv1,(N-K+1) * cv1,(N-K+2) * ... cv1,N *
7206
7207      to
7208
7209             Tcv2,(M-K+1) * cv2,(M-K+2) * ... cv2,M *.  */
7210   if ((!TYPE_PTR_P (*t1) && !TYPE_PTRMEM_P (*t1))
7211       || (!TYPE_PTR_P (*t2) && !TYPE_PTRMEM_P (*t2)))
7212     {
7213       *t1 = cp_build_qualified_type (void_type_node,
7214                                      cp_type_quals (*t1));
7215       *t2 = cp_build_qualified_type (void_type_node,
7216                                      cp_type_quals (*t2));
7217       return;
7218     }
7219
7220   quals1 = cp_type_quals (*t1);
7221   quals2 = cp_type_quals (*t2);
7222
7223   if (TYPE_PTRMEM_P (*t1))
7224     *t1 = TYPE_PTRMEM_POINTED_TO_TYPE (*t1);
7225   else
7226     *t1 = TREE_TYPE (*t1);
7227   if (TYPE_PTRMEM_P (*t2))
7228     *t2 = TYPE_PTRMEM_POINTED_TO_TYPE (*t2);
7229   else
7230     *t2 = TREE_TYPE (*t2);
7231
7232   casts_away_constness_r (t1, t2);
7233   *t1 = build_pointer_type (*t1);
7234   *t2 = build_pointer_type (*t2);
7235   *t1 = cp_build_qualified_type (*t1, quals1);
7236   *t2 = cp_build_qualified_type (*t2, quals2);
7237 }
7238
7239 /* Returns nonzero if casting from TYPE1 to TYPE2 casts away
7240    constness.  */
7241
7242 static bool
7243 casts_away_constness (tree t1, tree t2)
7244 {
7245   if (TREE_CODE (t2) == REFERENCE_TYPE)
7246     {
7247       /* [expr.const.cast]
7248
7249          Casting from an lvalue of type T1 to an lvalue of type T2
7250          using a reference cast casts away constness if a cast from an
7251          rvalue of type "pointer to T1" to the type "pointer to T2"
7252          casts away constness.  */
7253       t1 = (TREE_CODE (t1) == REFERENCE_TYPE ? TREE_TYPE (t1) : t1);
7254       return casts_away_constness (build_pointer_type (t1),
7255                                    build_pointer_type (TREE_TYPE (t2)));
7256     }
7257
7258   if (TYPE_PTRMEM_P (t1) && TYPE_PTRMEM_P (t2))
7259     /* [expr.const.cast]
7260
7261        Casting from an rvalue of type "pointer to data member of X
7262        of type T1" to the type "pointer to data member of Y of type
7263        T2" casts away constness if a cast from an rvalue of type
7264        "pointer to T1" to the type "pointer to T2" casts away
7265        constness.  */
7266     return casts_away_constness
7267       (build_pointer_type (TYPE_PTRMEM_POINTED_TO_TYPE (t1)),
7268        build_pointer_type (TYPE_PTRMEM_POINTED_TO_TYPE (t2)));
7269
7270   /* Casting away constness is only something that makes sense for
7271      pointer or reference types.  */
7272   if (TREE_CODE (t1) != POINTER_TYPE
7273       || TREE_CODE (t2) != POINTER_TYPE)
7274     return false;
7275
7276   /* Top-level qualifiers don't matter.  */
7277   t1 = TYPE_MAIN_VARIANT (t1);
7278   t2 = TYPE_MAIN_VARIANT (t2);
7279   casts_away_constness_r (&t1, &t2);
7280   if (!can_convert (t2, t1))
7281     return true;
7282
7283   return false;
7284 }
7285
7286 /* If T is a REFERENCE_TYPE return the type to which T refers.
7287    Otherwise, return T itself.  */
7288
7289 tree
7290 non_reference (tree t)
7291 {
7292   if (TREE_CODE (t) == REFERENCE_TYPE)
7293     t = TREE_TYPE (t);
7294   return t;
7295 }
7296
7297
7298 /* Return nonzero if REF is an lvalue valid for this language;
7299    otherwise, print an error message and return zero.  USE says
7300    how the lvalue is being used and so selects the error message.  */
7301
7302 int
7303 lvalue_or_else (tree ref, enum lvalue_use use)
7304 {
7305   int win = lvalue_p (ref);
7306
7307   if (!win)
7308     lvalue_error (use);
7309
7310   return win;
7311 }