OSDN Git Service

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