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