re PR c++/43108 (mixed complex<T> multiplication horribly inefficient)
[platform/upstream/gcc.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 ("too many arguments to %s %q+#D", 
3308                          called_thing, fndecl);
3309                   error ("at this point in file");
3310                 }
3311               else
3312                 error ("too many arguments to function");
3313               return i;
3314             }
3315           else
3316             return -1;
3317         }
3318
3319       /* build_c_cast puts on a NOP_EXPR to make the result not an lvalue.
3320          Strip such NOP_EXPRs, since VAL is used in non-lvalue context.  */
3321       if (TREE_CODE (val) == NOP_EXPR
3322           && TREE_TYPE (val) == TREE_TYPE (TREE_OPERAND (val, 0))
3323           && (type == 0 || TREE_CODE (type) != REFERENCE_TYPE))
3324         val = TREE_OPERAND (val, 0);
3325
3326       if (type == 0 || TREE_CODE (type) != REFERENCE_TYPE)
3327         {
3328           if (TREE_CODE (TREE_TYPE (val)) == ARRAY_TYPE
3329               || TREE_CODE (TREE_TYPE (val)) == FUNCTION_TYPE
3330               || TREE_CODE (TREE_TYPE (val)) == METHOD_TYPE)
3331             val = decay_conversion (val);
3332         }
3333
3334       if (val == error_mark_node)
3335         return -1;
3336
3337       if (type != 0)
3338         {
3339           /* Formal parm type is specified by a function prototype.  */
3340           tree parmval;
3341
3342           if (!COMPLETE_TYPE_P (complete_type (type)))
3343             {
3344               if (complain & tf_error)
3345                 {
3346                   if (fndecl)
3347                     error ("parameter %P of %qD has incomplete type %qT",
3348                            i, fndecl, type);
3349                   else
3350                     error ("parameter %P has incomplete type %qT", i, type);
3351                 }
3352               parmval = error_mark_node;
3353             }
3354           else
3355             {
3356               parmval = convert_for_initialization
3357                 (NULL_TREE, type, val, flags,
3358                  "argument passing", fndecl, i, complain);
3359               parmval = convert_for_arg_passing (type, parmval);
3360             }
3361
3362           if (parmval == error_mark_node)
3363             return -1;
3364
3365           VEC_replace (tree, *values, i, parmval);
3366         }
3367       else
3368         {
3369           if (fndecl && DECL_BUILT_IN (fndecl)
3370               && DECL_FUNCTION_CODE (fndecl) == BUILT_IN_CONSTANT_P)
3371             /* Don't do ellipsis conversion for __built_in_constant_p
3372                as this will result in spurious errors for non-trivial
3373                types.  */
3374             val = require_complete_type (val);
3375           else
3376             val = convert_arg_to_ellipsis (val);
3377
3378           VEC_replace (tree, *values, i, val);
3379         }
3380
3381       if (typetail)
3382         typetail = TREE_CHAIN (typetail);
3383     }
3384
3385   if (typetail != 0 && typetail != void_list_node)
3386     {
3387       /* See if there are default arguments that can be used.  Because
3388          we hold default arguments in the FUNCTION_TYPE (which is so
3389          wrong), we can see default parameters here from deduced
3390          contexts (and via typeof) for indirect function calls.
3391          Fortunately we know whether we have a function decl to
3392          provide default arguments in a language conformant
3393          manner.  */
3394       if (fndecl && TREE_PURPOSE (typetail)
3395           && TREE_CODE (TREE_PURPOSE (typetail)) != DEFAULT_ARG)
3396         {
3397           for (; typetail != void_list_node; ++i)
3398             {
3399               tree parmval
3400                 = convert_default_arg (TREE_VALUE (typetail),
3401                                        TREE_PURPOSE (typetail),
3402                                        fndecl, i);
3403
3404               if (parmval == error_mark_node)
3405                 return -1;
3406
3407               VEC_safe_push (tree, gc, *values, parmval);
3408               typetail = TREE_CHAIN (typetail);
3409               /* ends with `...'.  */
3410               if (typetail == NULL_TREE)
3411                 break;
3412             }
3413         }
3414       else
3415         {
3416           if (complain & tf_error)
3417             {
3418               if (fndecl)
3419                 {
3420                   error ("too few arguments to %s %q+#D", 
3421                          called_thing, fndecl);
3422                   error ("at this point in file");
3423                 }
3424               else
3425                 error ("too few arguments to function");
3426             }
3427           return -1;
3428         }
3429     }
3430
3431   return (int) i;
3432 }
3433 \f
3434 /* Build a binary-operation expression, after performing default
3435    conversions on the operands.  CODE is the kind of expression to
3436    build.  ARG1 and ARG2 are the arguments.  ARG1_CODE and ARG2_CODE
3437    are the tree codes which correspond to ARG1 and ARG2 when issuing
3438    warnings about possibly misplaced parentheses.  They may differ
3439    from the TREE_CODE of ARG1 and ARG2 if the parser has done constant
3440    folding (e.g., if the parser sees "a | 1 + 1", it may call this
3441    routine with ARG2 being an INTEGER_CST and ARG2_CODE == PLUS_EXPR).
3442    To avoid issuing any parentheses warnings, pass ARG1_CODE and/or
3443    ARG2_CODE as ERROR_MARK.  */
3444
3445 tree
3446 build_x_binary_op (enum tree_code code, tree arg1, enum tree_code arg1_code,
3447                    tree arg2, enum tree_code arg2_code, bool *overloaded_p,
3448                    tsubst_flags_t complain)
3449 {
3450   tree orig_arg1;
3451   tree orig_arg2;
3452   tree expr;
3453
3454   orig_arg1 = arg1;
3455   orig_arg2 = arg2;
3456
3457   if (processing_template_decl)
3458     {
3459       if (type_dependent_expression_p (arg1)
3460           || type_dependent_expression_p (arg2))
3461         return build_min_nt (code, arg1, arg2);
3462       arg1 = build_non_dependent_expr (arg1);
3463       arg2 = build_non_dependent_expr (arg2);
3464     }
3465
3466   if (code == DOTSTAR_EXPR)
3467     expr = build_m_component_ref (arg1, arg2);
3468   else
3469     expr = build_new_op (code, LOOKUP_NORMAL, arg1, arg2, NULL_TREE,
3470                          overloaded_p, complain);
3471
3472   /* Check for cases such as x+y<<z which users are likely to
3473      misinterpret.  But don't warn about obj << x + y, since that is a
3474      common idiom for I/O.  */
3475   if (warn_parentheses
3476       && (complain & tf_warning)
3477       && !processing_template_decl
3478       && !error_operand_p (arg1)
3479       && !error_operand_p (arg2)
3480       && (code != LSHIFT_EXPR
3481           || !CLASS_TYPE_P (TREE_TYPE (arg1))))
3482     warn_about_parentheses (code, arg1_code, orig_arg1, arg2_code, orig_arg2);
3483
3484   if (processing_template_decl && expr != error_mark_node)
3485     return build_min_non_dep (code, expr, orig_arg1, orig_arg2);
3486
3487   return expr;
3488 }
3489
3490 /* Build and return an ARRAY_REF expression.  */
3491
3492 tree
3493 build_x_array_ref (tree arg1, tree arg2, tsubst_flags_t complain)
3494 {
3495   tree orig_arg1 = arg1;
3496   tree orig_arg2 = arg2;
3497   tree expr;
3498
3499   if (processing_template_decl)
3500     {
3501       if (type_dependent_expression_p (arg1)
3502           || type_dependent_expression_p (arg2))
3503         return build_min_nt (ARRAY_REF, arg1, arg2,
3504                              NULL_TREE, NULL_TREE);
3505       arg1 = build_non_dependent_expr (arg1);
3506       arg2 = build_non_dependent_expr (arg2);
3507     }
3508
3509   expr = build_new_op (ARRAY_REF, LOOKUP_NORMAL, arg1, arg2, NULL_TREE,
3510                        /*overloaded_p=*/NULL, complain);
3511
3512   if (processing_template_decl && expr != error_mark_node)
3513     return build_min_non_dep (ARRAY_REF, expr, orig_arg1, orig_arg2,
3514                               NULL_TREE, NULL_TREE);
3515   return expr;
3516 }
3517
3518 /* For the c-common bits.  */
3519 tree
3520 build_binary_op (location_t location, enum tree_code code, tree op0, tree op1,
3521                  int convert_p ATTRIBUTE_UNUSED)
3522 {
3523   return cp_build_binary_op (location, code, op0, op1, tf_warning_or_error);
3524 }
3525
3526
3527 /* Build a binary-operation expression without default conversions.
3528    CODE is the kind of expression to build.
3529    LOCATION is the location_t of the operator in the source code.
3530    This function differs from `build' in several ways:
3531    the data type of the result is computed and recorded in it,
3532    warnings are generated if arg data types are invalid,
3533    special handling for addition and subtraction of pointers is known,
3534    and some optimization is done (operations on narrow ints
3535    are done in the narrower type when that gives the same result).
3536    Constant folding is also done before the result is returned.
3537
3538    Note that the operands will never have enumeral types
3539    because either they have just had the default conversions performed
3540    or they have both just been converted to some other type in which
3541    the arithmetic is to be done.
3542
3543    C++: must do special pointer arithmetic when implementing
3544    multiple inheritance, and deal with pointer to member functions.  */
3545
3546 tree
3547 cp_build_binary_op (location_t location,
3548                     enum tree_code code, tree orig_op0, tree orig_op1,
3549                     tsubst_flags_t complain)
3550 {
3551   tree op0, op1;
3552   enum tree_code code0, code1;
3553   tree type0, type1;
3554   const char *invalid_op_diag;
3555
3556   /* Expression code to give to the expression when it is built.
3557      Normally this is CODE, which is what the caller asked for,
3558      but in some special cases we change it.  */
3559   enum tree_code resultcode = code;
3560
3561   /* Data type in which the computation is to be performed.
3562      In the simplest cases this is the common type of the arguments.  */
3563   tree result_type = NULL;
3564
3565   /* Nonzero means operands have already been type-converted
3566      in whatever way is necessary.
3567      Zero means they need to be converted to RESULT_TYPE.  */
3568   int converted = 0;
3569
3570   /* Nonzero means create the expression with this type, rather than
3571      RESULT_TYPE.  */
3572   tree build_type = 0;
3573
3574   /* Nonzero means after finally constructing the expression
3575      convert it to this type.  */
3576   tree final_type = 0;
3577
3578   tree result;
3579
3580   /* Nonzero if this is an operation like MIN or MAX which can
3581      safely be computed in short if both args are promoted shorts.
3582      Also implies COMMON.
3583      -1 indicates a bitwise operation; this makes a difference
3584      in the exact conditions for when it is safe to do the operation
3585      in a narrower mode.  */
3586   int shorten = 0;
3587
3588   /* Nonzero if this is a comparison operation;
3589      if both args are promoted shorts, compare the original shorts.
3590      Also implies COMMON.  */
3591   int short_compare = 0;
3592
3593   /* Nonzero means set RESULT_TYPE to the common type of the args.  */
3594   int common = 0;
3595
3596   /* True if both operands have arithmetic type.  */
3597   bool arithmetic_types_p;
3598
3599   /* Apply default conversions.  */
3600   op0 = orig_op0;
3601   op1 = orig_op1;
3602
3603   if (code == TRUTH_AND_EXPR || code == TRUTH_ANDIF_EXPR
3604       || code == TRUTH_OR_EXPR || code == TRUTH_ORIF_EXPR
3605       || code == TRUTH_XOR_EXPR)
3606     {
3607       if (!really_overloaded_fn (op0))
3608         op0 = decay_conversion (op0);
3609       if (!really_overloaded_fn (op1))
3610         op1 = decay_conversion (op1);
3611     }
3612   else
3613     {
3614       if (!really_overloaded_fn (op0))
3615         op0 = default_conversion (op0);
3616       if (!really_overloaded_fn (op1))
3617         op1 = default_conversion (op1);
3618     }
3619
3620   /* Strip NON_LVALUE_EXPRs, etc., since we aren't using as an lvalue.  */
3621   STRIP_TYPE_NOPS (op0);
3622   STRIP_TYPE_NOPS (op1);
3623
3624   /* DTRT if one side is an overloaded function, but complain about it.  */
3625   if (type_unknown_p (op0))
3626     {
3627       tree t = instantiate_type (TREE_TYPE (op1), op0, tf_none);
3628       if (t != error_mark_node)
3629         {
3630           if (complain & tf_error)
3631             permerror (input_location, "assuming cast to type %qT from overloaded function",
3632                        TREE_TYPE (t));
3633           op0 = t;
3634         }
3635     }
3636   if (type_unknown_p (op1))
3637     {
3638       tree t = instantiate_type (TREE_TYPE (op0), op1, tf_none);
3639       if (t != error_mark_node)
3640         {
3641           if (complain & tf_error)
3642             permerror (input_location, "assuming cast to type %qT from overloaded function",
3643                        TREE_TYPE (t));
3644           op1 = t;
3645         }
3646     }
3647
3648   type0 = TREE_TYPE (op0);
3649   type1 = TREE_TYPE (op1);
3650
3651   /* The expression codes of the data types of the arguments tell us
3652      whether the arguments are integers, floating, pointers, etc.  */
3653   code0 = TREE_CODE (type0);
3654   code1 = TREE_CODE (type1);
3655
3656   /* If an error was already reported for one of the arguments,
3657      avoid reporting another error.  */
3658   if (code0 == ERROR_MARK || code1 == ERROR_MARK)
3659     return error_mark_node;
3660
3661   if ((invalid_op_diag
3662        = targetm.invalid_binary_op (code, type0, type1)))
3663     {
3664       error (invalid_op_diag);
3665       return error_mark_node;
3666     }
3667
3668   /* Issue warnings about peculiar, but valid, uses of NULL.  */
3669   if ((orig_op0 == null_node || orig_op1 == null_node)
3670       /* It's reasonable to use pointer values as operands of &&
3671          and ||, so NULL is no exception.  */
3672       && code != TRUTH_ANDIF_EXPR && code != TRUTH_ORIF_EXPR 
3673       && ( /* Both are NULL (or 0) and the operation was not a
3674               comparison or a pointer subtraction.  */
3675           (null_ptr_cst_p (orig_op0) && null_ptr_cst_p (orig_op1) 
3676            && code != EQ_EXPR && code != NE_EXPR && code != MINUS_EXPR) 
3677           /* Or if one of OP0 or OP1 is neither a pointer nor NULL.  */
3678           || (!null_ptr_cst_p (orig_op0)
3679               && !TYPE_PTR_P (type0) && !TYPE_PTR_TO_MEMBER_P (type0))
3680           || (!null_ptr_cst_p (orig_op1) 
3681               && !TYPE_PTR_P (type1) && !TYPE_PTR_TO_MEMBER_P (type1)))
3682       && (complain & tf_warning))
3683     /* Some sort of arithmetic operation involving NULL was
3684        performed.  */
3685     warning (OPT_Wpointer_arith, "NULL used in arithmetic");
3686
3687   switch (code)
3688     {
3689     case MINUS_EXPR:
3690       /* Subtraction of two similar pointers.
3691          We must subtract them as integers, then divide by object size.  */
3692       if (code0 == POINTER_TYPE && code1 == POINTER_TYPE
3693           && same_type_ignoring_top_level_qualifiers_p (TREE_TYPE (type0),
3694                                                         TREE_TYPE (type1)))
3695         return pointer_diff (op0, op1, common_pointer_type (type0, type1));
3696       /* In all other cases except pointer - int, the usual arithmetic
3697          rules apply.  */
3698       else if (!(code0 == POINTER_TYPE && code1 == INTEGER_TYPE))
3699         {
3700           common = 1;
3701           break;
3702         }
3703       /* The pointer - int case is just like pointer + int; fall
3704          through.  */
3705     case PLUS_EXPR:
3706       if ((code0 == POINTER_TYPE || code1 == POINTER_TYPE)
3707           && (code0 == INTEGER_TYPE || code1 == INTEGER_TYPE))
3708         {
3709           tree ptr_operand;
3710           tree int_operand;
3711           ptr_operand = ((code0 == POINTER_TYPE) ? op0 : op1);
3712           int_operand = ((code0 == INTEGER_TYPE) ? op0 : op1);
3713           if (processing_template_decl)
3714             {
3715               result_type = TREE_TYPE (ptr_operand);
3716               break;
3717             }
3718           return cp_pointer_int_sum (code,
3719                                      ptr_operand, 
3720                                      int_operand);
3721         }
3722       common = 1;
3723       break;
3724
3725     case MULT_EXPR:
3726       common = 1;
3727       break;
3728
3729     case TRUNC_DIV_EXPR:
3730     case CEIL_DIV_EXPR:
3731     case FLOOR_DIV_EXPR:
3732     case ROUND_DIV_EXPR:
3733     case EXACT_DIV_EXPR:
3734       if ((code0 == INTEGER_TYPE || code0 == REAL_TYPE
3735            || code0 == COMPLEX_TYPE || code0 == VECTOR_TYPE)
3736           && (code1 == INTEGER_TYPE || code1 == REAL_TYPE
3737               || code1 == COMPLEX_TYPE || code1 == VECTOR_TYPE))
3738         {
3739           enum tree_code tcode0 = code0, tcode1 = code1;
3740
3741           warn_for_div_by_zero (location, op1);
3742
3743           if (tcode0 == COMPLEX_TYPE || tcode0 == VECTOR_TYPE)
3744             tcode0 = TREE_CODE (TREE_TYPE (TREE_TYPE (op0)));
3745           if (tcode1 == COMPLEX_TYPE || tcode1 == VECTOR_TYPE)
3746             tcode1 = TREE_CODE (TREE_TYPE (TREE_TYPE (op1)));
3747
3748           if (!(tcode0 == INTEGER_TYPE && tcode1 == INTEGER_TYPE))
3749             resultcode = RDIV_EXPR;
3750           else
3751             /* When dividing two signed integers, we have to promote to int.
3752                unless we divide by a constant != -1.  Note that default
3753                conversion will have been performed on the operands at this
3754                point, so we have to dig out the original type to find out if
3755                it was unsigned.  */
3756             shorten = ((TREE_CODE (op0) == NOP_EXPR
3757                         && TYPE_UNSIGNED (TREE_TYPE (TREE_OPERAND (op0, 0))))
3758                        || (TREE_CODE (op1) == INTEGER_CST
3759                            && ! integer_all_onesp (op1)));
3760
3761           common = 1;
3762         }
3763       break;
3764
3765     case BIT_AND_EXPR:
3766     case BIT_IOR_EXPR:
3767     case BIT_XOR_EXPR:
3768       if ((code0 == INTEGER_TYPE && code1 == INTEGER_TYPE)
3769           || (code0 == VECTOR_TYPE && code1 == VECTOR_TYPE
3770               && !VECTOR_FLOAT_TYPE_P (type0)
3771               && !VECTOR_FLOAT_TYPE_P (type1)))
3772         shorten = -1;
3773       break;
3774
3775     case TRUNC_MOD_EXPR:
3776     case FLOOR_MOD_EXPR:
3777       warn_for_div_by_zero (location, op1);
3778
3779       if (code0 == VECTOR_TYPE && code1 == VECTOR_TYPE
3780           && TREE_CODE (TREE_TYPE (type0)) == INTEGER_TYPE
3781           && TREE_CODE (TREE_TYPE (type1)) == INTEGER_TYPE)
3782         common = 1;
3783       else if (code0 == INTEGER_TYPE && code1 == INTEGER_TYPE)
3784         {
3785           /* Although it would be tempting to shorten always here, that loses
3786              on some targets, since the modulo instruction is undefined if the
3787              quotient can't be represented in the computation mode.  We shorten
3788              only if unsigned or if dividing by something we know != -1.  */
3789           shorten = ((TREE_CODE (op0) == NOP_EXPR
3790                       && TYPE_UNSIGNED (TREE_TYPE (TREE_OPERAND (op0, 0))))
3791                      || (TREE_CODE (op1) == INTEGER_CST
3792                          && ! integer_all_onesp (op1)));
3793           common = 1;
3794         }
3795       break;
3796
3797     case TRUTH_ANDIF_EXPR:
3798     case TRUTH_ORIF_EXPR:
3799     case TRUTH_AND_EXPR:
3800     case TRUTH_OR_EXPR:
3801       result_type = boolean_type_node;
3802       break;
3803
3804       /* Shift operations: result has same type as first operand;
3805          always convert second operand to int.
3806          Also set SHORT_SHIFT if shifting rightward.  */
3807
3808     case RSHIFT_EXPR:
3809       if (code0 == INTEGER_TYPE && code1 == INTEGER_TYPE)
3810         {
3811           result_type = type0;
3812           if (TREE_CODE (op1) == INTEGER_CST)
3813             {
3814               if (tree_int_cst_lt (op1, integer_zero_node))
3815                 {
3816                   if ((complain & tf_warning)
3817                       && c_inhibit_evaluation_warnings == 0)
3818                     warning (0, "right shift count is negative");
3819                 }
3820               else
3821                 {
3822                   if (compare_tree_int (op1, TYPE_PRECISION (type0)) >= 0
3823                       && (complain & tf_warning)
3824                       && c_inhibit_evaluation_warnings == 0)
3825                     warning (0, "right shift count >= width of type");
3826                 }
3827             }
3828           /* Convert the shift-count to an integer, regardless of
3829              size of value being shifted.  */
3830           if (TYPE_MAIN_VARIANT (TREE_TYPE (op1)) != integer_type_node)
3831             op1 = cp_convert (integer_type_node, op1);
3832           /* Avoid converting op1 to result_type later.  */
3833           converted = 1;
3834         }
3835       break;
3836
3837     case LSHIFT_EXPR:
3838       if (code0 == INTEGER_TYPE && code1 == INTEGER_TYPE)
3839         {
3840           result_type = type0;
3841           if (TREE_CODE (op1) == INTEGER_CST)
3842             {
3843               if (tree_int_cst_lt (op1, integer_zero_node))
3844                 {
3845                   if ((complain & tf_warning)
3846                       && c_inhibit_evaluation_warnings == 0)
3847                     warning (0, "left shift count is negative");
3848                 }
3849               else if (compare_tree_int (op1, TYPE_PRECISION (type0)) >= 0)
3850                 {
3851                   if ((complain & tf_warning)
3852                       && c_inhibit_evaluation_warnings == 0)
3853                     warning (0, "left shift count >= width of type");
3854                 }
3855             }
3856           /* Convert the shift-count to an integer, regardless of
3857              size of value being shifted.  */
3858           if (TYPE_MAIN_VARIANT (TREE_TYPE (op1)) != integer_type_node)
3859             op1 = cp_convert (integer_type_node, op1);
3860           /* Avoid converting op1 to result_type later.  */
3861           converted = 1;
3862         }
3863       break;
3864
3865     case RROTATE_EXPR:
3866     case LROTATE_EXPR:
3867       if (code0 == INTEGER_TYPE && code1 == INTEGER_TYPE)
3868         {
3869           result_type = type0;
3870           if (TREE_CODE (op1) == INTEGER_CST)
3871             {
3872               if (tree_int_cst_lt (op1, integer_zero_node))
3873                 {
3874                   if (complain & tf_warning)
3875                     warning (0, (code == LROTATE_EXPR)
3876                                   ? G_("left rotate count is negative")
3877                                   : G_("right rotate count is negative"));
3878                 }
3879               else if (compare_tree_int (op1, TYPE_PRECISION (type0)) >= 0)
3880                 {
3881                   if (complain & tf_warning)
3882                     warning (0, (code == LROTATE_EXPR) 
3883                                   ? G_("left rotate count >= width of type")
3884                                   : G_("right rotate count >= width of type"));
3885                 }
3886             }
3887           /* Convert the shift-count to an integer, regardless of
3888              size of value being shifted.  */
3889           if (TYPE_MAIN_VARIANT (TREE_TYPE (op1)) != integer_type_node)
3890             op1 = cp_convert (integer_type_node, op1);
3891         }
3892       break;
3893
3894     case EQ_EXPR:
3895     case NE_EXPR:
3896       if ((complain & tf_warning)
3897           && (FLOAT_TYPE_P (type0) || FLOAT_TYPE_P (type1)))
3898         warning (OPT_Wfloat_equal,
3899                  "comparing floating point with == or != is unsafe");
3900       if ((complain & tf_warning)
3901           && ((TREE_CODE (orig_op0) == STRING_CST && !integer_zerop (op1))
3902               || (TREE_CODE (orig_op1) == STRING_CST && !integer_zerop (op0))))
3903         warning (OPT_Waddress, "comparison with string literal results in unspecified behaviour");
3904
3905       build_type = boolean_type_node;
3906       if ((code0 == INTEGER_TYPE || code0 == REAL_TYPE
3907            || code0 == COMPLEX_TYPE || code0 == ENUMERAL_TYPE)
3908           && (code1 == INTEGER_TYPE || code1 == REAL_TYPE
3909               || code1 == COMPLEX_TYPE || code1 == ENUMERAL_TYPE))
3910         short_compare = 1;
3911       else if ((code0 == POINTER_TYPE && code1 == POINTER_TYPE)
3912                || (TYPE_PTRMEM_P (type0) && TYPE_PTRMEM_P (type1)))
3913         result_type = composite_pointer_type (type0, type1, op0, op1,
3914                                               CPO_COMPARISON, complain);
3915       else if ((code0 == POINTER_TYPE || TYPE_PTRMEM_P (type0))
3916                && null_ptr_cst_p (op1))
3917         {
3918           if (TREE_CODE (op0) == ADDR_EXPR
3919               && decl_with_nonnull_addr_p (TREE_OPERAND (op0, 0)))
3920             {
3921               if (complain & tf_warning)
3922                 warning (OPT_Waddress, "the address of %qD will never be NULL",
3923                          TREE_OPERAND (op0, 0));
3924             }
3925           result_type = type0;
3926         }
3927       else if ((code1 == POINTER_TYPE || TYPE_PTRMEM_P (type1))
3928                && null_ptr_cst_p (op0))
3929         {
3930           if (TREE_CODE (op1) == ADDR_EXPR 
3931               && decl_with_nonnull_addr_p (TREE_OPERAND (op1, 0)))
3932             {
3933               if (complain & tf_warning)
3934                 warning (OPT_Waddress, "the address of %qD will never be NULL",
3935                          TREE_OPERAND (op1, 0));
3936             }
3937           result_type = type1;
3938         }
3939       else if (code0 == POINTER_TYPE && code1 == INTEGER_TYPE)
3940         {
3941           result_type = type0;
3942           if (complain & tf_error) 
3943             permerror (input_location, "ISO C++ forbids comparison between pointer and integer");
3944           else
3945             return error_mark_node;
3946         }
3947       else if (code0 == INTEGER_TYPE && code1 == POINTER_TYPE)
3948         {
3949           result_type = type1;
3950           if (complain & tf_error)
3951             permerror (input_location, "ISO C++ forbids comparison between pointer and integer");
3952           else
3953             return error_mark_node;
3954         }
3955       else if (TYPE_PTRMEMFUNC_P (type0) && null_ptr_cst_p (op1))
3956         {
3957           if (TARGET_PTRMEMFUNC_VBIT_LOCATION
3958               == ptrmemfunc_vbit_in_delta)
3959             {
3960               tree pfn0 = pfn_from_ptrmemfunc (op0);
3961               tree delta0 = delta_from_ptrmemfunc (op0);
3962               tree e1 = cp_build_binary_op (location,
3963                                             EQ_EXPR,
3964                                             pfn0,       
3965                                             fold_convert (TREE_TYPE (pfn0),
3966                                                           integer_zero_node),
3967                                             complain);
3968               tree e2 = cp_build_binary_op (location,
3969                                             BIT_AND_EXPR, 
3970                                             delta0,
3971                                             integer_one_node,
3972                                             complain);
3973               e2 = cp_build_binary_op (location,
3974                                        EQ_EXPR, e2, integer_zero_node,
3975                                        complain);
3976               op0 = cp_build_binary_op (location,
3977                                         TRUTH_ANDIF_EXPR, e1, e2,
3978                                         complain);
3979               op1 = cp_convert (TREE_TYPE (op0), integer_one_node); 
3980             }
3981           else 
3982             {
3983               op0 = build_ptrmemfunc_access_expr (op0, pfn_identifier);
3984               op1 = cp_convert (TREE_TYPE (op0), integer_zero_node); 
3985             }
3986           result_type = TREE_TYPE (op0);
3987         }
3988       else if (TYPE_PTRMEMFUNC_P (type1) && null_ptr_cst_p (op0))
3989         return cp_build_binary_op (location, code, op1, op0, complain);
3990       else if (TYPE_PTRMEMFUNC_P (type0) && TYPE_PTRMEMFUNC_P (type1))
3991         {
3992           tree type;
3993           /* E will be the final comparison.  */
3994           tree e;
3995           /* E1 and E2 are for scratch.  */
3996           tree e1;
3997           tree e2;
3998           tree pfn0;
3999           tree pfn1;
4000           tree delta0;
4001           tree delta1;
4002
4003           type = composite_pointer_type (type0, type1, op0, op1, 
4004                                          CPO_COMPARISON, complain);
4005
4006           if (!same_type_p (TREE_TYPE (op0), type))
4007             op0 = cp_convert_and_check (type, op0);
4008           if (!same_type_p (TREE_TYPE (op1), type))
4009             op1 = cp_convert_and_check (type, op1);
4010
4011           if (op0 == error_mark_node || op1 == error_mark_node)
4012             return error_mark_node;
4013
4014           if (TREE_SIDE_EFFECTS (op0))
4015             op0 = save_expr (op0);
4016           if (TREE_SIDE_EFFECTS (op1))
4017             op1 = save_expr (op1);
4018
4019           pfn0 = pfn_from_ptrmemfunc (op0);
4020           pfn1 = pfn_from_ptrmemfunc (op1);
4021           delta0 = delta_from_ptrmemfunc (op0);
4022           delta1 = delta_from_ptrmemfunc (op1);
4023           if (TARGET_PTRMEMFUNC_VBIT_LOCATION
4024               == ptrmemfunc_vbit_in_delta)
4025             {
4026               /* We generate:
4027
4028                  (op0.pfn == op1.pfn
4029                   && ((op0.delta == op1.delta)
4030                        || (!op0.pfn && op0.delta & 1 == 0 
4031                            && op1.delta & 1 == 0))
4032
4033                  The reason for the `!op0.pfn' bit is that a NULL
4034                  pointer-to-member is any member with a zero PFN and
4035                  LSB of the DELTA field is 0.  */
4036
4037               e1 = cp_build_binary_op (location, BIT_AND_EXPR,
4038                                        delta0, 
4039                                        integer_one_node,
4040                                        complain);
4041               e1 = cp_build_binary_op (location,
4042                                        EQ_EXPR, e1, integer_zero_node,
4043                                        complain);
4044               e2 = cp_build_binary_op (location, BIT_AND_EXPR,
4045                                        delta1,
4046                                        integer_one_node,
4047                                        complain);
4048               e2 = cp_build_binary_op (location,
4049                                        EQ_EXPR, e2, integer_zero_node,
4050                                        complain);
4051               e1 = cp_build_binary_op (location,
4052                                        TRUTH_ANDIF_EXPR, e2, e1,
4053                                        complain);
4054               e2 = cp_build_binary_op (location, EQ_EXPR,
4055                                        pfn0,
4056                                        fold_convert (TREE_TYPE (pfn0),
4057                                                      integer_zero_node),
4058                                        complain);
4059               e2 = cp_build_binary_op (location,
4060                                        TRUTH_ANDIF_EXPR, e2, e1, complain);
4061               e1 = cp_build_binary_op (location,
4062                                        EQ_EXPR, delta0, delta1, complain);
4063               e1 = cp_build_binary_op (location,
4064                                        TRUTH_ORIF_EXPR, e1, e2, complain);
4065             }
4066           else
4067             {
4068               /* We generate:
4069
4070                  (op0.pfn == op1.pfn
4071                  && (!op0.pfn || op0.delta == op1.delta))
4072
4073                  The reason for the `!op0.pfn' bit is that a NULL
4074                  pointer-to-member is any member with a zero PFN; the
4075                  DELTA field is unspecified.  */
4076  
4077               e1 = cp_build_binary_op (location,
4078                                        EQ_EXPR, delta0, delta1, complain);
4079               e2 = cp_build_binary_op (location,
4080                                        EQ_EXPR,
4081                                        pfn0,
4082                                        fold_convert (TREE_TYPE (pfn0),
4083                                                      integer_zero_node),
4084                                        complain);
4085               e1 = cp_build_binary_op (location,
4086                                        TRUTH_ORIF_EXPR, e1, e2, complain);
4087             }
4088           e2 = build2 (EQ_EXPR, boolean_type_node, pfn0, pfn1);
4089           e = cp_build_binary_op (location,
4090                                   TRUTH_ANDIF_EXPR, e2, e1, complain);
4091           if (code == EQ_EXPR)
4092             return e;
4093           return cp_build_binary_op (location,
4094                                      EQ_EXPR, e, integer_zero_node, complain);
4095         }
4096       else
4097         {
4098           gcc_assert (!TYPE_PTRMEMFUNC_P (type0)
4099                       || !same_type_p (TYPE_PTRMEMFUNC_FN_TYPE (type0),
4100                                        type1));
4101           gcc_assert (!TYPE_PTRMEMFUNC_P (type1)
4102                       || !same_type_p (TYPE_PTRMEMFUNC_FN_TYPE (type1),
4103                                        type0));
4104         }
4105
4106       break;
4107
4108     case MAX_EXPR:
4109     case MIN_EXPR:
4110       if ((code0 == INTEGER_TYPE || code0 == REAL_TYPE)
4111            && (code1 == INTEGER_TYPE || code1 == REAL_TYPE))
4112         shorten = 1;
4113       else if (code0 == POINTER_TYPE && code1 == POINTER_TYPE)
4114         result_type = composite_pointer_type (type0, type1, op0, op1,
4115                                               CPO_COMPARISON, complain);
4116       break;
4117
4118     case LE_EXPR:
4119     case GE_EXPR:
4120     case LT_EXPR:
4121     case GT_EXPR:
4122       if (TREE_CODE (orig_op0) == STRING_CST
4123           || TREE_CODE (orig_op1) == STRING_CST)
4124         {
4125           if (complain & tf_warning)
4126             warning (OPT_Waddress, "comparison with string literal results in unspecified behaviour");
4127         }
4128
4129       build_type = boolean_type_node;
4130       if ((code0 == INTEGER_TYPE || code0 == REAL_TYPE)
4131            && (code1 == INTEGER_TYPE || code1 == REAL_TYPE))
4132         short_compare = 1;
4133       else if (code0 == POINTER_TYPE && code1 == POINTER_TYPE)
4134         result_type = composite_pointer_type (type0, type1, op0, op1,
4135                                               CPO_COMPARISON, complain);
4136       else if (code0 == POINTER_TYPE && TREE_CODE (op1) == INTEGER_CST
4137                && integer_zerop (op1))
4138         result_type = type0;
4139       else if (code1 == POINTER_TYPE && TREE_CODE (op0) == INTEGER_CST
4140                && integer_zerop (op0))
4141         result_type = type1;
4142       else if (code0 == POINTER_TYPE && code1 == INTEGER_TYPE)
4143         {
4144           result_type = type0;
4145           if (complain & tf_error)
4146             permerror (input_location, "ISO C++ forbids comparison between pointer and integer");
4147           else
4148             return error_mark_node;
4149         }
4150       else if (code0 == INTEGER_TYPE && code1 == POINTER_TYPE)
4151         {
4152           result_type = type1;
4153           if (complain & tf_error)
4154             permerror (input_location, "ISO C++ forbids comparison between pointer and integer");
4155           else
4156             return error_mark_node;
4157         }
4158       break;
4159
4160     case UNORDERED_EXPR:
4161     case ORDERED_EXPR:
4162     case UNLT_EXPR:
4163     case UNLE_EXPR:
4164     case UNGT_EXPR:
4165     case UNGE_EXPR:
4166     case UNEQ_EXPR:
4167       build_type = integer_type_node;
4168       if (code0 != REAL_TYPE || code1 != REAL_TYPE)
4169         {
4170           if (complain & tf_error)
4171             error ("unordered comparison on non-floating point argument");
4172           return error_mark_node;
4173         }
4174       common = 1;
4175       break;
4176
4177     default:
4178       break;
4179     }
4180
4181   if (((code0 == INTEGER_TYPE || code0 == REAL_TYPE || code0 == COMPLEX_TYPE
4182         || code0 == ENUMERAL_TYPE)
4183        && (code1 == INTEGER_TYPE || code1 == REAL_TYPE
4184            || code1 == COMPLEX_TYPE || code1 == ENUMERAL_TYPE)))
4185     arithmetic_types_p = 1;
4186   else
4187     {
4188       arithmetic_types_p = 0;
4189       /* Vector arithmetic is only allowed when both sides are vectors.  */
4190       if (code0 == VECTOR_TYPE && code1 == VECTOR_TYPE)
4191         {
4192           if (!tree_int_cst_equal (TYPE_SIZE (type0), TYPE_SIZE (type1))
4193               || !same_scalar_type_ignoring_signedness (TREE_TYPE (type0),
4194                                                         TREE_TYPE (type1)))
4195             {
4196               binary_op_error (location, code, type0, type1);
4197               return error_mark_node;
4198             }
4199           arithmetic_types_p = 1;
4200         }
4201     }
4202   /* Determine the RESULT_TYPE, if it is not already known.  */
4203   if (!result_type
4204       && arithmetic_types_p
4205       && (shorten || common || short_compare))
4206     result_type = cp_common_type (type0, type1);
4207
4208   if (!result_type)
4209     {
4210       if (complain & tf_error)
4211         error ("invalid operands of types %qT and %qT to binary %qO",
4212                TREE_TYPE (orig_op0), TREE_TYPE (orig_op1), code);
4213       return error_mark_node;
4214     }
4215
4216   /* If we're in a template, the only thing we need to know is the
4217      RESULT_TYPE.  */
4218   if (processing_template_decl)
4219     {
4220       /* Since the middle-end checks the type when doing a build2, we
4221          need to build the tree in pieces.  This built tree will never
4222          get out of the front-end as we replace it when instantiating
4223          the template.  */
4224       tree tmp = build2 (resultcode,
4225                          build_type ? build_type : result_type,
4226                          NULL_TREE, op1);
4227       TREE_OPERAND (tmp, 0) = op0;
4228       return tmp;
4229     }
4230
4231   if (arithmetic_types_p)
4232     {
4233       bool first_complex = (code0 == COMPLEX_TYPE);
4234       bool second_complex = (code1 == COMPLEX_TYPE);
4235       int none_complex = (!first_complex && !second_complex);
4236
4237       /* Adapted from patch for c/24581.  */
4238       if (first_complex != second_complex
4239           && (code == PLUS_EXPR
4240               || code == MINUS_EXPR
4241               || code == MULT_EXPR
4242               || (code == TRUNC_DIV_EXPR && first_complex))
4243           && TREE_CODE (TREE_TYPE (result_type)) == REAL_TYPE
4244           && flag_signed_zeros)
4245         {
4246           /* An operation on mixed real/complex operands must be
4247              handled specially, but the language-independent code can
4248              more easily optimize the plain complex arithmetic if
4249              -fno-signed-zeros.  */
4250           tree real_type = TREE_TYPE (result_type);
4251           tree real, imag;
4252           if (first_complex)
4253             {
4254               if (TREE_TYPE (op0) != result_type)
4255                 op0 = cp_convert_and_check (result_type, op0);
4256               if (TREE_TYPE (op1) != real_type)
4257                 op1 = cp_convert_and_check (real_type, op1);
4258             }
4259           else
4260             {
4261               if (TREE_TYPE (op0) != real_type)
4262                 op0 = cp_convert_and_check (real_type, op0);
4263               if (TREE_TYPE (op1) != result_type)
4264                 op1 = cp_convert_and_check (result_type, op1);
4265             }
4266           if (TREE_CODE (op0) == ERROR_MARK || TREE_CODE (op1) == ERROR_MARK)
4267             return error_mark_node;
4268           if (first_complex)
4269             {
4270               op0 = save_expr (op0);
4271               real = cp_build_unary_op (REALPART_EXPR, op0, 1, complain);
4272               imag = cp_build_unary_op (IMAGPART_EXPR, op0, 1, complain);
4273               switch (code)
4274                 {
4275                 case MULT_EXPR:
4276                 case TRUNC_DIV_EXPR:
4277                   imag = build2 (resultcode, real_type, imag, op1);
4278                   /* Fall through.  */
4279                 case PLUS_EXPR:
4280                 case MINUS_EXPR:
4281                   real = build2 (resultcode, real_type, real, op1);
4282                   break;
4283                 default:
4284                   gcc_unreachable();
4285                 }
4286             }
4287           else
4288             {
4289               op1 = save_expr (op1);
4290               real = cp_build_unary_op (REALPART_EXPR, op1, 1, complain);
4291               imag = cp_build_unary_op (IMAGPART_EXPR, op1, 1, complain);
4292               switch (code)
4293                 {
4294                 case MULT_EXPR:
4295                   imag = build2 (resultcode, real_type, op0, imag);
4296                   /* Fall through.  */
4297                 case PLUS_EXPR:
4298                   real = build2 (resultcode, real_type, op0, real);
4299                   break;
4300                 case MINUS_EXPR:
4301                   real = build2 (resultcode, real_type, op0, real);
4302                   imag = build1 (NEGATE_EXPR, real_type, imag);
4303                   break;
4304                 default:
4305                   gcc_unreachable();
4306                 }
4307             }
4308           return build2 (COMPLEX_EXPR, result_type, real, imag);
4309         }
4310
4311       /* For certain operations (which identify themselves by shorten != 0)
4312          if both args were extended from the same smaller type,
4313          do the arithmetic in that type and then extend.
4314
4315          shorten !=0 and !=1 indicates a bitwise operation.
4316          For them, this optimization is safe only if
4317          both args are zero-extended or both are sign-extended.
4318          Otherwise, we might change the result.
4319          E.g., (short)-1 | (unsigned short)-1 is (int)-1
4320          but calculated in (unsigned short) it would be (unsigned short)-1.  */
4321
4322       if (shorten && none_complex)
4323         {
4324           final_type = result_type;
4325           result_type = shorten_binary_op (result_type, op0, op1, 
4326                                            shorten == -1);
4327         }
4328
4329       /* Comparison operations are shortened too but differently.
4330          They identify themselves by setting short_compare = 1.  */
4331
4332       if (short_compare)
4333         {
4334           /* Don't write &op0, etc., because that would prevent op0
4335              from being kept in a register.
4336              Instead, make copies of the our local variables and
4337              pass the copies by reference, then copy them back afterward.  */
4338           tree xop0 = op0, xop1 = op1, xresult_type = result_type;
4339           enum tree_code xresultcode = resultcode;
4340           tree val
4341             = shorten_compare (&xop0, &xop1, &xresult_type, &xresultcode);
4342           if (val != 0)
4343             return cp_convert (boolean_type_node, val);
4344           op0 = xop0, op1 = xop1;
4345           converted = 1;
4346           resultcode = xresultcode;
4347         }
4348
4349       if ((short_compare || code == MIN_EXPR || code == MAX_EXPR)
4350           && warn_sign_compare
4351           && !TREE_NO_WARNING (orig_op0)
4352           && !TREE_NO_WARNING (orig_op1)
4353           /* Do not warn until the template is instantiated; we cannot
4354              bound the ranges of the arguments until that point.  */
4355           && !processing_template_decl
4356           && (complain & tf_warning)
4357           && c_inhibit_evaluation_warnings == 0)
4358         {
4359           warn_for_sign_compare (location, orig_op0, orig_op1, op0, op1, 
4360                                  result_type, resultcode);
4361         }
4362     }
4363
4364   /* If CONVERTED is zero, both args will be converted to type RESULT_TYPE.
4365      Then the expression will be built.
4366      It will be given type FINAL_TYPE if that is nonzero;
4367      otherwise, it will be given type RESULT_TYPE.  */
4368   if (! converted)
4369     {
4370       if (TREE_TYPE (op0) != result_type)
4371         op0 = cp_convert_and_check (result_type, op0);
4372       if (TREE_TYPE (op1) != result_type)
4373         op1 = cp_convert_and_check (result_type, op1);
4374
4375       if (op0 == error_mark_node || op1 == error_mark_node)
4376         return error_mark_node;
4377     }
4378
4379   if (build_type == NULL_TREE)
4380     build_type = result_type;
4381
4382   result = build2 (resultcode, build_type, op0, op1);
4383   result = fold_if_not_in_template (result);
4384   if (final_type != 0)
4385     result = cp_convert (final_type, result);
4386
4387   if (TREE_OVERFLOW_P (result) 
4388       && !TREE_OVERFLOW_P (op0) 
4389       && !TREE_OVERFLOW_P (op1))
4390     overflow_warning (location, result);
4391
4392   return result;
4393 }
4394 \f
4395 /* Return a tree for the sum or difference (RESULTCODE says which)
4396    of pointer PTROP and integer INTOP.  */
4397
4398 static tree
4399 cp_pointer_int_sum (enum tree_code resultcode, tree ptrop, tree intop)
4400 {
4401   tree res_type = TREE_TYPE (ptrop);
4402
4403   /* pointer_int_sum() uses size_in_bytes() on the TREE_TYPE(res_type)
4404      in certain circumstance (when it's valid to do so).  So we need
4405      to make sure it's complete.  We don't need to check here, if we
4406      can actually complete it at all, as those checks will be done in
4407      pointer_int_sum() anyway.  */
4408   complete_type (TREE_TYPE (res_type));
4409
4410   return pointer_int_sum (input_location, resultcode, ptrop,
4411                           fold_if_not_in_template (intop));
4412 }
4413
4414 /* Return a tree for the difference of pointers OP0 and OP1.
4415    The resulting tree has type int.  */
4416
4417 static tree
4418 pointer_diff (tree op0, tree op1, tree ptrtype)
4419 {
4420   tree result;
4421   tree restype = ptrdiff_type_node;
4422   tree target_type = TREE_TYPE (ptrtype);
4423
4424   if (!complete_type_or_else (target_type, NULL_TREE))
4425     return error_mark_node;
4426
4427   if (TREE_CODE (target_type) == VOID_TYPE)
4428     permerror (input_location, "ISO C++ forbids using pointer of type %<void *%> in subtraction");
4429   if (TREE_CODE (target_type) == FUNCTION_TYPE)
4430     permerror (input_location, "ISO C++ forbids using pointer to a function in subtraction");
4431   if (TREE_CODE (target_type) == METHOD_TYPE)
4432     permerror (input_location, "ISO C++ forbids using pointer to a method in subtraction");
4433
4434   /* First do the subtraction as integers;
4435      then drop through to build the divide operator.  */
4436
4437   op0 = cp_build_binary_op (input_location,
4438                             MINUS_EXPR,
4439                             cp_convert (restype, op0),
4440                             cp_convert (restype, op1),
4441                             tf_warning_or_error);
4442
4443   /* This generates an error if op1 is a pointer to an incomplete type.  */
4444   if (!COMPLETE_TYPE_P (TREE_TYPE (TREE_TYPE (op1))))
4445     error ("invalid use of a pointer to an incomplete type in pointer arithmetic");
4446
4447   op1 = (TYPE_PTROB_P (ptrtype)
4448          ? size_in_bytes (target_type)
4449          : integer_one_node);
4450
4451   /* Do the division.  */
4452
4453   result = build2 (EXACT_DIV_EXPR, restype, op0, cp_convert (restype, op1));
4454   return fold_if_not_in_template (result);
4455 }
4456 \f
4457 /* Construct and perhaps optimize a tree representation
4458    for a unary operation.  CODE, a tree_code, specifies the operation
4459    and XARG is the operand.  */
4460
4461 tree
4462 build_x_unary_op (enum tree_code code, tree xarg, tsubst_flags_t complain)
4463 {
4464   tree orig_expr = xarg;
4465   tree exp;
4466   int ptrmem = 0;
4467
4468   if (processing_template_decl)
4469     {
4470       if (type_dependent_expression_p (xarg))
4471         return build_min_nt (code, xarg, NULL_TREE);
4472
4473       xarg = build_non_dependent_expr (xarg);
4474     }
4475
4476   exp = NULL_TREE;
4477
4478   /* [expr.unary.op] says:
4479
4480        The address of an object of incomplete type can be taken.
4481
4482      (And is just the ordinary address operator, not an overloaded
4483      "operator &".)  However, if the type is a template
4484      specialization, we must complete the type at this point so that
4485      an overloaded "operator &" will be available if required.  */
4486   if (code == ADDR_EXPR
4487       && TREE_CODE (xarg) != TEMPLATE_ID_EXPR
4488       && ((CLASS_TYPE_P (TREE_TYPE (xarg))
4489            && !COMPLETE_TYPE_P (complete_type (TREE_TYPE (xarg))))
4490           || (TREE_CODE (xarg) == OFFSET_REF)))
4491     /* Don't look for a function.  */;
4492   else
4493     exp = build_new_op (code, LOOKUP_NORMAL, xarg, NULL_TREE, NULL_TREE,
4494                         /*overloaded_p=*/NULL, complain);
4495   if (!exp && code == ADDR_EXPR)
4496     {
4497       if (is_overloaded_fn (xarg))
4498         {
4499           tree fn = get_first_fn (xarg);
4500           if (DECL_CONSTRUCTOR_P (fn) || DECL_DESTRUCTOR_P (fn))
4501             {
4502               error (DECL_CONSTRUCTOR_P (fn)
4503                      ? G_("taking address of constructor %qE")
4504                      : G_("taking address of destructor %qE"),
4505                      xarg);
4506               return error_mark_node;
4507             }
4508         }
4509
4510       /* A pointer to member-function can be formed only by saying
4511          &X::mf.  */
4512       if (!flag_ms_extensions && TREE_CODE (TREE_TYPE (xarg)) == METHOD_TYPE
4513           && (TREE_CODE (xarg) != OFFSET_REF || !PTRMEM_OK_P (xarg)))
4514         {
4515           if (TREE_CODE (xarg) != OFFSET_REF
4516               || !TYPE_P (TREE_OPERAND (xarg, 0)))
4517             {
4518               error ("invalid use of %qE to form a pointer-to-member-function",
4519                      xarg);
4520               if (TREE_CODE (xarg) != OFFSET_REF)
4521                 inform (input_location, "  a qualified-id is required");
4522               return error_mark_node;
4523             }
4524           else
4525             {
4526               error ("parentheses around %qE cannot be used to form a"
4527                      " pointer-to-member-function",
4528                      xarg);
4529               PTRMEM_OK_P (xarg) = 1;
4530             }
4531         }
4532
4533       if (TREE_CODE (xarg) == OFFSET_REF)
4534         {
4535           ptrmem = PTRMEM_OK_P (xarg);
4536
4537           if (!ptrmem && !flag_ms_extensions
4538               && TREE_CODE (TREE_TYPE (TREE_OPERAND (xarg, 1))) == METHOD_TYPE)
4539             {
4540               /* A single non-static member, make sure we don't allow a
4541                  pointer-to-member.  */
4542               xarg = build2 (OFFSET_REF, TREE_TYPE (xarg),
4543                              TREE_OPERAND (xarg, 0),
4544                              ovl_cons (TREE_OPERAND (xarg, 1), NULL_TREE));
4545               PTRMEM_OK_P (xarg) = ptrmem;
4546             }
4547         }
4548       else if (TREE_CODE (xarg) == TARGET_EXPR && (complain & tf_warning))
4549         warning (0, "taking address of temporary");
4550       exp = cp_build_unary_op (ADDR_EXPR, xarg, 0, complain);
4551     }
4552
4553   if (processing_template_decl && exp != error_mark_node)
4554     exp = build_min_non_dep (code, exp, orig_expr,
4555                              /*For {PRE,POST}{INC,DEC}REMENT_EXPR*/NULL_TREE);
4556   if (TREE_CODE (exp) == ADDR_EXPR)
4557     PTRMEM_OK_P (exp) = ptrmem;
4558   return exp;
4559 }
4560
4561 /* Like c_common_truthvalue_conversion, but handle pointer-to-member
4562    constants, where a null value is represented by an INTEGER_CST of
4563    -1.  */
4564
4565 tree
4566 cp_truthvalue_conversion (tree expr)
4567 {
4568   tree type = TREE_TYPE (expr);
4569   if (TYPE_PTRMEM_P (type))
4570     return build_binary_op (EXPR_LOCATION (expr),
4571                             NE_EXPR, expr, integer_zero_node, 1);
4572   else
4573     return c_common_truthvalue_conversion (input_location, expr);
4574 }
4575
4576 /* Just like cp_truthvalue_conversion, but we want a CLEANUP_POINT_EXPR.  */
4577
4578 tree
4579 condition_conversion (tree expr)
4580 {
4581   tree t;
4582   if (processing_template_decl)
4583     return expr;
4584   t = perform_implicit_conversion_flags (boolean_type_node, expr,
4585                                          tf_warning_or_error, LOOKUP_NORMAL);
4586   t = fold_build_cleanup_point_expr (boolean_type_node, t);
4587   return t;
4588 }
4589
4590 /* Returns the address of T.  This function will fold away
4591    ADDR_EXPR of INDIRECT_REF.  */
4592
4593 tree
4594 build_address (tree t)
4595 {
4596   if (error_operand_p (t) || !cxx_mark_addressable (t))
4597     return error_mark_node;
4598   t = build_fold_addr_expr (t);
4599   if (TREE_CODE (t) != ADDR_EXPR)
4600     t = rvalue (t);
4601   return t;
4602 }
4603
4604 /* Returns the address of T with type TYPE.  */
4605
4606 tree
4607 build_typed_address (tree t, tree type)
4608 {
4609   if (error_operand_p (t) || !cxx_mark_addressable (t))
4610     return error_mark_node;
4611   t = build_fold_addr_expr_with_type (t, type);
4612   if (TREE_CODE (t) != ADDR_EXPR)
4613     t = rvalue (t);
4614   return t;
4615 }
4616
4617 /* Return a NOP_EXPR converting EXPR to TYPE.  */
4618
4619 tree
4620 build_nop (tree type, tree expr)
4621 {
4622   if (type == error_mark_node || error_operand_p (expr))
4623     return expr;
4624   return build1 (NOP_EXPR, type, expr);
4625 }
4626
4627 /* C++: Must handle pointers to members.
4628
4629    Perhaps type instantiation should be extended to handle conversion
4630    from aggregates to types we don't yet know we want?  (Or are those
4631    cases typically errors which should be reported?)
4632
4633    NOCONVERT nonzero suppresses the default promotions
4634    (such as from short to int).  */
4635
4636 tree
4637 cp_build_unary_op (enum tree_code code, tree xarg, int noconvert, 
4638                    tsubst_flags_t complain)
4639 {
4640   /* No default_conversion here.  It causes trouble for ADDR_EXPR.  */
4641   tree arg = xarg;
4642   tree argtype = 0;
4643   const char *errstring = NULL;
4644   tree val;
4645   const char *invalid_op_diag;
4646
4647   if (error_operand_p (arg))
4648     return error_mark_node;
4649
4650   if ((invalid_op_diag
4651        = targetm.invalid_unary_op ((code == UNARY_PLUS_EXPR
4652                                     ? CONVERT_EXPR
4653                                     : code),
4654                                    TREE_TYPE (xarg))))
4655     {
4656       error (invalid_op_diag);
4657       return error_mark_node;
4658     }
4659
4660   switch (code)
4661     {
4662     case UNARY_PLUS_EXPR:
4663     case NEGATE_EXPR:
4664       {
4665         int flags = WANT_ARITH | WANT_ENUM;
4666         /* Unary plus (but not unary minus) is allowed on pointers.  */
4667         if (code == UNARY_PLUS_EXPR)
4668           flags |= WANT_POINTER;
4669         arg = build_expr_type_conversion (flags, arg, true);
4670         if (!arg)
4671           errstring = (code == NEGATE_EXPR
4672                        ? _("wrong type argument to unary minus")
4673                        : _("wrong type argument to unary plus"));
4674         else
4675           {
4676             if (!noconvert && CP_INTEGRAL_TYPE_P (TREE_TYPE (arg)))
4677               arg = perform_integral_promotions (arg);
4678
4679             /* Make sure the result is not an lvalue: a unary plus or minus
4680                expression is always a rvalue.  */
4681             arg = rvalue (arg);
4682           }
4683       }
4684       break;
4685
4686     case BIT_NOT_EXPR:
4687       if (TREE_CODE (TREE_TYPE (arg)) == COMPLEX_TYPE)
4688         {
4689           code = CONJ_EXPR;
4690           if (!noconvert)
4691             arg = default_conversion (arg);
4692         }
4693       else if (!(arg = build_expr_type_conversion (WANT_INT | WANT_ENUM
4694                                                    | WANT_VECTOR_OR_COMPLEX,
4695                                                    arg, true)))
4696         errstring = _("wrong type argument to bit-complement");
4697       else if (!noconvert && CP_INTEGRAL_TYPE_P (TREE_TYPE (arg)))
4698         arg = perform_integral_promotions (arg);
4699       break;
4700
4701     case ABS_EXPR:
4702       if (!(arg = build_expr_type_conversion (WANT_ARITH | WANT_ENUM, arg, true)))
4703         errstring = _("wrong type argument to abs");
4704       else if (!noconvert)
4705         arg = default_conversion (arg);
4706       break;
4707
4708     case CONJ_EXPR:
4709       /* Conjugating a real value is a no-op, but allow it anyway.  */
4710       if (!(arg = build_expr_type_conversion (WANT_ARITH | WANT_ENUM, arg, true)))
4711         errstring = _("wrong type argument to conjugation");
4712       else if (!noconvert)
4713         arg = default_conversion (arg);
4714       break;
4715
4716     case TRUTH_NOT_EXPR:
4717       arg = perform_implicit_conversion (boolean_type_node, arg,
4718                                          complain);
4719       val = invert_truthvalue_loc (input_location, arg);
4720       if (arg != error_mark_node)
4721         return val;
4722       errstring = _("in argument to unary !");
4723       break;
4724
4725     case NOP_EXPR:
4726       break;
4727
4728     case REALPART_EXPR:
4729       if (TREE_CODE (arg) == COMPLEX_CST)
4730         return TREE_REALPART (arg);
4731       else if (TREE_CODE (TREE_TYPE (arg)) == COMPLEX_TYPE)
4732         {
4733           arg = build1 (REALPART_EXPR, TREE_TYPE (TREE_TYPE (arg)), arg);
4734           return fold_if_not_in_template (arg);
4735         }
4736       else
4737         return arg;
4738
4739     case IMAGPART_EXPR:
4740       if (TREE_CODE (arg) == COMPLEX_CST)
4741         return TREE_IMAGPART (arg);
4742       else if (TREE_CODE (TREE_TYPE (arg)) == COMPLEX_TYPE)
4743         {
4744           arg = build1 (IMAGPART_EXPR, TREE_TYPE (TREE_TYPE (arg)), arg);
4745           return fold_if_not_in_template (arg);
4746         }
4747       else
4748         return cp_convert (TREE_TYPE (arg), integer_zero_node);
4749
4750     case PREINCREMENT_EXPR:
4751     case POSTINCREMENT_EXPR:
4752     case PREDECREMENT_EXPR:
4753     case POSTDECREMENT_EXPR:
4754       /* Handle complex lvalues (when permitted)
4755          by reduction to simpler cases.  */
4756
4757       val = unary_complex_lvalue (code, arg);
4758       if (val != 0)
4759         return val;
4760
4761       /* Increment or decrement the real part of the value,
4762          and don't change the imaginary part.  */
4763       if (TREE_CODE (TREE_TYPE (arg)) == COMPLEX_TYPE)
4764         {
4765           tree real, imag;
4766
4767           arg = stabilize_reference (arg);
4768           real = cp_build_unary_op (REALPART_EXPR, arg, 1, complain);
4769           imag = cp_build_unary_op (IMAGPART_EXPR, arg, 1, complain);
4770           real = cp_build_unary_op (code, real, 1, complain);
4771           if (real == error_mark_node || imag == error_mark_node)
4772             return error_mark_node;
4773           return build2 (COMPLEX_EXPR, TREE_TYPE (arg),
4774                          real, imag);
4775         }
4776
4777       /* Report invalid types.  */
4778
4779       if (!(arg = build_expr_type_conversion (WANT_ARITH | WANT_POINTER,
4780                                               arg, true)))
4781         {
4782           if (code == PREINCREMENT_EXPR)
4783             errstring = _("no pre-increment operator for type");
4784           else if (code == POSTINCREMENT_EXPR)
4785             errstring = _("no post-increment operator for type");
4786           else if (code == PREDECREMENT_EXPR)
4787             errstring = _("no pre-decrement operator for type");
4788           else
4789             errstring = _("no post-decrement operator for type");
4790           break;
4791         }
4792       else if (arg == error_mark_node)
4793         return error_mark_node;
4794
4795       /* Report something read-only.  */
4796
4797       if (CP_TYPE_CONST_P (TREE_TYPE (arg))
4798           || TREE_READONLY (arg)) 
4799         {
4800           if (complain & tf_error)
4801             readonly_error (arg, ((code == PREINCREMENT_EXPR
4802                                    || code == POSTINCREMENT_EXPR)
4803                                   ? REK_INCREMENT : REK_DECREMENT));
4804           else
4805             return error_mark_node;
4806         }
4807
4808       {
4809         tree inc;
4810         tree declared_type = unlowered_expr_type (arg);
4811
4812         argtype = TREE_TYPE (arg);
4813
4814         /* ARM $5.2.5 last annotation says this should be forbidden.  */
4815         if (TREE_CODE (argtype) == ENUMERAL_TYPE)
4816           {
4817             if (complain & tf_error)
4818               permerror (input_location, (code == PREINCREMENT_EXPR || code == POSTINCREMENT_EXPR)
4819                          ? G_("ISO C++ forbids incrementing an enum")
4820                          : G_("ISO C++ forbids decrementing an enum"));
4821             else
4822               return error_mark_node;
4823           }
4824
4825         /* Compute the increment.  */
4826
4827         if (TREE_CODE (argtype) == POINTER_TYPE)
4828           {
4829             tree type = complete_type (TREE_TYPE (argtype));
4830
4831             if (!COMPLETE_OR_VOID_TYPE_P (type))
4832               {
4833                 if (complain & tf_error)
4834                   error (((code == PREINCREMENT_EXPR
4835                            || code == POSTINCREMENT_EXPR))
4836                          ? G_("cannot increment a pointer to incomplete type %qT")
4837                          : G_("cannot decrement a pointer to incomplete type %qT"),
4838                          TREE_TYPE (argtype));
4839                 else
4840                   return error_mark_node;
4841               }
4842             else if ((pedantic || warn_pointer_arith)
4843                      && !TYPE_PTROB_P (argtype)) 
4844               {
4845                 if (complain & tf_error)
4846                   permerror (input_location, (code == PREINCREMENT_EXPR
4847                               || code == POSTINCREMENT_EXPR)
4848                              ? G_("ISO C++ forbids incrementing a pointer of type %qT")
4849                              : G_("ISO C++ forbids decrementing a pointer of type %qT"),
4850                              argtype);
4851                 else
4852                   return error_mark_node;
4853               }
4854
4855             inc = cxx_sizeof_nowarn (TREE_TYPE (argtype));
4856           }
4857         else
4858           inc = integer_one_node;
4859
4860         inc = cp_convert (argtype, inc);
4861
4862         /* Complain about anything else that is not a true lvalue.  */
4863         if (!lvalue_or_else (arg, ((code == PREINCREMENT_EXPR
4864                                     || code == POSTINCREMENT_EXPR)
4865                                    ? lv_increment : lv_decrement),
4866                              complain))
4867           return error_mark_node;
4868
4869         /* Forbid using -- on `bool'.  */
4870         if (TREE_CODE (declared_type) == BOOLEAN_TYPE)
4871           {
4872             if (code == POSTDECREMENT_EXPR || code == PREDECREMENT_EXPR)
4873               {
4874                 if (complain & tf_error)
4875                   error ("invalid use of Boolean expression as operand "
4876                          "to %<operator--%>");
4877                 return error_mark_node;
4878               }
4879             val = boolean_increment (code, arg);
4880           }
4881         else
4882           val = build2 (code, TREE_TYPE (arg), arg, inc);
4883
4884         TREE_SIDE_EFFECTS (val) = 1;
4885         return val;
4886       }
4887
4888     case ADDR_EXPR:
4889       /* Note that this operation never does default_conversion
4890          regardless of NOCONVERT.  */
4891
4892       argtype = lvalue_type (arg);
4893
4894       if (TREE_CODE (arg) == OFFSET_REF)
4895         goto offset_ref;
4896
4897       if (TREE_CODE (argtype) == REFERENCE_TYPE)
4898         {
4899           tree type = build_pointer_type (TREE_TYPE (argtype));
4900           arg = build1 (CONVERT_EXPR, type, arg);
4901           return arg;
4902         }
4903       else if (pedantic && DECL_MAIN_P (arg))
4904         {
4905           /* ARM $3.4 */
4906           /* Apparently a lot of autoconf scripts for C++ packages do this,
4907              so only complain if -pedantic.  */
4908           if (complain & (flag_pedantic_errors ? tf_error : tf_warning))
4909             pedwarn (input_location, OPT_pedantic,
4910                      "ISO C++ forbids taking address of function %<::main%>");
4911           else if (flag_pedantic_errors)
4912             return error_mark_node;
4913         }
4914
4915       /* Let &* cancel out to simplify resulting code.  */
4916       if (TREE_CODE (arg) == INDIRECT_REF)
4917         {
4918           /* We don't need to have `current_class_ptr' wrapped in a
4919              NON_LVALUE_EXPR node.  */
4920           if (arg == current_class_ref)
4921             return current_class_ptr;
4922
4923           arg = TREE_OPERAND (arg, 0);
4924           if (TREE_CODE (TREE_TYPE (arg)) == REFERENCE_TYPE)
4925             {
4926               tree type = build_pointer_type (TREE_TYPE (TREE_TYPE (arg)));
4927               arg = build1 (CONVERT_EXPR, type, arg);
4928             }
4929           else
4930             /* Don't let this be an lvalue.  */
4931             arg = rvalue (arg);
4932           return arg;
4933         }
4934
4935       /* Uninstantiated types are all functions.  Taking the
4936          address of a function is a no-op, so just return the
4937          argument.  */
4938
4939       gcc_assert (TREE_CODE (arg) != IDENTIFIER_NODE
4940                   || !IDENTIFIER_OPNAME_P (arg));
4941
4942       if (TREE_CODE (arg) == COMPONENT_REF && type_unknown_p (arg)
4943           && !really_overloaded_fn (TREE_OPERAND (arg, 1)))
4944         {
4945           /* They're trying to take the address of a unique non-static
4946              member function.  This is ill-formed (except in MS-land),
4947              but let's try to DTRT.
4948              Note: We only handle unique functions here because we don't
4949              want to complain if there's a static overload; non-unique
4950              cases will be handled by instantiate_type.  But we need to
4951              handle this case here to allow casts on the resulting PMF.
4952              We could defer this in non-MS mode, but it's easier to give
4953              a useful error here.  */
4954
4955           /* Inside constant member functions, the `this' pointer
4956              contains an extra const qualifier.  TYPE_MAIN_VARIANT
4957              is used here to remove this const from the diagnostics
4958              and the created OFFSET_REF.  */
4959           tree base = TYPE_MAIN_VARIANT (TREE_TYPE (TREE_OPERAND (arg, 0)));
4960           tree fn = get_first_fn (TREE_OPERAND (arg, 1));
4961           mark_used (fn);
4962
4963           if (! flag_ms_extensions)
4964             {
4965               tree name = DECL_NAME (fn);
4966               if (!(complain & tf_error))
4967                 return error_mark_node;
4968               else if (current_class_type
4969                        && TREE_OPERAND (arg, 0) == current_class_ref)
4970                   /* An expression like &memfn.  */
4971                 permerror (input_location, "ISO C++ forbids taking the address of an unqualified"
4972                            " or parenthesized non-static member function to form"
4973                            " a pointer to member function.  Say %<&%T::%D%>",
4974                            base, name);
4975               else
4976                 permerror (input_location, "ISO C++ forbids taking the address of a bound member"
4977                            " function to form a pointer to member function."
4978                            "  Say %<&%T::%D%>",
4979                            base, name);
4980             }
4981           arg = build_offset_ref (base, fn, /*address_p=*/true);
4982         }
4983
4984     offset_ref:
4985       if (type_unknown_p (arg))
4986         return build1 (ADDR_EXPR, unknown_type_node, arg);
4987
4988       /* Handle complex lvalues (when permitted)
4989          by reduction to simpler cases.  */
4990       val = unary_complex_lvalue (code, arg);
4991       if (val != 0)
4992         return val;
4993
4994       switch (TREE_CODE (arg))
4995         {
4996         CASE_CONVERT:
4997         case FLOAT_EXPR:
4998         case FIX_TRUNC_EXPR:
4999           /* Even if we're not being pedantic, we cannot allow this
5000              extension when we're instantiating in a SFINAE
5001              context.  */
5002           if (! lvalue_p (arg) && complain == tf_none)
5003             {
5004               if (complain & tf_error)
5005                 permerror (input_location, "ISO C++ forbids taking the address of a cast to a non-lvalue expression");
5006               else
5007                 return error_mark_node;
5008             }
5009           break;
5010
5011         case BASELINK:
5012           arg = BASELINK_FUNCTIONS (arg);
5013           /* Fall through.  */
5014
5015         case OVERLOAD:
5016           arg = OVL_CURRENT (arg);
5017           break;
5018
5019         case OFFSET_REF:
5020           /* Turn a reference to a non-static data member into a
5021              pointer-to-member.  */
5022           {
5023             tree type;
5024             tree t;
5025
5026             if (!PTRMEM_OK_P (arg))
5027               return cp_build_unary_op (code, arg, 0, complain);
5028
5029             t = TREE_OPERAND (arg, 1);
5030             if (TREE_CODE (TREE_TYPE (t)) == REFERENCE_TYPE)
5031               {
5032                 if (complain & tf_error)
5033                   error ("cannot create pointer to reference member %qD", t);
5034                 return error_mark_node;
5035               }
5036
5037             type = build_ptrmem_type (context_for_name_lookup (t),
5038                                       TREE_TYPE (t));
5039             t = make_ptrmem_cst (type, TREE_OPERAND (arg, 1));
5040             return t;
5041           }
5042
5043         default:
5044           break;
5045         }
5046
5047       /* Anything not already handled and not a true memory reference
5048          is an error.  */
5049       if (TREE_CODE (argtype) != FUNCTION_TYPE
5050           && TREE_CODE (argtype) != METHOD_TYPE
5051           && TREE_CODE (arg) != OFFSET_REF
5052           && !lvalue_or_else (arg, lv_addressof, complain))
5053         return error_mark_node;
5054
5055       if (argtype != error_mark_node)
5056         argtype = build_pointer_type (argtype);
5057
5058       /* In a template, we are processing a non-dependent expression
5059          so we can just form an ADDR_EXPR with the correct type.  */
5060       if (processing_template_decl || TREE_CODE (arg) != COMPONENT_REF)
5061         {
5062           val = build_address (arg);
5063           if (TREE_CODE (arg) == OFFSET_REF)
5064             PTRMEM_OK_P (val) = PTRMEM_OK_P (arg);
5065         }
5066       else if (TREE_CODE (TREE_OPERAND (arg, 1)) == BASELINK)
5067         {
5068           tree fn = BASELINK_FUNCTIONS (TREE_OPERAND (arg, 1));
5069
5070           /* We can only get here with a single static member
5071              function.  */
5072           gcc_assert (TREE_CODE (fn) == FUNCTION_DECL
5073                       && DECL_STATIC_FUNCTION_P (fn));
5074           mark_used (fn);
5075           val = build_address (fn);
5076           if (TREE_SIDE_EFFECTS (TREE_OPERAND (arg, 0)))
5077             /* Do not lose object's side effects.  */
5078             val = build2 (COMPOUND_EXPR, TREE_TYPE (val),
5079                           TREE_OPERAND (arg, 0), val);
5080         }
5081       else if (DECL_C_BIT_FIELD (TREE_OPERAND (arg, 1)))
5082         {
5083           if (complain & tf_error)
5084             error ("attempt to take address of bit-field structure member %qD",
5085                    TREE_OPERAND (arg, 1));
5086           return error_mark_node;
5087         }
5088       else
5089         {
5090           tree object = TREE_OPERAND (arg, 0);
5091           tree field = TREE_OPERAND (arg, 1);
5092           gcc_assert (same_type_ignoring_top_level_qualifiers_p
5093                       (TREE_TYPE (object), decl_type_context (field)));
5094           val = build_address (arg);
5095         }
5096
5097       if (TREE_CODE (argtype) == POINTER_TYPE
5098           && TREE_CODE (TREE_TYPE (argtype)) == METHOD_TYPE)
5099         {
5100           build_ptrmemfunc_type (argtype);
5101           val = build_ptrmemfunc (argtype, val, 0,
5102                                   /*c_cast_p=*/false);
5103         }
5104
5105       return val;
5106
5107     default:
5108       break;
5109     }
5110
5111   if (!errstring)
5112     {
5113       if (argtype == 0)
5114         argtype = TREE_TYPE (arg);
5115       return fold_if_not_in_template (build1 (code, argtype, arg));
5116     }
5117
5118   if (complain & tf_error)
5119     error ("%s", errstring);
5120   return error_mark_node;
5121 }
5122
5123 /* Hook for the c-common bits that build a unary op.  */
5124 tree
5125 build_unary_op (location_t location ATTRIBUTE_UNUSED,
5126                 enum tree_code code, tree xarg, int noconvert)
5127 {
5128   return cp_build_unary_op (code, xarg, noconvert, tf_warning_or_error);
5129 }
5130
5131 /* Apply unary lvalue-demanding operator CODE to the expression ARG
5132    for certain kinds of expressions which are not really lvalues
5133    but which we can accept as lvalues.
5134
5135    If ARG is not a kind of expression we can handle, return
5136    NULL_TREE.  */
5137
5138 tree
5139 unary_complex_lvalue (enum tree_code code, tree arg)
5140 {
5141   /* Inside a template, making these kinds of adjustments is
5142      pointless; we are only concerned with the type of the
5143      expression.  */
5144   if (processing_template_decl)
5145     return NULL_TREE;
5146
5147   /* Handle (a, b) used as an "lvalue".  */
5148   if (TREE_CODE (arg) == COMPOUND_EXPR)
5149     {
5150       tree real_result = cp_build_unary_op (code, TREE_OPERAND (arg, 1), 0,
5151                                             tf_warning_or_error);
5152       return build2 (COMPOUND_EXPR, TREE_TYPE (real_result),
5153                      TREE_OPERAND (arg, 0), real_result);
5154     }
5155
5156   /* Handle (a ? b : c) used as an "lvalue".  */
5157   if (TREE_CODE (arg) == COND_EXPR
5158       || TREE_CODE (arg) == MIN_EXPR || TREE_CODE (arg) == MAX_EXPR)
5159     return rationalize_conditional_expr (code, arg, tf_warning_or_error);
5160
5161   /* Handle (a = b), (++a), and (--a) used as an "lvalue".  */
5162   if (TREE_CODE (arg) == MODIFY_EXPR
5163       || TREE_CODE (arg) == PREINCREMENT_EXPR
5164       || TREE_CODE (arg) == PREDECREMENT_EXPR)
5165     {
5166       tree lvalue = TREE_OPERAND (arg, 0);
5167       if (TREE_SIDE_EFFECTS (lvalue))
5168         {
5169           lvalue = stabilize_reference (lvalue);
5170           arg = build2 (TREE_CODE (arg), TREE_TYPE (arg),
5171                         lvalue, TREE_OPERAND (arg, 1));
5172         }
5173       return unary_complex_lvalue
5174         (code, build2 (COMPOUND_EXPR, TREE_TYPE (lvalue), arg, lvalue));
5175     }
5176
5177   if (code != ADDR_EXPR)
5178     return NULL_TREE;
5179
5180   /* Handle (a = b) used as an "lvalue" for `&'.  */
5181   if (TREE_CODE (arg) == MODIFY_EXPR
5182       || TREE_CODE (arg) == INIT_EXPR)
5183     {
5184       tree real_result = cp_build_unary_op (code, TREE_OPERAND (arg, 0), 0,
5185                                             tf_warning_or_error);
5186       arg = build2 (COMPOUND_EXPR, TREE_TYPE (real_result),
5187                     arg, real_result);
5188       TREE_NO_WARNING (arg) = 1;
5189       return arg;
5190     }
5191
5192   if (TREE_CODE (TREE_TYPE (arg)) == FUNCTION_TYPE
5193       || TREE_CODE (TREE_TYPE (arg)) == METHOD_TYPE
5194       || TREE_CODE (arg) == OFFSET_REF)
5195     return NULL_TREE;
5196
5197   /* We permit compiler to make function calls returning
5198      objects of aggregate type look like lvalues.  */
5199   {
5200     tree targ = arg;
5201
5202     if (TREE_CODE (targ) == SAVE_EXPR)
5203       targ = TREE_OPERAND (targ, 0);
5204
5205     if (TREE_CODE (targ) == CALL_EXPR && MAYBE_CLASS_TYPE_P (TREE_TYPE (targ)))
5206       {
5207         if (TREE_CODE (arg) == SAVE_EXPR)
5208           targ = arg;
5209         else
5210           targ = build_cplus_new (TREE_TYPE (arg), arg);
5211         return build1 (ADDR_EXPR, build_pointer_type (TREE_TYPE (arg)), targ);
5212       }
5213
5214     if (TREE_CODE (arg) == SAVE_EXPR && TREE_CODE (targ) == INDIRECT_REF)
5215       return build3 (SAVE_EXPR, build_pointer_type (TREE_TYPE (arg)),
5216                      TREE_OPERAND (targ, 0), current_function_decl, NULL);
5217   }
5218
5219   /* Don't let anything else be handled specially.  */
5220   return NULL_TREE;
5221 }
5222 \f
5223 /* Mark EXP saying that we need to be able to take the
5224    address of it; it should not be allocated in a register.
5225    Value is true if successful.
5226
5227    C++: we do not allow `current_class_ptr' to be addressable.  */
5228
5229 bool
5230 cxx_mark_addressable (tree exp)
5231 {
5232   tree x = exp;
5233
5234   while (1)
5235     switch (TREE_CODE (x))
5236       {
5237       case ADDR_EXPR:
5238       case COMPONENT_REF:
5239       case ARRAY_REF:
5240       case REALPART_EXPR:
5241       case IMAGPART_EXPR:
5242         x = TREE_OPERAND (x, 0);
5243         break;
5244
5245       case PARM_DECL:
5246         if (x == current_class_ptr)
5247           {
5248             error ("cannot take the address of %<this%>, which is an rvalue expression");
5249             TREE_ADDRESSABLE (x) = 1; /* so compiler doesn't die later.  */
5250             return true;
5251           }
5252         /* Fall through.  */
5253
5254       case VAR_DECL:
5255         /* Caller should not be trying to mark initialized
5256            constant fields addressable.  */
5257         gcc_assert (DECL_LANG_SPECIFIC (x) == 0
5258                     || DECL_IN_AGGR_P (x) == 0
5259                     || TREE_STATIC (x)
5260                     || DECL_EXTERNAL (x));
5261         /* Fall through.  */
5262
5263       case CONST_DECL:
5264       case RESULT_DECL:
5265         if (DECL_REGISTER (x) && !TREE_ADDRESSABLE (x)
5266             && !DECL_ARTIFICIAL (x))
5267           {
5268             if (TREE_CODE (x) == VAR_DECL && DECL_HARD_REGISTER (x))
5269               {
5270                 error
5271                   ("address of explicit register variable %qD requested", x);
5272                 return false;
5273               }
5274             else if (extra_warnings)
5275               warning
5276                 (OPT_Wextra, "address requested for %qD, which is declared %<register%>", x);
5277           }
5278         TREE_ADDRESSABLE (x) = 1;
5279         return true;
5280
5281       case FUNCTION_DECL:
5282         TREE_ADDRESSABLE (x) = 1;
5283         return true;
5284
5285       case CONSTRUCTOR:
5286         TREE_ADDRESSABLE (x) = 1;
5287         return true;
5288
5289       case TARGET_EXPR:
5290         TREE_ADDRESSABLE (x) = 1;
5291         cxx_mark_addressable (TREE_OPERAND (x, 0));
5292         return true;
5293
5294       default:
5295         return true;
5296     }
5297 }
5298 \f
5299 /* Build and return a conditional expression IFEXP ? OP1 : OP2.  */
5300
5301 tree
5302 build_x_conditional_expr (tree ifexp, tree op1, tree op2, 
5303                           tsubst_flags_t complain)
5304 {
5305   tree orig_ifexp = ifexp;
5306   tree orig_op1 = op1;
5307   tree orig_op2 = op2;
5308   tree expr;
5309
5310   if (processing_template_decl)
5311     {
5312       /* The standard says that the expression is type-dependent if
5313          IFEXP is type-dependent, even though the eventual type of the
5314          expression doesn't dependent on IFEXP.  */
5315       if (type_dependent_expression_p (ifexp)
5316           /* As a GNU extension, the middle operand may be omitted.  */
5317           || (op1 && type_dependent_expression_p (op1))
5318           || type_dependent_expression_p (op2))
5319         return build_min_nt (COND_EXPR, ifexp, op1, op2);
5320       ifexp = build_non_dependent_expr (ifexp);
5321       if (op1)
5322         op1 = build_non_dependent_expr (op1);
5323       op2 = build_non_dependent_expr (op2);
5324     }
5325
5326   expr = build_conditional_expr (ifexp, op1, op2, complain);
5327   if (processing_template_decl && expr != error_mark_node)
5328     return build_min_non_dep (COND_EXPR, expr,
5329                               orig_ifexp, orig_op1, orig_op2);
5330   return expr;
5331 }
5332 \f
5333 /* Given a list of expressions, return a compound expression
5334    that performs them all and returns the value of the last of them.  */
5335
5336 tree build_x_compound_expr_from_list (tree list, const char *msg)
5337 {
5338   tree expr = TREE_VALUE (list);
5339
5340   if (TREE_CHAIN (list))
5341     {
5342       if (msg)
5343         permerror (input_location, "%s expression list treated as compound expression", msg);
5344
5345       for (list = TREE_CHAIN (list); list; list = TREE_CHAIN (list))
5346         expr = build_x_compound_expr (expr, TREE_VALUE (list), 
5347                                       tf_warning_or_error);
5348     }
5349
5350   return expr;
5351 }
5352
5353 /* Like build_x_compound_expr_from_list, but using a VEC.  */
5354
5355 tree
5356 build_x_compound_expr_from_vec (VEC(tree,gc) *vec, const char *msg)
5357 {
5358   if (VEC_empty (tree, vec))
5359     return NULL_TREE;
5360   else if (VEC_length (tree, vec) == 1)
5361     return VEC_index (tree, vec, 0);
5362   else
5363     {
5364       tree expr;
5365       unsigned int ix;
5366       tree t;
5367
5368       if (msg != NULL)
5369         permerror (input_location,
5370                    "%s expression list treated as compound expression",
5371                    msg);
5372
5373       expr = VEC_index (tree, vec, 0);
5374       for (ix = 1; VEC_iterate (tree, vec, ix, t); ++ix)
5375         expr = build_x_compound_expr (expr, t, tf_warning_or_error);
5376
5377       return expr;
5378     }
5379 }
5380
5381 /* Handle overloading of the ',' operator when needed.  */
5382
5383 tree
5384 build_x_compound_expr (tree op1, tree op2, tsubst_flags_t complain)
5385 {
5386   tree result;
5387   tree orig_op1 = op1;
5388   tree orig_op2 = op2;
5389
5390   if (processing_template_decl)
5391     {
5392       if (type_dependent_expression_p (op1)
5393           || type_dependent_expression_p (op2))
5394         return build_min_nt (COMPOUND_EXPR, op1, op2);
5395       op1 = build_non_dependent_expr (op1);
5396       op2 = build_non_dependent_expr (op2);
5397     }
5398
5399   result = build_new_op (COMPOUND_EXPR, LOOKUP_NORMAL, op1, op2, NULL_TREE,
5400                          /*overloaded_p=*/NULL, complain);
5401   if (!result)
5402     result = cp_build_compound_expr (op1, op2, complain);
5403
5404   if (processing_template_decl && result != error_mark_node)
5405     return build_min_non_dep (COMPOUND_EXPR, result, orig_op1, orig_op2);
5406
5407   return result;
5408 }
5409
5410 /* Like cp_build_compound_expr, but for the c-common bits.  */
5411
5412 tree
5413 build_compound_expr (location_t loc ATTRIBUTE_UNUSED, tree lhs, tree rhs)
5414 {
5415   return cp_build_compound_expr (lhs, rhs, tf_warning_or_error);
5416 }
5417
5418 /* Build a compound expression.  */
5419
5420 tree
5421 cp_build_compound_expr (tree lhs, tree rhs, tsubst_flags_t complain)
5422 {
5423   lhs = convert_to_void (lhs, "left-hand operand of comma", complain);
5424
5425   if (lhs == error_mark_node || rhs == error_mark_node)
5426     return error_mark_node;
5427
5428   if (TREE_CODE (rhs) == TARGET_EXPR)
5429     {
5430       /* If the rhs is a TARGET_EXPR, then build the compound
5431          expression inside the target_expr's initializer. This
5432          helps the compiler to eliminate unnecessary temporaries.  */
5433       tree init = TREE_OPERAND (rhs, 1);
5434
5435       init = build2 (COMPOUND_EXPR, TREE_TYPE (init), lhs, init);
5436       TREE_OPERAND (rhs, 1) = init;
5437
5438       return rhs;
5439     }
5440
5441   if (type_unknown_p (rhs))
5442     {
5443       error ("no context to resolve type of %qE", rhs);
5444       return error_mark_node;
5445     }
5446   
5447   return build2 (COMPOUND_EXPR, TREE_TYPE (rhs), lhs, rhs);
5448 }
5449
5450 /* Issue a diagnostic message if casting from SRC_TYPE to DEST_TYPE
5451    casts away constness.  CAST gives the type of cast.  
5452
5453    ??? This function warns for casting away any qualifier not just
5454    const.  We would like to specify exactly what qualifiers are casted
5455    away.
5456 */
5457
5458 static void
5459 check_for_casting_away_constness (tree src_type, tree dest_type,
5460                                   enum tree_code cast)
5461 {
5462   /* C-style casts are allowed to cast away constness.  With
5463      WARN_CAST_QUAL, we still want to issue a warning.  */
5464   if (cast == CAST_EXPR && !warn_cast_qual)
5465       return;
5466   
5467   if (!casts_away_constness (src_type, dest_type))
5468     return;
5469
5470   switch (cast)
5471     {
5472     case CAST_EXPR:
5473       warning (OPT_Wcast_qual, 
5474                "cast from type %qT to type %qT casts away qualifiers",
5475                src_type, dest_type);
5476       return;
5477       
5478     case STATIC_CAST_EXPR:
5479       error ("static_cast from type %qT to type %qT casts away qualifiers",
5480              src_type, dest_type);
5481       return;
5482       
5483     case REINTERPRET_CAST_EXPR:
5484       error ("reinterpret_cast from type %qT to type %qT casts away qualifiers",
5485              src_type, dest_type);
5486       return;
5487     default:
5488       gcc_unreachable();
5489     }
5490 }
5491
5492 /* Convert EXPR (an expression with pointer-to-member type) to TYPE
5493    (another pointer-to-member type in the same hierarchy) and return
5494    the converted expression.  If ALLOW_INVERSE_P is permitted, a
5495    pointer-to-derived may be converted to pointer-to-base; otherwise,
5496    only the other direction is permitted.  If C_CAST_P is true, this
5497    conversion is taking place as part of a C-style cast.  */
5498
5499 tree
5500 convert_ptrmem (tree type, tree expr, bool allow_inverse_p,
5501                 bool c_cast_p)
5502 {
5503   if (TYPE_PTRMEM_P (type))
5504     {
5505       tree delta;
5506
5507       if (TREE_CODE (expr) == PTRMEM_CST)
5508         expr = cplus_expand_constant (expr);
5509       delta = get_delta_difference (TYPE_PTRMEM_CLASS_TYPE (TREE_TYPE (expr)),
5510                                     TYPE_PTRMEM_CLASS_TYPE (type),
5511                                     allow_inverse_p,
5512                                     c_cast_p);
5513       if (!integer_zerop (delta))
5514         {
5515           tree cond, op1, op2;
5516
5517           cond = cp_build_binary_op (input_location,
5518                                      EQ_EXPR,
5519                                      expr,
5520                                      build_int_cst (TREE_TYPE (expr), -1),
5521                                      tf_warning_or_error);
5522           op1 = build_nop (ptrdiff_type_node, expr);
5523           op2 = cp_build_binary_op (input_location,
5524                                     PLUS_EXPR, op1, delta,
5525                                     tf_warning_or_error);
5526
5527           expr = fold_build3_loc (input_location,
5528                               COND_EXPR, ptrdiff_type_node, cond, op1, op2);
5529                          
5530         }
5531
5532       return build_nop (type, expr);
5533     }
5534   else
5535     return build_ptrmemfunc (TYPE_PTRMEMFUNC_FN_TYPE (type), expr,
5536                              allow_inverse_p, c_cast_p);
5537 }
5538
5539 /* If EXPR is an INTEGER_CST and ORIG is an arithmetic constant, return
5540    a version of EXPR that has TREE_OVERFLOW set if it is set in ORIG.
5541    Otherwise, return EXPR unchanged.  */
5542
5543 static tree
5544 ignore_overflows (tree expr, tree orig)
5545 {
5546   if (TREE_CODE (expr) == INTEGER_CST
5547       && CONSTANT_CLASS_P (orig)
5548       && TREE_CODE (orig) != STRING_CST
5549       && TREE_OVERFLOW (expr) != TREE_OVERFLOW (orig))
5550     {
5551       if (!TREE_OVERFLOW (orig))
5552         /* Ensure constant sharing.  */
5553         expr = build_int_cst_wide (TREE_TYPE (expr),
5554                                    TREE_INT_CST_LOW (expr),
5555                                    TREE_INT_CST_HIGH (expr));
5556       else
5557         {
5558           /* Avoid clobbering a shared constant.  */
5559           expr = copy_node (expr);
5560           TREE_OVERFLOW (expr) = TREE_OVERFLOW (orig);
5561         }
5562     }
5563   return expr;
5564 }
5565
5566 /* Perform a static_cast from EXPR to TYPE.  When C_CAST_P is true,
5567    this static_cast is being attempted as one of the possible casts
5568    allowed by a C-style cast.  (In that case, accessibility of base
5569    classes is not considered, and it is OK to cast away
5570    constness.)  Return the result of the cast.  *VALID_P is set to
5571    indicate whether or not the cast was valid.  */
5572
5573 static tree
5574 build_static_cast_1 (tree type, tree expr, bool c_cast_p,
5575                      bool *valid_p, tsubst_flags_t complain)
5576 {
5577   tree intype;
5578   tree result;
5579   tree orig;
5580
5581   /* Assume the cast is valid.  */
5582   *valid_p = true;
5583
5584   intype = TREE_TYPE (expr);
5585
5586   /* Save casted types in the function's used types hash table.  */
5587   used_types_insert (type);
5588
5589   /* [expr.static.cast]
5590
5591      An lvalue of type "cv1 B", where B is a class type, can be cast
5592      to type "reference to cv2 D", where D is a class derived (clause
5593      _class.derived_) from B, if a valid standard conversion from
5594      "pointer to D" to "pointer to B" exists (_conv.ptr_), cv2 is the
5595      same cv-qualification as, or greater cv-qualification than, cv1,
5596      and B is not a virtual base class of D.  */
5597   /* We check this case before checking the validity of "TYPE t =
5598      EXPR;" below because for this case:
5599
5600        struct B {};
5601        struct D : public B { D(const B&); };
5602        extern B& b;
5603        void f() { static_cast<const D&>(b); }
5604
5605      we want to avoid constructing a new D.  The standard is not
5606      completely clear about this issue, but our interpretation is
5607      consistent with other compilers.  */
5608   if (TREE_CODE (type) == REFERENCE_TYPE
5609       && CLASS_TYPE_P (TREE_TYPE (type))
5610       && CLASS_TYPE_P (intype)
5611       && (TYPE_REF_IS_RVALUE (type) || real_lvalue_p (expr))
5612       && DERIVED_FROM_P (intype, TREE_TYPE (type))
5613       && can_convert (build_pointer_type (TYPE_MAIN_VARIANT (intype)),
5614                       build_pointer_type (TYPE_MAIN_VARIANT
5615                                           (TREE_TYPE (type))))
5616       && (c_cast_p
5617           || at_least_as_qualified_p (TREE_TYPE (type), intype)))
5618     {
5619       tree base;
5620
5621       /* There is a standard conversion from "D*" to "B*" even if "B"
5622          is ambiguous or inaccessible.  If this is really a
5623          static_cast, then we check both for inaccessibility and
5624          ambiguity.  However, if this is a static_cast being performed
5625          because the user wrote a C-style cast, then accessibility is
5626          not considered.  */
5627       base = lookup_base (TREE_TYPE (type), intype,
5628                           c_cast_p ? ba_unique : ba_check,
5629                           NULL);
5630
5631       /* Convert from "B*" to "D*".  This function will check that "B"
5632          is not a virtual base of "D".  */
5633       expr = build_base_path (MINUS_EXPR, build_address (expr),
5634                               base, /*nonnull=*/false);
5635       /* Convert the pointer to a reference -- but then remember that
5636          there are no expressions with reference type in C++.  */
5637       return convert_from_reference (cp_fold_convert (type, expr));
5638     }
5639
5640   /* "An lvalue of type cv1 T1 can be cast to type rvalue reference to
5641      cv2 T2 if cv2 T2 is reference-compatible with cv1 T1 (8.5.3)."  */
5642   if (TREE_CODE (type) == REFERENCE_TYPE
5643       && TYPE_REF_IS_RVALUE (type)
5644       && real_lvalue_p (expr)
5645       && reference_related_p (TREE_TYPE (type), intype)
5646       && (c_cast_p || at_least_as_qualified_p (TREE_TYPE (type), intype)))
5647     {
5648       expr = build_typed_address (expr, type);
5649       return convert_from_reference (expr);
5650     }
5651
5652   orig = expr;
5653
5654   /* Resolve overloaded address here rather than once in
5655      implicit_conversion and again in the inverse code below.  */
5656   if (TYPE_PTRMEMFUNC_P (type) && type_unknown_p (expr))
5657     {
5658       expr = instantiate_type (type, expr, complain);
5659       intype = TREE_TYPE (expr);
5660     }
5661
5662   /* [expr.static.cast]
5663
5664      An expression e can be explicitly converted to a type T using a
5665      static_cast of the form static_cast<T>(e) if the declaration T
5666      t(e);" is well-formed, for some invented temporary variable
5667      t.  */
5668   result = perform_direct_initialization_if_possible (type, expr,
5669                                                       c_cast_p, complain);
5670   if (result)
5671     {
5672       result = convert_from_reference (result);
5673
5674       /* Ignore any integer overflow caused by the cast.  */
5675       result = ignore_overflows (result, orig);
5676
5677       /* [expr.static.cast]
5678
5679          If T is a reference type, the result is an lvalue; otherwise,
5680          the result is an rvalue.  */
5681       if (TREE_CODE (type) != REFERENCE_TYPE)
5682         result = rvalue (result);
5683       return result;
5684     }
5685
5686   /* [expr.static.cast]
5687
5688      Any expression can be explicitly converted to type cv void.  */
5689   if (TREE_CODE (type) == VOID_TYPE)
5690     return convert_to_void (expr, /*implicit=*/NULL, complain);
5691
5692   /* [expr.static.cast]
5693
5694      The inverse of any standard conversion sequence (clause _conv_),
5695      other than the lvalue-to-rvalue (_conv.lval_), array-to-pointer
5696      (_conv.array_), function-to-pointer (_conv.func_), and boolean
5697      (_conv.bool_) conversions, can be performed explicitly using
5698      static_cast subject to the restriction that the explicit
5699      conversion does not cast away constness (_expr.const.cast_), and
5700      the following additional rules for specific cases:  */
5701   /* For reference, the conversions not excluded are: integral
5702      promotions, floating point promotion, integral conversions,
5703      floating point conversions, floating-integral conversions,
5704      pointer conversions, and pointer to member conversions.  */
5705   /* DR 128
5706
5707      A value of integral _or enumeration_ type can be explicitly
5708      converted to an enumeration type.  */
5709   /* The effect of all that is that any conversion between any two
5710      types which are integral, floating, or enumeration types can be
5711      performed.  */
5712   if ((INTEGRAL_OR_ENUMERATION_TYPE_P (type)
5713        || SCALAR_FLOAT_TYPE_P (type))
5714       && (INTEGRAL_OR_ENUMERATION_TYPE_P (intype)
5715           || SCALAR_FLOAT_TYPE_P (intype)))
5716     {
5717       expr = ocp_convert (type, expr, CONV_C_CAST, LOOKUP_NORMAL);
5718
5719       /* Ignore any integer overflow caused by the cast.  */
5720       expr = ignore_overflows (expr, orig);
5721       return expr;
5722     }
5723
5724   if (TYPE_PTR_P (type) && TYPE_PTR_P (intype)
5725       && CLASS_TYPE_P (TREE_TYPE (type))
5726       && CLASS_TYPE_P (TREE_TYPE (intype))
5727       && can_convert (build_pointer_type (TYPE_MAIN_VARIANT
5728                                           (TREE_TYPE (intype))),
5729                       build_pointer_type (TYPE_MAIN_VARIANT
5730                                           (TREE_TYPE (type)))))
5731     {
5732       tree base;
5733
5734       if (!c_cast_p)
5735         check_for_casting_away_constness (intype, type, STATIC_CAST_EXPR);
5736       base = lookup_base (TREE_TYPE (type), TREE_TYPE (intype),
5737                           c_cast_p ? ba_unique : ba_check,
5738                           NULL);
5739       return build_base_path (MINUS_EXPR, expr, base, /*nonnull=*/false);
5740     }
5741
5742   if ((TYPE_PTRMEM_P (type) && TYPE_PTRMEM_P (intype))
5743       || (TYPE_PTRMEMFUNC_P (type) && TYPE_PTRMEMFUNC_P (intype)))
5744     {
5745       tree c1;
5746       tree c2;
5747       tree t1;
5748       tree t2;
5749
5750       c1 = TYPE_PTRMEM_CLASS_TYPE (intype);
5751       c2 = TYPE_PTRMEM_CLASS_TYPE (type);
5752
5753       if (TYPE_PTRMEM_P (type))
5754         {
5755           t1 = (build_ptrmem_type
5756                 (c1,
5757                  TYPE_MAIN_VARIANT (TYPE_PTRMEM_POINTED_TO_TYPE (intype))));
5758           t2 = (build_ptrmem_type
5759                 (c2,
5760                  TYPE_MAIN_VARIANT (TYPE_PTRMEM_POINTED_TO_TYPE (type))));
5761         }
5762       else
5763         {
5764           t1 = intype;
5765           t2 = type;
5766         }
5767       if (can_convert (t1, t2) || can_convert (t2, t1))
5768         {
5769           if (!c_cast_p)
5770             check_for_casting_away_constness (intype, type, STATIC_CAST_EXPR);
5771           return convert_ptrmem (type, expr, /*allow_inverse_p=*/1,
5772                                  c_cast_p);
5773         }
5774     }
5775
5776   /* [expr.static.cast]
5777
5778      An rvalue of type "pointer to cv void" can be explicitly
5779      converted to a pointer to object type.  A value of type pointer
5780      to object converted to "pointer to cv void" and back to the
5781      original pointer type will have its original value.  */
5782   if (TREE_CODE (intype) == POINTER_TYPE
5783       && VOID_TYPE_P (TREE_TYPE (intype))
5784       && TYPE_PTROB_P (type))
5785     {
5786       if (!c_cast_p)
5787         check_for_casting_away_constness (intype, type, STATIC_CAST_EXPR);
5788       return build_nop (type, expr);
5789     }
5790
5791   *valid_p = false;
5792   return error_mark_node;
5793 }
5794
5795 /* Return an expression representing static_cast<TYPE>(EXPR).  */
5796
5797 tree
5798 build_static_cast (tree type, tree expr, tsubst_flags_t complain)
5799 {
5800   tree result;
5801   bool valid_p;
5802
5803   if (type == error_mark_node || expr == error_mark_node)
5804     return error_mark_node;
5805
5806   if (processing_template_decl)
5807     {
5808       expr = build_min (STATIC_CAST_EXPR, type, expr);
5809       /* We don't know if it will or will not have side effects.  */
5810       TREE_SIDE_EFFECTS (expr) = 1;
5811       return convert_from_reference (expr);
5812     }
5813
5814   /* build_c_cast puts on a NOP_EXPR to make the result not an lvalue.
5815      Strip such NOP_EXPRs if VALUE is being used in non-lvalue context.  */
5816   if (TREE_CODE (type) != REFERENCE_TYPE
5817       && TREE_CODE (expr) == NOP_EXPR
5818       && TREE_TYPE (expr) == TREE_TYPE (TREE_OPERAND (expr, 0)))
5819     expr = TREE_OPERAND (expr, 0);
5820
5821   result = build_static_cast_1 (type, expr, /*c_cast_p=*/false, &valid_p,
5822                                 complain);
5823   if (valid_p)
5824     return result;
5825
5826   if (complain & tf_error)
5827     error ("invalid static_cast from type %qT to type %qT",
5828            TREE_TYPE (expr), type);
5829   return error_mark_node;
5830 }
5831
5832 /* EXPR is an expression with member function or pointer-to-member
5833    function type.  TYPE is a pointer type.  Converting EXPR to TYPE is
5834    not permitted by ISO C++, but we accept it in some modes.  If we
5835    are not in one of those modes, issue a diagnostic.  Return the
5836    converted expression.  */
5837
5838 tree
5839 convert_member_func_to_ptr (tree type, tree expr)
5840 {
5841   tree intype;
5842   tree decl;
5843
5844   intype = TREE_TYPE (expr);
5845   gcc_assert (TYPE_PTRMEMFUNC_P (intype)
5846               || TREE_CODE (intype) == METHOD_TYPE);
5847
5848   if (pedantic || warn_pmf2ptr)
5849     pedwarn (input_location, pedantic ? OPT_pedantic : OPT_Wpmf_conversions,
5850              "converting from %qT to %qT", intype, type);
5851
5852   if (TREE_CODE (intype) == METHOD_TYPE)
5853     expr = build_addr_func (expr);
5854   else if (TREE_CODE (expr) == PTRMEM_CST)
5855     expr = build_address (PTRMEM_CST_MEMBER (expr));
5856   else
5857     {
5858       decl = maybe_dummy_object (TYPE_PTRMEM_CLASS_TYPE (intype), 0);
5859       decl = build_address (decl);
5860       expr = get_member_function_from_ptrfunc (&decl, expr);
5861     }
5862
5863   return build_nop (type, expr);
5864 }
5865
5866 /* Return a representation for a reinterpret_cast from EXPR to TYPE.
5867    If C_CAST_P is true, this reinterpret cast is being done as part of
5868    a C-style cast.  If VALID_P is non-NULL, *VALID_P is set to
5869    indicate whether or not reinterpret_cast was valid.  */
5870
5871 static tree
5872 build_reinterpret_cast_1 (tree type, tree expr, bool c_cast_p,
5873                           bool *valid_p, tsubst_flags_t complain)
5874 {
5875   tree intype;
5876
5877   /* Assume the cast is invalid.  */
5878   if (valid_p)
5879     *valid_p = true;
5880
5881   if (type == error_mark_node || error_operand_p (expr))
5882     return error_mark_node;
5883
5884   intype = TREE_TYPE (expr);
5885
5886   /* Save casted types in the function's used types hash table.  */
5887   used_types_insert (type);
5888
5889   /* [expr.reinterpret.cast]
5890      An lvalue expression of type T1 can be cast to the type
5891      "reference to T2" if an expression of type "pointer to T1" can be
5892      explicitly converted to the type "pointer to T2" using a
5893      reinterpret_cast.  */
5894   if (TREE_CODE (type) == REFERENCE_TYPE)
5895     {
5896       if (! real_lvalue_p (expr))
5897         {
5898           if (complain & tf_error)
5899             error ("invalid cast of an rvalue expression of type "
5900                    "%qT to type %qT",
5901                    intype, type);
5902           return error_mark_node;
5903         }
5904
5905       /* Warn about a reinterpret_cast from "A*" to "B&" if "A" and
5906          "B" are related class types; the reinterpret_cast does not
5907          adjust the pointer.  */
5908       if (TYPE_PTR_P (intype)
5909           && (complain & tf_warning)
5910           && (comptypes (TREE_TYPE (intype), TREE_TYPE (type),
5911                          COMPARE_BASE | COMPARE_DERIVED)))
5912         warning (0, "casting %qT to %qT does not dereference pointer",
5913                  intype, type);
5914
5915       expr = cp_build_unary_op (ADDR_EXPR, expr, 0, complain);
5916
5917       if (warn_strict_aliasing > 2)
5918         strict_aliasing_warning (TREE_TYPE (expr), type, expr);
5919
5920       if (expr != error_mark_node)
5921         expr = build_reinterpret_cast_1
5922           (build_pointer_type (TREE_TYPE (type)), expr, c_cast_p,
5923            valid_p, complain);
5924       if (expr != error_mark_node)
5925         /* cp_build_indirect_ref isn't right for rvalue refs.  */
5926         expr = convert_from_reference (fold_convert (type, expr));
5927       return expr;
5928     }
5929
5930   /* As a G++ extension, we consider conversions from member
5931      functions, and pointers to member functions to
5932      pointer-to-function and pointer-to-void types.  If
5933      -Wno-pmf-conversions has not been specified,
5934      convert_member_func_to_ptr will issue an error message.  */
5935   if ((TYPE_PTRMEMFUNC_P (intype)
5936        || TREE_CODE (intype) == METHOD_TYPE)
5937       && TYPE_PTR_P (type)
5938       && (TREE_CODE (TREE_TYPE (type)) == FUNCTION_TYPE
5939           || VOID_TYPE_P (TREE_TYPE (type))))
5940     return convert_member_func_to_ptr (type, expr);
5941
5942   /* If the cast is not to a reference type, the lvalue-to-rvalue,
5943      array-to-pointer, and function-to-pointer conversions are
5944      performed.  */
5945   expr = decay_conversion (expr);
5946
5947   /* build_c_cast puts on a NOP_EXPR to make the result not an lvalue.
5948      Strip such NOP_EXPRs if VALUE is being used in non-lvalue context.  */
5949   if (TREE_CODE (expr) == NOP_EXPR
5950       && TREE_TYPE (expr) == TREE_TYPE (TREE_OPERAND (expr, 0)))
5951     expr = TREE_OPERAND (expr, 0);
5952
5953   if (error_operand_p (expr))
5954     return error_mark_node;
5955
5956   intype = TREE_TYPE (expr);
5957
5958   /* [expr.reinterpret.cast]
5959      A pointer can be converted to any integral type large enough to
5960      hold it.  */
5961   if (CP_INTEGRAL_TYPE_P (type) && TYPE_PTR_P (intype))
5962     {
5963       if (TYPE_PRECISION (type) < TYPE_PRECISION (intype))
5964         {
5965           if (complain & tf_error)
5966             permerror (input_location, "cast from %qT to %qT loses precision",
5967                        intype, type);
5968           else
5969             return error_mark_node;
5970         }
5971     }
5972   /* [expr.reinterpret.cast]
5973      A value of integral or enumeration type can be explicitly
5974      converted to a pointer.  */
5975   else if (TYPE_PTR_P (type) && INTEGRAL_OR_ENUMERATION_TYPE_P (intype))
5976     /* OK */
5977     ;
5978   else if ((TYPE_PTRFN_P (type) && TYPE_PTRFN_P (intype))
5979            || (TYPE_PTRMEMFUNC_P (type) && TYPE_PTRMEMFUNC_P (intype)))
5980     return fold_if_not_in_template (build_nop (type, expr));
5981   else if ((TYPE_PTRMEM_P (type) && TYPE_PTRMEM_P (intype))
5982            || (TYPE_PTROBV_P (type) && TYPE_PTROBV_P (intype)))
5983     {
5984       tree sexpr = expr;
5985
5986       if (!c_cast_p)
5987         check_for_casting_away_constness (intype, type, REINTERPRET_CAST_EXPR);
5988       /* Warn about possible alignment problems.  */
5989       if (STRICT_ALIGNMENT && warn_cast_align
5990           && (complain & tf_warning)
5991           && !VOID_TYPE_P (type)
5992           && TREE_CODE (TREE_TYPE (intype)) != FUNCTION_TYPE
5993           && COMPLETE_TYPE_P (TREE_TYPE (type))
5994           && COMPLETE_TYPE_P (TREE_TYPE (intype))
5995           && TYPE_ALIGN (TREE_TYPE (type)) > TYPE_ALIGN (TREE_TYPE (intype)))
5996         warning (OPT_Wcast_align, "cast from %qT to %qT "
5997                  "increases required alignment of target type", intype, type);
5998
5999       /* We need to strip nops here, because the front end likes to
6000          create (int *)&a for array-to-pointer decay, instead of &a[0].  */
6001       STRIP_NOPS (sexpr);
6002       if (warn_strict_aliasing <= 2)
6003         strict_aliasing_warning (intype, type, sexpr);
6004
6005       return fold_if_not_in_template (build_nop (type, expr));
6006     }
6007   else if ((TYPE_PTRFN_P (type) && TYPE_PTROBV_P (intype))
6008            || (TYPE_PTRFN_P (intype) && TYPE_PTROBV_P (type)))
6009     {
6010       if (pedantic && (complain & tf_warning))
6011         /* Only issue a warning, as we have always supported this
6012            where possible, and it is necessary in some cases.  DR 195
6013            addresses this issue, but as of 2004/10/26 is still in
6014            drafting.  */
6015         warning (0, "ISO C++ forbids casting between pointer-to-function and pointer-to-object");
6016       return fold_if_not_in_template (build_nop (type, expr));
6017     }
6018   else if (TREE_CODE (type) == VECTOR_TYPE)
6019     return fold_if_not_in_template (convert_to_vector (type, expr));
6020   else if (TREE_CODE (intype) == VECTOR_TYPE
6021            && INTEGRAL_OR_ENUMERATION_TYPE_P (type))
6022     return fold_if_not_in_template (convert_to_integer (type, expr));
6023   else
6024     {
6025       if (valid_p)
6026         *valid_p = false;
6027       if (complain & tf_error)
6028         error ("invalid cast from type %qT to type %qT", intype, type);
6029       return error_mark_node;
6030     }
6031
6032   return cp_convert (type, expr);
6033 }
6034
6035 tree
6036 build_reinterpret_cast (tree type, tree expr, tsubst_flags_t complain)
6037 {
6038   if (type == error_mark_node || expr == error_mark_node)
6039     return error_mark_node;
6040
6041   if (processing_template_decl)
6042     {
6043       tree t = build_min (REINTERPRET_CAST_EXPR, type, expr);
6044
6045       if (!TREE_SIDE_EFFECTS (t)
6046           && type_dependent_expression_p (expr))
6047         /* There might turn out to be side effects inside expr.  */
6048         TREE_SIDE_EFFECTS (t) = 1;
6049       return convert_from_reference (t);
6050     }
6051
6052   return build_reinterpret_cast_1 (type, expr, /*c_cast_p=*/false,
6053                                    /*valid_p=*/NULL, complain);
6054 }
6055
6056 /* Perform a const_cast from EXPR to TYPE.  If the cast is valid,
6057    return an appropriate expression.  Otherwise, return
6058    error_mark_node.  If the cast is not valid, and COMPLAIN is true,
6059    then a diagnostic will be issued.  If VALID_P is non-NULL, we are
6060    performing a C-style cast, its value upon return will indicate
6061    whether or not the conversion succeeded.  */
6062
6063 static tree
6064 build_const_cast_1 (tree dst_type, tree expr, bool complain,
6065                     bool *valid_p)
6066 {
6067   tree src_type;
6068   tree reference_type;
6069
6070   /* Callers are responsible for handling error_mark_node as a
6071      destination type.  */
6072   gcc_assert (dst_type != error_mark_node);
6073   /* In a template, callers should be building syntactic
6074      representations of casts, not using this machinery.  */
6075   gcc_assert (!processing_template_decl);
6076
6077   /* Assume the conversion is invalid.  */
6078   if (valid_p)
6079     *valid_p = false;
6080
6081   if (!POINTER_TYPE_P (dst_type) && !TYPE_PTRMEM_P (dst_type))
6082     {
6083       if (complain)
6084         error ("invalid use of const_cast with type %qT, "
6085                "which is not a pointer, "
6086                "reference, nor a pointer-to-data-member type", dst_type);
6087       return error_mark_node;
6088     }
6089
6090   if (TREE_CODE (TREE_TYPE (dst_type)) == FUNCTION_TYPE)
6091     {
6092       if (complain)
6093         error ("invalid use of const_cast with type %qT, which is a pointer "
6094                "or reference to a function type", dst_type);
6095       return error_mark_node;
6096     }
6097
6098   /* Save casted types in the function's used types hash table.  */
6099   used_types_insert (dst_type);
6100
6101   src_type = TREE_TYPE (expr);
6102   /* Expressions do not really have reference types.  */
6103   if (TREE_CODE (src_type) == REFERENCE_TYPE)
6104     src_type = TREE_TYPE (src_type);
6105
6106   /* [expr.const.cast]
6107
6108      An lvalue of type T1 can be explicitly converted to an lvalue of
6109      type T2 using the cast const_cast<T2&> (where T1 and T2 are object
6110      types) if a pointer to T1 can be explicitly converted to the type
6111      pointer to T2 using a const_cast.  */
6112   if (TREE_CODE (dst_type) == REFERENCE_TYPE)
6113     {
6114       reference_type = dst_type;
6115       if (! real_lvalue_p (expr))
6116         {
6117           if (complain)
6118             error ("invalid const_cast of an rvalue of type %qT to type %qT",
6119                    src_type, dst_type);
6120           return error_mark_node;
6121         }
6122       dst_type = build_pointer_type (TREE_TYPE (dst_type));
6123       src_type = build_pointer_type (src_type);
6124     }
6125   else
6126     {
6127       reference_type = NULL_TREE;
6128       /* If the destination type is not a reference type, the
6129          lvalue-to-rvalue, array-to-pointer, and function-to-pointer
6130          conversions are performed.  */
6131       src_type = type_decays_to (src_type);
6132       if (src_type == error_mark_node)
6133         return error_mark_node;
6134     }
6135
6136   if ((TYPE_PTR_P (src_type) || TYPE_PTRMEM_P (src_type))
6137       && comp_ptr_ttypes_const (dst_type, src_type))
6138     {
6139       if (valid_p)
6140         {
6141           *valid_p = true;
6142           /* This cast is actually a C-style cast.  Issue a warning if
6143              the user is making a potentially unsafe cast.  */
6144           check_for_casting_away_constness (src_type, dst_type, CAST_EXPR);
6145         }
6146       if (reference_type)
6147         {
6148           expr = cp_build_unary_op (ADDR_EXPR, expr, 0, 
6149                                     complain? tf_warning_or_error : tf_none);
6150           expr = build_nop (reference_type, expr);
6151           return convert_from_reference (expr);
6152         }
6153       else
6154         {
6155           expr = decay_conversion (expr);
6156           /* build_c_cast puts on a NOP_EXPR to make the result not an
6157              lvalue.  Strip such NOP_EXPRs if VALUE is being used in
6158              non-lvalue context.  */
6159           if (TREE_CODE (expr) == NOP_EXPR
6160               && TREE_TYPE (expr) == TREE_TYPE (TREE_OPERAND (expr, 0)))
6161             expr = TREE_OPERAND (expr, 0);
6162           return build_nop (dst_type, expr);
6163         }
6164     }
6165
6166   if (complain)
6167     error ("invalid const_cast from type %qT to type %qT",
6168            src_type, dst_type);
6169   return error_mark_node;
6170 }
6171
6172 tree
6173 build_const_cast (tree type, tree expr, tsubst_flags_t complain)
6174 {
6175   if (type == error_mark_node || error_operand_p (expr))
6176     return error_mark_node;
6177
6178   if (processing_template_decl)
6179     {
6180       tree t = build_min (CONST_CAST_EXPR, type, expr);
6181
6182       if (!TREE_SIDE_EFFECTS (t)
6183           && type_dependent_expression_p (expr))
6184         /* There might turn out to be side effects inside expr.  */
6185         TREE_SIDE_EFFECTS (t) = 1;
6186       return convert_from_reference (t);
6187     }
6188
6189   return build_const_cast_1 (type, expr, complain & tf_error,
6190                              /*valid_p=*/NULL);
6191 }
6192
6193 /* Like cp_build_c_cast, but for the c-common bits.  */
6194
6195 tree
6196 build_c_cast (location_t loc ATTRIBUTE_UNUSED, tree type, tree expr)
6197 {
6198   return cp_build_c_cast (type, expr, tf_warning_or_error);
6199 }
6200
6201 /* Build an expression representing an explicit C-style cast to type
6202    TYPE of expression EXPR.  */
6203
6204 tree
6205 cp_build_c_cast (tree type, tree expr, tsubst_flags_t complain)
6206 {
6207   tree value = expr;
6208   tree result;
6209   bool valid_p;
6210
6211   if (type == error_mark_node || error_operand_p (expr))
6212     return error_mark_node;
6213
6214   if (processing_template_decl)
6215     {
6216       tree t = build_min (CAST_EXPR, type,
6217                           tree_cons (NULL_TREE, value, NULL_TREE));
6218       /* We don't know if it will or will not have side effects.  */
6219       TREE_SIDE_EFFECTS (t) = 1;
6220       return convert_from_reference (t);
6221     }
6222
6223   /* Casts to a (pointer to a) specific ObjC class (or 'id' or
6224      'Class') should always be retained, because this information aids
6225      in method lookup.  */
6226   if (objc_is_object_ptr (type)
6227       && objc_is_object_ptr (TREE_TYPE (expr)))
6228     return build_nop (type, expr);
6229
6230   /* build_c_cast puts on a NOP_EXPR to make the result not an lvalue.
6231      Strip such NOP_EXPRs if VALUE is being used in non-lvalue context.  */
6232   if (TREE_CODE (type) != REFERENCE_TYPE
6233       && TREE_CODE (value) == NOP_EXPR
6234       && TREE_TYPE (value) == TREE_TYPE (TREE_OPERAND (value, 0)))
6235     value = TREE_OPERAND (value, 0);
6236
6237   if (TREE_CODE (type) == ARRAY_TYPE)
6238     {
6239       /* Allow casting from T1* to T2[] because Cfront allows it.
6240          NIHCL uses it. It is not valid ISO C++ however.  */
6241       if (TREE_CODE (TREE_TYPE (expr)) == POINTER_TYPE)
6242         {
6243           if (complain & tf_error)
6244             permerror (input_location, "ISO C++ forbids casting to an array type %qT", type);
6245           else
6246             return error_mark_node;
6247           type = build_pointer_type (TREE_TYPE (type));
6248         }
6249       else
6250         {
6251           if (complain & tf_error)
6252             error ("ISO C++ forbids casting to an array type %qT", type);
6253           return error_mark_node;
6254         }
6255     }
6256
6257   if (TREE_CODE (type) == FUNCTION_TYPE
6258       || TREE_CODE (type) == METHOD_TYPE)
6259     {
6260       if (complain & tf_error)
6261         error ("invalid cast to function type %qT", type);
6262       return error_mark_node;
6263     }
6264
6265   /* A C-style cast can be a const_cast.  */
6266   result = build_const_cast_1 (type, value, /*complain=*/false,
6267                                &valid_p);
6268   if (valid_p)
6269     return result;
6270
6271   /* Or a static cast.  */
6272   result = build_static_cast_1 (type, value, /*c_cast_p=*/true,
6273                                 &valid_p, complain);
6274   /* Or a reinterpret_cast.  */
6275   if (!valid_p)
6276     result = build_reinterpret_cast_1 (type, value, /*c_cast_p=*/true,
6277                                        &valid_p, complain);
6278   /* The static_cast or reinterpret_cast may be followed by a
6279      const_cast.  */
6280   if (valid_p
6281       /* A valid cast may result in errors if, for example, a
6282          conversion to am ambiguous base class is required.  */
6283       && !error_operand_p (result))
6284     {
6285       tree result_type;
6286
6287       /* Non-class rvalues always have cv-unqualified type.  */
6288       if (!CLASS_TYPE_P (type))
6289         type = TYPE_MAIN_VARIANT (type);
6290       result_type = TREE_TYPE (result);
6291       if (!CLASS_TYPE_P (result_type))
6292         result_type = TYPE_MAIN_VARIANT (result_type);
6293       /* If the type of RESULT does not match TYPE, perform a
6294          const_cast to make it match.  If the static_cast or
6295          reinterpret_cast succeeded, we will differ by at most
6296          cv-qualification, so the follow-on const_cast is guaranteed
6297          to succeed.  */
6298       if (!same_type_p (non_reference (type), non_reference (result_type)))
6299         {
6300           result = build_const_cast_1 (type, result, false, &valid_p);
6301           gcc_assert (valid_p);
6302         }
6303       return result;
6304     }
6305
6306   return error_mark_node;
6307 }
6308 \f
6309 /* For use from the C common bits.  */
6310 tree
6311 build_modify_expr (location_t location ATTRIBUTE_UNUSED,
6312                    tree lhs, tree lhs_origtype ATTRIBUTE_UNUSED,
6313                    enum tree_code modifycode, 
6314                    location_t rhs_location ATTRIBUTE_UNUSED, tree rhs,
6315                    tree rhs_origtype ATTRIBUTE_UNUSED)
6316 {
6317   return cp_build_modify_expr (lhs, modifycode, rhs, tf_warning_or_error);
6318 }
6319
6320 /* Build an assignment expression of lvalue LHS from value RHS.
6321    MODIFYCODE is the code for a binary operator that we use
6322    to combine the old value of LHS with RHS to get the new value.
6323    Or else MODIFYCODE is NOP_EXPR meaning do a simple assignment.
6324
6325    C++: If MODIFYCODE is INIT_EXPR, then leave references unbashed.  */
6326
6327 tree
6328 cp_build_modify_expr (tree lhs, enum tree_code modifycode, tree rhs,
6329                       tsubst_flags_t complain)
6330 {
6331   tree result;
6332   tree newrhs = rhs;
6333   tree lhstype = TREE_TYPE (lhs);
6334   tree olhstype = lhstype;
6335   bool plain_assign = (modifycode == NOP_EXPR);
6336
6337   /* Avoid duplicate error messages from operands that had errors.  */
6338   if (error_operand_p (lhs) || error_operand_p (rhs))
6339     return error_mark_node;
6340
6341   /* Handle control structure constructs used as "lvalues".  */
6342   switch (TREE_CODE (lhs))
6343     {
6344       /* Handle --foo = 5; as these are valid constructs in C++.  */
6345     case PREDECREMENT_EXPR:
6346     case PREINCREMENT_EXPR:
6347       if (TREE_SIDE_EFFECTS (TREE_OPERAND (lhs, 0)))
6348         lhs = build2 (TREE_CODE (lhs), TREE_TYPE (lhs),
6349                       stabilize_reference (TREE_OPERAND (lhs, 0)),
6350                       TREE_OPERAND (lhs, 1));
6351       newrhs = cp_build_modify_expr (TREE_OPERAND (lhs, 0),
6352                                      modifycode, rhs, complain);
6353       if (newrhs == error_mark_node)
6354         return error_mark_node;
6355       return build2 (COMPOUND_EXPR, lhstype, lhs, newrhs);
6356
6357       /* Handle (a, b) used as an "lvalue".  */
6358     case COMPOUND_EXPR:
6359       newrhs = cp_build_modify_expr (TREE_OPERAND (lhs, 1),
6360                                      modifycode, rhs, complain);
6361       if (newrhs == error_mark_node)
6362         return error_mark_node;
6363       return build2 (COMPOUND_EXPR, lhstype,
6364                      TREE_OPERAND (lhs, 0), newrhs);
6365
6366     case MODIFY_EXPR:
6367       if (TREE_SIDE_EFFECTS (TREE_OPERAND (lhs, 0)))
6368         lhs = build2 (TREE_CODE (lhs), TREE_TYPE (lhs),
6369                       stabilize_reference (TREE_OPERAND (lhs, 0)),
6370                       TREE_OPERAND (lhs, 1));
6371       newrhs = cp_build_modify_expr (TREE_OPERAND (lhs, 0), modifycode, rhs,
6372                                      complain);
6373       if (newrhs == error_mark_node)
6374         return error_mark_node;
6375       return build2 (COMPOUND_EXPR, lhstype, lhs, newrhs);
6376
6377     case MIN_EXPR:
6378     case MAX_EXPR:
6379       /* MIN_EXPR and MAX_EXPR are currently only permitted as lvalues,
6380          when neither operand has side-effects.  */
6381       if (!lvalue_or_else (lhs, lv_assign, complain))
6382         return error_mark_node;
6383
6384       gcc_assert (!TREE_SIDE_EFFECTS (TREE_OPERAND (lhs, 0))
6385                   && !TREE_SIDE_EFFECTS (TREE_OPERAND (lhs, 1)));
6386
6387       lhs = build3 (COND_EXPR, TREE_TYPE (lhs),
6388                     build2 (TREE_CODE (lhs) == MIN_EXPR ? LE_EXPR : GE_EXPR,
6389                             boolean_type_node,
6390                             TREE_OPERAND (lhs, 0),
6391                             TREE_OPERAND (lhs, 1)),
6392                     TREE_OPERAND (lhs, 0),
6393                     TREE_OPERAND (lhs, 1));
6394       /* Fall through.  */
6395
6396       /* Handle (a ? b : c) used as an "lvalue".  */
6397     case COND_EXPR:
6398       {
6399         /* Produce (a ? (b = rhs) : (c = rhs))
6400            except that the RHS goes through a save-expr
6401            so the code to compute it is only emitted once.  */
6402         tree cond;
6403         tree preeval = NULL_TREE;
6404
6405         if (VOID_TYPE_P (TREE_TYPE (rhs)))
6406           {
6407             if (complain & tf_error)
6408               error ("void value not ignored as it ought to be");
6409             return error_mark_node;
6410           }
6411
6412         rhs = stabilize_expr (rhs, &preeval);
6413
6414         /* Check this here to avoid odd errors when trying to convert
6415            a throw to the type of the COND_EXPR.  */
6416         if (!lvalue_or_else (lhs, lv_assign, complain))
6417           return error_mark_node;
6418
6419         cond = build_conditional_expr
6420           (TREE_OPERAND (lhs, 0),
6421            cp_build_modify_expr (TREE_OPERAND (lhs, 1),
6422                                  modifycode, rhs, complain),
6423            cp_build_modify_expr (TREE_OPERAND (lhs, 2),
6424                                  modifycode, rhs, complain),
6425            complain);
6426
6427         if (cond == error_mark_node)
6428           return cond;
6429         /* Make sure the code to compute the rhs comes out
6430            before the split.  */
6431         if (preeval)
6432           cond = build2 (COMPOUND_EXPR, TREE_TYPE (lhs), preeval, cond);
6433         return cond;
6434       }
6435
6436     default:
6437       break;
6438     }
6439
6440   if (modifycode == INIT_EXPR)
6441     {
6442       if (BRACE_ENCLOSED_INITIALIZER_P (rhs))
6443         /* Do the default thing.  */;
6444       else if (TREE_CODE (rhs) == CONSTRUCTOR)
6445         {
6446           /* Compound literal.  */
6447           if (! same_type_p (TREE_TYPE (rhs), lhstype))
6448             /* Call convert to generate an error; see PR 11063.  */
6449             rhs = convert (lhstype, rhs);
6450           result = build2 (INIT_EXPR, lhstype, lhs, rhs);
6451           TREE_SIDE_EFFECTS (result) = 1;
6452           return result;
6453         }
6454       else if (! MAYBE_CLASS_TYPE_P (lhstype))
6455         /* Do the default thing.  */;
6456       else
6457         {
6458           VEC(tree,gc) *rhs_vec = make_tree_vector_single (rhs);
6459           result = build_special_member_call (lhs, complete_ctor_identifier,
6460                                               &rhs_vec, lhstype, LOOKUP_NORMAL,
6461                                               complain);
6462           release_tree_vector (rhs_vec);
6463           if (result == NULL_TREE)
6464             return error_mark_node;
6465           return result;
6466         }
6467     }
6468   else
6469     {
6470       lhs = require_complete_type (lhs);
6471       if (lhs == error_mark_node)
6472         return error_mark_node;
6473
6474       if (modifycode == NOP_EXPR)
6475         {
6476           /* `operator=' is not an inheritable operator.  */
6477           if (! MAYBE_CLASS_TYPE_P (lhstype))
6478             /* Do the default thing.  */;
6479           else
6480             {
6481               result = build_new_op (MODIFY_EXPR, LOOKUP_NORMAL,
6482                                      lhs, rhs, make_node (NOP_EXPR),
6483                                      /*overloaded_p=*/NULL, 
6484                                      complain);
6485               if (result == NULL_TREE)
6486                 return error_mark_node;
6487               return result;
6488             }
6489           lhstype = olhstype;
6490         }
6491       else
6492         {
6493           /* A binary op has been requested.  Combine the old LHS
6494              value with the RHS producing the value we should actually
6495              store into the LHS.  */
6496           gcc_assert (!((TREE_CODE (lhstype) == REFERENCE_TYPE
6497                          && MAYBE_CLASS_TYPE_P (TREE_TYPE (lhstype)))
6498                         || MAYBE_CLASS_TYPE_P (lhstype)));
6499
6500           lhs = stabilize_reference (lhs);
6501           newrhs = cp_build_binary_op (input_location,
6502                                        modifycode, lhs, rhs,
6503                                        complain);
6504           if (newrhs == error_mark_node)
6505             {
6506               if (complain & tf_error)
6507                 error ("  in evaluation of %<%Q(%#T, %#T)%>", modifycode,
6508                        TREE_TYPE (lhs), TREE_TYPE (rhs));
6509               return error_mark_node;
6510             }
6511
6512           /* Now it looks like a plain assignment.  */
6513           modifycode = NOP_EXPR;
6514         }
6515       gcc_assert (TREE_CODE (lhstype) != REFERENCE_TYPE);
6516       gcc_assert (TREE_CODE (TREE_TYPE (newrhs)) != REFERENCE_TYPE);
6517     }
6518
6519   /* The left-hand side must be an lvalue.  */
6520   if (!lvalue_or_else (lhs, lv_assign, complain))
6521     return error_mark_node;
6522
6523   /* Warn about modifying something that is `const'.  Don't warn if
6524      this is initialization.  */
6525   if (modifycode != INIT_EXPR
6526       && (TREE_READONLY (lhs) || CP_TYPE_CONST_P (lhstype)
6527           /* Functions are not modifiable, even though they are
6528              lvalues.  */
6529           || TREE_CODE (TREE_TYPE (lhs)) == FUNCTION_TYPE
6530           || TREE_CODE (TREE_TYPE (lhs)) == METHOD_TYPE
6531           /* If it's an aggregate and any field is const, then it is
6532              effectively const.  */
6533           || (CLASS_TYPE_P (lhstype)
6534               && C_TYPE_FIELDS_READONLY (lhstype))))
6535     {
6536       if (complain & tf_error)
6537         readonly_error (lhs, REK_ASSIGNMENT);
6538       else
6539         return error_mark_node;
6540     }
6541
6542   /* If storing into a structure or union member, it may have been given a
6543      lowered bitfield type.  We need to convert to the declared type first,
6544      so retrieve it now.  */
6545
6546   olhstype = unlowered_expr_type (lhs);
6547
6548   /* Convert new value to destination type.  */
6549
6550   if (TREE_CODE (lhstype) == ARRAY_TYPE)
6551     {
6552       int from_array;
6553
6554       if (BRACE_ENCLOSED_INITIALIZER_P (newrhs))
6555         {
6556           if (check_array_initializer (lhs, lhstype, newrhs))
6557             return error_mark_node;
6558           newrhs = digest_init (lhstype, newrhs);
6559         }
6560
6561       else if (!same_or_base_type_p (TYPE_MAIN_VARIANT (lhstype),
6562                                      TYPE_MAIN_VARIANT (TREE_TYPE (newrhs))))
6563         {
6564           if (complain & tf_error)
6565             error ("incompatible types in assignment of %qT to %qT",
6566                    TREE_TYPE (rhs), lhstype);
6567           return error_mark_node;
6568         }
6569
6570       /* Allow array assignment in compiler-generated code.  */
6571       else if (!current_function_decl
6572                || !DECL_ARTIFICIAL (current_function_decl))
6573         {
6574           /* This routine is used for both initialization and assignment.
6575              Make sure the diagnostic message differentiates the context.  */
6576           if (complain & tf_error)
6577             {
6578               if (modifycode == INIT_EXPR)
6579                 error ("array used as initializer");
6580               else
6581                 error ("invalid array assignment");
6582             }
6583           return error_mark_node;
6584         }
6585
6586       from_array = TREE_CODE (TREE_TYPE (newrhs)) == ARRAY_TYPE
6587                    ? 1 + (modifycode != INIT_EXPR): 0;
6588       return build_vec_init (lhs, NULL_TREE, newrhs,
6589                              /*explicit_value_init_p=*/false,
6590                              from_array, complain);
6591     }
6592
6593   if (modifycode == INIT_EXPR)
6594     /* Calls with INIT_EXPR are all direct-initialization, so don't set
6595        LOOKUP_ONLYCONVERTING.  */
6596     newrhs = convert_for_initialization (lhs, olhstype, newrhs, LOOKUP_NORMAL,
6597                                          "initialization", NULL_TREE, 0,
6598                                          complain);
6599   else
6600     newrhs = convert_for_assignment (olhstype, newrhs, "assignment",
6601                                      NULL_TREE, 0, complain, LOOKUP_IMPLICIT);
6602
6603   if (!same_type_p (lhstype, olhstype))
6604     newrhs = cp_convert_and_check (lhstype, newrhs);
6605
6606   if (modifycode != INIT_EXPR)
6607     {
6608       if (TREE_CODE (newrhs) == CALL_EXPR
6609           && TYPE_NEEDS_CONSTRUCTING (lhstype))
6610         newrhs = build_cplus_new (lhstype, newrhs);
6611
6612       /* Can't initialize directly from a TARGET_EXPR, since that would
6613          cause the lhs to be constructed twice, and possibly result in
6614          accidental self-initialization.  So we force the TARGET_EXPR to be
6615          expanded without a target.  */
6616       if (TREE_CODE (newrhs) == TARGET_EXPR)
6617         newrhs = build2 (COMPOUND_EXPR, TREE_TYPE (newrhs), newrhs,
6618                          TREE_OPERAND (newrhs, 0));
6619     }
6620
6621   if (newrhs == error_mark_node)
6622     return error_mark_node;
6623
6624   if (c_dialect_objc () && flag_objc_gc)
6625     {
6626       result = objc_generate_write_barrier (lhs, modifycode, newrhs);
6627
6628       if (result)
6629         return result;
6630     }
6631
6632   result = build2 (modifycode == NOP_EXPR ? MODIFY_EXPR : INIT_EXPR,
6633                    lhstype, lhs, newrhs);
6634
6635   TREE_SIDE_EFFECTS (result) = 1;
6636   if (!plain_assign)
6637     TREE_NO_WARNING (result) = 1;
6638
6639   return result;
6640 }
6641
6642 tree
6643 build_x_modify_expr (tree lhs, enum tree_code modifycode, tree rhs,
6644                      tsubst_flags_t complain)
6645 {
6646   if (processing_template_decl)
6647     return build_min_nt (MODOP_EXPR, lhs,
6648                          build_min_nt (modifycode, NULL_TREE, NULL_TREE), rhs);
6649
6650   if (modifycode != NOP_EXPR)
6651     {
6652       tree rval = build_new_op (MODIFY_EXPR, LOOKUP_NORMAL, lhs, rhs,
6653                                 make_node (modifycode),
6654                                 /*overloaded_p=*/NULL,
6655                                 complain);
6656       if (rval)
6657         {
6658           TREE_NO_WARNING (rval) = 1;
6659           return rval;
6660         }
6661     }
6662   return cp_build_modify_expr (lhs, modifycode, rhs, complain);
6663 }
6664
6665 /* Helper function for get_delta_difference which assumes FROM is a base
6666    class of TO.  Returns a delta for the conversion of pointer-to-member
6667    of FROM to pointer-to-member of TO.  If the conversion is invalid,
6668    returns zero.  If FROM is not a base class of TO, returns NULL_TREE.
6669    If C_CAST_P is true, this conversion is taking place as part of a C-style
6670    cast.  */
6671
6672 static tree
6673 get_delta_difference_1 (tree from, tree to, bool c_cast_p)
6674 {
6675   tree binfo;
6676   base_kind kind;
6677
6678   binfo = lookup_base (to, from, c_cast_p ? ba_unique : ba_check, &kind);
6679   if (kind == bk_inaccessible || kind == bk_ambig)
6680     {
6681       error ("   in pointer to member function conversion");
6682       return size_zero_node;
6683     }
6684   else if (binfo)
6685     {
6686       if (kind != bk_via_virtual)
6687         return BINFO_OFFSET (binfo);
6688       else
6689         /* FROM is a virtual base class of TO.  Issue an error or warning
6690            depending on whether or not this is a reinterpret cast.  */
6691         {
6692           error ("pointer to member conversion via virtual base %qT",
6693                  BINFO_TYPE (binfo_from_vbase (binfo)));
6694
6695           return size_zero_node;
6696         }
6697       }
6698     else
6699       return NULL_TREE;
6700 }
6701
6702 /* Get difference in deltas for different pointer to member function
6703    types.  Returns an integer constant of type PTRDIFF_TYPE_NODE.  If
6704    the conversion is invalid, the constant is zero.  If
6705    ALLOW_INVERSE_P is true, then allow reverse conversions as well.
6706    If C_CAST_P is true this conversion is taking place as part of a
6707    C-style cast.
6708
6709    Note that the naming of FROM and TO is kind of backwards; the return
6710    value is what we add to a TO in order to get a FROM.  They are named
6711    this way because we call this function to find out how to convert from
6712    a pointer to member of FROM to a pointer to member of TO.  */
6713
6714 static tree
6715 get_delta_difference (tree from, tree to,
6716                       bool allow_inverse_p,
6717                       bool c_cast_p)
6718 {
6719   tree result;
6720
6721   if (same_type_ignoring_top_level_qualifiers_p (from, to))
6722     /* Pointer to member of incomplete class is permitted*/
6723     result = size_zero_node;
6724   else
6725     result = get_delta_difference_1 (from, to, c_cast_p);
6726
6727   if (!result)
6728   {
6729     if (!allow_inverse_p)
6730       {
6731         error_not_base_type (from, to);
6732         error ("   in pointer to member conversion");
6733         result = size_zero_node;
6734       }
6735     else
6736       {
6737         result = get_delta_difference_1 (to, from, c_cast_p);
6738
6739         if (result)
6740           result = size_diffop_loc (input_location,
6741                                 size_zero_node, result);
6742         else
6743           {
6744             error_not_base_type (from, to);
6745             error ("   in pointer to member conversion");
6746             result = size_zero_node;
6747           }
6748       }
6749   }
6750
6751   return fold_if_not_in_template (convert_to_integer (ptrdiff_type_node,
6752                                                       result));
6753 }
6754
6755 /* Return a constructor for the pointer-to-member-function TYPE using
6756    the other components as specified.  */
6757
6758 tree
6759 build_ptrmemfunc1 (tree type, tree delta, tree pfn)
6760 {
6761   tree u = NULL_TREE;
6762   tree delta_field;
6763   tree pfn_field;
6764   VEC(constructor_elt, gc) *v;
6765
6766   /* Pull the FIELD_DECLs out of the type.  */
6767   pfn_field = TYPE_FIELDS (type);
6768   delta_field = TREE_CHAIN (pfn_field);
6769
6770   /* Make sure DELTA has the type we want.  */
6771   delta = convert_and_check (delta_type_node, delta);
6772
6773   /* Convert to the correct target type if necessary.  */
6774   pfn = fold_convert (TREE_TYPE (pfn_field), pfn);
6775
6776   /* Finish creating the initializer.  */
6777   v = VEC_alloc(constructor_elt, gc, 2);
6778   CONSTRUCTOR_APPEND_ELT(v, pfn_field, pfn);
6779   CONSTRUCTOR_APPEND_ELT(v, delta_field, delta);
6780   u = build_constructor (type, v);
6781   TREE_CONSTANT (u) = TREE_CONSTANT (pfn) & TREE_CONSTANT (delta);
6782   TREE_STATIC (u) = (TREE_CONSTANT (u)
6783                      && (initializer_constant_valid_p (pfn, TREE_TYPE (pfn))
6784                          != NULL_TREE)
6785                      && (initializer_constant_valid_p (delta, TREE_TYPE (delta))
6786                          != NULL_TREE));
6787   return u;
6788 }
6789
6790 /* Build a constructor for a pointer to member function.  It can be
6791    used to initialize global variables, local variable, or used
6792    as a value in expressions.  TYPE is the POINTER to METHOD_TYPE we
6793    want to be.
6794
6795    If FORCE is nonzero, then force this conversion, even if
6796    we would rather not do it.  Usually set when using an explicit
6797    cast.  A C-style cast is being processed iff C_CAST_P is true.
6798
6799    Return error_mark_node, if something goes wrong.  */
6800
6801 tree
6802 build_ptrmemfunc (tree type, tree pfn, int force, bool c_cast_p)
6803 {
6804   tree fn;
6805   tree pfn_type;
6806   tree to_type;
6807
6808   if (error_operand_p (pfn))
6809     return error_mark_node;
6810
6811   pfn_type = TREE_TYPE (pfn);
6812   to_type = build_ptrmemfunc_type (type);
6813
6814   /* Handle multiple conversions of pointer to member functions.  */
6815   if (TYPE_PTRMEMFUNC_P (pfn_type))
6816     {
6817       tree delta = NULL_TREE;
6818       tree npfn = NULL_TREE;
6819       tree n;
6820
6821       if (!force
6822           && !can_convert_arg (to_type, TREE_TYPE (pfn), pfn, LOOKUP_NORMAL))
6823         error ("invalid conversion to type %qT from type %qT",
6824                to_type, pfn_type);
6825
6826       n = get_delta_difference (TYPE_PTRMEMFUNC_OBJECT_TYPE (pfn_type),
6827                                 TYPE_PTRMEMFUNC_OBJECT_TYPE (to_type),
6828                                 force,
6829                                 c_cast_p);
6830
6831       /* We don't have to do any conversion to convert a
6832          pointer-to-member to its own type.  But, we don't want to
6833          just return a PTRMEM_CST if there's an explicit cast; that
6834          cast should make the expression an invalid template argument.  */
6835       if (TREE_CODE (pfn) != PTRMEM_CST)
6836         {
6837           if (same_type_p (to_type, pfn_type))
6838             return pfn;
6839           else if (integer_zerop (n))
6840             return build_reinterpret_cast (to_type, pfn, 
6841                                            tf_warning_or_error);
6842         }
6843
6844       if (TREE_SIDE_EFFECTS (pfn))
6845         pfn = save_expr (pfn);
6846
6847       /* Obtain the function pointer and the current DELTA.  */
6848       if (TREE_CODE (pfn) == PTRMEM_CST)
6849         expand_ptrmemfunc_cst (pfn, &delta, &npfn);
6850       else
6851         {
6852           npfn = build_ptrmemfunc_access_expr (pfn, pfn_identifier);
6853           delta = build_ptrmemfunc_access_expr (pfn, delta_identifier);
6854         }
6855
6856       /* Just adjust the DELTA field.  */
6857       gcc_assert  (same_type_ignoring_top_level_qualifiers_p
6858                    (TREE_TYPE (delta), ptrdiff_type_node));
6859       if (TARGET_PTRMEMFUNC_VBIT_LOCATION == ptrmemfunc_vbit_in_delta)
6860         n = cp_build_binary_op (input_location,
6861                                 LSHIFT_EXPR, n, integer_one_node,
6862                                 tf_warning_or_error);
6863       delta = cp_build_binary_op (input_location,
6864                                   PLUS_EXPR, delta, n, tf_warning_or_error);
6865       return build_ptrmemfunc1 (to_type, delta, npfn);
6866     }
6867
6868   /* Handle null pointer to member function conversions.  */
6869   if (integer_zerop (pfn))
6870     {
6871       pfn = build_c_cast (input_location, type, integer_zero_node);
6872       return build_ptrmemfunc1 (to_type,
6873                                 integer_zero_node,
6874                                 pfn);
6875     }
6876
6877   if (type_unknown_p (pfn))
6878     return instantiate_type (type, pfn, tf_warning_or_error);
6879
6880   fn = TREE_OPERAND (pfn, 0);
6881   gcc_assert (TREE_CODE (fn) == FUNCTION_DECL
6882               /* In a template, we will have preserved the
6883                  OFFSET_REF.  */
6884               || (processing_template_decl && TREE_CODE (fn) == OFFSET_REF));
6885   return make_ptrmem_cst (to_type, fn);
6886 }
6887
6888 /* Return the DELTA, IDX, PFN, and DELTA2 values for the PTRMEM_CST
6889    given by CST.
6890
6891    ??? There is no consistency as to the types returned for the above
6892    values.  Some code acts as if it were a sizetype and some as if it were
6893    integer_type_node.  */
6894
6895 void
6896 expand_ptrmemfunc_cst (tree cst, tree *delta, tree *pfn)
6897 {
6898   tree type = TREE_TYPE (cst);
6899   tree fn = PTRMEM_CST_MEMBER (cst);
6900   tree ptr_class, fn_class;
6901
6902   gcc_assert (TREE_CODE (fn) == FUNCTION_DECL);
6903
6904   /* The class that the function belongs to.  */
6905   fn_class = DECL_CONTEXT (fn);
6906
6907   /* The class that we're creating a pointer to member of.  */
6908   ptr_class = TYPE_PTRMEMFUNC_OBJECT_TYPE (type);
6909
6910   /* First, calculate the adjustment to the function's class.  */
6911   *delta = get_delta_difference (fn_class, ptr_class, /*force=*/0,
6912                                  /*c_cast_p=*/0);
6913
6914   if (!DECL_VIRTUAL_P (fn))
6915     *pfn = convert (TYPE_PTRMEMFUNC_FN_TYPE (type), build_addr_func (fn));
6916   else
6917     {
6918       /* If we're dealing with a virtual function, we have to adjust 'this'
6919          again, to point to the base which provides the vtable entry for
6920          fn; the call will do the opposite adjustment.  */
6921       tree orig_class = DECL_CONTEXT (fn);
6922       tree binfo = binfo_or_else (orig_class, fn_class);
6923       *delta = build2 (PLUS_EXPR, TREE_TYPE (*delta),
6924                        *delta, BINFO_OFFSET (binfo));
6925       *delta = fold_if_not_in_template (*delta);
6926
6927       /* We set PFN to the vtable offset at which the function can be
6928          found, plus one (unless ptrmemfunc_vbit_in_delta, in which
6929          case delta is shifted left, and then incremented).  */
6930       *pfn = DECL_VINDEX (fn);
6931       *pfn = build2 (MULT_EXPR, integer_type_node, *pfn,
6932                      TYPE_SIZE_UNIT (vtable_entry_type));
6933       *pfn = fold_if_not_in_template (*pfn);
6934
6935       switch (TARGET_PTRMEMFUNC_VBIT_LOCATION)
6936         {
6937         case ptrmemfunc_vbit_in_pfn:
6938           *pfn = build2 (PLUS_EXPR, integer_type_node, *pfn,
6939                          integer_one_node);
6940           *pfn = fold_if_not_in_template (*pfn);
6941           break;
6942
6943         case ptrmemfunc_vbit_in_delta:
6944           *delta = build2 (LSHIFT_EXPR, TREE_TYPE (*delta),
6945                            *delta, integer_one_node);
6946           *delta = fold_if_not_in_template (*delta);
6947           *delta = build2 (PLUS_EXPR, TREE_TYPE (*delta),
6948                            *delta, integer_one_node);
6949           *delta = fold_if_not_in_template (*delta);
6950           break;
6951
6952         default:
6953           gcc_unreachable ();
6954         }
6955
6956       *pfn = build_nop (TYPE_PTRMEMFUNC_FN_TYPE (type), *pfn);
6957       *pfn = fold_if_not_in_template (*pfn);
6958     }
6959 }
6960
6961 /* Return an expression for PFN from the pointer-to-member function
6962    given by T.  */
6963
6964 static tree
6965 pfn_from_ptrmemfunc (tree t)
6966 {
6967   if (TREE_CODE (t) == PTRMEM_CST)
6968     {
6969       tree delta;
6970       tree pfn;
6971
6972       expand_ptrmemfunc_cst (t, &delta, &pfn);
6973       if (pfn)
6974         return pfn;
6975     }
6976
6977   return build_ptrmemfunc_access_expr (t, pfn_identifier);
6978 }
6979
6980 /* Return an expression for DELTA from the pointer-to-member function
6981    given by T.  */
6982
6983 static tree
6984 delta_from_ptrmemfunc (tree t)
6985 {
6986   if (TREE_CODE (t) == PTRMEM_CST)
6987     {
6988       tree delta;
6989       tree pfn;
6990
6991       expand_ptrmemfunc_cst (t, &delta, &pfn);
6992       if (delta)
6993         return delta;
6994     }
6995
6996   return build_ptrmemfunc_access_expr (t, delta_identifier);
6997 }
6998
6999 /* Convert value RHS to type TYPE as preparation for an assignment to
7000    an lvalue of type TYPE.  ERRTYPE is a string to use in error
7001    messages: "assignment", "return", etc.  If FNDECL is non-NULL, we
7002    are doing the conversion in order to pass the PARMNUMth argument of
7003    FNDECL.  */
7004
7005 static tree
7006 convert_for_assignment (tree type, tree rhs,
7007                         const char *errtype, tree fndecl, int parmnum,
7008                         tsubst_flags_t complain, int flags)
7009 {
7010   tree rhstype;
7011   enum tree_code coder;
7012
7013   /* Strip NON_LVALUE_EXPRs since we aren't using as an lvalue.  */
7014   if (TREE_CODE (rhs) == NON_LVALUE_EXPR)
7015     rhs = TREE_OPERAND (rhs, 0);
7016
7017   rhstype = TREE_TYPE (rhs);
7018   coder = TREE_CODE (rhstype);
7019
7020   if (TREE_CODE (type) == VECTOR_TYPE && coder == VECTOR_TYPE
7021       && vector_types_convertible_p (type, rhstype, true))
7022     return convert (type, rhs);
7023
7024   if (rhs == error_mark_node || rhstype == error_mark_node)
7025     return error_mark_node;
7026   if (TREE_CODE (rhs) == TREE_LIST && TREE_VALUE (rhs) == error_mark_node)
7027     return error_mark_node;
7028
7029   /* The RHS of an assignment cannot have void type.  */
7030   if (coder == VOID_TYPE)
7031     {
7032       if (complain & tf_error)
7033         error ("void value not ignored as it ought to be");
7034       return error_mark_node;
7035     }
7036
7037   /* Simplify the RHS if possible.  */
7038   if (TREE_CODE (rhs) == CONST_DECL)
7039     rhs = DECL_INITIAL (rhs);
7040
7041   if (c_dialect_objc ())
7042     {
7043       int parmno;
7044       tree rname = fndecl;
7045
7046       if (!strcmp (errtype, "assignment"))
7047         parmno = -1;
7048       else if (!strcmp (errtype, "initialization"))
7049         parmno = -2;
7050       else
7051         {
7052           tree selector = objc_message_selector ();
7053
7054           parmno = parmnum;
7055
7056           if (selector && parmno > 1)
7057             {
7058               rname = selector;
7059               parmno -= 1;
7060             }
7061         }
7062
7063       if (objc_compare_types (type, rhstype, parmno, rname))
7064         return convert (type, rhs);
7065     }
7066
7067   /* [expr.ass]
7068
7069      The expression is implicitly converted (clause _conv_) to the
7070      cv-unqualified type of the left operand.
7071
7072      We allow bad conversions here because by the time we get to this point
7073      we are committed to doing the conversion.  If we end up doing a bad
7074      conversion, convert_like will complain.  */
7075   if (!can_convert_arg_bad (type, rhstype, rhs, flags))
7076     {
7077       /* When -Wno-pmf-conversions is use, we just silently allow
7078          conversions from pointers-to-members to plain pointers.  If
7079          the conversion doesn't work, cp_convert will complain.  */
7080       if (!warn_pmf2ptr
7081           && TYPE_PTR_P (type)
7082           && TYPE_PTRMEMFUNC_P (rhstype))
7083         rhs = cp_convert (strip_top_quals (type), rhs);
7084       else
7085         {
7086           if (complain & tf_error)
7087             {
7088               /* If the right-hand side has unknown type, then it is an
7089                  overloaded function.  Call instantiate_type to get error
7090                  messages.  */
7091               if (rhstype == unknown_type_node)
7092                 instantiate_type (type, rhs, tf_warning_or_error);
7093               else if (fndecl)
7094                 error ("cannot convert %qT to %qT for argument %qP to %qD",
7095                        rhstype, type, parmnum, fndecl);
7096               else
7097                 error ("cannot convert %qT to %qT in %s", rhstype, type,
7098                        errtype);
7099             }
7100           return error_mark_node;
7101         }
7102     }
7103   if (warn_missing_format_attribute)
7104     {
7105       const enum tree_code codel = TREE_CODE (type);
7106       if ((codel == POINTER_TYPE || codel == REFERENCE_TYPE)
7107           && coder == codel
7108           && check_missing_format_attribute (type, rhstype)
7109           && (complain & tf_warning))
7110         warning (OPT_Wmissing_format_attribute,
7111                  "%s might be a candidate for a format attribute",
7112                  errtype);
7113     }
7114
7115   /* If -Wparentheses, warn about a = b = c when a has type bool and b
7116      does not.  */
7117   if (warn_parentheses
7118       && TREE_CODE (type) == BOOLEAN_TYPE
7119       && TREE_CODE (rhs) == MODIFY_EXPR
7120       && !TREE_NO_WARNING (rhs)
7121       && TREE_CODE (TREE_TYPE (rhs)) != BOOLEAN_TYPE
7122       && (complain & tf_warning))
7123     {
7124       location_t loc = EXPR_HAS_LOCATION (rhs) 
7125         ? EXPR_LOCATION (rhs) : input_location;
7126
7127       warning_at (loc, OPT_Wparentheses,
7128                   "suggest parentheses around assignment used as truth value");
7129       TREE_NO_WARNING (rhs) = 1;
7130     }
7131
7132   return perform_implicit_conversion_flags (strip_top_quals (type), rhs,
7133                                             complain, flags);
7134 }
7135
7136 /* Convert RHS to be of type TYPE.
7137    If EXP is nonzero, it is the target of the initialization.
7138    ERRTYPE is a string to use in error messages.
7139
7140    Two major differences between the behavior of
7141    `convert_for_assignment' and `convert_for_initialization'
7142    are that references are bashed in the former, while
7143    copied in the latter, and aggregates are assigned in
7144    the former (operator=) while initialized in the
7145    latter (X(X&)).
7146
7147    If using constructor make sure no conversion operator exists, if one does
7148    exist, an ambiguity exists.
7149
7150    If flags doesn't include LOOKUP_COMPLAIN, don't complain about anything.  */
7151
7152 tree
7153 convert_for_initialization (tree exp, tree type, tree rhs, int flags,
7154                             const char *errtype, tree fndecl, int parmnum,
7155                             tsubst_flags_t complain)
7156 {
7157   enum tree_code codel = TREE_CODE (type);
7158   tree rhstype;
7159   enum tree_code coder;
7160
7161   /* build_c_cast puts on a NOP_EXPR to make the result not an lvalue.
7162      Strip such NOP_EXPRs, since RHS is used in non-lvalue context.  */
7163   if (TREE_CODE (rhs) == NOP_EXPR
7164       && TREE_TYPE (rhs) == TREE_TYPE (TREE_OPERAND (rhs, 0))
7165       && codel != REFERENCE_TYPE)
7166     rhs = TREE_OPERAND (rhs, 0);
7167
7168   if (type == error_mark_node
7169       || rhs == error_mark_node
7170       || (TREE_CODE (rhs) == TREE_LIST && TREE_VALUE (rhs) == error_mark_node))
7171     return error_mark_node;
7172
7173   if ((TREE_CODE (TREE_TYPE (rhs)) == ARRAY_TYPE
7174        && TREE_CODE (type) != ARRAY_TYPE
7175        && (TREE_CODE (type) != REFERENCE_TYPE
7176            || TREE_CODE (TREE_TYPE (type)) != ARRAY_TYPE))
7177       || (TREE_CODE (TREE_TYPE (rhs)) == FUNCTION_TYPE
7178           && (TREE_CODE (type) != REFERENCE_TYPE
7179               || TREE_CODE (TREE_TYPE (type)) != FUNCTION_TYPE))
7180       || TREE_CODE (TREE_TYPE (rhs)) == METHOD_TYPE)
7181     rhs = decay_conversion (rhs);
7182
7183   rhstype = TREE_TYPE (rhs);
7184   coder = TREE_CODE (rhstype);
7185
7186   if (coder == ERROR_MARK)
7187     return error_mark_node;
7188
7189   /* We accept references to incomplete types, so we can
7190      return here before checking if RHS is of complete type.  */
7191
7192   if (codel == REFERENCE_TYPE)
7193     {
7194       /* This should eventually happen in convert_arguments.  */
7195       int savew = 0, savee = 0;
7196
7197       if (fndecl)
7198         savew = warningcount, savee = errorcount;
7199       rhs = initialize_reference (type, rhs, /*decl=*/NULL_TREE,
7200                                   /*cleanup=*/NULL, complain);
7201       if (fndecl)
7202         {
7203           if (warningcount > savew)
7204             warning (0, "in passing argument %P of %q+D", parmnum, fndecl);
7205           else if (errorcount > savee)
7206             error ("in passing argument %P of %q+D", parmnum, fndecl);
7207         }
7208       return rhs;
7209     }
7210
7211   if (exp != 0)
7212     exp = require_complete_type (exp);
7213   if (exp == error_mark_node)
7214     return error_mark_node;
7215
7216   rhstype = non_reference (rhstype);
7217
7218   type = complete_type (type);
7219
7220   if (DIRECT_INIT_EXPR_P (type, rhs))
7221     /* Don't try to do copy-initialization if we already have
7222        direct-initialization.  */
7223     return rhs;
7224
7225   if (MAYBE_CLASS_TYPE_P (type))
7226     return ocp_convert (type, rhs, CONV_IMPLICIT|CONV_FORCE_TEMP, flags);
7227
7228   return convert_for_assignment (type, rhs, errtype, fndecl, parmnum,
7229                                  complain, flags);
7230 }
7231 \f
7232 /* If RETVAL is the address of, or a reference to, a local variable or
7233    temporary give an appropriate warning.  */
7234
7235 static void
7236 maybe_warn_about_returning_address_of_local (tree retval)
7237 {
7238   tree valtype = TREE_TYPE (DECL_RESULT (current_function_decl));
7239   tree whats_returned = retval;
7240
7241   for (;;)
7242     {
7243       if (TREE_CODE (whats_returned) == COMPOUND_EXPR)
7244         whats_returned = TREE_OPERAND (whats_returned, 1);
7245       else if (CONVERT_EXPR_P (whats_returned)
7246                || TREE_CODE (whats_returned) == NON_LVALUE_EXPR)
7247         whats_returned = TREE_OPERAND (whats_returned, 0);
7248       else
7249         break;
7250     }
7251
7252   if (TREE_CODE (whats_returned) != ADDR_EXPR)
7253     return;
7254   whats_returned = TREE_OPERAND (whats_returned, 0);
7255
7256   if (TREE_CODE (valtype) == REFERENCE_TYPE)
7257     {
7258       if (TREE_CODE (whats_returned) == AGGR_INIT_EXPR
7259           || TREE_CODE (whats_returned) == TARGET_EXPR)
7260         {
7261           warning (0, "returning reference to temporary");
7262           return;
7263         }
7264       if (TREE_CODE (whats_returned) == VAR_DECL
7265           && DECL_NAME (whats_returned)
7266           && TEMP_NAME_P (DECL_NAME (whats_returned)))
7267         {
7268           warning (0, "reference to non-lvalue returned");
7269           return;
7270         }
7271     }
7272
7273   while (TREE_CODE (whats_returned) == COMPONENT_REF
7274          || TREE_CODE (whats_returned) == ARRAY_REF)
7275     whats_returned = TREE_OPERAND (whats_returned, 0);
7276
7277   if (DECL_P (whats_returned)
7278       && DECL_NAME (whats_returned)
7279       && DECL_FUNCTION_SCOPE_P (whats_returned)
7280       && !(TREE_STATIC (whats_returned)
7281            || TREE_PUBLIC (whats_returned)))
7282     {
7283       if (TREE_CODE (valtype) == REFERENCE_TYPE)
7284         warning (0, "reference to local variable %q+D returned",
7285                  whats_returned);
7286       else
7287         warning (0, "address of local variable %q+D returned",
7288                  whats_returned);
7289       return;
7290     }
7291 }
7292
7293 /* Check that returning RETVAL from the current function is valid.
7294    Return an expression explicitly showing all conversions required to
7295    change RETVAL into the function return type, and to assign it to
7296    the DECL_RESULT for the function.  Set *NO_WARNING to true if
7297    code reaches end of non-void function warning shouldn't be issued
7298    on this RETURN_EXPR.  */
7299
7300 tree
7301 check_return_expr (tree retval, bool *no_warning)
7302 {
7303   tree result;
7304   /* The type actually returned by the function, after any
7305      promotions.  */
7306   tree valtype;
7307   int fn_returns_value_p;
7308   bool named_return_value_okay_p;
7309
7310   *no_warning = false;
7311
7312   /* A `volatile' function is one that isn't supposed to return, ever.
7313      (This is a G++ extension, used to get better code for functions
7314      that call the `volatile' function.)  */
7315   if (TREE_THIS_VOLATILE (current_function_decl))
7316     warning (0, "function declared %<noreturn%> has a %<return%> statement");
7317
7318   /* Check for various simple errors.  */
7319   if (DECL_DESTRUCTOR_P (current_function_decl))
7320     {
7321       if (retval)
7322         error ("returning a value from a destructor");
7323       return NULL_TREE;
7324     }
7325   else if (DECL_CONSTRUCTOR_P (current_function_decl))
7326     {
7327       if (in_function_try_handler)
7328         /* If a return statement appears in a handler of the
7329            function-try-block of a constructor, the program is ill-formed.  */
7330         error ("cannot return from a handler of a function-try-block of a constructor");
7331       else if (retval)
7332         /* You can't return a value from a constructor.  */
7333         error ("returning a value from a constructor");
7334       return NULL_TREE;
7335     }
7336
7337   /* As an extension, deduce lambda return type from a return statement
7338      anywhere in the body.  */
7339   if (retval && LAMBDA_FUNCTION_P (current_function_decl))
7340     {
7341       tree lambda = CLASSTYPE_LAMBDA_EXPR (current_class_type);
7342       if (LAMBDA_EXPR_DEDUCE_RETURN_TYPE_P (lambda))
7343         {
7344           tree type = lambda_return_type (retval);
7345           tree oldtype = LAMBDA_EXPR_RETURN_TYPE (lambda);
7346
7347           if (VOID_TYPE_P (type))
7348             { /* Nothing.  */ }
7349           else if (oldtype == NULL_TREE)
7350             {
7351               pedwarn (input_location, OPT_pedantic, "lambda return type "
7352                        "can only be deduced when the return statement is "
7353                        "the only statement in the function body");
7354               apply_lambda_return_type (lambda, type);
7355             }
7356           else if (!same_type_p (type, oldtype))
7357             error ("inconsistent types %qT and %qT deduced for "
7358                    "lambda return type", type, oldtype);
7359         }
7360     }
7361
7362   if (processing_template_decl)
7363     {
7364       current_function_returns_value = 1;
7365       if (check_for_bare_parameter_packs (retval))
7366         retval = error_mark_node;
7367       return retval;
7368     }
7369
7370   /* When no explicit return-value is given in a function with a named
7371      return value, the named return value is used.  */
7372   result = DECL_RESULT (current_function_decl);
7373   valtype = TREE_TYPE (result);
7374   gcc_assert (valtype != NULL_TREE);
7375   fn_returns_value_p = !VOID_TYPE_P (valtype);
7376   if (!retval && DECL_NAME (result) && fn_returns_value_p)
7377     retval = result;
7378
7379   /* Check for a return statement with no return value in a function
7380      that's supposed to return a value.  */
7381   if (!retval && fn_returns_value_p)
7382     {
7383       permerror (input_location, "return-statement with no value, in function returning %qT",
7384                  valtype);
7385       /* Clear this, so finish_function won't say that we reach the
7386          end of a non-void function (which we don't, we gave a
7387          return!).  */
7388       current_function_returns_null = 0;
7389       /* And signal caller that TREE_NO_WARNING should be set on the
7390          RETURN_EXPR to avoid control reaches end of non-void function
7391          warnings in tree-cfg.c.  */
7392       *no_warning = true;
7393     }
7394   /* Check for a return statement with a value in a function that
7395      isn't supposed to return a value.  */
7396   else if (retval && !fn_returns_value_p)
7397     {
7398       if (VOID_TYPE_P (TREE_TYPE (retval)))
7399         /* You can return a `void' value from a function of `void'
7400            type.  In that case, we have to evaluate the expression for
7401            its side-effects.  */
7402           finish_expr_stmt (retval);
7403       else
7404         permerror (input_location, "return-statement with a value, in function "
7405                    "returning 'void'");
7406       current_function_returns_null = 1;
7407
7408       /* There's really no value to return, after all.  */
7409       return NULL_TREE;
7410     }
7411   else if (!retval)
7412     /* Remember that this function can sometimes return without a
7413        value.  */
7414     current_function_returns_null = 1;
7415   else
7416     /* Remember that this function did return a value.  */
7417     current_function_returns_value = 1;
7418
7419   /* Check for erroneous operands -- but after giving ourselves a
7420      chance to provide an error about returning a value from a void
7421      function.  */
7422   if (error_operand_p (retval))
7423     {
7424       current_function_return_value = error_mark_node;
7425       return error_mark_node;
7426     }
7427
7428   /* Only operator new(...) throw(), can return NULL [expr.new/13].  */
7429   if ((DECL_OVERLOADED_OPERATOR_P (current_function_decl) == NEW_EXPR
7430        || DECL_OVERLOADED_OPERATOR_P (current_function_decl) == VEC_NEW_EXPR)
7431       && !TYPE_NOTHROW_P (TREE_TYPE (current_function_decl))
7432       && ! flag_check_new
7433       && retval && null_ptr_cst_p (retval))
7434     warning (0, "%<operator new%> must not return NULL unless it is "
7435              "declared %<throw()%> (or -fcheck-new is in effect)");
7436
7437   /* Effective C++ rule 15.  See also start_function.  */
7438   if (warn_ecpp
7439       && DECL_NAME (current_function_decl) == ansi_assopname(NOP_EXPR))
7440     {
7441       bool warn = true;
7442
7443       /* The function return type must be a reference to the current
7444         class.  */
7445       if (TREE_CODE (valtype) == REFERENCE_TYPE
7446           && same_type_ignoring_top_level_qualifiers_p
7447               (TREE_TYPE (valtype), TREE_TYPE (current_class_ref)))
7448         {
7449           /* Returning '*this' is obviously OK.  */
7450           if (retval == current_class_ref)
7451             warn = false;
7452           /* If we are calling a function whose return type is the same of
7453              the current class reference, it is ok.  */
7454           else if (TREE_CODE (retval) == INDIRECT_REF
7455                    && TREE_CODE (TREE_OPERAND (retval, 0)) == CALL_EXPR)
7456             warn = false;
7457         }
7458
7459       if (warn)
7460         warning (OPT_Weffc__, "%<operator=%> should return a reference to %<*this%>");
7461     }
7462
7463   /* The fabled Named Return Value optimization, as per [class.copy]/15:
7464
7465      [...]      For  a function with a class return type, if the expression
7466      in the return statement is the name of a local  object,  and  the  cv-
7467      unqualified  type  of  the  local  object  is the same as the function
7468      return type, an implementation is permitted to omit creating the  tem-
7469      porary  object  to  hold  the function return value [...]
7470
7471      So, if this is a value-returning function that always returns the same
7472      local variable, remember it.
7473
7474      It might be nice to be more flexible, and choose the first suitable
7475      variable even if the function sometimes returns something else, but
7476      then we run the risk of clobbering the variable we chose if the other
7477      returned expression uses the chosen variable somehow.  And people expect
7478      this restriction, anyway.  (jason 2000-11-19)
7479
7480      See finish_function and finalize_nrv for the rest of this optimization.  */
7481
7482   named_return_value_okay_p = 
7483     (retval != NULL_TREE
7484      /* Must be a local, automatic variable.  */
7485      && TREE_CODE (retval) == VAR_DECL
7486      && DECL_CONTEXT (retval) == current_function_decl
7487      && ! TREE_STATIC (retval)
7488      && ! DECL_ANON_UNION_VAR_P (retval)
7489      && (DECL_ALIGN (retval)
7490          >= DECL_ALIGN (DECL_RESULT (current_function_decl)))
7491      /* The cv-unqualified type of the returned value must be the
7492         same as the cv-unqualified return type of the
7493         function.  */
7494      && same_type_p ((TYPE_MAIN_VARIANT (TREE_TYPE (retval))),
7495                      (TYPE_MAIN_VARIANT
7496                       (TREE_TYPE (TREE_TYPE (current_function_decl)))))
7497      /* And the returned value must be non-volatile.  */
7498      && ! TYPE_VOLATILE (TREE_TYPE (retval)));
7499      
7500   if (fn_returns_value_p && flag_elide_constructors)
7501     {
7502       if (named_return_value_okay_p
7503           && (current_function_return_value == NULL_TREE
7504               || current_function_return_value == retval))
7505         current_function_return_value = retval;
7506       else
7507         current_function_return_value = error_mark_node;
7508     }
7509
7510   /* We don't need to do any conversions when there's nothing being
7511      returned.  */
7512   if (!retval)
7513     return NULL_TREE;
7514
7515   /* Do any required conversions.  */
7516   if (retval == result || DECL_CONSTRUCTOR_P (current_function_decl))
7517     /* No conversions are required.  */
7518     ;
7519   else
7520     {
7521       /* The type the function is declared to return.  */
7522       tree functype = TREE_TYPE (TREE_TYPE (current_function_decl));
7523       int flags = LOOKUP_NORMAL | LOOKUP_ONLYCONVERTING;
7524
7525       /* The functype's return type will have been set to void, if it
7526          was an incomplete type.  Just treat this as 'return;' */
7527       if (VOID_TYPE_P (functype))
7528         return error_mark_node;
7529
7530       /* Under C++0x [12.8/16 class.copy], a returned lvalue is sometimes
7531          treated as an rvalue for the purposes of overload resolution to
7532          favor move constructors over copy constructors.  */
7533       if ((cxx_dialect != cxx98) 
7534           && named_return_value_okay_p
7535           /* The variable must not have the `volatile' qualifier.  */
7536           && !(cp_type_quals (TREE_TYPE (retval)) & TYPE_QUAL_VOLATILE)
7537           /* The return type must be a class type.  */
7538           && CLASS_TYPE_P (TREE_TYPE (TREE_TYPE (current_function_decl))))
7539         flags = flags | LOOKUP_PREFER_RVALUE;
7540
7541       /* First convert the value to the function's return type, then
7542          to the type of return value's location to handle the
7543          case that functype is smaller than the valtype.  */
7544       retval = convert_for_initialization
7545         (NULL_TREE, functype, retval, flags, "return", NULL_TREE, 0,
7546          tf_warning_or_error);
7547       retval = convert (valtype, retval);
7548
7549       /* If the conversion failed, treat this just like `return;'.  */
7550       if (retval == error_mark_node)
7551         return retval;
7552       /* We can't initialize a register from a AGGR_INIT_EXPR.  */
7553       else if (! cfun->returns_struct
7554                && TREE_CODE (retval) == TARGET_EXPR
7555                && TREE_CODE (TREE_OPERAND (retval, 1)) == AGGR_INIT_EXPR)
7556         retval = build2 (COMPOUND_EXPR, TREE_TYPE (retval), retval,
7557                          TREE_OPERAND (retval, 0));
7558       else
7559         maybe_warn_about_returning_address_of_local (retval);
7560     }
7561
7562   /* Actually copy the value returned into the appropriate location.  */
7563   if (retval && retval != result)
7564     retval = build2 (INIT_EXPR, TREE_TYPE (result), result, retval);
7565
7566   return retval;
7567 }
7568
7569 \f
7570 /* Returns nonzero if the pointer-type FROM can be converted to the
7571    pointer-type TO via a qualification conversion.  If CONSTP is -1,
7572    then we return nonzero if the pointers are similar, and the
7573    cv-qualification signature of FROM is a proper subset of that of TO.
7574
7575    If CONSTP is positive, then all outer pointers have been
7576    const-qualified.  */
7577
7578 static int
7579 comp_ptr_ttypes_real (tree to, tree from, int constp)
7580 {
7581   bool to_more_cv_qualified = false;
7582   bool is_opaque_pointer = false;
7583
7584   for (; ; to = TREE_TYPE (to), from = TREE_TYPE (from))
7585     {
7586       if (TREE_CODE (to) != TREE_CODE (from))
7587         return 0;
7588
7589       if (TREE_CODE (from) == OFFSET_TYPE
7590           && !same_type_p (TYPE_OFFSET_BASETYPE (from),
7591                            TYPE_OFFSET_BASETYPE (to)))
7592         return 0;
7593
7594       /* Const and volatile mean something different for function types,
7595          so the usual checks are not appropriate.  */
7596       if (TREE_CODE (to) != FUNCTION_TYPE && TREE_CODE (to) != METHOD_TYPE)
7597         {
7598           /* In Objective-C++, some types may have been 'volatilized' by
7599              the compiler for EH; when comparing them here, the volatile
7600              qualification must be ignored.  */
7601           bool objc_quals_match = objc_type_quals_match (to, from);
7602
7603           if (!at_least_as_qualified_p (to, from) && !objc_quals_match)
7604             return 0;
7605
7606           if (!at_least_as_qualified_p (from, to) && !objc_quals_match)
7607             {
7608               if (constp == 0)
7609                 return 0;
7610               to_more_cv_qualified = true;
7611             }
7612
7613           if (constp > 0)
7614             constp &= TYPE_READONLY (to);
7615         }
7616
7617       if (TREE_CODE (to) == VECTOR_TYPE)
7618         is_opaque_pointer = vector_targets_convertible_p (to, from);
7619
7620       if (TREE_CODE (to) != POINTER_TYPE && !TYPE_PTRMEM_P (to))
7621         return ((constp >= 0 || to_more_cv_qualified)
7622                 && (is_opaque_pointer
7623                     || same_type_ignoring_top_level_qualifiers_p (to, from)));
7624     }
7625 }
7626
7627 /* When comparing, say, char ** to char const **, this function takes
7628    the 'char *' and 'char const *'.  Do not pass non-pointer/reference
7629    types to this function.  */
7630
7631 int
7632 comp_ptr_ttypes (tree to, tree from)
7633 {
7634   return comp_ptr_ttypes_real (to, from, 1);
7635 }
7636
7637 /* Returns true iff FNTYPE is a non-class type that involves
7638    error_mark_node.  We can get FUNCTION_TYPE with buried error_mark_node
7639    if a parameter type is ill-formed.  */
7640
7641 bool
7642 error_type_p (const_tree type)
7643 {
7644   tree t;
7645
7646   switch (TREE_CODE (type))
7647     {
7648     case ERROR_MARK:
7649       return true;
7650
7651     case POINTER_TYPE:
7652     case REFERENCE_TYPE:
7653     case OFFSET_TYPE:
7654       return error_type_p (TREE_TYPE (type));
7655
7656     case FUNCTION_TYPE:
7657     case METHOD_TYPE:
7658       if (error_type_p (TREE_TYPE (type)))
7659         return true;
7660       for (t = TYPE_ARG_TYPES (type); t; t = TREE_CHAIN (t))
7661         if (error_type_p (TREE_VALUE (t)))
7662           return true;
7663       return false;
7664
7665     case RECORD_TYPE:
7666       if (TYPE_PTRMEMFUNC_P (type))
7667         return error_type_p (TYPE_PTRMEMFUNC_FN_TYPE (type));
7668       return false;
7669
7670     default:
7671       return false;
7672     }
7673 }
7674
7675 /* Returns 1 if to and from are (possibly multi-level) pointers to the same
7676    type or inheritance-related types, regardless of cv-quals.  */
7677
7678 int
7679 ptr_reasonably_similar (const_tree to, const_tree from)
7680 {
7681   for (; ; to = TREE_TYPE (to), from = TREE_TYPE (from))
7682     {
7683       /* Any target type is similar enough to void.  */
7684       if (TREE_CODE (to) == VOID_TYPE)
7685         return !error_type_p (from);
7686       if (TREE_CODE (from) == VOID_TYPE)
7687         return !error_type_p (to);
7688
7689       if (TREE_CODE (to) != TREE_CODE (from))
7690         return 0;
7691
7692       if (TREE_CODE (from) == OFFSET_TYPE
7693           && comptypes (TYPE_OFFSET_BASETYPE (to),
7694                         TYPE_OFFSET_BASETYPE (from),
7695                         COMPARE_BASE | COMPARE_DERIVED))
7696         continue;
7697
7698       if (TREE_CODE (to) == VECTOR_TYPE
7699           && vector_types_convertible_p (to, from, false))
7700         return 1;
7701
7702       if (TREE_CODE (to) == INTEGER_TYPE
7703           && TYPE_PRECISION (to) == TYPE_PRECISION (from))
7704         return 1;
7705
7706       if (TREE_CODE (to) == FUNCTION_TYPE)
7707         return !error_type_p (to) && !error_type_p (from);
7708
7709       if (TREE_CODE (to) != POINTER_TYPE)
7710         return comptypes
7711           (TYPE_MAIN_VARIANT (to), TYPE_MAIN_VARIANT (from),
7712            COMPARE_BASE | COMPARE_DERIVED);
7713     }
7714 }
7715
7716 /* Return true if TO and FROM (both of which are POINTER_TYPEs or
7717    pointer-to-member types) are the same, ignoring cv-qualification at
7718    all levels.  */
7719
7720 bool
7721 comp_ptr_ttypes_const (tree to, tree from)
7722 {
7723   bool is_opaque_pointer = false;
7724
7725   for (; ; to = TREE_TYPE (to), from = TREE_TYPE (from))
7726     {
7727       if (TREE_CODE (to) != TREE_CODE (from))
7728         return false;
7729
7730       if (TREE_CODE (from) == OFFSET_TYPE
7731           && same_type_p (TYPE_OFFSET_BASETYPE (from),
7732                           TYPE_OFFSET_BASETYPE (to)))
7733           continue;
7734
7735       if (TREE_CODE (to) == VECTOR_TYPE)
7736         is_opaque_pointer = vector_targets_convertible_p (to, from);
7737
7738       if (TREE_CODE (to) != POINTER_TYPE)
7739         return (is_opaque_pointer
7740                 || same_type_ignoring_top_level_qualifiers_p (to, from));
7741     }
7742 }
7743
7744 /* Returns the type qualifiers for this type, including the qualifiers on the
7745    elements for an array type.  */
7746
7747 int
7748 cp_type_quals (const_tree type)
7749 {
7750   /* This CONST_CAST is okay because strip_array_types returns its
7751      argument unmodified and we assign it to a const_tree.  */
7752   type = strip_array_types (CONST_CAST_TREE(type));
7753   if (type == error_mark_node)
7754     return TYPE_UNQUALIFIED;
7755   return TYPE_QUALS (type);
7756 }
7757
7758 /* Returns nonzero if the TYPE is const from a C++ perspective: look inside
7759    arrays.  */
7760
7761 bool
7762 cp_type_readonly (const_tree type)
7763 {
7764   /* This CONST_CAST is okay because strip_array_types returns its
7765      argument unmodified and we assign it to a const_tree.  */
7766   type = strip_array_types (CONST_CAST_TREE(type));
7767   return TYPE_READONLY (type);
7768 }
7769
7770 /* Returns nonzero if TYPE is const or volatile.  */
7771
7772 bool
7773 cv_qualified_p (const_tree type)
7774 {
7775   int quals = cp_type_quals (type);
7776   return (quals & (TYPE_QUAL_CONST|TYPE_QUAL_VOLATILE)) != 0;
7777 }
7778
7779 /* Returns nonzero if the TYPE contains a mutable member.  */
7780
7781 bool
7782 cp_has_mutable_p (const_tree type)
7783 {
7784   /* This CONST_CAST is okay because strip_array_types returns its
7785      argument unmodified and we assign it to a const_tree.  */
7786   type = strip_array_types (CONST_CAST_TREE(type));
7787
7788   return CLASS_TYPE_P (type) && CLASSTYPE_HAS_MUTABLE (type);
7789 }
7790
7791 /* Set TREE_READONLY and TREE_VOLATILE on DECL as indicated by the
7792    TYPE_QUALS.  For a VAR_DECL, this may be an optimistic
7793    approximation.  In particular, consider:
7794
7795      int f();
7796      struct S { int i; };
7797      const S s = { f(); }
7798
7799    Here, we will make "s" as TREE_READONLY (because it is declared
7800    "const") -- only to reverse ourselves upon seeing that the
7801    initializer is non-constant.  */
7802
7803 void
7804 cp_apply_type_quals_to_decl (int type_quals, tree decl)
7805 {
7806   tree type = TREE_TYPE (decl);
7807
7808   if (type == error_mark_node)
7809     return;
7810
7811   if (TREE_CODE (decl) == TYPE_DECL)
7812     return;
7813
7814   if (TREE_CODE (type) == FUNCTION_TYPE
7815       && type_quals != TYPE_UNQUALIFIED)
7816     {
7817       /* This was an error in C++98 (cv-qualifiers cannot be added to
7818          a function type), but DR 295 makes the code well-formed by
7819          dropping the extra qualifiers. */
7820       if (pedantic)
7821         {
7822           tree bad_type = build_qualified_type (type, type_quals);
7823           pedwarn (input_location, OPT_pedantic, 
7824                    "ignoring %qV qualifiers added to function type %qT",
7825                    bad_type, type);
7826         }
7827
7828       TREE_TYPE (decl) = TYPE_MAIN_VARIANT (type);
7829       return;
7830     }
7831
7832   /* Avoid setting TREE_READONLY incorrectly.  */
7833   if (/* If the object has a constructor, the constructor may modify
7834          the object.  */
7835       TYPE_NEEDS_CONSTRUCTING (type)
7836       /* If the type isn't complete, we don't know yet if it will need
7837          constructing.  */
7838       || !COMPLETE_TYPE_P (type)
7839       /* If the type has a mutable component, that component might be
7840          modified.  */
7841       || TYPE_HAS_MUTABLE_P (type))
7842     type_quals &= ~TYPE_QUAL_CONST;
7843
7844   c_apply_type_quals_to_decl (type_quals, decl);
7845 }
7846
7847 /* Subroutine of casts_away_constness.  Make T1 and T2 point at
7848    exemplar types such that casting T1 to T2 is casting away constness
7849    if and only if there is no implicit conversion from T1 to T2.  */
7850
7851 static void
7852 casts_away_constness_r (tree *t1, tree *t2)
7853 {
7854   int quals1;
7855   int quals2;
7856
7857   /* [expr.const.cast]
7858
7859      For multi-level pointer to members and multi-level mixed pointers
7860      and pointers to members (conv.qual), the "member" aspect of a
7861      pointer to member level is ignored when determining if a const
7862      cv-qualifier has been cast away.  */
7863   /* [expr.const.cast]
7864
7865      For  two  pointer types:
7866
7867             X1 is T1cv1,1 * ... cv1,N *   where T1 is not a pointer type
7868             X2 is T2cv2,1 * ... cv2,M *   where T2 is not a pointer type
7869             K is min(N,M)
7870
7871      casting from X1 to X2 casts away constness if, for a non-pointer
7872      type T there does not exist an implicit conversion (clause
7873      _conv_) from:
7874
7875             Tcv1,(N-K+1) * cv1,(N-K+2) * ... cv1,N *
7876
7877      to
7878
7879             Tcv2,(M-K+1) * cv2,(M-K+2) * ... cv2,M *.  */
7880   if ((!TYPE_PTR_P (*t1) && !TYPE_PTRMEM_P (*t1))
7881       || (!TYPE_PTR_P (*t2) && !TYPE_PTRMEM_P (*t2)))
7882     {
7883       *t1 = cp_build_qualified_type (void_type_node,
7884                                      cp_type_quals (*t1));
7885       *t2 = cp_build_qualified_type (void_type_node,
7886                                      cp_type_quals (*t2));
7887       return;
7888     }
7889
7890   quals1 = cp_type_quals (*t1);
7891   quals2 = cp_type_quals (*t2);
7892
7893   if (TYPE_PTRMEM_P (*t1))
7894     *t1 = TYPE_PTRMEM_POINTED_TO_TYPE (*t1);
7895   else
7896     *t1 = TREE_TYPE (*t1);
7897   if (TYPE_PTRMEM_P (*t2))
7898     *t2 = TYPE_PTRMEM_POINTED_TO_TYPE (*t2);
7899   else
7900     *t2 = TREE_TYPE (*t2);
7901
7902   casts_away_constness_r (t1, t2);
7903   *t1 = build_pointer_type (*t1);
7904   *t2 = build_pointer_type (*t2);
7905   *t1 = cp_build_qualified_type (*t1, quals1);
7906   *t2 = cp_build_qualified_type (*t2, quals2);
7907 }
7908
7909 /* Returns nonzero if casting from TYPE1 to TYPE2 casts away
7910    constness.  
7911
7912    ??? This function returns non-zero if casting away qualifiers not
7913    just const.  We would like to return to the caller exactly which
7914    qualifiers are casted away to give more accurate diagnostics.
7915 */
7916
7917 static bool
7918 casts_away_constness (tree t1, tree t2)
7919 {
7920   if (TREE_CODE (t2) == REFERENCE_TYPE)
7921     {
7922       /* [expr.const.cast]
7923
7924          Casting from an lvalue of type T1 to an lvalue of type T2
7925          using a reference cast casts away constness if a cast from an
7926          rvalue of type "pointer to T1" to the type "pointer to T2"
7927          casts away constness.  */
7928       t1 = (TREE_CODE (t1) == REFERENCE_TYPE ? TREE_TYPE (t1) : t1);
7929       return casts_away_constness (build_pointer_type (t1),
7930                                    build_pointer_type (TREE_TYPE (t2)));
7931     }
7932
7933   if (TYPE_PTRMEM_P (t1) && TYPE_PTRMEM_P (t2))
7934     /* [expr.const.cast]
7935
7936        Casting from an rvalue of type "pointer to data member of X
7937        of type T1" to the type "pointer to data member of Y of type
7938        T2" casts away constness if a cast from an rvalue of type
7939        "pointer to T1" to the type "pointer to T2" casts away
7940        constness.  */
7941     return casts_away_constness
7942       (build_pointer_type (TYPE_PTRMEM_POINTED_TO_TYPE (t1)),
7943        build_pointer_type (TYPE_PTRMEM_POINTED_TO_TYPE (t2)));
7944
7945   /* Casting away constness is only something that makes sense for
7946      pointer or reference types.  */
7947   if (TREE_CODE (t1) != POINTER_TYPE
7948       || TREE_CODE (t2) != POINTER_TYPE)
7949     return false;
7950
7951   /* Top-level qualifiers don't matter.  */
7952   t1 = TYPE_MAIN_VARIANT (t1);
7953   t2 = TYPE_MAIN_VARIANT (t2);
7954   casts_away_constness_r (&t1, &t2);
7955   if (!can_convert (t2, t1))
7956     return true;
7957
7958   return false;
7959 }
7960
7961 /* If T is a REFERENCE_TYPE return the type to which T refers.
7962    Otherwise, return T itself.  */
7963
7964 tree
7965 non_reference (tree t)
7966 {
7967   if (TREE_CODE (t) == REFERENCE_TYPE)
7968     t = TREE_TYPE (t);
7969   return t;
7970 }
7971
7972
7973 /* Return nonzero if REF is an lvalue valid for this language;
7974    otherwise, print an error message and return zero.  USE says
7975    how the lvalue is being used and so selects the error message.  */
7976
7977 int
7978 lvalue_or_else (tree ref, enum lvalue_use use, tsubst_flags_t complain)
7979 {
7980   int win = lvalue_p (ref);
7981
7982   if (!win && (complain & tf_error))
7983     lvalue_error (use);
7984
7985   return win;
7986 }