OSDN Git Service

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