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