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