Update gcc-50 to SVN version 220677
[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                   && !TREE_NO_WARNING (op0))
4420                 warning (OPT_Waddress, "the address of %qD will never be NULL",
4421                          TREE_OPERAND (op0, 0));
4422             }
4423         }
4424       else if (((code1 == POINTER_TYPE || TYPE_PTRDATAMEM_P (type1))
4425                 && null_ptr_cst_p (op0))
4426                /* Handle, eg, (void*)0 (c++/43906), and more.  */
4427                || (code1 == POINTER_TYPE
4428                    && TYPE_PTR_P (type0) && integer_zerop (op0)))
4429         {
4430           if (TYPE_PTR_P (type0))
4431             result_type = composite_pointer_type (type0, type1, op0, op1,
4432                                                   CPO_COMPARISON, complain);
4433           else
4434             result_type = type1;
4435
4436           if (TREE_CODE (op1) == ADDR_EXPR 
4437               && decl_with_nonnull_addr_p (TREE_OPERAND (op1, 0)))
4438             {
4439               if ((complain & tf_warning)
4440                   && c_inhibit_evaluation_warnings == 0
4441                   && !TREE_NO_WARNING (op1))
4442                 warning (OPT_Waddress, "the address of %qD will never be NULL",
4443                          TREE_OPERAND (op1, 0));
4444             }
4445         }
4446       else if ((code0 == POINTER_TYPE && code1 == POINTER_TYPE)
4447                || (TYPE_PTRDATAMEM_P (type0) && TYPE_PTRDATAMEM_P (type1)))
4448         result_type = composite_pointer_type (type0, type1, op0, op1,
4449                                               CPO_COMPARISON, complain);
4450       else if (null_ptr_cst_p (op0) && null_ptr_cst_p (op1))
4451         /* One of the operands must be of nullptr_t type.  */
4452         result_type = TREE_TYPE (nullptr_node);
4453       else if (code0 == POINTER_TYPE && code1 == INTEGER_TYPE)
4454         {
4455           result_type = type0;
4456           if (complain & tf_error) 
4457             permerror (input_location, "ISO C++ forbids comparison between pointer and integer");
4458           else
4459             return error_mark_node;
4460         }
4461       else if (code0 == INTEGER_TYPE && code1 == POINTER_TYPE)
4462         {
4463           result_type = type1;
4464           if (complain & tf_error)
4465             permerror (input_location, "ISO C++ forbids comparison between pointer and integer");
4466           else
4467             return error_mark_node;
4468         }
4469       else if (TYPE_PTRMEMFUNC_P (type0) && null_ptr_cst_p (op1))
4470         {
4471           if (TARGET_PTRMEMFUNC_VBIT_LOCATION
4472               == ptrmemfunc_vbit_in_delta)
4473             {
4474               tree pfn0, delta0, e1, e2;
4475
4476               if (TREE_SIDE_EFFECTS (op0))
4477                 op0 = save_expr (op0);
4478
4479               pfn0 = pfn_from_ptrmemfunc (op0);
4480               delta0 = delta_from_ptrmemfunc (op0);
4481               e1 = cp_build_binary_op (location,
4482                                        EQ_EXPR,
4483                                        pfn0,
4484                                        build_zero_cst (TREE_TYPE (pfn0)),
4485                                        complain);
4486               e2 = cp_build_binary_op (location,
4487                                        BIT_AND_EXPR,
4488                                        delta0,
4489                                        integer_one_node,
4490                                        complain);
4491
4492               if (complain & tf_warning)
4493                 maybe_warn_zero_as_null_pointer_constant (op1, input_location);
4494
4495               e2 = cp_build_binary_op (location,
4496                                        EQ_EXPR, e2, integer_zero_node,
4497                                        complain);
4498               op0 = cp_build_binary_op (location,
4499                                         TRUTH_ANDIF_EXPR, e1, e2,
4500                                         complain);
4501               op1 = cp_convert (TREE_TYPE (op0), integer_one_node, complain); 
4502             }
4503           else 
4504             {
4505               op0 = build_ptrmemfunc_access_expr (op0, pfn_identifier);
4506               op1 = cp_convert (TREE_TYPE (op0), op1, complain);
4507             }
4508           result_type = TREE_TYPE (op0);
4509         }
4510       else if (TYPE_PTRMEMFUNC_P (type1) && null_ptr_cst_p (op0))
4511         return cp_build_binary_op (location, code, op1, op0, complain);
4512       else if (TYPE_PTRMEMFUNC_P (type0) && TYPE_PTRMEMFUNC_P (type1))
4513         {
4514           tree type;
4515           /* E will be the final comparison.  */
4516           tree e;
4517           /* E1 and E2 are for scratch.  */
4518           tree e1;
4519           tree e2;
4520           tree pfn0;
4521           tree pfn1;
4522           tree delta0;
4523           tree delta1;
4524
4525           type = composite_pointer_type (type0, type1, op0, op1, 
4526                                          CPO_COMPARISON, complain);
4527
4528           if (!same_type_p (TREE_TYPE (op0), type))
4529             op0 = cp_convert_and_check (type, op0, complain);
4530           if (!same_type_p (TREE_TYPE (op1), type))
4531             op1 = cp_convert_and_check (type, op1, complain);
4532
4533           if (op0 == error_mark_node || op1 == error_mark_node)
4534             return error_mark_node;
4535
4536           if (TREE_SIDE_EFFECTS (op0))
4537             op0 = save_expr (op0);
4538           if (TREE_SIDE_EFFECTS (op1))
4539             op1 = save_expr (op1);
4540
4541           pfn0 = pfn_from_ptrmemfunc (op0);
4542           /* Avoid -Waddress warnings (c++/64877).  */
4543           if (TREE_CODE (pfn0) == ADDR_EXPR)
4544             TREE_NO_WARNING (pfn0) = 1;
4545           pfn1 = pfn_from_ptrmemfunc (op1);
4546           delta0 = delta_from_ptrmemfunc (op0);
4547           delta1 = delta_from_ptrmemfunc (op1);
4548           if (TARGET_PTRMEMFUNC_VBIT_LOCATION
4549               == ptrmemfunc_vbit_in_delta)
4550             {
4551               /* We generate:
4552
4553                  (op0.pfn == op1.pfn
4554                   && ((op0.delta == op1.delta)
4555                        || (!op0.pfn && op0.delta & 1 == 0 
4556                            && op1.delta & 1 == 0))
4557
4558                  The reason for the `!op0.pfn' bit is that a NULL
4559                  pointer-to-member is any member with a zero PFN and
4560                  LSB of the DELTA field is 0.  */
4561
4562               e1 = cp_build_binary_op (location, BIT_AND_EXPR,
4563                                        delta0, 
4564                                        integer_one_node,
4565                                        complain);
4566               e1 = cp_build_binary_op (location,
4567                                        EQ_EXPR, e1, integer_zero_node,
4568                                        complain);
4569               e2 = cp_build_binary_op (location, BIT_AND_EXPR,
4570                                        delta1,
4571                                        integer_one_node,
4572                                        complain);
4573               e2 = cp_build_binary_op (location,
4574                                        EQ_EXPR, e2, integer_zero_node,
4575                                        complain);
4576               e1 = cp_build_binary_op (location,
4577                                        TRUTH_ANDIF_EXPR, e2, e1,
4578                                        complain);
4579               e2 = cp_build_binary_op (location, EQ_EXPR,
4580                                        pfn0,
4581                                        build_zero_cst (TREE_TYPE (pfn0)),
4582                                        complain);
4583               e2 = cp_build_binary_op (location,
4584                                        TRUTH_ANDIF_EXPR, e2, e1, complain);
4585               e1 = cp_build_binary_op (location,
4586                                        EQ_EXPR, delta0, delta1, complain);
4587               e1 = cp_build_binary_op (location,
4588                                        TRUTH_ORIF_EXPR, e1, e2, complain);
4589             }
4590           else
4591             {
4592               /* We generate:
4593
4594                  (op0.pfn == op1.pfn
4595                  && (!op0.pfn || op0.delta == op1.delta))
4596
4597                  The reason for the `!op0.pfn' bit is that a NULL
4598                  pointer-to-member is any member with a zero PFN; the
4599                  DELTA field is unspecified.  */
4600  
4601               e1 = cp_build_binary_op (location,
4602                                        EQ_EXPR, delta0, delta1, complain);
4603               e2 = cp_build_binary_op (location,
4604                                        EQ_EXPR,
4605                                        pfn0,
4606                                        build_zero_cst (TREE_TYPE (pfn0)),
4607                                        complain);
4608               e1 = cp_build_binary_op (location,
4609                                        TRUTH_ORIF_EXPR, e1, e2, complain);
4610             }
4611           e2 = build2 (EQ_EXPR, boolean_type_node, pfn0, pfn1);
4612           e = cp_build_binary_op (location,
4613                                   TRUTH_ANDIF_EXPR, e2, e1, complain);
4614           if (code == EQ_EXPR)
4615             return e;
4616           return cp_build_binary_op (location,
4617                                      EQ_EXPR, e, integer_zero_node, complain);
4618         }
4619       else
4620         {
4621           gcc_assert (!TYPE_PTRMEMFUNC_P (type0)
4622                       || !same_type_p (TYPE_PTRMEMFUNC_FN_TYPE (type0),
4623                                        type1));
4624           gcc_assert (!TYPE_PTRMEMFUNC_P (type1)
4625                       || !same_type_p (TYPE_PTRMEMFUNC_FN_TYPE (type1),
4626                                        type0));
4627         }
4628
4629       break;
4630
4631     case MAX_EXPR:
4632     case MIN_EXPR:
4633       if ((code0 == INTEGER_TYPE || code0 == REAL_TYPE)
4634            && (code1 == INTEGER_TYPE || code1 == REAL_TYPE))
4635         shorten = 1;
4636       else if (code0 == POINTER_TYPE && code1 == POINTER_TYPE)
4637         result_type = composite_pointer_type (type0, type1, op0, op1,
4638                                               CPO_COMPARISON, complain);
4639       break;
4640
4641     case LE_EXPR:
4642     case GE_EXPR:
4643     case LT_EXPR:
4644     case GT_EXPR:
4645       if (TREE_CODE (orig_op0) == STRING_CST
4646           || TREE_CODE (orig_op1) == STRING_CST)
4647         {
4648           if (complain & tf_warning)
4649             warning (OPT_Waddress, "comparison with string literal results in unspecified behaviour");
4650         }
4651
4652       if (code0 == VECTOR_TYPE && code1 == VECTOR_TYPE)
4653         {
4654         vector_compare:
4655           tree intt;
4656           if (!same_type_ignoring_top_level_qualifiers_p (TREE_TYPE (type0),
4657                                                           TREE_TYPE (type1))
4658               && !vector_types_compatible_elements_p (type0, type1))
4659             {
4660               if (complain & tf_error)
4661                 {
4662                   error_at (location, "comparing vectors with different "
4663                                       "element types");
4664                   inform (location, "operand types are %qT and %qT",
4665                           type0, type1);
4666                 }
4667               return error_mark_node;
4668             }
4669
4670           if (TYPE_VECTOR_SUBPARTS (type0) != TYPE_VECTOR_SUBPARTS (type1))
4671             {
4672               if (complain & tf_error)
4673                 {
4674                   error_at (location, "comparing vectors with different "
4675                                       "number of elements");
4676                   inform (location, "operand types are %qT and %qT",
4677                           type0, type1);
4678                 }
4679               return error_mark_node;
4680             }
4681
4682           /* Always construct signed integer vector type.  */
4683           intt = c_common_type_for_size (GET_MODE_BITSIZE
4684                                            (TYPE_MODE (TREE_TYPE (type0))), 0);
4685           if (!intt)
4686             {
4687               if (complain & tf_error)
4688                 error_at (location, "could not find an integer type "
4689                           "of the same size as %qT", TREE_TYPE (type0));
4690               return error_mark_node;
4691             }
4692           result_type = build_opaque_vector_type (intt,
4693                                                   TYPE_VECTOR_SUBPARTS (type0));
4694           converted = 1;
4695           break;
4696         }
4697       build_type = boolean_type_node;
4698       if ((code0 == INTEGER_TYPE || code0 == REAL_TYPE
4699            || code0 == ENUMERAL_TYPE)
4700            && (code1 == INTEGER_TYPE || code1 == REAL_TYPE
4701                || code1 == ENUMERAL_TYPE))
4702         short_compare = 1;
4703       else if (code0 == POINTER_TYPE && code1 == POINTER_TYPE)
4704         result_type = composite_pointer_type (type0, type1, op0, op1,
4705                                               CPO_COMPARISON, complain);
4706       else if (code0 == POINTER_TYPE && null_ptr_cst_p (op1))
4707         {
4708           result_type = type0;
4709           if (extra_warnings && (complain & tf_warning))
4710             warning (OPT_Wextra,
4711                      "ordered comparison of pointer with integer zero");
4712         }
4713       else if (code1 == POINTER_TYPE && null_ptr_cst_p (op0))
4714         {
4715           result_type = type1;
4716           if (extra_warnings && (complain & tf_warning))
4717             warning (OPT_Wextra,
4718                      "ordered comparison of pointer with integer zero");
4719         }
4720       else if (null_ptr_cst_p (op0) && null_ptr_cst_p (op1))
4721         /* One of the operands must be of nullptr_t type.  */
4722         result_type = TREE_TYPE (nullptr_node);
4723       else if (code0 == POINTER_TYPE && code1 == INTEGER_TYPE)
4724         {
4725           result_type = type0;
4726           if (complain & tf_error)
4727             permerror (input_location, "ISO C++ forbids comparison between pointer and integer");
4728           else
4729             return error_mark_node;
4730         }
4731       else if (code0 == INTEGER_TYPE && code1 == POINTER_TYPE)
4732         {
4733           result_type = type1;
4734           if (complain & tf_error)
4735             permerror (input_location, "ISO C++ forbids comparison between pointer and integer");
4736           else
4737             return error_mark_node;
4738         }
4739       break;
4740
4741     case UNORDERED_EXPR:
4742     case ORDERED_EXPR:
4743     case UNLT_EXPR:
4744     case UNLE_EXPR:
4745     case UNGT_EXPR:
4746     case UNGE_EXPR:
4747     case UNEQ_EXPR:
4748       build_type = integer_type_node;
4749       if (code0 != REAL_TYPE || code1 != REAL_TYPE)
4750         {
4751           if (complain & tf_error)
4752             error ("unordered comparison on non-floating point argument");
4753           return error_mark_node;
4754         }
4755       common = 1;
4756       break;
4757
4758     default:
4759       break;
4760     }
4761
4762   if (((code0 == INTEGER_TYPE || code0 == REAL_TYPE || code0 == COMPLEX_TYPE
4763         || code0 == ENUMERAL_TYPE)
4764        && (code1 == INTEGER_TYPE || code1 == REAL_TYPE
4765            || code1 == COMPLEX_TYPE || code1 == ENUMERAL_TYPE)))
4766     arithmetic_types_p = 1;
4767   else
4768     {
4769       arithmetic_types_p = 0;
4770       /* Vector arithmetic is only allowed when both sides are vectors.  */
4771       if (code0 == VECTOR_TYPE && code1 == VECTOR_TYPE)
4772         {
4773           if (!tree_int_cst_equal (TYPE_SIZE (type0), TYPE_SIZE (type1))
4774               || !vector_types_compatible_elements_p (type0, type1))
4775             {
4776               if (complain & tf_error)
4777                 binary_op_error (location, code, type0, type1);
4778               return error_mark_node;
4779             }
4780           arithmetic_types_p = 1;
4781         }
4782     }
4783   /* Determine the RESULT_TYPE, if it is not already known.  */
4784   if (!result_type
4785       && arithmetic_types_p
4786       && (shorten || common || short_compare))
4787     {
4788       result_type = cp_common_type (type0, type1);
4789       if (complain & tf_warning)
4790         do_warn_double_promotion (result_type, type0, type1,
4791                                   "implicit conversion from %qT to %qT "
4792                                   "to match other operand of binary "
4793                                   "expression",
4794                                   location);
4795     }
4796
4797   if (!result_type)
4798     {
4799       if (complain & tf_error)
4800         error ("invalid operands of types %qT and %qT to binary %qO",
4801                TREE_TYPE (orig_op0), TREE_TYPE (orig_op1), code);
4802       return error_mark_node;
4803     }
4804
4805   /* If we're in a template, the only thing we need to know is the
4806      RESULT_TYPE.  */
4807   if (processing_template_decl)
4808     {
4809       /* Since the middle-end checks the type when doing a build2, we
4810          need to build the tree in pieces.  This built tree will never
4811          get out of the front-end as we replace it when instantiating
4812          the template.  */
4813       tree tmp = build2 (resultcode,
4814                          build_type ? build_type : result_type,
4815                          NULL_TREE, op1);
4816       TREE_OPERAND (tmp, 0) = op0;
4817       return tmp;
4818     }
4819
4820   if (arithmetic_types_p)
4821     {
4822       bool first_complex = (code0 == COMPLEX_TYPE);
4823       bool second_complex = (code1 == COMPLEX_TYPE);
4824       int none_complex = (!first_complex && !second_complex);
4825
4826       /* Adapted from patch for c/24581.  */
4827       if (first_complex != second_complex
4828           && (code == PLUS_EXPR
4829               || code == MINUS_EXPR
4830               || code == MULT_EXPR
4831               || (code == TRUNC_DIV_EXPR && first_complex))
4832           && TREE_CODE (TREE_TYPE (result_type)) == REAL_TYPE
4833           && flag_signed_zeros)
4834         {
4835           /* An operation on mixed real/complex operands must be
4836              handled specially, but the language-independent code can
4837              more easily optimize the plain complex arithmetic if
4838              -fno-signed-zeros.  */
4839           tree real_type = TREE_TYPE (result_type);
4840           tree real, imag;
4841           if (first_complex)
4842             {
4843               if (TREE_TYPE (op0) != result_type)
4844                 op0 = cp_convert_and_check (result_type, op0, complain);
4845               if (TREE_TYPE (op1) != real_type)
4846                 op1 = cp_convert_and_check (real_type, op1, complain);
4847             }
4848           else
4849             {
4850               if (TREE_TYPE (op0) != real_type)
4851                 op0 = cp_convert_and_check (real_type, op0, complain);
4852               if (TREE_TYPE (op1) != result_type)
4853                 op1 = cp_convert_and_check (result_type, op1, complain);
4854             }
4855           if (TREE_CODE (op0) == ERROR_MARK || TREE_CODE (op1) == ERROR_MARK)
4856             return error_mark_node;
4857           if (first_complex)
4858             {
4859               op0 = save_expr (op0);
4860               real = cp_build_unary_op (REALPART_EXPR, op0, 1, complain);
4861               imag = cp_build_unary_op (IMAGPART_EXPR, op0, 1, complain);
4862               switch (code)
4863                 {
4864                 case MULT_EXPR:
4865                 case TRUNC_DIV_EXPR:
4866                   op1 = save_expr (op1);
4867                   imag = build2 (resultcode, real_type, imag, op1);
4868                   /* Fall through.  */
4869                 case PLUS_EXPR:
4870                 case MINUS_EXPR:
4871                   real = build2 (resultcode, real_type, real, op1);
4872                   break;
4873                 default:
4874                   gcc_unreachable();
4875                 }
4876             }
4877           else
4878             {
4879               op1 = save_expr (op1);
4880               real = cp_build_unary_op (REALPART_EXPR, op1, 1, complain);
4881               imag = cp_build_unary_op (IMAGPART_EXPR, op1, 1, complain);
4882               switch (code)
4883                 {
4884                 case MULT_EXPR:
4885                   op0 = save_expr (op0);
4886                   imag = build2 (resultcode, real_type, op0, imag);
4887                   /* Fall through.  */
4888                 case PLUS_EXPR:
4889                   real = build2 (resultcode, real_type, op0, real);
4890                   break;
4891                 case MINUS_EXPR:
4892                   real = build2 (resultcode, real_type, op0, real);
4893                   imag = build1 (NEGATE_EXPR, real_type, imag);
4894                   break;
4895                 default:
4896                   gcc_unreachable();
4897                 }
4898             }
4899           real = fold_if_not_in_template (real);
4900           imag = fold_if_not_in_template (imag);
4901           result = build2 (COMPLEX_EXPR, result_type, real, imag);
4902           result = fold_if_not_in_template (result);
4903           return result;
4904         }
4905
4906       /* For certain operations (which identify themselves by shorten != 0)
4907          if both args were extended from the same smaller type,
4908          do the arithmetic in that type and then extend.
4909
4910          shorten !=0 and !=1 indicates a bitwise operation.
4911          For them, this optimization is safe only if
4912          both args are zero-extended or both are sign-extended.
4913          Otherwise, we might change the result.
4914          E.g., (short)-1 | (unsigned short)-1 is (int)-1
4915          but calculated in (unsigned short) it would be (unsigned short)-1.  */
4916
4917       if (shorten && none_complex)
4918         {
4919           orig_type = result_type;
4920           final_type = result_type;
4921           result_type = shorten_binary_op (result_type, op0, op1,
4922                                            shorten == -1);
4923         }
4924
4925       /* Comparison operations are shortened too but differently.
4926          They identify themselves by setting short_compare = 1.  */
4927
4928       if (short_compare)
4929         {
4930           /* Don't write &op0, etc., because that would prevent op0
4931              from being kept in a register.
4932              Instead, make copies of the our local variables and
4933              pass the copies by reference, then copy them back afterward.  */
4934           tree xop0 = op0, xop1 = op1, xresult_type = result_type;
4935           enum tree_code xresultcode = resultcode;
4936           tree val
4937             = shorten_compare (location, &xop0, &xop1, &xresult_type,
4938                                &xresultcode);
4939           if (val != 0)
4940             return cp_convert (boolean_type_node, val, complain);
4941           op0 = xop0, op1 = xop1;
4942           converted = 1;
4943           resultcode = xresultcode;
4944         }
4945
4946       if ((short_compare || code == MIN_EXPR || code == MAX_EXPR)
4947           && warn_sign_compare
4948           /* Do not warn until the template is instantiated; we cannot
4949              bound the ranges of the arguments until that point.  */
4950           && !processing_template_decl
4951           && (complain & tf_warning)
4952           && c_inhibit_evaluation_warnings == 0
4953           /* Even unsigned enum types promote to signed int.  We don't
4954              want to issue -Wsign-compare warnings for this case.  */
4955           && !enum_cast_to_int (orig_op0)
4956           && !enum_cast_to_int (orig_op1))
4957         {
4958           tree oop0 = maybe_constant_value (orig_op0);
4959           tree oop1 = maybe_constant_value (orig_op1);
4960
4961           if (TREE_CODE (oop0) != INTEGER_CST)
4962             oop0 = orig_op0;
4963           if (TREE_CODE (oop1) != INTEGER_CST)
4964             oop1 = orig_op1;
4965           warn_for_sign_compare (location, oop0, oop1, op0, op1, 
4966                                  result_type, resultcode);
4967         }
4968     }
4969
4970   /* If CONVERTED is zero, both args will be converted to type RESULT_TYPE.
4971      Then the expression will be built.
4972      It will be given type FINAL_TYPE if that is nonzero;
4973      otherwise, it will be given type RESULT_TYPE.  */
4974   if (! converted)
4975     {
4976       if (TREE_TYPE (op0) != result_type)
4977         op0 = cp_convert_and_check (result_type, op0, complain);
4978       if (TREE_TYPE (op1) != result_type)
4979         op1 = cp_convert_and_check (result_type, op1, complain);
4980
4981       if (op0 == error_mark_node || op1 == error_mark_node)
4982         return error_mark_node;
4983     }
4984
4985   if (build_type == NULL_TREE)
4986     build_type = result_type;
4987
4988   if ((flag_sanitize & (SANITIZE_SHIFT | SANITIZE_DIVIDE
4989                         | SANITIZE_FLOAT_DIVIDE))
4990       && !processing_template_decl
4991       && do_ubsan_in_current_function ()
4992       && (doing_div_or_mod || doing_shift))
4993     {
4994       /* OP0 and/or OP1 might have side-effects.  */
4995       op0 = cp_save_expr (op0);
4996       op1 = cp_save_expr (op1);
4997       op0 = fold_non_dependent_expr (op0);
4998       op1 = fold_non_dependent_expr (op1);
4999       if (doing_div_or_mod && (flag_sanitize & (SANITIZE_DIVIDE
5000                                                 | SANITIZE_FLOAT_DIVIDE)))
5001         {
5002           /* For diagnostics we want to use the promoted types without
5003              shorten_binary_op.  So convert the arguments to the
5004              original result_type.  */
5005           tree cop0 = op0;
5006           tree cop1 = op1;
5007           if (orig_type != NULL && result_type != orig_type)
5008             {
5009               cop0 = cp_convert (orig_type, op0, complain);
5010               cop1 = cp_convert (orig_type, op1, complain);
5011             }
5012           instrument_expr = ubsan_instrument_division (location, cop0, cop1);
5013         }
5014       else if (doing_shift && (flag_sanitize & SANITIZE_SHIFT))
5015         instrument_expr = ubsan_instrument_shift (location, code, op0, op1);
5016     }
5017
5018   result = build2 (resultcode, build_type, op0, op1);
5019   result = fold_if_not_in_template (result);
5020   if (final_type != 0)
5021     result = cp_convert (final_type, result, complain);
5022
5023   if (TREE_OVERFLOW_P (result) 
5024       && !TREE_OVERFLOW_P (op0) 
5025       && !TREE_OVERFLOW_P (op1))
5026     overflow_warning (location, result);
5027
5028   if (instrument_expr != NULL)
5029     result = fold_build2 (COMPOUND_EXPR, TREE_TYPE (result),
5030                           instrument_expr, result);
5031
5032   return result;
5033 }
5034
5035 /* Build a VEC_PERM_EXPR.
5036    This is a simple wrapper for c_build_vec_perm_expr.  */
5037 tree
5038 build_x_vec_perm_expr (location_t loc,
5039                         tree arg0, tree arg1, tree arg2,
5040                         tsubst_flags_t complain)
5041 {
5042   tree orig_arg0 = arg0;
5043   tree orig_arg1 = arg1;
5044   tree orig_arg2 = arg2;
5045   if (processing_template_decl)
5046     {
5047       if (type_dependent_expression_p (arg0)
5048           || type_dependent_expression_p (arg1)
5049           || type_dependent_expression_p (arg2))
5050         return build_min_nt_loc (loc, VEC_PERM_EXPR, arg0, arg1, arg2);
5051       arg0 = build_non_dependent_expr (arg0);
5052       if (arg1)
5053         arg1 = build_non_dependent_expr (arg1);
5054       arg2 = build_non_dependent_expr (arg2);
5055     }
5056   tree exp = c_build_vec_perm_expr (loc, arg0, arg1, arg2, complain & tf_error);
5057   if (processing_template_decl && exp != error_mark_node)
5058     return build_min_non_dep (VEC_PERM_EXPR, exp, orig_arg0,
5059                               orig_arg1, orig_arg2);
5060   return exp;
5061 }
5062 \f
5063 /* Return a tree for the sum or difference (RESULTCODE says which)
5064    of pointer PTROP and integer INTOP.  */
5065
5066 static tree
5067 cp_pointer_int_sum (enum tree_code resultcode, tree ptrop, tree intop,
5068                     tsubst_flags_t complain)
5069 {
5070   tree res_type = TREE_TYPE (ptrop);
5071
5072   /* pointer_int_sum() uses size_in_bytes() on the TREE_TYPE(res_type)
5073      in certain circumstance (when it's valid to do so).  So we need
5074      to make sure it's complete.  We don't need to check here, if we
5075      can actually complete it at all, as those checks will be done in
5076      pointer_int_sum() anyway.  */
5077   complete_type (TREE_TYPE (res_type));
5078
5079   return pointer_int_sum (input_location, resultcode, ptrop,
5080                           fold_if_not_in_template (intop),
5081                           complain & tf_warning_or_error);
5082 }
5083
5084 /* Return a tree for the difference of pointers OP0 and OP1.
5085    The resulting tree has type int.  */
5086
5087 static tree
5088 pointer_diff (tree op0, tree op1, tree ptrtype, tsubst_flags_t complain)
5089 {
5090   tree result;
5091   tree restype = ptrdiff_type_node;
5092   tree target_type = TREE_TYPE (ptrtype);
5093
5094   if (!complete_type_or_else (target_type, NULL_TREE))
5095     return error_mark_node;
5096
5097   if (VOID_TYPE_P (target_type))
5098     {
5099       if (complain & tf_error)
5100         permerror (input_location, "ISO C++ forbids using pointer of "
5101                    "type %<void *%> in subtraction");
5102       else
5103         return error_mark_node;
5104     }
5105   if (TREE_CODE (target_type) == FUNCTION_TYPE)
5106     {
5107       if (complain & tf_error)
5108         permerror (input_location, "ISO C++ forbids using pointer to "
5109                    "a function in subtraction");
5110       else
5111         return error_mark_node;
5112     }
5113   if (TREE_CODE (target_type) == METHOD_TYPE)
5114     {
5115       if (complain & tf_error)
5116         permerror (input_location, "ISO C++ forbids using pointer to "
5117                    "a method in subtraction");
5118       else
5119         return error_mark_node;
5120     }
5121
5122   /* First do the subtraction as integers;
5123      then drop through to build the divide operator.  */
5124
5125   op0 = cp_build_binary_op (input_location,
5126                             MINUS_EXPR,
5127                             cp_convert (restype, op0, complain),
5128                             cp_convert (restype, op1, complain),
5129                             complain);
5130
5131   /* This generates an error if op1 is a pointer to an incomplete type.  */
5132   if (!COMPLETE_TYPE_P (TREE_TYPE (TREE_TYPE (op1))))
5133     {
5134       if (complain & tf_error)
5135         error ("invalid use of a pointer to an incomplete type in "
5136                "pointer arithmetic");
5137       else
5138         return error_mark_node;
5139     }
5140
5141   if (pointer_to_zero_sized_aggr_p (TREE_TYPE (op1)))
5142     {
5143       if (complain & tf_error)
5144         error ("arithmetic on pointer to an empty aggregate");
5145       else
5146         return error_mark_node;
5147     }
5148
5149   op1 = (TYPE_PTROB_P (ptrtype)
5150          ? size_in_bytes (target_type)
5151          : integer_one_node);
5152
5153   /* Do the division.  */
5154
5155   result = build2 (EXACT_DIV_EXPR, restype, op0,
5156                    cp_convert (restype, op1, complain));
5157   return fold_if_not_in_template (result);
5158 }
5159 \f
5160 /* Construct and perhaps optimize a tree representation
5161    for a unary operation.  CODE, a tree_code, specifies the operation
5162    and XARG is the operand.  */
5163
5164 tree
5165 build_x_unary_op (location_t loc, enum tree_code code, tree xarg,
5166                   tsubst_flags_t complain)
5167 {
5168   tree orig_expr = xarg;
5169   tree exp;
5170   int ptrmem = 0;
5171
5172   if (processing_template_decl)
5173     {
5174       if (type_dependent_expression_p (xarg))
5175         return build_min_nt_loc (loc, code, xarg, NULL_TREE);
5176
5177       xarg = build_non_dependent_expr (xarg);
5178     }
5179
5180   exp = NULL_TREE;
5181
5182   /* [expr.unary.op] says:
5183
5184        The address of an object of incomplete type can be taken.
5185
5186      (And is just the ordinary address operator, not an overloaded
5187      "operator &".)  However, if the type is a template
5188      specialization, we must complete the type at this point so that
5189      an overloaded "operator &" will be available if required.  */
5190   if (code == ADDR_EXPR
5191       && TREE_CODE (xarg) != TEMPLATE_ID_EXPR
5192       && ((CLASS_TYPE_P (TREE_TYPE (xarg))
5193            && !COMPLETE_TYPE_P (complete_type (TREE_TYPE (xarg))))
5194           || (TREE_CODE (xarg) == OFFSET_REF)))
5195     /* Don't look for a function.  */;
5196   else
5197     exp = build_new_op (loc, code, LOOKUP_NORMAL, xarg, NULL_TREE,
5198                         NULL_TREE, /*overload=*/NULL, complain);
5199   if (!exp && code == ADDR_EXPR)
5200     {
5201       if (is_overloaded_fn (xarg))
5202         {
5203           tree fn = get_first_fn (xarg);
5204           if (DECL_CONSTRUCTOR_P (fn) || DECL_DESTRUCTOR_P (fn))
5205             {
5206               if (complain & tf_error)
5207                 error (DECL_CONSTRUCTOR_P (fn)
5208                        ? G_("taking address of constructor %qE")
5209                        : G_("taking address of destructor %qE"),
5210                        xarg);
5211               return error_mark_node;
5212             }
5213         }
5214
5215       /* A pointer to member-function can be formed only by saying
5216          &X::mf.  */
5217       if (!flag_ms_extensions && TREE_CODE (TREE_TYPE (xarg)) == METHOD_TYPE
5218           && (TREE_CODE (xarg) != OFFSET_REF || !PTRMEM_OK_P (xarg)))
5219         {
5220           if (TREE_CODE (xarg) != OFFSET_REF
5221               || !TYPE_P (TREE_OPERAND (xarg, 0)))
5222             {
5223               if (complain & tf_error)
5224                 {
5225                   error ("invalid use of %qE to form a "
5226                          "pointer-to-member-function", xarg);
5227                   if (TREE_CODE (xarg) != OFFSET_REF)
5228                     inform (input_location, "  a qualified-id is required");
5229                 }
5230               return error_mark_node;
5231             }
5232           else
5233             {
5234               if (complain & tf_error)
5235                 error ("parentheses around %qE cannot be used to form a"
5236                        " pointer-to-member-function",
5237                        xarg);
5238               else
5239                 return error_mark_node;
5240               PTRMEM_OK_P (xarg) = 1;
5241             }
5242         }
5243
5244       if (TREE_CODE (xarg) == OFFSET_REF)
5245         {
5246           ptrmem = PTRMEM_OK_P (xarg);
5247
5248           if (!ptrmem && !flag_ms_extensions
5249               && TREE_CODE (TREE_TYPE (TREE_OPERAND (xarg, 1))) == METHOD_TYPE)
5250             {
5251               /* A single non-static member, make sure we don't allow a
5252                  pointer-to-member.  */
5253               xarg = build2 (OFFSET_REF, TREE_TYPE (xarg),
5254                              TREE_OPERAND (xarg, 0),
5255                              ovl_cons (TREE_OPERAND (xarg, 1), NULL_TREE));
5256               PTRMEM_OK_P (xarg) = ptrmem;
5257             }
5258         }
5259
5260       exp = cp_build_addr_expr_strict (xarg, complain);
5261     }
5262
5263   if (processing_template_decl && exp != error_mark_node)
5264     exp = build_min_non_dep (code, exp, orig_expr,
5265                              /*For {PRE,POST}{INC,DEC}REMENT_EXPR*/NULL_TREE);
5266   if (TREE_CODE (exp) == ADDR_EXPR)
5267     PTRMEM_OK_P (exp) = ptrmem;
5268   return exp;
5269 }
5270
5271 /* Like c_common_truthvalue_conversion, but handle pointer-to-member
5272    constants, where a null value is represented by an INTEGER_CST of
5273    -1.  */
5274
5275 tree
5276 cp_truthvalue_conversion (tree expr)
5277 {
5278   tree type = TREE_TYPE (expr);
5279   if (TYPE_PTRDATAMEM_P (type)
5280       /* Avoid ICE on invalid use of non-static member function.  */
5281       || TREE_CODE (expr) == FUNCTION_DECL)
5282     return build_binary_op (EXPR_LOCATION (expr),
5283                             NE_EXPR, expr, nullptr_node, 1);
5284   else if (TYPE_PTR_P (type) || TYPE_PTRMEMFUNC_P (type))
5285     {
5286       /* With -Wzero-as-null-pointer-constant do not warn for an
5287          'if (p)' or a 'while (!p)', where p is a pointer.  */
5288       tree ret;
5289       ++c_inhibit_evaluation_warnings;
5290       ret = c_common_truthvalue_conversion (input_location, expr);
5291       --c_inhibit_evaluation_warnings;
5292       return ret;
5293     }
5294   else
5295     return c_common_truthvalue_conversion (input_location, expr);
5296 }
5297
5298 /* Just like cp_truthvalue_conversion, but we want a CLEANUP_POINT_EXPR.  */
5299
5300 tree
5301 condition_conversion (tree expr)
5302 {
5303   tree t;
5304   if (processing_template_decl)
5305     return expr;
5306   t = perform_implicit_conversion_flags (boolean_type_node, expr,
5307                                          tf_warning_or_error, LOOKUP_NORMAL);
5308   t = fold_build_cleanup_point_expr (boolean_type_node, t);
5309   return t;
5310 }
5311
5312 /* Returns the address of T.  This function will fold away
5313    ADDR_EXPR of INDIRECT_REF.  */
5314
5315 tree
5316 build_address (tree t)
5317 {
5318   if (error_operand_p (t) || !cxx_mark_addressable (t))
5319     return error_mark_node;
5320   gcc_checking_assert (TREE_CODE (t) != CONSTRUCTOR);
5321   t = build_fold_addr_expr (t);
5322   if (TREE_CODE (t) != ADDR_EXPR)
5323     t = rvalue (t);
5324   return t;
5325 }
5326
5327 /* Return a NOP_EXPR converting EXPR to TYPE.  */
5328
5329 tree
5330 build_nop (tree type, tree expr)
5331 {
5332   if (type == error_mark_node || error_operand_p (expr))
5333     return expr;
5334   return build1 (NOP_EXPR, type, expr);
5335 }
5336
5337 /* Take the address of ARG, whatever that means under C++ semantics.
5338    If STRICT_LVALUE is true, require an lvalue; otherwise, allow xvalues
5339    and class rvalues as well.
5340
5341    Nothing should call this function directly; instead, callers should use
5342    cp_build_addr_expr or cp_build_addr_expr_strict.  */
5343
5344 static tree
5345 cp_build_addr_expr_1 (tree arg, bool strict_lvalue, tsubst_flags_t complain)
5346 {
5347   tree argtype;
5348   tree val;
5349
5350   if (!arg || error_operand_p (arg))
5351     return error_mark_node;
5352
5353   arg = mark_lvalue_use (arg);
5354   argtype = lvalue_type (arg);
5355
5356   gcc_assert (!identifier_p (arg) || !IDENTIFIER_OPNAME_P (arg));
5357
5358   if (TREE_CODE (arg) == COMPONENT_REF && type_unknown_p (arg)
5359       && !really_overloaded_fn (TREE_OPERAND (arg, 1)))
5360     {
5361       /* They're trying to take the address of a unique non-static
5362          member function.  This is ill-formed (except in MS-land),
5363          but let's try to DTRT.
5364          Note: We only handle unique functions here because we don't
5365          want to complain if there's a static overload; non-unique
5366          cases will be handled by instantiate_type.  But we need to
5367          handle this case here to allow casts on the resulting PMF.
5368          We could defer this in non-MS mode, but it's easier to give
5369          a useful error here.  */
5370
5371       /* Inside constant member functions, the `this' pointer
5372          contains an extra const qualifier.  TYPE_MAIN_VARIANT
5373          is used here to remove this const from the diagnostics
5374          and the created OFFSET_REF.  */
5375       tree base = TYPE_MAIN_VARIANT (TREE_TYPE (TREE_OPERAND (arg, 0)));
5376       tree fn = get_first_fn (TREE_OPERAND (arg, 1));
5377       mark_used (fn);
5378
5379       if (! flag_ms_extensions)
5380         {
5381           tree name = DECL_NAME (fn);
5382           if (!(complain & tf_error))
5383             return error_mark_node;
5384           else if (current_class_type
5385                    && TREE_OPERAND (arg, 0) == current_class_ref)
5386             /* An expression like &memfn.  */
5387             permerror (input_location, "ISO C++ forbids taking the address of an unqualified"
5388                        " or parenthesized non-static member function to form"
5389                        " a pointer to member function.  Say %<&%T::%D%>",
5390                        base, name);
5391           else
5392             permerror (input_location, "ISO C++ forbids taking the address of a bound member"
5393                        " function to form a pointer to member function."
5394                        "  Say %<&%T::%D%>",
5395                        base, name);
5396         }
5397       arg = build_offset_ref (base, fn, /*address_p=*/true, complain);
5398     }
5399
5400   /* Uninstantiated types are all functions.  Taking the
5401      address of a function is a no-op, so just return the
5402      argument.  */
5403   if (type_unknown_p (arg))
5404     return build1 (ADDR_EXPR, unknown_type_node, arg);
5405
5406   if (TREE_CODE (arg) == OFFSET_REF)
5407     /* We want a pointer to member; bypass all the code for actually taking
5408        the address of something.  */
5409     goto offset_ref;
5410
5411   /* Anything not already handled and not a true memory reference
5412      is an error.  */
5413   if (TREE_CODE (argtype) != FUNCTION_TYPE
5414       && TREE_CODE (argtype) != METHOD_TYPE)
5415     {
5416       cp_lvalue_kind kind = lvalue_kind (arg);
5417       if (kind == clk_none)
5418         {
5419           if (complain & tf_error)
5420             lvalue_error (input_location, lv_addressof);
5421           return error_mark_node;
5422         }
5423       if (strict_lvalue && (kind & (clk_rvalueref|clk_class)))
5424         {
5425           if (!(complain & tf_error))
5426             return error_mark_node;
5427           if (kind & clk_class)
5428             /* Make this a permerror because we used to accept it.  */
5429             permerror (input_location, "taking address of temporary");
5430           else
5431             error ("taking address of xvalue (rvalue reference)");
5432         }
5433     }
5434
5435   if (TREE_CODE (argtype) == REFERENCE_TYPE)
5436     {
5437       tree type = build_pointer_type (TREE_TYPE (argtype));
5438       arg = build1 (CONVERT_EXPR, type, arg);
5439       return arg;
5440     }
5441   else if (pedantic && DECL_MAIN_P (arg))
5442     {
5443       /* ARM $3.4 */
5444       /* Apparently a lot of autoconf scripts for C++ packages do this,
5445          so only complain if -Wpedantic.  */
5446       if (complain & (flag_pedantic_errors ? tf_error : tf_warning))
5447         pedwarn (input_location, OPT_Wpedantic,
5448                  "ISO C++ forbids taking address of function %<::main%>");
5449       else if (flag_pedantic_errors)
5450         return error_mark_node;
5451     }
5452
5453   /* Let &* cancel out to simplify resulting code.  */
5454   if (INDIRECT_REF_P (arg))
5455     {
5456       /* We don't need to have `current_class_ptr' wrapped in a
5457          NON_LVALUE_EXPR node.  */
5458       if (arg == current_class_ref)
5459         return current_class_ptr;
5460
5461       arg = TREE_OPERAND (arg, 0);
5462       if (TREE_CODE (TREE_TYPE (arg)) == REFERENCE_TYPE)
5463         {
5464           tree type = build_pointer_type (TREE_TYPE (TREE_TYPE (arg)));
5465           arg = build1 (CONVERT_EXPR, type, arg);
5466         }
5467       else
5468         /* Don't let this be an lvalue.  */
5469         arg = rvalue (arg);
5470       return arg;
5471     }
5472
5473   /* ??? Cope with user tricks that amount to offsetof.  */
5474   if (TREE_CODE (argtype) != FUNCTION_TYPE
5475       && TREE_CODE (argtype) != METHOD_TYPE
5476       && argtype != unknown_type_node
5477       && (val = get_base_address (arg))
5478       && COMPLETE_TYPE_P (TREE_TYPE (val))
5479       && INDIRECT_REF_P (val)
5480       && TREE_CONSTANT (TREE_OPERAND (val, 0)))
5481     {
5482       tree type = build_pointer_type (argtype);
5483       return fold_convert (type, fold_offsetof_1 (arg));
5484     }
5485
5486   /* Handle complex lvalues (when permitted)
5487      by reduction to simpler cases.  */
5488   val = unary_complex_lvalue (ADDR_EXPR, arg);
5489   if (val != 0)
5490     return val;
5491
5492   switch (TREE_CODE (arg))
5493     {
5494     CASE_CONVERT:
5495     case FLOAT_EXPR:
5496     case FIX_TRUNC_EXPR:
5497       /* Even if we're not being pedantic, we cannot allow this
5498          extension when we're instantiating in a SFINAE
5499          context.  */
5500       if (! lvalue_p (arg) && complain == tf_none)
5501         {
5502           if (complain & tf_error)
5503             permerror (input_location, "ISO C++ forbids taking the address of a cast to a non-lvalue expression");
5504           else
5505             return error_mark_node;
5506         }
5507       break;
5508
5509     case BASELINK:
5510       arg = BASELINK_FUNCTIONS (arg);
5511       /* Fall through.  */
5512
5513     case OVERLOAD:
5514       arg = OVL_CURRENT (arg);
5515       break;
5516
5517     case OFFSET_REF:
5518     offset_ref:
5519       /* Turn a reference to a non-static data member into a
5520          pointer-to-member.  */
5521       {
5522         tree type;
5523         tree t;
5524
5525         gcc_assert (PTRMEM_OK_P (arg));
5526
5527         t = TREE_OPERAND (arg, 1);
5528         if (TREE_CODE (TREE_TYPE (t)) == REFERENCE_TYPE)
5529           {
5530             if (complain & tf_error)
5531               error ("cannot create pointer to reference member %qD", t);
5532             return error_mark_node;
5533           }
5534
5535         type = build_ptrmem_type (context_for_name_lookup (t),
5536                                   TREE_TYPE (t));
5537         t = make_ptrmem_cst (type, TREE_OPERAND (arg, 1));
5538         return t;
5539       }
5540
5541     default:
5542       break;
5543     }
5544
5545   if (argtype != error_mark_node)
5546     argtype = build_pointer_type (argtype);
5547
5548   /* In a template, we are processing a non-dependent expression
5549      so we can just form an ADDR_EXPR with the correct type.  */
5550   if (processing_template_decl || TREE_CODE (arg) != COMPONENT_REF)
5551     {
5552       val = build_address (arg);
5553       if (TREE_CODE (arg) == OFFSET_REF)
5554         PTRMEM_OK_P (val) = PTRMEM_OK_P (arg);
5555     }
5556   else if (BASELINK_P (TREE_OPERAND (arg, 1)))
5557     {
5558       tree fn = BASELINK_FUNCTIONS (TREE_OPERAND (arg, 1));
5559
5560       /* We can only get here with a single static member
5561          function.  */
5562       gcc_assert (TREE_CODE (fn) == FUNCTION_DECL
5563                   && DECL_STATIC_FUNCTION_P (fn));
5564       mark_used (fn);
5565       val = build_address (fn);
5566       if (TREE_SIDE_EFFECTS (TREE_OPERAND (arg, 0)))
5567         /* Do not lose object's side effects.  */
5568         val = build2 (COMPOUND_EXPR, TREE_TYPE (val),
5569                       TREE_OPERAND (arg, 0), val);
5570     }
5571   else if (DECL_C_BIT_FIELD (TREE_OPERAND (arg, 1)))
5572     {
5573       if (complain & tf_error)
5574         error ("attempt to take address of bit-field structure member %qD",
5575                TREE_OPERAND (arg, 1));
5576       return error_mark_node;
5577     }
5578   else
5579     {
5580       tree object = TREE_OPERAND (arg, 0);
5581       tree field = TREE_OPERAND (arg, 1);
5582       gcc_assert (same_type_ignoring_top_level_qualifiers_p
5583                   (TREE_TYPE (object), decl_type_context (field)));
5584       val = build_address (arg);
5585     }
5586
5587   if (TYPE_PTR_P (argtype)
5588       && TREE_CODE (TREE_TYPE (argtype)) == METHOD_TYPE)
5589     {
5590       build_ptrmemfunc_type (argtype);
5591       val = build_ptrmemfunc (argtype, val, 0,
5592                               /*c_cast_p=*/false,
5593                               complain);
5594     }
5595
5596   return val;
5597 }
5598
5599 /* Take the address of ARG if it has one, even if it's an rvalue.  */
5600
5601 tree
5602 cp_build_addr_expr (tree arg, tsubst_flags_t complain)
5603 {
5604   return cp_build_addr_expr_1 (arg, 0, complain);
5605 }
5606
5607 /* Take the address of ARG, but only if it's an lvalue.  */
5608
5609 static tree
5610 cp_build_addr_expr_strict (tree arg, tsubst_flags_t complain)
5611 {
5612   return cp_build_addr_expr_1 (arg, 1, complain);
5613 }
5614
5615 /* C++: Must handle pointers to members.
5616
5617    Perhaps type instantiation should be extended to handle conversion
5618    from aggregates to types we don't yet know we want?  (Or are those
5619    cases typically errors which should be reported?)
5620
5621    NOCONVERT nonzero suppresses the default promotions
5622    (such as from short to int).  */
5623
5624 tree
5625 cp_build_unary_op (enum tree_code code, tree xarg, int noconvert, 
5626                    tsubst_flags_t complain)
5627 {
5628   /* No default_conversion here.  It causes trouble for ADDR_EXPR.  */
5629   tree arg = xarg;
5630   tree argtype = 0;
5631   const char *errstring = NULL;
5632   tree val;
5633   const char *invalid_op_diag;
5634
5635   if (!arg || error_operand_p (arg))
5636     return error_mark_node;
5637
5638   if ((invalid_op_diag
5639        = targetm.invalid_unary_op ((code == UNARY_PLUS_EXPR
5640                                     ? CONVERT_EXPR
5641                                     : code),
5642                                    TREE_TYPE (xarg))))
5643     {
5644       if (complain & tf_error)
5645         error (invalid_op_diag);
5646       return error_mark_node;
5647     }
5648
5649   switch (code)
5650     {
5651     case UNARY_PLUS_EXPR:
5652     case NEGATE_EXPR:
5653       {
5654         int flags = WANT_ARITH | WANT_ENUM;
5655         /* Unary plus (but not unary minus) is allowed on pointers.  */
5656         if (code == UNARY_PLUS_EXPR)
5657           flags |= WANT_POINTER;
5658         arg = build_expr_type_conversion (flags, arg, true);
5659         if (!arg)
5660           errstring = (code == NEGATE_EXPR
5661                        ? _("wrong type argument to unary minus")
5662                        : _("wrong type argument to unary plus"));
5663         else
5664           {
5665             if (!noconvert && CP_INTEGRAL_TYPE_P (TREE_TYPE (arg)))
5666               arg = cp_perform_integral_promotions (arg, complain);
5667
5668             /* Make sure the result is not an lvalue: a unary plus or minus
5669                expression is always a rvalue.  */
5670             arg = rvalue (arg);
5671           }
5672       }
5673       break;
5674
5675     case BIT_NOT_EXPR:
5676       if (TREE_CODE (TREE_TYPE (arg)) == COMPLEX_TYPE)
5677         {
5678           code = CONJ_EXPR;
5679           if (!noconvert)
5680             {
5681               arg = cp_default_conversion (arg, complain);
5682               if (arg == error_mark_node)
5683                 return error_mark_node;
5684             }
5685         }
5686       else if (!(arg = build_expr_type_conversion (WANT_INT | WANT_ENUM
5687                                                    | WANT_VECTOR_OR_COMPLEX,
5688                                                    arg, true)))
5689         errstring = _("wrong type argument to bit-complement");
5690       else if (!noconvert && CP_INTEGRAL_TYPE_P (TREE_TYPE (arg)))
5691         arg = cp_perform_integral_promotions (arg, complain);
5692       break;
5693
5694     case ABS_EXPR:
5695       if (!(arg = build_expr_type_conversion (WANT_ARITH | WANT_ENUM, arg, true)))
5696         errstring = _("wrong type argument to abs");
5697       else if (!noconvert)
5698         {
5699           arg = cp_default_conversion (arg, complain);
5700           if (arg == error_mark_node)
5701             return error_mark_node;
5702         }
5703       break;
5704
5705     case CONJ_EXPR:
5706       /* Conjugating a real value is a no-op, but allow it anyway.  */
5707       if (!(arg = build_expr_type_conversion (WANT_ARITH | WANT_ENUM, arg, true)))
5708         errstring = _("wrong type argument to conjugation");
5709       else if (!noconvert)
5710         {
5711           arg = cp_default_conversion (arg, complain);
5712           if (arg == error_mark_node)
5713             return error_mark_node;
5714         }
5715       break;
5716
5717     case TRUTH_NOT_EXPR:
5718       if (VECTOR_TYPE_P (TREE_TYPE (arg)))
5719         return cp_build_binary_op (input_location, EQ_EXPR, arg,
5720                                    build_zero_cst (TREE_TYPE (arg)), complain);
5721       arg = perform_implicit_conversion (boolean_type_node, arg,
5722                                          complain);
5723       val = invert_truthvalue_loc (input_location, arg);
5724       if (arg != error_mark_node)
5725         return val;
5726       errstring = _("in argument to unary !");
5727       break;
5728
5729     case NOP_EXPR:
5730       break;
5731
5732     case REALPART_EXPR:
5733     case IMAGPART_EXPR:
5734       arg = build_real_imag_expr (input_location, code, arg);
5735       if (arg == error_mark_node)
5736         return arg;
5737       else
5738         return fold_if_not_in_template (arg);
5739
5740     case PREINCREMENT_EXPR:
5741     case POSTINCREMENT_EXPR:
5742     case PREDECREMENT_EXPR:
5743     case POSTDECREMENT_EXPR:
5744       /* Handle complex lvalues (when permitted)
5745          by reduction to simpler cases.  */
5746
5747       val = unary_complex_lvalue (code, arg);
5748       if (val != 0)
5749         return val;
5750
5751       arg = mark_lvalue_use (arg);
5752
5753       /* Increment or decrement the real part of the value,
5754          and don't change the imaginary part.  */
5755       if (TREE_CODE (TREE_TYPE (arg)) == COMPLEX_TYPE)
5756         {
5757           tree real, imag;
5758
5759           arg = stabilize_reference (arg);
5760           real = cp_build_unary_op (REALPART_EXPR, arg, 1, complain);
5761           imag = cp_build_unary_op (IMAGPART_EXPR, arg, 1, complain);
5762           real = cp_build_unary_op (code, real, 1, complain);
5763           if (real == error_mark_node || imag == error_mark_node)
5764             return error_mark_node;
5765           return build2 (COMPLEX_EXPR, TREE_TYPE (arg),
5766                          real, imag);
5767         }
5768
5769       /* Report invalid types.  */
5770
5771       if (!(arg = build_expr_type_conversion (WANT_ARITH | WANT_POINTER,
5772                                               arg, true)))
5773         {
5774           if (code == PREINCREMENT_EXPR)
5775             errstring = _("no pre-increment operator for type");
5776           else if (code == POSTINCREMENT_EXPR)
5777             errstring = _("no post-increment operator for type");
5778           else if (code == PREDECREMENT_EXPR)
5779             errstring = _("no pre-decrement operator for type");
5780           else
5781             errstring = _("no post-decrement operator for type");
5782           break;
5783         }
5784       else if (arg == error_mark_node)
5785         return error_mark_node;
5786
5787       /* Report something read-only.  */
5788
5789       if (CP_TYPE_CONST_P (TREE_TYPE (arg))
5790           || TREE_READONLY (arg)) 
5791         {
5792           if (complain & tf_error)
5793             cxx_readonly_error (arg, ((code == PREINCREMENT_EXPR
5794                                       || code == POSTINCREMENT_EXPR)
5795                                      ? lv_increment : lv_decrement));
5796           else
5797             return error_mark_node;
5798         }
5799
5800       {
5801         tree inc;
5802         tree declared_type = unlowered_expr_type (arg);
5803
5804         argtype = TREE_TYPE (arg);
5805
5806         /* ARM $5.2.5 last annotation says this should be forbidden.  */
5807         if (TREE_CODE (argtype) == ENUMERAL_TYPE)
5808           {
5809             if (complain & tf_error)
5810               permerror (input_location, (code == PREINCREMENT_EXPR || code == POSTINCREMENT_EXPR)
5811                          ? G_("ISO C++ forbids incrementing an enum")
5812                          : G_("ISO C++ forbids decrementing an enum"));
5813             else
5814               return error_mark_node;
5815           }
5816
5817         /* Compute the increment.  */
5818
5819         if (TYPE_PTR_P (argtype))
5820           {
5821             tree type = complete_type (TREE_TYPE (argtype));
5822
5823             if (!COMPLETE_OR_VOID_TYPE_P (type))
5824               {
5825                 if (complain & tf_error)
5826                   error (((code == PREINCREMENT_EXPR
5827                            || code == POSTINCREMENT_EXPR))
5828                          ? G_("cannot increment a pointer to incomplete type %qT")
5829                          : G_("cannot decrement a pointer to incomplete type %qT"),
5830                          TREE_TYPE (argtype));
5831                 else
5832                   return error_mark_node;
5833               }
5834             else if (!TYPE_PTROB_P (argtype)) 
5835               {
5836                 if (complain & tf_error)
5837                   pedwarn (input_location, OPT_Wpointer_arith,
5838                            (code == PREINCREMENT_EXPR
5839                               || code == POSTINCREMENT_EXPR)
5840                            ? G_("ISO C++ forbids incrementing a pointer of type %qT")
5841                            : G_("ISO C++ forbids decrementing a pointer of type %qT"),
5842                            argtype);
5843                 else
5844                   return error_mark_node;
5845               }
5846
5847             inc = cxx_sizeof_nowarn (TREE_TYPE (argtype));
5848           }
5849         else
5850           inc = VECTOR_TYPE_P (argtype)
5851             ? build_one_cst (argtype)
5852             : integer_one_node;
5853
5854         inc = cp_convert (argtype, inc, complain);
5855
5856         /* If 'arg' is an Objective-C PROPERTY_REF expression, then we
5857            need to ask Objective-C to build the increment or decrement
5858            expression for it.  */
5859         if (objc_is_property_ref (arg))
5860           return objc_build_incr_expr_for_property_ref (input_location, code, 
5861                                                         arg, inc);      
5862
5863         /* Complain about anything else that is not a true lvalue.  */
5864         if (!lvalue_or_else (arg, ((code == PREINCREMENT_EXPR
5865                                     || code == POSTINCREMENT_EXPR)
5866                                    ? lv_increment : lv_decrement),
5867                              complain))
5868           return error_mark_node;
5869
5870         /* Forbid using -- on `bool'.  */
5871         if (TREE_CODE (declared_type) == BOOLEAN_TYPE)
5872           {
5873             if (code == POSTDECREMENT_EXPR || code == PREDECREMENT_EXPR)
5874               {
5875                 if (complain & tf_error)
5876                   error ("invalid use of Boolean expression as operand "
5877                          "to %<operator--%>");
5878                 return error_mark_node;
5879               }
5880             val = boolean_increment (code, arg);
5881           }
5882         else if (code == POSTINCREMENT_EXPR || code == POSTDECREMENT_EXPR)
5883           /* An rvalue has no cv-qualifiers.  */
5884           val = build2 (code, cv_unqualified (TREE_TYPE (arg)), arg, inc);
5885         else
5886           val = build2 (code, TREE_TYPE (arg), arg, inc);
5887
5888         TREE_SIDE_EFFECTS (val) = 1;
5889         return val;
5890       }
5891
5892     case ADDR_EXPR:
5893       /* Note that this operation never does default_conversion
5894          regardless of NOCONVERT.  */
5895       return cp_build_addr_expr (arg, complain);
5896
5897     default:
5898       break;
5899     }
5900
5901   if (!errstring)
5902     {
5903       if (argtype == 0)
5904         argtype = TREE_TYPE (arg);
5905       return fold_if_not_in_template (build1 (code, argtype, arg));
5906     }
5907
5908   if (complain & tf_error)
5909     error ("%s", errstring);
5910   return error_mark_node;
5911 }
5912
5913 /* Hook for the c-common bits that build a unary op.  */
5914 tree
5915 build_unary_op (location_t /*location*/,
5916                 enum tree_code code, tree xarg, int noconvert)
5917 {
5918   return cp_build_unary_op (code, xarg, noconvert, tf_warning_or_error);
5919 }
5920
5921 /* Apply unary lvalue-demanding operator CODE to the expression ARG
5922    for certain kinds of expressions which are not really lvalues
5923    but which we can accept as lvalues.
5924
5925    If ARG is not a kind of expression we can handle, return
5926    NULL_TREE.  */
5927
5928 tree
5929 unary_complex_lvalue (enum tree_code code, tree arg)
5930 {
5931   /* Inside a template, making these kinds of adjustments is
5932      pointless; we are only concerned with the type of the
5933      expression.  */
5934   if (processing_template_decl)
5935     return NULL_TREE;
5936
5937   /* Handle (a, b) used as an "lvalue".  */
5938   if (TREE_CODE (arg) == COMPOUND_EXPR)
5939     {
5940       tree real_result = cp_build_unary_op (code, TREE_OPERAND (arg, 1), 0,
5941                                             tf_warning_or_error);
5942       return build2 (COMPOUND_EXPR, TREE_TYPE (real_result),
5943                      TREE_OPERAND (arg, 0), real_result);
5944     }
5945
5946   /* Handle (a ? b : c) used as an "lvalue".  */
5947   if (TREE_CODE (arg) == COND_EXPR
5948       || TREE_CODE (arg) == MIN_EXPR || TREE_CODE (arg) == MAX_EXPR)
5949     return rationalize_conditional_expr (code, arg, tf_warning_or_error);
5950
5951   /* Handle (a = b), (++a), and (--a) used as an "lvalue".  */
5952   if (TREE_CODE (arg) == MODIFY_EXPR
5953       || TREE_CODE (arg) == PREINCREMENT_EXPR
5954       || TREE_CODE (arg) == PREDECREMENT_EXPR)
5955     {
5956       tree lvalue = TREE_OPERAND (arg, 0);
5957       if (TREE_SIDE_EFFECTS (lvalue))
5958         {
5959           lvalue = stabilize_reference (lvalue);
5960           arg = build2 (TREE_CODE (arg), TREE_TYPE (arg),
5961                         lvalue, TREE_OPERAND (arg, 1));
5962         }
5963       return unary_complex_lvalue
5964         (code, build2 (COMPOUND_EXPR, TREE_TYPE (lvalue), arg, lvalue));
5965     }
5966
5967   if (code != ADDR_EXPR)
5968     return NULL_TREE;
5969
5970   /* Handle (a = b) used as an "lvalue" for `&'.  */
5971   if (TREE_CODE (arg) == MODIFY_EXPR
5972       || TREE_CODE (arg) == INIT_EXPR)
5973     {
5974       tree real_result = cp_build_unary_op (code, TREE_OPERAND (arg, 0), 0,
5975                                             tf_warning_or_error);
5976       arg = build2 (COMPOUND_EXPR, TREE_TYPE (real_result),
5977                     arg, real_result);
5978       TREE_NO_WARNING (arg) = 1;
5979       return arg;
5980     }
5981
5982   if (TREE_CODE (TREE_TYPE (arg)) == FUNCTION_TYPE
5983       || TREE_CODE (TREE_TYPE (arg)) == METHOD_TYPE
5984       || TREE_CODE (arg) == OFFSET_REF)
5985     return NULL_TREE;
5986
5987   /* We permit compiler to make function calls returning
5988      objects of aggregate type look like lvalues.  */
5989   {
5990     tree targ = arg;
5991
5992     if (TREE_CODE (targ) == SAVE_EXPR)
5993       targ = TREE_OPERAND (targ, 0);
5994
5995     if (TREE_CODE (targ) == CALL_EXPR && MAYBE_CLASS_TYPE_P (TREE_TYPE (targ)))
5996       {
5997         if (TREE_CODE (arg) == SAVE_EXPR)
5998           targ = arg;
5999         else
6000           targ = build_cplus_new (TREE_TYPE (arg), arg, tf_warning_or_error);
6001         return build1 (ADDR_EXPR, build_pointer_type (TREE_TYPE (arg)), targ);
6002       }
6003
6004     if (TREE_CODE (arg) == SAVE_EXPR && INDIRECT_REF_P (targ))
6005       return build3 (SAVE_EXPR, build_pointer_type (TREE_TYPE (arg)),
6006                      TREE_OPERAND (targ, 0), current_function_decl, NULL);
6007   }
6008
6009   /* Don't let anything else be handled specially.  */
6010   return NULL_TREE;
6011 }
6012 \f
6013 /* Mark EXP saying that we need to be able to take the
6014    address of it; it should not be allocated in a register.
6015    Value is true if successful.
6016
6017    C++: we do not allow `current_class_ptr' to be addressable.  */
6018
6019 bool
6020 cxx_mark_addressable (tree exp)
6021 {
6022   tree x = exp;
6023
6024   while (1)
6025     switch (TREE_CODE (x))
6026       {
6027       case ADDR_EXPR:
6028       case COMPONENT_REF:
6029       case ARRAY_REF:
6030       case REALPART_EXPR:
6031       case IMAGPART_EXPR:
6032         x = TREE_OPERAND (x, 0);
6033         break;
6034
6035       case PARM_DECL:
6036         if (x == current_class_ptr)
6037           {
6038             error ("cannot take the address of %<this%>, which is an rvalue expression");
6039             TREE_ADDRESSABLE (x) = 1; /* so compiler doesn't die later.  */
6040             return true;
6041           }
6042         /* Fall through.  */
6043
6044       case VAR_DECL:
6045         /* Caller should not be trying to mark initialized
6046            constant fields addressable.  */
6047         gcc_assert (DECL_LANG_SPECIFIC (x) == 0
6048                     || DECL_IN_AGGR_P (x) == 0
6049                     || TREE_STATIC (x)
6050                     || DECL_EXTERNAL (x));
6051         /* Fall through.  */
6052
6053       case RESULT_DECL:
6054         if (DECL_REGISTER (x) && !TREE_ADDRESSABLE (x)
6055             && !DECL_ARTIFICIAL (x))
6056           {
6057             if (VAR_P (x) && DECL_HARD_REGISTER (x))
6058               {
6059                 error
6060                   ("address of explicit register variable %qD requested", x);
6061                 return false;
6062               }
6063             else if (extra_warnings)
6064               warning
6065                 (OPT_Wextra, "address requested for %qD, which is declared %<register%>", x);
6066           }
6067         TREE_ADDRESSABLE (x) = 1;
6068         return true;
6069
6070       case CONST_DECL:
6071       case FUNCTION_DECL:
6072         TREE_ADDRESSABLE (x) = 1;
6073         return true;
6074
6075       case CONSTRUCTOR:
6076         TREE_ADDRESSABLE (x) = 1;
6077         return true;
6078
6079       case TARGET_EXPR:
6080         TREE_ADDRESSABLE (x) = 1;
6081         cxx_mark_addressable (TREE_OPERAND (x, 0));
6082         return true;
6083
6084       default:
6085         return true;
6086     }
6087 }
6088 \f
6089 /* Build and return a conditional expression IFEXP ? OP1 : OP2.  */
6090
6091 tree
6092 build_x_conditional_expr (location_t loc, tree ifexp, tree op1, tree op2, 
6093                           tsubst_flags_t complain)
6094 {
6095   tree orig_ifexp = ifexp;
6096   tree orig_op1 = op1;
6097   tree orig_op2 = op2;
6098   tree expr;
6099
6100   if (processing_template_decl)
6101     {
6102       /* The standard says that the expression is type-dependent if
6103          IFEXP is type-dependent, even though the eventual type of the
6104          expression doesn't dependent on IFEXP.  */
6105       if (type_dependent_expression_p (ifexp)
6106           /* As a GNU extension, the middle operand may be omitted.  */
6107           || (op1 && type_dependent_expression_p (op1))
6108           || type_dependent_expression_p (op2))
6109         return build_min_nt_loc (loc, COND_EXPR, ifexp, op1, op2);
6110       ifexp = build_non_dependent_expr (ifexp);
6111       if (op1)
6112         op1 = build_non_dependent_expr (op1);
6113       op2 = build_non_dependent_expr (op2);
6114     }
6115
6116   expr = build_conditional_expr (loc, ifexp, op1, op2, complain);
6117   if (processing_template_decl && expr != error_mark_node
6118       && TREE_CODE (expr) != VEC_COND_EXPR)
6119     {
6120       tree min = build_min_non_dep (COND_EXPR, expr,
6121                                     orig_ifexp, orig_op1, orig_op2);
6122       /* In C++11, remember that the result is an lvalue or xvalue.
6123          In C++98, lvalue_kind can just assume lvalue in a template.  */
6124       if (cxx_dialect >= cxx11
6125           && lvalue_or_rvalue_with_address_p (expr)
6126           && !lvalue_or_rvalue_with_address_p (min))
6127         TREE_TYPE (min) = cp_build_reference_type (TREE_TYPE (min),
6128                                                    !real_lvalue_p (expr));
6129       expr = convert_from_reference (min);
6130     }
6131   return expr;
6132 }
6133 \f
6134 /* Given a list of expressions, return a compound expression
6135    that performs them all and returns the value of the last of them.  */
6136
6137 tree
6138 build_x_compound_expr_from_list (tree list, expr_list_kind exp,
6139                                  tsubst_flags_t complain)
6140 {
6141   tree expr = TREE_VALUE (list);
6142
6143   if (BRACE_ENCLOSED_INITIALIZER_P (expr)
6144       && !CONSTRUCTOR_IS_DIRECT_INIT (expr))
6145     {
6146       if (complain & tf_error)
6147         pedwarn (EXPR_LOC_OR_LOC (expr, input_location), 0,
6148                  "list-initializer for non-class type must not "
6149                  "be parenthesized");
6150       else
6151         return error_mark_node;
6152     }
6153
6154   if (TREE_CHAIN (list))
6155     {
6156       if (complain & tf_error)
6157         switch (exp)
6158           {
6159           case ELK_INIT:
6160             permerror (input_location, "expression list treated as compound "
6161                                        "expression in initializer");
6162             break;
6163           case ELK_MEM_INIT:
6164             permerror (input_location, "expression list treated as compound "
6165                                        "expression in mem-initializer");
6166             break;
6167           case ELK_FUNC_CAST:
6168             permerror (input_location, "expression list treated as compound "
6169                                        "expression in functional cast");
6170             break;
6171           default:
6172             gcc_unreachable ();
6173           }
6174       else
6175         return error_mark_node;
6176
6177       for (list = TREE_CHAIN (list); list; list = TREE_CHAIN (list))
6178         expr = build_x_compound_expr (EXPR_LOCATION (TREE_VALUE (list)),
6179                                       expr, TREE_VALUE (list), complain);
6180     }
6181
6182   return expr;
6183 }
6184
6185 /* Like build_x_compound_expr_from_list, but using a VEC.  */
6186
6187 tree
6188 build_x_compound_expr_from_vec (vec<tree, va_gc> *vec, const char *msg,
6189                                 tsubst_flags_t complain)
6190 {
6191   if (vec_safe_is_empty (vec))
6192     return NULL_TREE;
6193   else if (vec->length () == 1)
6194     return (*vec)[0];
6195   else
6196     {
6197       tree expr;
6198       unsigned int ix;
6199       tree t;
6200
6201       if (msg != NULL)
6202         {
6203           if (complain & tf_error)
6204             permerror (input_location,
6205                        "%s expression list treated as compound expression",
6206                        msg);
6207           else
6208             return error_mark_node;
6209         }
6210
6211       expr = (*vec)[0];
6212       for (ix = 1; vec->iterate (ix, &t); ++ix)
6213         expr = build_x_compound_expr (EXPR_LOCATION (t), expr,
6214                                       t, complain);
6215
6216       return expr;
6217     }
6218 }
6219
6220 /* Handle overloading of the ',' operator when needed.  */
6221
6222 tree
6223 build_x_compound_expr (location_t loc, tree op1, tree op2,
6224                        tsubst_flags_t complain)
6225 {
6226   tree result;
6227   tree orig_op1 = op1;
6228   tree orig_op2 = op2;
6229
6230   if (processing_template_decl)
6231     {
6232       if (type_dependent_expression_p (op1)
6233           || type_dependent_expression_p (op2))
6234         return build_min_nt_loc (loc, COMPOUND_EXPR, op1, op2);
6235       op1 = build_non_dependent_expr (op1);
6236       op2 = build_non_dependent_expr (op2);
6237     }
6238
6239   result = build_new_op (loc, COMPOUND_EXPR, LOOKUP_NORMAL, op1, op2,
6240                          NULL_TREE, /*overload=*/NULL, complain);
6241   if (!result)
6242     result = cp_build_compound_expr (op1, op2, complain);
6243
6244   if (processing_template_decl && result != error_mark_node)
6245     return build_min_non_dep (COMPOUND_EXPR, result, orig_op1, orig_op2);
6246
6247   return result;
6248 }
6249
6250 /* Like cp_build_compound_expr, but for the c-common bits.  */
6251
6252 tree
6253 build_compound_expr (location_t /*loc*/, tree lhs, tree rhs)
6254 {
6255   return cp_build_compound_expr (lhs, rhs, tf_warning_or_error);
6256 }
6257
6258 /* Build a compound expression.  */
6259
6260 tree
6261 cp_build_compound_expr (tree lhs, tree rhs, tsubst_flags_t complain)
6262 {
6263   lhs = convert_to_void (lhs, ICV_LEFT_OF_COMMA, complain);
6264
6265   if (lhs == error_mark_node || rhs == error_mark_node)
6266     return error_mark_node;
6267
6268   if (flag_cilkplus
6269       && (TREE_CODE (lhs) == CILK_SPAWN_STMT
6270           || TREE_CODE (rhs) == CILK_SPAWN_STMT))
6271     {
6272       location_t loc = (EXPR_HAS_LOCATION (lhs) ? EXPR_LOCATION (lhs)
6273                         : EXPR_LOCATION (rhs));
6274       error_at (loc,
6275                 "spawned function call cannot be part of a comma expression");
6276       return error_mark_node;
6277     }
6278
6279   if (TREE_CODE (rhs) == TARGET_EXPR)
6280     {
6281       /* If the rhs is a TARGET_EXPR, then build the compound
6282          expression inside the target_expr's initializer. This
6283          helps the compiler to eliminate unnecessary temporaries.  */
6284       tree init = TREE_OPERAND (rhs, 1);
6285
6286       init = build2 (COMPOUND_EXPR, TREE_TYPE (init), lhs, init);
6287       TREE_OPERAND (rhs, 1) = init;
6288
6289       return rhs;
6290     }
6291
6292   if (type_unknown_p (rhs))
6293     {
6294       if (complain & tf_error)
6295         error ("no context to resolve type of %qE", rhs);
6296       return error_mark_node;
6297     }
6298   
6299   return build2 (COMPOUND_EXPR, TREE_TYPE (rhs), lhs, rhs);
6300 }
6301
6302 /* Issue a diagnostic message if casting from SRC_TYPE to DEST_TYPE
6303    casts away constness.  CAST gives the type of cast.  Returns true
6304    if the cast is ill-formed, false if it is well-formed.
6305
6306    ??? This function warns for casting away any qualifier not just
6307    const.  We would like to specify exactly what qualifiers are casted
6308    away.
6309 */
6310
6311 static bool
6312 check_for_casting_away_constness (tree src_type, tree dest_type,
6313                                   enum tree_code cast, tsubst_flags_t complain)
6314 {
6315   /* C-style casts are allowed to cast away constness.  With
6316      WARN_CAST_QUAL, we still want to issue a warning.  */
6317   if (cast == CAST_EXPR && !warn_cast_qual)
6318     return false;
6319   
6320   if (!casts_away_constness (src_type, dest_type, complain))
6321     return false;
6322
6323   switch (cast)
6324     {
6325     case CAST_EXPR:
6326       if (complain & tf_warning)
6327         warning (OPT_Wcast_qual,
6328                  "cast from type %qT to type %qT casts away qualifiers",
6329                  src_type, dest_type);
6330       return false;
6331       
6332     case STATIC_CAST_EXPR:
6333       if (complain & tf_error)
6334         error ("static_cast from type %qT to type %qT casts away qualifiers",
6335                src_type, dest_type);
6336       return true;
6337       
6338     case REINTERPRET_CAST_EXPR:
6339       if (complain & tf_error)
6340         error ("reinterpret_cast from type %qT to type %qT casts away qualifiers",
6341                src_type, dest_type);
6342       return true;
6343
6344     default:
6345       gcc_unreachable();
6346     }
6347 }
6348
6349 /*
6350   Warns if the cast from expression EXPR to type TYPE is useless.
6351  */
6352 void
6353 maybe_warn_about_useless_cast (tree type, tree expr, tsubst_flags_t complain)
6354 {
6355   if (warn_useless_cast
6356       && complain & tf_warning)
6357     {
6358       if ((TREE_CODE (type) == REFERENCE_TYPE
6359            && (TYPE_REF_IS_RVALUE (type)
6360                ? xvalue_p (expr) : real_lvalue_p (expr))
6361            && same_type_p (TREE_TYPE (expr), TREE_TYPE (type)))
6362           || same_type_p (TREE_TYPE (expr), type))
6363         warning (OPT_Wuseless_cast, "useless cast to type %qT", type);
6364     }
6365 }
6366
6367 /* Convert EXPR (an expression with pointer-to-member type) to TYPE
6368    (another pointer-to-member type in the same hierarchy) and return
6369    the converted expression.  If ALLOW_INVERSE_P is permitted, a
6370    pointer-to-derived may be converted to pointer-to-base; otherwise,
6371    only the other direction is permitted.  If C_CAST_P is true, this
6372    conversion is taking place as part of a C-style cast.  */
6373
6374 tree
6375 convert_ptrmem (tree type, tree expr, bool allow_inverse_p,
6376                 bool c_cast_p, tsubst_flags_t complain)
6377 {
6378   if (TYPE_PTRDATAMEM_P (type))
6379     {
6380       tree delta;
6381
6382       if (TREE_CODE (expr) == PTRMEM_CST)
6383         expr = cplus_expand_constant (expr);
6384       delta = get_delta_difference (TYPE_PTRMEM_CLASS_TYPE (TREE_TYPE (expr)),
6385                                     TYPE_PTRMEM_CLASS_TYPE (type),
6386                                     allow_inverse_p,
6387                                     c_cast_p, complain);
6388       if (delta == error_mark_node)
6389         return error_mark_node;
6390
6391       if (!integer_zerop (delta))
6392         {
6393           tree cond, op1, op2;
6394
6395           cond = cp_build_binary_op (input_location,
6396                                      EQ_EXPR,
6397                                      expr,
6398                                      build_int_cst (TREE_TYPE (expr), -1),
6399                                      complain);
6400           op1 = build_nop (ptrdiff_type_node, expr);
6401           op2 = cp_build_binary_op (input_location,
6402                                     PLUS_EXPR, op1, delta,
6403                                     complain);
6404
6405           expr = fold_build3_loc (input_location,
6406                               COND_EXPR, ptrdiff_type_node, cond, op1, op2);
6407                          
6408         }
6409
6410       return build_nop (type, expr);
6411     }
6412   else
6413     return build_ptrmemfunc (TYPE_PTRMEMFUNC_FN_TYPE (type), expr,
6414                              allow_inverse_p, c_cast_p, complain);
6415 }
6416
6417 /* Perform a static_cast from EXPR to TYPE.  When C_CAST_P is true,
6418    this static_cast is being attempted as one of the possible casts
6419    allowed by a C-style cast.  (In that case, accessibility of base
6420    classes is not considered, and it is OK to cast away
6421    constness.)  Return the result of the cast.  *VALID_P is set to
6422    indicate whether or not the cast was valid.  */
6423
6424 static tree
6425 build_static_cast_1 (tree type, tree expr, bool c_cast_p,
6426                      bool *valid_p, tsubst_flags_t complain)
6427 {
6428   tree intype;
6429   tree result;
6430   cp_lvalue_kind clk;
6431
6432   /* Assume the cast is valid.  */
6433   *valid_p = true;
6434
6435   intype = unlowered_expr_type (expr);
6436
6437   /* Save casted types in the function's used types hash table.  */
6438   used_types_insert (type);
6439
6440   /* [expr.static.cast]
6441
6442      An lvalue of type "cv1 B", where B is a class type, can be cast
6443      to type "reference to cv2 D", where D is a class derived (clause
6444      _class.derived_) from B, if a valid standard conversion from
6445      "pointer to D" to "pointer to B" exists (_conv.ptr_), cv2 is the
6446      same cv-qualification as, or greater cv-qualification than, cv1,
6447      and B is not a virtual base class of D.  */
6448   /* We check this case before checking the validity of "TYPE t =
6449      EXPR;" below because for this case:
6450
6451        struct B {};
6452        struct D : public B { D(const B&); };
6453        extern B& b;
6454        void f() { static_cast<const D&>(b); }
6455
6456      we want to avoid constructing a new D.  The standard is not
6457      completely clear about this issue, but our interpretation is
6458      consistent with other compilers.  */
6459   if (TREE_CODE (type) == REFERENCE_TYPE
6460       && CLASS_TYPE_P (TREE_TYPE (type))
6461       && CLASS_TYPE_P (intype)
6462       && (TYPE_REF_IS_RVALUE (type) || real_lvalue_p (expr))
6463       && DERIVED_FROM_P (intype, TREE_TYPE (type))
6464       && can_convert (build_pointer_type (TYPE_MAIN_VARIANT (intype)),
6465                       build_pointer_type (TYPE_MAIN_VARIANT
6466                                           (TREE_TYPE (type))),
6467                       complain)
6468       && (c_cast_p
6469           || at_least_as_qualified_p (TREE_TYPE (type), intype)))
6470     {
6471       tree base;
6472
6473       /* There is a standard conversion from "D*" to "B*" even if "B"
6474          is ambiguous or inaccessible.  If this is really a
6475          static_cast, then we check both for inaccessibility and
6476          ambiguity.  However, if this is a static_cast being performed
6477          because the user wrote a C-style cast, then accessibility is
6478          not considered.  */
6479       base = lookup_base (TREE_TYPE (type), intype,
6480                           c_cast_p ? ba_unique : ba_check,
6481                           NULL, complain);
6482       expr = build_address (expr);
6483
6484       if (flag_sanitize & SANITIZE_VPTR)
6485         {
6486           tree ubsan_check
6487             = cp_ubsan_maybe_instrument_downcast (input_location, type, expr);
6488           if (ubsan_check)
6489             expr = ubsan_check;
6490         }
6491
6492       /* Convert from "B*" to "D*".  This function will check that "B"
6493          is not a virtual base of "D".  */
6494       expr = build_base_path (MINUS_EXPR, expr, base, /*nonnull=*/false,
6495                               complain);
6496
6497       /* Convert the pointer to a reference -- but then remember that
6498          there are no expressions with reference type in C++.
6499
6500          We call rvalue so that there's an actual tree code
6501          (NON_LVALUE_EXPR) for the static_cast; otherwise, if the operand
6502          is a variable with the same type, the conversion would get folded
6503          away, leaving just the variable and causing lvalue_kind to give
6504          the wrong answer.  */
6505       return convert_from_reference (rvalue (cp_fold_convert (type, expr)));
6506     }
6507
6508   /* "A glvalue of type cv1 T1 can be cast to type rvalue reference to
6509      cv2 T2 if cv2 T2 is reference-compatible with cv1 T1 (8.5.3)."  */
6510   if (TREE_CODE (type) == REFERENCE_TYPE
6511       && TYPE_REF_IS_RVALUE (type)
6512       && (clk = real_lvalue_p (expr))
6513       && reference_related_p (TREE_TYPE (type), intype)
6514       && (c_cast_p || at_least_as_qualified_p (TREE_TYPE (type), intype)))
6515     {
6516       if (clk == clk_ordinary)
6517         {
6518           /* Handle the (non-bit-field) lvalue case here by casting to
6519              lvalue reference and then changing it to an rvalue reference.
6520              Casting an xvalue to rvalue reference will be handled by the
6521              main code path.  */
6522           tree lref = cp_build_reference_type (TREE_TYPE (type), false);
6523           result = (perform_direct_initialization_if_possible
6524                     (lref, expr, c_cast_p, complain));
6525           result = cp_fold_convert (type, result);
6526           /* Make sure we don't fold back down to a named rvalue reference,
6527              because that would be an lvalue.  */
6528           if (DECL_P (result))
6529             result = build1 (NON_LVALUE_EXPR, type, result);
6530           return convert_from_reference (result);
6531         }
6532       else
6533         /* For a bit-field or packed field, bind to a temporary.  */
6534         expr = rvalue (expr);
6535     }
6536
6537   /* Resolve overloaded address here rather than once in
6538      implicit_conversion and again in the inverse code below.  */
6539   if (TYPE_PTRMEMFUNC_P (type) && type_unknown_p (expr))
6540     {
6541       expr = instantiate_type (type, expr, complain);
6542       intype = TREE_TYPE (expr);
6543     }
6544
6545   /* [expr.static.cast]
6546
6547      Any expression can be explicitly converted to type cv void.  */
6548   if (VOID_TYPE_P (type))
6549     return convert_to_void (expr, ICV_CAST, complain);
6550
6551   /* [class.abstract]
6552      An abstract class shall not be used ... as the type of an explicit
6553      conversion.  */
6554   if (abstract_virtuals_error_sfinae (ACU_CAST, type, complain))
6555     return error_mark_node;
6556
6557   /* [expr.static.cast]
6558
6559      An expression e can be explicitly converted to a type T using a
6560      static_cast of the form static_cast<T>(e) if the declaration T
6561      t(e);" is well-formed, for some invented temporary variable
6562      t.  */
6563   result = perform_direct_initialization_if_possible (type, expr,
6564                                                       c_cast_p, complain);
6565   if (result)
6566     {
6567       result = convert_from_reference (result);
6568
6569       /* [expr.static.cast]
6570
6571          If T is a reference type, the result is an lvalue; otherwise,
6572          the result is an rvalue.  */
6573       if (TREE_CODE (type) != REFERENCE_TYPE)
6574         result = rvalue (result);
6575       return result;
6576     }
6577
6578   /* [expr.static.cast]
6579
6580      The inverse of any standard conversion sequence (clause _conv_),
6581      other than the lvalue-to-rvalue (_conv.lval_), array-to-pointer
6582      (_conv.array_), function-to-pointer (_conv.func_), and boolean
6583      (_conv.bool_) conversions, can be performed explicitly using
6584      static_cast subject to the restriction that the explicit
6585      conversion does not cast away constness (_expr.const.cast_), and
6586      the following additional rules for specific cases:  */
6587   /* For reference, the conversions not excluded are: integral
6588      promotions, floating point promotion, integral conversions,
6589      floating point conversions, floating-integral conversions,
6590      pointer conversions, and pointer to member conversions.  */
6591   /* DR 128
6592
6593      A value of integral _or enumeration_ type can be explicitly
6594      converted to an enumeration type.  */
6595   /* The effect of all that is that any conversion between any two
6596      types which are integral, floating, or enumeration types can be
6597      performed.  */
6598   if ((INTEGRAL_OR_ENUMERATION_TYPE_P (type)
6599        || SCALAR_FLOAT_TYPE_P (type))
6600       && (INTEGRAL_OR_ENUMERATION_TYPE_P (intype)
6601           || SCALAR_FLOAT_TYPE_P (intype)))
6602     return ocp_convert (type, expr, CONV_C_CAST, LOOKUP_NORMAL, complain);
6603
6604   if (TYPE_PTR_P (type) && TYPE_PTR_P (intype)
6605       && CLASS_TYPE_P (TREE_TYPE (type))
6606       && CLASS_TYPE_P (TREE_TYPE (intype))
6607       && can_convert (build_pointer_type (TYPE_MAIN_VARIANT
6608                                           (TREE_TYPE (intype))),
6609                       build_pointer_type (TYPE_MAIN_VARIANT
6610                                           (TREE_TYPE (type))),
6611                       complain))
6612     {
6613       tree base;
6614
6615       if (!c_cast_p
6616           && check_for_casting_away_constness (intype, type, STATIC_CAST_EXPR,
6617                                                complain))
6618         return error_mark_node;
6619       base = lookup_base (TREE_TYPE (type), TREE_TYPE (intype),
6620                           c_cast_p ? ba_unique : ba_check,
6621                           NULL, complain);
6622       expr = build_base_path (MINUS_EXPR, expr, base, /*nonnull=*/false,
6623                               complain);
6624
6625       if (flag_sanitize & SANITIZE_VPTR)
6626         {
6627           tree ubsan_check
6628             = cp_ubsan_maybe_instrument_downcast (input_location, type, expr);
6629           if (ubsan_check)
6630             expr = ubsan_check;
6631         }
6632
6633       return cp_fold_convert (type, expr);
6634     }
6635
6636   if ((TYPE_PTRDATAMEM_P (type) && TYPE_PTRDATAMEM_P (intype))
6637       || (TYPE_PTRMEMFUNC_P (type) && TYPE_PTRMEMFUNC_P (intype)))
6638     {
6639       tree c1;
6640       tree c2;
6641       tree t1;
6642       tree t2;
6643
6644       c1 = TYPE_PTRMEM_CLASS_TYPE (intype);
6645       c2 = TYPE_PTRMEM_CLASS_TYPE (type);
6646
6647       if (TYPE_PTRDATAMEM_P (type))
6648         {
6649           t1 = (build_ptrmem_type
6650                 (c1,
6651                  TYPE_MAIN_VARIANT (TYPE_PTRMEM_POINTED_TO_TYPE (intype))));
6652           t2 = (build_ptrmem_type
6653                 (c2,
6654                  TYPE_MAIN_VARIANT (TYPE_PTRMEM_POINTED_TO_TYPE (type))));
6655         }
6656       else
6657         {
6658           t1 = intype;
6659           t2 = type;
6660         }
6661       if (can_convert (t1, t2, complain) || can_convert (t2, t1, complain))
6662         {
6663           if (!c_cast_p
6664               && check_for_casting_away_constness (intype, type,
6665                                                    STATIC_CAST_EXPR,
6666                                                    complain))
6667             return error_mark_node;
6668           return convert_ptrmem (type, expr, /*allow_inverse_p=*/1,
6669                                  c_cast_p, complain);
6670         }
6671     }
6672
6673   /* [expr.static.cast]
6674
6675      An rvalue of type "pointer to cv void" can be explicitly
6676      converted to a pointer to object type.  A value of type pointer
6677      to object converted to "pointer to cv void" and back to the
6678      original pointer type will have its original value.  */
6679   if (TYPE_PTR_P (intype)
6680       && VOID_TYPE_P (TREE_TYPE (intype))
6681       && TYPE_PTROB_P (type))
6682     {
6683       if (!c_cast_p
6684           && check_for_casting_away_constness (intype, type, STATIC_CAST_EXPR,
6685                                                complain))
6686         return error_mark_node;
6687       return build_nop (type, expr);
6688     }
6689
6690   *valid_p = false;
6691   return error_mark_node;
6692 }
6693
6694 /* Return an expression representing static_cast<TYPE>(EXPR).  */
6695
6696 tree
6697 build_static_cast (tree type, tree expr, tsubst_flags_t complain)
6698 {
6699   tree result;
6700   bool valid_p;
6701
6702   if (type == error_mark_node || expr == error_mark_node)
6703     return error_mark_node;
6704
6705   if (processing_template_decl)
6706     {
6707       expr = build_min (STATIC_CAST_EXPR, type, expr);
6708       /* We don't know if it will or will not have side effects.  */
6709       TREE_SIDE_EFFECTS (expr) = 1;
6710       return convert_from_reference (expr);
6711     }
6712
6713   /* build_c_cast puts on a NOP_EXPR to make the result not an lvalue.
6714      Strip such NOP_EXPRs if VALUE is being used in non-lvalue context.  */
6715   if (TREE_CODE (type) != REFERENCE_TYPE
6716       && TREE_CODE (expr) == NOP_EXPR
6717       && TREE_TYPE (expr) == TREE_TYPE (TREE_OPERAND (expr, 0)))
6718     expr = TREE_OPERAND (expr, 0);
6719
6720   result = build_static_cast_1 (type, expr, /*c_cast_p=*/false, &valid_p,
6721                                 complain);
6722   if (valid_p)
6723     {
6724       if (result != error_mark_node)
6725         maybe_warn_about_useless_cast (type, expr, complain);
6726       return result;
6727     }
6728
6729   if (complain & tf_error)
6730     error ("invalid static_cast from type %qT to type %qT",
6731            TREE_TYPE (expr), type);
6732   return error_mark_node;
6733 }
6734
6735 /* EXPR is an expression with member function or pointer-to-member
6736    function type.  TYPE is a pointer type.  Converting EXPR to TYPE is
6737    not permitted by ISO C++, but we accept it in some modes.  If we
6738    are not in one of those modes, issue a diagnostic.  Return the
6739    converted expression.  */
6740
6741 tree
6742 convert_member_func_to_ptr (tree type, tree expr, tsubst_flags_t complain)
6743 {
6744   tree intype;
6745   tree decl;
6746
6747   intype = TREE_TYPE (expr);
6748   gcc_assert (TYPE_PTRMEMFUNC_P (intype)
6749               || TREE_CODE (intype) == METHOD_TYPE);
6750
6751   if (!(complain & tf_warning_or_error))
6752     return error_mark_node;
6753
6754   if (pedantic || warn_pmf2ptr)
6755     pedwarn (input_location, pedantic ? OPT_Wpedantic : OPT_Wpmf_conversions,
6756              "converting from %qT to %qT", intype, type);
6757
6758   if (TREE_CODE (intype) == METHOD_TYPE)
6759     expr = build_addr_func (expr, complain);
6760   else if (TREE_CODE (expr) == PTRMEM_CST)
6761     expr = build_address (PTRMEM_CST_MEMBER (expr));
6762   else
6763     {
6764       decl = maybe_dummy_object (TYPE_PTRMEM_CLASS_TYPE (intype), 0);
6765       decl = build_address (decl);
6766       expr = get_member_function_from_ptrfunc (&decl, expr, complain);
6767     }
6768
6769   if (expr == error_mark_node)
6770     return error_mark_node;
6771
6772   return build_nop (type, expr);
6773 }
6774
6775 /* Return a representation for a reinterpret_cast from EXPR to TYPE.
6776    If C_CAST_P is true, this reinterpret cast is being done as part of
6777    a C-style cast.  If VALID_P is non-NULL, *VALID_P is set to
6778    indicate whether or not reinterpret_cast was valid.  */
6779
6780 static tree
6781 build_reinterpret_cast_1 (tree type, tree expr, bool c_cast_p,
6782                           bool *valid_p, tsubst_flags_t complain)
6783 {
6784   tree intype;
6785
6786   /* Assume the cast is invalid.  */
6787   if (valid_p)
6788     *valid_p = true;
6789
6790   if (type == error_mark_node || error_operand_p (expr))
6791     return error_mark_node;
6792
6793   intype = TREE_TYPE (expr);
6794
6795   /* Save casted types in the function's used types hash table.  */
6796   used_types_insert (type);
6797
6798   /* [expr.reinterpret.cast]
6799      An lvalue expression of type T1 can be cast to the type
6800      "reference to T2" if an expression of type "pointer to T1" can be
6801      explicitly converted to the type "pointer to T2" using a
6802      reinterpret_cast.  */
6803   if (TREE_CODE (type) == REFERENCE_TYPE)
6804     {
6805       if (! real_lvalue_p (expr))
6806         {
6807           if (complain & tf_error)
6808             error ("invalid cast of an rvalue expression of type "
6809                    "%qT to type %qT",
6810                    intype, type);
6811           return error_mark_node;
6812         }
6813
6814       /* Warn about a reinterpret_cast from "A*" to "B&" if "A" and
6815          "B" are related class types; the reinterpret_cast does not
6816          adjust the pointer.  */
6817       if (TYPE_PTR_P (intype)
6818           && (complain & tf_warning)
6819           && (comptypes (TREE_TYPE (intype), TREE_TYPE (type),
6820                          COMPARE_BASE | COMPARE_DERIVED)))
6821         warning (0, "casting %qT to %qT does not dereference pointer",
6822                  intype, type);
6823
6824       expr = cp_build_addr_expr (expr, complain);
6825
6826       if (warn_strict_aliasing > 2)
6827         strict_aliasing_warning (TREE_TYPE (expr), type, expr);
6828
6829       if (expr != error_mark_node)
6830         expr = build_reinterpret_cast_1
6831           (build_pointer_type (TREE_TYPE (type)), expr, c_cast_p,
6832            valid_p, complain);
6833       if (expr != error_mark_node)
6834         /* cp_build_indirect_ref isn't right for rvalue refs.  */
6835         expr = convert_from_reference (fold_convert (type, expr));
6836       return expr;
6837     }
6838
6839   /* As a G++ extension, we consider conversions from member
6840      functions, and pointers to member functions to
6841      pointer-to-function and pointer-to-void types.  If
6842      -Wno-pmf-conversions has not been specified,
6843      convert_member_func_to_ptr will issue an error message.  */
6844   if ((TYPE_PTRMEMFUNC_P (intype)
6845        || TREE_CODE (intype) == METHOD_TYPE)
6846       && TYPE_PTR_P (type)
6847       && (TREE_CODE (TREE_TYPE (type)) == FUNCTION_TYPE
6848           || VOID_TYPE_P (TREE_TYPE (type))))
6849     return convert_member_func_to_ptr (type, expr, complain);
6850
6851   /* If the cast is not to a reference type, the lvalue-to-rvalue,
6852      array-to-pointer, and function-to-pointer conversions are
6853      performed.  */
6854   expr = decay_conversion (expr, complain);
6855
6856   /* build_c_cast puts on a NOP_EXPR to make the result not an lvalue.
6857      Strip such NOP_EXPRs if VALUE is being used in non-lvalue context.  */
6858   if (TREE_CODE (expr) == NOP_EXPR
6859       && TREE_TYPE (expr) == TREE_TYPE (TREE_OPERAND (expr, 0)))
6860     expr = TREE_OPERAND (expr, 0);
6861
6862   if (error_operand_p (expr))
6863     return error_mark_node;
6864
6865   intype = TREE_TYPE (expr);
6866
6867   /* [expr.reinterpret.cast]
6868      A pointer can be converted to any integral type large enough to
6869      hold it. ... A value of type std::nullptr_t can be converted to
6870      an integral type; the conversion has the same meaning and
6871      validity as a conversion of (void*)0 to the integral type.  */
6872   if (CP_INTEGRAL_TYPE_P (type)
6873       && (TYPE_PTR_P (intype) || NULLPTR_TYPE_P (intype)))
6874     {
6875       if (TYPE_PRECISION (type) < TYPE_PRECISION (intype))
6876         {
6877           if (complain & tf_error)
6878             permerror (input_location, "cast from %qT to %qT loses precision",
6879                        intype, type);
6880           else
6881             return error_mark_node;
6882         }
6883       if (NULLPTR_TYPE_P (intype))
6884         return build_int_cst (type, 0);
6885     }
6886   /* [expr.reinterpret.cast]
6887      A value of integral or enumeration type can be explicitly
6888      converted to a pointer.  */
6889   else if (TYPE_PTR_P (type) && INTEGRAL_OR_ENUMERATION_TYPE_P (intype))
6890     /* OK */
6891     ;
6892   else if ((INTEGRAL_OR_ENUMERATION_TYPE_P (type)
6893             || TYPE_PTR_OR_PTRMEM_P (type))
6894            && same_type_p (type, intype))
6895     /* DR 799 */
6896     return rvalue (expr);
6897   else if ((TYPE_PTRFN_P (type) && TYPE_PTRFN_P (intype))
6898            || (TYPE_PTRMEMFUNC_P (type) && TYPE_PTRMEMFUNC_P (intype)))
6899     return fold_if_not_in_template (build_nop (type, expr));
6900   else if ((TYPE_PTRDATAMEM_P (type) && TYPE_PTRDATAMEM_P (intype))
6901            || (TYPE_PTROBV_P (type) && TYPE_PTROBV_P (intype)))
6902     {
6903       tree sexpr = expr;
6904
6905       if (!c_cast_p
6906           && check_for_casting_away_constness (intype, type,
6907                                                REINTERPRET_CAST_EXPR,
6908                                                complain))
6909         return error_mark_node;
6910       /* Warn about possible alignment problems.  */
6911       if (STRICT_ALIGNMENT && warn_cast_align
6912           && (complain & tf_warning)
6913           && !VOID_TYPE_P (type)
6914           && TREE_CODE (TREE_TYPE (intype)) != FUNCTION_TYPE
6915           && COMPLETE_TYPE_P (TREE_TYPE (type))
6916           && COMPLETE_TYPE_P (TREE_TYPE (intype))
6917           && TYPE_ALIGN (TREE_TYPE (type)) > TYPE_ALIGN (TREE_TYPE (intype)))
6918         warning (OPT_Wcast_align, "cast from %qT to %qT "
6919                  "increases required alignment of target type", intype, type);
6920
6921       /* We need to strip nops here, because the front end likes to
6922          create (int *)&a for array-to-pointer decay, instead of &a[0].  */
6923       STRIP_NOPS (sexpr);
6924       if (warn_strict_aliasing <= 2)
6925         strict_aliasing_warning (intype, type, sexpr);
6926
6927       return fold_if_not_in_template (build_nop (type, expr));
6928     }
6929   else if ((TYPE_PTRFN_P (type) && TYPE_PTROBV_P (intype))
6930            || (TYPE_PTRFN_P (intype) && TYPE_PTROBV_P (type)))
6931     {
6932       if (complain & tf_warning)
6933         /* C++11 5.2.10 p8 says that "Converting a function pointer to an
6934            object pointer type or vice versa is conditionally-supported."  */
6935         warning (OPT_Wconditionally_supported,
6936                  "casting between pointer-to-function and pointer-to-object "
6937                  "is conditionally-supported");
6938       return fold_if_not_in_template (build_nop (type, expr));
6939     }
6940   else if (TREE_CODE (type) == VECTOR_TYPE)
6941     return fold_if_not_in_template (convert_to_vector (type, expr));
6942   else if (TREE_CODE (intype) == VECTOR_TYPE
6943            && INTEGRAL_OR_ENUMERATION_TYPE_P (type))
6944     return fold_if_not_in_template (convert_to_integer (type, expr));
6945   else
6946     {
6947       if (valid_p)
6948         *valid_p = false;
6949       if (complain & tf_error)
6950         error ("invalid cast from type %qT to type %qT", intype, type);
6951       return error_mark_node;
6952     }
6953
6954   return cp_convert (type, expr, complain);
6955 }
6956
6957 tree
6958 build_reinterpret_cast (tree type, tree expr, tsubst_flags_t complain)
6959 {
6960   tree r;
6961
6962   if (type == error_mark_node || expr == error_mark_node)
6963     return error_mark_node;
6964
6965   if (processing_template_decl)
6966     {
6967       tree t = build_min (REINTERPRET_CAST_EXPR, type, expr);
6968
6969       if (!TREE_SIDE_EFFECTS (t)
6970           && type_dependent_expression_p (expr))
6971         /* There might turn out to be side effects inside expr.  */
6972         TREE_SIDE_EFFECTS (t) = 1;
6973       return convert_from_reference (t);
6974     }
6975
6976   r = build_reinterpret_cast_1 (type, expr, /*c_cast_p=*/false,
6977                                 /*valid_p=*/NULL, complain);
6978   if (r != error_mark_node)
6979     maybe_warn_about_useless_cast (type, expr, complain);
6980   return r;
6981 }
6982
6983 /* Perform a const_cast from EXPR to TYPE.  If the cast is valid,
6984    return an appropriate expression.  Otherwise, return
6985    error_mark_node.  If the cast is not valid, and COMPLAIN is true,
6986    then a diagnostic will be issued.  If VALID_P is non-NULL, we are
6987    performing a C-style cast, its value upon return will indicate
6988    whether or not the conversion succeeded.  */
6989
6990 static tree
6991 build_const_cast_1 (tree dst_type, tree expr, tsubst_flags_t complain,
6992                     bool *valid_p)
6993 {
6994   tree src_type;
6995   tree reference_type;
6996
6997   /* Callers are responsible for handling error_mark_node as a
6998      destination type.  */
6999   gcc_assert (dst_type != error_mark_node);
7000   /* In a template, callers should be building syntactic
7001      representations of casts, not using this machinery.  */
7002   gcc_assert (!processing_template_decl);
7003
7004   /* Assume the conversion is invalid.  */
7005   if (valid_p)
7006     *valid_p = false;
7007
7008   if (!POINTER_TYPE_P (dst_type) && !TYPE_PTRDATAMEM_P (dst_type))
7009     {
7010       if (complain & tf_error)
7011         error ("invalid use of const_cast with type %qT, "
7012                "which is not a pointer, "
7013                "reference, nor a pointer-to-data-member type", dst_type);
7014       return error_mark_node;
7015     }
7016
7017   if (TREE_CODE (TREE_TYPE (dst_type)) == FUNCTION_TYPE)
7018     {
7019       if (complain & tf_error)
7020         error ("invalid use of const_cast with type %qT, which is a pointer "
7021                "or reference to a function type", dst_type);
7022       return error_mark_node;
7023     }
7024
7025   /* Save casted types in the function's used types hash table.  */
7026   used_types_insert (dst_type);
7027
7028   src_type = TREE_TYPE (expr);
7029   /* Expressions do not really have reference types.  */
7030   if (TREE_CODE (src_type) == REFERENCE_TYPE)
7031     src_type = TREE_TYPE (src_type);
7032
7033   /* [expr.const.cast]
7034
7035      For two object types T1 and T2, if a pointer to T1 can be explicitly
7036      converted to the type "pointer to T2" using a const_cast, then the
7037      following conversions can also be made:
7038
7039      -- an lvalue of type T1 can be explicitly converted to an lvalue of
7040      type T2 using the cast const_cast<T2&>;
7041
7042      -- a glvalue of type T1 can be explicitly converted to an xvalue of
7043      type T2 using the cast const_cast<T2&&>; and
7044
7045      -- if T1 is a class type, a prvalue of type T1 can be explicitly
7046      converted to an xvalue of type T2 using the cast const_cast<T2&&>.  */
7047
7048   if (TREE_CODE (dst_type) == REFERENCE_TYPE)
7049     {
7050       reference_type = dst_type;
7051       if (!TYPE_REF_IS_RVALUE (dst_type)
7052           ? real_lvalue_p (expr)
7053           : (CLASS_TYPE_P (TREE_TYPE (dst_type))
7054              ? lvalue_p (expr)
7055              : lvalue_or_rvalue_with_address_p (expr)))
7056         /* OK.  */;
7057       else
7058         {
7059           if (complain & tf_error)
7060             error ("invalid const_cast of an rvalue of type %qT to type %qT",
7061                    src_type, dst_type);
7062           return error_mark_node;
7063         }
7064       dst_type = build_pointer_type (TREE_TYPE (dst_type));
7065       src_type = build_pointer_type (src_type);
7066     }
7067   else
7068     {
7069       reference_type = NULL_TREE;
7070       /* If the destination type is not a reference type, the
7071          lvalue-to-rvalue, array-to-pointer, and function-to-pointer
7072          conversions are performed.  */
7073       src_type = type_decays_to (src_type);
7074       if (src_type == error_mark_node)
7075         return error_mark_node;
7076     }
7077
7078   if (TYPE_PTR_P (src_type) || TYPE_PTRDATAMEM_P (src_type))
7079     {
7080       if (comp_ptr_ttypes_const (dst_type, src_type))
7081         {
7082           if (valid_p)
7083             {
7084               *valid_p = true;
7085               /* This cast is actually a C-style cast.  Issue a warning if
7086                  the user is making a potentially unsafe cast.  */
7087               check_for_casting_away_constness (src_type, dst_type,
7088                                                 CAST_EXPR, complain);
7089             }
7090           if (reference_type)
7091             {
7092               expr = cp_build_addr_expr (expr, complain);
7093               if (expr == error_mark_node)
7094                 return error_mark_node;
7095               expr = build_nop (reference_type, expr);
7096               return convert_from_reference (expr);
7097             }
7098           else
7099             {
7100               expr = decay_conversion (expr, complain);
7101               if (expr == error_mark_node)
7102                 return error_mark_node;
7103
7104               /* build_c_cast puts on a NOP_EXPR to make the result not an
7105                  lvalue.  Strip such NOP_EXPRs if VALUE is being used in
7106                  non-lvalue context.  */
7107               if (TREE_CODE (expr) == NOP_EXPR
7108                   && TREE_TYPE (expr) == TREE_TYPE (TREE_OPERAND (expr, 0)))
7109                 expr = TREE_OPERAND (expr, 0);
7110               return build_nop (dst_type, expr);
7111             }
7112         }
7113       else if (valid_p
7114                && !at_least_as_qualified_p (TREE_TYPE (dst_type),
7115                                             TREE_TYPE (src_type)))
7116         check_for_casting_away_constness (src_type, dst_type, CAST_EXPR,
7117                                           complain);
7118     }
7119
7120   if (complain & tf_error)
7121     error ("invalid const_cast from type %qT to type %qT",
7122            src_type, dst_type);
7123   return error_mark_node;
7124 }
7125
7126 tree
7127 build_const_cast (tree type, tree expr, tsubst_flags_t complain)
7128 {
7129   tree r;
7130
7131   if (type == error_mark_node || error_operand_p (expr))
7132     return error_mark_node;
7133
7134   if (processing_template_decl)
7135     {
7136       tree t = build_min (CONST_CAST_EXPR, type, expr);
7137
7138       if (!TREE_SIDE_EFFECTS (t)
7139           && type_dependent_expression_p (expr))
7140         /* There might turn out to be side effects inside expr.  */
7141         TREE_SIDE_EFFECTS (t) = 1;
7142       return convert_from_reference (t);
7143     }
7144
7145   r = build_const_cast_1 (type, expr, complain, /*valid_p=*/NULL);
7146   if (r != error_mark_node)
7147     maybe_warn_about_useless_cast (type, expr, complain);
7148   return r;
7149 }
7150
7151 /* Like cp_build_c_cast, but for the c-common bits.  */
7152
7153 tree
7154 build_c_cast (location_t /*loc*/, tree type, tree expr)
7155 {
7156   return cp_build_c_cast (type, expr, tf_warning_or_error);
7157 }
7158
7159 /* Build an expression representing an explicit C-style cast to type
7160    TYPE of expression EXPR.  */
7161
7162 tree
7163 cp_build_c_cast (tree type, tree expr, tsubst_flags_t complain)
7164 {
7165   tree value = expr;
7166   tree result;
7167   bool valid_p;
7168
7169   if (type == error_mark_node || error_operand_p (expr))
7170     return error_mark_node;
7171
7172   if (processing_template_decl)
7173     {
7174       tree t = build_min (CAST_EXPR, type,
7175                           tree_cons (NULL_TREE, value, NULL_TREE));
7176       /* We don't know if it will or will not have side effects.  */
7177       TREE_SIDE_EFFECTS (t) = 1;
7178       return convert_from_reference (t);
7179     }
7180
7181   /* Casts to a (pointer to a) specific ObjC class (or 'id' or
7182      'Class') should always be retained, because this information aids
7183      in method lookup.  */
7184   if (objc_is_object_ptr (type)
7185       && objc_is_object_ptr (TREE_TYPE (expr)))
7186     return build_nop (type, expr);
7187
7188   /* build_c_cast puts on a NOP_EXPR to make the result not an lvalue.
7189      Strip such NOP_EXPRs if VALUE is being used in non-lvalue context.  */
7190   if (TREE_CODE (type) != REFERENCE_TYPE
7191       && TREE_CODE (value) == NOP_EXPR
7192       && TREE_TYPE (value) == TREE_TYPE (TREE_OPERAND (value, 0)))
7193     value = TREE_OPERAND (value, 0);
7194
7195   if (TREE_CODE (type) == ARRAY_TYPE)
7196     {
7197       /* Allow casting from T1* to T2[] because Cfront allows it.
7198          NIHCL uses it. It is not valid ISO C++ however.  */
7199       if (TYPE_PTR_P (TREE_TYPE (expr)))
7200         {
7201           if (complain & tf_error)
7202             permerror (input_location, "ISO C++ forbids casting to an array type %qT", type);
7203           else
7204             return error_mark_node;
7205           type = build_pointer_type (TREE_TYPE (type));
7206         }
7207       else
7208         {
7209           if (complain & tf_error)
7210             error ("ISO C++ forbids casting to an array type %qT", type);
7211           return error_mark_node;
7212         }
7213     }
7214
7215   if (TREE_CODE (type) == FUNCTION_TYPE
7216       || TREE_CODE (type) == METHOD_TYPE)
7217     {
7218       if (complain & tf_error)
7219         error ("invalid cast to function type %qT", type);
7220       return error_mark_node;
7221     }
7222
7223   if (TYPE_PTR_P (type)
7224       && TREE_CODE (TREE_TYPE (value)) == INTEGER_TYPE
7225       /* Casting to an integer of smaller size is an error detected elsewhere.  */
7226       && TYPE_PRECISION (type) > TYPE_PRECISION (TREE_TYPE (value))
7227       /* Don't warn about converting any constant.  */
7228       && !TREE_CONSTANT (value))
7229     warning_at (input_location, OPT_Wint_to_pointer_cast, 
7230                 "cast to pointer from integer of different size");
7231
7232   /* A C-style cast can be a const_cast.  */
7233   result = build_const_cast_1 (type, value, complain & tf_warning,
7234                                &valid_p);
7235   if (valid_p)
7236     {
7237       if (result != error_mark_node)
7238         maybe_warn_about_useless_cast (type, value, complain);
7239       return result;
7240     }
7241
7242   /* Or a static cast.  */
7243   result = build_static_cast_1 (type, value, /*c_cast_p=*/true,
7244                                 &valid_p, complain);
7245   /* Or a reinterpret_cast.  */
7246   if (!valid_p)
7247     result = build_reinterpret_cast_1 (type, value, /*c_cast_p=*/true,
7248                                        &valid_p, complain);
7249   /* The static_cast or reinterpret_cast may be followed by a
7250      const_cast.  */
7251   if (valid_p
7252       /* A valid cast may result in errors if, for example, a
7253          conversion to an ambiguous base class is required.  */
7254       && !error_operand_p (result))
7255     {
7256       tree result_type;
7257
7258       maybe_warn_about_useless_cast (type, value, complain);
7259
7260       /* Non-class rvalues always have cv-unqualified type.  */
7261       if (!CLASS_TYPE_P (type))
7262         type = TYPE_MAIN_VARIANT (type);
7263       result_type = TREE_TYPE (result);
7264       if (!CLASS_TYPE_P (result_type) && TREE_CODE (type) != REFERENCE_TYPE)
7265         result_type = TYPE_MAIN_VARIANT (result_type);
7266       /* If the type of RESULT does not match TYPE, perform a
7267          const_cast to make it match.  If the static_cast or
7268          reinterpret_cast succeeded, we will differ by at most
7269          cv-qualification, so the follow-on const_cast is guaranteed
7270          to succeed.  */
7271       if (!same_type_p (non_reference (type), non_reference (result_type)))
7272         {
7273           result = build_const_cast_1 (type, result, false, &valid_p);
7274           gcc_assert (valid_p);
7275         }
7276       return result;
7277     }
7278
7279   return error_mark_node;
7280 }
7281 \f
7282 /* For use from the C common bits.  */
7283 tree
7284 build_modify_expr (location_t /*location*/,
7285                    tree lhs, tree /*lhs_origtype*/,
7286                    enum tree_code modifycode, 
7287                    location_t /*rhs_location*/, tree rhs,
7288                    tree /*rhs_origtype*/)
7289 {
7290   return cp_build_modify_expr (lhs, modifycode, rhs, tf_warning_or_error);
7291 }
7292
7293 /* Build an assignment expression of lvalue LHS from value RHS.
7294    MODIFYCODE is the code for a binary operator that we use
7295    to combine the old value of LHS with RHS to get the new value.
7296    Or else MODIFYCODE is NOP_EXPR meaning do a simple assignment.
7297
7298    C++: If MODIFYCODE is INIT_EXPR, then leave references unbashed.  */
7299
7300 tree
7301 cp_build_modify_expr (tree lhs, enum tree_code modifycode, tree rhs,
7302                       tsubst_flags_t complain)
7303 {
7304   tree result;
7305   tree newrhs = rhs;
7306   tree lhstype = TREE_TYPE (lhs);
7307   tree olhstype = lhstype;
7308   bool plain_assign = (modifycode == NOP_EXPR);
7309
7310   /* Avoid duplicate error messages from operands that had errors.  */
7311   if (error_operand_p (lhs) || error_operand_p (rhs))
7312     return error_mark_node;
7313
7314   /* Handle control structure constructs used as "lvalues".  */
7315   switch (TREE_CODE (lhs))
7316     {
7317       /* Handle --foo = 5; as these are valid constructs in C++.  */
7318     case PREDECREMENT_EXPR:
7319     case PREINCREMENT_EXPR:
7320       if (TREE_SIDE_EFFECTS (TREE_OPERAND (lhs, 0)))
7321         lhs = build2 (TREE_CODE (lhs), TREE_TYPE (lhs),
7322                       stabilize_reference (TREE_OPERAND (lhs, 0)),
7323                       TREE_OPERAND (lhs, 1));
7324       newrhs = cp_build_modify_expr (TREE_OPERAND (lhs, 0),
7325                                      modifycode, rhs, complain);
7326       if (newrhs == error_mark_node)
7327         return error_mark_node;
7328       return build2 (COMPOUND_EXPR, lhstype, lhs, newrhs);
7329
7330       /* Handle (a, b) used as an "lvalue".  */
7331     case COMPOUND_EXPR:
7332       newrhs = cp_build_modify_expr (TREE_OPERAND (lhs, 1),
7333                                      modifycode, rhs, complain);
7334       if (newrhs == error_mark_node)
7335         return error_mark_node;
7336       return build2 (COMPOUND_EXPR, lhstype,
7337                      TREE_OPERAND (lhs, 0), newrhs);
7338
7339     case MODIFY_EXPR:
7340       if (TREE_SIDE_EFFECTS (TREE_OPERAND (lhs, 0)))
7341         lhs = build2 (TREE_CODE (lhs), TREE_TYPE (lhs),
7342                       stabilize_reference (TREE_OPERAND (lhs, 0)),
7343                       TREE_OPERAND (lhs, 1));
7344       newrhs = cp_build_modify_expr (TREE_OPERAND (lhs, 0), modifycode, rhs,
7345                                      complain);
7346       if (newrhs == error_mark_node)
7347         return error_mark_node;
7348       return build2 (COMPOUND_EXPR, lhstype, lhs, newrhs);
7349
7350     case MIN_EXPR:
7351     case MAX_EXPR:
7352       /* MIN_EXPR and MAX_EXPR are currently only permitted as lvalues,
7353          when neither operand has side-effects.  */
7354       if (!lvalue_or_else (lhs, lv_assign, complain))
7355         return error_mark_node;
7356
7357       gcc_assert (!TREE_SIDE_EFFECTS (TREE_OPERAND (lhs, 0))
7358                   && !TREE_SIDE_EFFECTS (TREE_OPERAND (lhs, 1)));
7359
7360       lhs = build3 (COND_EXPR, TREE_TYPE (lhs),
7361                     build2 (TREE_CODE (lhs) == MIN_EXPR ? LE_EXPR : GE_EXPR,
7362                             boolean_type_node,
7363                             TREE_OPERAND (lhs, 0),
7364                             TREE_OPERAND (lhs, 1)),
7365                     TREE_OPERAND (lhs, 0),
7366                     TREE_OPERAND (lhs, 1));
7367       /* Fall through.  */
7368
7369       /* Handle (a ? b : c) used as an "lvalue".  */
7370     case COND_EXPR:
7371       {
7372         /* Produce (a ? (b = rhs) : (c = rhs))
7373            except that the RHS goes through a save-expr
7374            so the code to compute it is only emitted once.  */
7375         tree cond;
7376         tree preeval = NULL_TREE;
7377
7378         if (VOID_TYPE_P (TREE_TYPE (rhs)))
7379           {
7380             if (complain & tf_error)
7381               error ("void value not ignored as it ought to be");
7382             return error_mark_node;
7383           }
7384
7385         rhs = stabilize_expr (rhs, &preeval);
7386
7387         /* Check this here to avoid odd errors when trying to convert
7388            a throw to the type of the COND_EXPR.  */
7389         if (!lvalue_or_else (lhs, lv_assign, complain))
7390           return error_mark_node;
7391
7392         cond = build_conditional_expr
7393           (input_location, TREE_OPERAND (lhs, 0),
7394            cp_build_modify_expr (TREE_OPERAND (lhs, 1),
7395                                  modifycode, rhs, complain),
7396            cp_build_modify_expr (TREE_OPERAND (lhs, 2),
7397                                  modifycode, rhs, complain),
7398            complain);
7399
7400         if (cond == error_mark_node)
7401           return cond;
7402         /* Make sure the code to compute the rhs comes out
7403            before the split.  */
7404         if (preeval)
7405           cond = build2 (COMPOUND_EXPR, TREE_TYPE (lhs), preeval, cond);
7406         return cond;
7407       }
7408
7409     default:
7410       break;
7411     }
7412
7413   if (modifycode == INIT_EXPR)
7414     {
7415       if (BRACE_ENCLOSED_INITIALIZER_P (rhs))
7416         /* Do the default thing.  */;
7417       else if (TREE_CODE (rhs) == CONSTRUCTOR)
7418         {
7419           /* Compound literal.  */
7420           if (! same_type_p (TREE_TYPE (rhs), lhstype))
7421             /* Call convert to generate an error; see PR 11063.  */
7422             rhs = convert (lhstype, rhs);
7423           result = build2 (INIT_EXPR, lhstype, lhs, rhs);
7424           TREE_SIDE_EFFECTS (result) = 1;
7425           return result;
7426         }
7427       else if (! MAYBE_CLASS_TYPE_P (lhstype))
7428         /* Do the default thing.  */;
7429       else
7430         {
7431           vec<tree, va_gc> *rhs_vec = make_tree_vector_single (rhs);
7432           result = build_special_member_call (lhs, complete_ctor_identifier,
7433                                               &rhs_vec, lhstype, LOOKUP_NORMAL,
7434                                               complain);
7435           release_tree_vector (rhs_vec);
7436           if (result == NULL_TREE)
7437             return error_mark_node;
7438           return result;
7439         }
7440     }
7441   else
7442     {
7443       lhs = require_complete_type_sfinae (lhs, complain);
7444       if (lhs == error_mark_node)
7445         return error_mark_node;
7446
7447       if (modifycode == NOP_EXPR)
7448         {
7449           if (c_dialect_objc ())
7450             {
7451               result = objc_maybe_build_modify_expr (lhs, rhs);
7452               if (result)
7453                 return result;
7454             }
7455
7456           /* `operator=' is not an inheritable operator.  */
7457           if (! MAYBE_CLASS_TYPE_P (lhstype))
7458             /* Do the default thing.  */;
7459           else
7460             {
7461               result = build_new_op (input_location, MODIFY_EXPR,
7462                                      LOOKUP_NORMAL, lhs, rhs,
7463                                      make_node (NOP_EXPR), /*overload=*/NULL,
7464                                      complain);
7465               if (result == NULL_TREE)
7466                 return error_mark_node;
7467               return result;
7468             }
7469           lhstype = olhstype;
7470         }
7471       else
7472         {
7473           tree init = NULL_TREE;
7474
7475           /* A binary op has been requested.  Combine the old LHS
7476              value with the RHS producing the value we should actually
7477              store into the LHS.  */
7478           gcc_assert (!((TREE_CODE (lhstype) == REFERENCE_TYPE
7479                          && MAYBE_CLASS_TYPE_P (TREE_TYPE (lhstype)))
7480                         || MAYBE_CLASS_TYPE_P (lhstype)));
7481
7482           /* Preevaluate the RHS to make sure its evaluation is complete
7483              before the lvalue-to-rvalue conversion of the LHS:
7484
7485              [expr.ass] With respect to an indeterminately-sequenced
7486              function call, the operation of a compound assignment is a
7487              single evaluation. [ Note: Therefore, a function call shall
7488              not intervene between the lvalue-to-rvalue conversion and the
7489              side effect associated with any single compound assignment
7490              operator. -- end note ]  */
7491           lhs = stabilize_reference (lhs);
7492           rhs = rvalue (rhs);
7493           rhs = stabilize_expr (rhs, &init);
7494           newrhs = cp_build_binary_op (input_location,
7495                                        modifycode, lhs, rhs,
7496                                        complain);
7497           if (newrhs == error_mark_node)
7498             {
7499               if (complain & tf_error)
7500                 error ("  in evaluation of %<%Q(%#T, %#T)%>", modifycode,
7501                        TREE_TYPE (lhs), TREE_TYPE (rhs));
7502               return error_mark_node;
7503             }
7504
7505           if (init)
7506             newrhs = build2 (COMPOUND_EXPR, TREE_TYPE (newrhs), init, newrhs);
7507
7508           /* Now it looks like a plain assignment.  */
7509           modifycode = NOP_EXPR;
7510           if (c_dialect_objc ())
7511             {
7512               result = objc_maybe_build_modify_expr (lhs, newrhs);
7513               if (result)
7514                 return result;
7515             }
7516         }
7517       gcc_assert (TREE_CODE (lhstype) != REFERENCE_TYPE);
7518       gcc_assert (TREE_CODE (TREE_TYPE (newrhs)) != REFERENCE_TYPE);
7519     }
7520
7521   /* The left-hand side must be an lvalue.  */
7522   if (!lvalue_or_else (lhs, lv_assign, complain))
7523     return error_mark_node;
7524
7525   /* Warn about modifying something that is `const'.  Don't warn if
7526      this is initialization.  */
7527   if (modifycode != INIT_EXPR
7528       && (TREE_READONLY (lhs) || CP_TYPE_CONST_P (lhstype)
7529           /* Functions are not modifiable, even though they are
7530              lvalues.  */
7531           || TREE_CODE (TREE_TYPE (lhs)) == FUNCTION_TYPE
7532           || TREE_CODE (TREE_TYPE (lhs)) == METHOD_TYPE
7533           /* If it's an aggregate and any field is const, then it is
7534              effectively const.  */
7535           || (CLASS_TYPE_P (lhstype)
7536               && C_TYPE_FIELDS_READONLY (lhstype))))
7537     {
7538       if (complain & tf_error)
7539         cxx_readonly_error (lhs, lv_assign);
7540       else
7541         return error_mark_node;
7542     }
7543
7544   /* If storing into a structure or union member, it may have been given a
7545      lowered bitfield type.  We need to convert to the declared type first,
7546      so retrieve it now.  */
7547
7548   olhstype = unlowered_expr_type (lhs);
7549
7550   /* Convert new value to destination type.  */
7551
7552   if (TREE_CODE (lhstype) == ARRAY_TYPE)
7553     {
7554       int from_array;
7555
7556       if (BRACE_ENCLOSED_INITIALIZER_P (newrhs))
7557         {
7558           if (modifycode != INIT_EXPR)
7559             {
7560               if (complain & tf_error)
7561                 error ("assigning to an array from an initializer list");
7562               return error_mark_node;
7563             }
7564           if (check_array_initializer (lhs, lhstype, newrhs))
7565             return error_mark_node;
7566           newrhs = digest_init (lhstype, newrhs, complain);
7567           if (newrhs == error_mark_node)
7568             return error_mark_node;
7569         }
7570
7571       /* C++11 8.5/17: "If the destination type is an array of characters,
7572          an array of char16_t, an array of char32_t, or an array of wchar_t,
7573          and the initializer is a string literal...".  */
7574       else if (TREE_CODE (newrhs) == STRING_CST
7575                && char_type_p (TREE_TYPE (TYPE_MAIN_VARIANT (lhstype)))
7576                && modifycode == INIT_EXPR)
7577         {
7578           newrhs = digest_init (lhstype, newrhs, complain);
7579           if (newrhs == error_mark_node)
7580             return error_mark_node;
7581         }
7582
7583       else if (!same_or_base_type_p (TYPE_MAIN_VARIANT (lhstype),
7584                                      TYPE_MAIN_VARIANT (TREE_TYPE (newrhs))))
7585         {
7586           if (complain & tf_error)
7587             error ("incompatible types in assignment of %qT to %qT",
7588                    TREE_TYPE (rhs), lhstype);
7589           return error_mark_node;
7590         }
7591
7592       /* Allow array assignment in compiler-generated code.  */
7593       else if (!current_function_decl
7594                || !DECL_DEFAULTED_FN (current_function_decl))
7595         {
7596           /* This routine is used for both initialization and assignment.
7597              Make sure the diagnostic message differentiates the context.  */
7598           if (complain & tf_error)
7599             {
7600               if (modifycode == INIT_EXPR)
7601                 error ("array used as initializer");
7602               else
7603                 error ("invalid array assignment");
7604             }
7605           return error_mark_node;
7606         }
7607
7608       from_array = TREE_CODE (TREE_TYPE (newrhs)) == ARRAY_TYPE
7609                    ? 1 + (modifycode != INIT_EXPR): 0;
7610       return build_vec_init (lhs, NULL_TREE, newrhs,
7611                              /*explicit_value_init_p=*/false,
7612                              from_array, complain);
7613     }
7614
7615   if (modifycode == INIT_EXPR)
7616     /* Calls with INIT_EXPR are all direct-initialization, so don't set
7617        LOOKUP_ONLYCONVERTING.  */
7618     newrhs = convert_for_initialization (lhs, olhstype, newrhs, LOOKUP_NORMAL,
7619                                          ICR_INIT, NULL_TREE, 0,
7620                                          complain);
7621   else
7622     newrhs = convert_for_assignment (olhstype, newrhs, ICR_ASSIGN,
7623                                      NULL_TREE, 0, complain, LOOKUP_IMPLICIT);
7624
7625   if (!same_type_p (lhstype, olhstype))
7626     newrhs = cp_convert_and_check (lhstype, newrhs, complain);
7627
7628   if (modifycode != INIT_EXPR)
7629     {
7630       if (TREE_CODE (newrhs) == CALL_EXPR
7631           && TYPE_NEEDS_CONSTRUCTING (lhstype))
7632         newrhs = build_cplus_new (lhstype, newrhs, complain);
7633
7634       /* Can't initialize directly from a TARGET_EXPR, since that would
7635          cause the lhs to be constructed twice, and possibly result in
7636          accidental self-initialization.  So we force the TARGET_EXPR to be
7637          expanded without a target.  */
7638       if (TREE_CODE (newrhs) == TARGET_EXPR)
7639         newrhs = build2 (COMPOUND_EXPR, TREE_TYPE (newrhs), newrhs,
7640                          TREE_OPERAND (newrhs, 0));
7641     }
7642
7643   if (newrhs == error_mark_node)
7644     return error_mark_node;
7645
7646   if (c_dialect_objc () && flag_objc_gc)
7647     {
7648       result = objc_generate_write_barrier (lhs, modifycode, newrhs);
7649
7650       if (result)
7651         return result;
7652     }
7653
7654   result = build2 (modifycode == NOP_EXPR ? MODIFY_EXPR : INIT_EXPR,
7655                    lhstype, lhs, newrhs);
7656
7657   TREE_SIDE_EFFECTS (result) = 1;
7658   if (!plain_assign)
7659     TREE_NO_WARNING (result) = 1;
7660
7661   return result;
7662 }
7663
7664 tree
7665 build_x_modify_expr (location_t loc, tree lhs, enum tree_code modifycode,
7666                      tree rhs, tsubst_flags_t complain)
7667 {
7668   if (processing_template_decl)
7669     return build_min_nt_loc (loc, MODOP_EXPR, lhs,
7670                              build_min_nt_loc (loc, modifycode, NULL_TREE,
7671                                                NULL_TREE), rhs);
7672
7673   if (modifycode != NOP_EXPR)
7674     {
7675       tree rval = build_new_op (loc, MODIFY_EXPR, LOOKUP_NORMAL, lhs, rhs,
7676                                 make_node (modifycode), /*overload=*/NULL,
7677                                 complain);
7678       if (rval)
7679         {
7680           TREE_NO_WARNING (rval) = 1;
7681           return rval;
7682         }
7683     }
7684   return cp_build_modify_expr (lhs, modifycode, rhs, complain);
7685 }
7686
7687 /* Helper function for get_delta_difference which assumes FROM is a base
7688    class of TO.  Returns a delta for the conversion of pointer-to-member
7689    of FROM to pointer-to-member of TO.  If the conversion is invalid and 
7690    tf_error is not set in COMPLAIN returns error_mark_node, otherwise
7691    returns zero.  If FROM is not a base class of TO, returns NULL_TREE.
7692    If C_CAST_P is true, this conversion is taking place as part of a 
7693    C-style cast.  */
7694
7695 static tree
7696 get_delta_difference_1 (tree from, tree to, bool c_cast_p,
7697                         tsubst_flags_t complain)
7698 {
7699   tree binfo;
7700   base_kind kind;
7701
7702   binfo = lookup_base (to, from, c_cast_p ? ba_unique : ba_check,
7703                        &kind, complain);
7704
7705   if (binfo == error_mark_node)
7706     {
7707       if (!(complain & tf_error))
7708         return error_mark_node;
7709
7710       error ("   in pointer to member function conversion");
7711       return size_zero_node;
7712     }
7713   else if (binfo)
7714     {
7715       if (kind != bk_via_virtual)
7716         return BINFO_OFFSET (binfo);
7717       else
7718         /* FROM is a virtual base class of TO.  Issue an error or warning
7719            depending on whether or not this is a reinterpret cast.  */
7720         {
7721           if (!(complain & tf_error))
7722             return error_mark_node;
7723
7724           error ("pointer to member conversion via virtual base %qT",
7725                  BINFO_TYPE (binfo_from_vbase (binfo)));
7726
7727           return size_zero_node;
7728         }
7729       }
7730   else
7731     return NULL_TREE;
7732 }
7733
7734 /* Get difference in deltas for different pointer to member function
7735    types.  If the conversion is invalid and tf_error is not set in
7736    COMPLAIN, returns error_mark_node, otherwise returns an integer
7737    constant of type PTRDIFF_TYPE_NODE and its value is zero if the
7738    conversion is invalid.  If ALLOW_INVERSE_P is true, then allow reverse
7739    conversions as well.  If C_CAST_P is true this conversion is taking
7740    place as part of a C-style cast.
7741
7742    Note that the naming of FROM and TO is kind of backwards; the return
7743    value is what we add to a TO in order to get a FROM.  They are named
7744    this way because we call this function to find out how to convert from
7745    a pointer to member of FROM to a pointer to member of TO.  */
7746
7747 static tree
7748 get_delta_difference (tree from, tree to,
7749                       bool allow_inverse_p,
7750                       bool c_cast_p, tsubst_flags_t complain)
7751 {
7752   tree result;
7753
7754   if (same_type_ignoring_top_level_qualifiers_p (from, to))
7755     /* Pointer to member of incomplete class is permitted*/
7756     result = size_zero_node;
7757   else
7758     result = get_delta_difference_1 (from, to, c_cast_p, complain);
7759
7760   if (result == error_mark_node)
7761     return error_mark_node;
7762
7763   if (!result)
7764   {
7765     if (!allow_inverse_p)
7766       {
7767         if (!(complain & tf_error))
7768           return error_mark_node;
7769
7770         error_not_base_type (from, to);
7771         error ("   in pointer to member conversion");
7772         result = size_zero_node;
7773       }
7774     else
7775       {
7776         result = get_delta_difference_1 (to, from, c_cast_p, complain);
7777
7778         if (result == error_mark_node)
7779           return error_mark_node;
7780
7781         if (result)
7782           result = size_diffop_loc (input_location,
7783                                     size_zero_node, result);
7784         else
7785           {
7786             if (!(complain & tf_error))
7787               return error_mark_node;
7788
7789             error_not_base_type (from, to);
7790             error ("   in pointer to member conversion");
7791             result = size_zero_node;
7792           }
7793       }
7794   }
7795
7796   return fold_if_not_in_template (convert_to_integer (ptrdiff_type_node,
7797                                                       result));
7798 }
7799
7800 /* Return a constructor for the pointer-to-member-function TYPE using
7801    the other components as specified.  */
7802
7803 tree
7804 build_ptrmemfunc1 (tree type, tree delta, tree pfn)
7805 {
7806   tree u = NULL_TREE;
7807   tree delta_field;
7808   tree pfn_field;
7809   vec<constructor_elt, va_gc> *v;
7810
7811   /* Pull the FIELD_DECLs out of the type.  */
7812   pfn_field = TYPE_FIELDS (type);
7813   delta_field = DECL_CHAIN (pfn_field);
7814
7815   /* Make sure DELTA has the type we want.  */
7816   delta = convert_and_check (input_location, delta_type_node, delta);
7817
7818   /* Convert to the correct target type if necessary.  */
7819   pfn = fold_convert (TREE_TYPE (pfn_field), pfn);
7820
7821   /* Finish creating the initializer.  */
7822   vec_alloc (v, 2);
7823   CONSTRUCTOR_APPEND_ELT(v, pfn_field, pfn);
7824   CONSTRUCTOR_APPEND_ELT(v, delta_field, delta);
7825   u = build_constructor (type, v);
7826   TREE_CONSTANT (u) = TREE_CONSTANT (pfn) & TREE_CONSTANT (delta);
7827   TREE_STATIC (u) = (TREE_CONSTANT (u)
7828                      && (initializer_constant_valid_p (pfn, TREE_TYPE (pfn))
7829                          != NULL_TREE)
7830                      && (initializer_constant_valid_p (delta, TREE_TYPE (delta))
7831                          != NULL_TREE));
7832   return u;
7833 }
7834
7835 /* Build a constructor for a pointer to member function.  It can be
7836    used to initialize global variables, local variable, or used
7837    as a value in expressions.  TYPE is the POINTER to METHOD_TYPE we
7838    want to be.
7839
7840    If FORCE is nonzero, then force this conversion, even if
7841    we would rather not do it.  Usually set when using an explicit
7842    cast.  A C-style cast is being processed iff C_CAST_P is true.
7843
7844    Return error_mark_node, if something goes wrong.  */
7845
7846 tree
7847 build_ptrmemfunc (tree type, tree pfn, int force, bool c_cast_p,
7848                   tsubst_flags_t complain)
7849 {
7850   tree fn;
7851   tree pfn_type;
7852   tree to_type;
7853
7854   if (error_operand_p (pfn))
7855     return error_mark_node;
7856
7857   pfn_type = TREE_TYPE (pfn);
7858   to_type = build_ptrmemfunc_type (type);
7859
7860   /* Handle multiple conversions of pointer to member functions.  */
7861   if (TYPE_PTRMEMFUNC_P (pfn_type))
7862     {
7863       tree delta = NULL_TREE;
7864       tree npfn = NULL_TREE;
7865       tree n;
7866
7867       if (!force
7868           && !can_convert_arg (to_type, TREE_TYPE (pfn), pfn,
7869                                LOOKUP_NORMAL, complain))
7870         {
7871           if (complain & tf_error)
7872             error ("invalid conversion to type %qT from type %qT",
7873                    to_type, pfn_type);
7874           else
7875             return error_mark_node;
7876         }
7877
7878       n = get_delta_difference (TYPE_PTRMEMFUNC_OBJECT_TYPE (pfn_type),
7879                                 TYPE_PTRMEMFUNC_OBJECT_TYPE (to_type),
7880                                 force,
7881                                 c_cast_p, complain);
7882       if (n == error_mark_node)
7883         return error_mark_node;
7884
7885       /* We don't have to do any conversion to convert a
7886          pointer-to-member to its own type.  But, we don't want to
7887          just return a PTRMEM_CST if there's an explicit cast; that
7888          cast should make the expression an invalid template argument.  */
7889       if (TREE_CODE (pfn) != PTRMEM_CST)
7890         {
7891           if (same_type_p (to_type, pfn_type))
7892             return pfn;
7893           else if (integer_zerop (n))
7894             return build_reinterpret_cast (to_type, pfn, 
7895                                            complain);
7896         }
7897
7898       if (TREE_SIDE_EFFECTS (pfn))
7899         pfn = save_expr (pfn);
7900
7901       /* Obtain the function pointer and the current DELTA.  */
7902       if (TREE_CODE (pfn) == PTRMEM_CST)
7903         expand_ptrmemfunc_cst (pfn, &delta, &npfn);
7904       else
7905         {
7906           npfn = build_ptrmemfunc_access_expr (pfn, pfn_identifier);
7907           delta = build_ptrmemfunc_access_expr (pfn, delta_identifier);
7908         }
7909
7910       /* Just adjust the DELTA field.  */
7911       gcc_assert  (same_type_ignoring_top_level_qualifiers_p
7912                    (TREE_TYPE (delta), ptrdiff_type_node));
7913       if (TARGET_PTRMEMFUNC_VBIT_LOCATION == ptrmemfunc_vbit_in_delta)
7914         n = cp_build_binary_op (input_location,
7915                                 LSHIFT_EXPR, n, integer_one_node,
7916                                 complain);
7917       delta = cp_build_binary_op (input_location,
7918                                   PLUS_EXPR, delta, n, complain);
7919       return build_ptrmemfunc1 (to_type, delta, npfn);
7920     }
7921
7922   /* Handle null pointer to member function conversions.  */
7923   if (null_ptr_cst_p (pfn))
7924     {
7925       pfn = cp_build_c_cast (type, pfn, complain);
7926       return build_ptrmemfunc1 (to_type,
7927                                 integer_zero_node,
7928                                 pfn);
7929     }
7930
7931   if (type_unknown_p (pfn))
7932     return instantiate_type (type, pfn, complain);
7933
7934   fn = TREE_OPERAND (pfn, 0);
7935   gcc_assert (TREE_CODE (fn) == FUNCTION_DECL
7936               /* In a template, we will have preserved the
7937                  OFFSET_REF.  */
7938               || (processing_template_decl && TREE_CODE (fn) == OFFSET_REF));
7939   return make_ptrmem_cst (to_type, fn);
7940 }
7941
7942 /* Return the DELTA, IDX, PFN, and DELTA2 values for the PTRMEM_CST
7943    given by CST.
7944
7945    ??? There is no consistency as to the types returned for the above
7946    values.  Some code acts as if it were a sizetype and some as if it were
7947    integer_type_node.  */
7948
7949 void
7950 expand_ptrmemfunc_cst (tree cst, tree *delta, tree *pfn)
7951 {
7952   tree type = TREE_TYPE (cst);
7953   tree fn = PTRMEM_CST_MEMBER (cst);
7954   tree ptr_class, fn_class;
7955
7956   gcc_assert (TREE_CODE (fn) == FUNCTION_DECL);
7957
7958   /* The class that the function belongs to.  */
7959   fn_class = DECL_CONTEXT (fn);
7960
7961   /* The class that we're creating a pointer to member of.  */
7962   ptr_class = TYPE_PTRMEMFUNC_OBJECT_TYPE (type);
7963
7964   /* First, calculate the adjustment to the function's class.  */
7965   *delta = get_delta_difference (fn_class, ptr_class, /*force=*/0,
7966                                  /*c_cast_p=*/0, tf_warning_or_error);
7967
7968   if (!DECL_VIRTUAL_P (fn))
7969     *pfn = convert (TYPE_PTRMEMFUNC_FN_TYPE (type),
7970                     build_addr_func (fn, tf_warning_or_error));
7971   else
7972     {
7973       /* If we're dealing with a virtual function, we have to adjust 'this'
7974          again, to point to the base which provides the vtable entry for
7975          fn; the call will do the opposite adjustment.  */
7976       tree orig_class = DECL_CONTEXT (fn);
7977       tree binfo = binfo_or_else (orig_class, fn_class);
7978       *delta = build2 (PLUS_EXPR, TREE_TYPE (*delta),
7979                        *delta, BINFO_OFFSET (binfo));
7980       *delta = fold_if_not_in_template (*delta);
7981
7982       /* We set PFN to the vtable offset at which the function can be
7983          found, plus one (unless ptrmemfunc_vbit_in_delta, in which
7984          case delta is shifted left, and then incremented).  */
7985       *pfn = DECL_VINDEX (fn);
7986       *pfn = build2 (MULT_EXPR, integer_type_node, *pfn,
7987                      TYPE_SIZE_UNIT (vtable_entry_type));
7988       *pfn = fold_if_not_in_template (*pfn);
7989
7990       switch (TARGET_PTRMEMFUNC_VBIT_LOCATION)
7991         {
7992         case ptrmemfunc_vbit_in_pfn:
7993           *pfn = build2 (PLUS_EXPR, integer_type_node, *pfn,
7994                          integer_one_node);
7995           *pfn = fold_if_not_in_template (*pfn);
7996           break;
7997
7998         case ptrmemfunc_vbit_in_delta:
7999           *delta = build2 (LSHIFT_EXPR, TREE_TYPE (*delta),
8000                            *delta, integer_one_node);
8001           *delta = fold_if_not_in_template (*delta);
8002           *delta = build2 (PLUS_EXPR, TREE_TYPE (*delta),
8003                            *delta, integer_one_node);
8004           *delta = fold_if_not_in_template (*delta);
8005           break;
8006
8007         default:
8008           gcc_unreachable ();
8009         }
8010
8011       *pfn = build_nop (TYPE_PTRMEMFUNC_FN_TYPE (type), *pfn);
8012       *pfn = fold_if_not_in_template (*pfn);
8013     }
8014 }
8015
8016 /* Return an expression for PFN from the pointer-to-member function
8017    given by T.  */
8018
8019 static tree
8020 pfn_from_ptrmemfunc (tree t)
8021 {
8022   if (TREE_CODE (t) == PTRMEM_CST)
8023     {
8024       tree delta;
8025       tree pfn;
8026
8027       expand_ptrmemfunc_cst (t, &delta, &pfn);
8028       if (pfn)
8029         return pfn;
8030     }
8031
8032   return build_ptrmemfunc_access_expr (t, pfn_identifier);
8033 }
8034
8035 /* Return an expression for DELTA from the pointer-to-member function
8036    given by T.  */
8037
8038 static tree
8039 delta_from_ptrmemfunc (tree t)
8040 {
8041   if (TREE_CODE (t) == PTRMEM_CST)
8042     {
8043       tree delta;
8044       tree pfn;
8045
8046       expand_ptrmemfunc_cst (t, &delta, &pfn);
8047       if (delta)
8048         return delta;
8049     }
8050
8051   return build_ptrmemfunc_access_expr (t, delta_identifier);
8052 }
8053
8054 /* Convert value RHS to type TYPE as preparation for an assignment to
8055    an lvalue of type TYPE.  ERRTYPE indicates what kind of error the
8056    implicit conversion is.  If FNDECL is non-NULL, we are doing the
8057    conversion in order to pass the PARMNUMth argument of FNDECL.
8058    If FNDECL is NULL, we are doing the conversion in function pointer
8059    argument passing, conversion in initialization, etc. */
8060
8061 static tree
8062 convert_for_assignment (tree type, tree rhs,
8063                         impl_conv_rhs errtype, tree fndecl, int parmnum,
8064                         tsubst_flags_t complain, int flags)
8065 {
8066   tree rhstype;
8067   enum tree_code coder;
8068
8069   /* Strip NON_LVALUE_EXPRs since we aren't using as an lvalue.  */
8070   if (TREE_CODE (rhs) == NON_LVALUE_EXPR)
8071     rhs = TREE_OPERAND (rhs, 0);
8072
8073   rhstype = TREE_TYPE (rhs);
8074   coder = TREE_CODE (rhstype);
8075
8076   if (TREE_CODE (type) == VECTOR_TYPE && coder == VECTOR_TYPE
8077       && vector_types_convertible_p (type, rhstype, true))
8078     {
8079       rhs = mark_rvalue_use (rhs);
8080       return convert (type, rhs);
8081     }
8082
8083   if (rhs == error_mark_node || rhstype == error_mark_node)
8084     return error_mark_node;
8085   if (TREE_CODE (rhs) == TREE_LIST && TREE_VALUE (rhs) == error_mark_node)
8086     return error_mark_node;
8087
8088   /* The RHS of an assignment cannot have void type.  */
8089   if (coder == VOID_TYPE)
8090     {
8091       if (complain & tf_error)
8092         error ("void value not ignored as it ought to be");
8093       return error_mark_node;
8094     }
8095
8096   if (c_dialect_objc ())
8097     {
8098       int parmno;
8099       tree selector;
8100       tree rname = fndecl;
8101
8102       switch (errtype)
8103         {
8104           case ICR_ASSIGN:
8105             parmno = -1;
8106             break;
8107           case ICR_INIT:
8108             parmno = -2;
8109             break;
8110           default:
8111             selector = objc_message_selector ();
8112             parmno = parmnum;
8113             if (selector && parmno > 1)
8114               {
8115                 rname = selector;
8116                 parmno -= 1;
8117               }
8118         }
8119
8120       if (objc_compare_types (type, rhstype, parmno, rname))
8121         {
8122           rhs = mark_rvalue_use (rhs);
8123           return convert (type, rhs);
8124         }
8125     }
8126
8127   /* [expr.ass]
8128
8129      The expression is implicitly converted (clause _conv_) to the
8130      cv-unqualified type of the left operand.
8131
8132      We allow bad conversions here because by the time we get to this point
8133      we are committed to doing the conversion.  If we end up doing a bad
8134      conversion, convert_like will complain.  */
8135   if (!can_convert_arg_bad (type, rhstype, rhs, flags, complain))
8136     {
8137       /* When -Wno-pmf-conversions is use, we just silently allow
8138          conversions from pointers-to-members to plain pointers.  If
8139          the conversion doesn't work, cp_convert will complain.  */
8140       if (!warn_pmf2ptr
8141           && TYPE_PTR_P (type)
8142           && TYPE_PTRMEMFUNC_P (rhstype))
8143         rhs = cp_convert (strip_top_quals (type), rhs, complain);
8144       else
8145         {
8146           if (complain & tf_error)
8147             {
8148               /* If the right-hand side has unknown type, then it is an
8149                  overloaded function.  Call instantiate_type to get error
8150                  messages.  */
8151               if (rhstype == unknown_type_node)
8152                 instantiate_type (type, rhs, tf_warning_or_error);
8153               else if (fndecl)
8154                 error ("cannot convert %qT to %qT for argument %qP to %qD",
8155                        rhstype, type, parmnum, fndecl);
8156               else
8157                 switch (errtype)
8158                   {
8159                     case ICR_DEFAULT_ARGUMENT:
8160                       error ("cannot convert %qT to %qT in default argument",
8161                              rhstype, type);
8162                       break;
8163                     case ICR_ARGPASS:
8164                       error ("cannot convert %qT to %qT in argument passing",
8165                              rhstype, type);
8166                       break;
8167                     case ICR_CONVERTING:
8168                       error ("cannot convert %qT to %qT",
8169                              rhstype, type);
8170                       break;
8171                     case ICR_INIT:
8172                       error ("cannot convert %qT to %qT in initialization",
8173                              rhstype, type);
8174                       break;
8175                     case ICR_RETURN:
8176                       error ("cannot convert %qT to %qT in return",
8177                              rhstype, type);
8178                       break;
8179                     case ICR_ASSIGN:
8180                       error ("cannot convert %qT to %qT in assignment",
8181                              rhstype, type);
8182                       break;
8183                     default:
8184                       gcc_unreachable();
8185                   }
8186               if (TYPE_PTR_P (rhstype)
8187                   && TYPE_PTR_P (type)
8188                   && CLASS_TYPE_P (TREE_TYPE (rhstype))
8189                   && CLASS_TYPE_P (TREE_TYPE (type))
8190                   && !COMPLETE_TYPE_P (TREE_TYPE (rhstype)))
8191                 inform (DECL_SOURCE_LOCATION (TYPE_MAIN_DECL
8192                                               (TREE_TYPE (rhstype))),
8193                         "class type %qT is incomplete", TREE_TYPE (rhstype));
8194             }
8195           return error_mark_node;
8196         }
8197     }
8198   if (warn_suggest_attribute_format)
8199     {
8200       const enum tree_code codel = TREE_CODE (type);
8201       if ((codel == POINTER_TYPE || codel == REFERENCE_TYPE)
8202           && coder == codel
8203           && check_missing_format_attribute (type, rhstype)
8204           && (complain & tf_warning))
8205         switch (errtype)
8206           {
8207             case ICR_ARGPASS:
8208             case ICR_DEFAULT_ARGUMENT:
8209               if (fndecl)
8210                 warning (OPT_Wsuggest_attribute_format,
8211                          "parameter %qP of %qD might be a candidate "
8212                          "for a format attribute", parmnum, fndecl);
8213               else
8214                 warning (OPT_Wsuggest_attribute_format,
8215                          "parameter might be a candidate "
8216                          "for a format attribute");
8217               break;
8218             case ICR_CONVERTING:
8219               warning (OPT_Wsuggest_attribute_format,
8220                        "target of conversion might be a candidate "
8221                        "for a format attribute");
8222               break;
8223             case ICR_INIT:
8224               warning (OPT_Wsuggest_attribute_format,
8225                        "target of initialization might be a candidate "
8226                        "for a format attribute");
8227               break;
8228             case ICR_RETURN:
8229               warning (OPT_Wsuggest_attribute_format,
8230                        "return type might be a candidate "
8231                        "for a format attribute");
8232               break;
8233             case ICR_ASSIGN:
8234               warning (OPT_Wsuggest_attribute_format,
8235                        "left-hand side of assignment might be a candidate "
8236                        "for a format attribute");
8237               break;
8238             default:
8239               gcc_unreachable();
8240           }
8241     }
8242
8243   /* If -Wparentheses, warn about a = b = c when a has type bool and b
8244      does not.  */
8245   if (warn_parentheses
8246       && TREE_CODE (type) == BOOLEAN_TYPE
8247       && TREE_CODE (rhs) == MODIFY_EXPR
8248       && !TREE_NO_WARNING (rhs)
8249       && TREE_CODE (TREE_TYPE (rhs)) != BOOLEAN_TYPE
8250       && (complain & tf_warning))
8251     {
8252       location_t loc = EXPR_LOC_OR_LOC (rhs, input_location);
8253
8254       warning_at (loc, OPT_Wparentheses,
8255                   "suggest parentheses around assignment used as truth value");
8256       TREE_NO_WARNING (rhs) = 1;
8257     }
8258
8259   return perform_implicit_conversion_flags (strip_top_quals (type), rhs,
8260                                             complain, flags);
8261 }
8262
8263 /* Convert RHS to be of type TYPE.
8264    If EXP is nonzero, it is the target of the initialization.
8265    ERRTYPE indicates what kind of error the implicit conversion is.
8266
8267    Two major differences between the behavior of
8268    `convert_for_assignment' and `convert_for_initialization'
8269    are that references are bashed in the former, while
8270    copied in the latter, and aggregates are assigned in
8271    the former (operator=) while initialized in the
8272    latter (X(X&)).
8273
8274    If using constructor make sure no conversion operator exists, if one does
8275    exist, an ambiguity exists.  */
8276
8277 tree
8278 convert_for_initialization (tree exp, tree type, tree rhs, int flags,
8279                             impl_conv_rhs errtype, tree fndecl, int parmnum,
8280                             tsubst_flags_t complain)
8281 {
8282   enum tree_code codel = TREE_CODE (type);
8283   tree rhstype;
8284   enum tree_code coder;
8285
8286   /* build_c_cast puts on a NOP_EXPR to make the result not an lvalue.
8287      Strip such NOP_EXPRs, since RHS is used in non-lvalue context.  */
8288   if (TREE_CODE (rhs) == NOP_EXPR
8289       && TREE_TYPE (rhs) == TREE_TYPE (TREE_OPERAND (rhs, 0))
8290       && codel != REFERENCE_TYPE)
8291     rhs = TREE_OPERAND (rhs, 0);
8292
8293   if (type == error_mark_node
8294       || rhs == error_mark_node
8295       || (TREE_CODE (rhs) == TREE_LIST && TREE_VALUE (rhs) == error_mark_node))
8296     return error_mark_node;
8297
8298   if ((TREE_CODE (TREE_TYPE (rhs)) == ARRAY_TYPE
8299        && TREE_CODE (type) != ARRAY_TYPE
8300        && (TREE_CODE (type) != REFERENCE_TYPE
8301            || TREE_CODE (TREE_TYPE (type)) != ARRAY_TYPE))
8302       || (TREE_CODE (TREE_TYPE (rhs)) == FUNCTION_TYPE
8303           && !TYPE_REFFN_P (type))
8304       || TREE_CODE (TREE_TYPE (rhs)) == METHOD_TYPE)
8305     rhs = decay_conversion (rhs, complain);
8306
8307   rhstype = TREE_TYPE (rhs);
8308   coder = TREE_CODE (rhstype);
8309
8310   if (coder == ERROR_MARK)
8311     return error_mark_node;
8312
8313   /* We accept references to incomplete types, so we can
8314      return here before checking if RHS is of complete type.  */
8315
8316   if (codel == REFERENCE_TYPE)
8317     {
8318       /* This should eventually happen in convert_arguments.  */
8319       int savew = 0, savee = 0;
8320
8321       if (fndecl)
8322         savew = warningcount + werrorcount, savee = errorcount;
8323       rhs = initialize_reference (type, rhs, flags, complain);
8324
8325       if (fndecl
8326           && (warningcount + werrorcount > savew || errorcount > savee))
8327         inform (input_location,
8328                 "in passing argument %P of %q+D", parmnum, fndecl);
8329
8330       return rhs;
8331     }
8332
8333   if (exp != 0)
8334     exp = require_complete_type_sfinae (exp, complain);
8335   if (exp == error_mark_node)
8336     return error_mark_node;
8337
8338   rhstype = non_reference (rhstype);
8339
8340   type = complete_type (type);
8341
8342   if (DIRECT_INIT_EXPR_P (type, rhs))
8343     /* Don't try to do copy-initialization if we already have
8344        direct-initialization.  */
8345     return rhs;
8346
8347   if (MAYBE_CLASS_TYPE_P (type))
8348     return perform_implicit_conversion_flags (type, rhs, complain, flags);
8349
8350   return convert_for_assignment (type, rhs, errtype, fndecl, parmnum,
8351                                  complain, flags);
8352 }
8353 \f
8354 /* If RETVAL is the address of, or a reference to, a local variable or
8355    temporary give an appropriate warning and return true.  */
8356
8357 static bool
8358 maybe_warn_about_returning_address_of_local (tree retval)
8359 {
8360   tree valtype = TREE_TYPE (DECL_RESULT (current_function_decl));
8361   tree whats_returned = retval;
8362
8363   for (;;)
8364     {
8365       if (TREE_CODE (whats_returned) == COMPOUND_EXPR)
8366         whats_returned = TREE_OPERAND (whats_returned, 1);
8367       else if (CONVERT_EXPR_P (whats_returned)
8368                || TREE_CODE (whats_returned) == NON_LVALUE_EXPR)
8369         whats_returned = TREE_OPERAND (whats_returned, 0);
8370       else
8371         break;
8372     }
8373
8374   if (TREE_CODE (whats_returned) != ADDR_EXPR)
8375     return false;
8376   whats_returned = TREE_OPERAND (whats_returned, 0);
8377
8378   while (TREE_CODE (whats_returned) == COMPONENT_REF
8379          || TREE_CODE (whats_returned) == ARRAY_REF)
8380     whats_returned = TREE_OPERAND (whats_returned, 0);
8381
8382   if (TREE_CODE (valtype) == REFERENCE_TYPE)
8383     {
8384       if (TREE_CODE (whats_returned) == AGGR_INIT_EXPR
8385           || TREE_CODE (whats_returned) == TARGET_EXPR)
8386         {
8387           warning (OPT_Wreturn_local_addr, "returning reference to temporary");
8388           return true;
8389         }
8390       if (VAR_P (whats_returned)
8391           && DECL_NAME (whats_returned)
8392           && TEMP_NAME_P (DECL_NAME (whats_returned)))
8393         {
8394           warning (OPT_Wreturn_local_addr, "reference to non-lvalue returned");
8395           return true;
8396         }
8397     }
8398
8399   if (DECL_P (whats_returned)
8400       && DECL_NAME (whats_returned)
8401       && DECL_FUNCTION_SCOPE_P (whats_returned)
8402       && !is_capture_proxy (whats_returned)
8403       && !(TREE_STATIC (whats_returned)
8404            || TREE_PUBLIC (whats_returned)))
8405     {
8406       if (TREE_CODE (valtype) == REFERENCE_TYPE)
8407         warning (OPT_Wreturn_local_addr, "reference to local variable %q+D returned",
8408                  whats_returned);
8409       else if (TREE_CODE (whats_returned) == LABEL_DECL)
8410         warning (OPT_Wreturn_local_addr, "address of label %q+D returned",
8411                  whats_returned);
8412       else
8413         warning (OPT_Wreturn_local_addr, "address of local variable %q+D "
8414                  "returned", whats_returned);
8415       return true;
8416     }
8417
8418   return false;
8419 }
8420
8421 /* Check that returning RETVAL from the current function is valid.
8422    Return an expression explicitly showing all conversions required to
8423    change RETVAL into the function return type, and to assign it to
8424    the DECL_RESULT for the function.  Set *NO_WARNING to true if
8425    code reaches end of non-void function warning shouldn't be issued
8426    on this RETURN_EXPR.  */
8427
8428 tree
8429 check_return_expr (tree retval, bool *no_warning)
8430 {
8431   tree result;
8432   /* The type actually returned by the function.  */
8433   tree valtype;
8434   /* The type the function is declared to return, or void if
8435      the declared type is incomplete.  */
8436   tree functype;
8437   int fn_returns_value_p;
8438   bool named_return_value_okay_p;
8439
8440   *no_warning = false;
8441
8442   if (flag_cilkplus && retval && contains_cilk_spawn_stmt (retval))
8443     {
8444       error_at (EXPR_LOCATION (retval), "use of %<_Cilk_spawn%> in a return "
8445                 "statement is not allowed");
8446       return NULL_TREE;
8447     }
8448
8449   /* A `volatile' function is one that isn't supposed to return, ever.
8450      (This is a G++ extension, used to get better code for functions
8451      that call the `volatile' function.)  */
8452   if (TREE_THIS_VOLATILE (current_function_decl))
8453     warning (0, "function declared %<noreturn%> has a %<return%> statement");
8454
8455   /* Check for various simple errors.  */
8456   if (DECL_DESTRUCTOR_P (current_function_decl))
8457     {
8458       if (retval)
8459         error ("returning a value from a destructor");
8460       return NULL_TREE;
8461     }
8462   else if (DECL_CONSTRUCTOR_P (current_function_decl))
8463     {
8464       if (in_function_try_handler)
8465         /* If a return statement appears in a handler of the
8466            function-try-block of a constructor, the program is ill-formed.  */
8467         error ("cannot return from a handler of a function-try-block of a constructor");
8468       else if (retval)
8469         /* You can't return a value from a constructor.  */
8470         error ("returning a value from a constructor");
8471       return NULL_TREE;
8472     }
8473
8474   if (processing_template_decl)
8475     {
8476       current_function_returns_value = 1;
8477       if (check_for_bare_parameter_packs (retval))
8478         retval = error_mark_node;
8479       return retval;
8480     }
8481
8482   functype = TREE_TYPE (TREE_TYPE (current_function_decl));
8483
8484   /* Deduce auto return type from a return statement.  */
8485   if (current_function_auto_return_pattern)
8486     {
8487       tree auto_node;
8488       tree type;
8489
8490       if (!retval && !is_auto (current_function_auto_return_pattern))
8491         {
8492           /* Give a helpful error message.  */
8493           error ("return-statement with no value, in function returning %qT",
8494                  current_function_auto_return_pattern);
8495           inform (input_location, "only plain %<auto%> return type can be "
8496                   "deduced to %<void%>");
8497           type = error_mark_node;
8498         }
8499       else if (retval && BRACE_ENCLOSED_INITIALIZER_P (retval))
8500         {
8501           error ("returning initializer list");
8502           type = error_mark_node;
8503         }
8504       else
8505         {
8506           if (!retval)
8507             retval = void_node;
8508           auto_node = type_uses_auto (current_function_auto_return_pattern);
8509           type = do_auto_deduction (current_function_auto_return_pattern,
8510                                     retval, auto_node);
8511         }
8512
8513       if (type == error_mark_node)
8514         /* Leave it.  */;
8515       else if (functype == current_function_auto_return_pattern)
8516         apply_deduced_return_type (current_function_decl, type);
8517       else
8518         /* A mismatch should have been diagnosed in do_auto_deduction.  */
8519         gcc_assert (same_type_p (type, functype));
8520       functype = type;
8521     }
8522
8523   /* When no explicit return-value is given in a function with a named
8524      return value, the named return value is used.  */
8525   result = DECL_RESULT (current_function_decl);
8526   valtype = TREE_TYPE (result);
8527   gcc_assert (valtype != NULL_TREE);
8528   fn_returns_value_p = !VOID_TYPE_P (valtype);
8529   if (!retval && DECL_NAME (result) && fn_returns_value_p)
8530     retval = result;
8531
8532   /* Check for a return statement with no return value in a function
8533      that's supposed to return a value.  */
8534   if (!retval && fn_returns_value_p)
8535     {
8536       if (functype != error_mark_node)
8537         permerror (input_location, "return-statement with no value, in "
8538                    "function returning %qT", valtype);
8539       /* Remember that this function did return.  */
8540       current_function_returns_value = 1;
8541       /* And signal caller that TREE_NO_WARNING should be set on the
8542          RETURN_EXPR to avoid control reaches end of non-void function
8543          warnings in tree-cfg.c.  */
8544       *no_warning = true;
8545     }
8546   /* Check for a return statement with a value in a function that
8547      isn't supposed to return a value.  */
8548   else if (retval && !fn_returns_value_p)
8549     {
8550       if (VOID_TYPE_P (TREE_TYPE (retval)))
8551         /* You can return a `void' value from a function of `void'
8552            type.  In that case, we have to evaluate the expression for
8553            its side-effects.  */
8554           finish_expr_stmt (retval);
8555       else
8556         permerror (input_location, "return-statement with a value, in function "
8557                    "returning 'void'");
8558       current_function_returns_null = 1;
8559
8560       /* There's really no value to return, after all.  */
8561       return NULL_TREE;
8562     }
8563   else if (!retval)
8564     /* Remember that this function can sometimes return without a
8565        value.  */
8566     current_function_returns_null = 1;
8567   else
8568     /* Remember that this function did return a value.  */
8569     current_function_returns_value = 1;
8570
8571   /* Check for erroneous operands -- but after giving ourselves a
8572      chance to provide an error about returning a value from a void
8573      function.  */
8574   if (error_operand_p (retval))
8575     {
8576       current_function_return_value = error_mark_node;
8577       return error_mark_node;
8578     }
8579
8580   /* Only operator new(...) throw(), can return NULL [expr.new/13].  */
8581   if ((DECL_OVERLOADED_OPERATOR_P (current_function_decl) == NEW_EXPR
8582        || DECL_OVERLOADED_OPERATOR_P (current_function_decl) == VEC_NEW_EXPR)
8583       && !TYPE_NOTHROW_P (TREE_TYPE (current_function_decl))
8584       && ! flag_check_new
8585       && retval && null_ptr_cst_p (retval))
8586     warning (0, "%<operator new%> must not return NULL unless it is "
8587              "declared %<throw()%> (or -fcheck-new is in effect)");
8588
8589   /* Effective C++ rule 15.  See also start_function.  */
8590   if (warn_ecpp
8591       && DECL_NAME (current_function_decl) == ansi_assopname(NOP_EXPR))
8592     {
8593       bool warn = true;
8594
8595       /* The function return type must be a reference to the current
8596         class.  */
8597       if (TREE_CODE (valtype) == REFERENCE_TYPE
8598           && same_type_ignoring_top_level_qualifiers_p
8599               (TREE_TYPE (valtype), TREE_TYPE (current_class_ref)))
8600         {
8601           /* Returning '*this' is obviously OK.  */
8602           if (retval == current_class_ref)
8603             warn = false;
8604           /* If we are calling a function whose return type is the same of
8605              the current class reference, it is ok.  */
8606           else if (INDIRECT_REF_P (retval)
8607                    && TREE_CODE (TREE_OPERAND (retval, 0)) == CALL_EXPR)
8608             warn = false;
8609         }
8610
8611       if (warn)
8612         warning (OPT_Weffc__, "%<operator=%> should return a reference to %<*this%>");
8613     }
8614
8615   /* The fabled Named Return Value optimization, as per [class.copy]/15:
8616
8617      [...]      For  a function with a class return type, if the expression
8618      in the return statement is the name of a local  object,  and  the  cv-
8619      unqualified  type  of  the  local  object  is the same as the function
8620      return type, an implementation is permitted to omit creating the  tem-
8621      porary  object  to  hold  the function return value [...]
8622
8623      So, if this is a value-returning function that always returns the same
8624      local variable, remember it.
8625
8626      It might be nice to be more flexible, and choose the first suitable
8627      variable even if the function sometimes returns something else, but
8628      then we run the risk of clobbering the variable we chose if the other
8629      returned expression uses the chosen variable somehow.  And people expect
8630      this restriction, anyway.  (jason 2000-11-19)
8631
8632      See finish_function and finalize_nrv for the rest of this optimization.  */
8633
8634   named_return_value_okay_p = 
8635     (retval != NULL_TREE
8636      /* Must be a local, automatic variable.  */
8637      && VAR_P (retval)
8638      && DECL_CONTEXT (retval) == current_function_decl
8639      && ! TREE_STATIC (retval)
8640      /* And not a lambda or anonymous union proxy.  */
8641      && !DECL_HAS_VALUE_EXPR_P (retval)
8642      && (DECL_ALIGN (retval) <= DECL_ALIGN (result))
8643      /* The cv-unqualified type of the returned value must be the
8644         same as the cv-unqualified return type of the
8645         function.  */
8646      && same_type_p ((TYPE_MAIN_VARIANT (TREE_TYPE (retval))),
8647                      (TYPE_MAIN_VARIANT (functype)))
8648      /* And the returned value must be non-volatile.  */
8649      && ! TYPE_VOLATILE (TREE_TYPE (retval)));
8650      
8651   if (fn_returns_value_p && flag_elide_constructors)
8652     {
8653       if (named_return_value_okay_p
8654           && (current_function_return_value == NULL_TREE
8655               || current_function_return_value == retval))
8656         current_function_return_value = retval;
8657       else
8658         current_function_return_value = error_mark_node;
8659     }
8660
8661   /* We don't need to do any conversions when there's nothing being
8662      returned.  */
8663   if (!retval)
8664     return NULL_TREE;
8665
8666   /* Do any required conversions.  */
8667   if (retval == result || DECL_CONSTRUCTOR_P (current_function_decl))
8668     /* No conversions are required.  */
8669     ;
8670   else
8671     {
8672       int flags = LOOKUP_NORMAL | LOOKUP_ONLYCONVERTING;
8673
8674       /* The functype's return type will have been set to void, if it
8675          was an incomplete type.  Just treat this as 'return;' */
8676       if (VOID_TYPE_P (functype))
8677         return error_mark_node;
8678
8679       /* If we had an id-expression obfuscated by force_paren_expr, we need
8680          to undo it so we can try to treat it as an rvalue below.  */
8681       if (cxx_dialect >= cxx14
8682           && INDIRECT_REF_P (retval)
8683           && REF_PARENTHESIZED_P (retval))
8684         {
8685           retval = TREE_OPERAND (retval, 0);
8686           while (TREE_CODE (retval) == NON_LVALUE_EXPR
8687                  || TREE_CODE (retval) == NOP_EXPR)
8688             retval = TREE_OPERAND (retval, 0);
8689           gcc_assert (TREE_CODE (retval) == ADDR_EXPR);
8690           retval = TREE_OPERAND (retval, 0);
8691         }
8692
8693       /* Under C++11 [12.8/32 class.copy], a returned lvalue is sometimes
8694          treated as an rvalue for the purposes of overload resolution to
8695          favor move constructors over copy constructors.
8696
8697          Note that these conditions are similar to, but not as strict as,
8698          the conditions for the named return value optimization.  */
8699       if ((cxx_dialect != cxx98)
8700           && ((VAR_P (retval) && !DECL_HAS_VALUE_EXPR_P (retval))
8701               || TREE_CODE (retval) == PARM_DECL)
8702           && DECL_CONTEXT (retval) == current_function_decl
8703           && !TREE_STATIC (retval)
8704           /* This is only interesting for class type.  */
8705           && CLASS_TYPE_P (functype))
8706         flags = flags | LOOKUP_PREFER_RVALUE;
8707
8708       /* First convert the value to the function's return type, then
8709          to the type of return value's location to handle the
8710          case that functype is smaller than the valtype.  */
8711       retval = convert_for_initialization
8712         (NULL_TREE, functype, retval, flags, ICR_RETURN, NULL_TREE, 0,
8713          tf_warning_or_error);
8714       retval = convert (valtype, retval);
8715
8716       /* If the conversion failed, treat this just like `return;'.  */
8717       if (retval == error_mark_node)
8718         return retval;
8719       /* We can't initialize a register from a AGGR_INIT_EXPR.  */
8720       else if (! cfun->returns_struct
8721                && TREE_CODE (retval) == TARGET_EXPR
8722                && TREE_CODE (TREE_OPERAND (retval, 1)) == AGGR_INIT_EXPR)
8723         retval = build2 (COMPOUND_EXPR, TREE_TYPE (retval), retval,
8724                          TREE_OPERAND (retval, 0));
8725       else if (maybe_warn_about_returning_address_of_local (retval))
8726         retval = build2 (COMPOUND_EXPR, TREE_TYPE (retval), retval,
8727                          build_zero_cst (TREE_TYPE (retval)));
8728     }
8729
8730   /* Actually copy the value returned into the appropriate location.  */
8731   if (retval && retval != result)
8732     retval = build2 (INIT_EXPR, TREE_TYPE (result), result, retval);
8733
8734   return retval;
8735 }
8736
8737 \f
8738 /* Returns nonzero if the pointer-type FROM can be converted to the
8739    pointer-type TO via a qualification conversion.  If CONSTP is -1,
8740    then we return nonzero if the pointers are similar, and the
8741    cv-qualification signature of FROM is a proper subset of that of TO.
8742
8743    If CONSTP is positive, then all outer pointers have been
8744    const-qualified.  */
8745
8746 static int
8747 comp_ptr_ttypes_real (tree to, tree from, int constp)
8748 {
8749   bool to_more_cv_qualified = false;
8750   bool is_opaque_pointer = false;
8751
8752   for (; ; to = TREE_TYPE (to), from = TREE_TYPE (from))
8753     {
8754       if (TREE_CODE (to) != TREE_CODE (from))
8755         return 0;
8756
8757       if (TREE_CODE (from) == OFFSET_TYPE
8758           && !same_type_p (TYPE_OFFSET_BASETYPE (from),
8759                            TYPE_OFFSET_BASETYPE (to)))
8760         return 0;
8761
8762       /* Const and volatile mean something different for function types,
8763          so the usual checks are not appropriate.  */
8764       if (TREE_CODE (to) != FUNCTION_TYPE && TREE_CODE (to) != METHOD_TYPE)
8765         {
8766           if (!at_least_as_qualified_p (to, from))
8767             return 0;
8768
8769           if (!at_least_as_qualified_p (from, to))
8770             {
8771               if (constp == 0)
8772                 return 0;
8773               to_more_cv_qualified = true;
8774             }
8775
8776           if (constp > 0)
8777             constp &= TYPE_READONLY (to);
8778         }
8779
8780       if (TREE_CODE (to) == VECTOR_TYPE)
8781         is_opaque_pointer = vector_targets_convertible_p (to, from);
8782
8783       if (!TYPE_PTR_P (to) && !TYPE_PTRDATAMEM_P (to))
8784         return ((constp >= 0 || to_more_cv_qualified)
8785                 && (is_opaque_pointer
8786                     || same_type_ignoring_top_level_qualifiers_p (to, from)));
8787     }
8788 }
8789
8790 /* When comparing, say, char ** to char const **, this function takes
8791    the 'char *' and 'char const *'.  Do not pass non-pointer/reference
8792    types to this function.  */
8793
8794 int
8795 comp_ptr_ttypes (tree to, tree from)
8796 {
8797   return comp_ptr_ttypes_real (to, from, 1);
8798 }
8799
8800 /* Returns true iff FNTYPE is a non-class type that involves
8801    error_mark_node.  We can get FUNCTION_TYPE with buried error_mark_node
8802    if a parameter type is ill-formed.  */
8803
8804 bool
8805 error_type_p (const_tree type)
8806 {
8807   tree t;
8808
8809   switch (TREE_CODE (type))
8810     {
8811     case ERROR_MARK:
8812       return true;
8813
8814     case POINTER_TYPE:
8815     case REFERENCE_TYPE:
8816     case OFFSET_TYPE:
8817       return error_type_p (TREE_TYPE (type));
8818
8819     case FUNCTION_TYPE:
8820     case METHOD_TYPE:
8821       if (error_type_p (TREE_TYPE (type)))
8822         return true;
8823       for (t = TYPE_ARG_TYPES (type); t; t = TREE_CHAIN (t))
8824         if (error_type_p (TREE_VALUE (t)))
8825           return true;
8826       return false;
8827
8828     case RECORD_TYPE:
8829       if (TYPE_PTRMEMFUNC_P (type))
8830         return error_type_p (TYPE_PTRMEMFUNC_FN_TYPE (type));
8831       return false;
8832
8833     default:
8834       return false;
8835     }
8836 }
8837
8838 /* Returns true if to and from are (possibly multi-level) pointers to the same
8839    type or inheritance-related types, regardless of cv-quals.  */
8840
8841 bool
8842 ptr_reasonably_similar (const_tree to, const_tree from)
8843 {
8844   for (; ; to = TREE_TYPE (to), from = TREE_TYPE (from))
8845     {
8846       /* Any target type is similar enough to void.  */
8847       if (VOID_TYPE_P (to))
8848         return !error_type_p (from);
8849       if (VOID_TYPE_P (from))
8850         return !error_type_p (to);
8851
8852       if (TREE_CODE (to) != TREE_CODE (from))
8853         return false;
8854
8855       if (TREE_CODE (from) == OFFSET_TYPE
8856           && comptypes (TYPE_OFFSET_BASETYPE (to),
8857                         TYPE_OFFSET_BASETYPE (from),
8858                         COMPARE_BASE | COMPARE_DERIVED))
8859         continue;
8860
8861       if (TREE_CODE (to) == VECTOR_TYPE
8862           && vector_types_convertible_p (to, from, false))
8863         return true;
8864
8865       if (TREE_CODE (to) == INTEGER_TYPE
8866           && TYPE_PRECISION (to) == TYPE_PRECISION (from))
8867         return true;
8868
8869       if (TREE_CODE (to) == FUNCTION_TYPE)
8870         return !error_type_p (to) && !error_type_p (from);
8871
8872       if (!TYPE_PTR_P (to))
8873         {
8874           /* When either type is incomplete avoid DERIVED_FROM_P,
8875              which may call complete_type (c++/57942).  */
8876           bool b = !COMPLETE_TYPE_P (to) || !COMPLETE_TYPE_P (from);
8877           return comptypes
8878             (TYPE_MAIN_VARIANT (to), TYPE_MAIN_VARIANT (from),
8879              b ? COMPARE_STRICT : COMPARE_BASE | COMPARE_DERIVED);
8880         }
8881     }
8882 }
8883
8884 /* Return true if TO and FROM (both of which are POINTER_TYPEs or
8885    pointer-to-member types) are the same, ignoring cv-qualification at
8886    all levels.  */
8887
8888 bool
8889 comp_ptr_ttypes_const (tree to, tree from)
8890 {
8891   bool is_opaque_pointer = false;
8892
8893   for (; ; to = TREE_TYPE (to), from = TREE_TYPE (from))
8894     {
8895       if (TREE_CODE (to) != TREE_CODE (from))
8896         return false;
8897
8898       if (TREE_CODE (from) == OFFSET_TYPE
8899           && same_type_p (TYPE_OFFSET_BASETYPE (from),
8900                           TYPE_OFFSET_BASETYPE (to)))
8901           continue;
8902
8903       if (TREE_CODE (to) == VECTOR_TYPE)
8904         is_opaque_pointer = vector_targets_convertible_p (to, from);
8905
8906       if (!TYPE_PTR_P (to))
8907         return (is_opaque_pointer
8908                 || same_type_ignoring_top_level_qualifiers_p (to, from));
8909     }
8910 }
8911
8912 /* Returns the type qualifiers for this type, including the qualifiers on the
8913    elements for an array type.  */
8914
8915 int
8916 cp_type_quals (const_tree type)
8917 {
8918   int quals;
8919   /* This CONST_CAST is okay because strip_array_types returns its
8920      argument unmodified and we assign it to a const_tree.  */
8921   type = strip_array_types (CONST_CAST_TREE (type));
8922   if (type == error_mark_node
8923       /* Quals on a FUNCTION_TYPE are memfn quals.  */
8924       || TREE_CODE (type) == FUNCTION_TYPE)
8925     return TYPE_UNQUALIFIED;
8926   quals = TYPE_QUALS (type);
8927   /* METHOD and REFERENCE_TYPEs should never have quals.  */
8928   gcc_assert ((TREE_CODE (type) != METHOD_TYPE
8929                && TREE_CODE (type) != REFERENCE_TYPE)
8930               || ((quals & (TYPE_QUAL_CONST|TYPE_QUAL_VOLATILE))
8931                   == TYPE_UNQUALIFIED));
8932   return quals;
8933 }
8934
8935 /* Returns the function-ref-qualifier for TYPE */
8936
8937 cp_ref_qualifier
8938 type_memfn_rqual (const_tree type)
8939 {
8940   gcc_assert (TREE_CODE (type) == FUNCTION_TYPE
8941               || TREE_CODE (type) == METHOD_TYPE);
8942
8943   if (!FUNCTION_REF_QUALIFIED (type))
8944     return REF_QUAL_NONE;
8945   else if (FUNCTION_RVALUE_QUALIFIED (type))
8946     return REF_QUAL_RVALUE;
8947   else
8948     return REF_QUAL_LVALUE;
8949 }
8950
8951 /* Returns the function-cv-quals for TYPE, which must be a FUNCTION_TYPE or
8952    METHOD_TYPE.  */
8953
8954 int
8955 type_memfn_quals (const_tree type)
8956 {
8957   if (TREE_CODE (type) == FUNCTION_TYPE)
8958     return TYPE_QUALS (type);
8959   else if (TREE_CODE (type) == METHOD_TYPE)
8960     return cp_type_quals (class_of_this_parm (type));
8961   else
8962     gcc_unreachable ();
8963 }
8964
8965 /* Returns the FUNCTION_TYPE TYPE with its function-cv-quals changed to
8966    MEMFN_QUALS and its ref-qualifier to RQUAL. */
8967
8968 tree
8969 apply_memfn_quals (tree type, cp_cv_quals memfn_quals, cp_ref_qualifier rqual)
8970 {
8971   /* Could handle METHOD_TYPE here if necessary.  */
8972   gcc_assert (TREE_CODE (type) == FUNCTION_TYPE);
8973   if (TYPE_QUALS (type) == memfn_quals
8974       && type_memfn_rqual (type) == rqual)
8975     return type;
8976
8977   /* This should really have a different TYPE_MAIN_VARIANT, but that gets
8978      complex.  */
8979   tree result = build_qualified_type (type, memfn_quals);
8980   if (tree canon = TYPE_CANONICAL (result))
8981     if (canon != result)
8982       /* check_qualified_type doesn't check the ref-qualifier, so make sure
8983          TYPE_CANONICAL is correct.  */
8984       TYPE_CANONICAL (result)
8985         = build_ref_qualified_type (canon, type_memfn_rqual (result));
8986   result = build_exception_variant (result, TYPE_RAISES_EXCEPTIONS (type));
8987   return build_ref_qualified_type (result, rqual);
8988 }
8989
8990 /* Returns nonzero if TYPE is const or volatile.  */
8991
8992 bool
8993 cv_qualified_p (const_tree type)
8994 {
8995   int quals = cp_type_quals (type);
8996   return (quals & (TYPE_QUAL_CONST|TYPE_QUAL_VOLATILE)) != 0;
8997 }
8998
8999 /* Returns nonzero if the TYPE contains a mutable member.  */
9000
9001 bool
9002 cp_has_mutable_p (const_tree type)
9003 {
9004   /* This CONST_CAST is okay because strip_array_types returns its
9005      argument unmodified and we assign it to a const_tree.  */
9006   type = strip_array_types (CONST_CAST_TREE(type));
9007
9008   return CLASS_TYPE_P (type) && CLASSTYPE_HAS_MUTABLE (type);
9009 }
9010
9011 /* Set TREE_READONLY and TREE_VOLATILE on DECL as indicated by the
9012    TYPE_QUALS.  For a VAR_DECL, this may be an optimistic
9013    approximation.  In particular, consider:
9014
9015      int f();
9016      struct S { int i; };
9017      const S s = { f(); }
9018
9019    Here, we will make "s" as TREE_READONLY (because it is declared
9020    "const") -- only to reverse ourselves upon seeing that the
9021    initializer is non-constant.  */
9022
9023 void
9024 cp_apply_type_quals_to_decl (int type_quals, tree decl)
9025 {
9026   tree type = TREE_TYPE (decl);
9027
9028   if (type == error_mark_node)
9029     return;
9030
9031   if (TREE_CODE (decl) == TYPE_DECL)
9032     return;
9033
9034   gcc_assert (!(TREE_CODE (type) == FUNCTION_TYPE
9035                 && type_quals != TYPE_UNQUALIFIED));
9036
9037   /* Avoid setting TREE_READONLY incorrectly.  */
9038   /* We used to check TYPE_NEEDS_CONSTRUCTING here, but now a constexpr
9039      constructor can produce constant init, so rely on cp_finish_decl to
9040      clear TREE_READONLY if the variable has non-constant init.  */
9041
9042   /* If the type has (or might have) a mutable component, that component
9043      might be modified.  */
9044   if (TYPE_HAS_MUTABLE_P (type) || !COMPLETE_TYPE_P (type))
9045     type_quals &= ~TYPE_QUAL_CONST;
9046
9047   c_apply_type_quals_to_decl (type_quals, decl);
9048 }
9049
9050 /* Subroutine of casts_away_constness.  Make T1 and T2 point at
9051    exemplar types such that casting T1 to T2 is casting away constness
9052    if and only if there is no implicit conversion from T1 to T2.  */
9053
9054 static void
9055 casts_away_constness_r (tree *t1, tree *t2, tsubst_flags_t complain)
9056 {
9057   int quals1;
9058   int quals2;
9059
9060   /* [expr.const.cast]
9061
9062      For multi-level pointer to members and multi-level mixed pointers
9063      and pointers to members (conv.qual), the "member" aspect of a
9064      pointer to member level is ignored when determining if a const
9065      cv-qualifier has been cast away.  */
9066   /* [expr.const.cast]
9067
9068      For  two  pointer types:
9069
9070             X1 is T1cv1,1 * ... cv1,N *   where T1 is not a pointer type
9071             X2 is T2cv2,1 * ... cv2,M *   where T2 is not a pointer type
9072             K is min(N,M)
9073
9074      casting from X1 to X2 casts away constness if, for a non-pointer
9075      type T there does not exist an implicit conversion (clause
9076      _conv_) from:
9077
9078             Tcv1,(N-K+1) * cv1,(N-K+2) * ... cv1,N *
9079
9080      to
9081
9082             Tcv2,(M-K+1) * cv2,(M-K+2) * ... cv2,M *.  */
9083   if ((!TYPE_PTR_P (*t1) && !TYPE_PTRDATAMEM_P (*t1))
9084       || (!TYPE_PTR_P (*t2) && !TYPE_PTRDATAMEM_P (*t2)))
9085     {
9086       *t1 = cp_build_qualified_type (void_type_node,
9087                                      cp_type_quals (*t1));
9088       *t2 = cp_build_qualified_type (void_type_node,
9089                                      cp_type_quals (*t2));
9090       return;
9091     }
9092
9093   quals1 = cp_type_quals (*t1);
9094   quals2 = cp_type_quals (*t2);
9095
9096   if (TYPE_PTRDATAMEM_P (*t1))
9097     *t1 = TYPE_PTRMEM_POINTED_TO_TYPE (*t1);
9098   else
9099     *t1 = TREE_TYPE (*t1);
9100   if (TYPE_PTRDATAMEM_P (*t2))
9101     *t2 = TYPE_PTRMEM_POINTED_TO_TYPE (*t2);
9102   else
9103     *t2 = TREE_TYPE (*t2);
9104
9105   casts_away_constness_r (t1, t2, complain);
9106   *t1 = build_pointer_type (*t1);
9107   *t2 = build_pointer_type (*t2);
9108   *t1 = cp_build_qualified_type (*t1, quals1);
9109   *t2 = cp_build_qualified_type (*t2, quals2);
9110 }
9111
9112 /* Returns nonzero if casting from TYPE1 to TYPE2 casts away
9113    constness.  
9114
9115    ??? This function returns non-zero if casting away qualifiers not
9116    just const.  We would like to return to the caller exactly which
9117    qualifiers are casted away to give more accurate diagnostics.
9118 */
9119
9120 static bool
9121 casts_away_constness (tree t1, tree t2, tsubst_flags_t complain)
9122 {
9123   if (TREE_CODE (t2) == REFERENCE_TYPE)
9124     {
9125       /* [expr.const.cast]
9126
9127          Casting from an lvalue of type T1 to an lvalue of type T2
9128          using a reference cast casts away constness if a cast from an
9129          rvalue of type "pointer to T1" to the type "pointer to T2"
9130          casts away constness.  */
9131       t1 = (TREE_CODE (t1) == REFERENCE_TYPE ? TREE_TYPE (t1) : t1);
9132       return casts_away_constness (build_pointer_type (t1),
9133                                    build_pointer_type (TREE_TYPE (t2)),
9134                                    complain);
9135     }
9136
9137   if (TYPE_PTRDATAMEM_P (t1) && TYPE_PTRDATAMEM_P (t2))
9138     /* [expr.const.cast]
9139
9140        Casting from an rvalue of type "pointer to data member of X
9141        of type T1" to the type "pointer to data member of Y of type
9142        T2" casts away constness if a cast from an rvalue of type
9143        "pointer to T1" to the type "pointer to T2" casts away
9144        constness.  */
9145     return casts_away_constness
9146       (build_pointer_type (TYPE_PTRMEM_POINTED_TO_TYPE (t1)),
9147        build_pointer_type (TYPE_PTRMEM_POINTED_TO_TYPE (t2)),
9148        complain);
9149
9150   /* Casting away constness is only something that makes sense for
9151      pointer or reference types.  */
9152   if (!TYPE_PTR_P (t1) || !TYPE_PTR_P (t2))
9153     return false;
9154
9155   /* Top-level qualifiers don't matter.  */
9156   t1 = TYPE_MAIN_VARIANT (t1);
9157   t2 = TYPE_MAIN_VARIANT (t2);
9158   casts_away_constness_r (&t1, &t2, complain);
9159   if (!can_convert (t2, t1, complain))
9160     return true;
9161
9162   return false;
9163 }
9164
9165 /* If T is a REFERENCE_TYPE return the type to which T refers.
9166    Otherwise, return T itself.  */
9167
9168 tree
9169 non_reference (tree t)
9170 {
9171   if (t && TREE_CODE (t) == REFERENCE_TYPE)
9172     t = TREE_TYPE (t);
9173   return t;
9174 }
9175
9176
9177 /* Return nonzero if REF is an lvalue valid for this language;
9178    otherwise, print an error message and return zero.  USE says
9179    how the lvalue is being used and so selects the error message.  */
9180
9181 int
9182 lvalue_or_else (tree ref, enum lvalue_use use, tsubst_flags_t complain)
9183 {
9184   cp_lvalue_kind kind = lvalue_kind (ref);
9185
9186   if (kind == clk_none)
9187     {
9188       if (complain & tf_error)
9189         lvalue_error (input_location, use);
9190       return 0;
9191     }
9192   else if (kind & (clk_rvalueref|clk_class))
9193     {
9194       if (!(complain & tf_error))
9195         return 0;
9196       if (kind & clk_class)
9197         /* Make this a permerror because we used to accept it.  */
9198         permerror (input_location, "using temporary as lvalue");
9199       else
9200         error ("using xvalue (rvalue reference) as lvalue");
9201     }
9202   return 1;
9203 }
9204
9205 /* Return true if a user-defined literal operator is a raw operator.  */
9206
9207 bool
9208 check_raw_literal_operator (const_tree decl)
9209 {
9210   tree argtypes = TYPE_ARG_TYPES (TREE_TYPE (decl));
9211   tree argtype;
9212   int arity;
9213   bool maybe_raw_p = false;
9214
9215   /* Count the number and type of arguments and check for ellipsis.  */
9216   for (argtype = argtypes, arity = 0;
9217        argtype && argtype != void_list_node;
9218        ++arity, argtype = TREE_CHAIN (argtype))
9219     {
9220       tree t = TREE_VALUE (argtype);
9221
9222       if (same_type_p (t, const_string_type_node))
9223         maybe_raw_p = true;
9224     }
9225   if (!argtype)
9226     return false; /* Found ellipsis.  */
9227
9228   if (!maybe_raw_p || arity != 1)
9229     return false;
9230
9231   return true;
9232 }
9233
9234
9235 /* Return true if a user-defined literal operator has one of the allowed
9236    argument types.  */
9237
9238 bool
9239 check_literal_operator_args (const_tree decl,
9240                              bool *long_long_unsigned_p, bool *long_double_p)
9241 {
9242   tree argtypes = TYPE_ARG_TYPES (TREE_TYPE (decl));
9243
9244   *long_long_unsigned_p = false;
9245   *long_double_p = false;
9246   if (processing_template_decl || processing_specialization)
9247     return argtypes == void_list_node;
9248   else
9249     {
9250       tree argtype;
9251       int arity;
9252       int max_arity = 2;
9253
9254       /* Count the number and type of arguments and check for ellipsis.  */
9255       for (argtype = argtypes, arity = 0;
9256            argtype && argtype != void_list_node;
9257            argtype = TREE_CHAIN (argtype))
9258         {
9259           tree t = TREE_VALUE (argtype);
9260           ++arity;
9261
9262           if (TYPE_PTR_P (t))
9263             {
9264               bool maybe_raw_p = false;
9265               t = TREE_TYPE (t);
9266               if (cp_type_quals (t) != TYPE_QUAL_CONST)
9267                 return false;
9268               t = TYPE_MAIN_VARIANT (t);
9269               if ((maybe_raw_p = same_type_p (t, char_type_node))
9270                   || same_type_p (t, wchar_type_node)
9271                   || same_type_p (t, char16_type_node)
9272                   || same_type_p (t, char32_type_node))
9273                 {
9274                   argtype = TREE_CHAIN (argtype);
9275                   if (!argtype)
9276                     return false;
9277                   t = TREE_VALUE (argtype);
9278                   if (maybe_raw_p && argtype == void_list_node)
9279                     return true;
9280                   else if (same_type_p (t, size_type_node))
9281                     {
9282                       ++arity;
9283                       continue;
9284                     }
9285                   else
9286                     return false;
9287                 }
9288             }
9289           else if (same_type_p (t, long_long_unsigned_type_node))
9290             {
9291               max_arity = 1;
9292               *long_long_unsigned_p = true;
9293             }
9294           else if (same_type_p (t, long_double_type_node))
9295             {
9296               max_arity = 1;
9297               *long_double_p = true;
9298             }
9299           else if (same_type_p (t, char_type_node))
9300             max_arity = 1;
9301           else if (same_type_p (t, wchar_type_node))
9302             max_arity = 1;
9303           else if (same_type_p (t, char16_type_node))
9304             max_arity = 1;
9305           else if (same_type_p (t, char32_type_node))
9306             max_arity = 1;
9307           else
9308             return false;
9309         }
9310       if (!argtype)
9311         return false; /* Found ellipsis.  */
9312
9313       if (arity != max_arity)
9314         return false;
9315
9316       return true;
9317     }
9318 }