OSDN Git Service

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