OSDN Git Service

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