OSDN Git Service

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