OSDN Git Service

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