OSDN Git Service

cp/:
[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 frontend; only _DECLs and _REFs are lvalues in the backend.  */
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_Wstring_literal_comparison,
3323                  "comparison with string literal");
3324
3325       build_type = boolean_type_node;
3326       if ((code0 == INTEGER_TYPE || code0 == REAL_TYPE
3327            || code0 == COMPLEX_TYPE)
3328           && (code1 == INTEGER_TYPE || code1 == REAL_TYPE
3329               || code1 == COMPLEX_TYPE))
3330         short_compare = 1;
3331       else if ((code0 == POINTER_TYPE && code1 == POINTER_TYPE)
3332                || (TYPE_PTRMEM_P (type0) && TYPE_PTRMEM_P (type1)))
3333         result_type = composite_pointer_type (type0, type1, op0, op1,
3334                                               "comparison");
3335       else if ((code0 == POINTER_TYPE || TYPE_PTRMEM_P (type0))
3336                && null_ptr_cst_p (op1))
3337         {
3338           if (TREE_CODE (op0) == ADDR_EXPR
3339               && decl_with_nonnull_addr_p (TREE_OPERAND (op0, 0)))
3340             warning (OPT_Walways_true, "the address of %qD will never be NULL",
3341                      TREE_OPERAND (op0, 0));
3342           result_type = type0;
3343         }
3344       else if ((code1 == POINTER_TYPE || TYPE_PTRMEM_P (type1))
3345                && null_ptr_cst_p (op0))
3346         {
3347           if (TREE_CODE (op1) == ADDR_EXPR 
3348               && decl_with_nonnull_addr_p (TREE_OPERAND (op1, 0)))
3349             warning (OPT_Walways_true, "the address of %qD will never be NULL",
3350                      TREE_OPERAND (op1, 0));
3351           result_type = type1;
3352         }
3353       else if (code0 == POINTER_TYPE && code1 == INTEGER_TYPE)
3354         {
3355           result_type = type0;
3356           error ("ISO C++ forbids comparison between pointer and integer");
3357         }
3358       else if (code0 == INTEGER_TYPE && code1 == POINTER_TYPE)
3359         {
3360           result_type = type1;
3361           error ("ISO C++ forbids comparison between pointer and integer");
3362         }
3363       else if (TYPE_PTRMEMFUNC_P (type0) && null_ptr_cst_p (op1))
3364         {
3365           if (TARGET_PTRMEMFUNC_VBIT_LOCATION
3366               == ptrmemfunc_vbit_in_delta)
3367             {
3368               tree pfn0 = pfn_from_ptrmemfunc (op0);
3369               tree delta0 = build_ptrmemfunc_access_expr (op0,
3370                                                           delta_identifier);
3371               tree e1 = cp_build_binary_op (EQ_EXPR,
3372                                             pfn0,       
3373                                             fold_convert (TREE_TYPE (pfn0),
3374                                                           integer_zero_node));
3375               tree e2 = cp_build_binary_op (BIT_AND_EXPR, 
3376                                             delta0,
3377                                             integer_one_node);
3378               e2 = cp_build_binary_op (EQ_EXPR, e2, integer_zero_node);
3379               op0 = cp_build_binary_op (TRUTH_ANDIF_EXPR, e1, e2);
3380               op1 = cp_convert (TREE_TYPE (op0), integer_one_node); 
3381             }
3382           else 
3383             {
3384               op0 = build_ptrmemfunc_access_expr (op0, pfn_identifier);
3385               op1 = cp_convert (TREE_TYPE (op0), integer_zero_node); 
3386             }
3387           result_type = TREE_TYPE (op0);
3388         }
3389       else if (TYPE_PTRMEMFUNC_P (type1) && null_ptr_cst_p (op0))
3390         return cp_build_binary_op (code, op1, op0);
3391       else if (TYPE_PTRMEMFUNC_P (type0) && TYPE_PTRMEMFUNC_P (type1)
3392                && same_type_p (type0, type1))
3393         {
3394           /* E will be the final comparison.  */
3395           tree e;
3396           /* E1 and E2 are for scratch.  */
3397           tree e1;
3398           tree e2;
3399           tree pfn0;
3400           tree pfn1;
3401           tree delta0;
3402           tree delta1;
3403
3404           if (TREE_SIDE_EFFECTS (op0))
3405             op0 = save_expr (op0);
3406           if (TREE_SIDE_EFFECTS (op1))
3407             op1 = save_expr (op1);
3408
3409           pfn0 = pfn_from_ptrmemfunc (op0);
3410           pfn1 = pfn_from_ptrmemfunc (op1);
3411           delta0 = build_ptrmemfunc_access_expr (op0,
3412                                                  delta_identifier);
3413           delta1 = build_ptrmemfunc_access_expr (op1,
3414                                                  delta_identifier);
3415           if (TARGET_PTRMEMFUNC_VBIT_LOCATION
3416               == ptrmemfunc_vbit_in_delta)
3417             {
3418               /* We generate:
3419
3420                  (op0.pfn == op1.pfn
3421                   && ((op0.delta == op1.delta)
3422                        || (!op0.pfn && op0.delta & 1 == 0 
3423                            && op1.delta & 1 == 0))
3424
3425                  The reason for the `!op0.pfn' bit is that a NULL
3426                  pointer-to-member is any member with a zero PFN and
3427                  LSB of the DELTA field is 0.  */
3428
3429               e1 = cp_build_binary_op (BIT_AND_EXPR,
3430                                        delta0, 
3431                                        integer_one_node);
3432               e1 = cp_build_binary_op (EQ_EXPR, e1, integer_zero_node);
3433               e2 = cp_build_binary_op (BIT_AND_EXPR,
3434                                        delta1,
3435                                        integer_one_node);
3436               e2 = cp_build_binary_op (EQ_EXPR, e2, integer_zero_node);
3437               e1 = cp_build_binary_op (TRUTH_ANDIF_EXPR, e2, e1);
3438               e2 = cp_build_binary_op (EQ_EXPR,
3439                                        pfn0,
3440                                        fold_convert (TREE_TYPE (pfn0),
3441                                                      integer_zero_node));
3442               e2 = cp_build_binary_op (TRUTH_ANDIF_EXPR, e2, e1);
3443               e1 = cp_build_binary_op (EQ_EXPR, delta0, delta1);
3444               e1 = cp_build_binary_op (TRUTH_ORIF_EXPR, e1, e2);
3445             }
3446           else
3447             {
3448               /* We generate:
3449
3450                  (op0.pfn == op1.pfn
3451                  && (!op0.pfn || op0.delta == op1.delta))
3452
3453                  The reason for the `!op0.pfn' bit is that a NULL
3454                  pointer-to-member is any member with a zero PFN; the
3455                  DELTA field is unspecified.  */
3456  
3457               e1 = cp_build_binary_op (EQ_EXPR, delta0, delta1);
3458               e2 = cp_build_binary_op (EQ_EXPR,
3459                                        pfn0,
3460                                        fold_convert (TREE_TYPE (pfn0),
3461                                                    integer_zero_node));
3462               e1 = cp_build_binary_op (TRUTH_ORIF_EXPR, e1, e2);
3463             }
3464           e2 = build2 (EQ_EXPR, boolean_type_node, pfn0, pfn1);
3465           e = cp_build_binary_op (TRUTH_ANDIF_EXPR, e2, e1);
3466           if (code == EQ_EXPR)
3467             return e;
3468           return cp_build_binary_op (EQ_EXPR, e, integer_zero_node);
3469         }
3470       else
3471         {
3472           gcc_assert (!TYPE_PTRMEMFUNC_P (type0)
3473                       || !same_type_p (TYPE_PTRMEMFUNC_FN_TYPE (type0),
3474                                        type1));
3475           gcc_assert (!TYPE_PTRMEMFUNC_P (type1)
3476                       || !same_type_p (TYPE_PTRMEMFUNC_FN_TYPE (type1),
3477                                        type0));
3478         }
3479
3480       break;
3481
3482     case MAX_EXPR:
3483     case MIN_EXPR:
3484       if ((code0 == INTEGER_TYPE || code0 == REAL_TYPE)
3485            && (code1 == INTEGER_TYPE || code1 == REAL_TYPE))
3486         shorten = 1;
3487       else if (code0 == POINTER_TYPE && code1 == POINTER_TYPE)
3488         result_type = composite_pointer_type (type0, type1, op0, op1,
3489                                               "comparison");
3490       break;
3491
3492     case LE_EXPR:
3493     case GE_EXPR:
3494     case LT_EXPR:
3495     case GT_EXPR:
3496       if (TREE_CODE (orig_op0) == STRING_CST
3497           || TREE_CODE (orig_op1) == STRING_CST)
3498         warning (OPT_Wstring_literal_comparison,
3499                  "comparison with string literal");
3500
3501       build_type = boolean_type_node;
3502       if ((code0 == INTEGER_TYPE || code0 == REAL_TYPE)
3503            && (code1 == INTEGER_TYPE || code1 == REAL_TYPE))
3504         short_compare = 1;
3505       else if (code0 == POINTER_TYPE && code1 == POINTER_TYPE)
3506         result_type = composite_pointer_type (type0, type1, op0, op1,
3507                                               "comparison");
3508       else if (code0 == POINTER_TYPE && TREE_CODE (op1) == INTEGER_CST
3509                && integer_zerop (op1))
3510         result_type = type0;
3511       else if (code1 == POINTER_TYPE && TREE_CODE (op0) == INTEGER_CST
3512                && integer_zerop (op0))
3513         result_type = type1;
3514       else if (code0 == POINTER_TYPE && code1 == INTEGER_TYPE)
3515         {
3516           result_type = type0;
3517           pedwarn ("ISO C++ forbids comparison between pointer and integer");
3518         }
3519       else if (code0 == INTEGER_TYPE && code1 == POINTER_TYPE)
3520         {
3521           result_type = type1;
3522           pedwarn ("ISO C++ forbids comparison between pointer and integer");
3523         }
3524       break;
3525
3526     case UNORDERED_EXPR:
3527     case ORDERED_EXPR:
3528     case UNLT_EXPR:
3529     case UNLE_EXPR:
3530     case UNGT_EXPR:
3531     case UNGE_EXPR:
3532     case UNEQ_EXPR:
3533       build_type = integer_type_node;
3534       if (code0 != REAL_TYPE || code1 != REAL_TYPE)
3535         {
3536           error ("unordered comparison on non-floating point argument");
3537           return error_mark_node;
3538         }
3539       common = 1;
3540       break;
3541
3542     default:
3543       break;
3544     }
3545
3546   if (((code0 == INTEGER_TYPE || code0 == REAL_TYPE || code0 == COMPLEX_TYPE)
3547        && (code1 == INTEGER_TYPE || code1 == REAL_TYPE
3548            || code1 == COMPLEX_TYPE)))
3549     arithmetic_types_p = 1;
3550   else
3551     {
3552       arithmetic_types_p = 0;
3553       /* Vector arithmetic is only allowed when both sides are vectors.  */
3554       if (code0 == VECTOR_TYPE && code1 == VECTOR_TYPE)
3555         {
3556           if (!tree_int_cst_equal (TYPE_SIZE (type0), TYPE_SIZE (type1))
3557               || !same_scalar_type_ignoring_signedness (TREE_TYPE (type0),
3558                                                         TREE_TYPE (type1)))
3559             {
3560               binary_op_error (code);
3561               return error_mark_node;
3562             }
3563           arithmetic_types_p = 1;
3564         }
3565     }
3566   /* Determine the RESULT_TYPE, if it is not already known.  */
3567   if (!result_type
3568       && arithmetic_types_p
3569       && (shorten || common || short_compare))
3570     result_type = common_type (type0, type1);
3571
3572   if (!result_type)
3573     {
3574       error ("invalid operands of types %qT and %qT to binary %qO",
3575              TREE_TYPE (orig_op0), TREE_TYPE (orig_op1), code);
3576       return error_mark_node;
3577     }
3578
3579   /* If we're in a template, the only thing we need to know is the
3580      RESULT_TYPE.  */
3581   if (processing_template_decl)
3582     return build2 (resultcode,
3583                    build_type ? build_type : result_type,
3584                    op0, op1);
3585
3586   if (arithmetic_types_p)
3587     {
3588       int none_complex = (code0 != COMPLEX_TYPE && code1 != COMPLEX_TYPE);
3589
3590       /* For certain operations (which identify themselves by shorten != 0)
3591          if both args were extended from the same smaller type,
3592          do the arithmetic in that type and then extend.
3593
3594          shorten !=0 and !=1 indicates a bitwise operation.
3595          For them, this optimization is safe only if
3596          both args are zero-extended or both are sign-extended.
3597          Otherwise, we might change the result.
3598          Eg, (short)-1 | (unsigned short)-1 is (int)-1
3599          but calculated in (unsigned short) it would be (unsigned short)-1.  */
3600
3601       if (shorten && none_complex)
3602         {
3603           int unsigned0, unsigned1;
3604           tree arg0 = get_narrower (op0, &unsigned0);
3605           tree arg1 = get_narrower (op1, &unsigned1);
3606           /* UNS is 1 if the operation to be done is an unsigned one.  */
3607           int uns = TYPE_UNSIGNED (result_type);
3608           tree type;
3609
3610           final_type = result_type;
3611
3612           /* Handle the case that OP0 does not *contain* a conversion
3613              but it *requires* conversion to FINAL_TYPE.  */
3614
3615           if (op0 == arg0 && TREE_TYPE (op0) != final_type)
3616             unsigned0 = TYPE_UNSIGNED (TREE_TYPE (op0));
3617           if (op1 == arg1 && TREE_TYPE (op1) != final_type)
3618             unsigned1 = TYPE_UNSIGNED (TREE_TYPE (op1));
3619
3620           /* Now UNSIGNED0 is 1 if ARG0 zero-extends to FINAL_TYPE.  */
3621
3622           /* For bitwise operations, signedness of nominal type
3623              does not matter.  Consider only how operands were extended.  */
3624           if (shorten == -1)
3625             uns = unsigned0;
3626
3627           /* Note that in all three cases below we refrain from optimizing
3628              an unsigned operation on sign-extended args.
3629              That would not be valid.  */
3630
3631           /* Both args variable: if both extended in same way
3632              from same width, do it in that width.
3633              Do it unsigned if args were zero-extended.  */
3634           if ((TYPE_PRECISION (TREE_TYPE (arg0))
3635                < TYPE_PRECISION (result_type))
3636               && (TYPE_PRECISION (TREE_TYPE (arg1))
3637                   == TYPE_PRECISION (TREE_TYPE (arg0)))
3638               && unsigned0 == unsigned1
3639               && (unsigned0 || !uns))
3640             result_type = c_common_signed_or_unsigned_type
3641               (unsigned0, common_type (TREE_TYPE (arg0), TREE_TYPE (arg1)));
3642           else if (TREE_CODE (arg0) == INTEGER_CST
3643                    && (unsigned1 || !uns)
3644                    && (TYPE_PRECISION (TREE_TYPE (arg1))
3645                        < TYPE_PRECISION (result_type))
3646                    && (type = c_common_signed_or_unsigned_type
3647                        (unsigned1, TREE_TYPE (arg1)),
3648                        int_fits_type_p (arg0, type)))
3649             result_type = type;
3650           else if (TREE_CODE (arg1) == INTEGER_CST
3651                    && (unsigned0 || !uns)
3652                    && (TYPE_PRECISION (TREE_TYPE (arg0))
3653                        < TYPE_PRECISION (result_type))
3654                    && (type = c_common_signed_or_unsigned_type
3655                        (unsigned0, TREE_TYPE (arg0)),
3656                        int_fits_type_p (arg1, type)))
3657             result_type = type;
3658         }
3659
3660       /* Shifts can be shortened if shifting right.  */
3661
3662       if (short_shift)
3663         {
3664           int unsigned_arg;
3665           tree arg0 = get_narrower (op0, &unsigned_arg);
3666
3667           final_type = result_type;
3668
3669           if (arg0 == op0 && final_type == TREE_TYPE (op0))
3670             unsigned_arg = TYPE_UNSIGNED (TREE_TYPE (op0));
3671
3672           if (TYPE_PRECISION (TREE_TYPE (arg0)) < TYPE_PRECISION (result_type)
3673               /* We can shorten only if the shift count is less than the
3674                  number of bits in the smaller type size.  */
3675               && compare_tree_int (op1, TYPE_PRECISION (TREE_TYPE (arg0))) < 0
3676               /* If arg is sign-extended and then unsigned-shifted,
3677                  we can simulate this with a signed shift in arg's type
3678                  only if the extended result is at least twice as wide
3679                  as the arg.  Otherwise, the shift could use up all the
3680                  ones made by sign-extension and bring in zeros.
3681                  We can't optimize that case at all, but in most machines
3682                  it never happens because available widths are 2**N.  */
3683               && (!TYPE_UNSIGNED (final_type)
3684                   || unsigned_arg
3685                   || (((unsigned) 2 * TYPE_PRECISION (TREE_TYPE (arg0)))
3686                       <= TYPE_PRECISION (result_type))))
3687             {
3688               /* Do an unsigned shift if the operand was zero-extended.  */
3689               result_type
3690                 = c_common_signed_or_unsigned_type (unsigned_arg,
3691                                                     TREE_TYPE (arg0));
3692               /* Convert value-to-be-shifted to that type.  */
3693               if (TREE_TYPE (op0) != result_type)
3694                 op0 = cp_convert (result_type, op0);
3695               converted = 1;
3696             }
3697         }
3698
3699       /* Comparison operations are shortened too but differently.
3700          They identify themselves by setting short_compare = 1.  */
3701
3702       if (short_compare)
3703         {
3704           /* Don't write &op0, etc., because that would prevent op0
3705              from being kept in a register.
3706              Instead, make copies of the our local variables and
3707              pass the copies by reference, then copy them back afterward.  */
3708           tree xop0 = op0, xop1 = op1, xresult_type = result_type;
3709           enum tree_code xresultcode = resultcode;
3710           tree val
3711             = shorten_compare (&xop0, &xop1, &xresult_type, &xresultcode);
3712           if (val != 0)
3713             return cp_convert (boolean_type_node, val);
3714           op0 = xop0, op1 = xop1;
3715           converted = 1;
3716           resultcode = xresultcode;
3717         }
3718
3719       if ((short_compare || code == MIN_EXPR || code == MAX_EXPR)
3720           && warn_sign_compare
3721           /* Do not warn until the template is instantiated; we cannot
3722              bound the ranges of the arguments until that point.  */
3723           && !processing_template_decl)
3724         {
3725           int op0_signed = !TYPE_UNSIGNED (TREE_TYPE (orig_op0));
3726           int op1_signed = !TYPE_UNSIGNED (TREE_TYPE (orig_op1));
3727
3728           int unsignedp0, unsignedp1;
3729           tree primop0 = get_narrower (op0, &unsignedp0);
3730           tree primop1 = get_narrower (op1, &unsignedp1);
3731
3732           /* Check for comparison of different enum types.  */
3733           if (TREE_CODE (TREE_TYPE (orig_op0)) == ENUMERAL_TYPE
3734               && TREE_CODE (TREE_TYPE (orig_op1)) == ENUMERAL_TYPE
3735               && TYPE_MAIN_VARIANT (TREE_TYPE (orig_op0))
3736                  != TYPE_MAIN_VARIANT (TREE_TYPE (orig_op1)))
3737             {
3738               warning (0, "comparison between types %q#T and %q#T",
3739                        TREE_TYPE (orig_op0), TREE_TYPE (orig_op1));
3740             }
3741
3742           /* Give warnings for comparisons between signed and unsigned
3743              quantities that may fail.  */
3744           /* Do the checking based on the original operand trees, so that
3745              casts will be considered, but default promotions won't be.  */
3746
3747           /* Do not warn if the comparison is being done in a signed type,
3748              since the signed type will only be chosen if it can represent
3749              all the values of the unsigned type.  */
3750           if (!TYPE_UNSIGNED (result_type))
3751             /* OK */;
3752           /* Do not warn if both operands are unsigned.  */
3753           else if (op0_signed == op1_signed)
3754             /* OK */;
3755           /* Do not warn if the signed quantity is an unsuffixed
3756              integer literal (or some static constant expression
3757              involving such literals or a conditional expression
3758              involving such literals) and it is non-negative.  */
3759           else if ((op0_signed && tree_expr_nonnegative_p (orig_op0))
3760                    || (op1_signed && tree_expr_nonnegative_p (orig_op1)))
3761             /* OK */;
3762           /* Do not warn if the comparison is an equality operation,
3763              the unsigned quantity is an integral constant and it does
3764              not use the most significant bit of result_type.  */
3765           else if ((resultcode == EQ_EXPR || resultcode == NE_EXPR)
3766                    && ((op0_signed && TREE_CODE (orig_op1) == INTEGER_CST
3767                         && int_fits_type_p (orig_op1, c_common_signed_type
3768                                             (result_type)))
3769                         || (op1_signed && TREE_CODE (orig_op0) == INTEGER_CST
3770                             && int_fits_type_p (orig_op0, c_common_signed_type
3771                                                 (result_type)))))
3772             /* OK */;
3773           else
3774             warning (0, "comparison between signed and unsigned integer expressions");
3775
3776           /* Warn if two unsigned values are being compared in a size
3777              larger than their original size, and one (and only one) is the
3778              result of a `~' operator.  This comparison will always fail.
3779
3780              Also warn if one operand is a constant, and the constant does not
3781              have all bits set that are set in the ~ operand when it is
3782              extended.  */
3783
3784           if ((TREE_CODE (primop0) == BIT_NOT_EXPR)
3785               ^ (TREE_CODE (primop1) == BIT_NOT_EXPR))
3786             {
3787               if (TREE_CODE (primop0) == BIT_NOT_EXPR)
3788                 primop0 = get_narrower (TREE_OPERAND (op0, 0), &unsignedp0);
3789               if (TREE_CODE (primop1) == BIT_NOT_EXPR)
3790                 primop1 = get_narrower (TREE_OPERAND (op1, 0), &unsignedp1);
3791
3792               if (host_integerp (primop0, 0) || host_integerp (primop1, 0))
3793                 {
3794                   tree primop;
3795                   HOST_WIDE_INT constant, mask;
3796                   int unsignedp;
3797                   unsigned int bits;
3798
3799                   if (host_integerp (primop0, 0))
3800                     {
3801                       primop = primop1;
3802                       unsignedp = unsignedp1;
3803                       constant = tree_low_cst (primop0, 0);
3804                     }
3805                   else
3806                     {
3807                       primop = primop0;
3808                       unsignedp = unsignedp0;
3809                       constant = tree_low_cst (primop1, 0);
3810                     }
3811
3812                   bits = TYPE_PRECISION (TREE_TYPE (primop));
3813                   if (bits < TYPE_PRECISION (result_type)
3814                       && bits < HOST_BITS_PER_LONG && unsignedp)
3815                     {
3816                       mask = (~ (HOST_WIDE_INT) 0) << bits;
3817                       if ((mask & constant) != mask)
3818                         warning (0, "comparison of promoted ~unsigned with constant");
3819                     }
3820                 }
3821               else if (unsignedp0 && unsignedp1
3822                        && (TYPE_PRECISION (TREE_TYPE (primop0))
3823                            < TYPE_PRECISION (result_type))
3824                        && (TYPE_PRECISION (TREE_TYPE (primop1))
3825                            < TYPE_PRECISION (result_type)))
3826                 warning (0, "comparison of promoted ~unsigned with unsigned");
3827             }
3828         }
3829     }
3830
3831   /* If CONVERTED is zero, both args will be converted to type RESULT_TYPE.
3832      Then the expression will be built.
3833      It will be given type FINAL_TYPE if that is nonzero;
3834      otherwise, it will be given type RESULT_TYPE.  */
3835
3836   /* Issue warnings about peculiar, but valid, uses of NULL.  */
3837   if (/* It's reasonable to use pointer values as operands of &&
3838          and ||, so NULL is no exception.  */
3839       !(code == TRUTH_ANDIF_EXPR || code == TRUTH_ORIF_EXPR)
3840       && (/* If OP0 is NULL and OP1 is not a pointer, or vice versa.  */
3841           (orig_op0 == null_node
3842            && TREE_CODE (TREE_TYPE (op1)) != POINTER_TYPE)
3843           /* Or vice versa.  */
3844           || (orig_op1 == null_node
3845               && TREE_CODE (TREE_TYPE (op0)) != POINTER_TYPE)
3846           /* Or, both are NULL and the operation was not a comparison.  */
3847           || (orig_op0 == null_node && orig_op1 == null_node
3848               && code != EQ_EXPR && code != NE_EXPR)))
3849     /* Some sort of arithmetic operation involving NULL was
3850        performed.  Note that pointer-difference and pointer-addition
3851        have already been handled above, and so we don't end up here in
3852        that case.  */
3853     warning (0, "NULL used in arithmetic");
3854
3855   if (! converted)
3856     {
3857       if (TREE_TYPE (op0) != result_type)
3858         op0 = cp_convert (result_type, op0);
3859       if (TREE_TYPE (op1) != result_type)
3860         op1 = cp_convert (result_type, op1);
3861
3862       if (op0 == error_mark_node || op1 == error_mark_node)
3863         return error_mark_node;
3864     }
3865
3866   if (build_type == NULL_TREE)
3867     build_type = result_type;
3868
3869   result = build2 (resultcode, build_type, op0, op1);
3870   result = fold_if_not_in_template (result);
3871   if (final_type != 0)
3872     result = cp_convert (final_type, result);
3873
3874   if (TREE_OVERFLOW_P (result) 
3875       && !TREE_OVERFLOW_P (op0) 
3876       && !TREE_OVERFLOW_P (op1))
3877     overflow_warning (result);
3878
3879   return result;
3880 }
3881 \f
3882 /* Return a tree for the sum or difference (RESULTCODE says which)
3883    of pointer PTROP and integer INTOP.  */
3884
3885 static tree
3886 cp_pointer_int_sum (enum tree_code resultcode, tree ptrop, tree intop)
3887 {
3888   tree res_type = TREE_TYPE (ptrop);
3889
3890   /* pointer_int_sum() uses size_in_bytes() on the TREE_TYPE(res_type)
3891      in certain circumstance (when it's valid to do so).  So we need
3892      to make sure it's complete.  We don't need to check here, if we
3893      can actually complete it at all, as those checks will be done in
3894      pointer_int_sum() anyway.  */
3895   complete_type (TREE_TYPE (res_type));
3896
3897   return pointer_int_sum (resultcode, ptrop,
3898                           fold_if_not_in_template (intop));
3899 }
3900
3901 /* Return a tree for the difference of pointers OP0 and OP1.
3902    The resulting tree has type int.  */
3903
3904 static tree
3905 pointer_diff (tree op0, tree op1, tree ptrtype)
3906 {
3907   tree result;
3908   tree restype = ptrdiff_type_node;
3909   tree target_type = TREE_TYPE (ptrtype);
3910
3911   if (!complete_type_or_else (target_type, NULL_TREE))
3912     return error_mark_node;
3913
3914   if (pedantic || warn_pointer_arith)
3915     {
3916       if (TREE_CODE (target_type) == VOID_TYPE)
3917         pedwarn ("ISO C++ forbids using pointer of type %<void *%> in subtraction");
3918       if (TREE_CODE (target_type) == FUNCTION_TYPE)
3919         pedwarn ("ISO C++ forbids using pointer to a function in subtraction");
3920       if (TREE_CODE (target_type) == METHOD_TYPE)
3921         pedwarn ("ISO C++ forbids using pointer to a method in subtraction");
3922     }
3923
3924   /* First do the subtraction as integers;
3925      then drop through to build the divide operator.  */
3926
3927   op0 = cp_build_binary_op (MINUS_EXPR,
3928                             cp_convert (restype, op0),
3929                             cp_convert (restype, op1));
3930
3931   /* This generates an error if op1 is a pointer to an incomplete type.  */
3932   if (!COMPLETE_TYPE_P (TREE_TYPE (TREE_TYPE (op1))))
3933     error ("invalid use of a pointer to an incomplete type in pointer arithmetic");
3934
3935   op1 = (TYPE_PTROB_P (ptrtype)
3936          ? size_in_bytes (target_type)
3937          : integer_one_node);
3938
3939   /* Do the division.  */
3940
3941   result = build2 (EXACT_DIV_EXPR, restype, op0, cp_convert (restype, op1));
3942   return fold_if_not_in_template (result);
3943 }
3944 \f
3945 /* Construct and perhaps optimize a tree representation
3946    for a unary operation.  CODE, a tree_code, specifies the operation
3947    and XARG is the operand.  */
3948
3949 tree
3950 build_x_unary_op (enum tree_code code, tree xarg)
3951 {
3952   tree orig_expr = xarg;
3953   tree exp;
3954   int ptrmem = 0;
3955
3956   if (processing_template_decl)
3957     {
3958       if (type_dependent_expression_p (xarg))
3959         return build_min_nt (code, xarg, NULL_TREE);
3960
3961       xarg = build_non_dependent_expr (xarg);
3962     }
3963
3964   exp = NULL_TREE;
3965
3966   /* [expr.unary.op] says:
3967
3968        The address of an object of incomplete type can be taken.
3969
3970      (And is just the ordinary address operator, not an overloaded
3971      "operator &".)  However, if the type is a template
3972      specialization, we must complete the type at this point so that
3973      an overloaded "operator &" will be available if required.  */
3974   if (code == ADDR_EXPR
3975       && TREE_CODE (xarg) != TEMPLATE_ID_EXPR
3976       && ((CLASS_TYPE_P (TREE_TYPE (xarg))
3977            && !COMPLETE_TYPE_P (complete_type (TREE_TYPE (xarg))))
3978           || (TREE_CODE (xarg) == OFFSET_REF)))
3979     /* Don't look for a function.  */;
3980   else
3981     exp = build_new_op (code, LOOKUP_NORMAL, xarg, NULL_TREE, NULL_TREE,
3982                         /*overloaded_p=*/NULL);
3983   if (!exp && code == ADDR_EXPR)
3984     {
3985       /*  A pointer to member-function can be formed only by saying
3986           &X::mf.  */
3987       if (!flag_ms_extensions && TREE_CODE (TREE_TYPE (xarg)) == METHOD_TYPE
3988           && (TREE_CODE (xarg) != OFFSET_REF || !PTRMEM_OK_P (xarg)))
3989         {
3990           if (TREE_CODE (xarg) != OFFSET_REF
3991               || !TYPE_P (TREE_OPERAND (xarg, 0)))
3992             {
3993               error ("invalid use of %qE to form a pointer-to-member-function",
3994                      xarg);
3995               if (TREE_CODE (xarg) != OFFSET_REF)
3996                 inform ("  a qualified-id is required");
3997               return error_mark_node;
3998             }
3999           else
4000             {
4001               error ("parentheses around %qE cannot be used to form a"
4002                      " pointer-to-member-function",
4003                      xarg);
4004               PTRMEM_OK_P (xarg) = 1;
4005             }
4006         }
4007
4008       if (TREE_CODE (xarg) == OFFSET_REF)
4009         {
4010           ptrmem = PTRMEM_OK_P (xarg);
4011
4012           if (!ptrmem && !flag_ms_extensions
4013               && TREE_CODE (TREE_TYPE (TREE_OPERAND (xarg, 1))) == METHOD_TYPE)
4014             {
4015               /* A single non-static member, make sure we don't allow a
4016                  pointer-to-member.  */
4017               xarg = build2 (OFFSET_REF, TREE_TYPE (xarg),
4018                              TREE_OPERAND (xarg, 0),
4019                              ovl_cons (TREE_OPERAND (xarg, 1), NULL_TREE));
4020               PTRMEM_OK_P (xarg) = ptrmem;
4021             }
4022         }
4023       else if (TREE_CODE (xarg) == TARGET_EXPR)
4024         warning (0, "taking address of temporary");
4025       exp = build_unary_op (ADDR_EXPR, xarg, 0);
4026     }
4027
4028   if (processing_template_decl && exp != error_mark_node)
4029     exp = build_min_non_dep (code, exp, orig_expr,
4030                              /*For {PRE,POST}{INC,DEC}REMENT_EXPR*/NULL_TREE);
4031   if (TREE_CODE (exp) == ADDR_EXPR)
4032     PTRMEM_OK_P (exp) = ptrmem;
4033   return exp;
4034 }
4035
4036 /* Like c_common_truthvalue_conversion, but handle pointer-to-member
4037    constants, where a null value is represented by an INTEGER_CST of
4038    -1.  */
4039
4040 tree
4041 cp_truthvalue_conversion (tree expr)
4042 {
4043   tree type = TREE_TYPE (expr);
4044   if (TYPE_PTRMEM_P (type))
4045     return build_binary_op (NE_EXPR, expr, integer_zero_node, 1);
4046   else
4047     return c_common_truthvalue_conversion (expr);
4048 }
4049
4050 /* Just like cp_truthvalue_conversion, but we want a CLEANUP_POINT_EXPR.  */
4051
4052 tree
4053 condition_conversion (tree expr)
4054 {
4055   tree t;
4056   if (processing_template_decl)
4057     return expr;
4058   t = perform_implicit_conversion (boolean_type_node, expr);
4059   t = fold_build_cleanup_point_expr (boolean_type_node, t);
4060   return t;
4061 }
4062
4063 /* Return an ADDR_EXPR giving the address of T.  This function
4064    attempts no optimizations or simplifications; it is a low-level
4065    primitive.  */
4066
4067 tree
4068 build_address (tree t)
4069 {
4070   tree addr;
4071
4072   if (error_operand_p (t) || !cxx_mark_addressable (t))
4073     return error_mark_node;
4074
4075   addr = build1 (ADDR_EXPR, build_pointer_type (TREE_TYPE (t)), t);
4076
4077   return addr;
4078 }
4079
4080 /* Return a NOP_EXPR converting EXPR to TYPE.  */
4081
4082 tree
4083 build_nop (tree type, tree expr)
4084 {
4085   if (type == error_mark_node || error_operand_p (expr))
4086     return expr;
4087   return build1 (NOP_EXPR, type, expr);
4088 }
4089
4090 /* C++: Must handle pointers to members.
4091
4092    Perhaps type instantiation should be extended to handle conversion
4093    from aggregates to types we don't yet know we want?  (Or are those
4094    cases typically errors which should be reported?)
4095
4096    NOCONVERT nonzero suppresses the default promotions
4097    (such as from short to int).  */
4098
4099 tree
4100 build_unary_op (enum tree_code code, tree xarg, int noconvert)
4101 {
4102   /* No default_conversion here.  It causes trouble for ADDR_EXPR.  */
4103   tree arg = xarg;
4104   tree argtype = 0;
4105   const char *errstring = NULL;
4106   tree val;
4107   const char *invalid_op_diag;
4108
4109   if (arg == error_mark_node)
4110     return error_mark_node;
4111
4112   if ((invalid_op_diag
4113        = targetm.invalid_unary_op ((code == UNARY_PLUS_EXPR
4114                                     ? CONVERT_EXPR
4115                                     : code),
4116                                    TREE_TYPE (xarg))))
4117     {
4118       error (invalid_op_diag);
4119       return error_mark_node;
4120     }
4121
4122   switch (code)
4123     {
4124     case UNARY_PLUS_EXPR:
4125     case NEGATE_EXPR:
4126       {
4127         int flags = WANT_ARITH | WANT_ENUM;
4128         /* Unary plus (but not unary minus) is allowed on pointers.  */
4129         if (code == UNARY_PLUS_EXPR)
4130           flags |= WANT_POINTER;
4131         arg = build_expr_type_conversion (flags, arg, true);
4132         if (!arg)
4133           errstring = (code == NEGATE_EXPR
4134                        ? "wrong type argument to unary minus"
4135                        : "wrong type argument to unary plus");
4136         else
4137           {
4138             if (!noconvert && CP_INTEGRAL_TYPE_P (TREE_TYPE (arg)))
4139               arg = perform_integral_promotions (arg);
4140
4141             /* Make sure the result is not an lvalue: a unary plus or minus
4142                expression is always a rvalue.  */
4143             arg = rvalue (arg);
4144           }
4145       }
4146       break;
4147
4148     case BIT_NOT_EXPR:
4149       if (TREE_CODE (TREE_TYPE (arg)) == COMPLEX_TYPE)
4150         {
4151           code = CONJ_EXPR;
4152           if (!noconvert)
4153             arg = default_conversion (arg);
4154         }
4155       else if (!(arg = build_expr_type_conversion (WANT_INT | WANT_ENUM
4156                                                    | WANT_VECTOR,
4157                                                    arg, true)))
4158         errstring = "wrong type argument to bit-complement";
4159       else if (!noconvert && CP_INTEGRAL_TYPE_P (TREE_TYPE (arg)))
4160         arg = perform_integral_promotions (arg);
4161       break;
4162
4163     case ABS_EXPR:
4164       if (!(arg = build_expr_type_conversion (WANT_ARITH | WANT_ENUM, arg, true)))
4165         errstring = "wrong type argument to abs";
4166       else if (!noconvert)
4167         arg = default_conversion (arg);
4168       break;
4169
4170     case CONJ_EXPR:
4171       /* Conjugating a real value is a no-op, but allow it anyway.  */
4172       if (!(arg = build_expr_type_conversion (WANT_ARITH | WANT_ENUM, arg, true)))
4173         errstring = "wrong type argument to conjugation";
4174       else if (!noconvert)
4175         arg = default_conversion (arg);
4176       break;
4177
4178     case TRUTH_NOT_EXPR:
4179       arg = perform_implicit_conversion (boolean_type_node, arg);
4180       val = invert_truthvalue (arg);
4181       if (arg != error_mark_node)
4182         return val;
4183       errstring = "in argument to unary !";
4184       break;
4185
4186     case NOP_EXPR:
4187       break;
4188
4189     case REALPART_EXPR:
4190       if (TREE_CODE (arg) == COMPLEX_CST)
4191         return TREE_REALPART (arg);
4192       else if (TREE_CODE (TREE_TYPE (arg)) == COMPLEX_TYPE)
4193         {
4194           arg = build1 (REALPART_EXPR, TREE_TYPE (TREE_TYPE (arg)), arg);
4195           return fold_if_not_in_template (arg);
4196         }
4197       else
4198         return arg;
4199
4200     case IMAGPART_EXPR:
4201       if (TREE_CODE (arg) == COMPLEX_CST)
4202         return TREE_IMAGPART (arg);
4203       else if (TREE_CODE (TREE_TYPE (arg)) == COMPLEX_TYPE)
4204         {
4205           arg = build1 (IMAGPART_EXPR, TREE_TYPE (TREE_TYPE (arg)), arg);
4206           return fold_if_not_in_template (arg);
4207         }
4208       else
4209         return cp_convert (TREE_TYPE (arg), integer_zero_node);
4210
4211     case PREINCREMENT_EXPR:
4212     case POSTINCREMENT_EXPR:
4213     case PREDECREMENT_EXPR:
4214     case POSTDECREMENT_EXPR:
4215       /* Handle complex lvalues (when permitted)
4216          by reduction to simpler cases.  */
4217
4218       val = unary_complex_lvalue (code, arg);
4219       if (val != 0)
4220         return val;
4221
4222       /* Increment or decrement the real part of the value,
4223          and don't change the imaginary part.  */
4224       if (TREE_CODE (TREE_TYPE (arg)) == COMPLEX_TYPE)
4225         {
4226           tree real, imag;
4227
4228           arg = stabilize_reference (arg);
4229           real = build_unary_op (REALPART_EXPR, arg, 1);
4230           imag = build_unary_op (IMAGPART_EXPR, arg, 1);
4231           return build2 (COMPLEX_EXPR, TREE_TYPE (arg),
4232                          build_unary_op (code, real, 1), imag);
4233         }
4234
4235       /* Report invalid types.  */
4236
4237       if (!(arg = build_expr_type_conversion (WANT_ARITH | WANT_POINTER,
4238                                               arg, true)))
4239         {
4240           if (code == PREINCREMENT_EXPR)
4241             errstring ="no pre-increment operator for type";
4242           else if (code == POSTINCREMENT_EXPR)
4243             errstring ="no post-increment operator for type";
4244           else if (code == PREDECREMENT_EXPR)
4245             errstring ="no pre-decrement operator for type";
4246           else
4247             errstring ="no post-decrement operator for type";
4248           break;
4249         }
4250
4251       /* Report something read-only.  */
4252
4253       if (CP_TYPE_CONST_P (TREE_TYPE (arg))
4254           || TREE_READONLY (arg))
4255         readonly_error (arg, ((code == PREINCREMENT_EXPR
4256                                || code == POSTINCREMENT_EXPR)
4257                               ? "increment" : "decrement"),
4258                         0);
4259
4260       {
4261         tree inc;
4262         tree result_type = TREE_TYPE (arg);
4263
4264         arg = get_unwidened (arg, 0);
4265         argtype = TREE_TYPE (arg);
4266
4267         /* ARM $5.2.5 last annotation says this should be forbidden.  */
4268         if (TREE_CODE (argtype) == ENUMERAL_TYPE)
4269           pedwarn ((code == PREINCREMENT_EXPR || code == POSTINCREMENT_EXPR)
4270                    ? G_("ISO C++ forbids incrementing an enum")
4271                    : G_("ISO C++ forbids decrementing an enum"));
4272
4273         /* Compute the increment.  */
4274
4275         if (TREE_CODE (argtype) == POINTER_TYPE)
4276           {
4277             tree type = complete_type (TREE_TYPE (argtype));
4278
4279             if (!COMPLETE_OR_VOID_TYPE_P (type))
4280               error (((code == PREINCREMENT_EXPR
4281                        || code == POSTINCREMENT_EXPR))
4282                      ? G_("cannot increment a pointer to incomplete type %qT")
4283                      : G_("cannot decrement a pointer to incomplete type %qT"),
4284                       TREE_TYPE (argtype));
4285             else if ((pedantic || warn_pointer_arith)
4286                      && !TYPE_PTROB_P (argtype))
4287               pedwarn ((code == PREINCREMENT_EXPR
4288                          || code == POSTINCREMENT_EXPR)
4289                        ? G_("ISO C++ forbids incrementing a pointer of type %qT")
4290                        : G_("ISO C++ forbids decrementing a pointer of type %qT"),
4291                         argtype);
4292             inc = cxx_sizeof_nowarn (TREE_TYPE (argtype));
4293           }
4294         else
4295           inc = integer_one_node;
4296
4297         inc = cp_convert (argtype, inc);
4298
4299         /* Handle incrementing a cast-expression.  */
4300
4301         switch (TREE_CODE (arg))
4302           {
4303           case NOP_EXPR:
4304           case CONVERT_EXPR:
4305           case FLOAT_EXPR:
4306           case FIX_TRUNC_EXPR:
4307             {
4308               tree incremented, modify, value, compound;
4309               if (! lvalue_p (arg) && pedantic)
4310                 pedwarn ("cast to non-reference type used as lvalue");
4311               arg = stabilize_reference (arg);
4312               if (code == PREINCREMENT_EXPR || code == PREDECREMENT_EXPR)
4313                 value = arg;
4314               else
4315                 value = save_expr (arg);
4316               incremented = build2 (((code == PREINCREMENT_EXPR
4317                                       || code == POSTINCREMENT_EXPR)
4318                                      ? PLUS_EXPR : MINUS_EXPR),
4319                                     argtype, value, inc);
4320
4321               modify = build_modify_expr (arg, NOP_EXPR, incremented);
4322               compound = build2 (COMPOUND_EXPR, TREE_TYPE (arg),
4323                                  modify, value);
4324
4325               /* Eliminate warning about unused result of + or -.  */
4326               TREE_NO_WARNING (compound) = 1;
4327               return compound;
4328             }
4329
4330           default:
4331             break;
4332           }
4333
4334         /* Complain about anything else that is not a true lvalue.  */
4335         if (!lvalue_or_else (arg, ((code == PREINCREMENT_EXPR
4336                                     || code == POSTINCREMENT_EXPR)
4337                                    ? lv_increment : lv_decrement)))
4338           return error_mark_node;
4339
4340         /* Forbid using -- on `bool'.  */
4341         if (same_type_p (TREE_TYPE (arg), boolean_type_node))
4342           {
4343             if (code == POSTDECREMENT_EXPR || code == PREDECREMENT_EXPR)
4344               {
4345                 error ("invalid use of %<--%> on bool variable %qD", arg);
4346                 return error_mark_node;
4347               }
4348             val = boolean_increment (code, arg);
4349           }
4350         else
4351           val = build2 (code, TREE_TYPE (arg), arg, inc);
4352
4353         TREE_SIDE_EFFECTS (val) = 1;
4354         return cp_convert (result_type, val);
4355       }
4356
4357     case ADDR_EXPR:
4358       /* Note that this operation never does default_conversion
4359          regardless of NOCONVERT.  */
4360
4361       argtype = lvalue_type (arg);
4362
4363       if (TREE_CODE (arg) == OFFSET_REF)
4364         goto offset_ref;
4365
4366       if (TREE_CODE (argtype) == REFERENCE_TYPE)
4367         {
4368           tree type = build_pointer_type (TREE_TYPE (argtype));
4369           arg = build1 (CONVERT_EXPR, type, arg);
4370           return arg;
4371         }
4372       else if (pedantic && DECL_MAIN_P (arg))
4373         /* ARM $3.4 */
4374         pedwarn ("ISO C++ forbids taking address of function %<::main%>");
4375
4376       /* Let &* cancel out to simplify resulting code.  */
4377       if (TREE_CODE (arg) == INDIRECT_REF)
4378         {
4379           /* We don't need to have `current_class_ptr' wrapped in a
4380              NON_LVALUE_EXPR node.  */
4381           if (arg == current_class_ref)
4382             return current_class_ptr;
4383
4384           arg = TREE_OPERAND (arg, 0);
4385           if (TREE_CODE (TREE_TYPE (arg)) == REFERENCE_TYPE)
4386             {
4387               tree type = build_pointer_type (TREE_TYPE (TREE_TYPE (arg)));
4388               arg = build1 (CONVERT_EXPR, type, arg);
4389             }
4390           else
4391             /* Don't let this be an lvalue.  */
4392             arg = rvalue (arg);
4393           return arg;
4394         }
4395
4396       /* Uninstantiated types are all functions.  Taking the
4397          address of a function is a no-op, so just return the
4398          argument.  */
4399
4400       gcc_assert (TREE_CODE (arg) != IDENTIFIER_NODE
4401                   || !IDENTIFIER_OPNAME_P (arg));
4402
4403       if (TREE_CODE (arg) == COMPONENT_REF && type_unknown_p (arg)
4404           && !really_overloaded_fn (TREE_OPERAND (arg, 1)))
4405         {
4406           /* They're trying to take the address of a unique non-static
4407              member function.  This is ill-formed (except in MS-land),
4408              but let's try to DTRT.
4409              Note: We only handle unique functions here because we don't
4410              want to complain if there's a static overload; non-unique
4411              cases will be handled by instantiate_type.  But we need to
4412              handle this case here to allow casts on the resulting PMF.
4413              We could defer this in non-MS mode, but it's easier to give
4414              a useful error here.  */
4415
4416           /* Inside constant member functions, the `this' pointer
4417              contains an extra const qualifier.  TYPE_MAIN_VARIANT
4418              is used here to remove this const from the diagnostics
4419              and the created OFFSET_REF.  */
4420           tree base = TYPE_MAIN_VARIANT (TREE_TYPE (TREE_OPERAND (arg, 0)));
4421           tree fn = get_first_fn (TREE_OPERAND (arg, 1));
4422           mark_used (fn);
4423
4424           if (! flag_ms_extensions)
4425             {
4426               tree name = DECL_NAME (fn);
4427               if (current_class_type
4428                   && TREE_OPERAND (arg, 0) == current_class_ref)
4429                 /* An expression like &memfn.  */
4430                 pedwarn ("ISO C++ forbids taking the address of an unqualified"
4431                          " or parenthesized non-static member function to form"
4432                          " a pointer to member function.  Say %<&%T::%D%>",
4433                          base, name);
4434               else
4435                 pedwarn ("ISO C++ forbids taking the address of a bound member"
4436                          " function to form a pointer to member function."
4437                          "  Say %<&%T::%D%>",
4438                          base, name);
4439             }
4440           arg = build_offset_ref (base, fn, /*address_p=*/true);
4441         }
4442
4443     offset_ref:
4444       if (type_unknown_p (arg))
4445         return build1 (ADDR_EXPR, unknown_type_node, arg);
4446
4447       /* Handle complex lvalues (when permitted)
4448          by reduction to simpler cases.  */
4449       val = unary_complex_lvalue (code, arg);
4450       if (val != 0)
4451         return val;
4452
4453       switch (TREE_CODE (arg))
4454         {
4455         case NOP_EXPR:
4456         case CONVERT_EXPR:
4457         case FLOAT_EXPR:
4458         case FIX_TRUNC_EXPR:
4459           if (! lvalue_p (arg) && pedantic)
4460             pedwarn ("ISO C++ forbids taking the address of a cast to a non-lvalue expression");
4461           break;
4462
4463         case BASELINK:
4464           arg = BASELINK_FUNCTIONS (arg);
4465           /* Fall through.  */
4466
4467         case OVERLOAD:
4468           arg = OVL_CURRENT (arg);
4469           break;
4470
4471         case OFFSET_REF:
4472           /* Turn a reference to a non-static data member into a
4473              pointer-to-member.  */
4474           {
4475             tree type;
4476             tree t;
4477
4478             if (!PTRMEM_OK_P (arg))
4479               return build_unary_op (code, arg, 0);
4480
4481             t = TREE_OPERAND (arg, 1);
4482             if (TREE_CODE (TREE_TYPE (t)) == REFERENCE_TYPE)
4483               {
4484                 error ("cannot create pointer to reference member %qD", t);
4485                 return error_mark_node;
4486               }
4487
4488             type = build_ptrmem_type (context_for_name_lookup (t),
4489                                       TREE_TYPE (t));
4490             t = make_ptrmem_cst (type, TREE_OPERAND (arg, 1));
4491             return t;
4492           }
4493
4494         default:
4495           break;
4496         }
4497
4498       /* Anything not already handled and not a true memory reference
4499          is an error.  */
4500       if (TREE_CODE (argtype) != FUNCTION_TYPE
4501           && TREE_CODE (argtype) != METHOD_TYPE
4502           && TREE_CODE (arg) != OFFSET_REF
4503           && !lvalue_or_else (arg, lv_addressof))
4504         return error_mark_node;
4505
4506       if (argtype != error_mark_node)
4507         argtype = build_pointer_type (argtype);
4508
4509       /* In a template, we are processing a non-dependent expression
4510          so we can just form an ADDR_EXPR with the correct type.  */
4511       if (processing_template_decl)
4512         {
4513           val = build_address (arg);
4514           if (TREE_CODE (arg) == OFFSET_REF)
4515             PTRMEM_OK_P (val) = PTRMEM_OK_P (arg);
4516           return val;
4517         }
4518
4519       if (TREE_CODE (arg) != COMPONENT_REF)
4520         {
4521           val = build_address (arg);
4522           if (TREE_CODE (arg) == OFFSET_REF)
4523             PTRMEM_OK_P (val) = PTRMEM_OK_P (arg);
4524         }
4525       else if (TREE_CODE (TREE_OPERAND (arg, 1)) == BASELINK)
4526         {
4527           tree fn = BASELINK_FUNCTIONS (TREE_OPERAND (arg, 1));
4528
4529           /* We can only get here with a single static member
4530              function.  */
4531           gcc_assert (TREE_CODE (fn) == FUNCTION_DECL
4532                       && DECL_STATIC_FUNCTION_P (fn));
4533           mark_used (fn);
4534           val = build_address (fn);
4535           if (TREE_SIDE_EFFECTS (TREE_OPERAND (arg, 0)))
4536             /* Do not lose object's side effects.  */
4537             val = build2 (COMPOUND_EXPR, TREE_TYPE (val),
4538                           TREE_OPERAND (arg, 0), val);
4539         }
4540       else if (DECL_C_BIT_FIELD (TREE_OPERAND (arg, 1)))
4541         {
4542           error ("attempt to take address of bit-field structure member %qD",
4543                  TREE_OPERAND (arg, 1));
4544           return error_mark_node;
4545         }
4546       else
4547         {
4548           tree object = TREE_OPERAND (arg, 0);
4549           tree field = TREE_OPERAND (arg, 1);
4550           gcc_assert (same_type_ignoring_top_level_qualifiers_p
4551                       (TREE_TYPE (object), decl_type_context (field)));
4552           val = build_address (arg);
4553         }
4554
4555       if (TREE_CODE (argtype) == POINTER_TYPE
4556           && TREE_CODE (TREE_TYPE (argtype)) == METHOD_TYPE)
4557         {
4558           build_ptrmemfunc_type (argtype);
4559           val = build_ptrmemfunc (argtype, val, 0,
4560                                   /*c_cast_p=*/false);
4561         }
4562
4563       return val;
4564
4565     default:
4566       break;
4567     }
4568
4569   if (!errstring)
4570     {
4571       if (argtype == 0)
4572         argtype = TREE_TYPE (arg);
4573       return fold_if_not_in_template (build1 (code, argtype, arg));
4574     }
4575
4576   error ("%s", errstring);
4577   return error_mark_node;
4578 }
4579
4580 /* Apply unary lvalue-demanding operator CODE to the expression ARG
4581    for certain kinds of expressions which are not really lvalues
4582    but which we can accept as lvalues.
4583
4584    If ARG is not a kind of expression we can handle, return
4585    NULL_TREE.  */
4586
4587 tree
4588 unary_complex_lvalue (enum tree_code code, tree arg)
4589 {
4590   /* Inside a template, making these kinds of adjustments is
4591      pointless; we are only concerned with the type of the
4592      expression.  */
4593   if (processing_template_decl)
4594     return NULL_TREE;
4595
4596   /* Handle (a, b) used as an "lvalue".  */
4597   if (TREE_CODE (arg) == COMPOUND_EXPR)
4598     {
4599       tree real_result = build_unary_op (code, TREE_OPERAND (arg, 1), 0);
4600       return build2 (COMPOUND_EXPR, TREE_TYPE (real_result),
4601                      TREE_OPERAND (arg, 0), real_result);
4602     }
4603
4604   /* Handle (a ? b : c) used as an "lvalue".  */
4605   if (TREE_CODE (arg) == COND_EXPR
4606       || TREE_CODE (arg) == MIN_EXPR || TREE_CODE (arg) == MAX_EXPR)
4607     return rationalize_conditional_expr (code, arg);
4608
4609   /* Handle (a = b), (++a), and (--a) used as an "lvalue".  */
4610   if (TREE_CODE (arg) == MODIFY_EXPR
4611       || TREE_CODE (arg) == PREINCREMENT_EXPR
4612       || TREE_CODE (arg) == PREDECREMENT_EXPR)
4613     {
4614       tree lvalue = TREE_OPERAND (arg, 0);
4615       if (TREE_SIDE_EFFECTS (lvalue))
4616         {
4617           lvalue = stabilize_reference (lvalue);
4618           arg = build2 (TREE_CODE (arg), TREE_TYPE (arg),
4619                         lvalue, TREE_OPERAND (arg, 1));
4620         }
4621       return unary_complex_lvalue
4622         (code, build2 (COMPOUND_EXPR, TREE_TYPE (lvalue), arg, lvalue));
4623     }
4624
4625   if (code != ADDR_EXPR)
4626     return NULL_TREE;
4627
4628   /* Handle (a = b) used as an "lvalue" for `&'.  */
4629   if (TREE_CODE (arg) == MODIFY_EXPR
4630       || TREE_CODE (arg) == INIT_EXPR)
4631     {
4632       tree real_result = build_unary_op (code, TREE_OPERAND (arg, 0), 0);
4633       arg = build2 (COMPOUND_EXPR, TREE_TYPE (real_result),
4634                     arg, real_result);
4635       TREE_NO_WARNING (arg) = 1;
4636       return arg;
4637     }
4638
4639   if (TREE_CODE (TREE_TYPE (arg)) == FUNCTION_TYPE
4640       || TREE_CODE (TREE_TYPE (arg)) == METHOD_TYPE
4641       || TREE_CODE (arg) == OFFSET_REF)
4642     return NULL_TREE;
4643
4644   /* We permit compiler to make function calls returning
4645      objects of aggregate type look like lvalues.  */
4646   {
4647     tree targ = arg;
4648
4649     if (TREE_CODE (targ) == SAVE_EXPR)
4650       targ = TREE_OPERAND (targ, 0);
4651
4652     if (TREE_CODE (targ) == CALL_EXPR && IS_AGGR_TYPE (TREE_TYPE (targ)))
4653       {
4654         if (TREE_CODE (arg) == SAVE_EXPR)
4655           targ = arg;
4656         else
4657           targ = build_cplus_new (TREE_TYPE (arg), arg);
4658         return build1 (ADDR_EXPR, build_pointer_type (TREE_TYPE (arg)), targ);
4659       }
4660
4661     if (TREE_CODE (arg) == SAVE_EXPR && TREE_CODE (targ) == INDIRECT_REF)
4662       return build3 (SAVE_EXPR, build_pointer_type (TREE_TYPE (arg)),
4663                      TREE_OPERAND (targ, 0), current_function_decl, NULL);
4664   }
4665
4666   /* Don't let anything else be handled specially.  */
4667   return NULL_TREE;
4668 }
4669 \f
4670 /* Mark EXP saying that we need to be able to take the
4671    address of it; it should not be allocated in a register.
4672    Value is true if successful.
4673
4674    C++: we do not allow `current_class_ptr' to be addressable.  */
4675
4676 bool
4677 cxx_mark_addressable (tree exp)
4678 {
4679   tree x = exp;
4680
4681   while (1)
4682     switch (TREE_CODE (x))
4683       {
4684       case ADDR_EXPR:
4685       case COMPONENT_REF:
4686       case ARRAY_REF:
4687       case REALPART_EXPR:
4688       case IMAGPART_EXPR:
4689         x = TREE_OPERAND (x, 0);
4690         break;
4691
4692       case PARM_DECL:
4693         if (x == current_class_ptr)
4694           {
4695             error ("cannot take the address of %<this%>, which is an rvalue expression");
4696             TREE_ADDRESSABLE (x) = 1; /* so compiler doesn't die later.  */
4697             return true;
4698           }
4699         /* Fall through.  */
4700
4701       case VAR_DECL:
4702         /* Caller should not be trying to mark initialized
4703            constant fields addressable.  */
4704         gcc_assert (DECL_LANG_SPECIFIC (x) == 0
4705                     || DECL_IN_AGGR_P (x) == 0
4706                     || TREE_STATIC (x)
4707                     || DECL_EXTERNAL (x));
4708         /* Fall through.  */
4709
4710       case CONST_DECL:
4711       case RESULT_DECL:
4712         if (DECL_REGISTER (x) && !TREE_ADDRESSABLE (x)
4713             && !DECL_ARTIFICIAL (x))
4714           {
4715             if (TREE_CODE (x) == VAR_DECL && DECL_HARD_REGISTER (x))
4716               {
4717                 error
4718                   ("address of explicit register variable %qD requested", x);
4719                 return false;
4720               }
4721             else if (extra_warnings)
4722               warning
4723                 (OPT_Wextra, "address requested for %qD, which is declared %<register%>", x);
4724           }
4725         TREE_ADDRESSABLE (x) = 1;
4726         return true;
4727
4728       case FUNCTION_DECL:
4729         TREE_ADDRESSABLE (x) = 1;
4730         return true;
4731
4732       case CONSTRUCTOR:
4733         TREE_ADDRESSABLE (x) = 1;
4734         return true;
4735
4736       case TARGET_EXPR:
4737         TREE_ADDRESSABLE (x) = 1;
4738         cxx_mark_addressable (TREE_OPERAND (x, 0));
4739         return true;
4740
4741       default:
4742         return true;
4743     }
4744 }
4745 \f
4746 /* Build and return a conditional expression IFEXP ? OP1 : OP2.  */
4747
4748 tree
4749 build_x_conditional_expr (tree ifexp, tree op1, tree op2)
4750 {
4751   tree orig_ifexp = ifexp;
4752   tree orig_op1 = op1;
4753   tree orig_op2 = op2;
4754   tree expr;
4755
4756   if (processing_template_decl)
4757     {
4758       /* The standard says that the expression is type-dependent if
4759          IFEXP is type-dependent, even though the eventual type of the
4760          expression doesn't dependent on IFEXP.  */
4761       if (type_dependent_expression_p (ifexp)
4762           /* As a GNU extension, the middle operand may be omitted.  */
4763           || (op1 && type_dependent_expression_p (op1))
4764           || type_dependent_expression_p (op2))
4765         return build_min_nt (COND_EXPR, ifexp, op1, op2);
4766       ifexp = build_non_dependent_expr (ifexp);
4767       if (op1)
4768         op1 = build_non_dependent_expr (op1);
4769       op2 = build_non_dependent_expr (op2);
4770     }
4771
4772   expr = build_conditional_expr (ifexp, op1, op2);
4773   if (processing_template_decl && expr != error_mark_node)
4774     return build_min_non_dep (COND_EXPR, expr,
4775                               orig_ifexp, orig_op1, orig_op2);
4776   return expr;
4777 }
4778 \f
4779 /* Given a list of expressions, return a compound expression
4780    that performs them all and returns the value of the last of them.  */
4781
4782 tree build_x_compound_expr_from_list (tree list, const char *msg)
4783 {
4784   tree expr = TREE_VALUE (list);
4785
4786   if (TREE_CHAIN (list))
4787     {
4788       if (msg)
4789         pedwarn ("%s expression list treated as compound expression", msg);
4790
4791       for (list = TREE_CHAIN (list); list; list = TREE_CHAIN (list))
4792         expr = build_x_compound_expr (expr, TREE_VALUE (list));
4793     }
4794
4795   return expr;
4796 }
4797
4798 /* Handle overloading of the ',' operator when needed.  */
4799
4800 tree
4801 build_x_compound_expr (tree op1, tree op2)
4802 {
4803   tree result;
4804   tree orig_op1 = op1;
4805   tree orig_op2 = op2;
4806
4807   if (processing_template_decl)
4808     {
4809       if (type_dependent_expression_p (op1)
4810           || type_dependent_expression_p (op2))
4811         return build_min_nt (COMPOUND_EXPR, op1, op2);
4812       op1 = build_non_dependent_expr (op1);
4813       op2 = build_non_dependent_expr (op2);
4814     }
4815
4816   result = build_new_op (COMPOUND_EXPR, LOOKUP_NORMAL, op1, op2, NULL_TREE,
4817                          /*overloaded_p=*/NULL);
4818   if (!result)
4819     result = build_compound_expr (op1, op2);
4820
4821   if (processing_template_decl && result != error_mark_node)
4822     return build_min_non_dep (COMPOUND_EXPR, result, orig_op1, orig_op2);
4823
4824   return result;
4825 }
4826
4827 /* Build a compound expression.  */
4828
4829 tree
4830 build_compound_expr (tree lhs, tree rhs)
4831 {
4832   lhs = convert_to_void (lhs, "left-hand operand of comma");
4833
4834   if (lhs == error_mark_node || rhs == error_mark_node)
4835     return error_mark_node;
4836
4837   if (TREE_CODE (rhs) == TARGET_EXPR)
4838     {
4839       /* If the rhs is a TARGET_EXPR, then build the compound
4840          expression inside the target_expr's initializer. This
4841          helps the compiler to eliminate unnecessary temporaries.  */
4842       tree init = TREE_OPERAND (rhs, 1);
4843
4844       init = build2 (COMPOUND_EXPR, TREE_TYPE (init), lhs, init);
4845       TREE_OPERAND (rhs, 1) = init;
4846
4847       return rhs;
4848     }
4849
4850   return build2 (COMPOUND_EXPR, TREE_TYPE (rhs), lhs, rhs);
4851 }
4852
4853 /* Issue a diagnostic message if casting from SRC_TYPE to DEST_TYPE
4854    casts away constness.  DIAG_FN gives the function to call if we
4855    need to issue a diagnostic; if it is NULL, no diagnostic will be
4856    issued.  DESCRIPTION explains what operation is taking place.  */
4857
4858 static void
4859 check_for_casting_away_constness (tree src_type, tree dest_type,
4860                                   void (*diag_fn)(const char *, ...) ATTRIBUTE_GCC_CXXDIAG(1,2),
4861                                   const char *description)
4862 {
4863   if (diag_fn && casts_away_constness (src_type, dest_type))
4864     diag_fn ("%s from type %qT to type %qT casts away constness",
4865              description, src_type, dest_type);
4866 }
4867
4868 /* Convert EXPR (an expression with pointer-to-member type) to TYPE
4869    (another pointer-to-member type in the same hierarchy) and return
4870    the converted expression.  If ALLOW_INVERSE_P is permitted, a
4871    pointer-to-derived may be converted to pointer-to-base; otherwise,
4872    only the other direction is permitted.  If C_CAST_P is true, this
4873    conversion is taking place as part of a C-style cast.  */
4874
4875 tree
4876 convert_ptrmem (tree type, tree expr, bool allow_inverse_p,
4877                 bool c_cast_p)
4878 {
4879   if (TYPE_PTRMEM_P (type))
4880     {
4881       tree delta;
4882
4883       if (TREE_CODE (expr) == PTRMEM_CST)
4884         expr = cplus_expand_constant (expr);
4885       delta = get_delta_difference (TYPE_PTRMEM_CLASS_TYPE (TREE_TYPE (expr)),
4886                                     TYPE_PTRMEM_CLASS_TYPE (type),
4887                                     allow_inverse_p,
4888                                     c_cast_p);
4889       if (!integer_zerop (delta))
4890         expr = cp_build_binary_op (PLUS_EXPR,
4891                                    build_nop (ptrdiff_type_node, expr),
4892                                    delta);
4893       return build_nop (type, expr);
4894     }
4895   else
4896     return build_ptrmemfunc (TYPE_PTRMEMFUNC_FN_TYPE (type), expr,
4897                              allow_inverse_p, c_cast_p);
4898 }
4899
4900 /* If EXPR is an INTEGER_CST and ORIG is an arithmetic constant, return
4901    a version of EXPR that has TREE_OVERFLOW set if it is set in ORIG.
4902    Otherwise, return EXPR unchanged.  */
4903
4904 static tree
4905 ignore_overflows (tree expr, tree orig)
4906 {
4907   if (TREE_CODE (expr) == INTEGER_CST
4908       && CONSTANT_CLASS_P (orig)
4909       && TREE_CODE (orig) != STRING_CST
4910       && TREE_OVERFLOW (expr) != TREE_OVERFLOW (orig))
4911     {
4912       if (!TREE_OVERFLOW (orig))
4913         /* Ensure constant sharing.  */
4914         expr = build_int_cst_wide (TREE_TYPE (expr),
4915                                    TREE_INT_CST_LOW (expr),
4916                                    TREE_INT_CST_HIGH (expr));
4917       else
4918         {
4919           /* Avoid clobbering a shared constant.  */
4920           expr = copy_node (expr);
4921           TREE_OVERFLOW (expr) = TREE_OVERFLOW (orig);
4922         }
4923     }
4924   return expr;
4925 }
4926
4927 /* Perform a static_cast from EXPR to TYPE.  When C_CAST_P is true,
4928    this static_cast is being attempted as one of the possible casts
4929    allowed by a C-style cast.  (In that case, accessibility of base
4930    classes is not considered, and it is OK to cast away
4931    constness.)  Return the result of the cast.  *VALID_P is set to
4932    indicate whether or not the cast was valid.  */
4933
4934 static tree
4935 build_static_cast_1 (tree type, tree expr, bool c_cast_p,
4936                      bool *valid_p)
4937 {
4938   tree intype;
4939   tree result;
4940   tree orig;
4941   void (*diag_fn)(const char*, ...) ATTRIBUTE_GCC_CXXDIAG(1,2);
4942   const char *desc;
4943
4944   /* Assume the cast is valid.  */
4945   *valid_p = true;
4946
4947   intype = TREE_TYPE (expr);
4948
4949   /* Save casted types in the function's used types hash table.  */
4950   used_types_insert (type);
4951
4952   /* Determine what to do when casting away constness.  */
4953   if (c_cast_p)
4954     {
4955       /* C-style casts are allowed to cast away constness.  With
4956          WARN_CAST_QUAL, we still want to issue a warning.  */
4957       diag_fn = warn_cast_qual ? warning0 : NULL;
4958       desc = "cast";
4959     }
4960   else
4961     {
4962       /* A static_cast may not cast away constness.  */
4963       diag_fn = error;
4964       desc = "static_cast";
4965     }
4966
4967   /* [expr.static.cast]
4968
4969      An lvalue of type "cv1 B", where B is a class type, can be cast
4970      to type "reference to cv2 D", where D is a class derived (clause
4971      _class.derived_) from B, if a valid standard conversion from
4972      "pointer to D" to "pointer to B" exists (_conv.ptr_), cv2 is the
4973      same cv-qualification as, or greater cv-qualification than, cv1,
4974      and B is not a virtual base class of D.  */
4975   /* We check this case before checking the validity of "TYPE t =
4976      EXPR;" below because for this case:
4977
4978        struct B {};
4979        struct D : public B { D(const B&); };
4980        extern B& b;
4981        void f() { static_cast<const D&>(b); }
4982
4983      we want to avoid constructing a new D.  The standard is not
4984      completely clear about this issue, but our interpretation is
4985      consistent with other compilers.  */
4986   if (TREE_CODE (type) == REFERENCE_TYPE
4987       && CLASS_TYPE_P (TREE_TYPE (type))
4988       && CLASS_TYPE_P (intype)
4989       && real_lvalue_p (expr)
4990       && DERIVED_FROM_P (intype, TREE_TYPE (type))
4991       && can_convert (build_pointer_type (TYPE_MAIN_VARIANT (intype)),
4992                       build_pointer_type (TYPE_MAIN_VARIANT
4993                                           (TREE_TYPE (type))))
4994       && (c_cast_p
4995           || at_least_as_qualified_p (TREE_TYPE (type), intype)))
4996     {
4997       tree base;
4998
4999       /* There is a standard conversion from "D*" to "B*" even if "B"
5000          is ambiguous or inaccessible.  If this is really a
5001          static_cast, then we check both for inaccessibility and
5002          ambiguity.  However, if this is a static_cast being performed
5003          because the user wrote a C-style cast, then accessibility is
5004          not considered.  */
5005       base = lookup_base (TREE_TYPE (type), intype,
5006                           c_cast_p ? ba_unique : ba_check,
5007                           NULL);
5008
5009       /* Convert from "B*" to "D*".  This function will check that "B"
5010          is not a virtual base of "D".  */
5011       expr = build_base_path (MINUS_EXPR, build_address (expr),
5012                               base, /*nonnull=*/false);
5013       /* Convert the pointer to a reference -- but then remember that
5014          there are no expressions with reference type in C++.  */
5015       return convert_from_reference (build_nop (type, expr));
5016     }
5017
5018   orig = expr;
5019
5020   /* [expr.static.cast]
5021
5022      An expression e can be explicitly converted to a type T using a
5023      static_cast of the form static_cast<T>(e) if the declaration T
5024      t(e);" is well-formed, for some invented temporary variable
5025      t.  */
5026   result = perform_direct_initialization_if_possible (type, expr,
5027                                                       c_cast_p);
5028   if (result)
5029     {
5030       result = convert_from_reference (result);
5031
5032       /* Ignore any integer overflow caused by the cast.  */
5033       result = ignore_overflows (result, orig);
5034
5035       /* [expr.static.cast]
5036
5037          If T is a reference type, the result is an lvalue; otherwise,
5038          the result is an rvalue.  */
5039       if (TREE_CODE (type) != REFERENCE_TYPE)
5040         result = rvalue (result);
5041       return result;
5042     }
5043
5044   /* [expr.static.cast]
5045
5046      Any expression can be explicitly converted to type cv void.  */
5047   if (TREE_CODE (type) == VOID_TYPE)
5048     return convert_to_void (expr, /*implicit=*/NULL);
5049
5050   /* [expr.static.cast]
5051
5052      The inverse of any standard conversion sequence (clause _conv_),
5053      other than the lvalue-to-rvalue (_conv.lval_), array-to-pointer
5054      (_conv.array_), function-to-pointer (_conv.func_), and boolean
5055      (_conv.bool_) conversions, can be performed explicitly using
5056      static_cast subject to the restriction that the explicit
5057      conversion does not cast away constness (_expr.const.cast_), and
5058      the following additional rules for specific cases:  */
5059   /* For reference, the conversions not excluded are: integral
5060      promotions, floating point promotion, integral conversions,
5061      floating point conversions, floating-integral conversions,
5062      pointer conversions, and pointer to member conversions.  */
5063   /* DR 128
5064
5065      A value of integral _or enumeration_ type can be explicitly
5066      converted to an enumeration type.  */
5067   /* The effect of all that is that any conversion between any two
5068      types which are integral, floating, or enumeration types can be
5069      performed.  */
5070   if ((INTEGRAL_TYPE_P (type) || SCALAR_FLOAT_TYPE_P (type))
5071       && (INTEGRAL_TYPE_P (intype) || SCALAR_FLOAT_TYPE_P (intype)))
5072     {
5073       expr = ocp_convert (type, expr, CONV_C_CAST, LOOKUP_NORMAL);
5074
5075       /* Ignore any integer overflow caused by the cast.  */
5076       expr = ignore_overflows (expr, orig);
5077       return expr;
5078     }
5079
5080   if (TYPE_PTR_P (type) && TYPE_PTR_P (intype)
5081       && CLASS_TYPE_P (TREE_TYPE (type))
5082       && CLASS_TYPE_P (TREE_TYPE (intype))
5083       && can_convert (build_pointer_type (TYPE_MAIN_VARIANT
5084                                           (TREE_TYPE (intype))),
5085                       build_pointer_type (TYPE_MAIN_VARIANT
5086                                           (TREE_TYPE (type)))))
5087     {
5088       tree base;
5089
5090       if (!c_cast_p)
5091         check_for_casting_away_constness (intype, type, diag_fn, desc);
5092       base = lookup_base (TREE_TYPE (type), TREE_TYPE (intype),
5093                           c_cast_p ? ba_unique : ba_check,
5094                           NULL);
5095       return build_base_path (MINUS_EXPR, expr, base, /*nonnull=*/false);
5096     }
5097
5098   if ((TYPE_PTRMEM_P (type) && TYPE_PTRMEM_P (intype))
5099       || (TYPE_PTRMEMFUNC_P (type) && TYPE_PTRMEMFUNC_P (intype)))
5100     {
5101       tree c1;
5102       tree c2;
5103       tree t1;
5104       tree t2;
5105
5106       c1 = TYPE_PTRMEM_CLASS_TYPE (intype);
5107       c2 = TYPE_PTRMEM_CLASS_TYPE (type);
5108
5109       if (TYPE_PTRMEM_P (type))
5110         {
5111           t1 = (build_ptrmem_type
5112                 (c1,
5113                  TYPE_MAIN_VARIANT (TYPE_PTRMEM_POINTED_TO_TYPE (intype))));
5114           t2 = (build_ptrmem_type
5115                 (c2,
5116                  TYPE_MAIN_VARIANT (TYPE_PTRMEM_POINTED_TO_TYPE (type))));
5117         }
5118       else
5119         {
5120           t1 = intype;
5121           t2 = type;
5122         }
5123       if (can_convert (t1, t2))
5124         {
5125           if (!c_cast_p)
5126             check_for_casting_away_constness (intype, type, diag_fn,
5127                                               desc);
5128           return convert_ptrmem (type, expr, /*allow_inverse_p=*/1,
5129                                  c_cast_p);
5130         }
5131     }
5132
5133   /* [expr.static.cast]
5134
5135      An rvalue of type "pointer to cv void" can be explicitly
5136      converted to a pointer to object type.  A value of type pointer
5137      to object converted to "pointer to cv void" and back to the
5138      original pointer type will have its original value.  */
5139   if (TREE_CODE (intype) == POINTER_TYPE
5140       && VOID_TYPE_P (TREE_TYPE (intype))
5141       && TYPE_PTROB_P (type))
5142     {
5143       if (!c_cast_p)
5144         check_for_casting_away_constness (intype, type, diag_fn, desc);
5145       return build_nop (type, expr);
5146     }
5147
5148   *valid_p = false;
5149   return error_mark_node;
5150 }
5151
5152 /* Return an expression representing static_cast<TYPE>(EXPR).  */
5153
5154 tree
5155 build_static_cast (tree type, tree expr)
5156 {
5157   tree result;
5158   bool valid_p;
5159
5160   if (type == error_mark_node || expr == error_mark_node)
5161     return error_mark_node;
5162
5163   if (processing_template_decl)
5164     {
5165       expr = build_min (STATIC_CAST_EXPR, type, expr);
5166       /* We don't know if it will or will not have side effects.  */
5167       TREE_SIDE_EFFECTS (expr) = 1;
5168       return convert_from_reference (expr);
5169     }
5170
5171   /* build_c_cast puts on a NOP_EXPR to make the result not an lvalue.
5172      Strip such NOP_EXPRs if VALUE is being used in non-lvalue context.  */
5173   if (TREE_CODE (type) != REFERENCE_TYPE
5174       && TREE_CODE (expr) == NOP_EXPR
5175       && TREE_TYPE (expr) == TREE_TYPE (TREE_OPERAND (expr, 0)))
5176     expr = TREE_OPERAND (expr, 0);
5177
5178   result = build_static_cast_1 (type, expr, /*c_cast_p=*/false, &valid_p);
5179   if (valid_p)
5180     return result;
5181
5182   error ("invalid static_cast from type %qT to type %qT",
5183          TREE_TYPE (expr), type);
5184   return error_mark_node;
5185 }
5186
5187 /* EXPR is an expression with member function or pointer-to-member
5188    function type.  TYPE is a pointer type.  Converting EXPR to TYPE is
5189    not permitted by ISO C++, but we accept it in some modes.  If we
5190    are not in one of those modes, issue a diagnostic.  Return the
5191    converted expression.  */
5192
5193 tree
5194 convert_member_func_to_ptr (tree type, tree expr)
5195 {
5196   tree intype;
5197   tree decl;
5198
5199   intype = TREE_TYPE (expr);
5200   gcc_assert (TYPE_PTRMEMFUNC_P (intype)
5201               || TREE_CODE (intype) == METHOD_TYPE);
5202
5203   if (pedantic || warn_pmf2ptr)
5204     pedwarn ("converting from %qT to %qT", intype, type);
5205
5206   if (TREE_CODE (intype) == METHOD_TYPE)
5207     expr = build_addr_func (expr);
5208   else if (TREE_CODE (expr) == PTRMEM_CST)
5209     expr = build_address (PTRMEM_CST_MEMBER (expr));
5210   else
5211     {
5212       decl = maybe_dummy_object (TYPE_PTRMEM_CLASS_TYPE (intype), 0);
5213       decl = build_address (decl);
5214       expr = get_member_function_from_ptrfunc (&decl, expr);
5215     }
5216
5217   return build_nop (type, expr);
5218 }
5219
5220 /* Return a representation for a reinterpret_cast from EXPR to TYPE.
5221    If C_CAST_P is true, this reinterpret cast is being done as part of
5222    a C-style cast.  If VALID_P is non-NULL, *VALID_P is set to
5223    indicate whether or not reinterpret_cast was valid.  */
5224
5225 static tree
5226 build_reinterpret_cast_1 (tree type, tree expr, bool c_cast_p,
5227                           bool *valid_p)
5228 {
5229   tree intype;
5230
5231   /* Assume the cast is invalid.  */
5232   if (valid_p)
5233     *valid_p = true;
5234
5235   if (type == error_mark_node || error_operand_p (expr))
5236     return error_mark_node;
5237
5238   intype = TREE_TYPE (expr);
5239
5240   /* Save casted types in the function's used types hash table.  */
5241   used_types_insert (type);
5242
5243   /* [expr.reinterpret.cast]
5244      An lvalue expression of type T1 can be cast to the type
5245      "reference to T2" if an expression of type "pointer to T1" can be
5246      explicitly converted to the type "pointer to T2" using a
5247      reinterpret_cast.  */
5248   if (TREE_CODE (type) == REFERENCE_TYPE)
5249     {
5250       if (! real_lvalue_p (expr))
5251         {
5252           error ("invalid cast of an rvalue expression of type "
5253                  "%qT to type %qT",
5254                  intype, type);
5255           return error_mark_node;
5256         }
5257
5258       /* Warn about a reinterpret_cast from "A*" to "B&" if "A" and
5259          "B" are related class types; the reinterpret_cast does not
5260          adjust the pointer.  */
5261       if (TYPE_PTR_P (intype)
5262           && (comptypes (TREE_TYPE (intype), TREE_TYPE (type),
5263                          COMPARE_BASE | COMPARE_DERIVED)))
5264         warning (0, "casting %qT to %qT does not dereference pointer",
5265                  intype, type);
5266
5267       expr = build_unary_op (ADDR_EXPR, expr, 0);
5268       if (expr != error_mark_node)
5269         expr = build_reinterpret_cast_1
5270           (build_pointer_type (TREE_TYPE (type)), expr, c_cast_p,
5271            valid_p);
5272       if (expr != error_mark_node)
5273         expr = build_indirect_ref (expr, 0);
5274       return expr;
5275     }
5276
5277   /* As a G++ extension, we consider conversions from member
5278      functions, and pointers to member functions to
5279      pointer-to-function and pointer-to-void types.  If
5280      -Wno-pmf-conversions has not been specified,
5281      convert_member_func_to_ptr will issue an error message.  */
5282   if ((TYPE_PTRMEMFUNC_P (intype)
5283        || TREE_CODE (intype) == METHOD_TYPE)
5284       && TYPE_PTR_P (type)
5285       && (TREE_CODE (TREE_TYPE (type)) == FUNCTION_TYPE
5286           || VOID_TYPE_P (TREE_TYPE (type))))
5287     return convert_member_func_to_ptr (type, expr);
5288
5289   /* If the cast is not to a reference type, the lvalue-to-rvalue,
5290      array-to-pointer, and function-to-pointer conversions are
5291      performed.  */
5292   expr = decay_conversion (expr);
5293
5294   /* build_c_cast puts on a NOP_EXPR to make the result not an lvalue.
5295      Strip such NOP_EXPRs if VALUE is being used in non-lvalue context.  */
5296   if (TREE_CODE (expr) == NOP_EXPR
5297       && TREE_TYPE (expr) == TREE_TYPE (TREE_OPERAND (expr, 0)))
5298     expr = TREE_OPERAND (expr, 0);
5299
5300   if (error_operand_p (expr))
5301     return error_mark_node;
5302
5303   intype = TREE_TYPE (expr);
5304
5305   /* [expr.reinterpret.cast]
5306      A pointer can be converted to any integral type large enough to
5307      hold it.  */
5308   if (CP_INTEGRAL_TYPE_P (type) && TYPE_PTR_P (intype))
5309     {
5310       if (TYPE_PRECISION (type) < TYPE_PRECISION (intype))
5311         pedwarn ("cast from %qT to %qT loses precision",
5312                  intype, type);
5313     }
5314   /* [expr.reinterpret.cast]
5315      A value of integral or enumeration type can be explicitly
5316      converted to a pointer.  */
5317   else if (TYPE_PTR_P (type) && INTEGRAL_OR_ENUMERATION_TYPE_P (intype))
5318     /* OK */
5319     ;
5320   else if ((TYPE_PTRFN_P (type) && TYPE_PTRFN_P (intype))
5321            || (TYPE_PTRMEMFUNC_P (type) && TYPE_PTRMEMFUNC_P (intype)))
5322     return fold_if_not_in_template (build_nop (type, expr));
5323   else if ((TYPE_PTRMEM_P (type) && TYPE_PTRMEM_P (intype))
5324            || (TYPE_PTROBV_P (type) && TYPE_PTROBV_P (intype)))
5325     {
5326       tree sexpr = expr;
5327
5328       if (!c_cast_p)
5329         check_for_casting_away_constness (intype, type, error,
5330                                           "reinterpret_cast");
5331       /* Warn about possible alignment problems.  */
5332       if (STRICT_ALIGNMENT && warn_cast_align
5333           && !VOID_TYPE_P (type)
5334           && TREE_CODE (TREE_TYPE (intype)) != FUNCTION_TYPE
5335           && COMPLETE_TYPE_P (TREE_TYPE (type))
5336           && COMPLETE_TYPE_P (TREE_TYPE (intype))
5337           && TYPE_ALIGN (TREE_TYPE (type)) > TYPE_ALIGN (TREE_TYPE (intype)))
5338         warning (0, "cast from %qT to %qT increases required alignment of "
5339                  "target type",
5340                  intype, type);
5341
5342       /* We need to strip nops here, because the frontend likes to
5343          create (int *)&a for array-to-pointer decay, instead of &a[0].  */
5344       STRIP_NOPS (sexpr);
5345       strict_aliasing_warning (intype, type, sexpr);
5346
5347       return fold_if_not_in_template (build_nop (type, expr));
5348     }
5349   else if ((TYPE_PTRFN_P (type) && TYPE_PTROBV_P (intype))
5350            || (TYPE_PTRFN_P (intype) && TYPE_PTROBV_P (type)))
5351     {
5352       if (pedantic)
5353         /* Only issue a warning, as we have always supported this
5354            where possible, and it is necessary in some cases.  DR 195
5355            addresses this issue, but as of 2004/10/26 is still in
5356            drafting.  */
5357         warning (0, "ISO C++ forbids casting between pointer-to-function and pointer-to-object");
5358       return fold_if_not_in_template (build_nop (type, expr));
5359     }
5360   else if (TREE_CODE (type) == VECTOR_TYPE)
5361     return fold_if_not_in_template (convert_to_vector (type, expr));
5362   else if (TREE_CODE (intype) == VECTOR_TYPE)
5363     return fold_if_not_in_template (convert_to_integer (type, expr));
5364   else
5365     {
5366       if (valid_p)
5367         *valid_p = false;
5368       error ("invalid cast from type %qT to type %qT", intype, type);
5369       return error_mark_node;
5370     }
5371
5372   return cp_convert (type, expr);
5373 }
5374
5375 tree
5376 build_reinterpret_cast (tree type, tree expr)
5377 {
5378   if (type == error_mark_node || expr == error_mark_node)
5379     return error_mark_node;
5380
5381   if (processing_template_decl)
5382     {
5383       tree t = build_min (REINTERPRET_CAST_EXPR, type, expr);
5384
5385       if (!TREE_SIDE_EFFECTS (t)
5386           && type_dependent_expression_p (expr))
5387         /* There might turn out to be side effects inside expr.  */
5388         TREE_SIDE_EFFECTS (t) = 1;
5389       return convert_from_reference (t);
5390     }
5391
5392   return build_reinterpret_cast_1 (type, expr, /*c_cast_p=*/false,
5393                                    /*valid_p=*/NULL);
5394 }
5395
5396 /* Perform a const_cast from EXPR to TYPE.  If the cast is valid,
5397    return an appropriate expression.  Otherwise, return
5398    error_mark_node.  If the cast is not valid, and COMPLAIN is true,
5399    then a diagnostic will be issued.  If VALID_P is non-NULL, we are
5400    performing a C-style cast, its value upon return will indicate
5401    whether or not the conversion succeeded.  */
5402
5403 static tree
5404 build_const_cast_1 (tree dst_type, tree expr, bool complain,
5405                     bool *valid_p)
5406 {
5407   tree src_type;
5408   tree reference_type;
5409
5410   /* Callers are responsible for handling error_mark_node as a
5411      destination type.  */
5412   gcc_assert (dst_type != error_mark_node);
5413   /* In a template, callers should be building syntactic
5414      representations of casts, not using this machinery.  */
5415   gcc_assert (!processing_template_decl);
5416
5417   /* Assume the conversion is invalid.  */
5418   if (valid_p)
5419     *valid_p = false;
5420
5421   if (!POINTER_TYPE_P (dst_type) && !TYPE_PTRMEM_P (dst_type))
5422     {
5423       if (complain)
5424         error ("invalid use of const_cast with type %qT, "
5425                "which is not a pointer, "
5426                "reference, nor a pointer-to-data-member type", dst_type);
5427       return error_mark_node;
5428     }
5429
5430   if (TREE_CODE (TREE_TYPE (dst_type)) == FUNCTION_TYPE)
5431     {
5432       if (complain)
5433         error ("invalid use of const_cast with type %qT, which is a pointer "
5434                "or reference to a function type", dst_type);
5435       return error_mark_node;
5436     }
5437
5438   /* Save casted types in the function's used types hash table.  */
5439   used_types_insert (dst_type);
5440
5441   src_type = TREE_TYPE (expr);
5442   /* Expressions do not really have reference types.  */
5443   if (TREE_CODE (src_type) == REFERENCE_TYPE)
5444     src_type = TREE_TYPE (src_type);
5445
5446   /* [expr.const.cast]
5447
5448      An lvalue of type T1 can be explicitly converted to an lvalue of
5449      type T2 using the cast const_cast<T2&> (where T1 and T2 are object
5450      types) if a pointer to T1 can be explicitly converted to the type
5451      pointer to T2 using a const_cast.  */
5452   if (TREE_CODE (dst_type) == REFERENCE_TYPE)
5453     {
5454       reference_type = dst_type;
5455       if (! real_lvalue_p (expr))
5456         {
5457           if (complain)
5458             error ("invalid const_cast of an rvalue of type %qT to type %qT",
5459                    src_type, dst_type);
5460           return error_mark_node;
5461         }
5462       dst_type = build_pointer_type (TREE_TYPE (dst_type));
5463       src_type = build_pointer_type (src_type);
5464     }
5465   else
5466     {
5467       reference_type = NULL_TREE;
5468       /* If the destination type is not a reference type, the
5469          lvalue-to-rvalue, array-to-pointer, and function-to-pointer
5470          conversions are performed.  */
5471       src_type = type_decays_to (src_type);
5472       if (src_type == error_mark_node)
5473         return error_mark_node;
5474     }
5475
5476   if ((TYPE_PTR_P (src_type) || TYPE_PTRMEM_P (src_type))
5477       && comp_ptr_ttypes_const (dst_type, src_type))
5478     {
5479       if (valid_p)
5480         {
5481           *valid_p = true;
5482           /* This cast is actually a C-style cast.  Issue a warning if
5483              the user is making a potentially unsafe cast.  */
5484           if (warn_cast_qual)
5485             check_for_casting_away_constness (src_type, dst_type,
5486                                               warning0,
5487                                               "cast");
5488         }
5489       if (reference_type)
5490         {
5491           expr = build_unary_op (ADDR_EXPR, expr, 0);
5492           expr = build_nop (reference_type, expr);
5493           return convert_from_reference (expr);
5494         }
5495       else
5496         {
5497           expr = decay_conversion (expr);
5498           /* build_c_cast puts on a NOP_EXPR to make the result not an
5499              lvalue.  Strip such NOP_EXPRs if VALUE is being used in
5500              non-lvalue context.  */
5501           if (TREE_CODE (expr) == NOP_EXPR
5502               && TREE_TYPE (expr) == TREE_TYPE (TREE_OPERAND (expr, 0)))
5503             expr = TREE_OPERAND (expr, 0);
5504           return build_nop (dst_type, expr);
5505         }
5506     }
5507
5508   if (complain)
5509     error ("invalid const_cast from type %qT to type %qT",
5510            src_type, dst_type);
5511   return error_mark_node;
5512 }
5513
5514 tree
5515 build_const_cast (tree type, tree expr)
5516 {
5517   if (type == error_mark_node || error_operand_p (expr))
5518     return error_mark_node;
5519
5520   if (processing_template_decl)
5521     {
5522       tree t = build_min (CONST_CAST_EXPR, type, expr);
5523
5524       if (!TREE_SIDE_EFFECTS (t)
5525           && type_dependent_expression_p (expr))
5526         /* There might turn out to be side effects inside expr.  */
5527         TREE_SIDE_EFFECTS (t) = 1;
5528       return convert_from_reference (t);
5529     }
5530
5531   return build_const_cast_1 (type, expr, /*complain=*/true,
5532                              /*valid_p=*/NULL);
5533 }
5534
5535 /* Build an expression representing an explicit C-style cast to type
5536    TYPE of expression EXPR.  */
5537
5538 tree
5539 build_c_cast (tree type, tree expr)
5540 {
5541   tree value = expr;
5542   tree result;
5543   bool valid_p;
5544
5545   if (type == error_mark_node || error_operand_p (expr))
5546     return error_mark_node;
5547
5548   if (processing_template_decl)
5549     {
5550       tree t = build_min (CAST_EXPR, type,
5551                           tree_cons (NULL_TREE, value, NULL_TREE));
5552       /* We don't know if it will or will not have side effects.  */
5553       TREE_SIDE_EFFECTS (t) = 1;
5554       return convert_from_reference (t);
5555     }
5556
5557   /* Casts to a (pointer to a) specific ObjC class (or 'id' or
5558      'Class') should always be retained, because this information aids
5559      in method lookup.  */
5560   if (objc_is_object_ptr (type)
5561       && objc_is_object_ptr (TREE_TYPE (expr)))
5562     return build_nop (type, expr);
5563
5564   /* build_c_cast puts on a NOP_EXPR to make the result not an lvalue.
5565      Strip such NOP_EXPRs if VALUE is being used in non-lvalue context.  */
5566   if (TREE_CODE (type) != REFERENCE_TYPE
5567       && TREE_CODE (value) == NOP_EXPR
5568       && TREE_TYPE (value) == TREE_TYPE (TREE_OPERAND (value, 0)))
5569     value = TREE_OPERAND (value, 0);
5570
5571   if (TREE_CODE (type) == ARRAY_TYPE)
5572     {
5573       /* Allow casting from T1* to T2[] because Cfront allows it.
5574          NIHCL uses it. It is not valid ISO C++ however.  */
5575       if (TREE_CODE (TREE_TYPE (expr)) == POINTER_TYPE)
5576         {
5577           pedwarn ("ISO C++ forbids casting to an array type %qT", type);
5578           type = build_pointer_type (TREE_TYPE (type));
5579         }
5580       else
5581         {
5582           error ("ISO C++ forbids casting to an array type %qT", type);
5583           return error_mark_node;
5584         }
5585     }
5586
5587   if (TREE_CODE (type) == FUNCTION_TYPE
5588       || TREE_CODE (type) == METHOD_TYPE)
5589     {
5590       error ("invalid cast to function type %qT", type);
5591       return error_mark_node;
5592     }
5593
5594   /* A C-style cast can be a const_cast.  */
5595   result = build_const_cast_1 (type, value, /*complain=*/false,
5596                                &valid_p);
5597   if (valid_p)
5598     return result;
5599
5600   /* Or a static cast.  */
5601   result = build_static_cast_1 (type, value, /*c_cast_p=*/true,
5602                                 &valid_p);
5603   /* Or a reinterpret_cast.  */
5604   if (!valid_p)
5605     result = build_reinterpret_cast_1 (type, value, /*c_cast_p=*/true,
5606                                        &valid_p);
5607   /* The static_cast or reinterpret_cast may be followed by a
5608      const_cast.  */
5609   if (valid_p
5610       /* A valid cast may result in errors if, for example, a
5611          conversion to am ambiguous base class is required.  */
5612       && !error_operand_p (result))
5613     {
5614       tree result_type;
5615
5616       /* Non-class rvalues always have cv-unqualified type.  */
5617       if (!CLASS_TYPE_P (type))
5618         type = TYPE_MAIN_VARIANT (type);
5619       result_type = TREE_TYPE (result);
5620       if (!CLASS_TYPE_P (result_type))
5621         result_type = TYPE_MAIN_VARIANT (result_type);
5622       /* If the type of RESULT does not match TYPE, perform a
5623          const_cast to make it match.  If the static_cast or
5624          reinterpret_cast succeeded, we will differ by at most
5625          cv-qualification, so the follow-on const_cast is guaranteed
5626          to succeed.  */
5627       if (!same_type_p (non_reference (type), non_reference (result_type)))
5628         {
5629           result = build_const_cast_1 (type, result, false, &valid_p);
5630           gcc_assert (valid_p);
5631         }
5632       return result;
5633     }
5634
5635   return error_mark_node;
5636 }
5637 \f
5638 /* Build an assignment expression of lvalue LHS from value RHS.
5639    MODIFYCODE is the code for a binary operator that we use
5640    to combine the old value of LHS with RHS to get the new value.
5641    Or else MODIFYCODE is NOP_EXPR meaning do a simple assignment.
5642
5643    C++: If MODIFYCODE is INIT_EXPR, then leave references unbashed.  */
5644
5645 tree
5646 build_modify_expr (tree lhs, enum tree_code modifycode, tree rhs)
5647 {
5648   tree result;
5649   tree newrhs = rhs;
5650   tree lhstype = TREE_TYPE (lhs);
5651   tree olhstype = lhstype;
5652   tree olhs = NULL_TREE;
5653   bool plain_assign = (modifycode == NOP_EXPR);
5654
5655   /* Avoid duplicate error messages from operands that had errors.  */
5656   if (error_operand_p (lhs) || error_operand_p (rhs))
5657     return error_mark_node;
5658
5659   /* Handle control structure constructs used as "lvalues".  */
5660   switch (TREE_CODE (lhs))
5661     {
5662       /* Handle --foo = 5; as these are valid constructs in C++.  */
5663     case PREDECREMENT_EXPR:
5664     case PREINCREMENT_EXPR:
5665       if (TREE_SIDE_EFFECTS (TREE_OPERAND (lhs, 0)))
5666         lhs = build2 (TREE_CODE (lhs), TREE_TYPE (lhs),
5667                       stabilize_reference (TREE_OPERAND (lhs, 0)),
5668                       TREE_OPERAND (lhs, 1));
5669       return build2 (COMPOUND_EXPR, lhstype,
5670                      lhs,
5671                      build_modify_expr (TREE_OPERAND (lhs, 0),
5672                                         modifycode, rhs));
5673
5674       /* Handle (a, b) used as an "lvalue".  */
5675     case COMPOUND_EXPR:
5676       newrhs = build_modify_expr (TREE_OPERAND (lhs, 1),
5677                                   modifycode, rhs);
5678       if (newrhs == error_mark_node)
5679         return error_mark_node;
5680       return build2 (COMPOUND_EXPR, lhstype,
5681                      TREE_OPERAND (lhs, 0), newrhs);
5682
5683     case MODIFY_EXPR:
5684       if (TREE_SIDE_EFFECTS (TREE_OPERAND (lhs, 0)))
5685         lhs = build2 (TREE_CODE (lhs), TREE_TYPE (lhs),
5686                       stabilize_reference (TREE_OPERAND (lhs, 0)),
5687                       TREE_OPERAND (lhs, 1));
5688       newrhs = build_modify_expr (TREE_OPERAND (lhs, 0), modifycode, rhs);
5689       if (newrhs == error_mark_node)
5690         return error_mark_node;
5691       return build2 (COMPOUND_EXPR, lhstype, lhs, newrhs);
5692
5693     case MIN_EXPR:
5694     case MAX_EXPR:
5695       /* MIN_EXPR and MAX_EXPR are currently only permitted as lvalues,
5696          when neither operand has side-effects.  */
5697       if (!lvalue_or_else (lhs, lv_assign))
5698         return error_mark_node;
5699
5700       gcc_assert (!TREE_SIDE_EFFECTS (TREE_OPERAND (lhs, 0))
5701                   && !TREE_SIDE_EFFECTS (TREE_OPERAND (lhs, 1)));
5702
5703       lhs = build3 (COND_EXPR, TREE_TYPE (lhs),
5704                     build2 (TREE_CODE (lhs) == MIN_EXPR ? LE_EXPR : GE_EXPR,
5705                             boolean_type_node,
5706                             TREE_OPERAND (lhs, 0),
5707                             TREE_OPERAND (lhs, 1)),
5708                     TREE_OPERAND (lhs, 0),
5709                     TREE_OPERAND (lhs, 1));
5710       /* Fall through.  */
5711
5712       /* Handle (a ? b : c) used as an "lvalue".  */
5713     case COND_EXPR:
5714       {
5715         /* Produce (a ? (b = rhs) : (c = rhs))
5716            except that the RHS goes through a save-expr
5717            so the code to compute it is only emitted once.  */
5718         tree cond;
5719         tree preeval = NULL_TREE;
5720
5721         rhs = stabilize_expr (rhs, &preeval);
5722
5723         /* Check this here to avoid odd errors when trying to convert
5724            a throw to the type of the COND_EXPR.  */
5725         if (!lvalue_or_else (lhs, lv_assign))
5726           return error_mark_node;
5727
5728         cond = build_conditional_expr
5729           (TREE_OPERAND (lhs, 0),
5730            build_modify_expr (TREE_OPERAND (lhs, 1),
5731                               modifycode, rhs),
5732            build_modify_expr (TREE_OPERAND (lhs, 2),
5733                               modifycode, rhs));
5734
5735         if (cond == error_mark_node)
5736           return cond;
5737         /* Make sure the code to compute the rhs comes out
5738            before the split.  */
5739         if (preeval)
5740           cond = build2 (COMPOUND_EXPR, TREE_TYPE (lhs), preeval, cond);
5741         return cond;
5742       }
5743
5744     default:
5745       break;
5746     }
5747
5748   if (modifycode == INIT_EXPR)
5749     {
5750       if (TREE_CODE (rhs) == CONSTRUCTOR)
5751         {
5752           if (! same_type_p (TREE_TYPE (rhs), lhstype))
5753             /* Call convert to generate an error; see PR 11063.  */
5754             rhs = convert (lhstype, rhs);
5755           result = build2 (INIT_EXPR, lhstype, lhs, rhs);
5756           TREE_SIDE_EFFECTS (result) = 1;
5757           return result;
5758         }
5759       else if (! IS_AGGR_TYPE (lhstype))
5760         /* Do the default thing.  */;
5761       else
5762         {
5763           result = build_special_member_call (lhs, complete_ctor_identifier,
5764                                               build_tree_list (NULL_TREE, rhs),
5765                                               lhstype, LOOKUP_NORMAL);
5766           if (result == NULL_TREE)
5767             return error_mark_node;
5768           return result;
5769         }
5770     }
5771   else
5772     {
5773       lhs = require_complete_type (lhs);
5774       if (lhs == error_mark_node)
5775         return error_mark_node;
5776
5777       if (modifycode == NOP_EXPR)
5778         {
5779           /* `operator=' is not an inheritable operator.  */
5780           if (! IS_AGGR_TYPE (lhstype))
5781             /* Do the default thing.  */;
5782           else
5783             {
5784               result = build_new_op (MODIFY_EXPR, LOOKUP_NORMAL,
5785                                      lhs, rhs, make_node (NOP_EXPR),
5786                                      /*overloaded_p=*/NULL);
5787               if (result == NULL_TREE)
5788                 return error_mark_node;
5789               return result;
5790             }
5791           lhstype = olhstype;
5792         }
5793       else
5794         {
5795           /* A binary op has been requested.  Combine the old LHS
5796              value with the RHS producing the value we should actually
5797              store into the LHS.  */
5798
5799           gcc_assert (!PROMOTES_TO_AGGR_TYPE (lhstype, REFERENCE_TYPE));
5800           lhs = stabilize_reference (lhs);
5801           newrhs = cp_build_binary_op (modifycode, lhs, rhs);
5802           if (newrhs == error_mark_node)
5803             {
5804               error ("  in evaluation of %<%Q(%#T, %#T)%>", modifycode,
5805                      TREE_TYPE (lhs), TREE_TYPE (rhs));
5806               return error_mark_node;
5807             }
5808
5809           /* Now it looks like a plain assignment.  */
5810           modifycode = NOP_EXPR;
5811         }
5812       gcc_assert (TREE_CODE (lhstype) != REFERENCE_TYPE);
5813       gcc_assert (TREE_CODE (TREE_TYPE (newrhs)) != REFERENCE_TYPE);
5814     }
5815
5816   /* The left-hand side must be an lvalue.  */
5817   if (!lvalue_or_else (lhs, lv_assign))
5818     return error_mark_node;
5819
5820   /* Warn about modifying something that is `const'.  Don't warn if
5821      this is initialization.  */
5822   if (modifycode != INIT_EXPR
5823       && (TREE_READONLY (lhs) || CP_TYPE_CONST_P (lhstype)
5824           /* Functions are not modifiable, even though they are
5825              lvalues.  */
5826           || TREE_CODE (TREE_TYPE (lhs)) == FUNCTION_TYPE
5827           || TREE_CODE (TREE_TYPE (lhs)) == METHOD_TYPE
5828           /* If it's an aggregate and any field is const, then it is
5829              effectively const.  */
5830           || (CLASS_TYPE_P (lhstype)
5831               && C_TYPE_FIELDS_READONLY (lhstype))))
5832     readonly_error (lhs, "assignment", 0);
5833
5834   /* If storing into a structure or union member, it has probably been
5835      given type `int'.  Compute the type that would go with the actual
5836      amount of storage the member occupies.  */
5837
5838   if (TREE_CODE (lhs) == COMPONENT_REF
5839       && (TREE_CODE (lhstype) == INTEGER_TYPE
5840           || TREE_CODE (lhstype) == REAL_TYPE
5841           || TREE_CODE (lhstype) == ENUMERAL_TYPE))
5842     {
5843       lhstype = TREE_TYPE (get_unwidened (lhs, 0));
5844
5845       /* If storing in a field that is in actuality a short or narrower
5846          than one, we must store in the field in its actual type.  */
5847
5848       if (lhstype != TREE_TYPE (lhs))
5849         {
5850           /* Avoid warnings converting integral types back into enums for
5851              enum bit fields.  */
5852           if (TREE_CODE (lhstype) == INTEGER_TYPE
5853               && TREE_CODE (olhstype) == ENUMERAL_TYPE)
5854             {
5855               if (TREE_SIDE_EFFECTS (lhs))
5856                 lhs = stabilize_reference (lhs);
5857               olhs = lhs;
5858             }
5859           lhs = copy_node (lhs);
5860           TREE_TYPE (lhs) = lhstype;
5861         }
5862     }
5863
5864   /* Convert new value to destination type.  */
5865
5866   if (TREE_CODE (lhstype) == ARRAY_TYPE)
5867     {
5868       int from_array;
5869
5870       if (!same_or_base_type_p (TYPE_MAIN_VARIANT (lhstype),
5871                                 TYPE_MAIN_VARIANT (TREE_TYPE (rhs))))
5872         {
5873           error ("incompatible types in assignment of %qT to %qT",
5874                  TREE_TYPE (rhs), lhstype);
5875           return error_mark_node;
5876         }
5877
5878       /* Allow array assignment in compiler-generated code.  */
5879       if (! DECL_ARTIFICIAL (current_function_decl))
5880         {
5881           /* This routine is used for both initialization and assignment.
5882              Make sure the diagnostic message differentiates the context.  */
5883           if (modifycode == INIT_EXPR)
5884             error ("array used as initializer");
5885           else
5886             error ("invalid array assignment");
5887           return error_mark_node;
5888         }
5889
5890       from_array = TREE_CODE (TREE_TYPE (newrhs)) == ARRAY_TYPE
5891                    ? 1 + (modifycode != INIT_EXPR): 0;
5892       return build_vec_init (lhs, NULL_TREE, newrhs,
5893                              /*explicit_default_init_p=*/false,
5894                              from_array);
5895     }
5896
5897   if (modifycode == INIT_EXPR)
5898     newrhs = convert_for_initialization (lhs, lhstype, newrhs, LOOKUP_NORMAL,
5899                                          "initialization", NULL_TREE, 0);
5900   else
5901     {
5902       /* Avoid warnings on enum bit fields.  */
5903       if (TREE_CODE (olhstype) == ENUMERAL_TYPE
5904           && TREE_CODE (lhstype) == INTEGER_TYPE)
5905         {
5906           newrhs = convert_for_assignment (olhstype, newrhs, "assignment",
5907                                            NULL_TREE, 0);
5908           newrhs = convert_force (lhstype, newrhs, 0);
5909         }
5910       else
5911         newrhs = convert_for_assignment (lhstype, newrhs, "assignment",
5912                                          NULL_TREE, 0);
5913       if (TREE_CODE (newrhs) == CALL_EXPR
5914           && TYPE_NEEDS_CONSTRUCTING (lhstype))
5915         newrhs = build_cplus_new (lhstype, newrhs);
5916
5917       /* Can't initialize directly from a TARGET_EXPR, since that would
5918          cause the lhs to be constructed twice, and possibly result in
5919          accidental self-initialization.  So we force the TARGET_EXPR to be
5920          expanded without a target.  */
5921       if (TREE_CODE (newrhs) == TARGET_EXPR)
5922         newrhs = build2 (COMPOUND_EXPR, TREE_TYPE (newrhs), newrhs,
5923                          TREE_OPERAND (newrhs, 0));
5924     }
5925
5926   if (newrhs == error_mark_node)
5927     return error_mark_node;
5928
5929   if (c_dialect_objc () && flag_objc_gc)
5930     {
5931       result = objc_generate_write_barrier (lhs, modifycode, newrhs);
5932
5933       if (result)
5934         return result;
5935     }
5936
5937   result = build2 (modifycode == NOP_EXPR ? MODIFY_EXPR : INIT_EXPR,
5938                    lhstype, lhs, newrhs);
5939
5940   TREE_SIDE_EFFECTS (result) = 1;
5941   if (!plain_assign)
5942     TREE_NO_WARNING (result) = 1;
5943
5944   /* If we got the LHS in a different type for storing in,
5945      convert the result back to the nominal type of LHS
5946      so that the value we return always has the same type
5947      as the LHS argument.  */
5948
5949   if (olhstype == TREE_TYPE (result))
5950     return result;
5951   if (olhs)
5952     {
5953       result = build2 (COMPOUND_EXPR, olhstype, result, olhs);
5954       TREE_NO_WARNING (result) = 1;
5955       return result;
5956     }
5957   return convert_for_assignment (olhstype, result, "assignment",
5958                                  NULL_TREE, 0);
5959 }
5960
5961 tree
5962 build_x_modify_expr (tree lhs, enum tree_code modifycode, tree rhs)
5963 {
5964   if (processing_template_decl)
5965     return build_min_nt (MODOP_EXPR, lhs,
5966                          build_min_nt (modifycode, NULL_TREE, NULL_TREE), rhs);
5967
5968   if (modifycode != NOP_EXPR)
5969     {
5970       tree rval = build_new_op (MODIFY_EXPR, LOOKUP_NORMAL, lhs, rhs,
5971                                 make_node (modifycode),
5972                                 /*overloaded_p=*/NULL);
5973       if (rval)
5974         {
5975           TREE_NO_WARNING (rval) = 1;
5976           return rval;
5977         }
5978     }
5979   return build_modify_expr (lhs, modifycode, rhs);
5980 }
5981
5982 \f
5983 /* Get difference in deltas for different pointer to member function
5984    types.  Returns an integer constant of type PTRDIFF_TYPE_NODE.  If
5985    the conversion is invalid, the constant is zero.  If
5986    ALLOW_INVERSE_P is true, then allow reverse conversions as well.
5987    If C_CAST_P is true this conversion is taking place as part of a
5988    C-style cast.
5989
5990    Note that the naming of FROM and TO is kind of backwards; the return
5991    value is what we add to a TO in order to get a FROM.  They are named
5992    this way because we call this function to find out how to convert from
5993    a pointer to member of FROM to a pointer to member of TO.  */
5994
5995 static tree
5996 get_delta_difference (tree from, tree to,
5997                       bool allow_inverse_p,
5998                       bool c_cast_p)
5999 {
6000   tree binfo;
6001   base_kind kind;
6002   tree result;
6003
6004   /* Assume no conversion is required.  */
6005   result = integer_zero_node;
6006   binfo = lookup_base (to, from, c_cast_p ? ba_unique : ba_check, &kind);
6007   if (kind == bk_inaccessible || kind == bk_ambig)
6008     error ("   in pointer to member function conversion");
6009   else if (binfo)
6010     {
6011       if (kind != bk_via_virtual)
6012         result = BINFO_OFFSET (binfo);
6013       else
6014         {
6015           tree virt_binfo = binfo_from_vbase (binfo);
6016
6017           /* This is a reinterpret cast, we choose to do nothing.  */
6018           if (allow_inverse_p)
6019             warning (0, "pointer to member cast via virtual base %qT",
6020                      BINFO_TYPE (virt_binfo));
6021           else
6022             error ("pointer to member conversion via virtual base %qT",
6023                    BINFO_TYPE (virt_binfo));
6024         }
6025     }
6026   else if (same_type_ignoring_top_level_qualifiers_p (from, to))
6027     /* Pointer to member of incomplete class is permitted*/;
6028   else if (!allow_inverse_p)
6029     {
6030       error_not_base_type (from, to);
6031       error ("   in pointer to member conversion");
6032     }
6033   else
6034     {
6035       binfo = lookup_base (from, to, c_cast_p ? ba_unique : ba_check, &kind);
6036       if (binfo)
6037         {
6038           if (kind != bk_via_virtual)
6039             result = size_diffop (size_zero_node, BINFO_OFFSET (binfo));
6040           else
6041             {
6042               /* This is a reinterpret cast, we choose to do nothing.  */
6043               tree virt_binfo = binfo_from_vbase (binfo);
6044
6045               warning (0, "pointer to member cast via virtual base %qT",
6046                        BINFO_TYPE (virt_binfo));
6047             }
6048         }
6049     }
6050
6051   return fold_if_not_in_template (convert_to_integer (ptrdiff_type_node,
6052                                                       result));
6053 }
6054
6055 /* Return a constructor for the pointer-to-member-function TYPE using
6056    the other components as specified.  */
6057
6058 tree
6059 build_ptrmemfunc1 (tree type, tree delta, tree pfn)
6060 {
6061   tree u = NULL_TREE;
6062   tree delta_field;
6063   tree pfn_field;
6064   VEC(constructor_elt, gc) *v;
6065
6066   /* Pull the FIELD_DECLs out of the type.  */
6067   pfn_field = TYPE_FIELDS (type);
6068   delta_field = TREE_CHAIN (pfn_field);
6069
6070   /* Make sure DELTA has the type we want.  */
6071   delta = convert_and_check (delta_type_node, delta);
6072
6073   /* Finish creating the initializer.  */
6074   v = VEC_alloc(constructor_elt, gc, 2);
6075   CONSTRUCTOR_APPEND_ELT(v, pfn_field, pfn);
6076   CONSTRUCTOR_APPEND_ELT(v, delta_field, delta);
6077   u = build_constructor (type, v);
6078   TREE_CONSTANT (u) = TREE_CONSTANT (pfn) & TREE_CONSTANT (delta);
6079   TREE_INVARIANT (u) = TREE_INVARIANT (pfn) & TREE_INVARIANT (delta);
6080   TREE_STATIC (u) = (TREE_CONSTANT (u)
6081                      && (initializer_constant_valid_p (pfn, TREE_TYPE (pfn))
6082                          != NULL_TREE)
6083                      && (initializer_constant_valid_p (delta, TREE_TYPE (delta))
6084                          != NULL_TREE));
6085   return u;
6086 }
6087
6088 /* Build a constructor for a pointer to member function.  It can be
6089    used to initialize global variables, local variable, or used
6090    as a value in expressions.  TYPE is the POINTER to METHOD_TYPE we
6091    want to be.
6092
6093    If FORCE is nonzero, then force this conversion, even if
6094    we would rather not do it.  Usually set when using an explicit
6095    cast.  A C-style cast is being processed iff C_CAST_P is true.
6096
6097    Return error_mark_node, if something goes wrong.  */
6098
6099 tree
6100 build_ptrmemfunc (tree type, tree pfn, int force, bool c_cast_p)
6101 {
6102   tree fn;
6103   tree pfn_type;
6104   tree to_type;
6105
6106   if (error_operand_p (pfn))
6107     return error_mark_node;
6108
6109   pfn_type = TREE_TYPE (pfn);
6110   to_type = build_ptrmemfunc_type (type);
6111
6112   /* Handle multiple conversions of pointer to member functions.  */
6113   if (TYPE_PTRMEMFUNC_P (pfn_type))
6114     {
6115       tree delta = NULL_TREE;
6116       tree npfn = NULL_TREE;
6117       tree n;
6118
6119       if (!force
6120           && !can_convert_arg (to_type, TREE_TYPE (pfn), pfn, LOOKUP_NORMAL))
6121         error ("invalid conversion to type %qT from type %qT",
6122                to_type, pfn_type);
6123
6124       n = get_delta_difference (TYPE_PTRMEMFUNC_OBJECT_TYPE (pfn_type),
6125                                 TYPE_PTRMEMFUNC_OBJECT_TYPE (to_type),
6126                                 force,
6127                                 c_cast_p);
6128
6129       /* We don't have to do any conversion to convert a
6130          pointer-to-member to its own type.  But, we don't want to
6131          just return a PTRMEM_CST if there's an explicit cast; that
6132          cast should make the expression an invalid template argument.  */
6133       if (TREE_CODE (pfn) != PTRMEM_CST)
6134         {
6135           if (same_type_p (to_type, pfn_type))
6136             return pfn;
6137           else if (integer_zerop (n))
6138             return build_reinterpret_cast (to_type, pfn);
6139         }
6140
6141       if (TREE_SIDE_EFFECTS (pfn))
6142         pfn = save_expr (pfn);
6143
6144       /* Obtain the function pointer and the current DELTA.  */
6145       if (TREE_CODE (pfn) == PTRMEM_CST)
6146         expand_ptrmemfunc_cst (pfn, &delta, &npfn);
6147       else
6148         {
6149           npfn = build_ptrmemfunc_access_expr (pfn, pfn_identifier);
6150           delta = build_ptrmemfunc_access_expr (pfn, delta_identifier);
6151         }
6152
6153       /* Just adjust the DELTA field.  */
6154       gcc_assert  (same_type_ignoring_top_level_qualifiers_p
6155                    (TREE_TYPE (delta), ptrdiff_type_node));
6156       if (TARGET_PTRMEMFUNC_VBIT_LOCATION == ptrmemfunc_vbit_in_delta)
6157         n = cp_build_binary_op (LSHIFT_EXPR, n, integer_one_node);
6158       delta = cp_build_binary_op (PLUS_EXPR, delta, n);
6159       return build_ptrmemfunc1 (to_type, delta, npfn);
6160     }
6161
6162   /* Handle null pointer to member function conversions.  */
6163   if (integer_zerop (pfn))
6164     {
6165       pfn = build_c_cast (type, integer_zero_node);
6166       return build_ptrmemfunc1 (to_type,
6167                                 integer_zero_node,
6168                                 pfn);
6169     }
6170
6171   if (type_unknown_p (pfn))
6172     return instantiate_type (type, pfn, tf_warning_or_error);
6173
6174   fn = TREE_OPERAND (pfn, 0);
6175   gcc_assert (TREE_CODE (fn) == FUNCTION_DECL
6176               /* In a template, we will have preserved the
6177                  OFFSET_REF.  */
6178               || (processing_template_decl && TREE_CODE (fn) == OFFSET_REF));
6179   return make_ptrmem_cst (to_type, fn);
6180 }
6181
6182 /* Return the DELTA, IDX, PFN, and DELTA2 values for the PTRMEM_CST
6183    given by CST.
6184
6185    ??? There is no consistency as to the types returned for the above
6186    values.  Some code acts as if it were a sizetype and some as if it were
6187    integer_type_node.  */
6188
6189 void
6190 expand_ptrmemfunc_cst (tree cst, tree *delta, tree *pfn)
6191 {
6192   tree type = TREE_TYPE (cst);
6193   tree fn = PTRMEM_CST_MEMBER (cst);
6194   tree ptr_class, fn_class;
6195
6196   gcc_assert (TREE_CODE (fn) == FUNCTION_DECL);
6197
6198   /* The class that the function belongs to.  */
6199   fn_class = DECL_CONTEXT (fn);
6200
6201   /* The class that we're creating a pointer to member of.  */
6202   ptr_class = TYPE_PTRMEMFUNC_OBJECT_TYPE (type);
6203
6204   /* First, calculate the adjustment to the function's class.  */
6205   *delta = get_delta_difference (fn_class, ptr_class, /*force=*/0,
6206                                  /*c_cast_p=*/0);
6207
6208   if (!DECL_VIRTUAL_P (fn))
6209     *pfn = convert (TYPE_PTRMEMFUNC_FN_TYPE (type), build_addr_func (fn));
6210   else
6211     {
6212       /* If we're dealing with a virtual function, we have to adjust 'this'
6213          again, to point to the base which provides the vtable entry for
6214          fn; the call will do the opposite adjustment.  */
6215       tree orig_class = DECL_CONTEXT (fn);
6216       tree binfo = binfo_or_else (orig_class, fn_class);
6217       *delta = build2 (PLUS_EXPR, TREE_TYPE (*delta),
6218                        *delta, BINFO_OFFSET (binfo));
6219       *delta = fold_if_not_in_template (*delta);
6220
6221       /* We set PFN to the vtable offset at which the function can be
6222          found, plus one (unless ptrmemfunc_vbit_in_delta, in which
6223          case delta is shifted left, and then incremented).  */
6224       *pfn = DECL_VINDEX (fn);
6225       *pfn = build2 (MULT_EXPR, integer_type_node, *pfn,
6226                      TYPE_SIZE_UNIT (vtable_entry_type));
6227       *pfn = fold_if_not_in_template (*pfn);
6228
6229       switch (TARGET_PTRMEMFUNC_VBIT_LOCATION)
6230         {
6231         case ptrmemfunc_vbit_in_pfn:
6232           *pfn = build2 (PLUS_EXPR, integer_type_node, *pfn,
6233                          integer_one_node);
6234           *pfn = fold_if_not_in_template (*pfn);
6235           break;
6236
6237         case ptrmemfunc_vbit_in_delta:
6238           *delta = build2 (LSHIFT_EXPR, TREE_TYPE (*delta),
6239                            *delta, integer_one_node);
6240           *delta = fold_if_not_in_template (*delta);
6241           *delta = build2 (PLUS_EXPR, TREE_TYPE (*delta),
6242                            *delta, integer_one_node);
6243           *delta = fold_if_not_in_template (*delta);
6244           break;
6245
6246         default:
6247           gcc_unreachable ();
6248         }
6249
6250       *pfn = build_nop (TYPE_PTRMEMFUNC_FN_TYPE (type), *pfn);
6251       *pfn = fold_if_not_in_template (*pfn);
6252     }
6253 }
6254
6255 /* Return an expression for PFN from the pointer-to-member function
6256    given by T.  */
6257
6258 static tree
6259 pfn_from_ptrmemfunc (tree t)
6260 {
6261   if (TREE_CODE (t) == PTRMEM_CST)
6262     {
6263       tree delta;
6264       tree pfn;
6265
6266       expand_ptrmemfunc_cst (t, &delta, &pfn);
6267       if (pfn)
6268         return pfn;
6269     }
6270
6271   return build_ptrmemfunc_access_expr (t, pfn_identifier);
6272 }
6273
6274 /* Convert value RHS to type TYPE as preparation for an assignment to
6275    an lvalue of type TYPE.  ERRTYPE is a string to use in error
6276    messages: "assignment", "return", etc.  If FNDECL is non-NULL, we
6277    are doing the conversion in order to pass the PARMNUMth argument of
6278    FNDECL.  */
6279
6280 static tree
6281 convert_for_assignment (tree type, tree rhs,
6282                         const char *errtype, tree fndecl, int parmnum)
6283 {
6284   tree rhstype;
6285   enum tree_code coder;
6286
6287   /* Strip NON_LVALUE_EXPRs since we aren't using as an lvalue.  */
6288   if (TREE_CODE (rhs) == NON_LVALUE_EXPR)
6289     rhs = TREE_OPERAND (rhs, 0);
6290
6291   rhstype = TREE_TYPE (rhs);
6292   coder = TREE_CODE (rhstype);
6293
6294   if (TREE_CODE (type) == VECTOR_TYPE && coder == VECTOR_TYPE
6295       && vector_types_convertible_p (type, rhstype, true))
6296     return convert (type, rhs);
6297
6298   if (rhs == error_mark_node || rhstype == error_mark_node)
6299     return error_mark_node;
6300   if (TREE_CODE (rhs) == TREE_LIST && TREE_VALUE (rhs) == error_mark_node)
6301     return error_mark_node;
6302
6303   /* The RHS of an assignment cannot have void type.  */
6304   if (coder == VOID_TYPE)
6305     {
6306       error ("void value not ignored as it ought to be");
6307       return error_mark_node;
6308     }
6309
6310   /* Simplify the RHS if possible.  */
6311   if (TREE_CODE (rhs) == CONST_DECL)
6312     rhs = DECL_INITIAL (rhs);
6313
6314   if (c_dialect_objc ())
6315     {
6316       int parmno;
6317       tree rname = fndecl;
6318
6319       if (!strcmp (errtype, "assignment"))
6320         parmno = -1;
6321       else if (!strcmp (errtype, "initialization"))
6322         parmno = -2;
6323       else
6324         {
6325           tree selector = objc_message_selector ();
6326
6327           parmno = parmnum;
6328
6329           if (selector && parmno > 1)
6330             {
6331               rname = selector;
6332               parmno -= 1;
6333             }
6334         }
6335
6336       if (objc_compare_types (type, rhstype, parmno, rname))
6337         return convert (type, rhs);
6338     }
6339
6340   /* [expr.ass]
6341
6342      The expression is implicitly converted (clause _conv_) to the
6343      cv-unqualified type of the left operand.
6344
6345      We allow bad conversions here because by the time we get to this point
6346      we are committed to doing the conversion.  If we end up doing a bad
6347      conversion, convert_like will complain.  */
6348   if (!can_convert_arg_bad (type, rhstype, rhs))
6349     {
6350       /* When -Wno-pmf-conversions is use, we just silently allow
6351          conversions from pointers-to-members to plain pointers.  If
6352          the conversion doesn't work, cp_convert will complain.  */
6353       if (!warn_pmf2ptr
6354           && TYPE_PTR_P (type)
6355           && TYPE_PTRMEMFUNC_P (rhstype))
6356         rhs = cp_convert (strip_top_quals (type), rhs);
6357       else
6358         {
6359           /* If the right-hand side has unknown type, then it is an
6360              overloaded function.  Call instantiate_type to get error
6361              messages.  */
6362           if (rhstype == unknown_type_node)
6363             instantiate_type (type, rhs, tf_warning_or_error);
6364           else if (fndecl)
6365             error ("cannot convert %qT to %qT for argument %qP to %qD",
6366                    rhstype, type, parmnum, fndecl);
6367           else
6368             error ("cannot convert %qT to %qT in %s", rhstype, type, errtype);
6369           return error_mark_node;
6370         }
6371     }
6372   if (warn_missing_format_attribute)
6373     {
6374       const enum tree_code codel = TREE_CODE (type);
6375       if ((codel == POINTER_TYPE || codel == REFERENCE_TYPE)
6376           && coder == codel
6377           && check_missing_format_attribute (type, rhstype))
6378         warning (OPT_Wmissing_format_attribute,
6379                  "%s might be a candidate for a format attribute",
6380                  errtype);
6381     }
6382
6383   /* If -Wparentheses, warn about a = b = c when a has type bool and b
6384      does not.  */
6385   if (warn_parentheses
6386       && type == boolean_type_node
6387       && TREE_CODE (rhs) == MODIFY_EXPR
6388       && !TREE_NO_WARNING (rhs)
6389       && TREE_TYPE (rhs) != boolean_type_node)
6390     {
6391       warning (OPT_Wparentheses,
6392                "suggest parentheses around assignment used as truth value");
6393       TREE_NO_WARNING (rhs) = 1;
6394     }
6395
6396   return perform_implicit_conversion (strip_top_quals (type), rhs);
6397 }
6398
6399 /* Convert RHS to be of type TYPE.
6400    If EXP is nonzero, it is the target of the initialization.
6401    ERRTYPE is a string to use in error messages.
6402
6403    Two major differences between the behavior of
6404    `convert_for_assignment' and `convert_for_initialization'
6405    are that references are bashed in the former, while
6406    copied in the latter, and aggregates are assigned in
6407    the former (operator=) while initialized in the
6408    latter (X(X&)).
6409
6410    If using constructor make sure no conversion operator exists, if one does
6411    exist, an ambiguity exists.
6412
6413    If flags doesn't include LOOKUP_COMPLAIN, don't complain about anything.  */
6414
6415 tree
6416 convert_for_initialization (tree exp, tree type, tree rhs, int flags,
6417                             const char *errtype, tree fndecl, int parmnum)
6418 {
6419   enum tree_code codel = TREE_CODE (type);
6420   tree rhstype;
6421   enum tree_code coder;
6422
6423   /* build_c_cast puts on a NOP_EXPR to make the result not an lvalue.
6424      Strip such NOP_EXPRs, since RHS is used in non-lvalue context.  */
6425   if (TREE_CODE (rhs) == NOP_EXPR
6426       && TREE_TYPE (rhs) == TREE_TYPE (TREE_OPERAND (rhs, 0))
6427       && codel != REFERENCE_TYPE)
6428     rhs = TREE_OPERAND (rhs, 0);
6429
6430   if (type == error_mark_node
6431       || rhs == error_mark_node
6432       || (TREE_CODE (rhs) == TREE_LIST && TREE_VALUE (rhs) == error_mark_node))
6433     return error_mark_node;
6434
6435   if ((TREE_CODE (TREE_TYPE (rhs)) == ARRAY_TYPE
6436        && TREE_CODE (type) != ARRAY_TYPE
6437        && (TREE_CODE (type) != REFERENCE_TYPE
6438            || TREE_CODE (TREE_TYPE (type)) != ARRAY_TYPE))
6439       || (TREE_CODE (TREE_TYPE (rhs)) == FUNCTION_TYPE
6440           && (TREE_CODE (type) != REFERENCE_TYPE
6441               || TREE_CODE (TREE_TYPE (type)) != FUNCTION_TYPE))
6442       || TREE_CODE (TREE_TYPE (rhs)) == METHOD_TYPE)
6443     rhs = decay_conversion (rhs);
6444
6445   rhstype = TREE_TYPE (rhs);
6446   coder = TREE_CODE (rhstype);
6447
6448   if (coder == ERROR_MARK)
6449     return error_mark_node;
6450
6451   /* We accept references to incomplete types, so we can
6452      return here before checking if RHS is of complete type.  */
6453
6454   if (codel == REFERENCE_TYPE)
6455     {
6456       /* This should eventually happen in convert_arguments.  */
6457       int savew = 0, savee = 0;
6458
6459       if (fndecl)
6460         savew = warningcount, savee = errorcount;
6461       rhs = initialize_reference (type, rhs, /*decl=*/NULL_TREE,
6462                                   /*cleanup=*/NULL);
6463       if (fndecl)
6464         {
6465           if (warningcount > savew)
6466             warning (0, "in passing argument %P of %q+D", parmnum, fndecl);
6467           else if (errorcount > savee)
6468             error ("in passing argument %P of %q+D", parmnum, fndecl);
6469         }
6470       return rhs;
6471     }
6472
6473   if (exp != 0)
6474     exp = require_complete_type (exp);
6475   if (exp == error_mark_node)
6476     return error_mark_node;
6477
6478   rhstype = non_reference (rhstype);
6479
6480   type = complete_type (type);
6481
6482   if (IS_AGGR_TYPE (type))
6483     return ocp_convert (type, rhs, CONV_IMPLICIT|CONV_FORCE_TEMP, flags);
6484
6485   return convert_for_assignment (type, rhs, errtype, fndecl, parmnum);
6486 }
6487 \f
6488 /* If RETVAL is the address of, or a reference to, a local variable or
6489    temporary give an appropriate warning.  */
6490
6491 static void
6492 maybe_warn_about_returning_address_of_local (tree retval)
6493 {
6494   tree valtype = TREE_TYPE (DECL_RESULT (current_function_decl));
6495   tree whats_returned = retval;
6496
6497   for (;;)
6498     {
6499       if (TREE_CODE (whats_returned) == COMPOUND_EXPR)
6500         whats_returned = TREE_OPERAND (whats_returned, 1);
6501       else if (TREE_CODE (whats_returned) == CONVERT_EXPR
6502                || TREE_CODE (whats_returned) == NON_LVALUE_EXPR
6503                || TREE_CODE (whats_returned) == NOP_EXPR)
6504         whats_returned = TREE_OPERAND (whats_returned, 0);
6505       else
6506         break;
6507     }
6508
6509   if (TREE_CODE (whats_returned) != ADDR_EXPR)
6510     return;
6511   whats_returned = TREE_OPERAND (whats_returned, 0);
6512
6513   if (TREE_CODE (valtype) == REFERENCE_TYPE)
6514     {
6515       if (TREE_CODE (whats_returned) == AGGR_INIT_EXPR
6516           || TREE_CODE (whats_returned) == TARGET_EXPR)
6517         {
6518           warning (0, "returning reference to temporary");
6519           return;
6520         }
6521       if (TREE_CODE (whats_returned) == VAR_DECL
6522           && DECL_NAME (whats_returned)
6523           && TEMP_NAME_P (DECL_NAME (whats_returned)))
6524         {
6525           warning (0, "reference to non-lvalue returned");
6526           return;
6527         }
6528     }
6529
6530   while (TREE_CODE (whats_returned) == COMPONENT_REF
6531          || TREE_CODE (whats_returned) == ARRAY_REF)
6532     whats_returned = TREE_OPERAND (whats_returned, 0);
6533
6534   if (DECL_P (whats_returned)
6535       && DECL_NAME (whats_returned)
6536       && DECL_FUNCTION_SCOPE_P (whats_returned)
6537       && !(TREE_STATIC (whats_returned)
6538            || TREE_PUBLIC (whats_returned)))
6539     {
6540       if (TREE_CODE (valtype) == REFERENCE_TYPE)
6541         warning (0, "reference to local variable %q+D returned",
6542                  whats_returned);
6543       else
6544         warning (0, "address of local variable %q+D returned",
6545                  whats_returned);
6546       return;
6547     }
6548 }
6549
6550 /* Check that returning RETVAL from the current function is valid.
6551    Return an expression explicitly showing all conversions required to
6552    change RETVAL into the function return type, and to assign it to
6553    the DECL_RESULT for the function.  Set *NO_WARNING to true if
6554    code reaches end of non-void function warning shouldn't be issued
6555    on this RETURN_EXPR.  */
6556
6557 tree
6558 check_return_expr (tree retval, bool *no_warning)
6559 {
6560   tree result;
6561   /* The type actually returned by the function, after any
6562      promotions.  */
6563   tree valtype;
6564   int fn_returns_value_p;
6565
6566   *no_warning = false;
6567
6568   /* A `volatile' function is one that isn't supposed to return, ever.
6569      (This is a G++ extension, used to get better code for functions
6570      that call the `volatile' function.)  */
6571   if (TREE_THIS_VOLATILE (current_function_decl))
6572     warning (0, "function declared %<noreturn%> has a %<return%> statement");
6573
6574   /* Check for various simple errors.  */
6575   if (DECL_DESTRUCTOR_P (current_function_decl))
6576     {
6577       if (retval)
6578         error ("returning a value from a destructor");
6579       return NULL_TREE;
6580     }
6581   else if (DECL_CONSTRUCTOR_P (current_function_decl))
6582     {
6583       if (in_function_try_handler)
6584         /* If a return statement appears in a handler of the
6585            function-try-block of a constructor, the program is ill-formed.  */
6586         error ("cannot return from a handler of a function-try-block of a constructor");
6587       else if (retval)
6588         /* You can't return a value from a constructor.  */
6589         error ("returning a value from a constructor");
6590       return NULL_TREE;
6591     }
6592
6593   if (processing_template_decl)
6594     {
6595       current_function_returns_value = 1;
6596       return retval;
6597     }
6598
6599   /* When no explicit return-value is given in a function with a named
6600      return value, the named return value is used.  */
6601   result = DECL_RESULT (current_function_decl);
6602   valtype = TREE_TYPE (result);
6603   gcc_assert (valtype != NULL_TREE);
6604   fn_returns_value_p = !VOID_TYPE_P (valtype);
6605   if (!retval && DECL_NAME (result) && fn_returns_value_p)
6606     retval = result;
6607
6608   /* Check for a return statement with no return value in a function
6609      that's supposed to return a value.  */
6610   if (!retval && fn_returns_value_p)
6611     {
6612       pedwarn ("return-statement with no value, in function returning %qT",
6613                valtype);
6614       /* Clear this, so finish_function won't say that we reach the
6615          end of a non-void function (which we don't, we gave a
6616          return!).  */
6617       current_function_returns_null = 0;
6618       /* And signal caller that TREE_NO_WARNING should be set on the
6619          RETURN_EXPR to avoid control reaches end of non-void function
6620          warnings in tree-cfg.c.  */
6621       *no_warning = true;
6622     }
6623   /* Check for a return statement with a value in a function that
6624      isn't supposed to return a value.  */
6625   else if (retval && !fn_returns_value_p)
6626     {
6627       if (VOID_TYPE_P (TREE_TYPE (retval)))
6628         /* You can return a `void' value from a function of `void'
6629            type.  In that case, we have to evaluate the expression for
6630            its side-effects.  */
6631           finish_expr_stmt (retval);
6632       else
6633         pedwarn ("return-statement with a value, in function "
6634                  "returning 'void'");
6635
6636       current_function_returns_null = 1;
6637
6638       /* There's really no value to return, after all.  */
6639       return NULL_TREE;
6640     }
6641   else if (!retval)
6642     /* Remember that this function can sometimes return without a
6643        value.  */
6644     current_function_returns_null = 1;
6645   else
6646     /* Remember that this function did return a value.  */
6647     current_function_returns_value = 1;
6648
6649   /* Check for erroneous operands -- but after giving ourselves a
6650      chance to provide an error about returning a value from a void
6651      function.  */
6652   if (error_operand_p (retval))
6653     {
6654       current_function_return_value = error_mark_node;
6655       return error_mark_node;
6656     }
6657
6658   /* Only operator new(...) throw(), can return NULL [expr.new/13].  */
6659   if ((DECL_OVERLOADED_OPERATOR_P (current_function_decl) == NEW_EXPR
6660        || DECL_OVERLOADED_OPERATOR_P (current_function_decl) == VEC_NEW_EXPR)
6661       && !TYPE_NOTHROW_P (TREE_TYPE (current_function_decl))
6662       && ! flag_check_new
6663       && null_ptr_cst_p (retval))
6664     warning (0, "%<operator new%> must not return NULL unless it is "
6665              "declared %<throw()%> (or -fcheck-new is in effect)");
6666
6667   /* Effective C++ rule 15.  See also start_function.  */
6668   if (warn_ecpp
6669       && DECL_NAME (current_function_decl) == ansi_assopname(NOP_EXPR))
6670     {
6671       bool warn = true;
6672
6673       /* The function return type must be a reference to the current
6674         class.  */
6675       if (TREE_CODE (valtype) == REFERENCE_TYPE
6676           && same_type_ignoring_top_level_qualifiers_p
6677               (TREE_TYPE (valtype), TREE_TYPE (current_class_ref)))
6678         {
6679           /* Returning '*this' is obviously OK.  */
6680           if (retval == current_class_ref)
6681             warn = false;
6682           /* If we are calling a function whose return type is the same of
6683              the current class reference, it is ok.  */
6684           else if (TREE_CODE (retval) == INDIRECT_REF
6685                    && TREE_CODE (TREE_OPERAND (retval, 0)) == CALL_EXPR)
6686             warn = false;
6687         }
6688
6689       if (warn)
6690         warning (OPT_Weffc__, "%<operator=%> should return a reference to %<*this%>");
6691     }
6692
6693   /* The fabled Named Return Value optimization, as per [class.copy]/15:
6694
6695      [...]      For  a function with a class return type, if the expression
6696      in the return statement is the name of a local  object,  and  the  cv-
6697      unqualified  type  of  the  local  object  is the same as the function
6698      return type, an implementation is permitted to omit creating the  tem-
6699      porary  object  to  hold  the function return value [...]
6700
6701      So, if this is a value-returning function that always returns the same
6702      local variable, remember it.
6703
6704      It might be nice to be more flexible, and choose the first suitable
6705      variable even if the function sometimes returns something else, but
6706      then we run the risk of clobbering the variable we chose if the other
6707      returned expression uses the chosen variable somehow.  And people expect
6708      this restriction, anyway.  (jason 2000-11-19)
6709
6710      See finish_function and finalize_nrv for the rest of this optimization.  */
6711
6712   if (fn_returns_value_p && flag_elide_constructors)
6713     {
6714       if (retval != NULL_TREE
6715           && (current_function_return_value == NULL_TREE
6716               || current_function_return_value == retval)
6717           && TREE_CODE (retval) == VAR_DECL
6718           && DECL_CONTEXT (retval) == current_function_decl
6719           && ! TREE_STATIC (retval)
6720           && (DECL_ALIGN (retval)
6721               >= DECL_ALIGN (DECL_RESULT (current_function_decl)))
6722           && same_type_p ((TYPE_MAIN_VARIANT
6723                            (TREE_TYPE (retval))),
6724                           (TYPE_MAIN_VARIANT
6725                            (TREE_TYPE (TREE_TYPE (current_function_decl))))))
6726         current_function_return_value = retval;
6727       else
6728         current_function_return_value = error_mark_node;
6729     }
6730
6731   /* We don't need to do any conversions when there's nothing being
6732      returned.  */
6733   if (!retval)
6734     return NULL_TREE;
6735
6736   /* Do any required conversions.  */
6737   if (retval == result || DECL_CONSTRUCTOR_P (current_function_decl))
6738     /* No conversions are required.  */
6739     ;
6740   else
6741     {
6742       /* The type the function is declared to return.  */
6743       tree functype = TREE_TYPE (TREE_TYPE (current_function_decl));
6744
6745       /* The functype's return type will have been set to void, if it
6746          was an incomplete type.  Just treat this as 'return;' */
6747       if (VOID_TYPE_P (functype))
6748         return error_mark_node;
6749
6750       /* First convert the value to the function's return type, then
6751          to the type of return value's location to handle the
6752          case that functype is smaller than the valtype.  */
6753       retval = convert_for_initialization
6754         (NULL_TREE, functype, retval, LOOKUP_NORMAL|LOOKUP_ONLYCONVERTING,
6755          "return", NULL_TREE, 0);
6756       retval = convert (valtype, retval);
6757
6758       /* If the conversion failed, treat this just like `return;'.  */
6759       if (retval == error_mark_node)
6760         return retval;
6761       /* We can't initialize a register from a AGGR_INIT_EXPR.  */
6762       else if (! current_function_returns_struct
6763                && TREE_CODE (retval) == TARGET_EXPR
6764                && TREE_CODE (TREE_OPERAND (retval, 1)) == AGGR_INIT_EXPR)
6765         retval = build2 (COMPOUND_EXPR, TREE_TYPE (retval), retval,
6766                          TREE_OPERAND (retval, 0));
6767       else
6768         maybe_warn_about_returning_address_of_local (retval);
6769     }
6770
6771   /* Actually copy the value returned into the appropriate location.  */
6772   if (retval && retval != result)
6773     retval = build2 (INIT_EXPR, TREE_TYPE (result), result, retval);
6774
6775   return retval;
6776 }
6777
6778 \f
6779 /* Returns nonzero if the pointer-type FROM can be converted to the
6780    pointer-type TO via a qualification conversion.  If CONSTP is -1,
6781    then we return nonzero if the pointers are similar, and the
6782    cv-qualification signature of FROM is a proper subset of that of TO.
6783
6784    If CONSTP is positive, then all outer pointers have been
6785    const-qualified.  */
6786
6787 static int
6788 comp_ptr_ttypes_real (tree to, tree from, int constp)
6789 {
6790   bool to_more_cv_qualified = false;
6791
6792   for (; ; to = TREE_TYPE (to), from = TREE_TYPE (from))
6793     {
6794       if (TREE_CODE (to) != TREE_CODE (from))
6795         return 0;
6796
6797       if (TREE_CODE (from) == OFFSET_TYPE
6798           && !same_type_p (TYPE_OFFSET_BASETYPE (from),
6799                            TYPE_OFFSET_BASETYPE (to)))
6800         return 0;
6801
6802       /* Const and volatile mean something different for function types,
6803          so the usual checks are not appropriate.  */
6804       if (TREE_CODE (to) != FUNCTION_TYPE && TREE_CODE (to) != METHOD_TYPE)
6805         {
6806           /* In Objective-C++, some types may have been 'volatilized' by
6807              the compiler for EH; when comparing them here, the volatile
6808              qualification must be ignored.  */
6809           bool objc_quals_match = objc_type_quals_match (to, from);
6810
6811           if (!at_least_as_qualified_p (to, from) && !objc_quals_match)
6812             return 0;
6813
6814           if (!at_least_as_qualified_p (from, to) && !objc_quals_match)
6815             {
6816               if (constp == 0)
6817                 return 0;
6818               to_more_cv_qualified = true;
6819             }
6820
6821           if (constp > 0)
6822             constp &= TYPE_READONLY (to);
6823         }
6824
6825       if (TREE_CODE (to) != POINTER_TYPE && !TYPE_PTRMEM_P (to))
6826         return ((constp >= 0 || to_more_cv_qualified)
6827                 && same_type_ignoring_top_level_qualifiers_p (to, from));
6828     }
6829 }
6830
6831 /* When comparing, say, char ** to char const **, this function takes
6832    the 'char *' and 'char const *'.  Do not pass non-pointer/reference
6833    types to this function.  */
6834
6835 int
6836 comp_ptr_ttypes (tree to, tree from)
6837 {
6838   return comp_ptr_ttypes_real (to, from, 1);
6839 }
6840
6841 /* Returns 1 if to and from are (possibly multi-level) pointers to the same
6842    type or inheritance-related types, regardless of cv-quals.  */
6843
6844 int
6845 ptr_reasonably_similar (tree to, tree from)
6846 {
6847   for (; ; to = TREE_TYPE (to), from = TREE_TYPE (from))
6848     {
6849       /* Any target type is similar enough to void.  */
6850       if (TREE_CODE (to) == VOID_TYPE
6851           || TREE_CODE (from) == VOID_TYPE)
6852         return 1;
6853
6854       if (TREE_CODE (to) != TREE_CODE (from))
6855         return 0;
6856
6857       if (TREE_CODE (from) == OFFSET_TYPE
6858           && comptypes (TYPE_OFFSET_BASETYPE (to),
6859                         TYPE_OFFSET_BASETYPE (from),
6860                         COMPARE_BASE | COMPARE_DERIVED))
6861         continue;
6862
6863       if (TREE_CODE (to) == VECTOR_TYPE
6864           && vector_types_convertible_p (to, from, false))
6865         return 1;
6866
6867       if (TREE_CODE (to) == INTEGER_TYPE
6868           && TYPE_PRECISION (to) == TYPE_PRECISION (from))
6869         return 1;
6870
6871       if (TREE_CODE (to) == FUNCTION_TYPE)
6872         return 1;
6873
6874       if (TREE_CODE (to) != POINTER_TYPE)
6875         return comptypes
6876           (TYPE_MAIN_VARIANT (to), TYPE_MAIN_VARIANT (from),
6877            COMPARE_BASE | COMPARE_DERIVED);
6878     }
6879 }
6880
6881 /* Return true if TO and FROM (both of which are POINTER_TYPEs or
6882    pointer-to-member types) are the same, ignoring cv-qualification at
6883    all levels.  */
6884
6885 bool
6886 comp_ptr_ttypes_const (tree to, tree from)
6887 {
6888   for (; ; to = TREE_TYPE (to), from = TREE_TYPE (from))
6889     {
6890       if (TREE_CODE (to) != TREE_CODE (from))
6891         return false;
6892
6893       if (TREE_CODE (from) == OFFSET_TYPE
6894           && same_type_p (TYPE_OFFSET_BASETYPE (from),
6895                           TYPE_OFFSET_BASETYPE (to)))
6896           continue;
6897
6898       if (TREE_CODE (to) != POINTER_TYPE)
6899         return same_type_ignoring_top_level_qualifiers_p (to, from);
6900     }
6901 }
6902
6903 /* Returns the type qualifiers for this type, including the qualifiers on the
6904    elements for an array type.  */
6905
6906 int
6907 cp_type_quals (tree type)
6908 {
6909   type = strip_array_types (type);
6910   if (type == error_mark_node)
6911     return TYPE_UNQUALIFIED;
6912   return TYPE_QUALS (type);
6913 }
6914
6915 /* Returns nonzero if the TYPE contains a mutable member.  */
6916
6917 bool
6918 cp_has_mutable_p (tree type)
6919 {
6920   type = strip_array_types (type);
6921
6922   return CLASS_TYPE_P (type) && CLASSTYPE_HAS_MUTABLE (type);
6923 }
6924
6925 /* Apply the TYPE_QUALS to the new DECL.  */
6926 void
6927 cp_apply_type_quals_to_decl (int type_quals, tree decl)
6928 {
6929   tree type = TREE_TYPE (decl);
6930
6931   if (type == error_mark_node)
6932     return;
6933
6934   if (TREE_CODE (type) == FUNCTION_TYPE
6935       && type_quals != TYPE_UNQUALIFIED)
6936     {
6937       /* This was an error in C++98 (cv-qualifiers cannot be added to
6938          a function type), but DR 295 makes the code well-formed by
6939          dropping the extra qualifiers. */
6940       if (pedantic)
6941         {
6942           tree bad_type = build_qualified_type (type, type_quals);
6943           pedwarn ("ignoring %qV qualifiers added to function type %qT",
6944                    bad_type, type);
6945         }
6946
6947       TREE_TYPE (decl) = TYPE_MAIN_VARIANT (type);
6948       return;
6949     }
6950
6951   /* Avoid setting TREE_READONLY incorrectly.  */
6952   if (/* If the object has a constructor, the constructor may modify
6953          the object.  */
6954       TYPE_NEEDS_CONSTRUCTING (type)
6955       /* If the type isn't complete, we don't know yet if it will need
6956          constructing.  */
6957       || !COMPLETE_TYPE_P (type)
6958       /* If the type has a mutable component, that component might be
6959          modified.  */
6960       || TYPE_HAS_MUTABLE_P (type))
6961     type_quals &= ~TYPE_QUAL_CONST;
6962
6963   c_apply_type_quals_to_decl (type_quals, decl);
6964 }
6965
6966 /* Subroutine of casts_away_constness.  Make T1 and T2 point at
6967    exemplar types such that casting T1 to T2 is casting away constness
6968    if and only if there is no implicit conversion from T1 to T2.  */
6969
6970 static void
6971 casts_away_constness_r (tree *t1, tree *t2)
6972 {
6973   int quals1;
6974   int quals2;
6975
6976   /* [expr.const.cast]
6977
6978      For multi-level pointer to members and multi-level mixed pointers
6979      and pointers to members (conv.qual), the "member" aspect of a
6980      pointer to member level is ignored when determining if a const
6981      cv-qualifier has been cast away.  */
6982   /* [expr.const.cast]
6983
6984      For  two  pointer types:
6985
6986             X1 is T1cv1,1 * ... cv1,N *   where T1 is not a pointer type
6987             X2 is T2cv2,1 * ... cv2,M *   where T2 is not a pointer type
6988             K is min(N,M)
6989
6990      casting from X1 to X2 casts away constness if, for a non-pointer
6991      type T there does not exist an implicit conversion (clause
6992      _conv_) from:
6993
6994             Tcv1,(N-K+1) * cv1,(N-K+2) * ... cv1,N *
6995
6996      to
6997
6998             Tcv2,(M-K+1) * cv2,(M-K+2) * ... cv2,M *.  */
6999   if ((!TYPE_PTR_P (*t1) && !TYPE_PTRMEM_P (*t1))
7000       || (!TYPE_PTR_P (*t2) && !TYPE_PTRMEM_P (*t2)))
7001     {
7002       *t1 = cp_build_qualified_type (void_type_node,
7003                                      cp_type_quals (*t1));
7004       *t2 = cp_build_qualified_type (void_type_node,
7005                                      cp_type_quals (*t2));
7006       return;
7007     }
7008
7009   quals1 = cp_type_quals (*t1);
7010   quals2 = cp_type_quals (*t2);
7011
7012   if (TYPE_PTRMEM_P (*t1))
7013     *t1 = TYPE_PTRMEM_POINTED_TO_TYPE (*t1);
7014   else
7015     *t1 = TREE_TYPE (*t1);
7016   if (TYPE_PTRMEM_P (*t2))
7017     *t2 = TYPE_PTRMEM_POINTED_TO_TYPE (*t2);
7018   else
7019     *t2 = TREE_TYPE (*t2);
7020
7021   casts_away_constness_r (t1, t2);
7022   *t1 = build_pointer_type (*t1);
7023   *t2 = build_pointer_type (*t2);
7024   *t1 = cp_build_qualified_type (*t1, quals1);
7025   *t2 = cp_build_qualified_type (*t2, quals2);
7026 }
7027
7028 /* Returns nonzero if casting from TYPE1 to TYPE2 casts away
7029    constness.  */
7030
7031 static bool
7032 casts_away_constness (tree t1, tree t2)
7033 {
7034   if (TREE_CODE (t2) == REFERENCE_TYPE)
7035     {
7036       /* [expr.const.cast]
7037
7038          Casting from an lvalue of type T1 to an lvalue of type T2
7039          using a reference cast casts away constness if a cast from an
7040          rvalue of type "pointer to T1" to the type "pointer to T2"
7041          casts away constness.  */
7042       t1 = (TREE_CODE (t1) == REFERENCE_TYPE ? TREE_TYPE (t1) : t1);
7043       return casts_away_constness (build_pointer_type (t1),
7044                                    build_pointer_type (TREE_TYPE (t2)));
7045     }
7046
7047   if (TYPE_PTRMEM_P (t1) && TYPE_PTRMEM_P (t2))
7048     /* [expr.const.cast]
7049
7050        Casting from an rvalue of type "pointer to data member of X
7051        of type T1" to the type "pointer to data member of Y of type
7052        T2" casts away constness if a cast from an rvalue of type
7053        "pointer to T1" to the type "pointer to T2" casts away
7054        constness.  */
7055     return casts_away_constness
7056       (build_pointer_type (TYPE_PTRMEM_POINTED_TO_TYPE (t1)),
7057        build_pointer_type (TYPE_PTRMEM_POINTED_TO_TYPE (t2)));
7058
7059   /* Casting away constness is only something that makes sense for
7060      pointer or reference types.  */
7061   if (TREE_CODE (t1) != POINTER_TYPE
7062       || TREE_CODE (t2) != POINTER_TYPE)
7063     return false;
7064
7065   /* Top-level qualifiers don't matter.  */
7066   t1 = TYPE_MAIN_VARIANT (t1);
7067   t2 = TYPE_MAIN_VARIANT (t2);
7068   casts_away_constness_r (&t1, &t2);
7069   if (!can_convert (t2, t1))
7070     return true;
7071
7072   return false;
7073 }
7074
7075 /* If T is a REFERENCE_TYPE return the type to which T refers.
7076    Otherwise, return T itself.  */
7077
7078 tree
7079 non_reference (tree t)
7080 {
7081   if (TREE_CODE (t) == REFERENCE_TYPE)
7082     t = TREE_TYPE (t);
7083   return t;
7084 }
7085
7086
7087 /* Return nonzero if REF is an lvalue valid for this language;
7088    otherwise, print an error message and return zero.  USE says
7089    how the lvalue is being used and so selects the error message.  */
7090
7091 int
7092 lvalue_or_else (tree ref, enum lvalue_use use)
7093 {
7094   int win = lvalue_p (ref);
7095
7096   if (!win)
7097     lvalue_error (use);
7098
7099   return win;
7100 }