OSDN Git Service

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