OSDN Git Service

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