OSDN Git Service

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