OSDN Git Service

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