OSDN Git Service

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