OSDN Git Service

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